зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1889978 - Vendor ffmpeg master, after 7.0, update and reapply patch, remove old files, move bsf files into the bsf directory. r=media-playback-reviewers,alwu
This stubs out `libavcodec/dovi_rpu.h`. Differential Revision: https://phabricator.services.mozilla.com/D206923
This commit is contained in:
Родитель
64db4178ef
Коммит
a73b968761
2
CLOBBER
2
CLOBBER
|
@ -22,4 +22,4 @@
|
|||
# changes to stick? As of bug 928195, this shouldn't be necessary! Please
|
||||
# don't change CLOBBER for WebIDL changes any more.
|
||||
|
||||
Modified build files in third_party/libwebrtc - Bug 1888181 - Vendor libwebrtc from 414c94290a
|
||||
Bug 1889978 - Changed system header list
|
||||
|
|
|
@ -412,6 +412,8 @@ system_headers = [
|
|||
"LFocusBox.h",
|
||||
"LGrafPortView.h",
|
||||
"LHandleStream.h",
|
||||
"libavutil/mem.h",
|
||||
"libavutil/cpu.h",
|
||||
"libc_r.h",
|
||||
"libelf.h",
|
||||
"libelf/libelf.h",
|
||||
|
|
|
@ -36,6 +36,9 @@ Then, make sure the files:
|
|||
include conditional compilation directives, by probably reverting them (or
|
||||
reverting and adjusting them if new codecs are added).
|
||||
|
||||
Revert and adjust libavcodec `dovi_rpu.h` so that it contains just the necessary
|
||||
stubs to compile.
|
||||
|
||||
## Add headers for a new major ffmpeg version
|
||||
|
||||
If a new major version of ffmpeg is being imported in the tree, it's necessary
|
||||
|
|
|
@ -1,21 +1,11 @@
|
|||
diff --git a/media/ffvpx/libavutil/eval.c b/media/ffvpx/libavutil/eval.c
|
||||
index 7642b91..e938bd5 100644
|
||||
--- a/media/ffvpx/libavutil/eval.c
|
||||
+++ b/media/ffvpx/libavutil/eval.c
|
||||
@@ -34,7 +34,7 @@
|
||||
#include "internal.h"
|
||||
#include "log.h"
|
||||
#include "mathematics.h"
|
||||
-#include "time.h"
|
||||
+#include "fftime.h"
|
||||
#include "avstring.h"
|
||||
#include "timer.h"
|
||||
|
||||
diff --git a/media/ffvpx/libavutil/time.c b/media/ffvpx/libavutil/time.c
|
||||
index dbaee02..69419e6 100644
|
||||
--- a/media/ffvpx/libavutil/time.c
|
||||
+++ b/media/ffvpx/libavutil/time.c
|
||||
@@ -33,7 +33,7 @@
|
||||
--- a/libavutil/time.c 2024-02-14 14:57:10.389087159 +0100
|
||||
+++ b/libavutil/time.c 2024-04-05 14:43:19.097889433 +0200
|
||||
@@ -28,17 +28,17 @@
|
||||
#endif
|
||||
#if HAVE_UNISTD_H
|
||||
#include <unistd.h>
|
||||
#endif
|
||||
#if HAVE_WINDOWS_H
|
||||
#include <windows.h>
|
||||
#endif
|
||||
|
||||
|
@ -24,11 +14,19 @@ index dbaee02..69419e6 100644
|
|||
#include "error.h"
|
||||
|
||||
int64_t av_gettime(void)
|
||||
diff --git a/media/ffvpx/libavutil/parseutils.c b/media/ffvpx/libavutil/parseutils.c
|
||||
index 9fb8d0a..97ad3b9 100644
|
||||
--- a/media/ffvpx/libavutil/parseutils.c
|
||||
+++ b/media/ffvpx/libavutil/parseutils.c
|
||||
@@ -28,7 +28,7 @@
|
||||
{
|
||||
#if HAVE_GETTIMEOFDAY
|
||||
struct timeval tv;
|
||||
gettimeofday(&tv, NULL);
|
||||
return (int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
|
||||
--- a/libavutil/parseutils.c 2024-03-26 14:03:12.080640731 +0100
|
||||
+++ b/libavutil/parseutils.c 2024-04-05 14:44:56.508766832 +0200
|
||||
@@ -23,20 +23,20 @@
|
||||
|
||||
#include <time.h>
|
||||
|
||||
#include "avstring.h"
|
||||
#include "avutil.h"
|
||||
#include "common.h"
|
||||
#include "eval.h"
|
||||
#include "log.h"
|
||||
|
@ -36,8 +34,22 @@ index 9fb8d0a..97ad3b9 100644
|
|||
+/* #include "random_seed.h" */
|
||||
#include "time_internal.h"
|
||||
#include "parseutils.h"
|
||||
-#include "time.h"
|
||||
+#include "fftime.h"
|
||||
|
||||
@@ -367,7 +367,7 @@ int av_parse_color(uint8_t *rgba_color, const char *color_string, int slen,
|
||||
#ifdef TEST
|
||||
|
||||
#define av_get_random_seed av_get_random_seed_deterministic
|
||||
static uint32_t av_get_random_seed_deterministic(void);
|
||||
|
||||
#define av_gettime() 1331972053200000
|
||||
|
||||
@@ -370,17 +370,17 @@
|
||||
av_strlcpy(color_string2, color_string + hex_offset,
|
||||
FFMIN(slen-hex_offset+1, sizeof(color_string2)));
|
||||
if ((tail = strchr(color_string2, ALPHA_SEP)))
|
||||
*tail++ = 0;
|
||||
len = strlen(color_string2);
|
||||
rgba_color[3] = 255;
|
||||
|
||||
if (!av_strcasecmp(color_string2, "random") || !av_strcasecmp(color_string2, "bikeshed")) {
|
||||
|
@ -46,37 +58,29 @@ index 9fb8d0a..97ad3b9 100644
|
|||
rgba_color[0] = rgba >> 24;
|
||||
rgba_color[1] = rgba >> 16;
|
||||
rgba_color[2] = rgba >> 8;
|
||||
diff -up media/ffvpx/libavutil/fftime.h media/ffvpx/libavutil/fftime.h
|
||||
--- media/ffvpx/libavutil/fftime.h 2021-12-06 14:51:40.378642713 +0100
|
||||
+++ media/ffvpx/libavutil/fftime.h 2021-12-06 14:51:54.618098212 +0100
|
||||
@@ -22,6 +22,7 @@
|
||||
#define AVUTIL_TIME_H
|
||||
|
||||
#include <stdint.h>
|
||||
+#include <time.h>
|
||||
|
||||
/**
|
||||
* Get the current time in microseconds.
|
||||
*
|
||||
diff --git a/media/ffvpx/compat/w32pthreads.h b/media/ffvpx/compat/w32pthreads.h
|
||||
--- a/media/ffvpx/compat/w32pthreads.h
|
||||
+++ b/media/ffvpx/compat/w32pthreads.h
|
||||
@@ -39,17 +39,17 @@
|
||||
#include <windows.h>
|
||||
#include <process.h>
|
||||
#include <time.h>
|
||||
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/internal.h"
|
||||
#include "libavutil/mem.h"
|
||||
-#include "libavutil/time.h"
|
||||
+#include "libavutil/fftime.h"
|
||||
|
||||
typedef struct pthread_t {
|
||||
void *handle;
|
||||
void *(*func)(void* arg);
|
||||
void *arg;
|
||||
void *ret;
|
||||
} pthread_t;
|
||||
rgba_color[3] = rgba;
|
||||
} else if (hex_offset ||
|
||||
strspn(color_string2, "0123456789ABCDEFabcdef") == len) {
|
||||
char *tail;
|
||||
unsigned int rgba = strtoul(color_string2, &tail, 16);
|
||||
--- a/libavutil/eval.c 2024-04-05 14:40:56.917791496 +0200
|
||||
+++ b/libavutil/eval.c 2024-04-05 17:39:45.061516936 +0200
|
||||
@@ -31,17 +31,17 @@
|
||||
#include "avutil.h"
|
||||
#include "common.h"
|
||||
#include "eval.h"
|
||||
#include "ffmath.h"
|
||||
#include "log.h"
|
||||
#include "mathematics.h"
|
||||
#include "mem.h"
|
||||
#include "sfc64.h"
|
||||
-#include "time.h"
|
||||
+#include "fftime.h"
|
||||
#include "avstring.h"
|
||||
#include "reverse.h"
|
||||
|
||||
typedef struct Parser {
|
||||
const AVClass *class;
|
||||
int stack_index;
|
||||
char *s;
|
||||
const double *const_values;
|
||||
|
|
|
@ -61,10 +61,6 @@ extern const FFCodec ff_avrn_decoder;
|
|||
extern const FFCodec ff_avs_decoder;
|
||||
extern const FFCodec ff_avui_encoder;
|
||||
extern const FFCodec ff_avui_decoder;
|
||||
#if FF_API_AYUV_CODECID
|
||||
extern const FFCodec ff_ayuv_encoder;
|
||||
extern const FFCodec ff_ayuv_decoder;
|
||||
#endif
|
||||
extern const FFCodec ff_bethsoftvid_decoder;
|
||||
extern const FFCodec ff_bfi_decoder;
|
||||
extern const FFCodec ff_bink_decoder;
|
||||
|
@ -152,7 +148,6 @@ extern const FFCodec ff_h263p_encoder;
|
|||
extern const FFCodec ff_h263p_decoder;
|
||||
extern const FFCodec ff_h263_v4l2m2m_decoder;
|
||||
extern const FFCodec ff_h264_decoder;
|
||||
extern const FFCodec ff_h264_crystalhd_decoder;
|
||||
extern const FFCodec ff_h264_v4l2m2m_decoder;
|
||||
extern const FFCodec ff_h264_mediacodec_decoder;
|
||||
extern const FFCodec ff_h264_mediacodec_encoder;
|
||||
|
@ -211,13 +206,11 @@ extern const FFCodec ff_mpeg2video_encoder;
|
|||
extern const FFCodec ff_mpeg2video_decoder;
|
||||
extern const FFCodec ff_mpeg4_encoder;
|
||||
extern const FFCodec ff_mpeg4_decoder;
|
||||
extern const FFCodec ff_mpeg4_crystalhd_decoder;
|
||||
extern const FFCodec ff_mpeg4_v4l2m2m_decoder;
|
||||
extern const FFCodec ff_mpeg4_mmal_decoder;
|
||||
extern const FFCodec ff_mpegvideo_decoder;
|
||||
extern const FFCodec ff_mpeg1_v4l2m2m_decoder;
|
||||
extern const FFCodec ff_mpeg2_mmal_decoder;
|
||||
extern const FFCodec ff_mpeg2_crystalhd_decoder;
|
||||
extern const FFCodec ff_mpeg2_v4l2m2m_decoder;
|
||||
extern const FFCodec ff_mpeg2_qsv_decoder;
|
||||
extern const FFCodec ff_mpeg2_mediacodec_decoder;
|
||||
|
@ -228,7 +221,6 @@ extern const FFCodec ff_msmpeg4v2_encoder;
|
|||
extern const FFCodec ff_msmpeg4v2_decoder;
|
||||
extern const FFCodec ff_msmpeg4v3_encoder;
|
||||
extern const FFCodec ff_msmpeg4v3_decoder;
|
||||
extern const FFCodec ff_msmpeg4_crystalhd_decoder;
|
||||
extern const FFCodec ff_msp2_decoder;
|
||||
extern const FFCodec ff_msrle_encoder;
|
||||
extern const FFCodec ff_msrle_decoder;
|
||||
|
@ -365,7 +357,6 @@ extern const FFCodec ff_vbn_encoder;
|
|||
extern const FFCodec ff_vbn_decoder;
|
||||
extern const FFCodec ff_vble_decoder;
|
||||
extern const FFCodec ff_vc1_decoder;
|
||||
extern const FFCodec ff_vc1_crystalhd_decoder;
|
||||
extern const FFCodec ff_vc1image_decoder;
|
||||
extern const FFCodec ff_vc1_mmal_decoder;
|
||||
extern const FFCodec ff_vc1_qsv_decoder;
|
||||
|
@ -402,7 +393,6 @@ extern const FFCodec ff_wmv1_decoder;
|
|||
extern const FFCodec ff_wmv2_encoder;
|
||||
extern const FFCodec ff_wmv2_decoder;
|
||||
extern const FFCodec ff_wmv3_decoder;
|
||||
extern const FFCodec ff_wmv3_crystalhd_decoder;
|
||||
extern const FFCodec ff_wmv3image_decoder;
|
||||
extern const FFCodec ff_wnv1_decoder;
|
||||
extern const FFCodec ff_xan_wc3_decoder;
|
||||
|
@ -786,6 +776,8 @@ extern const FFCodec ff_libilbc_encoder;
|
|||
extern const FFCodec ff_libilbc_decoder;
|
||||
extern const FFCodec ff_libjxl_decoder;
|
||||
extern const FFCodec ff_libjxl_encoder;
|
||||
extern const FFCodec ff_liblc3_encoder;
|
||||
extern const FFCodec ff_liblc3_decoder;
|
||||
extern const FFCodec ff_libmp3lame_encoder;
|
||||
extern const FFCodec ff_libopencore_amrnb_encoder;
|
||||
extern const FFCodec ff_libopencore_amrnb_decoder;
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/mem.h"
|
||||
#include "atsc_a53.h"
|
||||
#include "get_bits.h"
|
||||
|
||||
|
|
|
@ -20,7 +20,7 @@
|
|||
*/
|
||||
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "audio_frame_queue.h"
|
||||
#include "encode.h"
|
||||
#include "libavutil/avassert.h"
|
||||
|
|
|
@ -58,6 +58,7 @@ enum {
|
|||
|
||||
// Reference frames (section 6.10.24).
|
||||
enum {
|
||||
AV1_REF_FRAME_NONE = -1,
|
||||
AV1_REF_FRAME_INTRA = 0,
|
||||
AV1_REF_FRAME_LAST = 1,
|
||||
AV1_REF_FRAME_LAST2 = 2,
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "av1.h"
|
||||
#include "get_bits.h"
|
||||
#include "leb.h"
|
||||
|
||||
// OBU header fields + max leb128 length
|
||||
#define MAX_OBU_HEADER_SIZE (2 + 8)
|
||||
|
@ -88,19 +89,6 @@ int ff_av1_packet_split(AV1Packet *pkt, const uint8_t *buf, int length,
|
|||
*/
|
||||
void ff_av1_packet_uninit(AV1Packet *pkt);
|
||||
|
||||
static inline int64_t leb128(GetBitContext *gb) {
|
||||
int64_t ret = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i++) {
|
||||
int byte = get_bits(gb, 8);
|
||||
ret |= (int64_t)(byte & 0x7f) << (i * 7);
|
||||
if (!(byte & 0x80))
|
||||
break;
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
static inline int parse_obu_header(const uint8_t *buf, int buf_size,
|
||||
int64_t *obu_size, int *start_pos, int *type,
|
||||
int *temporal_id, int *spatial_id)
|
||||
|
@ -129,7 +117,7 @@ static inline int parse_obu_header(const uint8_t *buf, int buf_size,
|
|||
*temporal_id = *spatial_id = 0;
|
||||
}
|
||||
|
||||
*obu_size = has_size_flag ? leb128(&gb)
|
||||
*obu_size = has_size_flag ? get_leb128(&gb)
|
||||
: buf_size - 1 - extension_flag;
|
||||
|
||||
if (get_bits_left(&gb) < 0)
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "libavutil/hdr_dynamic_metadata.h"
|
||||
#include "libavutil/film_grain_params.h"
|
||||
#include "libavutil/mastering_display_metadata.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "avcodec.h"
|
||||
|
@ -34,6 +35,7 @@
|
|||
#include "decode.h"
|
||||
#include "hwaccel_internal.h"
|
||||
#include "internal.h"
|
||||
#include "itut35.h"
|
||||
#include "hwconfig.h"
|
||||
#include "profiles.h"
|
||||
#include "refstruct.h"
|
||||
|
@ -620,6 +622,12 @@ static int get_pixel_format(AVCodecContext *avctx)
|
|||
*fmtp++ = pix_fmt;
|
||||
*fmtp = AV_PIX_FMT_NONE;
|
||||
|
||||
for (int i = 0; pix_fmts[i] != pix_fmt; i++)
|
||||
if (pix_fmts[i] == avctx->pix_fmt) {
|
||||
s->pix_fmt = pix_fmt;
|
||||
return 1;
|
||||
}
|
||||
|
||||
ret = ff_get_format(avctx, pix_fmts);
|
||||
|
||||
/**
|
||||
|
@ -715,6 +723,7 @@ static av_cold int av1_decode_free(AVCodecContext *avctx)
|
|||
av1_frame_unref(&s->cur_frame);
|
||||
av_frame_free(&s->cur_frame.f);
|
||||
}
|
||||
av_buffer_unref(&s->seq_data_ref);
|
||||
ff_refstruct_unref(&s->seq_ref);
|
||||
ff_refstruct_unref(&s->header_ref);
|
||||
ff_refstruct_unref(&s->cll_ref);
|
||||
|
@ -727,6 +736,7 @@ static av_cold int av1_decode_free(AVCodecContext *avctx)
|
|||
|
||||
ff_cbs_fragment_free(&s->current_obu);
|
||||
ff_cbs_close(&s->cbc);
|
||||
ff_dovi_ctx_unref(&s->dovi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -743,7 +753,7 @@ static int set_context_with_sequence(AVCodecContext *avctx,
|
|||
avctx->color_range =
|
||||
seq->color_config.color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
|
||||
avctx->color_primaries = seq->color_config.color_primaries;
|
||||
avctx->colorspace = seq->color_config.color_primaries;
|
||||
avctx->colorspace = seq->color_config.matrix_coefficients;
|
||||
avctx->color_trc = seq->color_config.transfer_characteristics;
|
||||
|
||||
switch (seq->color_config.chroma_sample_position) {
|
||||
|
@ -771,6 +781,9 @@ static int set_context_with_sequence(AVCodecContext *avctx,
|
|||
seq->timing_info.num_units_in_display_tick,
|
||||
seq->timing_info.time_scale);
|
||||
|
||||
if (avctx->pix_fmt == AV_PIX_FMT_NONE)
|
||||
avctx->pix_fmt = get_sw_pixel_format(avctx, seq);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -818,6 +831,7 @@ static av_cold int av1_decode_init(AVCodecContext *avctx)
|
|||
{
|
||||
AV1DecContext *s = avctx->priv_data;
|
||||
AV1RawSequenceHeader *seq;
|
||||
const AVPacketSideData *sd;
|
||||
int ret;
|
||||
|
||||
s->avctx = avctx;
|
||||
|
@ -869,12 +883,16 @@ static av_cold int av1_decode_init(AVCodecContext *avctx)
|
|||
goto end;
|
||||
}
|
||||
|
||||
avctx->pix_fmt = get_sw_pixel_format(avctx, seq);
|
||||
|
||||
end:
|
||||
ff_cbs_fragment_reset(&s->current_obu);
|
||||
}
|
||||
|
||||
s->dovi.logctx = avctx;
|
||||
s->dovi.dv_profile = 10; // default for AV1
|
||||
sd = ff_get_coded_side_data(avctx, AV_PKT_DATA_DOVI_CONF);
|
||||
if (sd && sd->size > 0)
|
||||
ff_dovi_update_cfg(&s->dovi, (AVDOVIDecoderConfigurationRecord *) sd->data);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -928,13 +946,14 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame,
|
|||
const AV1RawMetadataITUTT35 *itut_t35)
|
||||
{
|
||||
GetByteContext gb;
|
||||
AV1DecContext *s = avctx->priv_data;
|
||||
int ret, provider_code;
|
||||
|
||||
bytestream2_init(&gb, itut_t35->payload, itut_t35->payload_size);
|
||||
|
||||
provider_code = bytestream2_get_be16(&gb);
|
||||
switch (provider_code) {
|
||||
case 0x31: { // atsc_provider_code
|
||||
case ITU_T_T35_PROVIDER_CODE_ATSC: {
|
||||
uint32_t user_identifier = bytestream2_get_be32(&gb);
|
||||
switch (user_identifier) {
|
||||
case MKBETAG('G', 'A', '9', '4'): { // closed captions
|
||||
|
@ -946,8 +965,9 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame,
|
|||
if (!ret)
|
||||
break;
|
||||
|
||||
if (!av_frame_new_side_data_from_buf(frame, AV_FRAME_DATA_A53_CC, buf))
|
||||
av_buffer_unref(&buf);
|
||||
ret = ff_frame_new_side_data_from_buf(avctx, frame, AV_FRAME_DATA_A53_CC, &buf, NULL);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
|
||||
break;
|
||||
|
@ -957,12 +977,12 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame,
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 0x3C: { // smpte_provider_code
|
||||
case ITU_T_T35_PROVIDER_CODE_SMTPE: {
|
||||
AVDynamicHDRPlus *hdrplus;
|
||||
int provider_oriented_code = bytestream2_get_be16(&gb);
|
||||
int application_identifier = bytestream2_get_byte(&gb);
|
||||
|
||||
if (itut_t35->itu_t_t35_country_code != 0xB5 ||
|
||||
if (itut_t35->itu_t_t35_country_code != ITU_T_T35_COUNTRY_CODE_US ||
|
||||
provider_oriented_code != 1 || application_identifier != 4)
|
||||
break;
|
||||
|
||||
|
@ -976,6 +996,24 @@ static int export_itut_t35(AVCodecContext *avctx, AVFrame *frame,
|
|||
return ret;
|
||||
break;
|
||||
}
|
||||
case ITU_T_T35_PROVIDER_CODE_DOLBY: {
|
||||
int provider_oriented_code = bytestream2_get_be32(&gb);
|
||||
if (itut_t35->itu_t_t35_country_code != ITU_T_T35_COUNTRY_CODE_US ||
|
||||
provider_oriented_code != 0x800)
|
||||
break;
|
||||
|
||||
ret = ff_dovi_rpu_parse(&s->dovi, gb.buffer, gb.buffer_end - gb.buffer,
|
||||
avctx->err_recognition);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_WARNING, "Error parsing DOVI OBU.\n");
|
||||
break; // ignore
|
||||
}
|
||||
|
||||
ret = ff_dovi_attach_side_data(&s->dovi, frame);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
break;
|
||||
}
|
||||
default: // ignore unsupported provider codes
|
||||
break;
|
||||
}
|
||||
|
@ -990,31 +1028,39 @@ static int export_metadata(AVCodecContext *avctx, AVFrame *frame)
|
|||
int ret = 0;
|
||||
|
||||
if (s->mdcv) {
|
||||
AVMasteringDisplayMetadata *mastering = av_mastering_display_metadata_create_side_data(frame);
|
||||
if (!mastering)
|
||||
return AVERROR(ENOMEM);
|
||||
AVMasteringDisplayMetadata *mastering;
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mastering->display_primaries[i][0] = av_make_q(s->mdcv->primary_chromaticity_x[i], 1 << 16);
|
||||
mastering->display_primaries[i][1] = av_make_q(s->mdcv->primary_chromaticity_y[i], 1 << 16);
|
||||
ret = ff_decode_mastering_display_new(avctx, frame, &mastering);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (mastering) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mastering->display_primaries[i][0] = av_make_q(s->mdcv->primary_chromaticity_x[i], 1 << 16);
|
||||
mastering->display_primaries[i][1] = av_make_q(s->mdcv->primary_chromaticity_y[i], 1 << 16);
|
||||
}
|
||||
mastering->white_point[0] = av_make_q(s->mdcv->white_point_chromaticity_x, 1 << 16);
|
||||
mastering->white_point[1] = av_make_q(s->mdcv->white_point_chromaticity_y, 1 << 16);
|
||||
|
||||
mastering->max_luminance = av_make_q(s->mdcv->luminance_max, 1 << 8);
|
||||
mastering->min_luminance = av_make_q(s->mdcv->luminance_min, 1 << 14);
|
||||
|
||||
mastering->has_primaries = 1;
|
||||
mastering->has_luminance = 1;
|
||||
}
|
||||
mastering->white_point[0] = av_make_q(s->mdcv->white_point_chromaticity_x, 1 << 16);
|
||||
mastering->white_point[1] = av_make_q(s->mdcv->white_point_chromaticity_y, 1 << 16);
|
||||
|
||||
mastering->max_luminance = av_make_q(s->mdcv->luminance_max, 1 << 8);
|
||||
mastering->min_luminance = av_make_q(s->mdcv->luminance_min, 1 << 14);
|
||||
|
||||
mastering->has_primaries = 1;
|
||||
mastering->has_luminance = 1;
|
||||
}
|
||||
|
||||
if (s->cll) {
|
||||
AVContentLightMetadata *light = av_content_light_metadata_create_side_data(frame);
|
||||
if (!light)
|
||||
return AVERROR(ENOMEM);
|
||||
AVContentLightMetadata *light;
|
||||
|
||||
light->MaxCLL = s->cll->max_cll;
|
||||
light->MaxFALL = s->cll->max_fall;
|
||||
ret = ff_decode_content_light_new(avctx, frame, &light);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
if (light) {
|
||||
light->MaxCLL = s->cll->max_cll;
|
||||
light->MaxFALL = s->cll->max_fall;
|
||||
}
|
||||
}
|
||||
|
||||
while (av_fifo_read(s->itut_t35_fifo, &itut_t35, 1) >= 0) {
|
||||
|
@ -1030,9 +1076,11 @@ static int export_film_grain(AVCodecContext *avctx, AVFrame *frame)
|
|||
{
|
||||
AV1DecContext *s = avctx->priv_data;
|
||||
const AV1RawFilmGrainParams *film_grain = &s->cur_frame.film_grain;
|
||||
const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(frame->format);
|
||||
AVFilmGrainParams *fgp;
|
||||
AVFilmGrainAOMParams *aom;
|
||||
|
||||
av_assert0(pixdesc);
|
||||
if (!film_grain->apply_grain)
|
||||
return 0;
|
||||
|
||||
|
@ -1042,6 +1090,14 @@ static int export_film_grain(AVCodecContext *avctx, AVFrame *frame)
|
|||
|
||||
fgp->type = AV_FILM_GRAIN_PARAMS_AV1;
|
||||
fgp->seed = film_grain->grain_seed;
|
||||
fgp->width = frame->width;
|
||||
fgp->height = frame->height;
|
||||
fgp->color_range = frame->color_range;
|
||||
fgp->color_primaries = frame->color_primaries;
|
||||
fgp->color_trc = frame->color_trc;
|
||||
fgp->color_space = frame->colorspace;
|
||||
fgp->subsampling_x = pixdesc->log2_chroma_w;
|
||||
fgp->subsampling_y = pixdesc->log2_chroma_h;
|
||||
|
||||
aom = &fgp->codec.aom;
|
||||
aom->chroma_scaling_from_luma = film_grain->chroma_scaling_from_luma;
|
||||
|
@ -1174,6 +1230,23 @@ static int get_current_frame(AVCodecContext *avctx)
|
|||
avctx->skip_frame >= AVDISCARD_ALL)
|
||||
return 0;
|
||||
|
||||
if (s->pix_fmt == AV_PIX_FMT_NONE) {
|
||||
ret = get_pixel_format(avctx);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Failed to get pixel format.\n");
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!ret && FF_HW_HAS_CB(avctx, decode_params)) {
|
||||
ret = FF_HW_CALL(avctx, decode_params, AV1_OBU_SEQUENCE_HEADER,
|
||||
s->seq_data_ref->data, s->seq_data_ref->size);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "HW accel decode params fail.\n");
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ret = av1_frame_alloc(avctx, &s->cur_frame);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR,
|
||||
|
@ -1200,14 +1273,27 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
|
|||
AV1RawOBU *obu = unit->content;
|
||||
const AV1RawOBUHeader *header;
|
||||
|
||||
av_log(avctx, AV_LOG_DEBUG, "OBU idx:%d, type:%d, content available:%d.\n", i, unit->type, !!obu);
|
||||
|
||||
if (unit->type == AV1_OBU_TILE_LIST) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Large scale tile decoding is unsupported.\n");
|
||||
ret = AVERROR_PATCHWELCOME;
|
||||
goto end;
|
||||
}
|
||||
|
||||
if (!obu)
|
||||
continue;
|
||||
|
||||
header = &obu->header;
|
||||
av_log(avctx, AV_LOG_DEBUG, "Obu idx:%d, obu type:%d.\n", i, unit->type);
|
||||
|
||||
switch (unit->type) {
|
||||
case AV1_OBU_SEQUENCE_HEADER:
|
||||
ret = av_buffer_replace(&s->seq_data_ref, unit->data_ref);
|
||||
if (ret < 0)
|
||||
goto end;
|
||||
|
||||
s->seq_data_ref->data = unit->data;
|
||||
s->seq_data_ref->size = unit->data_size;
|
||||
ff_refstruct_replace(&s->seq_ref, unit->content_ref);
|
||||
|
||||
s->raw_seq = &obu->obu.sequence_header;
|
||||
|
@ -1221,25 +1307,8 @@ static int av1_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
|
|||
|
||||
s->operating_point_idc = s->raw_seq->operating_point_idc[s->operating_point];
|
||||
|
||||
if (s->pix_fmt == AV_PIX_FMT_NONE) {
|
||||
ret = get_pixel_format(avctx);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR,
|
||||
"Failed to get pixel format.\n");
|
||||
s->raw_seq = NULL;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
s->pix_fmt = AV_PIX_FMT_NONE;
|
||||
|
||||
if (FF_HW_HAS_CB(avctx, decode_params)) {
|
||||
ret = FF_HW_CALL(avctx, decode_params, unit->type,
|
||||
unit->data, unit->data_size);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_ERROR, "HW accel decode params fail.\n");
|
||||
s->raw_seq = NULL;
|
||||
goto end;
|
||||
}
|
||||
}
|
||||
break;
|
||||
case AV1_OBU_REDUNDANT_FRAME_HEADER:
|
||||
if (s->raw_frame_header)
|
||||
|
@ -1416,6 +1485,8 @@ end:
|
|||
ff_cbs_fragment_reset(&s->current_obu);
|
||||
s->nb_unit = 0;
|
||||
}
|
||||
if (!ret && !frame->buf[0])
|
||||
ret = AVERROR(EAGAIN);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1500,7 +1571,7 @@ const FFCodec ff_av1_decoder = {
|
|||
.close = av1_decode_free,
|
||||
FF_CODEC_RECEIVE_FRAME_CB(av1_receive_frame),
|
||||
.p.capabilities = AV_CODEC_CAP_DR1,
|
||||
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
|
||||
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP | FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM,
|
||||
.flush = av1_decode_flush,
|
||||
.p.profiles = NULL_IF_CONFIG_SMALL(ff_av1_profiles),
|
||||
.p.priv_class = &av1_class,
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/buffer.h"
|
||||
#include "libavutil/fifo.h"
|
||||
#include "libavutil/frame.h"
|
||||
#include "libavutil/pixfmt.h"
|
||||
|
@ -30,6 +31,7 @@
|
|||
#include "packet.h"
|
||||
#include "cbs.h"
|
||||
#include "cbs_av1.h"
|
||||
#include "dovi_rpu.h"
|
||||
|
||||
typedef struct AV1Frame {
|
||||
AVFrame *f;
|
||||
|
@ -69,6 +71,7 @@ typedef struct AV1DecContext {
|
|||
CodedBitstreamFragment current_obu;
|
||||
AVPacket *pkt;
|
||||
|
||||
AVBufferRef *seq_data_ref;
|
||||
AV1RawOBU *seq_ref; ///< RefStruct reference backing raw_seq
|
||||
AV1RawSequenceHeader *raw_seq;
|
||||
AV1RawOBU *header_ref; ///< RefStruct reference backing raw_frame_header
|
||||
|
@ -79,6 +82,7 @@ typedef struct AV1DecContext {
|
|||
AV1RawMetadataHDRCLL *cll;
|
||||
AV1RawOBU *mdcv_ref; ///< RefStruct reference backing mdcv
|
||||
AV1RawMetadataHDRMDCV *mdcv;
|
||||
DOVIContext dovi;
|
||||
AVFifo *itut_t35_fifo;
|
||||
|
||||
uint16_t tile_num;
|
||||
|
|
|
@ -54,6 +54,20 @@
|
|||
*/
|
||||
#define FF_MAX_EXTRADATA_SIZE ((1 << 28) - AV_INPUT_BUFFER_PADDING_SIZE)
|
||||
|
||||
const SideDataMap ff_sd_global_map[] = {
|
||||
{ AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN },
|
||||
{ AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX },
|
||||
{ AV_PKT_DATA_SPHERICAL, AV_FRAME_DATA_SPHERICAL },
|
||||
{ AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D },
|
||||
{ AV_PKT_DATA_AUDIO_SERVICE_TYPE, AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
|
||||
{ AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
|
||||
{ AV_PKT_DATA_CONTENT_LIGHT_LEVEL, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
|
||||
{ AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE },
|
||||
{ AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT },
|
||||
{ AV_PKT_DATA_NB },
|
||||
};
|
||||
|
||||
|
||||
int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size)
|
||||
{
|
||||
size_t i;
|
||||
|
@ -241,26 +255,6 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code
|
|||
goto free_and_end;
|
||||
}
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
/* compat wrapper for old-style callers */
|
||||
if (avctx->channel_layout && !avctx->channels)
|
||||
avctx->channels = av_popcount64(avctx->channel_layout);
|
||||
|
||||
if ((avctx->channels && avctx->ch_layout.nb_channels != avctx->channels) ||
|
||||
(avctx->channel_layout && (avctx->ch_layout.order != AV_CHANNEL_ORDER_NATIVE ||
|
||||
avctx->ch_layout.u.mask != avctx->channel_layout))) {
|
||||
av_channel_layout_uninit(&avctx->ch_layout);
|
||||
if (avctx->channel_layout) {
|
||||
av_channel_layout_from_mask(&avctx->ch_layout, avctx->channel_layout);
|
||||
} else {
|
||||
avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
|
||||
}
|
||||
avctx->ch_layout.nb_channels = avctx->channels;
|
||||
}
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
/* AV_CODEC_CAP_CHANNEL_CONF is a decoder-only flag; so the code below
|
||||
* in particular checks that nb_channels is set for all audio encoders. */
|
||||
if (avctx->codec_type == AVMEDIA_TYPE_AUDIO && !avctx->ch_layout.nb_channels
|
||||
|
@ -282,11 +276,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
}
|
||||
|
||||
avctx->frame_num = 0;
|
||||
#if FF_API_AVCTX_FRAME_NUMBER
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
avctx->frame_number = avctx->frame_num;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
avctx->codec_descriptor = avcodec_descriptor_get(avctx->codec_id);
|
||||
|
||||
if ((avctx->codec->capabilities & AV_CODEC_CAP_EXPERIMENTAL) &&
|
||||
|
@ -350,15 +339,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
if (!avctx->bit_rate)
|
||||
avctx->bit_rate = get_bit_rate(avctx);
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
/* update the deprecated fields for old-style callers */
|
||||
avctx->channels = avctx->ch_layout.nb_channels;
|
||||
avctx->channel_layout = avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ?
|
||||
avctx->ch_layout.u.mask : 0;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
/* validate channel layout from the decoder */
|
||||
if ((avctx->ch_layout.nb_channels && !av_channel_layout_check(&avctx->ch_layout)) ||
|
||||
avctx->ch_layout.nb_channels > FF_SANE_NB_CHANNELS) {
|
||||
|
@ -377,7 +357,7 @@ end:
|
|||
|
||||
return ret;
|
||||
free_and_end:
|
||||
avcodec_close(avctx);
|
||||
ff_codec_close(avctx);
|
||||
goto end;
|
||||
}
|
||||
|
||||
|
@ -432,12 +412,12 @@ void avsubtitle_free(AVSubtitle *sub)
|
|||
memset(sub, 0, sizeof(*sub));
|
||||
}
|
||||
|
||||
av_cold int avcodec_close(AVCodecContext *avctx)
|
||||
av_cold void ff_codec_close(AVCodecContext *avctx)
|
||||
{
|
||||
int i;
|
||||
|
||||
if (!avctx)
|
||||
return 0;
|
||||
return;
|
||||
|
||||
if (avcodec_is_open(avctx)) {
|
||||
AVCodecInternal *avci = avctx->internal;
|
||||
|
@ -497,9 +477,15 @@ av_cold int avcodec_close(AVCodecContext *avctx)
|
|||
|
||||
avctx->codec = NULL;
|
||||
avctx->active_thread_type = 0;
|
||||
}
|
||||
|
||||
#if FF_API_AVCODEC_CLOSE
|
||||
int avcodec_close(AVCodecContext *avctx)
|
||||
{
|
||||
ff_codec_close(avctx);
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
static const char *unknown_if_null(const char *str)
|
||||
{
|
||||
|
@ -619,6 +605,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode)
|
|||
enc->width, enc->height);
|
||||
|
||||
if (av_log_get_level() >= AV_LOG_VERBOSE &&
|
||||
enc->coded_width && enc->coded_height &&
|
||||
(enc->width != enc->coded_width ||
|
||||
enc->height != enc->coded_height))
|
||||
av_bprintf(&bprint, " (%dx%d)",
|
||||
|
|
Разница между файлами не показана из-за своего большого размера
Загрузить разницу
|
@ -9,31 +9,13 @@ av_get_bits_per_sample
|
|||
av_get_exact_bits_per_sample
|
||||
av_get_pcm_codec
|
||||
av_get_profile_name
|
||||
av_grow_packet
|
||||
av_init_packet
|
||||
av_new_packet
|
||||
av_packet_alloc
|
||||
av_packet_copy_props
|
||||
av_packet_free_side_data
|
||||
av_packet_from_data
|
||||
av_packet_get_side_data
|
||||
av_packet_move_ref
|
||||
av_packet_new_side_data
|
||||
av_packet_pack_dictionary
|
||||
av_packet_ref
|
||||
av_packet_rescale_ts
|
||||
av_packet_shrink_side_data
|
||||
av_packet_side_data_name
|
||||
av_packet_unpack_dictionary
|
||||
av_packet_unref
|
||||
av_packet_free
|
||||
av_init_packet
|
||||
av_parser_close
|
||||
av_parser_init
|
||||
av_parser_parse2
|
||||
av_rdft_calc
|
||||
av_rdft_end
|
||||
av_rdft_init
|
||||
av_shrink_packet
|
||||
av_vorbis_parse_frame
|
||||
av_vorbis_parse_frame_flags
|
||||
av_vorbis_parse_free
|
||||
|
@ -43,7 +25,6 @@ av_xiphlacing
|
|||
avcodec_align_dimensions
|
||||
avcodec_align_dimensions2
|
||||
avcodec_alloc_context3
|
||||
avcodec_chroma_pos_to_enum
|
||||
avcodec_close
|
||||
avcodec_configuration
|
||||
avcodec_decode_subtitle2
|
||||
|
@ -54,7 +35,6 @@ avcodec_default_get_format
|
|||
avcodec_descriptor_get
|
||||
avcodec_descriptor_get_by_name
|
||||
avcodec_descriptor_next
|
||||
avcodec_enum_to_chroma_pos
|
||||
avcodec_fill_audio_frame
|
||||
avcodec_find_decoder
|
||||
avcodec_find_decoder_by_name
|
||||
|
|
|
@ -25,8 +25,22 @@
|
|||
#ifndef AVCODEC_AVCODEC_INTERNAL_H
|
||||
#define AVCODEC_AVCODEC_INTERNAL_H
|
||||
|
||||
#include "libavutil/frame.h"
|
||||
|
||||
#include "packet.h"
|
||||
|
||||
struct AVCodecContext;
|
||||
struct AVFrame;
|
||||
|
||||
typedef struct SideDataMap {
|
||||
enum AVPacketSideDataType packet;
|
||||
enum AVFrameSideDataType frame;
|
||||
} SideDataMap;
|
||||
|
||||
/**
|
||||
* A map between packet and frame side data types.
|
||||
* Terminated with an entry where packet=AV_PKT_DATA_NB.
|
||||
*/
|
||||
extern const SideDataMap ff_sd_global_map[];
|
||||
|
||||
/**
|
||||
* avcodec_receive_frame() implementation for decoders.
|
||||
|
@ -56,4 +70,6 @@ void ff_encode_flush_buffers(struct AVCodecContext *avctx);
|
|||
struct AVCodecInternal *ff_decode_internal_alloc(void);
|
||||
struct AVCodecInternal *ff_encode_internal_alloc(void);
|
||||
|
||||
void ff_codec_close(struct AVCodecContext *avctx);
|
||||
|
||||
#endif // AVCODEC_AVCODEC_INTERNAL_H
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "libavutil/mem.h"
|
||||
#include "avcodec.h"
|
||||
#include "idctdsp.h"
|
||||
#include "fdctdsp.h"
|
||||
|
@ -33,29 +34,29 @@
|
|||
#define D AV_OPT_FLAG_DECODING_PARAM
|
||||
|
||||
static const AVOption avdct_options[] = {
|
||||
{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, "dct"},
|
||||
{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"fastint", "fast integer (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"mmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"faan", "floating point AAN DCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, .unit = "dct"},
|
||||
{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"fastint", "fast integer (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"mmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"faan", "floating point AAN DCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
|
||||
{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, "idct"},
|
||||
{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"int", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simple", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplemmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"arm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplearm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplearmv5te", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplearmv6", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simpleneon", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"xvid", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"xvidmmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"faani", "floating point AAN IDCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
|
||||
{"simpleauto", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"int", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simple", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplemmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"arm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplearm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplearmv5te", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplearmv6", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simpleneon", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"xvid", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"xvidmmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"faani", "floating point AAN IDCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, .unit = "idct"},
|
||||
{"simpleauto", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
|
||||
{"bits_per_sample", "", OFFSET(bits_per_sample), AV_OPT_TYPE_INT, {.i64 = 8 }, 0, 14, 0,},
|
||||
{NULL},
|
||||
|
|
|
@ -1,82 +0,0 @@
|
|||
/*
|
||||
* AVPicture management routines
|
||||
* Copyright (c) 2001, 2002, 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
|
||||
* AVPicture management routines
|
||||
*/
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "internal.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "libavutil/internal.h"
|
||||
#include "libavutil/colorspace.h"
|
||||
|
||||
#if FF_API_AVPICTURE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
int avpicture_fill(AVPicture *picture, const uint8_t *ptr,
|
||||
enum AVPixelFormat pix_fmt, int width, int height)
|
||||
{
|
||||
return av_image_fill_arrays(picture->data, picture->linesize,
|
||||
ptr, pix_fmt, width, height, 1);
|
||||
}
|
||||
|
||||
int avpicture_layout(const AVPicture* src, enum AVPixelFormat pix_fmt, int width, int height,
|
||||
unsigned char *dest, int dest_size)
|
||||
{
|
||||
return av_image_copy_to_buffer(dest, dest_size,
|
||||
(const uint8_t * const*)src->data, src->linesize,
|
||||
pix_fmt, width, height, 1);
|
||||
}
|
||||
|
||||
int avpicture_get_size(enum AVPixelFormat pix_fmt, int width, int height)
|
||||
{
|
||||
return av_image_get_buffer_size(pix_fmt, width, height, 1);
|
||||
}
|
||||
|
||||
int avpicture_alloc(AVPicture *picture,
|
||||
enum AVPixelFormat pix_fmt, int width, int height)
|
||||
{
|
||||
int ret = av_image_alloc(picture->data, picture->linesize,
|
||||
width, height, pix_fmt, 1);
|
||||
if (ret < 0) {
|
||||
memset(picture, 0, sizeof(AVPicture));
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void avpicture_free(AVPicture *picture)
|
||||
{
|
||||
av_freep(&picture->data[0]);
|
||||
}
|
||||
|
||||
void av_picture_copy(AVPicture *dst, const AVPicture *src,
|
||||
enum AVPixelFormat pix_fmt, int width, int height)
|
||||
{
|
||||
av_image_copy(dst->data, dst->linesize, (const uint8_t **)src->data,
|
||||
src->linesize, pix_fmt, width, height);
|
||||
}
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif /* FF_API_AVPICTURE */
|
|
@ -46,7 +46,6 @@ extern const FFBitStreamFilter ff_imx_dump_header_bsf;
|
|||
extern const FFBitStreamFilter ff_media100_to_mjpegb_bsf;
|
||||
extern const FFBitStreamFilter ff_mjpeg2jpeg_bsf;
|
||||
extern const FFBitStreamFilter ff_mjpega_dump_header_bsf;
|
||||
extern const FFBitStreamFilter ff_mp3_header_decompress_bsf;
|
||||
extern const FFBitStreamFilter ff_mpeg2_metadata_bsf;
|
||||
extern const FFBitStreamFilter ff_mpeg4_unpack_bframes_bsf;
|
||||
extern const FFBitStreamFilter ff_mov2textsub_bsf;
|
||||
|
@ -58,6 +57,7 @@ extern const FFBitStreamFilter ff_pgs_frame_merge_bsf;
|
|||
extern const FFBitStreamFilter ff_prores_metadata_bsf;
|
||||
extern const FFBitStreamFilter ff_remove_extradata_bsf;
|
||||
extern const FFBitStreamFilter ff_setts_bsf;
|
||||
extern const FFBitStreamFilter ff_showinfo_bsf;
|
||||
extern const FFBitStreamFilter ff_text2movsub_bsf;
|
||||
extern const FFBitStreamFilter ff_trace_headers_bsf;
|
||||
extern const FFBitStreamFilter ff_truehd_core_bsf;
|
||||
|
|
|
@ -41,6 +41,7 @@ void ff_blockdsp_init(BlockDSPContext *c);
|
|||
void ff_blockdsp_init_alpha(BlockDSPContext *c);
|
||||
void ff_blockdsp_init_arm(BlockDSPContext *c);
|
||||
void ff_blockdsp_init_ppc(BlockDSPContext *c);
|
||||
void ff_blockdsp_init_riscv(BlockDSPContext *c);
|
||||
void ff_blockdsp_init_x86(BlockDSPContext *c);
|
||||
void ff_blockdsp_init_mips(BlockDSPContext *c);
|
||||
|
||||
|
|
|
@ -0,0 +1,21 @@
|
|||
# -*- Mode: python; indent-tabs-mode: nil; tab-width: 40 -*-
|
||||
# vim: set filetype=python:
|
||||
# This Source Code Form is subject to the terms of the Mozilla Public
|
||||
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
#
|
||||
if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
|
||||
SOURCES += [
|
||||
'av1_frame_split.c',
|
||||
'vp9_superframe_split.c',
|
||||
]
|
||||
|
||||
SOURCES += [
|
||||
'null.c',
|
||||
]
|
||||
|
||||
LOCAL_INCLUDES += [ "../" ]
|
||||
|
||||
FINAL_LIBRARY = 'mozavcodec'
|
||||
|
||||
include('/media/ffvpx/ffvpxcommon.mozbuild')
|
|
@ -23,6 +23,7 @@
|
|||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/buffer.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/opt.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
|
|
|
@ -427,6 +427,8 @@ typedef struct AV1ReferenceFrameState {
|
|||
int bit_depth; // RefBitDepth
|
||||
int order_hint; // RefOrderHint
|
||||
|
||||
int saved_order_hints[AV1_TOTAL_REFS_PER_FRAME]; // SavedOrderHints[ref]
|
||||
|
||||
int8_t loop_filter_ref_deltas[AV1_TOTAL_REFS_PER_FRAME];
|
||||
int8_t loop_filter_mode_deltas[2];
|
||||
uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
|
||||
|
@ -464,6 +466,9 @@ typedef struct CodedBitstreamAV1Context {
|
|||
int tile_rows;
|
||||
int tile_num;
|
||||
|
||||
int order_hints[AV1_TOTAL_REFS_PER_FRAME]; // OrderHints
|
||||
int ref_frame_sign_bias[AV1_TOTAL_REFS_PER_FRAME]; // RefFrameSignBias
|
||||
|
||||
AV1ReferenceFrameState ref[AV1_NUM_REF_FRAMES];
|
||||
|
||||
// AVOptions
|
||||
|
|
|
@ -360,7 +360,7 @@ static int FUNC(set_frame_refs)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
int i, j;
|
||||
|
||||
for (i = 0; i < AV1_REFS_PER_FRAME; i++)
|
||||
ref_frame_idx[i] = -1;
|
||||
ref_frame_idx[i] = AV1_REF_FRAME_NONE;
|
||||
ref_frame_idx[AV1_REF_FRAME_LAST - AV1_REF_FRAME_LAST] = current->last_frame_idx;
|
||||
ref_frame_idx[AV1_REF_FRAME_GOLDEN - AV1_REF_FRAME_LAST] = current->golden_frame_idx;
|
||||
|
||||
|
@ -378,7 +378,7 @@ static int FUNC(set_frame_refs)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
latest_order_hint = shifted_order_hints[current->last_frame_idx];
|
||||
earliest_order_hint = shifted_order_hints[current->golden_frame_idx];
|
||||
|
||||
ref = -1;
|
||||
ref = AV1_REF_FRAME_NONE;
|
||||
for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
|
||||
int hint = shifted_order_hints[i];
|
||||
if (!used_frame[i] && hint >= cur_frame_hint &&
|
||||
|
@ -392,7 +392,7 @@ static int FUNC(set_frame_refs)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
used_frame[ref] = 1;
|
||||
}
|
||||
|
||||
ref = -1;
|
||||
ref = AV1_REF_FRAME_NONE;
|
||||
for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
|
||||
int hint = shifted_order_hints[i];
|
||||
if (!used_frame[i] && hint >= cur_frame_hint &&
|
||||
|
@ -406,7 +406,7 @@ static int FUNC(set_frame_refs)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
used_frame[ref] = 1;
|
||||
}
|
||||
|
||||
ref = -1;
|
||||
ref = AV1_REF_FRAME_NONE;
|
||||
for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
|
||||
int hint = shifted_order_hints[i];
|
||||
if (!used_frame[i] && hint >= cur_frame_hint &&
|
||||
|
@ -423,7 +423,7 @@ static int FUNC(set_frame_refs)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
for (i = 0; i < AV1_REFS_PER_FRAME - 2; i++) {
|
||||
int ref_frame = ref_frame_list[i];
|
||||
if (ref_frame_idx[ref_frame - AV1_REF_FRAME_LAST] < 0 ) {
|
||||
ref = -1;
|
||||
ref = AV1_REF_FRAME_NONE;
|
||||
for (j = 0; j < AV1_NUM_REF_FRAMES; j++) {
|
||||
int hint = shifted_order_hints[j];
|
||||
if (!used_frame[j] && hint < cur_frame_hint &&
|
||||
|
@ -439,7 +439,7 @@ static int FUNC(set_frame_refs)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
}
|
||||
}
|
||||
|
||||
ref = -1;
|
||||
ref = AV1_REF_FRAME_NONE;
|
||||
for (i = 0; i < AV1_NUM_REF_FRAMES; i++) {
|
||||
int hint = shifted_order_hints[i];
|
||||
if (ref < 0 || hint < earliest_order_hint) {
|
||||
|
@ -1414,6 +1414,8 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
priv->ref[i].valid = 0;
|
||||
priv->ref[i].order_hint = 0;
|
||||
}
|
||||
for (i = 0; i < AV1_REFS_PER_FRAME; i++)
|
||||
priv->order_hints[i + AV1_REF_FRAME_LAST] = 0;
|
||||
}
|
||||
|
||||
flag(disable_cdf_update);
|
||||
|
@ -1568,11 +1570,20 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
|
|||
else
|
||||
flag(use_ref_frame_mvs);
|
||||
|
||||
infer(allow_intrabc, 0);
|
||||
}
|
||||
for (i = 0; i < AV1_REFS_PER_FRAME; i++) {
|
||||
int ref_frame = AV1_REF_FRAME_LAST + i;
|
||||
int hint = priv->ref[current->ref_frame_idx[i]].order_hint;
|
||||
priv->order_hints[ref_frame] = hint;
|
||||
if (!seq->enable_order_hint) {
|
||||
priv->ref_frame_sign_bias[ref_frame] = 0;
|
||||
} else {
|
||||
priv->ref_frame_sign_bias[ref_frame] =
|
||||
cbs_av1_get_relative_dist(seq, hint,
|
||||
current->order_hint) > 0;
|
||||
}
|
||||
}
|
||||
|
||||
if (!frame_is_intra) {
|
||||
// Derive reference frame sign biases.
|
||||
infer(allow_intrabc, 0);
|
||||
}
|
||||
|
||||
if (seq->reduced_still_picture_header || current->disable_cdf_update)
|
||||
|
@ -1674,6 +1685,12 @@ update_refs:
|
|||
.bit_depth = priv->bit_depth,
|
||||
.order_hint = priv->order_hint,
|
||||
};
|
||||
|
||||
for (int j = 0; j < AV1_REFS_PER_FRAME; j++) {
|
||||
priv->ref[i].saved_order_hints[j + AV1_REF_FRAME_LAST] =
|
||||
priv->order_hints[j + AV1_REF_FRAME_LAST];
|
||||
}
|
||||
|
||||
memcpy(priv->ref[i].loop_filter_ref_deltas, current->loop_filter_ref_deltas,
|
||||
sizeof(current->loop_filter_ref_deltas));
|
||||
memcpy(priv->ref[i].loop_filter_mode_deltas, current->loop_filter_mode_deltas,
|
||||
|
|
|
@ -209,13 +209,6 @@ typedef struct AVCodec {
|
|||
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
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* @deprecated use ch_layouts instead
|
||||
*/
|
||||
attribute_deprecated
|
||||
const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0
|
||||
#endif
|
||||
const AVClass *priv_class; ///< AVClass for the private context
|
||||
const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {AV_PROFILE_UNKNOWN}
|
||||
|
||||
|
|
|
@ -1470,15 +1470,6 @@ static const AVCodecDescriptor codec_descriptors[] = {
|
|||
.long_name = NULL_IF_CONFIG_SMALL("Avid Meridien Uncompressed"),
|
||||
.props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS,
|
||||
},
|
||||
#if FF_API_AYUV_CODECID
|
||||
{
|
||||
.id = AV_CODEC_ID_AYUV,
|
||||
.type = AVMEDIA_TYPE_VIDEO,
|
||||
.name = "ayuv",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed MS 4:4:4:4"),
|
||||
.props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS,
|
||||
},
|
||||
#endif
|
||||
{
|
||||
.id = AV_CODEC_ID_TARGA_Y216,
|
||||
.type = AVMEDIA_TYPE_VIDEO,
|
||||
|
@ -3434,6 +3425,13 @@ static const AVCodecDescriptor codec_descriptors[] = {
|
|||
.long_name = NULL_IF_CONFIG_SMALL("QOA (Quite OK Audio)"),
|
||||
.props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY,
|
||||
},
|
||||
{
|
||||
.id = AV_CODEC_ID_LC3,
|
||||
.type = AVMEDIA_TYPE_AUDIO,
|
||||
.name = "lc3",
|
||||
.long_name = NULL_IF_CONFIG_SMALL("LC3 (Low Complexity Communication Codec)"),
|
||||
.props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY,
|
||||
},
|
||||
|
||||
/* subtitle codecs */
|
||||
{
|
||||
|
|
|
@ -253,9 +253,6 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_AVRP,
|
||||
AV_CODEC_ID_012V,
|
||||
AV_CODEC_ID_AVUI,
|
||||
#if FF_API_AYUV_CODECID
|
||||
AV_CODEC_ID_AYUV,
|
||||
#endif
|
||||
AV_CODEC_ID_TARGA_Y216,
|
||||
AV_CODEC_ID_V308,
|
||||
AV_CODEC_ID_V408,
|
||||
|
@ -546,6 +543,7 @@ enum AVCodecID {
|
|||
AV_CODEC_ID_AC4,
|
||||
AV_CODEC_ID_OSQ,
|
||||
AV_CODEC_ID_QOA,
|
||||
AV_CODEC_ID_LC3,
|
||||
|
||||
/* subtitle codecs */
|
||||
AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs.
|
||||
|
|
|
@ -284,25 +284,6 @@ typedef struct FFCodec {
|
|||
.update_thread_context_for_user = NULL
|
||||
#endif
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
#define CODEC_OLD_CHANNEL_LAYOUTS(...) CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(((const uint64_t[]) { __VA_ARGS__, 0 }))
|
||||
#if defined(__clang__)
|
||||
#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) \
|
||||
FF_DISABLE_DEPRECATION_WARNINGS \
|
||||
.p.channel_layouts = (array), \
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#else
|
||||
#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array) .p.channel_layouts = (array),
|
||||
#endif
|
||||
#else
|
||||
/* This is only provided to allow to test disabling FF_API_OLD_CHANNEL_LAYOUT
|
||||
* without removing all the FF_API_OLD_CHANNEL_LAYOUT codeblocks.
|
||||
* It is of course still expected to be removed when FF_API_OLD_CHANNEL_LAYOUT
|
||||
* will be finally removed (along with all usages of these macros). */
|
||||
#define CODEC_OLD_CHANNEL_LAYOUTS(...)
|
||||
#define CODEC_OLD_CHANNEL_LAYOUTS_ARRAY(array)
|
||||
#endif
|
||||
|
||||
#define FF_CODEC_DECODE_CB(func) \
|
||||
.cb_type = FF_CODEC_CB_TYPE_DECODE, \
|
||||
.cb.decode = (func)
|
||||
|
|
|
@ -168,32 +168,9 @@ int avcodec_parameters_from_context(AVCodecParameters *par,
|
|||
break;
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
par->format = codec->sample_fmt;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
// if the old/new fields are set inconsistently, prefer the old ones
|
||||
if ((codec->channels && codec->channels != codec->ch_layout.nb_channels) ||
|
||||
(codec->channel_layout && (codec->ch_layout.order != AV_CHANNEL_ORDER_NATIVE ||
|
||||
codec->ch_layout.u.mask != codec->channel_layout))) {
|
||||
if (codec->channel_layout)
|
||||
av_channel_layout_from_mask(&par->ch_layout, codec->channel_layout);
|
||||
else {
|
||||
par->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
|
||||
par->ch_layout.nb_channels = codec->channels;
|
||||
}
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
} else {
|
||||
#endif
|
||||
ret = av_channel_layout_copy(&par->ch_layout, &codec->ch_layout);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
par->channel_layout = par->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ?
|
||||
par->ch_layout.u.mask : 0;
|
||||
par->channels = par->ch_layout.nb_channels;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
par->sample_rate = codec->sample_rate;
|
||||
par->block_align = codec->block_align;
|
||||
par->frame_size = codec->frame_size;
|
||||
|
@ -255,32 +232,9 @@ int avcodec_parameters_to_context(AVCodecContext *codec,
|
|||
break;
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
codec->sample_fmt = par->format;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
// if the old/new fields are set inconsistently, prefer the old ones
|
||||
if ((par->channels && par->channels != par->ch_layout.nb_channels) ||
|
||||
(par->channel_layout && (par->ch_layout.order != AV_CHANNEL_ORDER_NATIVE ||
|
||||
par->ch_layout.u.mask != par->channel_layout))) {
|
||||
if (par->channel_layout)
|
||||
av_channel_layout_from_mask(&codec->ch_layout, par->channel_layout);
|
||||
else {
|
||||
codec->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
|
||||
codec->ch_layout.nb_channels = par->channels;
|
||||
}
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
} else {
|
||||
#endif
|
||||
ret = av_channel_layout_copy(&codec->ch_layout, &par->ch_layout);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
codec->channel_layout = codec->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ?
|
||||
codec->ch_layout.u.mask : 0;
|
||||
codec->channels = codec->ch_layout.nb_channels;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
codec->sample_rate = par->sample_rate;
|
||||
codec->block_align = par->block_align;
|
||||
codec->frame_size = par->frame_size;
|
||||
|
|
|
@ -72,6 +72,19 @@ typedef struct AVCodecParameters {
|
|||
*/
|
||||
int extradata_size;
|
||||
|
||||
/**
|
||||
* Additional data associated with the entire stream.
|
||||
*
|
||||
* Should be allocated with av_packet_side_data_new() or
|
||||
* av_packet_side_data_add(), and will be freed by avcodec_parameters_free().
|
||||
*/
|
||||
AVPacketSideData *coded_side_data;
|
||||
|
||||
/**
|
||||
* Amount of entries in @ref coded_side_data.
|
||||
*/
|
||||
int nb_coded_side_data;
|
||||
|
||||
/**
|
||||
* - video: the pixel format, the value corresponds to enum AVPixelFormat.
|
||||
* - audio: the sample format, the value corresponds to enum AVSampleFormat.
|
||||
|
@ -130,6 +143,18 @@ typedef struct AVCodecParameters {
|
|||
*/
|
||||
AVRational sample_aspect_ratio;
|
||||
|
||||
/**
|
||||
* Video only. Number of frames per second, for streams with constant frame
|
||||
* durations. Should be set to { 0, 1 } when some frames have differing
|
||||
* durations or if the value is not known.
|
||||
*
|
||||
* @note This field correponds to values that are stored in codec-level
|
||||
* headers and is typically overridden by container/transport-layer
|
||||
* timestamps, when available. It should thus be used only as a last resort,
|
||||
* when no higher-level timing information is available.
|
||||
*/
|
||||
AVRational framerate;
|
||||
|
||||
/**
|
||||
* Video only. The order of the fields in interlaced video.
|
||||
*/
|
||||
|
@ -149,22 +174,10 @@ typedef struct AVCodecParameters {
|
|||
*/
|
||||
int video_delay;
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* 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.
|
||||
* @deprecated use ch_layout
|
||||
* Audio only. The channel layout and number of channels.
|
||||
*/
|
||||
attribute_deprecated
|
||||
uint64_t channel_layout;
|
||||
/**
|
||||
* Audio only. The number of audio channels.
|
||||
* @deprecated use ch_layout.nb_channels
|
||||
*/
|
||||
attribute_deprecated
|
||||
int channels;
|
||||
#endif
|
||||
AVChannelLayout ch_layout;
|
||||
/**
|
||||
* Audio only. The number of audio samples per second.
|
||||
*/
|
||||
|
@ -199,36 +212,6 @@ typedef struct AVCodecParameters {
|
|||
* Audio only. Number of samples to skip after a discontinuity.
|
||||
*/
|
||||
int seek_preroll;
|
||||
|
||||
/**
|
||||
* Audio only. The channel layout and number of channels.
|
||||
*/
|
||||
AVChannelLayout ch_layout;
|
||||
|
||||
/**
|
||||
* Video only. Number of frames per second, for streams with constant frame
|
||||
* durations. Should be set to { 0, 1 } when some frames have differing
|
||||
* durations or if the value is not known.
|
||||
*
|
||||
* @note This field correponds to values that are stored in codec-level
|
||||
* headers and is typically overridden by container/transport-layer
|
||||
* timestamps, when available. It should thus be used only as a last resort,
|
||||
* when no higher-level timing information is available.
|
||||
*/
|
||||
AVRational framerate;
|
||||
|
||||
/**
|
||||
* Additional data associated with the entire stream.
|
||||
*
|
||||
* Should be allocated with av_packet_side_data_new() or
|
||||
* av_packet_side_data_add(), and will be freed by avcodec_parameters_free().
|
||||
*/
|
||||
AVPacketSideData *coded_side_data;
|
||||
|
||||
/**
|
||||
* Amount of entries in @ref coded_side_data.
|
||||
*/
|
||||
int nb_coded_side_data;
|
||||
} AVCodecParameters;
|
||||
|
||||
/**
|
||||
|
|
|
@ -35,6 +35,8 @@
|
|||
#include "libavutil/hwcontext.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "libavutil/internal.h"
|
||||
#include "libavutil/mastering_display_metadata.h"
|
||||
#include "libavutil/mem.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "avcodec_internal.h"
|
||||
|
@ -60,6 +62,17 @@ typedef struct DecodeContext {
|
|||
* The caller has submitted a NULL packet on input.
|
||||
*/
|
||||
int draining_started;
|
||||
|
||||
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
|
||||
|
||||
/**
|
||||
* Bitmask indicating for which side data types we prefer user-supplied
|
||||
* (global or attached to packets) side data over bytestream.
|
||||
*/
|
||||
uint64_t side_data_pref_mask;
|
||||
} DecodeContext;
|
||||
|
||||
static DecodeContext *decode_ctx(AVCodecInternal *avci)
|
||||
|
@ -92,39 +105,6 @@ static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt)
|
|||
flags = bytestream_get_le32(&data);
|
||||
size -= 4;
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT) {
|
||||
if (size < 4)
|
||||
goto fail;
|
||||
val = bytestream_get_le32(&data);
|
||||
if (val <= 0 || val > INT_MAX) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid channel count");
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto fail2;
|
||||
}
|
||||
av_channel_layout_uninit(&avctx->ch_layout);
|
||||
avctx->ch_layout.nb_channels = val;
|
||||
avctx->ch_layout.order = AV_CHANNEL_ORDER_UNSPEC;
|
||||
size -= 4;
|
||||
}
|
||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) {
|
||||
if (size < 8)
|
||||
goto fail;
|
||||
av_channel_layout_uninit(&avctx->ch_layout);
|
||||
ret = av_channel_layout_from_mask(&avctx->ch_layout, bytestream_get_le64(&data));
|
||||
if (ret < 0)
|
||||
goto fail2;
|
||||
size -= 8;
|
||||
}
|
||||
if (flags & (AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT |
|
||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT)) {
|
||||
avctx->channels = avctx->ch_layout.nb_channels;
|
||||
avctx->channel_layout = (avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE) ?
|
||||
avctx->ch_layout.u.mask : 0;
|
||||
}
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) {
|
||||
if (size < 4)
|
||||
goto fail;
|
||||
|
@ -273,24 +253,24 @@ int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt)
|
|||
* @param dts the dts field of the decoded AVPacket
|
||||
* @return one of the input values, may be AV_NOPTS_VALUE
|
||||
*/
|
||||
static int64_t guess_correct_pts(AVCodecContext *ctx,
|
||||
static int64_t guess_correct_pts(DecodeContext *dc,
|
||||
int64_t reordered_pts, int64_t dts)
|
||||
{
|
||||
int64_t pts = AV_NOPTS_VALUE;
|
||||
|
||||
if (dts != AV_NOPTS_VALUE) {
|
||||
ctx->pts_correction_num_faulty_dts += dts <= ctx->pts_correction_last_dts;
|
||||
ctx->pts_correction_last_dts = dts;
|
||||
dc->pts_correction_num_faulty_dts += dts <= dc->pts_correction_last_dts;
|
||||
dc->pts_correction_last_dts = dts;
|
||||
} else if (reordered_pts != AV_NOPTS_VALUE)
|
||||
ctx->pts_correction_last_dts = reordered_pts;
|
||||
dc->pts_correction_last_dts = reordered_pts;
|
||||
|
||||
if (reordered_pts != AV_NOPTS_VALUE) {
|
||||
ctx->pts_correction_num_faulty_pts += reordered_pts <= ctx->pts_correction_last_pts;
|
||||
ctx->pts_correction_last_pts = reordered_pts;
|
||||
dc->pts_correction_num_faulty_pts += reordered_pts <= dc->pts_correction_last_pts;
|
||||
dc->pts_correction_last_pts = reordered_pts;
|
||||
} else if(dts != AV_NOPTS_VALUE)
|
||||
ctx->pts_correction_last_pts = dts;
|
||||
dc->pts_correction_last_pts = dts;
|
||||
|
||||
if ((ctx->pts_correction_num_faulty_pts<=ctx->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE)
|
||||
if ((dc->pts_correction_num_faulty_pts<=dc->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE)
|
||||
&& reordered_pts != AV_NOPTS_VALUE)
|
||||
pts = reordered_pts;
|
||||
else
|
||||
|
@ -582,15 +562,6 @@ static int fill_frame_props(const AVCodecContext *avctx, AVFrame *frame)
|
|||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (!frame->channel_layout)
|
||||
frame->channel_layout = avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE ?
|
||||
avctx->ch_layout.u.mask : 0;
|
||||
if (!frame->channels)
|
||||
frame->channels = avctx->ch_layout.nb_channels;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
if (!frame->sample_rate)
|
||||
frame->sample_rate = avctx->sample_rate;
|
||||
}
|
||||
|
@ -617,6 +588,7 @@ static int decode_simple_receive_frame(AVCodecContext *avctx, AVFrame *frame)
|
|||
static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame)
|
||||
{
|
||||
AVCodecInternal *avci = avctx->internal;
|
||||
DecodeContext *dc = decode_ctx(avci);
|
||||
const FFCodec *const codec = ffcodec(avctx->codec);
|
||||
int ret, ok;
|
||||
|
||||
|
@ -672,16 +644,10 @@ FF_DISABLE_DEPRECATION_WARNINGS
|
|||
frame->top_field_first = !!(frame->flags & AV_FRAME_FLAG_TOP_FIELD_FIRST);
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
frame->best_effort_timestamp = guess_correct_pts(avctx,
|
||||
frame->best_effort_timestamp = guess_correct_pts(dc,
|
||||
frame->pts,
|
||||
frame->pkt_dts);
|
||||
|
||||
#if FF_API_PKT_DURATION
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
frame->pkt_duration = frame->duration;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
/* the only case where decode data is not set should be decoders
|
||||
* that do not call ff_get_buffer() */
|
||||
av_assert0((frame->private_ref && frame->private_ref->size == sizeof(FrameDecodeData)) ||
|
||||
|
@ -820,11 +786,6 @@ int ff_decode_receive_frame(AVCodecContext *avctx, AVFrame *frame)
|
|||
}
|
||||
|
||||
avctx->frame_num++;
|
||||
#if FF_API_AVCTX_FRAME_NUMBER
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
avctx->frame_number = avctx->frame_num;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
#if FF_API_DROPCHANGED
|
||||
if (avctx->flags & AV_CODEC_FLAG_DROPCHANGED) {
|
||||
|
@ -977,8 +938,8 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
|
|||
}
|
||||
if (!avctx->codec)
|
||||
return AVERROR(EINVAL);
|
||||
if (avctx->codec->type != AVMEDIA_TYPE_SUBTITLE) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid media type for subtitles\n");
|
||||
if (ffcodec(avctx->codec)->cb_type != FF_CODEC_CB_TYPE_DECODE_SUB) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Codec not subtitle decoder\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
|
@ -1032,11 +993,6 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub,
|
|||
|
||||
if (*got_sub_ptr)
|
||||
avctx->frame_num++;
|
||||
#if FF_API_AVCTX_FRAME_NUMBER
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
avctx->frame_number = avctx->frame_num;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -1371,8 +1327,8 @@ int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt)
|
|||
goto try_again;
|
||||
}
|
||||
if (hw_config->hwaccel) {
|
||||
av_log(avctx, AV_LOG_DEBUG, "Format %s requires hwaccel "
|
||||
"initialisation.\n", desc->name);
|
||||
av_log(avctx, AV_LOG_DEBUG, "Format %s requires hwaccel %s "
|
||||
"initialisation.\n", desc->name, hw_config->hwaccel->p.name);
|
||||
err = hwaccel_init(avctx, hw_config->hwaccel);
|
||||
if (err < 0)
|
||||
goto try_again;
|
||||
|
@ -1421,21 +1377,6 @@ static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame)
|
|||
return av_packet_unpack_dictionary(side_metadata, size, frame_md);
|
||||
}
|
||||
|
||||
static const struct {
|
||||
enum AVPacketSideDataType packet;
|
||||
enum AVFrameSideDataType frame;
|
||||
} sd_global_map[] = {
|
||||
{ AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN },
|
||||
{ AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX },
|
||||
{ AV_PKT_DATA_SPHERICAL, AV_FRAME_DATA_SPHERICAL },
|
||||
{ AV_PKT_DATA_STEREO3D, AV_FRAME_DATA_STEREO3D },
|
||||
{ AV_PKT_DATA_AUDIO_SERVICE_TYPE, AV_FRAME_DATA_AUDIO_SERVICE_TYPE },
|
||||
{ AV_PKT_DATA_MASTERING_DISPLAY_METADATA, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA },
|
||||
{ AV_PKT_DATA_CONTENT_LIGHT_LEVEL, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL },
|
||||
{ AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE },
|
||||
{ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS },
|
||||
};
|
||||
|
||||
int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
|
||||
AVFrame *frame, const AVPacket *pkt)
|
||||
{
|
||||
|
@ -1445,6 +1386,7 @@ int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx,
|
|||
} sd[] = {
|
||||
{ AV_PKT_DATA_A53_CC, AV_FRAME_DATA_A53_CC },
|
||||
{ AV_PKT_DATA_AFD, AV_FRAME_DATA_AFD },
|
||||
{ AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS },
|
||||
{ AV_PKT_DATA_S12M_TIMECODE, AV_FRAME_DATA_S12M_TIMECODE },
|
||||
{ AV_PKT_DATA_SKIP_SAMPLES, AV_FRAME_DATA_SKIP_SAMPLES },
|
||||
};
|
||||
|
@ -1458,13 +1400,13 @@ FF_DISABLE_DEPRECATION_WARNINGS
|
|||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
for (int i = 0; i < FF_ARRAY_ELEMS(sd_global_map); i++) {
|
||||
for (int i = 0; ff_sd_global_map[i].packet < AV_PKT_DATA_NB; i++) {
|
||||
size_t size;
|
||||
const uint8_t *packet_sd = av_packet_get_side_data(pkt, sd_global_map[i].packet, &size);
|
||||
const uint8_t *packet_sd = av_packet_get_side_data(pkt, ff_sd_global_map[i].packet, &size);
|
||||
if (packet_sd) {
|
||||
AVFrameSideData *frame_sd;
|
||||
|
||||
frame_sd = av_frame_new_side_data(frame, sd_global_map[i].frame, size);
|
||||
frame_sd = av_frame_new_side_data(frame, ff_sd_global_map[i].frame, size);
|
||||
if (!frame_sd)
|
||||
return AVERROR(ENOMEM);
|
||||
memcpy(frame_sd->data, packet_sd, size);
|
||||
|
@ -1505,12 +1447,12 @@ int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame)
|
|||
{
|
||||
int ret;
|
||||
|
||||
for (int i = 0; i < FF_ARRAY_ELEMS(sd_global_map); i++) {
|
||||
for (int i = 0; ff_sd_global_map[i].packet < AV_PKT_DATA_NB; i++) {
|
||||
const AVPacketSideData *packet_sd = ff_get_coded_side_data(avctx,
|
||||
sd_global_map[i].packet);
|
||||
ff_sd_global_map[i].packet);
|
||||
if (packet_sd) {
|
||||
AVFrameSideData *frame_sd = av_frame_new_side_data(frame,
|
||||
sd_global_map[i].frame,
|
||||
ff_sd_global_map[i].frame,
|
||||
packet_sd->size);
|
||||
if (!frame_sd)
|
||||
return AVERROR(ENOMEM);
|
||||
|
@ -1531,11 +1473,6 @@ FF_DISABLE_DEPRECATION_WARNINGS
|
|||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
}
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
frame->reordered_opaque = avctx->reordered_opaque;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
ret = fill_frame_props(avctx, frame);
|
||||
if (ret < 0)
|
||||
|
@ -1642,15 +1579,6 @@ int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
|
|||
goto fail;
|
||||
}
|
||||
} else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
/* compat layer for old-style get_buffer() implementations */
|
||||
avctx->channels = avctx->ch_layout.nb_channels;
|
||||
avctx->channel_layout = (avctx->ch_layout.order == AV_CHANNEL_ORDER_NATIVE) ?
|
||||
avctx->ch_layout.u.mask : 0;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
if (frame->nb_samples * (int64_t)avctx->ch_layout.nb_channels > avctx->max_samples) {
|
||||
av_log(avctx, AV_LOG_ERROR, "samples per frame %d, exceeds max_samples %"PRId64"\n", frame->nb_samples, avctx->max_samples);
|
||||
ret = AVERROR(EINVAL);
|
||||
|
@ -1743,6 +1671,7 @@ int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame, int flags)
|
|||
int ff_decode_preinit(AVCodecContext *avctx)
|
||||
{
|
||||
AVCodecInternal *avci = avctx->internal;
|
||||
DecodeContext *dc = decode_ctx(avci);
|
||||
int ret = 0;
|
||||
|
||||
/* if the decoder init function was already called previously,
|
||||
|
@ -1790,10 +1719,10 @@ int ff_decode_preinit(AVCodecContext *avctx)
|
|||
}
|
||||
}
|
||||
|
||||
avctx->pts_correction_num_faulty_pts =
|
||||
avctx->pts_correction_num_faulty_dts = 0;
|
||||
avctx->pts_correction_last_pts =
|
||||
avctx->pts_correction_last_dts = INT64_MIN;
|
||||
dc->pts_correction_num_faulty_pts =
|
||||
dc->pts_correction_num_faulty_dts = 0;
|
||||
dc->pts_correction_last_pts =
|
||||
dc->pts_correction_last_dts = INT64_MIN;
|
||||
|
||||
if ( !CONFIG_GRAY && avctx->flags & AV_CODEC_FLAG_GRAY
|
||||
&& avctx->codec_descriptor->type == AVMEDIA_TYPE_VIDEO)
|
||||
|
@ -1803,6 +1732,35 @@ int ff_decode_preinit(AVCodecContext *avctx)
|
|||
avctx->export_side_data |= AV_CODEC_EXPORT_DATA_MVS;
|
||||
}
|
||||
|
||||
if (avctx->nb_side_data_prefer_packet == 1 &&
|
||||
avctx->side_data_prefer_packet[0] == -1)
|
||||
dc->side_data_pref_mask = ~0ULL;
|
||||
else {
|
||||
for (unsigned i = 0; i < avctx->nb_side_data_prefer_packet; i++) {
|
||||
int val = avctx->side_data_prefer_packet[i];
|
||||
|
||||
if (val < 0 || val >= AV_PKT_DATA_NB) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid side data type: %d\n", val);
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
|
||||
for (unsigned j = 0; ff_sd_global_map[j].packet < AV_PKT_DATA_NB; j++) {
|
||||
if (ff_sd_global_map[j].packet == val) {
|
||||
val = ff_sd_global_map[j].frame;
|
||||
|
||||
// this code will need to be changed when we have more than
|
||||
// 64 frame side data types
|
||||
if (val >= 64) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Side data type too big\n");
|
||||
return AVERROR_BUG;
|
||||
}
|
||||
|
||||
dc->side_data_pref_mask |= 1ULL << val;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
avci->in_pkt = av_packet_alloc();
|
||||
avci->last_pkt_props = av_packet_alloc();
|
||||
if (!avci->in_pkt || !avci->last_pkt_props)
|
||||
|
@ -1820,6 +1778,96 @@ int ff_decode_preinit(AVCodecContext *avctx)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check side data preference and clear existing side data from frame
|
||||
* if needed.
|
||||
*
|
||||
* @retval 0 side data of this type can be added to frame
|
||||
* @retval 1 side data of this type should not be added to frame
|
||||
*/
|
||||
static int side_data_pref(const AVCodecContext *avctx, AVFrame *frame,
|
||||
enum AVFrameSideDataType type)
|
||||
{
|
||||
DecodeContext *dc = decode_ctx(avctx->internal);
|
||||
|
||||
// Note: could be skipped for `type` without corresponding packet sd
|
||||
if (av_frame_get_side_data(frame, type)) {
|
||||
if (dc->side_data_pref_mask & (1ULL << type))
|
||||
return 1;
|
||||
av_frame_remove_side_data(frame, type);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
int ff_frame_new_side_data(const AVCodecContext *avctx, AVFrame *frame,
|
||||
enum AVFrameSideDataType type, size_t size,
|
||||
AVFrameSideData **psd)
|
||||
{
|
||||
AVFrameSideData *sd;
|
||||
|
||||
if (side_data_pref(avctx, frame, type)) {
|
||||
if (psd)
|
||||
*psd = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
sd = av_frame_new_side_data(frame, type, size);
|
||||
if (psd)
|
||||
*psd = sd;
|
||||
|
||||
return sd ? 0 : AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
int ff_frame_new_side_data_from_buf(const AVCodecContext *avctx,
|
||||
AVFrame *frame, enum AVFrameSideDataType type,
|
||||
AVBufferRef **buf, AVFrameSideData **psd)
|
||||
{
|
||||
AVFrameSideData *sd = NULL;
|
||||
int ret = 0;
|
||||
|
||||
if (side_data_pref(avctx, frame, type))
|
||||
goto finish;
|
||||
|
||||
sd = av_frame_new_side_data_from_buf(frame, type, *buf);
|
||||
if (sd)
|
||||
*buf = NULL;
|
||||
else
|
||||
ret = AVERROR(ENOMEM);
|
||||
|
||||
finish:
|
||||
av_buffer_unref(buf);
|
||||
if (psd)
|
||||
*psd = sd;
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ff_decode_mastering_display_new(const AVCodecContext *avctx, AVFrame *frame,
|
||||
AVMasteringDisplayMetadata **mdm)
|
||||
{
|
||||
if (side_data_pref(avctx, frame, AV_FRAME_DATA_MASTERING_DISPLAY_METADATA)) {
|
||||
*mdm = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*mdm = av_mastering_display_metadata_create_side_data(frame);
|
||||
return *mdm ? 0 : AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
int ff_decode_content_light_new(const AVCodecContext *avctx, AVFrame *frame,
|
||||
AVContentLightMetadata **clm)
|
||||
{
|
||||
if (side_data_pref(avctx, frame, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL)) {
|
||||
*clm = NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
*clm = av_content_light_metadata_create_side_data(frame);
|
||||
return *clm ? 0 : AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
int ff_copy_palette(void *dst, const AVPacket *src, void *logctx)
|
||||
{
|
||||
size_t size;
|
||||
|
@ -1872,8 +1920,8 @@ void ff_decode_flush_buffers(AVCodecContext *avctx)
|
|||
av_packet_unref(avci->last_pkt_props);
|
||||
av_packet_unref(avci->in_pkt);
|
||||
|
||||
avctx->pts_correction_last_pts =
|
||||
avctx->pts_correction_last_dts = INT64_MIN;
|
||||
dc->pts_correction_last_pts =
|
||||
dc->pts_correction_last_dts = INT64_MIN;
|
||||
|
||||
av_bsf_flush(avci->bsf);
|
||||
|
||||
|
|
|
@ -155,4 +155,45 @@ int ff_hwaccel_frame_priv_alloc(AVCodecContext *avctx, void **hwaccel_picture_pr
|
|||
const AVPacketSideData *ff_get_coded_side_data(const AVCodecContext *avctx,
|
||||
enum AVPacketSideDataType type);
|
||||
|
||||
/**
|
||||
* Wrapper around av_frame_new_side_data, which rejects side data overridden by
|
||||
* the demuxer. Returns 0 on success, and a negative error code otherwise.
|
||||
* If successful and sd is not NULL, *sd may either contain a pointer to the new
|
||||
* side data, or NULL in case the side data was already present.
|
||||
*/
|
||||
int ff_frame_new_side_data(const AVCodecContext *avctx, AVFrame *frame,
|
||||
enum AVFrameSideDataType type, size_t size,
|
||||
AVFrameSideData **sd);
|
||||
|
||||
/**
|
||||
* Similar to `ff_frame_new_side_data`, but using an existing buffer ref.
|
||||
*
|
||||
* *buf is ALWAYS consumed by this function and NULL written in its place, even
|
||||
* on failure.
|
||||
*/
|
||||
int ff_frame_new_side_data_from_buf(const AVCodecContext *avctx,
|
||||
AVFrame *frame, enum AVFrameSideDataType type,
|
||||
AVBufferRef **buf, AVFrameSideData **sd);
|
||||
|
||||
struct AVMasteringDisplayMetadata;
|
||||
struct AVContentLightMetadata;
|
||||
|
||||
/**
|
||||
* Wrapper around av_mastering_display_metadata_create_side_data(), which
|
||||
* rejects side data overridden by the demuxer. Returns 0 on success, and a
|
||||
* negative error code otherwise. If successful, *mdm may either be a pointer to
|
||||
* the new side data, or NULL in case the side data was already present.
|
||||
*/
|
||||
int ff_decode_mastering_display_new(const AVCodecContext *avctx, AVFrame *frame,
|
||||
struct AVMasteringDisplayMetadata **mdm);
|
||||
|
||||
/**
|
||||
* Wrapper around av_content_light_metadata_create_side_data(), which
|
||||
* rejects side data overridden by the demuxer. Returns 0 on success, and a
|
||||
* negative error code otherwise. If successful, *clm may either be a pointer to
|
||||
* the new side data, or NULL in case the side data was already present.
|
||||
*/
|
||||
int ff_decode_content_light_new(const AVCodecContext *avctx, AVFrame *frame,
|
||||
struct AVContentLightMetadata **clm);
|
||||
|
||||
#endif /* AVCODEC_DECODE_H */
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
||||
/* vim:set ts=2 sw=2 sts=2 et cindent: */
|
||||
/* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
/* Stubs for dovi_rpu.{c,h} */
|
||||
|
||||
typedef struct AVCtx AVContext;
|
||||
|
||||
typedef struct DOVICtx {
|
||||
int dv_profile;
|
||||
AVContext* logctx;
|
||||
int operating_point;
|
||||
} DOVIContext;
|
||||
|
||||
typedef struct AVDOVICConfRecord {
|
||||
} AVDOVIDecoderConfigurationRecord;
|
||||
|
||||
inline void ff_dovi_ctx_unref(DOVIContext* ctx) {}
|
||||
inline void ff_dovi_update_cfg(DOVIContext* ctx,
|
||||
AVDOVIDecoderConfigurationRecord* record) {}
|
||||
inline int ff_dovi_rpu_parse(DOVIContext* ctx, uint8_t* buf, size_t len,
|
||||
int err_recognition) {
|
||||
return 0;
|
||||
}
|
||||
inline int ff_dovi_attach_side_data(DOVIContext* ctx, AVFrame* frame) {
|
||||
return 0;
|
||||
}
|
|
@ -25,6 +25,7 @@
|
|||
#include "libavutil/frame.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "libavutil/internal.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/samplefmt.h"
|
||||
|
||||
|
@ -198,11 +199,6 @@ int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size,
|
|||
|
||||
ret = ffcodec(avctx->codec)->cb.encode_sub(avctx, buf, buf_size, sub);
|
||||
avctx->frame_num++;
|
||||
#if FF_API_AVCTX_FRAME_NUMBER
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
avctx->frame_number = avctx->frame_num;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -239,12 +235,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
int ff_encode_reordered_opaque(AVCodecContext *avctx,
|
||||
AVPacket *pkt, const AVFrame *frame)
|
||||
{
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
avctx->reordered_opaque = frame->reordered_opaque;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) {
|
||||
int ret = av_buffer_replace(&pkt->opaque_ref, frame->opaque_ref);
|
||||
if (ret < 0)
|
||||
|
@ -544,11 +534,6 @@ int attribute_align_arg avcodec_send_frame(AVCodecContext *avctx, const AVFrame
|
|||
}
|
||||
|
||||
avctx->frame_num++;
|
||||
#if FF_API_AVCTX_FRAME_NUMBER
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
avctx->frame_number = avctx->frame_num;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -736,6 +721,8 @@ static int encode_preinit_audio(AVCodecContext *avctx)
|
|||
}
|
||||
}
|
||||
|
||||
if (!avctx->bits_per_raw_sample)
|
||||
avctx->bits_per_raw_sample = av_get_exact_bits_per_sample(avctx->codec_id);
|
||||
if (!avctx->bits_per_raw_sample)
|
||||
avctx->bits_per_raw_sample = 8 * av_get_bytes_per_sample(avctx->sample_fmt);
|
||||
|
||||
|
@ -796,6 +783,29 @@ int ff_encode_preinit(AVCodecContext *avctx)
|
|||
return AVERROR(ENOMEM);
|
||||
}
|
||||
|
||||
for (int i = 0; ff_sd_global_map[i].packet < AV_PKT_DATA_NB; i++) {
|
||||
const enum AVPacketSideDataType type_packet = ff_sd_global_map[i].packet;
|
||||
const enum AVFrameSideDataType type_frame = ff_sd_global_map[i].frame;
|
||||
const AVFrameSideData *sd_frame;
|
||||
AVPacketSideData *sd_packet;
|
||||
|
||||
sd_frame = av_frame_side_data_get(avctx->decoded_side_data,
|
||||
avctx->nb_decoded_side_data,
|
||||
type_frame);
|
||||
if (!sd_frame ||
|
||||
av_packet_side_data_get(avctx->coded_side_data, avctx->nb_coded_side_data,
|
||||
type_packet))
|
||||
|
||||
continue;
|
||||
|
||||
sd_packet = av_packet_side_data_new(&avctx->coded_side_data, &avctx->nb_coded_side_data,
|
||||
type_packet, sd_frame->size, 0);
|
||||
if (!sd_packet)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
memcpy(sd_packet->data, sd_frame->data, sd_frame->size);
|
||||
}
|
||||
|
||||
if (CONFIG_FRAME_THREAD_ENCODER) {
|
||||
ret = ff_frame_thread_encoder_init(avctx);
|
||||
if (ret < 0)
|
||||
|
|
|
@ -26,6 +26,12 @@
|
|||
#include "avcodec.h"
|
||||
#include "packet.h"
|
||||
|
||||
/**
|
||||
* Used by some encoders as upper bound for the length of headers.
|
||||
* TODO: Use proper codec-specific upper bounds.
|
||||
*/
|
||||
#define FF_INPUT_BUFFER_MIN_SIZE 16384
|
||||
|
||||
/**
|
||||
* Called by encoders to get the next frame for encoding.
|
||||
*
|
||||
|
|
|
@ -35,14 +35,13 @@
|
|||
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/crc.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "avcodec.h"
|
||||
#include "codec_internal.h"
|
||||
#include "get_bits.h"
|
||||
#include "bytestream.h"
|
||||
#include "golomb.h"
|
||||
#include "flac.h"
|
||||
#include "flacdata.h"
|
||||
#include "flacdsp.h"
|
||||
#include "flac_parse.h"
|
||||
#include "thread.h"
|
||||
|
|
|
@ -94,7 +94,6 @@ typedef BitstreamContext GetBitContext;
|
|||
#define align_get_bits bits_align
|
||||
#define get_vlc2 bits_read_vlc
|
||||
#define get_vlc_multi bits_read_vlc_multi
|
||||
#define get_leb bits_read_leb
|
||||
|
||||
#define init_get_bits8_le(s, buffer, byte_size) bits_init8_le((BitstreamContextLE*)s, buffer, byte_size)
|
||||
#define get_bits_le(s, n) bits_read_le((BitstreamContextLE*)s, n)
|
||||
|
@ -668,7 +667,8 @@ static av_always_inline int get_vlc2(GetBitContext *s, const VLCElem *table,
|
|||
static inline int get_vlc_multi(GetBitContext *s, uint8_t *dst,
|
||||
const VLC_MULTI_ELEM *const Jtable,
|
||||
const VLCElem *const table,
|
||||
const int bits, const int max_depth)
|
||||
const int bits, const int max_depth,
|
||||
const int symbols_size)
|
||||
{
|
||||
dst[0] = get_vlc2(s, table, bits, max_depth);
|
||||
return 1;
|
||||
|
@ -711,29 +711,6 @@ static inline int skip_1stop_8data_bits(GetBitContext *gb)
|
|||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a unsigned integer coded as a variable number of up to eight
|
||||
* little-endian bytes, where the MSB in a byte signals another byte
|
||||
* must be read.
|
||||
* All coded bits are read, but values > UINT_MAX are truncated.
|
||||
*/
|
||||
static inline unsigned get_leb(GetBitContext *s) {
|
||||
int more, i = 0;
|
||||
unsigned leb = 0;
|
||||
|
||||
do {
|
||||
int byte = get_bits(s, 8);
|
||||
unsigned bits = byte & 0x7f;
|
||||
more = byte & 0x80;
|
||||
if (i <= 4)
|
||||
leb |= bits << (i * 7);
|
||||
if (++i == 8)
|
||||
break;
|
||||
} while (more);
|
||||
|
||||
return leb;
|
||||
}
|
||||
|
||||
#endif // CACHED_BITSTREAM_READER
|
||||
|
||||
#endif /* AVCODEC_GET_BITS_H */
|
||||
|
|
|
@ -70,12 +70,6 @@ static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame)
|
|||
if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
int planar = av_sample_fmt_is_planar(frame->format);
|
||||
ch = frame->ch_layout.nb_channels;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (!ch)
|
||||
ch = frame->channels;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
planes = planar ? ch : 1;
|
||||
}
|
||||
|
||||
|
@ -263,6 +257,22 @@ int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags
|
|||
|
||||
if (avctx->hw_frames_ctx) {
|
||||
ret = av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0);
|
||||
if (ret == AVERROR(ENOMEM)) {
|
||||
AVHWFramesContext *frames_ctx =
|
||||
(AVHWFramesContext*)avctx->hw_frames_ctx->data;
|
||||
if (frames_ctx->initial_pool_size > 0 &&
|
||||
!avctx->internal->warned_on_failed_allocation_from_fixed_pool) {
|
||||
av_log(avctx, AV_LOG_WARNING, "Failed to allocate a %s/%s "
|
||||
"frame from a fixed pool of hardware frames.\n",
|
||||
av_get_pix_fmt_name(frames_ctx->format),
|
||||
av_get_pix_fmt_name(frames_ctx->sw_format));
|
||||
av_log(avctx, AV_LOG_WARNING, "Consider setting "
|
||||
"extra_hw_frames to a larger value "
|
||||
"(currently set to %d, giving a pool size of %d).\n",
|
||||
avctx->extra_hw_frames, frames_ctx->initial_pool_size);
|
||||
avctx->internal->warned_on_failed_allocation_from_fixed_pool = 1;
|
||||
}
|
||||
}
|
||||
frame->width = avctx->coded_width;
|
||||
frame->height = avctx->coded_height;
|
||||
return ret;
|
||||
|
|
|
@ -1,84 +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_HWACCEL_H
|
||||
#define AVCODEC_HWACCEL_H
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "hwaccels.h"
|
||||
|
||||
|
||||
#define HWACCEL_CAP_ASYNC_SAFE (1 << 0)
|
||||
|
||||
|
||||
typedef struct AVCodecHWConfigInternal {
|
||||
/**
|
||||
* This is the structure which will be returned to the user by
|
||||
* avcodec_get_hw_config().
|
||||
*/
|
||||
AVCodecHWConfig public;
|
||||
/**
|
||||
* If this configuration uses a hwaccel, a pointer to it.
|
||||
* If not, NULL.
|
||||
*/
|
||||
const AVHWAccel *hwaccel;
|
||||
} AVCodecHWConfigInternal;
|
||||
|
||||
|
||||
// These macros are used to simplify AVCodecHWConfigInternal definitions.
|
||||
|
||||
#define HW_CONFIG_HWACCEL(device, frames, ad_hoc, format, device_type_, name) \
|
||||
&(const AVCodecHWConfigInternal) { \
|
||||
.public = { \
|
||||
.pix_fmt = AV_PIX_FMT_ ## format, \
|
||||
.methods = (device ? AV_CODEC_HW_CONFIG_METHOD_HW_DEVICE_CTX : 0) | \
|
||||
(frames ? AV_CODEC_HW_CONFIG_METHOD_HW_FRAMES_CTX : 0) | \
|
||||
(ad_hoc ? AV_CODEC_HW_CONFIG_METHOD_AD_HOC : 0), \
|
||||
.device_type = AV_HWDEVICE_TYPE_ ## device_type_, \
|
||||
}, \
|
||||
.hwaccel = &name, \
|
||||
}
|
||||
|
||||
#define HW_CONFIG_INTERNAL(format) \
|
||||
&(const AVCodecHWConfigInternal) { \
|
||||
.public = { \
|
||||
.pix_fmt = AV_PIX_FMT_ ## format, \
|
||||
.methods = AV_CODEC_HW_CONFIG_METHOD_INTERNAL, \
|
||||
.device_type = AV_HWDEVICE_TYPE_NONE, \
|
||||
}, \
|
||||
.hwaccel = NULL, \
|
||||
}
|
||||
|
||||
#define HWACCEL_DXVA2(codec) \
|
||||
HW_CONFIG_HWACCEL(1, 1, 1, DXVA2_VLD, DXVA2, ff_ ## codec ## _dxva2_hwaccel)
|
||||
#define HWACCEL_D3D11VA2(codec) \
|
||||
HW_CONFIG_HWACCEL(1, 1, 0, D3D11, D3D11VA, ff_ ## codec ## _d3d11va2_hwaccel)
|
||||
#define HWACCEL_NVDEC(codec) \
|
||||
HW_CONFIG_HWACCEL(1, 1, 0, CUDA, CUDA, ff_ ## codec ## _nvdec_hwaccel)
|
||||
#define HWACCEL_VAAPI(codec) \
|
||||
HW_CONFIG_HWACCEL(1, 1, 1, VAAPI, VAAPI, ff_ ## codec ## _vaapi_hwaccel)
|
||||
#define HWACCEL_VDPAU(codec) \
|
||||
HW_CONFIG_HWACCEL(1, 1, 1, VDPAU, VDPAU, ff_ ## codec ## _vdpau_hwaccel)
|
||||
#define HWACCEL_VIDEOTOOLBOX(codec) \
|
||||
HW_CONFIG_HWACCEL(1, 1, 1, VIDEOTOOLBOX, VIDEOTOOLBOX, ff_ ## codec ## _videotoolbox_hwaccel)
|
||||
#define HWACCEL_D3D11VA(codec) \
|
||||
HW_CONFIG_HWACCEL(0, 0, 1, D3D11VA_VLD, NONE, ff_ ## codec ## _d3d11va_hwaccel)
|
||||
#define HWACCEL_XVMC(codec) \
|
||||
HW_CONFIG_HWACCEL(0, 0, 1, XVMC, NONE, ff_ ## codec ## _xvmc_hwaccel)
|
||||
|
||||
#endif /* AVCODEC_HWACCEL_H */
|
|
@ -128,7 +128,7 @@ typedef struct FFHWAccel {
|
|||
/**
|
||||
* Uninitialize the hwaccel private data.
|
||||
*
|
||||
* This will be called from get_format() or avcodec_close(), after hwaccel
|
||||
* This will be called from get_format() or ff_codec_close(), after hwaccel
|
||||
* and hwaccel_context are already uninitialized.
|
||||
*/
|
||||
int (*uninit)(AVCodecContext *avctx);
|
||||
|
|
|
@ -70,7 +70,7 @@ av_cold void ff_init_scantable_permutation(uint8_t *idct_permutation,
|
|||
}
|
||||
}
|
||||
|
||||
void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
ptrdiff_t line_size)
|
||||
{
|
||||
int i;
|
||||
|
@ -91,7 +91,7 @@ void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
|
|||
}
|
||||
}
|
||||
|
||||
static void put_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
static void put_pixels_clamped4_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
int line_size)
|
||||
{
|
||||
int i;
|
||||
|
@ -108,7 +108,7 @@ static void put_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pix
|
|||
}
|
||||
}
|
||||
|
||||
static void put_pixels_clamped2_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
static void put_pixels_clamped2_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
int line_size)
|
||||
{
|
||||
int i;
|
||||
|
@ -124,7 +124,7 @@ static void put_pixels_clamped2_c(const int16_t *block, uint8_t *av_restrict pix
|
|||
}
|
||||
|
||||
static void put_signed_pixels_clamped_c(const int16_t *block,
|
||||
uint8_t *av_restrict pixels,
|
||||
uint8_t *restrict pixels,
|
||||
ptrdiff_t line_size)
|
||||
{
|
||||
int i, j;
|
||||
|
@ -144,7 +144,7 @@ static void put_signed_pixels_clamped_c(const int16_t *block,
|
|||
}
|
||||
}
|
||||
|
||||
void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
ptrdiff_t line_size)
|
||||
{
|
||||
int i;
|
||||
|
@ -164,7 +164,7 @@ void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
|
|||
}
|
||||
}
|
||||
|
||||
static void add_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
static void add_pixels_clamped4_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
int line_size)
|
||||
{
|
||||
int i;
|
||||
|
@ -180,7 +180,7 @@ static void add_pixels_clamped4_c(const int16_t *block, uint8_t *av_restrict pix
|
|||
}
|
||||
}
|
||||
|
||||
static void add_pixels_clamped2_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
static void add_pixels_clamped2_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
int line_size)
|
||||
{
|
||||
int i;
|
||||
|
|
|
@ -22,8 +22,6 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
struct AVCodecContext;
|
||||
|
||||
enum idct_permutation_type {
|
||||
|
@ -45,13 +43,13 @@ int ff_init_scantable_permutation_x86(uint8_t *idct_permutation,
|
|||
typedef struct IDCTDSPContext {
|
||||
/* pixel ops : interface with DCT */
|
||||
void (*put_pixels_clamped)(const int16_t *block /* align 16 */,
|
||||
uint8_t *av_restrict pixels /* align 8 */,
|
||||
uint8_t *restrict pixels /* align 8 */,
|
||||
ptrdiff_t line_size);
|
||||
void (*put_signed_pixels_clamped)(const int16_t *block /* align 16 */,
|
||||
uint8_t *av_restrict pixels /* align 8 */,
|
||||
uint8_t *restrict pixels /* align 8 */,
|
||||
ptrdiff_t line_size);
|
||||
void (*add_pixels_clamped)(const int16_t *block /* align 16 */,
|
||||
uint8_t *av_restrict pixels /* align 8 */,
|
||||
uint8_t *restrict pixels /* align 8 */,
|
||||
ptrdiff_t line_size);
|
||||
|
||||
void (*idct)(int16_t *block /* align 16 */);
|
||||
|
@ -91,9 +89,9 @@ typedef struct IDCTDSPContext {
|
|||
int mpeg4_studio_profile;
|
||||
} IDCTDSPContext;
|
||||
|
||||
void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
ptrdiff_t line_size);
|
||||
void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels,
|
||||
void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *restrict pixels,
|
||||
ptrdiff_t line_size);
|
||||
|
||||
void ff_idctdsp_init(IDCTDSPContext *c, struct AVCodecContext *avctx);
|
||||
|
|
|
@ -26,10 +26,7 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/buffer.h"
|
||||
#include "libavutil/channel_layout.h"
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "libavutil/pixfmt.h"
|
||||
#include "avcodec.h"
|
||||
#include "config.h"
|
||||
|
||||
|
@ -147,6 +144,12 @@ typedef struct AVCodecInternal {
|
|||
#if CONFIG_LCMS2
|
||||
FFIccContext icc; /* used to read and write embedded ICC profiles */
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Set when the user has been warned about a failed allocation from
|
||||
* a fixed frame pool.
|
||||
*/
|
||||
int warned_on_failed_allocation_from_fixed_pool;
|
||||
} AVCodecInternal;
|
||||
|
||||
/**
|
||||
|
@ -157,25 +160,6 @@ int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b);
|
|||
|
||||
unsigned int ff_toupper4(unsigned int x);
|
||||
|
||||
/**
|
||||
* 2^(x) for integer x
|
||||
* @return correctly rounded float
|
||||
*/
|
||||
static av_always_inline float ff_exp2fi(int x) {
|
||||
/* Normal range */
|
||||
if (-126 <= x && x <= 128)
|
||||
return av_int2float((x+127) << 23);
|
||||
/* Too large */
|
||||
else if (x > 128)
|
||||
return INFINITY;
|
||||
/* Subnormal numbers */
|
||||
else if (x > -150)
|
||||
return av_int2float(1 << (x+149));
|
||||
/* Negligibly small */
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx);
|
||||
|
||||
int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec);
|
||||
|
|
|
@ -16,29 +16,15 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/cpu.h"
|
||||
#include "libavutil/x86/cpu.h"
|
||||
#include "libavcodec/avcodec.h"
|
||||
#include "libavcodec/fdctdsp.h"
|
||||
#include "fdct.h"
|
||||
#ifndef AVCODEC_ITUT35_H
|
||||
#define AVCODEC_ITUT35_H
|
||||
|
||||
av_cold void ff_fdctdsp_init_x86(FDCTDSPContext *c, AVCodecContext *avctx,
|
||||
unsigned high_bit_depth)
|
||||
{
|
||||
int cpu_flags = av_get_cpu_flags();
|
||||
const int dct_algo = avctx->dct_algo;
|
||||
#define ITU_T_T35_COUNTRY_CODE_CN 0x26
|
||||
#define ITU_T_T35_COUNTRY_CODE_US 0xB5
|
||||
|
||||
if (!high_bit_depth) {
|
||||
if ((dct_algo == FF_DCT_AUTO || dct_algo == FF_DCT_MMX)) {
|
||||
if (INLINE_MMX(cpu_flags))
|
||||
c->fdct = ff_fdct_mmx;
|
||||
#define ITU_T_T35_PROVIDER_CODE_ATSC 0x31
|
||||
#define ITU_T_T35_PROVIDER_CODE_CUVA 0x04
|
||||
#define ITU_T_T35_PROVIDER_CODE_DOLBY 0x3B
|
||||
#define ITU_T_T35_PROVIDER_CODE_SMTPE 0x3C
|
||||
|
||||
if (INLINE_MMXEXT(cpu_flags))
|
||||
c->fdct = ff_fdct_mmxext;
|
||||
|
||||
if (INLINE_SSE2(cpu_flags))
|
||||
c->fdct = ff_fdct_sse2;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif /* AVCODEC_ITUT35_H */
|
|
@ -0,0 +1,70 @@
|
|||
/*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General 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
|
||||
* leb128 handling implementations
|
||||
*/
|
||||
|
||||
#ifndef AVCODEC_LEB_H
|
||||
#define AVCODEC_LEB_H
|
||||
|
||||
#include "get_bits.h"
|
||||
|
||||
/**
|
||||
* Read a unsigned integer coded as a variable number of up to eight
|
||||
* little-endian bytes, where the MSB in a byte signals another byte
|
||||
* must be read.
|
||||
* All coded bits are read, but values > UINT_MAX are truncated.
|
||||
*/
|
||||
static inline unsigned get_leb(GetBitContext *s) {
|
||||
int more, i = 0;
|
||||
unsigned leb = 0;
|
||||
|
||||
do {
|
||||
int byte = get_bits(s, 8);
|
||||
unsigned bits = byte & 0x7f;
|
||||
more = byte & 0x80;
|
||||
if (i <= 4)
|
||||
leb |= bits << (i * 7);
|
||||
if (++i == 8)
|
||||
break;
|
||||
} while (more);
|
||||
|
||||
return leb;
|
||||
}
|
||||
|
||||
/**
|
||||
* Read a unsigned integer coded as a variable number of up to eight
|
||||
* little-endian bytes, where the MSB in a byte signals another byte
|
||||
* must be read.
|
||||
*/
|
||||
static inline int64_t get_leb128(GetBitContext *gb) {
|
||||
int64_t ret = 0;
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
int byte = get_bits(gb, 8);
|
||||
ret |= (int64_t)(byte & 0x7f) << (i * 7);
|
||||
if (!(byte & 0x80))
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#endif /* AVCODEC_LEB_H */
|
|
@ -35,6 +35,7 @@
|
|||
#include "libavutil/cpu.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
#include "libavutil/mathematics.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
|
||||
|
@ -1467,13 +1468,13 @@ static const AVOption options[] = {
|
|||
"alternate reference frame selection", OFFSET(lag_in_frames), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE},
|
||||
{ "arnr-max-frames", "altref noise reduction max frame count", OFFSET(arnr_max_frames), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE},
|
||||
{ "arnr-strength", "altref noise reduction filter strength", OFFSET(arnr_strength), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 6, VE},
|
||||
{ "aq-mode", "adaptive quantization mode", OFFSET(aq_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 4, VE, "aq_mode"},
|
||||
{ "none", "Aq not used", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, VE, "aq_mode"},
|
||||
{ "variance", "Variance based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, "aq_mode"},
|
||||
{ "complexity", "Complexity based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, "aq_mode"},
|
||||
{ "cyclic", "Cyclic Refresh Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 0, VE, "aq_mode"},
|
||||
{ "error-resilience", "Error resilience configuration", OFFSET(error_resilient), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, VE, "er"},
|
||||
{ "default", "Improve resiliency against losses of whole frames", 0, AV_OPT_TYPE_CONST, {.i64 = AOM_ERROR_RESILIENT_DEFAULT}, 0, 0, VE, "er"},
|
||||
{ "aq-mode", "adaptive quantization mode", OFFSET(aq_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 4, VE, .unit = "aq_mode"},
|
||||
{ "none", "Aq not used", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, VE, .unit = "aq_mode"},
|
||||
{ "variance", "Variance based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, .unit = "aq_mode"},
|
||||
{ "complexity", "Complexity based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, .unit = "aq_mode"},
|
||||
{ "cyclic", "Cyclic Refresh Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 0, VE, .unit = "aq_mode"},
|
||||
{ "error-resilience", "Error resilience configuration", OFFSET(error_resilient), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, VE, .unit = "er"},
|
||||
{ "default", "Improve resiliency against losses of whole frames", 0, AV_OPT_TYPE_CONST, {.i64 = AOM_ERROR_RESILIENT_DEFAULT}, 0, 0, VE, .unit = "er"},
|
||||
{ "crf", "Select the quality for constant quality mode", offsetof(AOMContext, crf), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 63, VE },
|
||||
{ "static-thresh", "A change threshold on blocks below which they will be skipped by the encoder", OFFSET(static_thresh), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE },
|
||||
{ "drop-threshold", "Frame drop threshold", offsetof(AOMContext, drop_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, VE },
|
||||
|
@ -1492,13 +1493,13 @@ static const AVOption options[] = {
|
|||
{ "enable-global-motion", "Enable global motion", OFFSET(enable_global_motion), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE},
|
||||
{ "enable-intrabc", "Enable intra block copy prediction mode", OFFSET(enable_intrabc), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE},
|
||||
{ "enable-restoration", "Enable Loop Restoration filtering", OFFSET(enable_restoration), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE},
|
||||
{ "usage", "Quality and compression efficiency vs speed trade-off", OFFSET(usage), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE, "usage"},
|
||||
{ "good", "Good quality", 0, AV_OPT_TYPE_CONST, {.i64 = 0 /* AOM_USAGE_GOOD_QUALITY */}, 0, 0, VE, "usage"},
|
||||
{ "realtime", "Realtime encoding", 0, AV_OPT_TYPE_CONST, {.i64 = 1 /* AOM_USAGE_REALTIME */}, 0, 0, VE, "usage"},
|
||||
{ "allintra", "All Intra encoding", 0, AV_OPT_TYPE_CONST, {.i64 = 2 /* AOM_USAGE_ALL_INTRA */}, 0, 0, VE, "usage"},
|
||||
{ "tune", "The metric that the encoder tunes for. Automatically chosen by the encoder by default", OFFSET(tune), AV_OPT_TYPE_INT, {.i64 = -1}, -1, AOM_TUNE_SSIM, VE, "tune"},
|
||||
{ "psnr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AOM_TUNE_PSNR}, 0, 0, VE, "tune"},
|
||||
{ "ssim", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AOM_TUNE_SSIM}, 0, 0, VE, "tune"},
|
||||
{ "usage", "Quality and compression efficiency vs speed trade-off", OFFSET(usage), AV_OPT_TYPE_INT, {.i64 = 0}, 0, INT_MAX, VE, .unit = "usage"},
|
||||
{ "good", "Good quality", 0, AV_OPT_TYPE_CONST, {.i64 = 0 /* AOM_USAGE_GOOD_QUALITY */}, 0, 0, VE, .unit = "usage"},
|
||||
{ "realtime", "Realtime encoding", 0, AV_OPT_TYPE_CONST, {.i64 = 1 /* AOM_USAGE_REALTIME */}, 0, 0, VE, .unit = "usage"},
|
||||
{ "allintra", "All Intra encoding", 0, AV_OPT_TYPE_CONST, {.i64 = 2 /* AOM_USAGE_ALL_INTRA */}, 0, 0, VE, .unit = "usage"},
|
||||
{ "tune", "The metric that the encoder tunes for. Automatically chosen by the encoder by default", OFFSET(tune), AV_OPT_TYPE_INT, {.i64 = -1}, -1, AOM_TUNE_SSIM, VE, .unit = "tune"},
|
||||
{ "psnr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AOM_TUNE_PSNR}, 0, 0, VE, .unit = "tune"},
|
||||
{ "ssim", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AOM_TUNE_SSIM}, 0, 0, VE, .unit = "tune"},
|
||||
FF_AV1_PROFILE_OPTS
|
||||
{ "still-picture", "Encode in single frame mode (typically used for still AVIF images).", OFFSET(still_picture), AV_OPT_TYPE_BOOL, {.i64 = 0}, -1, 1, VE },
|
||||
{ "enable-rect-partitions", "Enable rectangular partitions", OFFSET(enable_rect_partitions), AV_OPT_TYPE_BOOL, {.i64 = -1}, -1, 1, VE},
|
||||
|
|
|
@ -35,7 +35,9 @@
|
|||
#include "bytestream.h"
|
||||
#include "codec_internal.h"
|
||||
#include "decode.h"
|
||||
#include "dovi_rpu.h"
|
||||
#include "internal.h"
|
||||
#include "itut35.h"
|
||||
|
||||
#define FF_DAV1D_VERSION_AT_LEAST(x,y) \
|
||||
(DAV1D_API_VERSION_MAJOR > (x) || DAV1D_API_VERSION_MAJOR == (x) && DAV1D_API_VERSION_MINOR >= (y))
|
||||
|
@ -44,6 +46,7 @@ typedef struct Libdav1dContext {
|
|||
AVClass *class;
|
||||
Dav1dContext *c;
|
||||
AVBufferPool *pool;
|
||||
DOVIContext dovi;
|
||||
int pool_size;
|
||||
|
||||
Dav1dData data;
|
||||
|
@ -213,9 +216,10 @@ static av_cold int libdav1d_init(AVCodecContext *c)
|
|||
#else
|
||||
int threads = (c->thread_count ? c->thread_count : av_cpu_count()) * 3 / 2;
|
||||
#endif
|
||||
const AVPacketSideData *sd;
|
||||
int res;
|
||||
|
||||
av_log(c, AV_LOG_INFO, "libdav1d %s\n", dav1d_version());
|
||||
av_log(c, AV_LOG_VERBOSE, "libdav1d %s\n", dav1d_version());
|
||||
|
||||
dav1d_default_settings(&s);
|
||||
s.logger.cookie = c;
|
||||
|
@ -285,6 +289,11 @@ static av_cold int libdav1d_init(AVCodecContext *c)
|
|||
c->delay = res > 1 ? res : 0;
|
||||
#endif
|
||||
|
||||
dav1d->dovi.logctx = c;
|
||||
dav1d->dovi.dv_profile = 10; // default for AV1
|
||||
sd = ff_get_coded_side_data(c, AV_PKT_DATA_DOVI_CONF);
|
||||
if (sd && sd->size > 0)
|
||||
ff_dovi_update_cfg(&dav1d->dovi, (AVDOVIDecoderConfigurationRecord *) sd->data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -296,13 +305,6 @@ static void libdav1d_flush(AVCodecContext *c)
|
|||
dav1d_flush(dav1d->c);
|
||||
}
|
||||
|
||||
typedef struct OpaqueData {
|
||||
void *pkt_orig_opaque;
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
int64_t reordered_opaque;
|
||||
#endif
|
||||
} OpaqueData;
|
||||
|
||||
static void libdav1d_data_free(const uint8_t *data, void *opaque) {
|
||||
AVBufferRef *buf = opaque;
|
||||
|
||||
|
@ -312,7 +314,6 @@ static void libdav1d_data_free(const uint8_t *data, void *opaque) {
|
|||
static void libdav1d_user_data_free(const uint8_t *data, void *opaque) {
|
||||
AVPacket *pkt = opaque;
|
||||
av_assert0(data == opaque);
|
||||
av_free(pkt->opaque);
|
||||
av_packet_free(&pkt);
|
||||
}
|
||||
|
||||
|
@ -335,8 +336,6 @@ static int libdav1d_receive_frame_internal(AVCodecContext *c, Dav1dPicture *p)
|
|||
}
|
||||
|
||||
if (pkt->size) {
|
||||
OpaqueData *od = NULL;
|
||||
|
||||
res = dav1d_data_wrap(data, pkt->data, pkt->size,
|
||||
libdav1d_data_free, pkt->buf);
|
||||
if (res < 0) {
|
||||
|
@ -346,30 +345,9 @@ static int libdav1d_receive_frame_internal(AVCodecContext *c, Dav1dPicture *p)
|
|||
|
||||
pkt->buf = NULL;
|
||||
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
c->reordered_opaque != AV_NOPTS_VALUE ||
|
||||
#endif
|
||||
(pkt->opaque && (c->flags & AV_CODEC_FLAG_COPY_OPAQUE))) {
|
||||
od = av_mallocz(sizeof(*od));
|
||||
if (!od) {
|
||||
av_packet_free(&pkt);
|
||||
dav1d_data_unref(data);
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
od->pkt_orig_opaque = pkt->opaque;
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
od->reordered_opaque = c->reordered_opaque;
|
||||
#endif
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
}
|
||||
pkt->opaque = od;
|
||||
|
||||
res = dav1d_data_wrap_user_data(data, (const uint8_t *)pkt,
|
||||
libdav1d_user_data_free, pkt);
|
||||
if (res < 0) {
|
||||
av_free(pkt->opaque);
|
||||
av_packet_free(&pkt);
|
||||
dav1d_data_unref(data);
|
||||
return res;
|
||||
|
@ -408,7 +386,6 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame)
|
|||
Libdav1dContext *dav1d = c->priv_data;
|
||||
Dav1dPicture pic = { 0 }, *p = &pic;
|
||||
AVPacket *pkt;
|
||||
OpaqueData *od = NULL;
|
||||
#if FF_DAV1D_VERSION_AT_LEAST(5,1)
|
||||
enum Dav1dEventFlags event_flags = 0;
|
||||
#endif
|
||||
|
@ -463,24 +440,9 @@ static int libdav1d_receive_frame(AVCodecContext *c, AVFrame *frame)
|
|||
ff_set_sar(c, frame->sample_aspect_ratio);
|
||||
|
||||
pkt = (AVPacket *)p->m.user_data.data;
|
||||
od = pkt->opaque;
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (od && od->reordered_opaque != AV_NOPTS_VALUE)
|
||||
frame->reordered_opaque = od->reordered_opaque;
|
||||
else
|
||||
frame->reordered_opaque = AV_NOPTS_VALUE;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
// restore the original user opaque value for
|
||||
// ff_decode_frame_props_from_pkt()
|
||||
pkt->opaque = od ? od->pkt_orig_opaque : NULL;
|
||||
av_freep(&od);
|
||||
|
||||
// match timestamps and packet size
|
||||
res = ff_decode_frame_props_from_pkt(c, frame, pkt);
|
||||
pkt->opaque = NULL;
|
||||
if (res < 0)
|
||||
goto fail;
|
||||
|
||||
|
@ -507,33 +469,38 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
}
|
||||
|
||||
if (p->mastering_display) {
|
||||
AVMasteringDisplayMetadata *mastering = av_mastering_display_metadata_create_side_data(frame);
|
||||
if (!mastering) {
|
||||
res = AVERROR(ENOMEM);
|
||||
AVMasteringDisplayMetadata *mastering;
|
||||
|
||||
res = ff_decode_mastering_display_new(c, frame, &mastering);
|
||||
if (res < 0)
|
||||
goto fail;
|
||||
|
||||
if (mastering) {
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mastering->display_primaries[i][0] = av_make_q(p->mastering_display->primaries[i][0], 1 << 16);
|
||||
mastering->display_primaries[i][1] = av_make_q(p->mastering_display->primaries[i][1], 1 << 16);
|
||||
}
|
||||
mastering->white_point[0] = av_make_q(p->mastering_display->white_point[0], 1 << 16);
|
||||
mastering->white_point[1] = av_make_q(p->mastering_display->white_point[1], 1 << 16);
|
||||
|
||||
mastering->max_luminance = av_make_q(p->mastering_display->max_luminance, 1 << 8);
|
||||
mastering->min_luminance = av_make_q(p->mastering_display->min_luminance, 1 << 14);
|
||||
|
||||
mastering->has_primaries = 1;
|
||||
mastering->has_luminance = 1;
|
||||
}
|
||||
|
||||
for (int i = 0; i < 3; i++) {
|
||||
mastering->display_primaries[i][0] = av_make_q(p->mastering_display->primaries[i][0], 1 << 16);
|
||||
mastering->display_primaries[i][1] = av_make_q(p->mastering_display->primaries[i][1], 1 << 16);
|
||||
}
|
||||
mastering->white_point[0] = av_make_q(p->mastering_display->white_point[0], 1 << 16);
|
||||
mastering->white_point[1] = av_make_q(p->mastering_display->white_point[1], 1 << 16);
|
||||
|
||||
mastering->max_luminance = av_make_q(p->mastering_display->max_luminance, 1 << 8);
|
||||
mastering->min_luminance = av_make_q(p->mastering_display->min_luminance, 1 << 14);
|
||||
|
||||
mastering->has_primaries = 1;
|
||||
mastering->has_luminance = 1;
|
||||
}
|
||||
if (p->content_light) {
|
||||
AVContentLightMetadata *light = av_content_light_metadata_create_side_data(frame);
|
||||
if (!light) {
|
||||
res = AVERROR(ENOMEM);
|
||||
AVContentLightMetadata *light;
|
||||
|
||||
res = ff_decode_content_light_new(c, frame, &light);
|
||||
if (res < 0)
|
||||
goto fail;
|
||||
|
||||
if (light) {
|
||||
light->MaxCLL = p->content_light->max_content_light_level;
|
||||
light->MaxFALL = p->content_light->max_frame_average_light_level;
|
||||
}
|
||||
light->MaxCLL = p->content_light->max_content_light_level;
|
||||
light->MaxFALL = p->content_light->max_frame_average_light_level;
|
||||
}
|
||||
if (p->itut_t35) {
|
||||
#if FF_DAV1D_VERSION_AT_LEAST(6,9)
|
||||
|
@ -549,7 +516,7 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
|
||||
provider_code = bytestream2_get_be16(&gb);
|
||||
switch (provider_code) {
|
||||
case 0x31: { // atsc_provider_code
|
||||
case ITU_T_T35_PROVIDER_CODE_ATSC: {
|
||||
uint32_t user_identifier = bytestream2_get_be32(&gb);
|
||||
switch (user_identifier) {
|
||||
case MKBETAG('G', 'A', '9', '4'): { // closed captions
|
||||
|
@ -561,8 +528,9 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
if (!res)
|
||||
break;
|
||||
|
||||
if (!av_frame_new_side_data_from_buf(frame, AV_FRAME_DATA_A53_CC, buf))
|
||||
av_buffer_unref(&buf);
|
||||
res = ff_frame_new_side_data_from_buf(c, frame, AV_FRAME_DATA_A53_CC, &buf, NULL);
|
||||
if (res < 0)
|
||||
goto fail;
|
||||
|
||||
c->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
|
||||
break;
|
||||
|
@ -572,12 +540,12 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
}
|
||||
break;
|
||||
}
|
||||
case 0x3C: { // smpte_provider_code
|
||||
case ITU_T_T35_PROVIDER_CODE_SMTPE: {
|
||||
AVDynamicHDRPlus *hdrplus;
|
||||
int provider_oriented_code = bytestream2_get_be16(&gb);
|
||||
int application_identifier = bytestream2_get_byte(&gb);
|
||||
|
||||
if (itut_t35->country_code != 0xB5 ||
|
||||
if (itut_t35->country_code != ITU_T_T35_COUNTRY_CODE_US ||
|
||||
provider_oriented_code != 1 || application_identifier != 4)
|
||||
break;
|
||||
|
||||
|
@ -593,6 +561,24 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
goto fail;
|
||||
break;
|
||||
}
|
||||
case ITU_T_T35_PROVIDER_CODE_DOLBY: {
|
||||
int provider_oriented_code = bytestream2_get_be32(&gb);
|
||||
if (itut_t35->country_code != ITU_T_T35_COUNTRY_CODE_US ||
|
||||
provider_oriented_code != 0x800)
|
||||
break;
|
||||
|
||||
res = ff_dovi_rpu_parse(&dav1d->dovi, gb.buffer, gb.buffer_end - gb.buffer,
|
||||
c->err_recognition);
|
||||
if (res < 0) {
|
||||
av_log(c, AV_LOG_WARNING, "Error parsing DOVI OBU.\n");
|
||||
break; // ignore
|
||||
}
|
||||
|
||||
res = ff_dovi_attach_side_data(&dav1d->dovi, frame);
|
||||
if (res < 0)
|
||||
goto fail;
|
||||
break;
|
||||
}
|
||||
default: // ignore unsupported provider codes
|
||||
break;
|
||||
}
|
||||
|
@ -603,6 +589,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
if (p->frame_hdr->film_grain.present && (!dav1d->apply_grain ||
|
||||
(c->export_side_data & AV_CODEC_EXPORT_DATA_FILM_GRAIN))) {
|
||||
AVFilmGrainParams *fgp = av_film_grain_params_create_side_data(frame);
|
||||
const AVPixFmtDescriptor *pixdesc = av_pix_fmt_desc_get(frame->format);
|
||||
av_assert0(pixdesc);
|
||||
if (!fgp) {
|
||||
res = AVERROR(ENOMEM);
|
||||
goto fail;
|
||||
|
@ -610,6 +598,14 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
|
||||
fgp->type = AV_FILM_GRAIN_PARAMS_AV1;
|
||||
fgp->seed = p->frame_hdr->film_grain.data.seed;
|
||||
fgp->width = frame->width;
|
||||
fgp->height = frame->height;
|
||||
fgp->color_range = frame->color_range;
|
||||
fgp->color_primaries = frame->color_primaries;
|
||||
fgp->color_trc = frame->color_trc;
|
||||
fgp->color_space = frame->colorspace;
|
||||
fgp->subsampling_x = pixdesc->log2_chroma_w;
|
||||
fgp->subsampling_y = pixdesc->log2_chroma_h;
|
||||
fgp->codec.aom.num_y_points = p->frame_hdr->film_grain.data.num_y_points;
|
||||
fgp->codec.aom.chroma_scaling_from_luma = p->frame_hdr->film_grain.data.chroma_scaling_from_luma;
|
||||
fgp->codec.aom.scaling_shift = p->frame_hdr->film_grain.data.scaling_shift;
|
||||
|
@ -652,6 +648,7 @@ static av_cold int libdav1d_close(AVCodecContext *c)
|
|||
Libdav1dContext *dav1d = c->priv_data;
|
||||
|
||||
av_buffer_pool_uninit(&dav1d->pool);
|
||||
ff_dovi_ctx_unref(&dav1d->dovi);
|
||||
dav1d_data_unref(&dav1d->data);
|
||||
dav1d_close(&dav1d->c);
|
||||
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include <opus_multistream.h>
|
||||
|
||||
#include "libavutil/channel_layout.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "avcodec.h"
|
||||
#include "bytestream.h"
|
||||
|
@ -552,18 +553,18 @@ static av_cold int libopus_encode_close(AVCodecContext *avctx)
|
|||
#define OFFSET(x) offsetof(LibopusEncContext, opts.x)
|
||||
#define FLAGS AV_OPT_FLAG_AUDIO_PARAM | AV_OPT_FLAG_ENCODING_PARAM
|
||||
static const AVOption libopus_options[] = {
|
||||
{ "application", "Intended application type", OFFSET(application), AV_OPT_TYPE_INT, { .i64 = OPUS_APPLICATION_AUDIO }, OPUS_APPLICATION_VOIP, OPUS_APPLICATION_RESTRICTED_LOWDELAY, FLAGS, "application" },
|
||||
{ "voip", "Favor improved speech intelligibility", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_VOIP }, 0, 0, FLAGS, "application" },
|
||||
{ "audio", "Favor faithfulness to the input", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_AUDIO }, 0, 0, FLAGS, "application" },
|
||||
{ "lowdelay", "Restrict to only the lowest delay modes", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_RESTRICTED_LOWDELAY }, 0, 0, FLAGS, "application" },
|
||||
{ "application", "Intended application type", OFFSET(application), AV_OPT_TYPE_INT, { .i64 = OPUS_APPLICATION_AUDIO }, OPUS_APPLICATION_VOIP, OPUS_APPLICATION_RESTRICTED_LOWDELAY, FLAGS, .unit = "application" },
|
||||
{ "voip", "Favor improved speech intelligibility", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_VOIP }, 0, 0, FLAGS, .unit = "application" },
|
||||
{ "audio", "Favor faithfulness to the input", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_AUDIO }, 0, 0, FLAGS, .unit = "application" },
|
||||
{ "lowdelay", "Restrict to only the lowest delay modes, disable voice-optimized modes", 0, AV_OPT_TYPE_CONST, { .i64 = OPUS_APPLICATION_RESTRICTED_LOWDELAY }, 0, 0, FLAGS, .unit = "application" },
|
||||
{ "frame_duration", "Duration of a frame in milliseconds", OFFSET(frame_duration), AV_OPT_TYPE_FLOAT, { .dbl = 20.0 }, 2.5, 120.0, FLAGS },
|
||||
{ "packet_loss", "Expected packet loss percentage", OFFSET(packet_loss), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, 100, FLAGS },
|
||||
{ "fec", "Enable inband FEC. Expected packet loss must be non-zero", OFFSET(fec), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
|
||||
{ "vbr", "Variable bit rate mode", OFFSET(vbr), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 2, FLAGS, "vbr" },
|
||||
{ "off", "Use constant bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, FLAGS, "vbr" },
|
||||
{ "on", "Use variable bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, FLAGS, "vbr" },
|
||||
{ "constrained", "Use constrained VBR", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, FLAGS, "vbr" },
|
||||
{ "mapping_family", "Channel Mapping Family", OFFSET(mapping_family), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, FLAGS, "mapping_family" },
|
||||
{ "vbr", "Variable bit rate mode", OFFSET(vbr), AV_OPT_TYPE_INT, { .i64 = 1 }, 0, 2, FLAGS, .unit = "vbr" },
|
||||
{ "off", "Use constant bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 0 }, 0, 0, FLAGS, .unit = "vbr" },
|
||||
{ "on", "Use variable bit rate", 0, AV_OPT_TYPE_CONST, { .i64 = 1 }, 0, 0, FLAGS, .unit = "vbr" },
|
||||
{ "constrained", "Use constrained VBR", 0, AV_OPT_TYPE_CONST, { .i64 = 2 }, 0, 0, FLAGS, .unit = "vbr" },
|
||||
{ "mapping_family", "Channel Mapping Family", OFFSET(mapping_family), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, 255, FLAGS, .unit = "mapping_family" },
|
||||
{ "dtx", "Enable DTX", OFFSET(dtx), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, FLAGS },
|
||||
#ifdef OPUS_SET_PHASE_INVERSION_DISABLED_REQUEST
|
||||
{ "apply_phase_inv", "Apply intensity stereo phase inversion", OFFSET(apply_phase_inv), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, FLAGS },
|
||||
|
|
|
@ -23,6 +23,7 @@
|
|||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/channel_layout.h"
|
||||
#include "libavutil/fifo.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/opt.h"
|
||||
#include "avcodec.h"
|
||||
#include "audio_frame_queue.h"
|
||||
|
|
|
@ -33,8 +33,8 @@
|
|||
#include "avcodec.h"
|
||||
#include "codec_internal.h"
|
||||
#include "encode.h"
|
||||
#include "internal.h"
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libvpx.h"
|
||||
#include "packet_internal.h"
|
||||
#include "profiles.h"
|
||||
|
@ -49,6 +49,9 @@
|
|||
#include "libavutil/opt.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
|
||||
#define IS_VP9(avctx) (CONFIG_LIBVPX_VP9_ENCODER && avctx->codec_id == AV_CODEC_ID_VP9)
|
||||
#define IS_VP8(avctx) (CONFIG_LIBVPX_VP8_ENCODER && avctx->codec_id == AV_CODEC_ID_VP8)
|
||||
|
||||
/**
|
||||
* Portion of struct vpx_codec_cx_pkt from vpx_encoder.h.
|
||||
* One encoded frame returned from the library.
|
||||
|
@ -68,9 +71,6 @@ typedef struct FrameData {
|
|||
int64_t pts;
|
||||
int64_t duration;
|
||||
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
int64_t reordered_opaque;
|
||||
#endif
|
||||
void *frame_opaque;
|
||||
AVBufferRef *frame_opaque_ref;
|
||||
|
||||
|
@ -121,6 +121,9 @@ typedef struct VPxEncoderContext {
|
|||
int *ts_layer_flags;
|
||||
int current_temporal_idx;
|
||||
|
||||
// VP8-only
|
||||
int screen_content_mode;
|
||||
|
||||
// VP9-only
|
||||
int lossless;
|
||||
int tile_columns;
|
||||
|
@ -164,6 +167,7 @@ static const char *const ctlidstr[] = {
|
|||
[VP8E_SET_MAX_INTRA_BITRATE_PCT] = "VP8E_SET_MAX_INTRA_BITRATE_PCT",
|
||||
[VP8E_SET_SHARPNESS] = "VP8E_SET_SHARPNESS",
|
||||
[VP8E_SET_TEMPORAL_LAYER_ID] = "VP8E_SET_TEMPORAL_LAYER_ID",
|
||||
[VP8E_SET_SCREEN_CONTENT_MODE] = "VP8E_SET_SCREEN_CONTENT_MODE",
|
||||
#if CONFIG_LIBVPX_VP9_ENCODER
|
||||
[VP9E_SET_LOSSLESS] = "VP9E_SET_LOSSLESS",
|
||||
[VP9E_SET_TILE_COLUMNS] = "VP9E_SET_TILE_COLUMNS",
|
||||
|
@ -356,21 +360,20 @@ static int frame_data_submit(AVCodecContext *avctx, AVFifo *fifo,
|
|||
const struct vpx_codec_enc_cfg *enccfg = ctx->encoder.config.enc;
|
||||
|
||||
FrameData fd = { .pts = frame->pts };
|
||||
|
||||
AVFrameSideData *av_uninit(sd);
|
||||
int ret;
|
||||
|
||||
#if CONFIG_LIBVPX_VP9_ENCODER
|
||||
// Keep HDR10+ if it has bit depth higher than 8 and
|
||||
// it has PQ trc (SMPTE2084).
|
||||
sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DYNAMIC_HDR_PLUS);
|
||||
if (avctx->codec_id == AV_CODEC_ID_VP9 && sd &&
|
||||
if (IS_VP9(avctx) &&
|
||||
// Keep HDR10+ if it has bit depth higher than 8 and
|
||||
// it has PQ trc (SMPTE2084).
|
||||
enccfg->g_bit_depth > 8 && avctx->color_trc == AVCOL_TRC_SMPTE2084) {
|
||||
fd.hdr10_plus = av_buffer_ref(sd->buf);
|
||||
if (!fd.hdr10_plus)
|
||||
return AVERROR(ENOMEM);
|
||||
const AVFrameSideData *sd = av_frame_get_side_data(frame, AV_FRAME_DATA_DYNAMIC_HDR_PLUS);
|
||||
|
||||
if (sd) {
|
||||
fd.hdr10_plus = av_buffer_ref(sd->buf);
|
||||
if (!fd.hdr10_plus)
|
||||
return AVERROR(ENOMEM);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
fd.duration = frame->duration;
|
||||
fd.frame_opaque = frame->opaque;
|
||||
|
@ -379,11 +382,6 @@ static int frame_data_submit(AVCodecContext *avctx, AVFifo *fifo,
|
|||
if (ret < 0)
|
||||
goto fail;
|
||||
}
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
fd.reordered_opaque = frame->reordered_opaque;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
ret = av_fifo_write(fifo, &fd, 1);
|
||||
if (ret < 0)
|
||||
|
@ -410,12 +408,6 @@ static int frame_data_apply(AVCodecContext *avctx, AVFifo *fifo, AVPacket *pkt)
|
|||
goto skip;
|
||||
}
|
||||
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
avctx->reordered_opaque = fd.reordered_opaque;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
pkt->duration = fd.duration;
|
||||
if (avctx->flags & AV_CODEC_FLAG_COPY_OPAQUE) {
|
||||
pkt->opaque = fd.frame_opaque;
|
||||
|
@ -794,7 +786,7 @@ static int set_pix_fmt(AVCodecContext *avctx, vpx_codec_caps_t codec_caps,
|
|||
struct vpx_codec_enc_cfg *enccfg, vpx_codec_flags_t *flags,
|
||||
vpx_img_fmt_t *img_fmt)
|
||||
{
|
||||
VPxContext av_unused *ctx = avctx->priv_data;
|
||||
VPxContext *ctx = avctx->priv_data;
|
||||
const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt);
|
||||
enccfg->g_bit_depth = enccfg->g_input_bit_depth = desc->comp[0].depth;
|
||||
switch (avctx->pix_fmt) {
|
||||
|
@ -1262,6 +1254,14 @@ static av_cold int vpx_init(AVCodecContext *avctx,
|
|||
#endif
|
||||
}
|
||||
#endif
|
||||
if (avctx->codec_id == AV_CODEC_ID_VP8 && ctx->screen_content_mode >= 0) {
|
||||
if (ctx->screen_content_mode == 2 && ctx->is_alpha) {
|
||||
av_log(avctx, AV_LOG_ERROR,
|
||||
"Transparency encoding with screen mode with aggressive rate control not supported\n");
|
||||
return AVERROR(EINVAL);
|
||||
}
|
||||
codecctl_int(avctx, VP8E_SET_SCREEN_CONTENT_MODE, ctx->screen_content_mode);
|
||||
}
|
||||
|
||||
av_log(avctx, AV_LOG_DEBUG, "Using deadline: %d\n", ctx->deadline);
|
||||
|
||||
|
@ -1902,24 +1902,24 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
"alternate reference frame selection", OFFSET(lag_in_frames), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE}, \
|
||||
{ "arnr-maxframes", "altref noise reduction max frame count", OFFSET(arnr_max_frames), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE}, \
|
||||
{ "arnr-strength", "altref noise reduction filter strength", OFFSET(arnr_strength), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE}, \
|
||||
{ "arnr-type", "altref noise reduction filter type", OFFSET(arnr_type), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE, "arnr_type"}, \
|
||||
{ "backward", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, "arnr_type" }, \
|
||||
{ "forward", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, "arnr_type" }, \
|
||||
{ "centered", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 0, VE, "arnr_type" }, \
|
||||
{ "tune", "Tune the encoding to a specific scenario", OFFSET(tune), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE, "tune"}, \
|
||||
{ "psnr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VP8_TUNE_PSNR}, 0, 0, VE, "tune"}, \
|
||||
{ "ssim", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VP8_TUNE_SSIM}, 0, 0, VE, "tune"}, \
|
||||
{ "deadline", "Time to spend encoding, in microseconds.", OFFSET(deadline), AV_OPT_TYPE_INT, {.i64 = VPX_DL_GOOD_QUALITY}, INT_MIN, INT_MAX, VE, "quality"}, \
|
||||
{ "best", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_DL_BEST_QUALITY}, 0, 0, VE, "quality"}, \
|
||||
{ "good", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_DL_GOOD_QUALITY}, 0, 0, VE, "quality"}, \
|
||||
{ "realtime", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_DL_REALTIME}, 0, 0, VE, "quality"}, \
|
||||
{ "error-resilient", "Error resilience configuration", OFFSET(error_resilient), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, VE, "er"}, \
|
||||
{ "arnr-type", "altref noise reduction filter type", OFFSET(arnr_type), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE, .unit = "arnr_type"}, \
|
||||
{ "backward", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, .unit = "arnr_type" }, \
|
||||
{ "forward", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, .unit = "arnr_type" }, \
|
||||
{ "centered", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 0, VE, .unit = "arnr_type" }, \
|
||||
{ "tune", "Tune the encoding to a specific scenario", OFFSET(tune), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE, .unit = "tune"}, \
|
||||
{ "psnr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VP8_TUNE_PSNR}, 0, 0, VE, .unit = "tune"}, \
|
||||
{ "ssim", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VP8_TUNE_SSIM}, 0, 0, VE, .unit = "tune"}, \
|
||||
{ "deadline", "Time to spend encoding, in microseconds.", OFFSET(deadline), AV_OPT_TYPE_INT, {.i64 = VPX_DL_GOOD_QUALITY}, INT_MIN, INT_MAX, VE, .unit = "quality"}, \
|
||||
{ "best", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_DL_BEST_QUALITY}, 0, 0, VE, .unit = "quality"}, \
|
||||
{ "good", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_DL_GOOD_QUALITY}, 0, 0, VE, .unit = "quality"}, \
|
||||
{ "realtime", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = VPX_DL_REALTIME}, 0, 0, VE, .unit = "quality"}, \
|
||||
{ "error-resilient", "Error resilience configuration", OFFSET(error_resilient), AV_OPT_TYPE_FLAGS, {.i64 = 0}, INT_MIN, INT_MAX, VE, .unit = "er"}, \
|
||||
{ "max-intra-rate", "Maximum I-frame bitrate (pct) 0=unlimited", OFFSET(max_intra_rate), AV_OPT_TYPE_INT, {.i64 = -1}, -1, INT_MAX, VE}, \
|
||||
{ "default", "Improve resiliency against losses of whole frames", 0, AV_OPT_TYPE_CONST, {.i64 = VPX_ERROR_RESILIENT_DEFAULT}, 0, 0, VE, "er"}, \
|
||||
{ "default", "Improve resiliency against losses of whole frames", 0, AV_OPT_TYPE_CONST, {.i64 = VPX_ERROR_RESILIENT_DEFAULT}, 0, 0, VE, .unit = "er"}, \
|
||||
{ "partitions", "The frame partitions are independently decodable " \
|
||||
"by the bool decoder, meaning that partitions can be decoded even " \
|
||||
"though earlier partitions have been lost. Note that intra prediction" \
|
||||
" is still done over the partition boundary.", 0, AV_OPT_TYPE_CONST, {.i64 = VPX_ERROR_RESILIENT_PARTITIONS}, 0, 0, VE, "er"}, \
|
||||
" is still done over the partition boundary.", 0, AV_OPT_TYPE_CONST, {.i64 = VPX_ERROR_RESILIENT_PARTITIONS}, 0, 0, VE, .unit = "er"}, \
|
||||
{ "crf", "Select the quality for constant quality mode", offsetof(VPxContext, crf), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 63, VE }, \
|
||||
{ "static-thresh", "A change threshold on blocks below which they will be skipped by the encoder", OFFSET(static_thresh), AV_OPT_TYPE_INT, { .i64 = 0 }, 0, INT_MAX, VE }, \
|
||||
{ "drop-threshold", "Frame drop threshold", offsetof(VPxContext, drop_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, VE }, \
|
||||
|
@ -1930,10 +1930,10 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
|
||||
#define LEGACY_OPTIONS \
|
||||
{"speed", "", offsetof(VPxContext, cpu_used), AV_OPT_TYPE_INT, {.i64 = 1}, -16, 16, VE}, \
|
||||
{"quality", "", offsetof(VPxContext, deadline), AV_OPT_TYPE_INT, {.i64 = VPX_DL_GOOD_QUALITY}, INT_MIN, INT_MAX, VE, "quality"}, \
|
||||
{"vp8flags", "", offsetof(VPxContext, flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, UINT_MAX, VE, "flags"}, \
|
||||
{"error_resilient", "enable error resilience", 0, AV_OPT_TYPE_CONST, {.i64 = VP8F_ERROR_RESILIENT}, INT_MIN, INT_MAX, VE, "flags"}, \
|
||||
{"altref", "enable use of alternate reference frames (VP8/2-pass only)", 0, AV_OPT_TYPE_CONST, {.i64 = VP8F_AUTO_ALT_REF}, INT_MIN, INT_MAX, VE, "flags"}, \
|
||||
{"quality", "", offsetof(VPxContext, deadline), AV_OPT_TYPE_INT, {.i64 = VPX_DL_GOOD_QUALITY}, INT_MIN, INT_MAX, VE, .unit = "quality"}, \
|
||||
{"vp8flags", "", offsetof(VPxContext, flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, UINT_MAX, VE, .unit = "flags"}, \
|
||||
{"error_resilient", "enable error resilience", 0, AV_OPT_TYPE_CONST, {.i64 = VP8F_ERROR_RESILIENT}, INT_MIN, INT_MAX, VE, .unit = "flags"}, \
|
||||
{"altref", "enable use of alternate reference frames (VP8/2-pass only)", 0, AV_OPT_TYPE_CONST, {.i64 = VP8F_AUTO_ALT_REF}, INT_MIN, INT_MAX, VE, .unit = "flags"}, \
|
||||
{"arnr_max_frames", "altref noise reduction max frame count", offsetof(VPxContext, arnr_max_frames), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 15, VE}, \
|
||||
{"arnr_strength", "altref noise reduction filter strength", offsetof(VPxContext, arnr_strength), AV_OPT_TYPE_INT, {.i64 = 3}, 0, 6, VE}, \
|
||||
{"arnr_type", "altref noise reduction filter type", offsetof(VPxContext, arnr_type), AV_OPT_TYPE_INT, {.i64 = 3}, 1, 3, VE}, \
|
||||
|
@ -1946,6 +1946,7 @@ static const AVOption vp8_options[] = {
|
|||
{ "auto-alt-ref", "Enable use of alternate reference "
|
||||
"frames (2-pass only)", OFFSET(auto_alt_ref), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, VE},
|
||||
{ "cpu-used", "Quality/Speed ratio modifier", OFFSET(cpu_used), AV_OPT_TYPE_INT, {.i64 = 1}, -16, 16, VE},
|
||||
{ "screen-content-mode", "Encoder screen content mode", OFFSET(screen_content_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, VE},
|
||||
LEGACY_OPTIONS
|
||||
{ NULL }
|
||||
};
|
||||
|
@ -1962,16 +1963,16 @@ static const AVOption vp9_options[] = {
|
|||
{ "tile-rows", "Number of tile rows to use, log2", OFFSET(tile_rows), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, VE},
|
||||
{ "frame-parallel", "Enable frame parallel decodability features", OFFSET(frame_parallel), AV_OPT_TYPE_BOOL,{.i64 = -1}, -1, 1, VE},
|
||||
#if VPX_ENCODER_ABI_VERSION >= 12
|
||||
{ "aq-mode", "adaptive quantization mode", OFFSET(aq_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 4, VE, "aq_mode"},
|
||||
{ "aq-mode", "adaptive quantization mode", OFFSET(aq_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 4, VE, .unit = "aq_mode"},
|
||||
#else
|
||||
{ "aq-mode", "adaptive quantization mode", OFFSET(aq_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 3, VE, "aq_mode"},
|
||||
{ "aq-mode", "adaptive quantization mode", OFFSET(aq_mode), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 3, VE, .unit = "aq_mode"},
|
||||
#endif
|
||||
{ "none", "Aq not used", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, VE, "aq_mode" },
|
||||
{ "variance", "Variance based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, "aq_mode" },
|
||||
{ "complexity", "Complexity based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, "aq_mode" },
|
||||
{ "cyclic", "Cyclic Refresh Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 0, VE, "aq_mode" },
|
||||
{ "none", "Aq not used", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, VE, .unit = "aq_mode" },
|
||||
{ "variance", "Variance based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, .unit = "aq_mode" },
|
||||
{ "complexity", "Complexity based Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, .unit = "aq_mode" },
|
||||
{ "cyclic", "Cyclic Refresh Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 0, VE, .unit = "aq_mode" },
|
||||
#if VPX_ENCODER_ABI_VERSION >= 12
|
||||
{ "equator360", "360 video Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 4}, 0, 0, VE, "aq_mode" },
|
||||
{ "equator360", "360 video Aq", 0, AV_OPT_TYPE_CONST, {.i64 = 4}, 0, 0, VE, .unit = "aq_mode" },
|
||||
{"level", "Specify level", OFFSET(level), AV_OPT_TYPE_FLOAT, {.dbl=-1}, -1, 6.2, VE},
|
||||
#endif
|
||||
#ifdef VPX_CTRL_VP9E_SET_ROW_MT
|
||||
|
@ -1979,14 +1980,14 @@ static const AVOption vp9_options[] = {
|
|||
#endif
|
||||
#ifdef VPX_CTRL_VP9E_SET_TUNE_CONTENT
|
||||
#if VPX_ENCODER_ABI_VERSION >= 14
|
||||
{ "tune-content", "Tune content type", OFFSET(tune_content), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, VE, "tune_content" },
|
||||
{ "tune-content", "Tune content type", OFFSET(tune_content), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 2, VE, .unit = "tune_content" },
|
||||
#else
|
||||
{ "tune-content", "Tune content type", OFFSET(tune_content), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, VE, "tune_content" },
|
||||
{ "tune-content", "Tune content type", OFFSET(tune_content), AV_OPT_TYPE_INT, {.i64 = -1}, -1, 1, VE, .unit = "tune_content" },
|
||||
#endif
|
||||
{ "default", "Regular video content", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, VE, "tune_content" },
|
||||
{ "screen", "Screen capture content", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, "tune_content" },
|
||||
{ "default", "Regular video content", 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 0, VE, .unit = "tune_content" },
|
||||
{ "screen", "Screen capture content", 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 0, VE, .unit = "tune_content" },
|
||||
#if VPX_ENCODER_ABI_VERSION >= 14
|
||||
{ "film", "Film content; improves grain retention", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, "tune_content" },
|
||||
{ "film", "Film content; improves grain retention", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 0, VE, .unit = "tune_content" },
|
||||
#endif
|
||||
#endif
|
||||
#if VPX_ENCODER_ABI_VERSION >= 14
|
||||
|
|
|
@ -86,6 +86,7 @@ void ff_me_cmp_init_aarch64(MECmpContext *c, AVCodecContext *avctx);
|
|||
void ff_me_cmp_init_alpha(MECmpContext *c, AVCodecContext *avctx);
|
||||
void ff_me_cmp_init_arm(MECmpContext *c, AVCodecContext *avctx);
|
||||
void ff_me_cmp_init_ppc(MECmpContext *c, AVCodecContext *avctx);
|
||||
void ff_me_cmp_init_riscv(MECmpContext *c, AVCodecContext *avctx);
|
||||
void ff_me_cmp_init_x86(MECmpContext *c, AVCodecContext *avctx);
|
||||
void ff_me_cmp_init_mips(MECmpContext *c, AVCodecContext *avctx);
|
||||
|
||||
|
|
|
@ -15,6 +15,8 @@ if CONFIG['FFVPX_ASFLAGS']:
|
|||
if CONFIG['TARGET_CPU'] == 'aarch64':
|
||||
DIRS += ['aarch64']
|
||||
|
||||
DIRS += ['bsf']
|
||||
|
||||
LOCAL_INCLUDES += ['/modules/fdlibm/inexact-math-override']
|
||||
|
||||
SharedLibrary('mozavcodec')
|
||||
|
@ -23,8 +25,6 @@ SOURCES += [
|
|||
'audio_frame_queue.c',
|
||||
'avcodec.c',
|
||||
'avdct.c',
|
||||
'avfft.c',
|
||||
'avpacket.c',
|
||||
'bitstream.c',
|
||||
'bitstream_filters.c',
|
||||
'bsf.c',
|
||||
|
@ -62,8 +62,8 @@ SOURCES += [
|
|||
'mpegaudiodsp_fixed.c',
|
||||
'mpegaudiodsp_float.c',
|
||||
'mpegaudiotabs.c',
|
||||
'null_bsf.c',
|
||||
'options.c',
|
||||
'packet.c',
|
||||
'parser.c',
|
||||
'parsers.c',
|
||||
'pcm.c',
|
||||
|
@ -85,10 +85,8 @@ SOURCES += [
|
|||
if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
|
||||
SOURCES += [
|
||||
'atsc_a53.c',
|
||||
'av1_frame_split_bsf.c',
|
||||
'av1_parse.c',
|
||||
'av1dec.c',
|
||||
'avpicture.c',
|
||||
'cbs.c',
|
||||
'cbs_av1.c',
|
||||
'golomb.c',
|
||||
|
@ -109,7 +107,6 @@ if not CONFIG['MOZ_FFVPX_AUDIOONLY']:
|
|||
'vp8dsp.c',
|
||||
'vp9.c',
|
||||
'vp9_parser.c',
|
||||
'vp9_superframe_split_bsf.c',
|
||||
'vp9block.c',
|
||||
'vp9data.c',
|
||||
'vp9dsp.c',
|
||||
|
@ -143,6 +140,11 @@ LOCAL_INCLUDES += [
|
|||
'/media/libvorbis',
|
||||
]
|
||||
|
||||
c11_flags = ["-std=gnu11"]
|
||||
if CONFIG["CC_TYPE"] == "clang-cl":
|
||||
c11_flags.insert(0, "-Xclang")
|
||||
CFLAGS += c11_flags
|
||||
|
||||
if not CONFIG["MOZ_SYSTEM_LIBVPX"]:
|
||||
LOCAL_INCLUDES += ['/media/libvpx']
|
||||
else:
|
||||
|
|
|
@ -31,11 +31,13 @@
|
|||
|
||||
#include "config.h"
|
||||
|
||||
#include "libavutil/attributes_internal.h"
|
||||
#include "vlc.h"
|
||||
|
||||
#define MODE_EXT_MS_STEREO 2
|
||||
#define MODE_EXT_I_STEREO 1
|
||||
|
||||
FF_VISIBILITY_PUSH_HIDDEN
|
||||
extern const uint16_t ff_mpa_bitrate_tab[2][3][15];
|
||||
extern const uint16_t ff_mpa_freq_tab[3];
|
||||
extern const int ff_mpa_sblimit_table[5];
|
||||
|
@ -78,5 +80,6 @@ extern const uint8_t ff_mpa_pretab[2][22];
|
|||
/* Initialize tables shared between the fixed and
|
||||
* floating point MPEG audio decoders. */
|
||||
void ff_mpegaudiodec_common_init_static(void);
|
||||
FF_VISIBILITY_POP_HIDDEN
|
||||
|
||||
#endif /* AVCODEC_MPEGAUDIODATA_H */
|
||||
|
|
|
@ -32,6 +32,7 @@
|
|||
#include "libavutil/crc.h"
|
||||
#include "libavutil/float_dsp.h"
|
||||
#include "libavutil/libm.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/mem_internal.h"
|
||||
#include "libavutil/thread.h"
|
||||
|
||||
|
@ -92,7 +93,7 @@ typedef struct MPADecodeContext {
|
|||
int err_recognition;
|
||||
AVCodecContext* avctx;
|
||||
MPADSPContext mpadsp;
|
||||
void (*butterflies_float)(float *av_restrict v1, float *av_restrict v2, int len);
|
||||
void (*butterflies_float)(float *restrict v1, float *restrict v2, int len);
|
||||
AVFrame *frame;
|
||||
uint32_t crc;
|
||||
} MPADecodeContext;
|
||||
|
|
|
@ -1,615 +0,0 @@
|
|||
/*
|
||||
* MPEG Audio decoder
|
||||
* copyright (c) 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
|
||||
*/
|
||||
|
||||
/**
|
||||
* @file
|
||||
* mpeg audio layer decoder tables.
|
||||
*/
|
||||
|
||||
#ifndef AVCODEC_MPEGAUDIODECTAB_H
|
||||
#define AVCODEC_MPEGAUDIODECTAB_H
|
||||
|
||||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "mpegaudio.h"
|
||||
|
||||
/*******************************************************/
|
||||
/* layer 3 tables */
|
||||
|
||||
/* layer 3 huffman tables */
|
||||
typedef struct HuffTable {
|
||||
int xsize;
|
||||
const uint8_t *bits;
|
||||
const uint16_t *codes;
|
||||
} HuffTable;
|
||||
|
||||
/* layer3 scale factor size */
|
||||
static const uint8_t slen_table[2][16] = {
|
||||
{ 0, 0, 0, 0, 3, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 },
|
||||
{ 0, 1, 2, 3, 0, 1, 2, 3, 1, 2, 3, 1, 2, 3, 2, 3 },
|
||||
};
|
||||
|
||||
/* number of lsf scale factors for a given size */
|
||||
static const uint8_t lsf_nsf_table[6][3][4] = {
|
||||
{ { 6, 5, 5, 5 }, { 9, 9, 9, 9 }, { 6, 9, 9, 9 } },
|
||||
{ { 6, 5, 7, 3 }, { 9, 9, 12, 6 }, { 6, 9, 12, 6 } },
|
||||
{ { 11, 10, 0, 0 }, { 18, 18, 0, 0 }, { 15, 18, 0, 0 } },
|
||||
{ { 7, 7, 7, 0 }, { 12, 12, 12, 0 }, { 6, 15, 12, 0 } },
|
||||
{ { 6, 6, 6, 3 }, { 12, 9, 9, 6 }, { 6, 12, 9, 6 } },
|
||||
{ { 8, 8, 5, 0 }, { 15, 12, 9, 0 }, { 6, 18, 9, 0 } },
|
||||
};
|
||||
|
||||
/* mpegaudio layer 3 huffman tables */
|
||||
|
||||
static const uint16_t mpa_huffcodes_1[4] = {
|
||||
0x0001, 0x0001, 0x0001, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_1[4] = {
|
||||
1, 3, 2, 3,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_2[9] = {
|
||||
0x0001, 0x0002, 0x0001, 0x0003, 0x0001, 0x0001, 0x0003, 0x0002,
|
||||
0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_2[9] = {
|
||||
1, 3, 6, 3, 3, 5, 5, 5,
|
||||
6,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_3[9] = {
|
||||
0x0003, 0x0002, 0x0001, 0x0001, 0x0001, 0x0001, 0x0003, 0x0002,
|
||||
0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_3[9] = {
|
||||
2, 2, 6, 3, 2, 5, 5, 5,
|
||||
6,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_5[16] = {
|
||||
0x0001, 0x0002, 0x0006, 0x0005, 0x0003, 0x0001, 0x0004, 0x0004,
|
||||
0x0007, 0x0005, 0x0007, 0x0001, 0x0006, 0x0001, 0x0001, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_5[16] = {
|
||||
1, 3, 6, 7, 3, 3, 6, 7,
|
||||
6, 6, 7, 8, 7, 6, 7, 8,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_6[16] = {
|
||||
0x0007, 0x0003, 0x0005, 0x0001, 0x0006, 0x0002, 0x0003, 0x0002,
|
||||
0x0005, 0x0004, 0x0004, 0x0001, 0x0003, 0x0003, 0x0002, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_6[16] = {
|
||||
3, 3, 5, 7, 3, 2, 4, 5,
|
||||
4, 4, 5, 6, 6, 5, 6, 7,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_7[36] = {
|
||||
0x0001, 0x0002, 0x000a, 0x0013, 0x0010, 0x000a, 0x0003, 0x0003,
|
||||
0x0007, 0x000a, 0x0005, 0x0003, 0x000b, 0x0004, 0x000d, 0x0011,
|
||||
0x0008, 0x0004, 0x000c, 0x000b, 0x0012, 0x000f, 0x000b, 0x0002,
|
||||
0x0007, 0x0006, 0x0009, 0x000e, 0x0003, 0x0001, 0x0006, 0x0004,
|
||||
0x0005, 0x0003, 0x0002, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_7[36] = {
|
||||
1, 3, 6, 8, 8, 9, 3, 4,
|
||||
6, 7, 7, 8, 6, 5, 7, 8,
|
||||
8, 9, 7, 7, 8, 9, 9, 9,
|
||||
7, 7, 8, 9, 9, 10, 8, 8,
|
||||
9, 10, 10, 10,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_8[36] = {
|
||||
0x0003, 0x0004, 0x0006, 0x0012, 0x000c, 0x0005, 0x0005, 0x0001,
|
||||
0x0002, 0x0010, 0x0009, 0x0003, 0x0007, 0x0003, 0x0005, 0x000e,
|
||||
0x0007, 0x0003, 0x0013, 0x0011, 0x000f, 0x000d, 0x000a, 0x0004,
|
||||
0x000d, 0x0005, 0x0008, 0x000b, 0x0005, 0x0001, 0x000c, 0x0004,
|
||||
0x0004, 0x0001, 0x0001, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_8[36] = {
|
||||
2, 3, 6, 8, 8, 9, 3, 2,
|
||||
4, 8, 8, 8, 6, 4, 6, 8,
|
||||
8, 9, 8, 8, 8, 9, 9, 10,
|
||||
8, 7, 8, 9, 10, 10, 9, 8,
|
||||
9, 9, 11, 11,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_9[36] = {
|
||||
0x0007, 0x0005, 0x0009, 0x000e, 0x000f, 0x0007, 0x0006, 0x0004,
|
||||
0x0005, 0x0005, 0x0006, 0x0007, 0x0007, 0x0006, 0x0008, 0x0008,
|
||||
0x0008, 0x0005, 0x000f, 0x0006, 0x0009, 0x000a, 0x0005, 0x0001,
|
||||
0x000b, 0x0007, 0x0009, 0x0006, 0x0004, 0x0001, 0x000e, 0x0004,
|
||||
0x0006, 0x0002, 0x0006, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_9[36] = {
|
||||
3, 3, 5, 6, 8, 9, 3, 3,
|
||||
4, 5, 6, 8, 4, 4, 5, 6,
|
||||
7, 8, 6, 5, 6, 7, 7, 8,
|
||||
7, 6, 7, 7, 8, 9, 8, 7,
|
||||
8, 8, 9, 9,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_10[64] = {
|
||||
0x0001, 0x0002, 0x000a, 0x0017, 0x0023, 0x001e, 0x000c, 0x0011,
|
||||
0x0003, 0x0003, 0x0008, 0x000c, 0x0012, 0x0015, 0x000c, 0x0007,
|
||||
0x000b, 0x0009, 0x000f, 0x0015, 0x0020, 0x0028, 0x0013, 0x0006,
|
||||
0x000e, 0x000d, 0x0016, 0x0022, 0x002e, 0x0017, 0x0012, 0x0007,
|
||||
0x0014, 0x0013, 0x0021, 0x002f, 0x001b, 0x0016, 0x0009, 0x0003,
|
||||
0x001f, 0x0016, 0x0029, 0x001a, 0x0015, 0x0014, 0x0005, 0x0003,
|
||||
0x000e, 0x000d, 0x000a, 0x000b, 0x0010, 0x0006, 0x0005, 0x0001,
|
||||
0x0009, 0x0008, 0x0007, 0x0008, 0x0004, 0x0004, 0x0002, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_10[64] = {
|
||||
1, 3, 6, 8, 9, 9, 9, 10,
|
||||
3, 4, 6, 7, 8, 9, 8, 8,
|
||||
6, 6, 7, 8, 9, 10, 9, 9,
|
||||
7, 7, 8, 9, 10, 10, 9, 10,
|
||||
8, 8, 9, 10, 10, 10, 10, 10,
|
||||
9, 9, 10, 10, 11, 11, 10, 11,
|
||||
8, 8, 9, 10, 10, 10, 11, 11,
|
||||
9, 8, 9, 10, 10, 11, 11, 11,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_11[64] = {
|
||||
0x0003, 0x0004, 0x000a, 0x0018, 0x0022, 0x0021, 0x0015, 0x000f,
|
||||
0x0005, 0x0003, 0x0004, 0x000a, 0x0020, 0x0011, 0x000b, 0x000a,
|
||||
0x000b, 0x0007, 0x000d, 0x0012, 0x001e, 0x001f, 0x0014, 0x0005,
|
||||
0x0019, 0x000b, 0x0013, 0x003b, 0x001b, 0x0012, 0x000c, 0x0005,
|
||||
0x0023, 0x0021, 0x001f, 0x003a, 0x001e, 0x0010, 0x0007, 0x0005,
|
||||
0x001c, 0x001a, 0x0020, 0x0013, 0x0011, 0x000f, 0x0008, 0x000e,
|
||||
0x000e, 0x000c, 0x0009, 0x000d, 0x000e, 0x0009, 0x0004, 0x0001,
|
||||
0x000b, 0x0004, 0x0006, 0x0006, 0x0006, 0x0003, 0x0002, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_11[64] = {
|
||||
2, 3, 5, 7, 8, 9, 8, 9,
|
||||
3, 3, 4, 6, 8, 8, 7, 8,
|
||||
5, 5, 6, 7, 8, 9, 8, 8,
|
||||
7, 6, 7, 9, 8, 10, 8, 9,
|
||||
8, 8, 8, 9, 9, 10, 9, 10,
|
||||
8, 8, 9, 10, 10, 11, 10, 11,
|
||||
8, 7, 7, 8, 9, 10, 10, 10,
|
||||
8, 7, 8, 9, 10, 10, 10, 10,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_12[64] = {
|
||||
0x0009, 0x0006, 0x0010, 0x0021, 0x0029, 0x0027, 0x0026, 0x001a,
|
||||
0x0007, 0x0005, 0x0006, 0x0009, 0x0017, 0x0010, 0x001a, 0x000b,
|
||||
0x0011, 0x0007, 0x000b, 0x000e, 0x0015, 0x001e, 0x000a, 0x0007,
|
||||
0x0011, 0x000a, 0x000f, 0x000c, 0x0012, 0x001c, 0x000e, 0x0005,
|
||||
0x0020, 0x000d, 0x0016, 0x0013, 0x0012, 0x0010, 0x0009, 0x0005,
|
||||
0x0028, 0x0011, 0x001f, 0x001d, 0x0011, 0x000d, 0x0004, 0x0002,
|
||||
0x001b, 0x000c, 0x000b, 0x000f, 0x000a, 0x0007, 0x0004, 0x0001,
|
||||
0x001b, 0x000c, 0x0008, 0x000c, 0x0006, 0x0003, 0x0001, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_12[64] = {
|
||||
4, 3, 5, 7, 8, 9, 9, 9,
|
||||
3, 3, 4, 5, 7, 7, 8, 8,
|
||||
5, 4, 5, 6, 7, 8, 7, 8,
|
||||
6, 5, 6, 6, 7, 8, 8, 8,
|
||||
7, 6, 7, 7, 8, 8, 8, 9,
|
||||
8, 7, 8, 8, 8, 9, 8, 9,
|
||||
8, 7, 7, 8, 8, 9, 9, 10,
|
||||
9, 8, 8, 9, 9, 9, 9, 10,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_13[256] = {
|
||||
0x0001, 0x0005, 0x000e, 0x0015, 0x0022, 0x0033, 0x002e, 0x0047,
|
||||
0x002a, 0x0034, 0x0044, 0x0034, 0x0043, 0x002c, 0x002b, 0x0013,
|
||||
0x0003, 0x0004, 0x000c, 0x0013, 0x001f, 0x001a, 0x002c, 0x0021,
|
||||
0x001f, 0x0018, 0x0020, 0x0018, 0x001f, 0x0023, 0x0016, 0x000e,
|
||||
0x000f, 0x000d, 0x0017, 0x0024, 0x003b, 0x0031, 0x004d, 0x0041,
|
||||
0x001d, 0x0028, 0x001e, 0x0028, 0x001b, 0x0021, 0x002a, 0x0010,
|
||||
0x0016, 0x0014, 0x0025, 0x003d, 0x0038, 0x004f, 0x0049, 0x0040,
|
||||
0x002b, 0x004c, 0x0038, 0x0025, 0x001a, 0x001f, 0x0019, 0x000e,
|
||||
0x0023, 0x0010, 0x003c, 0x0039, 0x0061, 0x004b, 0x0072, 0x005b,
|
||||
0x0036, 0x0049, 0x0037, 0x0029, 0x0030, 0x0035, 0x0017, 0x0018,
|
||||
0x003a, 0x001b, 0x0032, 0x0060, 0x004c, 0x0046, 0x005d, 0x0054,
|
||||
0x004d, 0x003a, 0x004f, 0x001d, 0x004a, 0x0031, 0x0029, 0x0011,
|
||||
0x002f, 0x002d, 0x004e, 0x004a, 0x0073, 0x005e, 0x005a, 0x004f,
|
||||
0x0045, 0x0053, 0x0047, 0x0032, 0x003b, 0x0026, 0x0024, 0x000f,
|
||||
0x0048, 0x0022, 0x0038, 0x005f, 0x005c, 0x0055, 0x005b, 0x005a,
|
||||
0x0056, 0x0049, 0x004d, 0x0041, 0x0033, 0x002c, 0x002b, 0x002a,
|
||||
0x002b, 0x0014, 0x001e, 0x002c, 0x0037, 0x004e, 0x0048, 0x0057,
|
||||
0x004e, 0x003d, 0x002e, 0x0036, 0x0025, 0x001e, 0x0014, 0x0010,
|
||||
0x0035, 0x0019, 0x0029, 0x0025, 0x002c, 0x003b, 0x0036, 0x0051,
|
||||
0x0042, 0x004c, 0x0039, 0x0036, 0x0025, 0x0012, 0x0027, 0x000b,
|
||||
0x0023, 0x0021, 0x001f, 0x0039, 0x002a, 0x0052, 0x0048, 0x0050,
|
||||
0x002f, 0x003a, 0x0037, 0x0015, 0x0016, 0x001a, 0x0026, 0x0016,
|
||||
0x0035, 0x0019, 0x0017, 0x0026, 0x0046, 0x003c, 0x0033, 0x0024,
|
||||
0x0037, 0x001a, 0x0022, 0x0017, 0x001b, 0x000e, 0x0009, 0x0007,
|
||||
0x0022, 0x0020, 0x001c, 0x0027, 0x0031, 0x004b, 0x001e, 0x0034,
|
||||
0x0030, 0x0028, 0x0034, 0x001c, 0x0012, 0x0011, 0x0009, 0x0005,
|
||||
0x002d, 0x0015, 0x0022, 0x0040, 0x0038, 0x0032, 0x0031, 0x002d,
|
||||
0x001f, 0x0013, 0x000c, 0x000f, 0x000a, 0x0007, 0x0006, 0x0003,
|
||||
0x0030, 0x0017, 0x0014, 0x0027, 0x0024, 0x0023, 0x0035, 0x0015,
|
||||
0x0010, 0x0017, 0x000d, 0x000a, 0x0006, 0x0001, 0x0004, 0x0002,
|
||||
0x0010, 0x000f, 0x0011, 0x001b, 0x0019, 0x0014, 0x001d, 0x000b,
|
||||
0x0011, 0x000c, 0x0010, 0x0008, 0x0001, 0x0001, 0x0000, 0x0001,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_13[256] = {
|
||||
1, 4, 6, 7, 8, 9, 9, 10,
|
||||
9, 10, 11, 11, 12, 12, 13, 13,
|
||||
3, 4, 6, 7, 8, 8, 9, 9,
|
||||
9, 9, 10, 10, 11, 12, 12, 12,
|
||||
6, 6, 7, 8, 9, 9, 10, 10,
|
||||
9, 10, 10, 11, 11, 12, 13, 13,
|
||||
7, 7, 8, 9, 9, 10, 10, 10,
|
||||
10, 11, 11, 11, 11, 12, 13, 13,
|
||||
8, 7, 9, 9, 10, 10, 11, 11,
|
||||
10, 11, 11, 12, 12, 13, 13, 14,
|
||||
9, 8, 9, 10, 10, 10, 11, 11,
|
||||
11, 11, 12, 11, 13, 13, 14, 14,
|
||||
9, 9, 10, 10, 11, 11, 11, 11,
|
||||
11, 12, 12, 12, 13, 13, 14, 14,
|
||||
10, 9, 10, 11, 11, 11, 12, 12,
|
||||
12, 12, 13, 13, 13, 14, 16, 16,
|
||||
9, 8, 9, 10, 10, 11, 11, 12,
|
||||
12, 12, 12, 13, 13, 14, 15, 15,
|
||||
10, 9, 10, 10, 11, 11, 11, 13,
|
||||
12, 13, 13, 14, 14, 14, 16, 15,
|
||||
10, 10, 10, 11, 11, 12, 12, 13,
|
||||
12, 13, 14, 13, 14, 15, 16, 17,
|
||||
11, 10, 10, 11, 12, 12, 12, 12,
|
||||
13, 13, 13, 14, 15, 15, 15, 16,
|
||||
11, 11, 11, 12, 12, 13, 12, 13,
|
||||
14, 14, 15, 15, 15, 16, 16, 16,
|
||||
12, 11, 12, 13, 13, 13, 14, 14,
|
||||
14, 14, 14, 15, 16, 15, 16, 16,
|
||||
13, 12, 12, 13, 13, 13, 15, 14,
|
||||
14, 17, 15, 15, 15, 17, 16, 16,
|
||||
12, 12, 13, 14, 14, 14, 15, 14,
|
||||
15, 15, 16, 16, 19, 18, 19, 16,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_15[256] = {
|
||||
0x0007, 0x000c, 0x0012, 0x0035, 0x002f, 0x004c, 0x007c, 0x006c,
|
||||
0x0059, 0x007b, 0x006c, 0x0077, 0x006b, 0x0051, 0x007a, 0x003f,
|
||||
0x000d, 0x0005, 0x0010, 0x001b, 0x002e, 0x0024, 0x003d, 0x0033,
|
||||
0x002a, 0x0046, 0x0034, 0x0053, 0x0041, 0x0029, 0x003b, 0x0024,
|
||||
0x0013, 0x0011, 0x000f, 0x0018, 0x0029, 0x0022, 0x003b, 0x0030,
|
||||
0x0028, 0x0040, 0x0032, 0x004e, 0x003e, 0x0050, 0x0038, 0x0021,
|
||||
0x001d, 0x001c, 0x0019, 0x002b, 0x0027, 0x003f, 0x0037, 0x005d,
|
||||
0x004c, 0x003b, 0x005d, 0x0048, 0x0036, 0x004b, 0x0032, 0x001d,
|
||||
0x0034, 0x0016, 0x002a, 0x0028, 0x0043, 0x0039, 0x005f, 0x004f,
|
||||
0x0048, 0x0039, 0x0059, 0x0045, 0x0031, 0x0042, 0x002e, 0x001b,
|
||||
0x004d, 0x0025, 0x0023, 0x0042, 0x003a, 0x0034, 0x005b, 0x004a,
|
||||
0x003e, 0x0030, 0x004f, 0x003f, 0x005a, 0x003e, 0x0028, 0x0026,
|
||||
0x007d, 0x0020, 0x003c, 0x0038, 0x0032, 0x005c, 0x004e, 0x0041,
|
||||
0x0037, 0x0057, 0x0047, 0x0033, 0x0049, 0x0033, 0x0046, 0x001e,
|
||||
0x006d, 0x0035, 0x0031, 0x005e, 0x0058, 0x004b, 0x0042, 0x007a,
|
||||
0x005b, 0x0049, 0x0038, 0x002a, 0x0040, 0x002c, 0x0015, 0x0019,
|
||||
0x005a, 0x002b, 0x0029, 0x004d, 0x0049, 0x003f, 0x0038, 0x005c,
|
||||
0x004d, 0x0042, 0x002f, 0x0043, 0x0030, 0x0035, 0x0024, 0x0014,
|
||||
0x0047, 0x0022, 0x0043, 0x003c, 0x003a, 0x0031, 0x0058, 0x004c,
|
||||
0x0043, 0x006a, 0x0047, 0x0036, 0x0026, 0x0027, 0x0017, 0x000f,
|
||||
0x006d, 0x0035, 0x0033, 0x002f, 0x005a, 0x0052, 0x003a, 0x0039,
|
||||
0x0030, 0x0048, 0x0039, 0x0029, 0x0017, 0x001b, 0x003e, 0x0009,
|
||||
0x0056, 0x002a, 0x0028, 0x0025, 0x0046, 0x0040, 0x0034, 0x002b,
|
||||
0x0046, 0x0037, 0x002a, 0x0019, 0x001d, 0x0012, 0x000b, 0x000b,
|
||||
0x0076, 0x0044, 0x001e, 0x0037, 0x0032, 0x002e, 0x004a, 0x0041,
|
||||
0x0031, 0x0027, 0x0018, 0x0010, 0x0016, 0x000d, 0x000e, 0x0007,
|
||||
0x005b, 0x002c, 0x0027, 0x0026, 0x0022, 0x003f, 0x0034, 0x002d,
|
||||
0x001f, 0x0034, 0x001c, 0x0013, 0x000e, 0x0008, 0x0009, 0x0003,
|
||||
0x007b, 0x003c, 0x003a, 0x0035, 0x002f, 0x002b, 0x0020, 0x0016,
|
||||
0x0025, 0x0018, 0x0011, 0x000c, 0x000f, 0x000a, 0x0002, 0x0001,
|
||||
0x0047, 0x0025, 0x0022, 0x001e, 0x001c, 0x0014, 0x0011, 0x001a,
|
||||
0x0015, 0x0010, 0x000a, 0x0006, 0x0008, 0x0006, 0x0002, 0x0000,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_15[256] = {
|
||||
3, 4, 5, 7, 7, 8, 9, 9,
|
||||
9, 10, 10, 11, 11, 11, 12, 13,
|
||||
4, 3, 5, 6, 7, 7, 8, 8,
|
||||
8, 9, 9, 10, 10, 10, 11, 11,
|
||||
5, 5, 5, 6, 7, 7, 8, 8,
|
||||
8, 9, 9, 10, 10, 11, 11, 11,
|
||||
6, 6, 6, 7, 7, 8, 8, 9,
|
||||
9, 9, 10, 10, 10, 11, 11, 11,
|
||||
7, 6, 7, 7, 8, 8, 9, 9,
|
||||
9, 9, 10, 10, 10, 11, 11, 11,
|
||||
8, 7, 7, 8, 8, 8, 9, 9,
|
||||
9, 9, 10, 10, 11, 11, 11, 12,
|
||||
9, 7, 8, 8, 8, 9, 9, 9,
|
||||
9, 10, 10, 10, 11, 11, 12, 12,
|
||||
9, 8, 8, 9, 9, 9, 9, 10,
|
||||
10, 10, 10, 10, 11, 11, 11, 12,
|
||||
9, 8, 8, 9, 9, 9, 9, 10,
|
||||
10, 10, 10, 11, 11, 12, 12, 12,
|
||||
9, 8, 9, 9, 9, 9, 10, 10,
|
||||
10, 11, 11, 11, 11, 12, 12, 12,
|
||||
10, 9, 9, 9, 10, 10, 10, 10,
|
||||
10, 11, 11, 11, 11, 12, 13, 12,
|
||||
10, 9, 9, 9, 10, 10, 10, 10,
|
||||
11, 11, 11, 11, 12, 12, 12, 13,
|
||||
11, 10, 9, 10, 10, 10, 11, 11,
|
||||
11, 11, 11, 11, 12, 12, 13, 13,
|
||||
11, 10, 10, 10, 10, 11, 11, 11,
|
||||
11, 12, 12, 12, 12, 12, 13, 13,
|
||||
12, 11, 11, 11, 11, 11, 11, 11,
|
||||
12, 12, 12, 12, 13, 13, 12, 13,
|
||||
12, 11, 11, 11, 11, 11, 11, 12,
|
||||
12, 12, 12, 12, 13, 13, 13, 13,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_16[256] = {
|
||||
0x0001, 0x0005, 0x000e, 0x002c, 0x004a, 0x003f, 0x006e, 0x005d,
|
||||
0x00ac, 0x0095, 0x008a, 0x00f2, 0x00e1, 0x00c3, 0x0178, 0x0011,
|
||||
0x0003, 0x0004, 0x000c, 0x0014, 0x0023, 0x003e, 0x0035, 0x002f,
|
||||
0x0053, 0x004b, 0x0044, 0x0077, 0x00c9, 0x006b, 0x00cf, 0x0009,
|
||||
0x000f, 0x000d, 0x0017, 0x0026, 0x0043, 0x003a, 0x0067, 0x005a,
|
||||
0x00a1, 0x0048, 0x007f, 0x0075, 0x006e, 0x00d1, 0x00ce, 0x0010,
|
||||
0x002d, 0x0015, 0x0027, 0x0045, 0x0040, 0x0072, 0x0063, 0x0057,
|
||||
0x009e, 0x008c, 0x00fc, 0x00d4, 0x00c7, 0x0183, 0x016d, 0x001a,
|
||||
0x004b, 0x0024, 0x0044, 0x0041, 0x0073, 0x0065, 0x00b3, 0x00a4,
|
||||
0x009b, 0x0108, 0x00f6, 0x00e2, 0x018b, 0x017e, 0x016a, 0x0009,
|
||||
0x0042, 0x001e, 0x003b, 0x0038, 0x0066, 0x00b9, 0x00ad, 0x0109,
|
||||
0x008e, 0x00fd, 0x00e8, 0x0190, 0x0184, 0x017a, 0x01bd, 0x0010,
|
||||
0x006f, 0x0036, 0x0034, 0x0064, 0x00b8, 0x00b2, 0x00a0, 0x0085,
|
||||
0x0101, 0x00f4, 0x00e4, 0x00d9, 0x0181, 0x016e, 0x02cb, 0x000a,
|
||||
0x0062, 0x0030, 0x005b, 0x0058, 0x00a5, 0x009d, 0x0094, 0x0105,
|
||||
0x00f8, 0x0197, 0x018d, 0x0174, 0x017c, 0x0379, 0x0374, 0x0008,
|
||||
0x0055, 0x0054, 0x0051, 0x009f, 0x009c, 0x008f, 0x0104, 0x00f9,
|
||||
0x01ab, 0x0191, 0x0188, 0x017f, 0x02d7, 0x02c9, 0x02c4, 0x0007,
|
||||
0x009a, 0x004c, 0x0049, 0x008d, 0x0083, 0x0100, 0x00f5, 0x01aa,
|
||||
0x0196, 0x018a, 0x0180, 0x02df, 0x0167, 0x02c6, 0x0160, 0x000b,
|
||||
0x008b, 0x0081, 0x0043, 0x007d, 0x00f7, 0x00e9, 0x00e5, 0x00db,
|
||||
0x0189, 0x02e7, 0x02e1, 0x02d0, 0x0375, 0x0372, 0x01b7, 0x0004,
|
||||
0x00f3, 0x0078, 0x0076, 0x0073, 0x00e3, 0x00df, 0x018c, 0x02ea,
|
||||
0x02e6, 0x02e0, 0x02d1, 0x02c8, 0x02c2, 0x00df, 0x01b4, 0x0006,
|
||||
0x00ca, 0x00e0, 0x00de, 0x00da, 0x00d8, 0x0185, 0x0182, 0x017d,
|
||||
0x016c, 0x0378, 0x01bb, 0x02c3, 0x01b8, 0x01b5, 0x06c0, 0x0004,
|
||||
0x02eb, 0x00d3, 0x00d2, 0x00d0, 0x0172, 0x017b, 0x02de, 0x02d3,
|
||||
0x02ca, 0x06c7, 0x0373, 0x036d, 0x036c, 0x0d83, 0x0361, 0x0002,
|
||||
0x0179, 0x0171, 0x0066, 0x00bb, 0x02d6, 0x02d2, 0x0166, 0x02c7,
|
||||
0x02c5, 0x0362, 0x06c6, 0x0367, 0x0d82, 0x0366, 0x01b2, 0x0000,
|
||||
0x000c, 0x000a, 0x0007, 0x000b, 0x000a, 0x0011, 0x000b, 0x0009,
|
||||
0x000d, 0x000c, 0x000a, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_16[256] = {
|
||||
1, 4, 6, 8, 9, 9, 10, 10,
|
||||
11, 11, 11, 12, 12, 12, 13, 9,
|
||||
3, 4, 6, 7, 8, 9, 9, 9,
|
||||
10, 10, 10, 11, 12, 11, 12, 8,
|
||||
6, 6, 7, 8, 9, 9, 10, 10,
|
||||
11, 10, 11, 11, 11, 12, 12, 9,
|
||||
8, 7, 8, 9, 9, 10, 10, 10,
|
||||
11, 11, 12, 12, 12, 13, 13, 10,
|
||||
9, 8, 9, 9, 10, 10, 11, 11,
|
||||
11, 12, 12, 12, 13, 13, 13, 9,
|
||||
9, 8, 9, 9, 10, 11, 11, 12,
|
||||
11, 12, 12, 13, 13, 13, 14, 10,
|
||||
10, 9, 9, 10, 11, 11, 11, 11,
|
||||
12, 12, 12, 12, 13, 13, 14, 10,
|
||||
10, 9, 10, 10, 11, 11, 11, 12,
|
||||
12, 13, 13, 13, 13, 15, 15, 10,
|
||||
10, 10, 10, 11, 11, 11, 12, 12,
|
||||
13, 13, 13, 13, 14, 14, 14, 10,
|
||||
11, 10, 10, 11, 11, 12, 12, 13,
|
||||
13, 13, 13, 14, 13, 14, 13, 11,
|
||||
11, 11, 10, 11, 12, 12, 12, 12,
|
||||
13, 14, 14, 14, 15, 15, 14, 10,
|
||||
12, 11, 11, 11, 12, 12, 13, 14,
|
||||
14, 14, 14, 14, 14, 13, 14, 11,
|
||||
12, 12, 12, 12, 12, 13, 13, 13,
|
||||
13, 15, 14, 14, 14, 14, 16, 11,
|
||||
14, 12, 12, 12, 13, 13, 14, 14,
|
||||
14, 16, 15, 15, 15, 17, 15, 11,
|
||||
13, 13, 11, 12, 14, 14, 13, 14,
|
||||
14, 15, 16, 15, 17, 15, 14, 11,
|
||||
9, 8, 8, 9, 9, 10, 10, 10,
|
||||
11, 11, 11, 11, 11, 11, 11, 8,
|
||||
};
|
||||
|
||||
static const uint16_t mpa_huffcodes_24[256] = {
|
||||
0x000f, 0x000d, 0x002e, 0x0050, 0x0092, 0x0106, 0x00f8, 0x01b2,
|
||||
0x01aa, 0x029d, 0x028d, 0x0289, 0x026d, 0x0205, 0x0408, 0x0058,
|
||||
0x000e, 0x000c, 0x0015, 0x0026, 0x0047, 0x0082, 0x007a, 0x00d8,
|
||||
0x00d1, 0x00c6, 0x0147, 0x0159, 0x013f, 0x0129, 0x0117, 0x002a,
|
||||
0x002f, 0x0016, 0x0029, 0x004a, 0x0044, 0x0080, 0x0078, 0x00dd,
|
||||
0x00cf, 0x00c2, 0x00b6, 0x0154, 0x013b, 0x0127, 0x021d, 0x0012,
|
||||
0x0051, 0x0027, 0x004b, 0x0046, 0x0086, 0x007d, 0x0074, 0x00dc,
|
||||
0x00cc, 0x00be, 0x00b2, 0x0145, 0x0137, 0x0125, 0x010f, 0x0010,
|
||||
0x0093, 0x0048, 0x0045, 0x0087, 0x007f, 0x0076, 0x0070, 0x00d2,
|
||||
0x00c8, 0x00bc, 0x0160, 0x0143, 0x0132, 0x011d, 0x021c, 0x000e,
|
||||
0x0107, 0x0042, 0x0081, 0x007e, 0x0077, 0x0072, 0x00d6, 0x00ca,
|
||||
0x00c0, 0x00b4, 0x0155, 0x013d, 0x012d, 0x0119, 0x0106, 0x000c,
|
||||
0x00f9, 0x007b, 0x0079, 0x0075, 0x0071, 0x00d7, 0x00ce, 0x00c3,
|
||||
0x00b9, 0x015b, 0x014a, 0x0134, 0x0123, 0x0110, 0x0208, 0x000a,
|
||||
0x01b3, 0x0073, 0x006f, 0x006d, 0x00d3, 0x00cb, 0x00c4, 0x00bb,
|
||||
0x0161, 0x014c, 0x0139, 0x012a, 0x011b, 0x0213, 0x017d, 0x0011,
|
||||
0x01ab, 0x00d4, 0x00d0, 0x00cd, 0x00c9, 0x00c1, 0x00ba, 0x00b1,
|
||||
0x00a9, 0x0140, 0x012f, 0x011e, 0x010c, 0x0202, 0x0179, 0x0010,
|
||||
0x014f, 0x00c7, 0x00c5, 0x00bf, 0x00bd, 0x00b5, 0x00ae, 0x014d,
|
||||
0x0141, 0x0131, 0x0121, 0x0113, 0x0209, 0x017b, 0x0173, 0x000b,
|
||||
0x029c, 0x00b8, 0x00b7, 0x00b3, 0x00af, 0x0158, 0x014b, 0x013a,
|
||||
0x0130, 0x0122, 0x0115, 0x0212, 0x017f, 0x0175, 0x016e, 0x000a,
|
||||
0x028c, 0x015a, 0x00ab, 0x00a8, 0x00a4, 0x013e, 0x0135, 0x012b,
|
||||
0x011f, 0x0114, 0x0107, 0x0201, 0x0177, 0x0170, 0x016a, 0x0006,
|
||||
0x0288, 0x0142, 0x013c, 0x0138, 0x0133, 0x012e, 0x0124, 0x011c,
|
||||
0x010d, 0x0105, 0x0200, 0x0178, 0x0172, 0x016c, 0x0167, 0x0004,
|
||||
0x026c, 0x012c, 0x0128, 0x0126, 0x0120, 0x011a, 0x0111, 0x010a,
|
||||
0x0203, 0x017c, 0x0176, 0x0171, 0x016d, 0x0169, 0x0165, 0x0002,
|
||||
0x0409, 0x0118, 0x0116, 0x0112, 0x010b, 0x0108, 0x0103, 0x017e,
|
||||
0x017a, 0x0174, 0x016f, 0x016b, 0x0168, 0x0166, 0x0164, 0x0000,
|
||||
0x002b, 0x0014, 0x0013, 0x0011, 0x000f, 0x000d, 0x000b, 0x0009,
|
||||
0x0007, 0x0006, 0x0004, 0x0007, 0x0005, 0x0003, 0x0001, 0x0003,
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huffbits_24[256] = {
|
||||
4, 4, 6, 7, 8, 9, 9, 10,
|
||||
10, 11, 11, 11, 11, 11, 12, 9,
|
||||
4, 4, 5, 6, 7, 8, 8, 9,
|
||||
9, 9, 10, 10, 10, 10, 10, 8,
|
||||
6, 5, 6, 7, 7, 8, 8, 9,
|
||||
9, 9, 9, 10, 10, 10, 11, 7,
|
||||
7, 6, 7, 7, 8, 8, 8, 9,
|
||||
9, 9, 9, 10, 10, 10, 10, 7,
|
||||
8, 7, 7, 8, 8, 8, 8, 9,
|
||||
9, 9, 10, 10, 10, 10, 11, 7,
|
||||
9, 7, 8, 8, 8, 8, 9, 9,
|
||||
9, 9, 10, 10, 10, 10, 10, 7,
|
||||
9, 8, 8, 8, 8, 9, 9, 9,
|
||||
9, 10, 10, 10, 10, 10, 11, 7,
|
||||
10, 8, 8, 8, 9, 9, 9, 9,
|
||||
10, 10, 10, 10, 10, 11, 11, 8,
|
||||
10, 9, 9, 9, 9, 9, 9, 9,
|
||||
9, 10, 10, 10, 10, 11, 11, 8,
|
||||
10, 9, 9, 9, 9, 9, 9, 10,
|
||||
10, 10, 10, 10, 11, 11, 11, 8,
|
||||
11, 9, 9, 9, 9, 10, 10, 10,
|
||||
10, 10, 10, 11, 11, 11, 11, 8,
|
||||
11, 10, 9, 9, 9, 10, 10, 10,
|
||||
10, 10, 10, 11, 11, 11, 11, 8,
|
||||
11, 10, 10, 10, 10, 10, 10, 10,
|
||||
10, 10, 11, 11, 11, 11, 11, 8,
|
||||
11, 10, 10, 10, 10, 10, 10, 10,
|
||||
11, 11, 11, 11, 11, 11, 11, 8,
|
||||
12, 10, 10, 10, 10, 10, 10, 11,
|
||||
11, 11, 11, 11, 11, 11, 11, 8,
|
||||
8, 7, 7, 7, 7, 7, 7, 7,
|
||||
7, 7, 7, 8, 8, 8, 8, 4,
|
||||
};
|
||||
|
||||
static const HuffTable mpa_huff_tables[16] = {
|
||||
{ 1, NULL, NULL },
|
||||
{ 2, mpa_huffbits_1, mpa_huffcodes_1 },
|
||||
{ 3, mpa_huffbits_2, mpa_huffcodes_2 },
|
||||
{ 3, mpa_huffbits_3, mpa_huffcodes_3 },
|
||||
{ 4, mpa_huffbits_5, mpa_huffcodes_5 },
|
||||
{ 4, mpa_huffbits_6, mpa_huffcodes_6 },
|
||||
{ 6, mpa_huffbits_7, mpa_huffcodes_7 },
|
||||
{ 6, mpa_huffbits_8, mpa_huffcodes_8 },
|
||||
{ 6, mpa_huffbits_9, mpa_huffcodes_9 },
|
||||
{ 8, mpa_huffbits_10, mpa_huffcodes_10 },
|
||||
{ 8, mpa_huffbits_11, mpa_huffcodes_11 },
|
||||
{ 8, mpa_huffbits_12, mpa_huffcodes_12 },
|
||||
{ 16, mpa_huffbits_13, mpa_huffcodes_13 },
|
||||
{ 16, mpa_huffbits_15, mpa_huffcodes_15 },
|
||||
{ 16, mpa_huffbits_16, mpa_huffcodes_16 },
|
||||
{ 16, mpa_huffbits_24, mpa_huffcodes_24 },
|
||||
};
|
||||
|
||||
static const uint8_t mpa_huff_data[32][2] = {
|
||||
{ 0, 0 },
|
||||
{ 1, 0 },
|
||||
{ 2, 0 },
|
||||
{ 3, 0 },
|
||||
{ 0, 0 },
|
||||
{ 4, 0 },
|
||||
{ 5, 0 },
|
||||
{ 6, 0 },
|
||||
{ 7, 0 },
|
||||
{ 8, 0 },
|
||||
{ 9, 0 },
|
||||
{ 10, 0 },
|
||||
{ 11, 0 },
|
||||
{ 12, 0 },
|
||||
{ 0, 0 },
|
||||
{ 13, 0 },
|
||||
{ 14, 1 },
|
||||
{ 14, 2 },
|
||||
{ 14, 3 },
|
||||
{ 14, 4 },
|
||||
{ 14, 6 },
|
||||
{ 14, 8 },
|
||||
{ 14, 10 },
|
||||
{ 14, 13 },
|
||||
{ 15, 4 },
|
||||
{ 15, 5 },
|
||||
{ 15, 6 },
|
||||
{ 15, 7 },
|
||||
{ 15, 8 },
|
||||
{ 15, 9 },
|
||||
{ 15, 11 },
|
||||
{ 15, 13 },
|
||||
};
|
||||
|
||||
|
||||
/* huffman tables for quadrules */
|
||||
static const uint8_t mpa_quad_codes[2][16] = {
|
||||
{ 1, 5, 4, 5, 6, 5, 4, 4, 7, 3, 6, 0, 7, 2, 3, 1, },
|
||||
{ 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, },
|
||||
};
|
||||
|
||||
static const uint8_t mpa_quad_bits[2][16] = {
|
||||
{ 1, 4, 4, 5, 4, 6, 5, 6, 4, 5, 5, 6, 5, 6, 6, 6, },
|
||||
{ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, },
|
||||
};
|
||||
|
||||
/* band size tables */
|
||||
static const uint8_t band_size_long[9][22] = {
|
||||
{ 4, 4, 4, 4, 4, 4, 6, 6, 8, 8, 10,
|
||||
12, 16, 20, 24, 28, 34, 42, 50, 54, 76, 158, }, /* 44100 */
|
||||
{ 4, 4, 4, 4, 4, 4, 6, 6, 6, 8, 10,
|
||||
12, 16, 18, 22, 28, 34, 40, 46, 54, 54, 192, }, /* 48000 */
|
||||
{ 4, 4, 4, 4, 4, 4, 6, 6, 8, 10, 12,
|
||||
16, 20, 24, 30, 38, 46, 56, 68, 84, 102, 26, }, /* 32000 */
|
||||
{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
|
||||
20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 22050 */
|
||||
{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
|
||||
18, 22, 26, 32, 38, 46, 52, 64, 70, 76, 36, }, /* 24000 */
|
||||
{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
|
||||
20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 16000 */
|
||||
{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
|
||||
20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 11025 */
|
||||
{ 6, 6, 6, 6, 6, 6, 8, 10, 12, 14, 16,
|
||||
20, 24, 28, 32, 38, 46, 52, 60, 68, 58, 54, }, /* 12000 */
|
||||
{ 12, 12, 12, 12, 12, 12, 16, 20, 24, 28, 32,
|
||||
40, 48, 56, 64, 76, 90, 2, 2, 2, 2, 2, }, /* 8000 */
|
||||
};
|
||||
|
||||
static const uint8_t band_size_short[9][13] = {
|
||||
{ 4, 4, 4, 4, 6, 8, 10, 12, 14, 18, 22, 30, 56, }, /* 44100 */
|
||||
{ 4, 4, 4, 4, 6, 6, 10, 12, 14, 16, 20, 26, 66, }, /* 48000 */
|
||||
{ 4, 4, 4, 4, 6, 8, 12, 16, 20, 26, 34, 42, 12, }, /* 32000 */
|
||||
{ 4, 4, 4, 6, 6, 8, 10, 14, 18, 26, 32, 42, 18, }, /* 22050 */
|
||||
{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 32, 44, 12, }, /* 24000 */
|
||||
{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 16000 */
|
||||
{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 11025 */
|
||||
{ 4, 4, 4, 6, 8, 10, 12, 14, 18, 24, 30, 40, 18, }, /* 12000 */
|
||||
{ 8, 8, 8, 12, 16, 20, 24, 28, 36, 2, 2, 2, 26, }, /* 8000 */
|
||||
};
|
||||
|
||||
static const uint8_t mpa_pretab[2][22] = {
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
|
||||
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 3, 3, 3, 2, 0 },
|
||||
};
|
||||
|
||||
/* table for alias reduction (XXX: store it as integer !) */
|
||||
static const float ci_table[8] = {
|
||||
-0.6, -0.535, -0.33, -0.185, -0.095, -0.041, -0.0142, -0.0037,
|
||||
};
|
||||
|
||||
#endif /* AVCODEC_MPEGAUDIODECTAB_H */
|
|
@ -22,6 +22,7 @@
|
|||
#include <stddef.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/attributes_internal.h"
|
||||
#include "libavutil/macros.h"
|
||||
|
||||
typedef struct MPADSPContext {
|
||||
|
@ -40,6 +41,7 @@ typedef struct MPADSPContext {
|
|||
int count, int switch_point, int block_type);
|
||||
} MPADSPContext;
|
||||
|
||||
FF_VISIBILITY_PUSH_HIDDEN
|
||||
void ff_mpadsp_init(MPADSPContext *s);
|
||||
|
||||
extern int32_t ff_mpa_synth_window_fixed[];
|
||||
|
@ -88,5 +90,6 @@ void ff_imdct36_blocks_fixed(int *out, int *buf, int *in,
|
|||
|
||||
extern int ff_mdct_win_fixed[8][MDCT_BUF_SIZE];
|
||||
extern float ff_mdct_win_float[8][MDCT_BUF_SIZE];
|
||||
FF_VISIBILITY_POP_HIDDEN
|
||||
|
||||
#endif /* AVCODEC_MPEGAUDIODSP_H */
|
||||
|
|
|
@ -1,47 +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_MPEGVIDEODSP_H
|
||||
#define AVCODEC_MPEGVIDEODSP_H
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
void ff_gmc_c(uint8_t *dst, uint8_t *src, int stride, int h, int ox, int oy,
|
||||
int dxx, int dxy, int dyx, int dyy, int shift, int r,
|
||||
int width, int height);
|
||||
|
||||
typedef struct MpegVideoDSPContext {
|
||||
/**
|
||||
* translational global motion compensation.
|
||||
*/
|
||||
void (*gmc1)(uint8_t *dst /* align 8 */, uint8_t *src /* align 1 */,
|
||||
int srcStride, int h, int x16, int y16, int rounder);
|
||||
/**
|
||||
* global motion compensation.
|
||||
*/
|
||||
void (*gmc)(uint8_t *dst /* align 8 */, uint8_t *src /* align 1 */,
|
||||
int stride, int h, int ox, int oy,
|
||||
int dxx, int dxy, int dyx, int dyy,
|
||||
int shift, int r, int width, int height);
|
||||
} MpegVideoDSPContext;
|
||||
|
||||
void ff_mpegvideodsp_init(MpegVideoDSPContext *c);
|
||||
void ff_mpegvideodsp_init_ppc(MpegVideoDSPContext *c);
|
||||
void ff_mpegvideodsp_init_x86(MpegVideoDSPContext *c);
|
||||
|
||||
#endif /* AVCODEC_MPEGVIDEODSP_H */
|
|
@ -27,6 +27,7 @@
|
|||
#include "config_components.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "avcodec_internal.h"
|
||||
#include "codec_internal.h"
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/internal.h"
|
||||
|
@ -124,11 +125,6 @@ static int init_context_defaults(AVCodecContext *s, const AVCodec *codec)
|
|||
s->sw_pix_fmt = AV_PIX_FMT_NONE;
|
||||
s->sample_fmt = AV_SAMPLE_FMT_NONE;
|
||||
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
s->reordered_opaque = AV_NOPTS_VALUE;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
if(codec && codec2->priv_data_size){
|
||||
s->priv_data = av_mallocz(codec2->priv_data_size);
|
||||
if (!s->priv_data)
|
||||
|
@ -172,14 +168,17 @@ void avcodec_free_context(AVCodecContext **pavctx)
|
|||
if (!avctx)
|
||||
return;
|
||||
|
||||
avcodec_close(avctx);
|
||||
ff_codec_close(avctx);
|
||||
|
||||
av_freep(&avctx->extradata);
|
||||
av_freep(&avctx->subtitle_header);
|
||||
av_freep(&avctx->intra_matrix);
|
||||
av_freep(&avctx->chroma_intra_matrix);
|
||||
av_freep(&avctx->inter_matrix);
|
||||
av_freep(&avctx->rc_override);
|
||||
av_channel_layout_uninit(&avctx->ch_layout);
|
||||
av_frame_side_data_free(
|
||||
&avctx->decoded_side_data, &avctx->nb_decoded_side_data);
|
||||
|
||||
av_freep(pavctx);
|
||||
}
|
||||
|
@ -197,7 +196,7 @@ static const AVOption subtitle_rect_options[]={
|
|||
{"w", "", SROFFSET(w), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
|
||||
{"h", "", SROFFSET(h), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
|
||||
{"type", "", SROFFSET(type), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
|
||||
{"flags", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0, "flags"},
|
||||
{"flags", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0, .unit = "flags"},
|
||||
{"forced", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0},
|
||||
{NULL},
|
||||
};
|
||||
|
|
|
@ -42,6 +42,8 @@
|
|||
#define D AV_OPT_FLAG_DECODING_PARAM
|
||||
#define CC AV_OPT_FLAG_CHILD_CONSTS
|
||||
|
||||
#define AR AV_OPT_TYPE_FLAG_ARRAY
|
||||
|
||||
#define AV_CODEC_DEFAULT_BITRATE 200*1000
|
||||
|
||||
static const AVOption avcodec_options[] = {
|
||||
|
@ -51,52 +53,49 @@ static const AVOption avcodec_options[] = {
|
|||
"ratecontrol is willing to deviate from the target average bitrate value. This is not related "
|
||||
"to minimum/maximum bitrate. Lowering tolerance too much has an adverse effect on quality.",
|
||||
OFFSET(bit_rate_tolerance), AV_OPT_TYPE_INT, {.i64 = AV_CODEC_DEFAULT_BITRATE*20 }, 0, INT_MAX, A|V|E},
|
||||
{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, UINT_MAX, V|A|S|E|D, "flags"},
|
||||
{"unaligned", "allow decoders to produce unaligned output", 0, AV_OPT_TYPE_CONST, { .i64 = AV_CODEC_FLAG_UNALIGNED }, INT_MIN, INT_MAX, V | D, "flags" },
|
||||
{"mv4", "use four motion vectors per macroblock (MPEG-4)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"},
|
||||
{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, UINT_MAX, V|A|S|E|D, .unit = "flags"},
|
||||
{"unaligned", "allow decoders to produce unaligned output", 0, AV_OPT_TYPE_CONST, { .i64 = AV_CODEC_FLAG_UNALIGNED }, INT_MIN, INT_MAX, V | D, .unit = "flags" },
|
||||
{"mv4", "use four motion vectors per macroblock (MPEG-4)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, .unit = "flags"},
|
||||
{"recon_frame", "export reconstructed frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_RECON_FRAME}, .unit = "flags"},
|
||||
{"copy_opaque", "propagate opaque values", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_COPY_OPAQUE}, .unit = "flags"},
|
||||
{"frame_duration", "use frame durations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_FRAME_DURATION}, .unit = "flags"},
|
||||
{"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"},
|
||||
{"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"},
|
||||
{"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"},
|
||||
{"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"ildct", "use interlaced DCT", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, "flags"},
|
||||
{"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, "flags"},
|
||||
{"bitexact", "use only bitexact functions (except (I)DCT)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_BITEXACT }, INT_MIN, INT_MAX, A|V|S|D|E, "flags"},
|
||||
{"aic", "H.263 advanced intra coding / MPEG-4 AC prediction", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_AC_PRED }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"ilme", "interlaced motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_ME }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"cgop", "closed GOP", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_CLOSED_GOP }, INT_MIN, INT_MAX, V|E, "flags"},
|
||||
{"output_corrupt", "Output even potentially corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_OUTPUT_CORRUPT }, INT_MIN, INT_MAX, V|D, "flags"},
|
||||
{"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, .unit = "flags"},
|
||||
{"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, .unit = "flags"},
|
||||
{"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, .unit = "flags"},
|
||||
{"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"ildct", "use interlaced DCT", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, .unit = "flags"},
|
||||
{"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, .unit = "flags"},
|
||||
{"bitexact", "use only bitexact functions (except (I)DCT)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_BITEXACT }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "flags"},
|
||||
{"aic", "H.263 advanced intra coding / MPEG-4 AC prediction", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_AC_PRED }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"ilme", "interlaced motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_ME }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"cgop", "closed GOP", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_CLOSED_GOP }, INT_MIN, INT_MAX, V|E, .unit = "flags"},
|
||||
{"output_corrupt", "Output even potentially corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_OUTPUT_CORRUPT }, INT_MIN, INT_MAX, V|D, .unit = "flags"},
|
||||
#if FF_API_DROPCHANGED
|
||||
{"drop_changed", "Drop frames whose parameters differ from first decoded frame", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_DROPCHANGED }, INT_MIN, INT_MAX, A|V|D | AV_OPT_FLAG_DEPRECATED, "flags"},
|
||||
{"drop_changed", "Drop frames whose parameters differ from first decoded frame", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_DROPCHANGED }, INT_MIN, INT_MAX, A|V|D | AV_OPT_FLAG_DEPRECATED, .unit = "flags"},
|
||||
#endif
|
||||
{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, V|A|E|D|S, "flags2"},
|
||||
{"fast", "allow non-spec-compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, "flags2"},
|
||||
{"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"},
|
||||
{"ignorecrop", "ignore cropping information from sps", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, "flags2"},
|
||||
{"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"},
|
||||
{"chunks", "Frame data might be split into multiple chunks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, "flags2"},
|
||||
{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"},
|
||||
{"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, "flags2"},
|
||||
{"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, A|D, "flags2"},
|
||||
{"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, "flags2"},
|
||||
{"icc_profiles", "generate/parse embedded ICC profiles from/to colorimetry tags", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_ICC_PROFILES}, INT_MIN, INT_MAX, S|D, "flags2"},
|
||||
{"export_side_data", "Export metadata as side data", OFFSET(export_side_data), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, A|V|S|D|E, "export_side_data"},
|
||||
{"mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_MVS}, INT_MIN, INT_MAX, V|D, "export_side_data"},
|
||||
{"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, "export_side_data"},
|
||||
{"venc_params", "export video encoding parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS}, INT_MIN, INT_MAX, V|D, "export_side_data"},
|
||||
{"film_grain", "export film grain parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_FILM_GRAIN}, INT_MIN, INT_MAX, V|D, "export_side_data"},
|
||||
{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, V|A|E|D|S, .unit = "flags2"},
|
||||
{"fast", "allow non-spec-compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, .unit = "flags2"},
|
||||
{"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, .unit = "flags2"},
|
||||
{"ignorecrop", "ignore cropping information from sps", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, .unit = "flags2"},
|
||||
{"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, .unit = "flags2"},
|
||||
{"chunks", "Frame data might be split into multiple chunks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, .unit = "flags2"},
|
||||
{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, .unit = "flags2"},
|
||||
{"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, .unit = "flags2"},
|
||||
{"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, A|D, .unit = "flags2"},
|
||||
{"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, .unit = "flags2"},
|
||||
{"icc_profiles", "generate/parse embedded ICC profiles from/to colorimetry tags", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_ICC_PROFILES}, INT_MIN, INT_MAX, S|D, .unit = "flags2"},
|
||||
{"export_side_data", "Export metadata as side data", OFFSET(export_side_data), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, A|V|S|D|E, .unit = "export_side_data"},
|
||||
{"mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_MVS}, INT_MIN, INT_MAX, V|D, .unit = "export_side_data"},
|
||||
{"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, .unit = "export_side_data"},
|
||||
{"venc_params", "export video encoding parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS}, INT_MIN, INT_MAX, V|D, .unit = "export_side_data"},
|
||||
{"film_grain", "export film grain parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_FILM_GRAIN}, INT_MIN, INT_MAX, V|D, .unit = "export_side_data"},
|
||||
{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, INT_MAX},
|
||||
{"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E},
|
||||
{"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E},
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
{"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E},
|
||||
#endif
|
||||
{"cutoff", "set cutoff bandwidth", OFFSET(cutoff), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|E},
|
||||
{"frame_size", NULL, OFFSET(frame_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|E},
|
||||
{"frame_number", NULL, OFFSET(frame_num), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
|
||||
|
@ -111,38 +110,38 @@ static const AVOption avcodec_options[] = {
|
|||
{"bf", "set maximum number of B-frames between non-B-frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, INT_MAX, V|E},
|
||||
{"b_qfactor", "QP factor between P- and B-frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"codec_tag", NULL, OFFSET(codec_tag), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
|
||||
{"bug", "work around not autodetected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"xvid_ilace", "Xvid interlacing bug (autodetected if FOURCC == XVIX)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_XVID_ILACE }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"ump4", "(autodetected if FOURCC == UMP4)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_UMP4 }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"no_padding", "padding bug (autodetected)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_NO_PADDING }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"amv", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AMV }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"qpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"std_qpel", "old standard qpel (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_STD_QPEL }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"qpel_chroma2", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA2 }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"direct_blocksize", "direct-qpel-blocksize bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DIRECT_BLOCKSIZE }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"edge", "edge padding bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_EDGE }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"hpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_HPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"dc_clip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DC_CLIP }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"ms", "work around various bugs in Microsoft's broken decoders", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_MS }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"trunc", "truncated frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_TRUNCATED}, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"iedge", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_IEDGE }, INT_MIN, INT_MAX, V|D, "bug"},
|
||||
{"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
|
||||
{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
|
||||
{"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
|
||||
{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
|
||||
{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
|
||||
{"experimental", "allow non-standardized experimental things", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"},
|
||||
{"bug", "work around not autodetected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"xvid_ilace", "Xvid interlacing bug (autodetected if FOURCC == XVIX)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_XVID_ILACE }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"ump4", "(autodetected if FOURCC == UMP4)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_UMP4 }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"no_padding", "padding bug (autodetected)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_NO_PADDING }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"amv", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AMV }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"qpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"std_qpel", "old standard qpel (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_STD_QPEL }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"qpel_chroma2", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA2 }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"direct_blocksize", "direct-qpel-blocksize bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DIRECT_BLOCKSIZE }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"edge", "edge padding bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_EDGE }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"hpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_HPEL_CHROMA }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"dc_clip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DC_CLIP }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"ms", "work around various bugs in Microsoft's broken decoders", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_MS }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"trunc", "truncated frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_TRUNCATED}, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"iedge", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_IEDGE }, INT_MIN, INT_MAX, V|D, .unit = "bug"},
|
||||
{"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"},
|
||||
{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"},
|
||||
{"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"},
|
||||
{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"},
|
||||
{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"},
|
||||
{"experimental", "allow non-standardized experimental things", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"},
|
||||
{"b_qoffset", "QP offset between P- and B-frames", OFFSET(b_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.i64 = 0 }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"ignore_err", "ignore errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_IGNORE_ERR }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"careful", "consider things that violate the spec, are fast to check and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_COMPLIANT | AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE | AV_EF_COMPLIANT | AV_EF_CAREFUL}, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"},
|
||||
{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.i64 = 0 }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"ignore_err", "ignore errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_IGNORE_ERR }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"careful", "consider things that violate the spec, are fast to check and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_COMPLIANT | AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE | AV_EF_COMPLIANT | AV_EF_CAREFUL}, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"},
|
||||
{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
|
||||
{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
|
||||
{"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
|
||||
|
@ -152,59 +151,56 @@ static const AVOption avcodec_options[] = {
|
|||
{"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|E},
|
||||
{"i_qfactor", "QP factor between P- and I-frames", OFFSET(i_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = -0.8 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"i_qoffset", "QP offset between P- and I-frames", OFFSET(i_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 0.0 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, "dct"},
|
||||
{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"fastint", "fast integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"mmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"faan", "floating point AAN DCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"},
|
||||
{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, .unit = "dct"},
|
||||
{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"fastint", "fast integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"mmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"faan", "floating point AAN DCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, .unit = "dct"},
|
||||
{"lumi_mask", "compresses bright areas stronger than medium ones", OFFSET(lumi_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"tcplx_mask", "temporal complexity masking", OFFSET(temporal_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"scplx_mask", "spatial complexity masking", OFFSET(spatial_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"p_mask", "inter masking", OFFSET(p_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"dark_mask", "compresses dark areas stronger than medium ones", OFFSET(dark_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E},
|
||||
{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, "idct"},
|
||||
{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"int", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplearm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplearmv5te", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simplearmv6", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"simpleneon", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"xvid", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"xvidmmx", "deprecated, for compatibility only", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"},
|
||||
{"simpleauto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"},
|
||||
#if FF_API_SLICE_OFFSET
|
||||
{"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
|
||||
#endif
|
||||
{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.i64 = 3 }, INT_MIN, INT_MAX, V|D, "ec"},
|
||||
{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, "ec"},
|
||||
{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"},
|
||||
{"favor_inter", "favor predicting from the previous frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_FAVOR_INTER }, INT_MIN, INT_MAX, V|D, "ec"},
|
||||
{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"int", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplearm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplearmv5te", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simplearmv6", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"simpleneon", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"xvid", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"xvidmmx", "deprecated, for compatibility only", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, .unit = "idct"},
|
||||
{"simpleauto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"},
|
||||
{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.i64 = 3 }, INT_MIN, INT_MAX, V|D, .unit = "ec"},
|
||||
{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, .unit = "ec"},
|
||||
{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, .unit = "ec"},
|
||||
{"favor_inter", "favor predicting from the previous frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_FAVOR_INTER }, INT_MIN, INT_MAX, V|D, .unit = "ec"},
|
||||
{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
|
||||
{"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E},
|
||||
{"sar", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E},
|
||||
{"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|A|S|E|D, "debug"},
|
||||
{"pict", "picture info", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_PICT_INFO }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"rc", "rate control", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_RC }, INT_MIN, INT_MAX, V|E, "debug"},
|
||||
{"bitstream", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BITSTREAM }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"mb_type", "macroblock (MB) type", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"qp", "per-block quantization parameter (QP)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_QP }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"green_metadata", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_GREEN_MD }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"skip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_SKIP }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"startcode", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_STARTCODE }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"er", "error recognition", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_ER }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"mmco", "memory management control operations (H.264)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MMCO }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"bugs", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUGS }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"buffers", "picture buffer allocations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUFFERS }, INT_MIN, INT_MAX, V|D, "debug"},
|
||||
{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|A|D, "debug"},
|
||||
{"nomc", "skip motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_NOMC }, INT_MIN, INT_MAX, V|A|D, "debug"},
|
||||
{"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|A|S|E|D, .unit = "debug"},
|
||||
{"pict", "picture info", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_PICT_INFO }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"rc", "rate control", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_RC }, INT_MIN, INT_MAX, V|E, .unit = "debug"},
|
||||
{"bitstream", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BITSTREAM }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"mb_type", "macroblock (MB) type", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MB_TYPE }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"qp", "per-block quantization parameter (QP)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_QP }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"green_metadata", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_GREEN_MD }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"skip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_SKIP }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"startcode", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_STARTCODE }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"er", "error recognition", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_ER }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"mmco", "memory management control operations (H.264)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MMCO }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"bugs", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUGS }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"buffers", "picture buffer allocations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUFFERS }, INT_MIN, INT_MAX, V|D, .unit = "debug"},
|
||||
{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|A|D, .unit = "debug"},
|
||||
{"nomc", "skip motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_NOMC }, INT_MIN, INT_MAX, V|A|D, .unit = "debug"},
|
||||
{"dia_size", "diamond type & size for motion estimation", OFFSET(dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
{"last_pred", "amount of motion predictors from the previous frame", OFFSET(last_predictor_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
{"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
|
@ -212,58 +208,58 @@ static const AVOption avcodec_options[] = {
|
|||
{"me_range", "limit motion vectors range (1023 for DivX player)", OFFSET(me_range), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
{"global_quality", NULL, OFFSET(global_quality), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E},
|
||||
{"slice_flags", NULL, OFFSET(slice_flags), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX},
|
||||
{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, "mbd"},
|
||||
{"simple", "use mbcmp", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"},
|
||||
{"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, "mbd"},
|
||||
{"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"},
|
||||
{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, .unit = "mbd"},
|
||||
{"simple", "use mbcmp", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, .unit = "mbd"},
|
||||
{"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, .unit = "mbd"},
|
||||
{"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, .unit = "mbd"},
|
||||
{"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E},
|
||||
{"threads", "set the number of threads", OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|A|E|D, "threads"},
|
||||
{"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"},
|
||||
{"threads", "set the number of threads", OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|A|E|D, .unit = "threads"},
|
||||
{"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, V|E|D, .unit = "threads"},
|
||||
{"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.i64 = 0 }, -8, 16, V|E},
|
||||
{"nssew", "nsse weight", OFFSET(nsse_weight), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E},
|
||||
{"skip_top", "number of macroblock rows at the top which are skipped", OFFSET(skip_top), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|D},
|
||||
{"skip_bottom", "number of macroblock rows at the bottom which are skipped", OFFSET(skip_bottom), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|D},
|
||||
{"profile", NULL, OFFSET(profile), AV_OPT_TYPE_INT, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, "avctx.profile"},
|
||||
{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "avctx.profile"},
|
||||
{"main10", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_HEVC_MAIN_10 }, INT_MIN, INT_MAX, V|E, "avctx.profile"},
|
||||
{"level", "encoding level, usually corresponding to the profile level, codec-specific", OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, "avctx.level"},
|
||||
{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "avctx.level"},
|
||||
{"profile", NULL, OFFSET(profile), AV_OPT_TYPE_INT, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, .unit = "avctx.profile"},
|
||||
{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, .unit = "avctx.profile"},
|
||||
{"main10", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_HEVC_MAIN_10 }, INT_MIN, INT_MAX, V|E, .unit = "avctx.profile"},
|
||||
{"level", "encoding level, usually corresponding to the profile level, codec-specific", OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, .unit = "avctx.level"},
|
||||
{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, .unit = "avctx.level"},
|
||||
{"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|A|D},
|
||||
{"cmp", "full-pel ME compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"subcmp", "sub-pel ME compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"ildctcmp", "interlaced DCT compare function", OFFSET(ildct_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"sad", "sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"sse", "sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"satd", "sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"dct", "sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"psnr", "sum of squared quantization errors (avoid, low quality)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"bit", "number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"rd", "rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"zero", "0", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"vsad", "sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"vsse", "sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"nsse", "noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"cmp", "full-pel ME compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"subcmp", "sub-pel ME compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"ildctcmp", "interlaced DCT compare function", OFFSET(ildct_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"sad", "sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"sse", "sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"satd", "sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"dct", "sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"psnr", "sum of squared quantization errors (avoid, low quality)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"bit", "number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"rd", "rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"zero", "0", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"vsad", "sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"vsse", "sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"nsse", "noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
#if CONFIG_SNOW_ENCODER
|
||||
{"w53", "5/3 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W53 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"w97", "9/7 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W97 }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"w53", "5/3 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W53 }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"w97", "9/7 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W97 }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
#endif
|
||||
{"dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"msad", "sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"},
|
||||
{"dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"msad", "sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"},
|
||||
{"mblmin", "minimum macroblock Lagrange factor (VBR)", OFFSET(mb_lmin), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 2 }, 1, FF_LAMBDA_MAX, V|E},
|
||||
{"mblmax", "maximum macroblock Lagrange factor (VBR)", OFFSET(mb_lmax), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 31 }, 1, FF_LAMBDA_MAX, V|E},
|
||||
{"skip_loop_filter", "skip loop filtering process for the selected frames", OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"skip_idct" , "skip IDCT/dequantization for the selected frames", OFFSET(skip_idct), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"skip_frame" , "skip decoding for the selected frames", OFFSET(skip_frame), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"none" , "discard no frame", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONE }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"default" , "discard useless frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"noref" , "discard all non-reference frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONREF }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"bidir" , "discard all bidirectional frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_BIDIR }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"nointra" , "discard all frames except I frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA}, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"nokey" , "discard all frames except keyframes", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"all" , "discard all frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, "avdiscard"},
|
||||
{"skip_loop_filter", "skip loop filtering process for the selected frames", OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"skip_idct" , "skip IDCT/dequantization for the selected frames", OFFSET(skip_idct), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"skip_frame" , "skip decoding for the selected frames", OFFSET(skip_frame), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"none" , "discard no frame", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONE }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"default" , "discard useless frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"noref" , "discard all non-reference frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONREF }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"bidir" , "discard all bidirectional frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_BIDIR }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"nointra" , "discard all frames except I frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA}, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"nokey" , "discard all frames except keyframes", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"all" , "discard all frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"},
|
||||
{"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, 4, V|E},
|
||||
{"keyint_min", "minimum interval between IDR-frames", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.i64 = 25 }, INT_MIN, INT_MAX, V|E},
|
||||
{"refs", "reference frames to consider for motion compensation", OFFSET(refs), AV_OPT_TYPE_INT, {.i64 = 1 }, INT_MIN, INT_MAX, V|E},
|
||||
|
@ -271,140 +267,149 @@ static const AVOption avcodec_options[] = {
|
|||
{"mv0_threshold", NULL, OFFSET(mv0_threshold), AV_OPT_TYPE_INT, {.i64 = 256 }, 0, INT_MAX, V|E},
|
||||
{"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.i64 = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E},
|
||||
{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX},
|
||||
{"ch_layout", NULL, OFFSET(ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL }, 0, 0, A|E|D, "ch_layout"},
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"},
|
||||
{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_layout"},
|
||||
#endif
|
||||
{"ch_layout", NULL, OFFSET(ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL }, 0, 0, A|E|D, .unit = "ch_layout"},
|
||||
{"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0.0, FLT_MAX, V|E},
|
||||
{"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use), AV_OPT_TYPE_FLOAT, {.dbl = 3 }, 0.0, FLT_MAX, V|E},
|
||||
#if FF_API_TICKS_PER_FRAME
|
||||
{"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D},
|
||||
#endif
|
||||
{"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT709 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"bt470m", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470M }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470BG }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"film", "Film", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_FILM }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"bt2020", "BT.2020", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT2020 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"smpte431", "SMPTE 431-2", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE431 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"smpte432", "SMPTE 422-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE432 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"jedec-p22", "JEDEC P22", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_JEDEC_P22 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"ebu3213", "EBU 3213-E", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_EBU3213 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"},
|
||||
{"color_trc", "color transfer characteristics", OFFSET(color_trc), AV_OPT_TYPE_INT, {.i64 = AVCOL_TRC_UNSPECIFIED }, 1, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT709 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"gamma22", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA22 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"gamma28", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA28 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"linear", "Linear", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LINEAR }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"log100", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"log316", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"iec61966-2-4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"bt1361e", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"iec61966-2-1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"bt2020-10", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"bt2020-12", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"smpte2084", "SMPTE 2084", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE2084 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"arib-std-b67", "ARIB STD-B67", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_ARIB_STD_B67 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"log", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"log_sqrt", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"iec61966_2_4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"bt1361", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"iec61966_2_1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"bt2020_10bit", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"bt2020_12bit", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"},
|
||||
{"colorspace", "color space", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = AVCOL_SPC_UNSPECIFIED }, 0, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"rgb", "RGB", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_RGB }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT709 }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"fcc", "FCC", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_FCC }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT470BG }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"ycgco", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"bt2020nc", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"bt2020c", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"smpte2085", "SMPTE 2085", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE2085 }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"chroma-derived-nc", "Chroma-derived NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_NCL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"chroma-derived-c", "Chroma-derived CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_CL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"ictcp", "ICtCp", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_ICTCP }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"ycocg", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"bt2020_ncl", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"bt2020_cl", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"},
|
||||
{"color_range", "color range", OFFSET(color_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"tv", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"pc", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"mpeg", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"jpeg", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"limited", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"full", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"},
|
||||
{"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"left", "Left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_LEFT }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"center", "Center", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_CENTER }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"topleft", "Top-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOPLEFT }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"top", "Top", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOP }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"bottomleft", "Bottom-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOMLEFT }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"bottom", "Bottom", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOM }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"},
|
||||
{"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT709 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"bt470m", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470BG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"film", "Film", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_FILM }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"bt2020", "BT.2020", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT2020 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"smpte431", "SMPTE 431-2", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE431 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"smpte432", "SMPTE 422-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE432 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"jedec-p22", "JEDEC P22", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_JEDEC_P22 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"ebu3213", "EBU 3213-E", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_EBU3213 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"},
|
||||
{"color_trc", "color transfer characteristics", OFFSET(color_trc), AV_OPT_TYPE_INT, {.i64 = AVCOL_TRC_UNSPECIFIED }, 1, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT709 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"gamma22", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA22 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"gamma28", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA28 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"linear", "Linear", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LINEAR }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"log100", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"log316", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"iec61966-2-4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"bt1361e", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"iec61966-2-1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"bt2020-10", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"bt2020-12", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"smpte2084", "SMPTE 2084", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE2084 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"arib-std-b67", "ARIB STD-B67", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_ARIB_STD_B67 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"log", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"log_sqrt", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"iec61966_2_4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"bt1361", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"iec61966_2_1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"bt2020_10bit", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"bt2020_12bit", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"},
|
||||
{"colorspace", "color space", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = AVCOL_SPC_UNSPECIFIED }, 0, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"rgb", "RGB", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_RGB }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT709 }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"fcc", "FCC", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_FCC }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT470BG }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"ycgco", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"bt2020nc", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"bt2020c", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"smpte2085", "SMPTE 2085", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE2085 }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"chroma-derived-nc", "Chroma-derived NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_NCL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"chroma-derived-c", "Chroma-derived CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_CL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"ictcp", "ICtCp", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_ICTCP }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"ipt-c2", "IPT-C2", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_IPT_C2 }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"ycocg", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"ycgco-re", "YCgCo-R, even add.", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO_RE }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"ycgco-ro", "YCgCo-R, odd add.", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO_RO }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"bt2020_ncl", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"bt2020_cl", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"},
|
||||
{"color_range", "color range", OFFSET(color_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"tv", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"pc", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"mpeg", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"jpeg", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"limited", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"full", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"},
|
||||
{"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"left", "Left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_LEFT }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"center", "Center", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_CENTER }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"topleft", "Top-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOPLEFT }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"top", "Top", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOP }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"bottomleft", "Bottom-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOMLEFT }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"bottom", "Bottom", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOM }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"},
|
||||
{"log_level_offset", "set the log level offset", OFFSET(log_level_offset), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX },
|
||||
{"slices", "set the number of slices, used in parallelized encoding", OFFSET(slices), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|E},
|
||||
{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.i64 = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|A|E|D, "thread_type"},
|
||||
{"slice", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
|
||||
{"frame", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, "thread_type"},
|
||||
{"audio_service_type", "audio service type", OFFSET(audio_service_type), AV_OPT_TYPE_INT, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, "audio_service_type"},
|
||||
{"ma", "Main Audio Service", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"ef", "Effects", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EFFECTS }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"vi", "Visually Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"hi", "Hearing Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"di", "Dialogue", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_DIALOGUE }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"co", "Commentary", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_COMMENTARY }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"em", "Emergency", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EMERGENCY }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"vo", "Voice Over", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VOICE_OVER }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"ka", "Karaoke", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_KARAOKE }, INT_MIN, INT_MAX, A|E, "audio_service_type"},
|
||||
{"request_sample_fmt", "sample format audio decoders should prefer", OFFSET(request_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64=AV_SAMPLE_FMT_NONE}, -1, INT_MAX, A|D, "request_sample_fmt"},
|
||||
{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.i64 = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|A|E|D, .unit = "thread_type"},
|
||||
{"slice", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, .unit = "thread_type"},
|
||||
{"frame", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, .unit = "thread_type"},
|
||||
{"audio_service_type", "audio service type", OFFSET(audio_service_type), AV_OPT_TYPE_INT, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, .unit = "audio_service_type"},
|
||||
{"ma", "Main Audio Service", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"ef", "Effects", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EFFECTS }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"vi", "Visually Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"hi", "Hearing Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"di", "Dialogue", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_DIALOGUE }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"co", "Commentary", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_COMMENTARY }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"em", "Emergency", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EMERGENCY }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"vo", "Voice Over", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VOICE_OVER }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"ka", "Karaoke", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_KARAOKE }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"},
|
||||
{"request_sample_fmt", "sample format audio decoders should prefer", OFFSET(request_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64=AV_SAMPLE_FMT_NONE}, -1, INT_MAX, A|D, .unit = "request_sample_fmt"},
|
||||
{"pkt_timebase", NULL, OFFSET(pkt_timebase), AV_OPT_TYPE_RATIONAL, {.dbl = 0 }, 0, INT_MAX, 0},
|
||||
{"sub_charenc", "set input text subtitles character encoding", OFFSET(sub_charenc), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, S|D},
|
||||
{"sub_charenc_mode", "set input text subtitles character encoding mode", OFFSET(sub_charenc_mode), AV_OPT_TYPE_FLAGS, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, -1, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"do_nothing", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_DO_NOTHING}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"},
|
||||
{"sub_charenc_mode", "set input text subtitles character encoding mode", OFFSET(sub_charenc_mode), AV_OPT_TYPE_FLAGS, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, -1, INT_MAX, S|D, .unit = "sub_charenc_mode"},
|
||||
{"do_nothing", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_DO_NOTHING}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"},
|
||||
{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"},
|
||||
{"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"},
|
||||
{"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"},
|
||||
{"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, V | D },
|
||||
{"skip_alpha", "Skip processing alpha", OFFSET(skip_alpha), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, V|D },
|
||||
{"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, "field_order" },
|
||||
{"progressive", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_PROGRESSIVE }, 0, 0, V|D|E, "field_order" },
|
||||
{"tt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TT }, 0, 0, V|D|E, "field_order" },
|
||||
{"bb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BB }, 0, 0, V|D|E, "field_order" },
|
||||
{"tb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TB }, 0, 0, V|D|E, "field_order" },
|
||||
{"bt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BT }, 0, 0, V|D|E, "field_order" },
|
||||
{"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, .unit = "field_order" },
|
||||
{"progressive", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_PROGRESSIVE }, 0, 0, V|D|E, .unit = "field_order" },
|
||||
{"tt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TT }, 0, 0, V|D|E, .unit = "field_order" },
|
||||
{"bb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BB }, 0, 0, V|D|E, .unit = "field_order" },
|
||||
{"tb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TB }, 0, 0, V|D|E, .unit = "field_order" },
|
||||
{"bt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BT }, 0, 0, V|D|E, .unit = "field_order" },
|
||||
{"dump_separator", "set information dump field separator", OFFSET(dump_separator), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, A|V|S|D|E},
|
||||
{"codec_whitelist", "List of decoders that are allowed to be used", OFFSET(codec_whitelist), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, A|V|S|D },
|
||||
{"pixel_format", "set pixel format", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT, {.i64=AV_PIX_FMT_NONE}, -1, INT_MAX, 0 },
|
||||
{"video_size", "set video size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str=NULL}, 0, INT_MAX, 0 },
|
||||
{"max_pixels", "Maximum number of pixels", OFFSET(max_pixels), AV_OPT_TYPE_INT64, {.i64 = INT_MAX }, 0, INT_MAX, A|V|S|D|E },
|
||||
{"max_samples", "Maximum number of samples", OFFSET(max_samples), AV_OPT_TYPE_INT64, {.i64 = INT_MAX }, 0, INT_MAX, A|D|E },
|
||||
{"hwaccel_flags", NULL, OFFSET(hwaccel_flags), AV_OPT_TYPE_FLAGS, {.i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, 0, UINT_MAX, V|D, "hwaccel_flags"},
|
||||
{"ignore_level", "ignore level even if the codec level used is unknown or higher than the maximum supported level reported by the hardware driver", 0, AV_OPT_TYPE_CONST, { .i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, INT_MIN, INT_MAX, V | D, "hwaccel_flags" },
|
||||
{"allow_high_depth", "allow to output YUV pixel formats with a different chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"},
|
||||
{"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"},
|
||||
{"unsafe_output", "allow potentially unsafe hwaccel frame output that might require special care to process successfully", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_UNSAFE_OUTPUT }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"},
|
||||
{"hwaccel_flags", NULL, OFFSET(hwaccel_flags), AV_OPT_TYPE_FLAGS, {.i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, 0, UINT_MAX, V|D, .unit = "hwaccel_flags"},
|
||||
{"ignore_level", "ignore level even if the codec level used is unknown or higher than the maximum supported level reported by the hardware driver", 0, AV_OPT_TYPE_CONST, { .i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags" },
|
||||
{"allow_high_depth", "allow to output YUV pixel formats with a different chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags"},
|
||||
{"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags"},
|
||||
{"unsafe_output", "allow potentially unsafe hwaccel frame output that might require special care to process successfully", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_UNSAFE_OUTPUT }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags"},
|
||||
{"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D },
|
||||
{"discard_damaged_percentage", "Percentage of damaged samples to discard a frame", OFFSET(discard_damaged_percentage), AV_OPT_TYPE_INT, {.i64 = 95 }, 0, 100, V|D },
|
||||
{"side_data_prefer_packet", "Comma-separated list of side data types for which user-supplied (container) data is preferred over coded bytestream",
|
||||
OFFSET(side_data_prefer_packet), AV_OPT_TYPE_INT | AR, .min = -1, .max = INT_MAX, .flags = V|A|S|D, .unit = "side_data_pkt" },
|
||||
{"replaygain", .default_val.i64 = AV_PKT_DATA_REPLAYGAIN, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{"displaymatrix", .default_val.i64 = AV_PKT_DATA_DISPLAYMATRIX, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{"spherical", .default_val.i64 = AV_PKT_DATA_SPHERICAL, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{"stereo3d", .default_val.i64 = AV_PKT_DATA_STEREO3D, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{"audio_service_type", .default_val.i64 = AV_PKT_DATA_AUDIO_SERVICE_TYPE, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{"mastering_display_metadata", .default_val.i64 = AV_PKT_DATA_MASTERING_DISPLAY_METADATA, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{"content_light_level", .default_val.i64 = AV_PKT_DATA_CONTENT_LIGHT_LEVEL, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{"icc_profile", .default_val.i64 = AV_PKT_DATA_ICC_PROFILE, .type = AV_OPT_TYPE_CONST, .flags = A|D, .unit = "side_data_pkt" },
|
||||
{NULL},
|
||||
};
|
||||
|
||||
|
|
|
@ -301,6 +301,7 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type)
|
|||
case AV_PKT_DATA_DOVI_CONF: return "DOVI configuration record";
|
||||
case AV_PKT_DATA_S12M_TIMECODE: return "SMPTE ST 12-1:2014 timecode";
|
||||
case AV_PKT_DATA_DYNAMIC_HDR10_PLUS: return "HDR10+ Dynamic Metadata (SMPTE 2094-40)";
|
||||
case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT:return "Ambient viewing environment";
|
||||
case AV_PKT_DATA_IAMF_MIX_GAIN_PARAM: return "IAMF Mix Gain Parameter Data";
|
||||
case AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM: return "IAMF Demixing Info Parameter Data";
|
||||
case AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM: return "IAMF Recon Gain Info Parameter Data";
|
|
@ -323,6 +323,13 @@ enum AVPacketSideDataType {
|
|||
*/
|
||||
AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM,
|
||||
|
||||
/**
|
||||
* Ambient viewing environment metadata, as defined by H.274. This metadata
|
||||
* should be associated with a video stream and contains data in the form
|
||||
* of the AVAmbientViewingEnvironment struct.
|
||||
*/
|
||||
AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,
|
||||
|
||||
/**
|
||||
* The number of side data types.
|
||||
* This is not part of the public API/ABI in the sense that it may
|
||||
|
@ -334,7 +341,9 @@ enum AVPacketSideDataType {
|
|||
AV_PKT_DATA_NB
|
||||
};
|
||||
|
||||
#if FF_API_QUALITY_FACTOR
|
||||
#define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED
|
||||
#endif
|
||||
|
||||
/**
|
||||
* This structure stores auxiliary information for decoding, presenting, or
|
||||
|
@ -589,13 +598,6 @@ typedef struct AVPacketList {
|
|||
#define AV_PKT_FLAG_DISPOSABLE 0x0010
|
||||
|
||||
enum AVSideDataParamChangeFlags {
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
/**
|
||||
* @deprecated those are not used by any decoder
|
||||
*/
|
||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001,
|
||||
AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT = 0x0002,
|
||||
#endif
|
||||
AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE = 0x0004,
|
||||
AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS = 0x0008,
|
||||
};
|
||||
|
|
|
@ -252,6 +252,7 @@ int ff_combine_frame(ParseContext *pc, int next,
|
|||
AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!new_buffer) {
|
||||
av_log(NULL, AV_LOG_ERROR, "Failed to reallocate parser buffer to %d\n", next + pc->index + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
*buf_size =
|
||||
pc->overread_index =
|
||||
pc->index = 0;
|
||||
return AVERROR(ENOMEM);
|
||||
|
|
|
@ -28,6 +28,7 @@
|
|||
#include "config_components.h"
|
||||
#include "libavutil/attributes.h"
|
||||
#include "libavutil/float_dsp.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/reverse.h"
|
||||
#include "libavutil/thread.h"
|
||||
#include "avcodec.h"
|
||||
|
|
|
@ -21,22 +21,20 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
|
||||
typedef struct PixblockDSPContext {
|
||||
void (*get_pixels)(int16_t *av_restrict block /* align 16 */,
|
||||
void (*get_pixels)(int16_t *restrict block /* align 16 */,
|
||||
const uint8_t *pixels /* align 8 */,
|
||||
ptrdiff_t stride);
|
||||
void (*get_pixels_unaligned)(int16_t *av_restrict block /* align 16 */,
|
||||
void (*get_pixels_unaligned)(int16_t *restrict block /* align 16 */,
|
||||
const uint8_t *pixels,
|
||||
ptrdiff_t stride);
|
||||
void (*diff_pixels)(int16_t *av_restrict block /* align 16 */,
|
||||
void (*diff_pixels)(int16_t *restrict block /* align 16 */,
|
||||
const uint8_t *s1 /* align 8 */,
|
||||
const uint8_t *s2 /* align 8 */,
|
||||
ptrdiff_t stride);
|
||||
void (*diff_pixels_unaligned)(int16_t *av_restrict block /* align 16 */,
|
||||
void (*diff_pixels_unaligned)(int16_t *restrict block /* align 16 */,
|
||||
const uint8_t *s1,
|
||||
const uint8_t *s2,
|
||||
ptrdiff_t stride);
|
||||
|
|
|
@ -18,7 +18,8 @@
|
|||
|
||||
#include "config.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "codec.h"
|
||||
#include "defs.h"
|
||||
#include "profiles.h"
|
||||
|
||||
#if !CONFIG_SMALL
|
||||
|
|
|
@ -19,11 +19,12 @@
|
|||
#ifndef AVCODEC_PROFILES_H
|
||||
#define AVCODEC_PROFILES_H
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "codec.h"
|
||||
#include "defs.h"
|
||||
#include "libavutil/opt.h"
|
||||
|
||||
#define FF_AVCTX_PROFILE_OPTION(name, description, type, value) \
|
||||
{name, description, 0, AV_OPT_TYPE_CONST, {.i64 = value }, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_## type ##_PARAM, "avctx.profile"},
|
||||
{name, description, 0, AV_OPT_TYPE_CONST, {.i64 = value }, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_## type ##_PARAM, .unit = "avctx.profile"},
|
||||
|
||||
#define FF_AAC_PROFILE_OPTS \
|
||||
FF_AVCTX_PROFILE_OPTION("aac_main", NULL, AUDIO, AV_PROFILE_AAC_MAIN)\
|
||||
|
|
|
@ -311,12 +311,6 @@ FF_ENABLE_DEPRECATION_WARNINGS
|
|||
|
||||
dst->sample_rate = src->sample_rate;
|
||||
dst->sample_fmt = src->sample_fmt;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
dst->channels = src->channels;
|
||||
dst->channel_layout = src->channel_layout;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
err = av_channel_layout_copy(&dst->ch_layout, &src->ch_layout);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
@ -418,16 +412,6 @@ static int update_context_from_user(AVCodecContext *dst, const AVCodecContext *s
|
|||
dst->skip_frame = src->skip_frame;
|
||||
|
||||
dst->frame_num = src->frame_num;
|
||||
#if FF_API_AVCTX_FRAME_NUMBER
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
dst->frame_number = src->frame_number;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
#if FF_API_REORDERED_OPAQUE
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
dst->reordered_opaque = src->reordered_opaque;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
av_packet_unref(dst->internal->last_pkt_props);
|
||||
err = av_packet_copy_props(dst->internal->last_pkt_props, src->internal->last_pkt_props);
|
||||
|
@ -761,7 +745,7 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count)
|
|||
ff_pthread_free(fctx, thread_ctx_offsets);
|
||||
|
||||
/* if we have stashed hwaccel state, move it to the user-facing context,
|
||||
* so it will be freed in avcodec_close() */
|
||||
* so it will be freed in ff_codec_close() */
|
||||
av_assert0(!avctx->hwaccel);
|
||||
FFSWAP(const AVHWAccel*, avctx->hwaccel, fctx->stash_hwaccel);
|
||||
FFSWAP(void*, avctx->hwaccel_context, fctx->stash_hwaccel_context);
|
||||
|
|
|
@ -28,9 +28,7 @@
|
|||
* ratecontrol header.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include "libavutil/eval.h"
|
||||
|
||||
typedef struct Predictor{
|
||||
double coeff;
|
||||
|
@ -80,7 +78,7 @@ typedef struct RateControlContext{
|
|||
int frame_count[5];
|
||||
int last_non_b_pict_type;
|
||||
|
||||
AVExpr * rc_eq_eval;
|
||||
struct AVExpr *rc_eq_eval;
|
||||
}RateControlContext;
|
||||
|
||||
struct MpegEncContext;
|
||||
|
|
|
@ -20,13 +20,13 @@
|
|||
#include <stdint.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "internal.h"
|
||||
#include "refstruct.h"
|
||||
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/error.h"
|
||||
#include "libavutil/macros.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/mem_internal.h"
|
||||
#include "libavutil/thread.h"
|
||||
|
||||
#ifndef REFSTRUCT_CHECKED
|
||||
|
@ -45,10 +45,10 @@
|
|||
#define REFSTRUCT_COOKIE AV_NE((uint64_t)MKBETAG('R', 'e', 'f', 'S') << 32 | MKBETAG('t', 'r', 'u', 'c'), \
|
||||
MKTAG('R', 'e', 'f', 'S') | (uint64_t)MKTAG('t', 'r', 'u', 'c') << 32)
|
||||
|
||||
#if __STDC_VERSION__ >= 201112L
|
||||
#define REFCOUNT_OFFSET FFALIGN(sizeof(RefCount), FFMAX3(STRIDE_ALIGN, 16, _Alignof(max_align_t)))
|
||||
#if __STDC_VERSION__ >= 201112L && !defined(_MSC_VER)
|
||||
#define REFCOUNT_OFFSET FFALIGN(sizeof(RefCount), FFMAX(ALIGN_64, _Alignof(max_align_t)))
|
||||
#else
|
||||
#define REFCOUNT_OFFSET FFALIGN(sizeof(RefCount), FFMAX(STRIDE_ALIGN, 16))
|
||||
#define REFCOUNT_OFFSET FFALIGN(sizeof(RefCount), ALIGN_64)
|
||||
#endif
|
||||
|
||||
typedef struct RefCount {
|
||||
|
|
|
@ -362,17 +362,6 @@ void avcodec_align_dimensions(AVCodecContext *s, int *width, int *height)
|
|||
align = FFMAX3(align, linesize_align[1], linesize_align[2]);
|
||||
*width = FFALIGN(*width, align);
|
||||
}
|
||||
#if FF_API_AVCODEC_CHROMA_POS
|
||||
int avcodec_enum_to_chroma_pos(int *xpos, int *ypos, enum AVChromaLocation pos)
|
||||
{
|
||||
return av_chroma_location_enum_to_pos(xpos, ypos, pos);
|
||||
}
|
||||
|
||||
enum AVChromaLocation avcodec_chroma_pos_to_enum(int xpos, int ypos)
|
||||
{
|
||||
return av_chroma_location_pos_to_enum(xpos, ypos);
|
||||
}
|
||||
#endif
|
||||
|
||||
int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels,
|
||||
enum AVSampleFormat sample_fmt, const uint8_t *buf,
|
||||
|
@ -795,12 +784,7 @@ int av_get_audio_frame_duration(AVCodecContext *avctx, int frame_bytes)
|
|||
{
|
||||
int channels = avctx->ch_layout.nb_channels;
|
||||
int duration;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (!channels)
|
||||
channels = avctx->channels;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
duration = get_audio_frame_duration(avctx->codec_id, avctx->sample_rate,
|
||||
channels, avctx->block_align,
|
||||
avctx->codec_tag, avctx->bits_per_coded_sample,
|
||||
|
@ -813,12 +797,7 @@ int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes)
|
|||
{
|
||||
int channels = par->ch_layout.nb_channels;
|
||||
int duration;
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
FF_DISABLE_DEPRECATION_WARNINGS
|
||||
if (!channels)
|
||||
channels = par->channels;
|
||||
FF_ENABLE_DEPRECATION_WARNINGS
|
||||
#endif
|
||||
|
||||
duration = get_audio_frame_duration(par->codec_id, par->sample_rate,
|
||||
channels, par->block_align,
|
||||
par->codec_tag, par->bits_per_coded_sample,
|
||||
|
@ -960,9 +939,9 @@ void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, in
|
|||
|
||||
#endif
|
||||
|
||||
const uint8_t *avpriv_find_start_code(const uint8_t *av_restrict p,
|
||||
const uint8_t *avpriv_find_start_code(const uint8_t *restrict p,
|
||||
const uint8_t *end,
|
||||
uint32_t *av_restrict state)
|
||||
uint32_t *restrict state)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
|
|
@ -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 <stdint.h>
|
||||
#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 */
|
|
@ -20,6 +20,7 @@
|
|||
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
|
@ -72,17 +73,14 @@ int ff_vaapi_decode_make_slice_buffer(AVCodecContext *avctx,
|
|||
|
||||
av_assert0(pic->nb_slices <= pic->slices_allocated);
|
||||
if (pic->nb_slices == pic->slices_allocated) {
|
||||
if (pic->slices_allocated > 0)
|
||||
pic->slices_allocated *= 2;
|
||||
else
|
||||
pic->slices_allocated = 64;
|
||||
|
||||
pic->slice_buffers =
|
||||
av_realloc_array(pic->slice_buffers,
|
||||
pic->slices_allocated,
|
||||
pic->slices_allocated ? pic->slices_allocated * 2 : 64,
|
||||
2 * sizeof(*pic->slice_buffers));
|
||||
if (!pic->slice_buffers)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
pic->slices_allocated = pic->slices_allocated ? pic->slices_allocated * 2 : 64;
|
||||
}
|
||||
av_assert0(pic->nb_slices + 1 <= pic->slices_allocated);
|
||||
|
||||
|
|
|
@ -18,9 +18,10 @@
|
|||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*/
|
||||
|
||||
#include <assert.h>
|
||||
|
||||
#include "config.h"
|
||||
|
||||
#include "libavutil/avassert.h"
|
||||
#include "avcodec.h"
|
||||
#include "codec_id.h"
|
||||
#include "version.h"
|
||||
|
@ -30,10 +31,15 @@ const char av_codec_ffversion[] = "FFmpeg version " FFMPEG_VERSION;
|
|||
|
||||
unsigned avcodec_version(void)
|
||||
{
|
||||
av_assert0(AV_CODEC_ID_PCM_S8_PLANAR==65563);
|
||||
av_assert0(AV_CODEC_ID_ADPCM_G722==69660);
|
||||
av_assert0(AV_CODEC_ID_SRT==94216);
|
||||
av_assert0(LIBAVCODEC_VERSION_MICRO >= 100);
|
||||
static_assert(AV_CODEC_ID_LEAD == 269 &&
|
||||
AV_CODEC_ID_PCM_SGA == 65572 &&
|
||||
AV_CODEC_ID_ADPCM_XMD == 69683 &&
|
||||
AV_CODEC_ID_CBD2_DPCM == 81928 &&
|
||||
AV_CODEC_ID_QOA == 86121 &&
|
||||
AV_CODEC_ID_ARIB_CAPTION == 94233 &&
|
||||
AV_CODEC_ID_SMPTE_2038 == 98315,
|
||||
"Don't insert new codec ids in the middle of a list");
|
||||
static_assert(LIBAVCODEC_VERSION_MICRO >= 100, "micro version starts at 100");
|
||||
|
||||
return LIBAVCODEC_VERSION_INT;
|
||||
}
|
||||
|
|
|
@ -29,8 +29,8 @@
|
|||
|
||||
#include "version_major.h"
|
||||
|
||||
#define LIBAVCODEC_VERSION_MINOR 38
|
||||
#define LIBAVCODEC_VERSION_MICRO 100
|
||||
#define LIBAVCODEC_VERSION_MINOR 5
|
||||
#define LIBAVCODEC_VERSION_MICRO 101
|
||||
|
||||
#define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
|
||||
LIBAVCODEC_VERSION_MINOR, \
|
||||
|
|
|
@ -25,7 +25,7 @@
|
|||
* Libavcodec version macros.
|
||||
*/
|
||||
|
||||
#define LIBAVCODEC_VERSION_MAJOR 60
|
||||
#define LIBAVCODEC_VERSION_MAJOR 61
|
||||
|
||||
/**
|
||||
* FF_API_* defines may be placed below to indicate public API that will be
|
||||
|
@ -37,23 +37,16 @@
|
|||
* at once through the bump. This improves the git bisect-ability of the change.
|
||||
*/
|
||||
|
||||
#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_IDCT_NONE (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_SVTAV1_OPTS (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_AYUV_CODECID (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_VT_OUTPUT_CALLBACK (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_AVCODEC_CHROMA_POS (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_VT_HWACCEL_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_AVCTX_FRAME_NUMBER (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_SLICE_OFFSET (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_SUBFRAMES (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_TICKS_PER_FRAME (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_DROPCHANGED (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_INIT_PACKET (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
#define FF_API_SUBFRAMES (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
#define FF_API_TICKS_PER_FRAME (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
#define FF_API_DROPCHANGED (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
|
||||
#define FF_API_AVFFT (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
#define FF_API_FF_PROFILE_LEVEL (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
|
||||
// reminder to remove CrystalHD decoders on next major bump
|
||||
#define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61)
|
||||
#define FF_API_AVCODEC_CLOSE (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
#define FF_API_BUFFER_MIN_SIZE (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
#define FF_API_VDPAU_ALLOC_GET_SET (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
#define FF_API_QUALITY_FACTOR (LIBAVCODEC_VERSION_MAJOR < 62)
|
||||
|
||||
#endif /* AVCODEC_VERSION_MAJOR_H */
|
||||
|
|
|
@ -440,8 +440,8 @@ static void add_level(VLC_MULTI_ELEM *table, const int is16bit,
|
|||
code = curcode + (buf[t].code >> curlen);
|
||||
newlimit = curlimit - l;
|
||||
l += curlen;
|
||||
if (is16bit) AV_WN16(info.val+2*curlevel, sym);
|
||||
else info.val[curlevel] = sym&0xFF;
|
||||
if (is16bit) info.val16[curlevel] = sym;
|
||||
else info.val8[curlevel] = sym&0xFF;
|
||||
|
||||
if (curlevel) { // let's not add single entries
|
||||
uint32_t val = code >> (32 - numbits);
|
||||
|
@ -468,7 +468,7 @@ static int vlc_multi_gen(VLC_MULTI_ELEM *table, const VLC *single,
|
|||
{
|
||||
int minbits, maxbits, max;
|
||||
unsigned count[VLC_MULTI_MAX_SYMBOLS-1] = { 0, };
|
||||
VLC_MULTI_ELEM info = { { 0, }, 0, 0, };
|
||||
VLC_MULTI_ELEM info = { 0 };
|
||||
int count0 = 0;
|
||||
|
||||
for (int j = 0; j < 1<<numbits; j++) {
|
||||
|
@ -499,7 +499,10 @@ static int vlc_multi_gen(VLC_MULTI_ELEM *table, const VLC *single,
|
|||
for (int j = 0; j < 1<<numbits; j++) {
|
||||
table[j].len = single->table[j].len;
|
||||
table[j].num = single->table[j].len > 0 ? 1 : 0;
|
||||
AV_WN16(table[j].val, single->table[j].sym);
|
||||
if (is16bit)
|
||||
table[j].val16[0] = single->table[j].sym;
|
||||
else
|
||||
table[j].val8[0] = single->table[j].sym;
|
||||
}
|
||||
|
||||
add_level(table, is16bit, nb_codes, numbits, buf,
|
||||
|
|
|
@ -40,7 +40,10 @@ typedef struct VLC {
|
|||
} VLC;
|
||||
|
||||
typedef struct VLC_MULTI_ELEM {
|
||||
uint8_t val[VLC_MULTI_MAX_SYMBOLS];
|
||||
union {
|
||||
uint8_t val8[VLC_MULTI_MAX_SYMBOLS];
|
||||
uint16_t val16[VLC_MULTI_MAX_SYMBOLS / 2];
|
||||
};
|
||||
int8_t len; // -31,32
|
||||
uint8_t num;
|
||||
} VLC_MULTI_ELEM;
|
||||
|
@ -185,47 +188,6 @@ void ff_vlc_free(VLC *vlc);
|
|||
#define VLC_INIT_OUTPUT_LE 8
|
||||
#define VLC_INIT_LE (VLC_INIT_INPUT_LE | VLC_INIT_OUTPUT_LE)
|
||||
|
||||
#define VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
|
||||
h, i, j, flags, static_size) \
|
||||
do { \
|
||||
static VLCElem table[static_size]; \
|
||||
(vlc)->table = table; \
|
||||
(vlc)->table_allocated = static_size; \
|
||||
ff_vlc_init_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \
|
||||
flags | VLC_INIT_USE_STATIC); \
|
||||
} while (0)
|
||||
|
||||
#define VLC_INIT_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \
|
||||
VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
|
||||
h, i, j, 0, static_size)
|
||||
|
||||
#define VLC_INIT_LE_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \
|
||||
VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
|
||||
h, i, j, VLC_INIT_LE, static_size)
|
||||
|
||||
#define VLC_INIT_CUSTOM_STATIC(vlc, bits, a, b, c, d, e, f, g, flags, static_size) \
|
||||
VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \
|
||||
NULL, 0, 0, flags, static_size)
|
||||
|
||||
#define VLC_INIT_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \
|
||||
VLC_INIT_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, NULL, 0, 0, static_size)
|
||||
|
||||
#define VLC_INIT_LE_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \
|
||||
VLC_INIT_LE_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, NULL, 0, 0, static_size)
|
||||
|
||||
#define VLC_INIT_STATIC_FROM_LENGTHS(vlc, bits, nb_codes, lens, len_wrap, \
|
||||
symbols, symbols_wrap, symbols_size, \
|
||||
offset, flags, static_size) \
|
||||
do { \
|
||||
static VLCElem table[static_size]; \
|
||||
(vlc)->table = table; \
|
||||
(vlc)->table_allocated = static_size; \
|
||||
ff_vlc_init_from_lengths(vlc, bits, nb_codes, lens, len_wrap, \
|
||||
symbols, symbols_wrap, symbols_size, \
|
||||
offset, flags | VLC_INIT_USE_STATIC, \
|
||||
NULL); \
|
||||
} while (0)
|
||||
|
||||
/**
|
||||
* For static VLCs, the number of bits can often be hardcoded
|
||||
* at each get_vlc2() callsite. Then using a full VLC would be uneconomical,
|
||||
|
|
|
@ -34,20 +34,6 @@ const uint8_t ff_vorbis_channel_layout_offsets[8][8] = {
|
|||
{ 0, 2, 1, 7, 5, 6, 3, 4 },
|
||||
};
|
||||
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
const uint64_t ff_vorbis_channel_layouts[9] = {
|
||||
AV_CH_LAYOUT_MONO,
|
||||
AV_CH_LAYOUT_STEREO,
|
||||
AV_CH_LAYOUT_SURROUND,
|
||||
AV_CH_LAYOUT_QUAD,
|
||||
AV_CH_LAYOUT_5POINT0_BACK,
|
||||
AV_CH_LAYOUT_5POINT1_BACK,
|
||||
AV_CH_LAYOUT_5POINT1|AV_CH_BACK_CENTER,
|
||||
AV_CH_LAYOUT_7POINT1,
|
||||
0
|
||||
};
|
||||
#endif
|
||||
|
||||
const AVChannelLayout ff_vorbis_ch_layouts[9] = {
|
||||
AV_CHANNEL_LAYOUT_MONO,
|
||||
AV_CHANNEL_LAYOUT_STEREO,
|
||||
|
|
|
@ -21,14 +21,14 @@
|
|||
|
||||
#include <stdint.h>
|
||||
|
||||
#include "libavutil/attributes_internal.h"
|
||||
#include "libavutil/channel_layout.h"
|
||||
|
||||
FF_VISIBILITY_PUSH_HIDDEN
|
||||
extern const float ff_vorbis_floor1_inverse_db_table[256];
|
||||
extern const float * const ff_vorbis_vwin[8];
|
||||
extern const uint8_t ff_vorbis_channel_layout_offsets[8][8];
|
||||
#if FF_API_OLD_CHANNEL_LAYOUT
|
||||
extern const uint64_t ff_vorbis_channel_layouts[9];
|
||||
#endif
|
||||
extern const AVChannelLayout ff_vorbis_ch_layouts[9];
|
||||
FF_VISIBILITY_POP_HIDDEN
|
||||
|
||||
#endif /* AVCODEC_VORBIS_DATA_H */
|
||||
|
|
|
@ -28,9 +28,9 @@
|
|||
#include "config_components.h"
|
||||
|
||||
#include "libavutil/log.h"
|
||||
#include "libavutil/mem.h"
|
||||
|
||||
#include "get_bits.h"
|
||||
#include "parser.h"
|
||||
#include "xiph.h"
|
||||
#include "vorbis_parser_internal.h"
|
||||
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
|
||||
#include "config_components.h"
|
||||
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/mem_internal.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
|
@ -2665,7 +2666,11 @@ int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame,
|
|||
if (ret < 0)
|
||||
goto err;
|
||||
|
||||
if (s->actually_webp) {
|
||||
if (!is_vp7 && s->actually_webp) {
|
||||
// VP8 in WebP is supposed to be intra-only. Enforce this here
|
||||
// to ensure that output is reproducible with frame-threading.
|
||||
if (!s->keyframe)
|
||||
return AVERROR_INVALIDDATA;
|
||||
// avctx->pix_fmt already set in caller.
|
||||
} else if (!is_vp7 && s->pix_fmt == AV_PIX_FMT_NONE) {
|
||||
s->pix_fmt = get_pixel_format(s);
|
||||
|
@ -2750,7 +2755,7 @@ int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame,
|
|||
|
||||
s->next_framep[VP8_FRAME_CURRENT] = curframe;
|
||||
|
||||
if (ffcodec(avctx->codec)->update_thread_context)
|
||||
if (!is_vp7 && !s->actually_webp)
|
||||
ff_thread_finish_setup(avctx);
|
||||
|
||||
if (avctx->hwaccel) {
|
||||
|
@ -2883,7 +2888,6 @@ int vp78_decode_init(AVCodecContext *avctx, int is_vp7)
|
|||
int ret;
|
||||
|
||||
s->avctx = avctx;
|
||||
s->vp7 = avctx->codec->id == AV_CODEC_ID_VP7;
|
||||
s->pix_fmt = AV_PIX_FMT_NONE;
|
||||
avctx->pix_fmt = AV_PIX_FMT_YUV420P;
|
||||
|
||||
|
|
|
@ -331,8 +331,6 @@ typedef struct VP8Context {
|
|||
int (*decode_mb_row_no_filter)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr);
|
||||
void (*filter_mb_row)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr);
|
||||
|
||||
int vp7;
|
||||
|
||||
/**
|
||||
* Interframe DC prediction (VP7)
|
||||
* [0] VP8_FRAME_PREVIOUS
|
||||
|
|
|
@ -742,6 +742,8 @@ av_cold void ff_vp8dsp_init(VP8DSPContext *dsp)
|
|||
ff_vp8dsp_init_aarch64(dsp);
|
||||
#elif ARCH_ARM
|
||||
ff_vp8dsp_init_arm(dsp);
|
||||
#elif ARCH_RISCV
|
||||
ff_vp8dsp_init_riscv(dsp);
|
||||
#elif ARCH_X86
|
||||
ff_vp8dsp_init_x86(dsp);
|
||||
#elif ARCH_MIPS
|
||||
|
|
|
@ -92,6 +92,7 @@ void ff_vp78dsp_init_x86(VP8DSPContext *c);
|
|||
void ff_vp8dsp_init(VP8DSPContext *c);
|
||||
void ff_vp8dsp_init_aarch64(VP8DSPContext *c);
|
||||
void ff_vp8dsp_init_arm(VP8DSPContext *c);
|
||||
void ff_vp8dsp_init_riscv(VP8DSPContext *c);
|
||||
void ff_vp8dsp_init_x86(VP8DSPContext *c);
|
||||
void ff_vp8dsp_init_mips(VP8DSPContext *c);
|
||||
void ff_vp8dsp_init_loongarch(VP8DSPContext *c);
|
||||
|
|
|
@ -42,6 +42,7 @@
|
|||
#include "vp9dec.h"
|
||||
#include "vpx_rac.h"
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/mem.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/video_enc_params.h"
|
||||
|
||||
|
|
|
@ -86,8 +86,6 @@ cglobal pred16x16_horizontal_8, 2,3
|
|||
punpcklbw m1, m1
|
||||
SPLATW m0, m0, 3
|
||||
SPLATW m1, m1, 3
|
||||
mova [r0+r1*0+8], m0
|
||||
mova [r0+r1*1+8], m1
|
||||
%endif
|
||||
|
||||
mova [r0+r1*0], m0
|
||||
|
@ -98,7 +96,7 @@ cglobal pred16x16_horizontal_8, 2,3
|
|||
RET
|
||||
%endmacro
|
||||
|
||||
INIT_MMX mmxext
|
||||
INIT_XMM sse2
|
||||
PRED16x16_H
|
||||
INIT_XMM ssse3
|
||||
PRED16x16_H
|
||||
|
@ -568,17 +566,17 @@ H264_PRED8x8_PLANE
|
|||
; void ff_pred8x8_vertical_8(uint8_t *src, ptrdiff_t stride)
|
||||
;-----------------------------------------------------------------------------
|
||||
|
||||
INIT_MMX mmx
|
||||
INIT_XMM sse2
|
||||
cglobal pred8x8_vertical_8, 2,2
|
||||
sub r0, r1
|
||||
movq mm0, [r0]
|
||||
movq m0, [r0]
|
||||
%rep 3
|
||||
movq [r0+r1*1], mm0
|
||||
movq [r0+r1*2], mm0
|
||||
movq [r0+r1*1], m0
|
||||
movq [r0+r1*2], m0
|
||||
lea r0, [r0+r1*2]
|
||||
%endrep
|
||||
movq [r0+r1*1], mm0
|
||||
movq [r0+r1*2], mm0
|
||||
movq [r0+r1*1], m0
|
||||
movq [r0+r1*2], m0
|
||||
RET
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
|
@ -1313,10 +1311,7 @@ PRED8x8L_DOWN_RIGHT
|
|||
;-----------------------------------------------------------------------------
|
||||
|
||||
%macro PRED8x8L_VERTICAL_RIGHT 0
|
||||
cglobal pred8x8l_vertical_right_8, 4,5,7
|
||||
; manually spill XMM registers for Win64 because
|
||||
; the code here is initialized with INIT_MMX
|
||||
WIN64_SPILL_XMM 7
|
||||
cglobal pred8x8l_vertical_right_8, 4,5,6
|
||||
sub r0, r3
|
||||
lea r4, [r0+r3*2]
|
||||
movq mm0, [r0+r3*1-8]
|
||||
|
@ -1386,7 +1381,6 @@ cglobal pred8x8l_vertical_right_8, 4,5,7
|
|||
movq2dq xmm4, mm6
|
||||
pslldq xmm4, 8
|
||||
por xmm0, xmm4
|
||||
movdqa xmm6, [pw_ff00]
|
||||
movdqa xmm1, xmm0
|
||||
lea r2, [r1+r3*2]
|
||||
movdqa xmm2, xmm0
|
||||
|
@ -1396,15 +1390,16 @@ cglobal pred8x8l_vertical_right_8, 4,5,7
|
|||
pavgb xmm2, xmm0
|
||||
INIT_XMM cpuname
|
||||
PRED4x4_LOWPASS xmm4, xmm3, xmm1, xmm0, xmm5
|
||||
pandn xmm6, xmm4
|
||||
movdqa xmm0, [pw_ff00]
|
||||
pandn xmm0, xmm4
|
||||
movdqa xmm5, xmm4
|
||||
psrlw xmm4, 8
|
||||
packuswb xmm6, xmm4
|
||||
movhlps xmm4, xmm6
|
||||
packuswb xmm0, xmm4
|
||||
movhlps xmm4, xmm0
|
||||
movhps [r0+r3*2], xmm5
|
||||
movhps [r0+r3*1], xmm2
|
||||
psrldq xmm5, 4
|
||||
movss xmm5, xmm6
|
||||
movss xmm5, xmm0
|
||||
psrldq xmm2, 4
|
||||
movss xmm2, xmm4
|
||||
lea r0, [r2+r3*2]
|
||||
|
|
|
@ -100,7 +100,7 @@ PRED16x16(horizontal, 10, sse2)
|
|||
|
||||
/* 8-bit versions */
|
||||
PRED16x16(vertical, 8, sse)
|
||||
PRED16x16(horizontal, 8, mmxext)
|
||||
PRED16x16(horizontal, 8, sse2)
|
||||
PRED16x16(horizontal, 8, ssse3)
|
||||
PRED16x16(dc, 8, sse2)
|
||||
PRED16x16(dc, 8, ssse3)
|
||||
|
@ -116,7 +116,7 @@ PRED16x16(tm_vp8, 8, avx2)
|
|||
PRED8x8(top_dc, 8, mmxext)
|
||||
PRED8x8(dc_rv40, 8, mmxext)
|
||||
PRED8x8(dc, 8, mmxext)
|
||||
PRED8x8(vertical, 8, mmx)
|
||||
PRED8x8(vertical, 8, sse2)
|
||||
PRED8x8(horizontal, 8, mmxext)
|
||||
PRED8x8(horizontal, 8, ssse3)
|
||||
PRED8x8(plane, 8, sse2)
|
||||
|
@ -163,14 +163,7 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int codec_id,
|
|||
int cpu_flags = av_get_cpu_flags();
|
||||
|
||||
if (bit_depth == 8) {
|
||||
if (EXTERNAL_MMX(cpu_flags)) {
|
||||
if (chroma_format_idc <= 1) {
|
||||
h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmx;
|
||||
}
|
||||
}
|
||||
|
||||
if (EXTERNAL_MMXEXT(cpu_flags)) {
|
||||
h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmxext;
|
||||
if (chroma_format_idc <= 1)
|
||||
h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmxext;
|
||||
h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmxext;
|
||||
|
@ -210,12 +203,15 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int codec_id,
|
|||
}
|
||||
|
||||
if (EXTERNAL_SSE2(cpu_flags)) {
|
||||
h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_sse2;
|
||||
h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_sse2;
|
||||
h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_sse2;
|
||||
h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_sse2;
|
||||
h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_sse2;
|
||||
h->pred8x8l [VERT_LEFT_PRED ] = ff_pred8x8l_vertical_left_8_sse2;
|
||||
h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_sse2;
|
||||
if (chroma_format_idc <= 1)
|
||||
h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_sse2;
|
||||
if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) {
|
||||
h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_sse2;
|
||||
h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_sse2;
|
||||
|
|
|
@ -37,6 +37,8 @@ SOURCES += [
|
|||
'vp9mc_16bpp.asm',
|
||||
]
|
||||
|
||||
LOCAL_INCLUDES += [ "../" ]
|
||||
|
||||
if CONFIG['TARGET_CPU'] == 'x86':
|
||||
SOURCES += [ 'simple_idct.asm' ]
|
||||
|
||||
|
|
|
@ -783,68 +783,33 @@ SECTION .text
|
|||
%macro PUT_PIXELS_CLAMPED_HALF 1
|
||||
mova m0, [blockq+mmsize*0+%1]
|
||||
mova m1, [blockq+mmsize*2+%1]
|
||||
%if mmsize == 8
|
||||
mova m2, [blockq+mmsize*4+%1]
|
||||
mova m3, [blockq+mmsize*6+%1]
|
||||
%endif
|
||||
packuswb m0, [blockq+mmsize*1+%1]
|
||||
packuswb m1, [blockq+mmsize*3+%1]
|
||||
%if mmsize == 8
|
||||
packuswb m2, [blockq+mmsize*5+%1]
|
||||
packuswb m3, [blockq+mmsize*7+%1]
|
||||
movq [pixelsq], m0
|
||||
movq [lsizeq+pixelsq], m1
|
||||
movq [2*lsizeq+pixelsq], m2
|
||||
movq [lsize3q+pixelsq], m3
|
||||
%else
|
||||
movq [pixelsq], m0
|
||||
movhps [lsizeq+pixelsq], m0
|
||||
movq [2*lsizeq+pixelsq], m1
|
||||
movhps [lsize3q+pixelsq], m1
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
%macro ADD_PIXELS_CLAMPED 1
|
||||
mova m0, [blockq+mmsize*0+%1]
|
||||
mova m1, [blockq+mmsize*1+%1]
|
||||
%if mmsize == 8
|
||||
mova m5, [blockq+mmsize*2+%1]
|
||||
mova m6, [blockq+mmsize*3+%1]
|
||||
%endif
|
||||
movq m2, [pixelsq]
|
||||
movq m3, [pixelsq+lsizeq]
|
||||
%if mmsize == 8
|
||||
mova m7, m2
|
||||
punpcklbw m2, m4
|
||||
punpckhbw m7, m4
|
||||
paddsw m0, m2
|
||||
paddsw m1, m7
|
||||
mova m7, m3
|
||||
punpcklbw m3, m4
|
||||
punpckhbw m7, m4
|
||||
paddsw m5, m3
|
||||
paddsw m6, m7
|
||||
%else
|
||||
punpcklbw m2, m4
|
||||
punpcklbw m3, m4
|
||||
paddsw m0, m2
|
||||
paddsw m1, m3
|
||||
%endif
|
||||
packuswb m0, m1
|
||||
%if mmsize == 8
|
||||
packuswb m5, m6
|
||||
movq [pixelsq], m0
|
||||
movq [pixelsq+lsizeq], m5
|
||||
%else
|
||||
movq [pixelsq], m0
|
||||
movhps [pixelsq+lsizeq], m0
|
||||
%endif
|
||||
%endmacro
|
||||
|
||||
INIT_MMX mmx
|
||||
|
||||
cglobal simple_idct, 1, 2, 8, 128, block, t0
|
||||
IDCT
|
||||
emms
|
||||
RET
|
||||
|
||||
INIT_XMM sse2
|
||||
|
|
|
@ -1,53 +0,0 @@
|
|||
/**
|
||||
* VP5 and VP6 compatible video decoder (arith decoder)
|
||||
*
|
||||
* Copyright (C) 2006 Aurelien Jacobs <aurel@gnuage.org>
|
||||
* Copyright (C) 2010 Eli Friedman
|
||||
*
|
||||
* This file is part of FFmpeg.
|
||||
*
|
||||
* FFmpeg is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* FFmpeg is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* 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_X86_VP56_ARITH_H
|
||||
#define AVCODEC_X86_VP56_ARITH_H
|
||||
|
||||
#if HAVE_INLINE_ASM && HAVE_FAST_CMOV && HAVE_6REGS
|
||||
#include "libavutil/attributes.h"
|
||||
|
||||
#define vp56_rac_get_prob vp56_rac_get_prob
|
||||
static av_always_inline int vp56_rac_get_prob(VP56RangeCoder *c, uint8_t prob)
|
||||
{
|
||||
unsigned int code_word = vp56_rac_renorm(c);
|
||||
unsigned int low = 1 + (((c->high - 1) * prob) >> 8);
|
||||
unsigned int low_shift = low << 16;
|
||||
int bit = 0;
|
||||
c->code_word = code_word;
|
||||
|
||||
__asm__(
|
||||
"subl %4, %1 \n\t"
|
||||
"subl %3, %2 \n\t"
|
||||
"setae %b0 \n\t"
|
||||
"cmovb %4, %1 \n\t"
|
||||
"cmovb %5, %2 \n\t"
|
||||
: "+q"(bit), "+&r"(c->high), "+&r"(c->code_word)
|
||||
: "r"(low_shift), "r"(low), "r"(code_word)
|
||||
);
|
||||
|
||||
return bit;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* AVCODEC_X86_VP56_ARITH_H */
|
|
@ -114,7 +114,7 @@ bilinear_filter_vb_m: times 8 db 7, 1
|
|||
times 8 db 2, 6
|
||||
times 8 db 1, 7
|
||||
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
%define fourtap_filter_hw picregq
|
||||
%define sixtap_filter_hw picregq
|
||||
%define fourtap_filter_hb picregq
|
||||
|
@ -166,7 +166,7 @@ cglobal put_vp8_epel%1_h6, 6, 6 + npicregs, 8, dst, dststride, src, srcstride, h
|
|||
lea mxd, [mxq*3]
|
||||
mova m3, [filter_h6_shuf2]
|
||||
mova m4, [filter_h6_shuf3]
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [sixtap_filter_hb_m]
|
||||
%endif
|
||||
mova m5, [sixtap_filter_hb+mxq*8-48] ; set up 6tap filter in bytes
|
||||
|
@ -207,7 +207,7 @@ cglobal put_vp8_epel%1_h4, 6, 6 + npicregs, 7, dst, dststride, src, srcstride, h
|
|||
mova m2, [pw_256]
|
||||
mova m3, [filter_h2_shuf]
|
||||
mova m4, [filter_h4_shuf]
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [fourtap_filter_hb_m]
|
||||
%endif
|
||||
mova m5, [fourtap_filter_hb+mxq-16] ; set up 4tap filter in bytes
|
||||
|
@ -234,7 +234,7 @@ cglobal put_vp8_epel%1_h4, 6, 6 + npicregs, 7, dst, dststride, src, srcstride, h
|
|||
|
||||
cglobal put_vp8_epel%1_v4, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my
|
||||
shl myd, 4
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [fourtap_filter_hb_m]
|
||||
%endif
|
||||
mova m5, [fourtap_filter_hb+myq-16]
|
||||
|
@ -272,7 +272,7 @@ cglobal put_vp8_epel%1_v4, 7, 7, 8, dst, dststride, src, srcstride, height, picr
|
|||
|
||||
cglobal put_vp8_epel%1_v6, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my
|
||||
lea myd, [myq*3]
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [sixtap_filter_hb_m]
|
||||
%endif
|
||||
lea myq, [sixtap_filter_hb+myq*8]
|
||||
|
@ -326,7 +326,7 @@ FILTER_SSSE3 8
|
|||
INIT_MMX mmxext
|
||||
cglobal put_vp8_epel4_h4, 6, 6 + npicregs, 0, dst, dststride, src, srcstride, height, mx, picreg
|
||||
shl mxd, 4
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [fourtap_filter_hw_m]
|
||||
%endif
|
||||
movq mm4, [fourtap_filter_hw+mxq-16] ; set up 4tap filter in words
|
||||
|
@ -374,7 +374,7 @@ cglobal put_vp8_epel4_h4, 6, 6 + npicregs, 0, dst, dststride, src, srcstride, he
|
|||
INIT_MMX mmxext
|
||||
cglobal put_vp8_epel4_h6, 6, 6 + npicregs, 0, dst, dststride, src, srcstride, height, mx, picreg
|
||||
lea mxd, [mxq*3]
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [sixtap_filter_hw_m]
|
||||
%endif
|
||||
movq mm4, [sixtap_filter_hw+mxq*8-48] ; set up 4tap filter in words
|
||||
|
@ -431,7 +431,7 @@ cglobal put_vp8_epel4_h6, 6, 6 + npicregs, 0, dst, dststride, src, srcstride, he
|
|||
INIT_XMM sse2
|
||||
cglobal put_vp8_epel8_h4, 6, 6 + npicregs, 10, dst, dststride, src, srcstride, height, mx, picreg
|
||||
shl mxd, 5
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [fourtap_filter_v_m]
|
||||
%endif
|
||||
lea mxq, [fourtap_filter_v+mxq-32]
|
||||
|
@ -480,7 +480,7 @@ INIT_XMM sse2
|
|||
cglobal put_vp8_epel8_h6, 6, 6 + npicregs, 14, dst, dststride, src, srcstride, height, mx, picreg
|
||||
lea mxd, [mxq*3]
|
||||
shl mxd, 4
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [sixtap_filter_v_m]
|
||||
%endif
|
||||
lea mxq, [sixtap_filter_v+mxq-96]
|
||||
|
@ -543,7 +543,7 @@ cglobal put_vp8_epel8_h6, 6, 6 + npicregs, 14, dst, dststride, src, srcstride, h
|
|||
; 4x4 block, V-only 4-tap filter
|
||||
cglobal put_vp8_epel%1_v4, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my
|
||||
shl myd, 5
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [fourtap_filter_v_m]
|
||||
%endif
|
||||
lea myq, [fourtap_filter_v+myq-32]
|
||||
|
@ -597,7 +597,7 @@ cglobal put_vp8_epel%1_v4, 7, 7, 8, dst, dststride, src, srcstride, height, picr
|
|||
cglobal put_vp8_epel%1_v6, 7, 7, 8, dst, dststride, src, srcstride, height, picreg, my
|
||||
shl myd, 4
|
||||
lea myq, [myq*3]
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [sixtap_filter_v_m]
|
||||
%endif
|
||||
lea myq, [sixtap_filter_v+myq-96]
|
||||
|
@ -667,7 +667,7 @@ FILTER_V 8
|
|||
%if cpuflag(ssse3)
|
||||
cglobal put_vp8_bilinear%1_v, 7, 7, 5, dst, dststride, src, srcstride, height, picreg, my
|
||||
shl myd, 4
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [bilinear_filter_vb_m]
|
||||
%endif
|
||||
pxor m4, m4
|
||||
|
@ -697,7 +697,7 @@ cglobal put_vp8_bilinear%1_v, 7, 7, 5, dst, dststride, src, srcstride, height, p
|
|||
%else ; cpuflag(ssse3)
|
||||
cglobal put_vp8_bilinear%1_v, 7, 7, 7, dst, dststride, src, srcstride, height, picreg, my
|
||||
shl myd, 4
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [bilinear_filter_vw_m]
|
||||
%endif
|
||||
pxor m6, m6
|
||||
|
@ -743,7 +743,7 @@ cglobal put_vp8_bilinear%1_v, 7, 7, 7, dst, dststride, src, srcstride, height, p
|
|||
%if cpuflag(ssse3)
|
||||
cglobal put_vp8_bilinear%1_h, 6, 6 + npicregs, 5, dst, dststride, src, srcstride, height, mx, picreg
|
||||
shl mxd, 4
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [bilinear_filter_vb_m]
|
||||
%endif
|
||||
pxor m4, m4
|
||||
|
@ -773,7 +773,7 @@ cglobal put_vp8_bilinear%1_h, 6, 6 + npicregs, 5, dst, dststride, src, srcstride
|
|||
%else ; cpuflag(ssse3)
|
||||
cglobal put_vp8_bilinear%1_h, 6, 6 + npicregs, 7, dst, dststride, src, srcstride, height, mx, picreg
|
||||
shl mxd, 4
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea picregq, [bilinear_filter_vw_m]
|
||||
%endif
|
||||
pxor m6, m6
|
||||
|
|
|
@ -330,7 +330,9 @@ IDCT_4x4_FN ssse3
|
|||
INIT_MMX %5
|
||||
cglobal vp9_%1_%3_4x4_add, 3, 3, 0, dst, stride, block, eob
|
||||
%if WIN64 && notcpuflag(ssse3)
|
||||
INIT_XMM cpuname
|
||||
WIN64_SPILL_XMM 8
|
||||
INIT_MMX cpuname
|
||||
%endif
|
||||
movdqa xmm5, [pd_8192]
|
||||
mova m0, [blockq+ 0]
|
||||
|
|
|
@ -303,7 +303,9 @@ IDCT4_10_FN
|
|||
%macro IADST4_FN 4
|
||||
cglobal vp9_%1_%3_4x4_add_10, 3, 3, 0, dst, stride, block, eob
|
||||
%if WIN64 && notcpuflag(ssse3)
|
||||
INIT_XMM cpuname
|
||||
WIN64_SPILL_XMM 8
|
||||
INIT_MMX cpuname
|
||||
%endif
|
||||
movdqa xmm5, [pd_8192]
|
||||
mova m0, [blockq+0*16+0]
|
||||
|
@ -672,7 +674,7 @@ cglobal vp9_idct_idct_8x8_add_10, 4, 6 + ARCH_X86_64, 14, \
|
|||
mov dstbakq, dstq
|
||||
movsxd cntq, cntd
|
||||
%endif
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea ptrq, [default_8x8]
|
||||
movzx cntd, byte [ptrq+cntq-1]
|
||||
%else
|
||||
|
@ -921,7 +923,7 @@ cglobal vp9_%1_%3_8x8_add_10, 4, 6 + ARCH_X86_64, 16, \
|
|||
mov dstbakq, dstq
|
||||
movsxd cntq, cntd
|
||||
%endif
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea ptrq, [%5_8x8]
|
||||
movzx cntd, byte [ptrq+cntq-1]
|
||||
%else
|
||||
|
@ -1128,7 +1130,7 @@ cglobal vp9_idct_idct_16x16_add_10, 4, 6 + ARCH_X86_64, 16, \
|
|||
mov dstbakq, dstq
|
||||
movsxd cntq, cntd
|
||||
%endif
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea ptrq, [default_16x16]
|
||||
movzx cntd, byte [ptrq+cntq-1]
|
||||
%else
|
||||
|
@ -1445,7 +1447,7 @@ cglobal vp9_%1_%4_16x16_add_10, 4, 6 + ARCH_X86_64, 16, \
|
|||
mov dstbakq, dstq
|
||||
movsxd cntq, cntd
|
||||
%endif
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea ptrq, [%7_16x16]
|
||||
movzx cntd, byte [ptrq+cntq-1]
|
||||
%else
|
||||
|
@ -1958,7 +1960,7 @@ cglobal vp9_idct_idct_32x32_add_10, 4, 6 + ARCH_X86_64, 16, \
|
|||
mov dstbakq, dstq
|
||||
movsxd cntq, cntd
|
||||
%endif
|
||||
%ifdef PIC
|
||||
%if PIC
|
||||
lea ptrq, [default_32x32]
|
||||
movzx cntd, byte [ptrq+cntq-1]
|
||||
%else
|
||||
|
|
|
@ -24,34 +24,20 @@
|
|||
#include <stdint.h>
|
||||
#include <sys/auxv.h>
|
||||
|
||||
#define get_cpu_feature_reg(reg, val) \
|
||||
__asm__("mrs %0, " #reg : "=r" (val))
|
||||
#define HWCAP_AARCH64_ASIMDDP (1 << 20)
|
||||
#define HWCAP2_AARCH64_I8MM (1 << 13)
|
||||
|
||||
static int detect_flags(void)
|
||||
{
|
||||
int flags = 0;
|
||||
|
||||
#if defined(HWCAP_CPUID) && HAVE_INLINE_ASM
|
||||
unsigned long hwcap = getauxval(AT_HWCAP);
|
||||
// We can check for DOTPROD and I8MM using HWCAP_ASIMDDP and
|
||||
// HWCAP2_I8MM too, avoiding to read the CPUID registers (which triggers
|
||||
// a trap, handled by the kernel). However the HWCAP_* defines for these
|
||||
// extensions are added much later than HWCAP_CPUID, so the userland
|
||||
// headers might lack support for them even if the binary later is run
|
||||
// on hardware that does support it (and where the kernel might support
|
||||
// HWCAP_CPUID).
|
||||
// See https://www.kernel.org/doc/html/latest/arm64/cpu-feature-registers.html
|
||||
if (hwcap & HWCAP_CPUID) {
|
||||
uint64_t tmp;
|
||||
unsigned long hwcap2 = getauxval(AT_HWCAP2);
|
||||
|
||||
get_cpu_feature_reg(ID_AA64ISAR0_EL1, tmp);
|
||||
if (((tmp >> 44) & 0xf) == 0x1)
|
||||
flags |= AV_CPU_FLAG_DOTPROD;
|
||||
get_cpu_feature_reg(ID_AA64ISAR1_EL1, tmp);
|
||||
if (((tmp >> 52) & 0xf) == 0x1)
|
||||
flags |= AV_CPU_FLAG_I8MM;
|
||||
}
|
||||
#endif
|
||||
if (hwcap & HWCAP_AARCH64_ASIMDDP)
|
||||
flags |= AV_CPU_FLAG_DOTPROD;
|
||||
if (hwcap2 & HWCAP2_AARCH64_I8MM)
|
||||
flags |= AV_CPU_FLAG_I8MM;
|
||||
|
||||
return flags;
|
||||
}
|
||||
|
|
|
@ -32,7 +32,7 @@ void ff_vector_fmul_window_vfp(float *dst, const float *src0,
|
|||
void ff_vector_fmul_reverse_vfp(float *dst, const float *src0,
|
||||
const float *src1, int len);
|
||||
|
||||
void ff_butterflies_float_vfp(float *av_restrict v1, float *av_restrict v2, int len);
|
||||
void ff_butterflies_float_vfp(float *restrict v1, float *restrict v2, int len);
|
||||
|
||||
av_cold void ff_float_dsp_init_vfp(AVFloatDSPContext *fdsp, int cpu_flags)
|
||||
{
|
||||
|
|
|
@ -345,7 +345,7 @@ int av_escape(char **dst, const char *src, const char *special_chars,
|
|||
int av_match_name(const char *name, const char *names)
|
||||
{
|
||||
const char *p;
|
||||
int len, namelen;
|
||||
size_t len, namelen;
|
||||
|
||||
if (!name || !names)
|
||||
return 0;
|
||||
|
|
|
@ -335,19 +335,6 @@ unsigned av_int_list_length_for_size(unsigned elsize,
|
|||
#define av_int_list_length(list, term) \
|
||||
av_int_list_length_for_size(sizeof(*(list)), list, term)
|
||||
|
||||
#if FF_API_AV_FOPEN_UTF8
|
||||
/**
|
||||
* Open a file using a UTF-8 filename.
|
||||
* The API of this function matches POSIX fopen(), errors are returned through
|
||||
* errno.
|
||||
* @deprecated Avoid using it, as on Windows, the FILE* allocated by this
|
||||
* function may be allocated with a different CRT than the caller
|
||||
* who uses the FILE*. No replacement provided in public API.
|
||||
*/
|
||||
attribute_deprecated
|
||||
FILE *av_fopen_utf8(const char *path, const char *mode);
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Return the fractional representation of the internal time base.
|
||||
*/
|
||||
|
|
|
@ -8,7 +8,6 @@ av_base64_decode
|
|||
av_base64_encode
|
||||
#endif
|
||||
av_bprint_append_data
|
||||
av_bprint_channel_layout
|
||||
av_bprint_chars
|
||||
av_bprint_clear
|
||||
av_bprint_escape
|
||||
|
@ -39,7 +38,6 @@ av_channel_layout_compare
|
|||
av_channel_layout_copy
|
||||
av_channel_layout_default
|
||||
av_channel_layout_describe
|
||||
av_channel_layout_extract_channel
|
||||
av_channel_layout_from_mask
|
||||
av_channel_layout_from_mask
|
||||
av_channel_layout_uninit
|
||||
|
@ -52,9 +50,7 @@ av_color_space_name
|
|||
av_color_transfer_name
|
||||
av_compare_mod
|
||||
av_compare_ts
|
||||
#ifndef MOZ_FFVPX_AUDIOONLY
|
||||
av_content_light_metadata_create_side_data
|
||||
#endif
|
||||
av_cpu_count
|
||||
av_crc
|
||||
av_crc_get_table
|
||||
|
@ -88,26 +84,13 @@ av_expr_parse_and_eval
|
|||
av_fast_malloc
|
||||
av_fast_mallocz
|
||||
av_fast_realloc
|
||||
av_fifo_alloc
|
||||
av_fifo_alloc2
|
||||
av_fifo_alloc_array
|
||||
av_fifo_can_read
|
||||
av_fifo_can_write
|
||||
av_fifo_drain
|
||||
av_fifo_drain2
|
||||
av_fifo_free
|
||||
av_fifo_freep
|
||||
av_fifo_freep2
|
||||
av_fifo_generic_peek
|
||||
av_fifo_generic_read
|
||||
av_fifo_generic_write
|
||||
av_fifo_grow
|
||||
av_fifo_peek
|
||||
av_fifo_realloc2
|
||||
av_fifo_read
|
||||
av_fifo_reset
|
||||
av_fifo_size
|
||||
av_fifo_space
|
||||
av_fifo_write
|
||||
av_find_best_pix_fmt_of_2
|
||||
av_find_info_tag
|
||||
|
@ -122,6 +105,8 @@ av_frame_apply_cropping
|
|||
av_frame_clone
|
||||
av_frame_copy
|
||||
av_frame_copy_props
|
||||
av_frame_side_data_free
|
||||
av_frame_side_data_get_c
|
||||
av_frame_free
|
||||
av_frame_get_buffer
|
||||
av_frame_get_plane_buffer
|
||||
|
@ -142,14 +127,7 @@ av_gcd
|
|||
av_get_alt_sample_fmt
|
||||
av_get_bits_per_pixel
|
||||
av_get_bytes_per_sample
|
||||
av_get_channel_description
|
||||
av_get_channel_layout
|
||||
av_get_channel_layout_channel_index
|
||||
av_get_channel_layout_nb_channels
|
||||
av_get_channel_layout_string
|
||||
av_get_channel_name
|
||||
av_get_cpu_flags
|
||||
av_get_default_channel_layout
|
||||
av_get_known_color_name
|
||||
av_get_media_type_string
|
||||
av_get_packed_sample_fmt
|
||||
|
@ -162,7 +140,6 @@ av_get_pix_fmt_string
|
|||
av_get_planar_sample_fmt
|
||||
av_get_sample_fmt
|
||||
av_get_sample_fmt_string
|
||||
av_get_standard_channel_layout
|
||||
av_get_time_base_q
|
||||
av_get_token
|
||||
av_gettime
|
||||
|
@ -201,9 +178,7 @@ av_log_set_flags
|
|||
av_log_set_level
|
||||
av_mallocz
|
||||
av_malloc
|
||||
#ifndef MOZ_FFVPX_AUDIOONLY
|
||||
av_mastering_display_metadata_create_side_data
|
||||
#endif
|
||||
av_match_list
|
||||
av_match_name
|
||||
av_max_alloc
|
||||
|
@ -225,7 +200,6 @@ av_opt_flag_is_set
|
|||
av_opt_free
|
||||
av_opt_freep_ranges
|
||||
av_opt_get
|
||||
av_opt_get_channel_layout
|
||||
av_opt_get_dict_val
|
||||
av_opt_get_double
|
||||
av_opt_get_image_size
|
||||
|
@ -244,7 +218,6 @@ av_opt_query_ranges_default
|
|||
av_opt_serialize
|
||||
av_opt_set
|
||||
av_opt_set_bin
|
||||
av_opt_set_channel_layout
|
||||
av_opt_set_defaults
|
||||
av_opt_set_defaults2
|
||||
av_opt_set_dict
|
||||
|
|
Некоторые файлы не были показаны из-за слишком большого количества измененных файлов Показать больше
Загрузка…
Ссылка в новой задаче