From 170f4354c38ccd6d2debfa7446a73523cb7b6842 Mon Sep 17 00:00:00 2001 From: "Francesco Lodolo (:flod)" Date: Wed, 25 Oct 2017 17:00:22 +0200 Subject: [PATCH 01/69] Bug 1411616 - Remove findbook.tw searchplugin from zh-TW r=delphine MozReview-Commit-ID: 1B9Xy6GZcDM --HG-- extra : rebase_source : 91a2b73ecb9afd8a4b6fc0dcc0f20854e0daf942 --- browser/locales/search/list.json | 2 +- .../locales/searchplugins/findbook-zh-TW.xml | 18 ------------------ 2 files changed, 1 insertion(+), 19 deletions(-) delete mode 100644 browser/locales/searchplugins/findbook-zh-TW.xml diff --git a/browser/locales/search/list.json b/browser/locales/search/list.json index 02a849236323..8c59f57b8587 100644 --- a/browser/locales/search/list.json +++ b/browser/locales/search/list.json @@ -783,7 +783,7 @@ "zh-TW": { "default": { "visibleDefaultEngines": [ - "yahoo-zh-TW", "google", "ddg", "findbook-zh-TW", "wikipedia-zh-TW", "yahoo-zh-TW-HK", "yahoo-bid-zh-TW", "yahoo-answer-zh-TW" + "yahoo-zh-TW", "google", "ddg", "wikipedia-zh-TW", "yahoo-zh-TW-HK", "yahoo-bid-zh-TW", "yahoo-answer-zh-TW" ] } } diff --git a/browser/locales/searchplugins/findbook-zh-TW.xml b/browser/locales/searchplugins/findbook-zh-TW.xml deleted file mode 100644 index 17821a4455f1..000000000000 --- a/browser/locales/searchplugins/findbook-zh-TW.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - -Findbook -Findbook 書籍搜尋 -UTF-8 -data:image/x-icon;base64,AAABAAEAEBAAAAEAIABoBAAAFgAAACgAAAAQAAAAIAAAAAEAIAAAAAAAQAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAArHEA/6xxAP+scQD/rHEA/6xxAP+scQD/rHEA/6xxAP+scQD/rHEA/6xxAP+scQD/rHEA/7a2tv8AAAAArHEA/LZ3AP/LhgT/1YwF/9SMBP/UjAT/1IwE/9SMBP/UjAT/1IwE/9SMBf/UjAX/1IwF/6xxAP+2trb/ypMqDqxxAP+2eAD/y4YC/9OMBf/QgQD/9uvV////////////uXAA/9WMBP/UjAX/1IwF/9SMBf+scQD/tra2/61zAuKscQD/tngA/8uGAv/UjAX/z4EA//Xmyv///////////7pwAP/VjAT/1IwF/9SMBf/UjAX/rHEA/7a2tv+scQD/rHEA/7Z4AP/LhgT/1IwF/8+BAP/15sr///////////+6cAD/1YwE/9SMBf/UjAX/1IwF/6xxAP+2trb/rHEA/6xxAP+2eAD/y4YC/9OMBf/QgQD/9ebK////////////tGQA/9GCAP/PgAD/0YQA/9SMBf+scQD/tra2/6xxAP+scQD/tngA/8uGBP/UjAX/z4EA//Xmyv/////////////////////////////////QggD/rHEA/7a2tv+scQD/rHEA/7Z4AP/LhgL/1IwF/9CBAP/15sr///////////+5hCL/yJg5/8iYO//BjjD/04kA/6xxAP+2trb/rHEA/6xxAP+2eAD/y4YE/9SMBf/OgQD/9ebK////////////um0A/9aKAP/UiQD/1YoA/9SLA/+scQD/tra2/6xxAP+scQD/tngA/8uGBP/UjAX/0IEA//Xmyf///////////7pwAP/VjAT/1IwF/9SLA//Tiwb/rHEA/7a2tv+scQD/rHEA/7Z4AP/LhgL/1IwE/859AP/15sr///////////+1ZwD/04YA/9GEAP/RgAD/zKVa/6xxAP+2trb/rHEA/6xxAP+2eAD/y4YB/9WMBf////////////////////////////////////////////////+scQD/tra2/6xxAP+scQD/tXUA/8uDAP/SkRj/yJc5/8iXOf/Ilzn/yJc5/8iWN//Ilzn/x5c5/8iXOf/Ilzn/rHEA/7a2tv+scQD/rHEA/7B2CP+scQD/rHEA/6xxAP+scQD/rHEA/6xxAP+scQD/rHEA/6xxAP+scQD/rHEA/61xAP+2trb/rHEA/6xyAfvp+///6PD//+z2///w+///9f////v//////////////////////////////////////////////6xxAP8AAAAArncM8axxAP+scQD/rHEA/6xxAP+scQD/rHEA/6xxAP+scQD/rHEA/6xxAP+scQD/rHEA/691B/mtcwPugAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAA%3D%3D - - - - - - - -http://findbook.tw/search - From d0af3268bd3cc8a2678bbdf838496d1475f6d839 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Delphine=20Leb=C3=A9del?= Date: Wed, 25 Oct 2017 19:10:08 -0700 Subject: [PATCH 02/69] Bug 1407849 - [bs] Search engine setup for Firefox Mobile for Bosnian r=flod MozReview-Commit-ID: 6relQLQwQOI --HG-- extra : rebase_source : a1470d6f93ec8364afffe98c5308dde5246be7ef --- mobile/locales/search/list.json | 7 ++++++ mobile/locales/searchplugins/wikipedia-bs.xml | 23 +++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 mobile/locales/searchplugins/wikipedia-bs.xml diff --git a/mobile/locales/search/list.json b/mobile/locales/search/list.json index 81c43332fc03..a77ab2450e2e 100644 --- a/mobile/locales/search/list.json +++ b/mobile/locales/search/list.json @@ -100,6 +100,13 @@ ] } }, + "bs": { + "default": { + "visibleDefaultEngines": [ + "google", "yahoo", "bing", "twitter", "wikipedia-bs" + ] + } + }, "ca": { "default": { "visibleDefaultEngines": [ diff --git a/mobile/locales/searchplugins/wikipedia-bs.xml b/mobile/locales/searchplugins/wikipedia-bs.xml new file mode 100644 index 000000000000..aa31b416afca --- /dev/null +++ b/mobile/locales/searchplugins/wikipedia-bs.xml @@ -0,0 +1,23 @@ + + + +Wikipedia (bs) +UTF-8 +data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGAAAABgCAMAAADVRocKAAAA51BMVEUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD////7+/vl5eWxsbH9/f3Ly8tzc3P39/fe3t5cXFzz8/Pt7e3i4uI3NzcaGhoHBwcFBQX5+fnIyMhTU1MXFxcMDAzx8fHX19fFxcXCwsK7u7u1tbWenp6WlpZ8fHxXV1ctLS319fXn5+fV1dWsrKySkpJnZ2cgICDv7+/p6eng4ODQ0NC9vb24uLikpKSPj4+JiYmCgoJiYmJCQkI7OzsyMjIpKSkQEBCoqKigoKCdnZ14eHhubm5PT09LS0tERETk5OTb29unp6c0NDQkJCQOGD7BAAAAB3RSTlMA8si8ZBhlc+JuAAAAAw1JREFUaN7tmtluIjEQRYEhUxd6YYew7xAggRAgCQmB7Ov8//eM3Zg2nXkJvUjz4POAVEbyQXaVy0gOMaKRMAVAOBINcY5+UWD8OmKCIOaXhlDoNwVKNBShQImEwhQo4RAFjBIogRIogRIogRIoQWCCYXqaHJVaWrtl1IfpYp3GiczFqLHQ5kY9m0l0qVM8Txrs+8ZomkhSKpbOzlraolSP15o/EtxoU9gk2iZVujM7HnVe6eUhKaL4aYrWXWMXfd7+dIlScWxpbsjibQiLPm255sH5jYjKOoCEecge5LcTxqokuItZv5F2DID0iR21ALwctslfunNCurKEBRJkgBTZdIDOoVl0CU7FjgsZHpsi+gNoJGlisDlUkC+C8SQHejzOiqCLgXRTNYazw+vg8tsaHZ+DMd7ZlyR5Qix/uOAEgGOhlzy+EPLMMUmyOHVTyQ0wDBlXB2Dw1FzreCZJGfhyIyiDs/qWSEkiarNPxxaX3J1FWcCRLJXidtFW7MO5lmV3AhMMPS8HHsH4oBJmtEcHF+ROUEgD2E/AiVXO98AtSaoJmC4F1AUjXZAD97Bo0R491ApuBRNdVq/FGhz9hPaI48p9w1mI6rVpi1qQ9FmRuRe8iTPaJgfOi6NaTr20zDoYJUfOM2aOHM15EYwBOKbQwHm14wcY5FYgTzi5CHewMPZytO9aIHuj3MY53sF5s3M0S94EFV5bdiLeshQdgdGwc9T0IJC1VROHs4EHSgHY1XKflaFXQQ6y2MpIVIiSYDStgRLOvN/sDDCSImmv7cxaWVuu5z0LxJKU+Y1M9LE4GHOrsWnkXUDx3a5mRR8zRXFsisj5IeiBc0cmPkRxZMBY0BIGeRLIYmJ8smnLDmVuiL5ngWxksUd5JhVqYEzxTv4I1tiSc9Y38OSTgOZwnki0GYhe55Pg1VqjCUnORLf2SWAVb5fIeYPRJ/4JnoFa1THSATTyT3BcQ++f+8DKRwGN299Hltr/+zdWCZRACZRACZSAlEAJDifwRwPBP3uIUqBEg356EvzjmcCf//wFVbAkwfl+5CMAAAAASUVORK5CYII= + + + + + + + + + + + + + +https://bs.wikipedia.org/wiki/Posebno:Pretraga + From 24d074b126cc93f89401d930c316c9b452fe4967 Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Thu, 19 Oct 2017 17:13:09 +0200 Subject: [PATCH 03/69] Bug 1366201 - P1. Revert "Bug 1274256 - TSan: data race gfx/layers/client/TextureClient.cpp:1161 in mozilla::layers::MappedYCbCrChannelData::CopyInto." r=gerald This reverts commit f69e779a1903 FFmpeg 3.4 no longer requires this change. --HG-- extra : rebase_source : 4767a08e886e17df2144e182105a29b0475d6367 --- media/ffvpx/README_MOZILLA | 7 ----- media/ffvpx/libavcodec/pthread_frame.c | 41 ++++++++++---------------- 2 files changed, 16 insertions(+), 32 deletions(-) diff --git a/media/ffvpx/README_MOZILLA b/media/ffvpx/README_MOZILLA index 5d3a6037efe0..d7b178b65b2b 100644 --- a/media/ffvpx/README_MOZILLA +++ b/media/ffvpx/README_MOZILLA @@ -30,10 +30,3 @@ replace: s/HAVE_SYSCTL 1/HAVE_SYSCTL 0 config_win32/64.h/asm: add to configure command: --toolchain=msvc - -23 Sept 2016: libavcodec/pthread_frame.c has been patched so as to avoid -generating large numbers of warnings from TSan (Thread Sanitizer) when -decoding vp9 streams. This will likely be fixed upstream sometime soon. -When resyncing with upstream, first un-apply the patch shown at -https://bugzilla.mozilla.org/show_bug.cgi?id=1274256#c60, then resync, -then assess whether the patch is still necessary. diff --git a/media/ffvpx/libavcodec/pthread_frame.c b/media/ffvpx/libavcodec/pthread_frame.c index a10fcbfe714d..7ef5e9f6be92 100644 --- a/media/ffvpx/libavcodec/pthread_frame.c +++ b/media/ffvpx/libavcodec/pthread_frame.c @@ -43,29 +43,9 @@ #include "libavutil/opt.h" #include "libavutil/thread.h" -#if defined(MOZ_TSAN) -typedef _Atomic(int) atomic_int; -#else -typedef volatile int atomic_int; -#endif - /** * Context used by codec threads and stored in their AVCodecInternal thread_ctx. */ -typedef enum { - STATE_INPUT_READY, ///< Set when the thread is awaiting a packet. - STATE_SETTING_UP, ///< Set before the codec has called ff_thread_finish_setup(). - STATE_GET_BUFFER, /**< - * Set when the codec calls get_buffer(). - * State is returned to STATE_SETTING_UP afterwards. - */ - STATE_GET_FORMAT, /**< - * Set when the codec calls get_format(). - * State is returned to STATE_SETTING_UP afterwards. - */ - STATE_SETUP_FINISHED ///< Set after the codec has called ff_thread_finish_setup(). -} State; - typedef struct PerThreadContext { struct FrameThreadContext *parent; @@ -86,7 +66,19 @@ typedef struct PerThreadContext { int got_frame; ///< The output of got_picture_ptr from the last avcodec_decode_video() call. int result; ///< The result of the last codec decode/encode() call. - atomic_int state; + enum { + STATE_INPUT_READY, ///< Set when the thread is awaiting a packet. + STATE_SETTING_UP, ///< Set before the codec has called ff_thread_finish_setup(). + STATE_GET_BUFFER, /**< + * Set when the codec calls get_buffer(). + * State is returned to STATE_SETTING_UP afterwards. + */ + STATE_GET_FORMAT, /**< + * Set when the codec calls get_format(). + * State is returned to STATE_SETTING_UP afterwards. + */ + STATE_SETUP_FINISHED ///< Set after the codec has called ff_thread_finish_setup(). + } state; /** * Array of frames passed to ff_thread_release_buffer(). @@ -366,8 +358,7 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt) while (p->state == STATE_SETTING_UP) pthread_cond_wait(&p->progress_cond, &p->progress_mutex); - State p_state = (State)p->state; - switch (p_state) { + switch (p->state) { case STATE_GET_BUFFER: p->result = ff_get_buffer(p->avctx, p->requested_frame, p->requested_flags); break; @@ -480,7 +471,7 @@ int ff_thread_decode_frame(AVCodecContext *avctx, void ff_thread_report_progress(ThreadFrame *f, int n, int field) { PerThreadContext *p; - atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : NULL; + volatile int *progress = f->progress ? (int*)f->progress->data : NULL; if (!progress || progress[field] >= n) return; @@ -498,7 +489,7 @@ void ff_thread_report_progress(ThreadFrame *f, int n, int field) void ff_thread_await_progress(ThreadFrame *f, int n, int field) { PerThreadContext *p; - atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : NULL; + volatile int *progress = f->progress ? (int*)f->progress->data : NULL; if (!progress || progress[field] >= n) return; From 07d56f7ff54bbd88feafa38d88eae0f39a66c252 Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Tue, 24 Oct 2017 19:33:05 +0200 Subject: [PATCH 04/69] Bug 1366201 - P2. Revert "Bug 1292039: [ffmpeg] P1. Remove unused options and dictionary features." r=gerald This partially reverts commit e99d6caa3a3778c0bb1f2fa9f2b4222bba2eeafereverts FFmpeg requires specific default values in AVCodecContext to be set. It is quickly becoming too complicated to track what those should be. AVOptions automatically set all the values to their default. MozReview-Commit-ID: lDFeUvwTMg --HG-- extra : rebase_source : 04c5df11e485bcbae4fbf41d8b5ed512316b4d1b --- media/ffvpx/changes.patch | 13 - media/ffvpx/libavcodec/bsf.c | 219 +++ media/ffvpx/libavcodec/ff_options_table.h | 30 - media/ffvpx/libavcodec/options.c | 2 +- media/ffvpx/libavcodec/options_table.h | 559 ++++++ media/ffvpx/libavutil/dummy_funcs.c | 62 - media/ffvpx/libavutil/moz.build | 1 + media/ffvpx/libavutil/opt.c | 1994 +++++++++++++++++++++ 8 files changed, 2774 insertions(+), 106 deletions(-) create mode 100644 media/ffvpx/libavcodec/bsf.c delete mode 100644 media/ffvpx/libavcodec/ff_options_table.h create mode 100644 media/ffvpx/libavcodec/options_table.h create mode 100644 media/ffvpx/libavutil/opt.c diff --git a/media/ffvpx/changes.patch b/media/ffvpx/changes.patch index 9cb49afaf2e7..49a49b26b766 100644 --- a/media/ffvpx/changes.patch +++ b/media/ffvpx/changes.patch @@ -50,16 +50,3 @@ index 9fb8d0a..97ad3b9 100644 rgba_color[0] = rgba >> 24; rgba_color[1] = rgba >> 16; rgba_color[2] = rgba >> 8; -diff --git a/media/ffvpx/libavcodec/options.c b/media/ffvpx/libavcodec/options.c -index d8e3dbf..f25df2a 100644 ---- a/media/ffvpx/libavcodec/options.c -+++ b/media/ffvpx/libavcodec/options.c -@@ -34,7 +34,7 @@ - #include - - FF_DISABLE_DEPRECATION_WARNINGS --#include "options_table.h" -+#include "ff_options_table.h" - FF_ENABLE_DEPRECATION_WARNINGS - - static const char* context_to_name(void* ptr) { diff --git a/media/ffvpx/libavcodec/bsf.c b/media/ffvpx/libavcodec/bsf.c new file mode 100644 index 000000000000..88b7f29fe51c --- /dev/null +++ b/media/ffvpx/libavcodec/bsf.c @@ -0,0 +1,219 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include "libavutil/log.h" +#include "libavutil/mem.h" +#include "libavutil/opt.h" + +#include "avcodec.h" +#include "bsf.h" + +struct AVBSFInternal { + AVPacket *buffer_pkt; + int eof; +}; + +void av_bsf_free(AVBSFContext **pctx) +{ + AVBSFContext *ctx; + + if (!pctx || !*pctx) + return; + ctx = *pctx; + + if (ctx->filter->close) + ctx->filter->close(ctx); + if (ctx->filter->priv_class && ctx->priv_data) + av_opt_free(ctx->priv_data); + + av_opt_free(ctx); + + av_packet_free(&ctx->internal->buffer_pkt); + av_freep(&ctx->internal); + av_freep(&ctx->priv_data); + + avcodec_parameters_free(&ctx->par_in); + avcodec_parameters_free(&ctx->par_out); + + av_freep(pctx); +} + +static void *bsf_child_next(void *obj, void *prev) +{ + AVBSFContext *ctx = obj; + if (!prev && ctx->filter->priv_class) + return ctx->priv_data; + return NULL; +} + +static const AVClass bsf_class = { + .class_name = "AVBSFContext", + .item_name = av_default_item_name, + .version = LIBAVUTIL_VERSION_INT, + .child_next = bsf_child_next, + .child_class_next = ff_bsf_child_class_next, +}; + +const AVClass *av_bsf_get_class(void) +{ + return &bsf_class; +} + +int av_bsf_alloc(const AVBitStreamFilter *filter, AVBSFContext **pctx) +{ + AVBSFContext *ctx; + int ret; + + ctx = av_mallocz(sizeof(*ctx)); + if (!ctx) + return AVERROR(ENOMEM); + + ctx->av_class = &bsf_class; + ctx->filter = filter; + + ctx->par_in = avcodec_parameters_alloc(); + ctx->par_out = avcodec_parameters_alloc(); + if (!ctx->par_in || !ctx->par_out) { + ret = AVERROR(ENOMEM); + goto fail; + } + + ctx->internal = av_mallocz(sizeof(*ctx->internal)); + if (!ctx->internal) { + ret = AVERROR(ENOMEM); + goto fail; + } + + ctx->internal->buffer_pkt = av_packet_alloc(); + if (!ctx->internal->buffer_pkt) { + ret = AVERROR(ENOMEM); + goto fail; + } + + av_opt_set_defaults(ctx); + + /* allocate priv data and init private options */ + if (filter->priv_data_size) { + ctx->priv_data = av_mallocz(filter->priv_data_size); + if (!ctx->priv_data) { + ret = AVERROR(ENOMEM); + goto fail; + } + if (filter->priv_class) { + *(const AVClass **)ctx->priv_data = filter->priv_class; + av_opt_set_defaults(ctx->priv_data); + } + } + + *pctx = ctx; + return 0; +fail: + av_bsf_free(&ctx); + return ret; +} + +int av_bsf_init(AVBSFContext *ctx) +{ + int ret, i; + + /* check that the codec is supported */ + if (ctx->filter->codec_ids) { + for (i = 0; ctx->filter->codec_ids[i] != AV_CODEC_ID_NONE; i++) + if (ctx->par_in->codec_id == ctx->filter->codec_ids[i]) + break; + if (ctx->filter->codec_ids[i] == AV_CODEC_ID_NONE) { + const AVCodecDescriptor *desc = avcodec_descriptor_get(ctx->par_in->codec_id); + av_log(ctx, AV_LOG_ERROR, "Codec '%s' (%d) is not supported by the " + "bitstream filter '%s'. Supported codecs are: ", + desc ? desc->name : "unknown", ctx->par_in->codec_id, ctx->filter->name); + for (i = 0; ctx->filter->codec_ids[i] != AV_CODEC_ID_NONE; i++) { + desc = avcodec_descriptor_get(ctx->filter->codec_ids[i]); + av_log(ctx, AV_LOG_ERROR, "%s (%d) ", + desc ? desc->name : "unknown", ctx->filter->codec_ids[i]); + } + av_log(ctx, AV_LOG_ERROR, "\n"); + return AVERROR(EINVAL); + } + } + + /* initialize output parameters to be the same as input + * init below might overwrite that */ + ret = avcodec_parameters_copy(ctx->par_out, ctx->par_in); + if (ret < 0) + return ret; + + ctx->time_base_out = ctx->time_base_in; + + if (ctx->filter->init) { + ret = ctx->filter->init(ctx); + if (ret < 0) + return ret; + } + + return 0; +} + +int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt) +{ + if (!pkt || !pkt->data) { + ctx->internal->eof = 1; + return 0; + } + + if (ctx->internal->eof) { + av_log(ctx, AV_LOG_ERROR, "A non-NULL packet sent after an EOF.\n"); + return AVERROR(EINVAL); + } + + if (ctx->internal->buffer_pkt->data || + ctx->internal->buffer_pkt->side_data_elems) + return AVERROR(EAGAIN); + + av_packet_move_ref(ctx->internal->buffer_pkt, pkt); + + return 0; +} + +int av_bsf_receive_packet(AVBSFContext *ctx, AVPacket *pkt) +{ + return ctx->filter->filter(ctx, pkt); +} + +int ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt) +{ + AVBSFInternal *in = ctx->internal; + AVPacket *tmp_pkt; + + if (in->eof) + return AVERROR_EOF; + + if (!ctx->internal->buffer_pkt->data && + !ctx->internal->buffer_pkt->side_data_elems) + return AVERROR(EAGAIN); + + tmp_pkt = av_packet_alloc(); + if (!tmp_pkt) + return AVERROR(ENOMEM); + + *pkt = ctx->internal->buffer_pkt; + ctx->internal->buffer_pkt = tmp_pkt; + + return 0; +} diff --git a/media/ffvpx/libavcodec/ff_options_table.h b/media/ffvpx/libavcodec/ff_options_table.h deleted file mode 100644 index ee01275d3513..000000000000 --- a/media/ffvpx/libavcodec/ff_options_table.h +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright (c) 2001 Fabrice Bellard - * Copyright (c) 2002-2004 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVCODEC_OPTIONS_TABLE_H -#define AVCODEC_OPTIONS_TABLE_H - -#include "libavutil/opt.h" -static const AVOption avcodec_options[] = { -{NULL}, -}; - -#endif /* AVCODEC_OPTIONS_TABLE_H */ diff --git a/media/ffvpx/libavcodec/options.c b/media/ffvpx/libavcodec/options.c index f25df2ab363f..d8e3dbfa33c0 100644 --- a/media/ffvpx/libavcodec/options.c +++ b/media/ffvpx/libavcodec/options.c @@ -34,7 +34,7 @@ #include FF_DISABLE_DEPRECATION_WARNINGS -#include "ff_options_table.h" +#include "options_table.h" FF_ENABLE_DEPRECATION_WARNINGS static const char* context_to_name(void* ptr) { diff --git a/media/ffvpx/libavcodec/options_table.h b/media/ffvpx/libavcodec/options_table.h new file mode 100644 index 000000000000..adfbe72bff77 --- /dev/null +++ b/media/ffvpx/libavcodec/options_table.h @@ -0,0 +1,559 @@ +/* + * Copyright (c) 2001 Fabrice Bellard + * Copyright (c) 2002-2004 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_OPTIONS_TABLE_H +#define AVCODEC_OPTIONS_TABLE_H + +#include +#include +#include + +#include "libavutil/opt.h" +#include "avcodec.h" +#include "version.h" + +#define OFFSET(x) offsetof(AVCodecContext,x) +#define DEFAULT 0 //should be NAN but it does not work as it is not a constant in glibc as required by ANSI/ISO C +//these names are too long to be readable +#define V AV_OPT_FLAG_VIDEO_PARAM +#define A AV_OPT_FLAG_AUDIO_PARAM +#define S AV_OPT_FLAG_SUBTITLE_PARAM +#define E AV_OPT_FLAG_ENCODING_PARAM +#define D AV_OPT_FLAG_DECODING_PARAM + +#define AV_CODEC_DEFAULT_BITRATE 200*1000 + +static const AVOption avcodec_options[] = { +{"b", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT64, {.i64 = AV_CODEC_DEFAULT_BITRATE }, 0, INT64_MAX, A|V|E}, +{"ab", "set bitrate (in bits/s)", OFFSET(bit_rate), AV_OPT_TYPE_INT64, {.i64 = 128*1000 }, 0, INT_MAX, A|E}, +{"bt", "Set video bitrate tolerance (in bits/s). In 1-pass mode, bitrate tolerance specifies how far " + "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 }, 1, INT_MAX, 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"}, +#if FF_API_GMC +{"gmc", "use gmc", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_GMC }, INT_MIN, INT_MAX, V|E, "flags"}, +#endif +#if FF_API_MV0 +{"mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_MV0 }, INT_MIN, INT_MAX, V|E, "flags"}, +#endif +#if FF_API_INPUT_PRESERVED +{"input_preserved", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_INPUT_PRESERVED }, INT_MIN, INT_MAX, 0, "flags"}, +#endif +{"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"}, +#if FF_API_EMU_EDGE +{"emu_edge", "do not draw edges", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_EMU_EDGE }, INT_MIN, INT_MAX, 0, "flags"}, +#endif +{"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"}, +{"truncated", "Input bitstream might be randomly truncated", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_TRUNCATED }, INT_MIN, INT_MAX, V|D, "flags"}, +#if FF_API_NORMALIZE_AQP +{"naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, {.i64 = CODEC_FLAG_NORMALIZE_AQP }, INT_MIN, INT_MAX, V|E, "flags"}, +#endif +{"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"}, +{"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, V|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"}, +#if FF_API_MOTION_EST +{"me_method", "set motion estimation method", OFFSET(me_method), AV_OPT_TYPE_INT, {.i64 = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method"}, +{"zero", "zero motion estimation (fastest)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_ZERO }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"full", "full motion estimation (slowest)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"epzs", "EPZS motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"esa", "esa motion estimation (alias for full)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_FULL }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"tesa", "tesa motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_TESA }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"dia", "diamond motion estimation (alias for EPZS)", 0, AV_OPT_TYPE_CONST, {.i64 = ME_EPZS }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"log", "log motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_LOG }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"phods", "phods motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_PHODS }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"x1", "X1 motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_X1 }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"hex", "hex motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_HEX }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"umh", "umh motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_UMH }, INT_MIN, INT_MAX, V|E, "me_method" }, +{"iter", "iter motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_ITER }, INT_MIN, INT_MAX, V|E, "me_method" }, +#endif +{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, INT_MIN, 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}, +{"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, +{"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 }, INT_MIN, INT_MAX, A|E}, +{"frame_number", NULL, OFFSET(frame_number), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"delay", NULL, OFFSET(delay), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"qcomp", "video quantizer scale compression (VBR). Constant of ratecontrol equation. " + "Recommended range for default rc_eq: 0.0-1.0", + OFFSET(qcompress), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -FLT_MAX, FLT_MAX, V|E}, +{"qblur", "video quantizer scale blur (VBR)", OFFSET(qblur), AV_OPT_TYPE_FLOAT, {.dbl = 0.5 }, -1, FLT_MAX, V|E}, +{"qmin", "minimum video quantizer scale (VBR)", OFFSET(qmin), AV_OPT_TYPE_INT, {.i64 = 2 }, -1, 69, V|E}, +{"qmax", "maximum video quantizer scale (VBR)", OFFSET(qmax), AV_OPT_TYPE_INT, {.i64 = 31 }, -1, 1024, V|E}, +{"qdiff", "maximum difference between the quantizer scales (VBR)", OFFSET(max_qdiff), AV_OPT_TYPE_INT, {.i64 = 3 }, INT_MIN, INT_MAX, V|E}, +{"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}, +#if FF_API_RC_STRATEGY +{"rc_strategy", "ratecontrol method", OFFSET(rc_strategy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +#if FF_API_PRIVATE_OPT +{"b_strategy", "strategy to choose between I/P/B-frames", OFFSET(b_frame_strategy), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, V|E}, +{"ps", "RTP payload size in bytes", OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +#if FF_API_STAT_BITS +{"mv_bits", NULL, OFFSET(mv_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"header_bits", NULL, OFFSET(header_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"i_tex_bits", NULL, OFFSET(i_tex_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"p_tex_bits", NULL, OFFSET(p_tex_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"i_count", NULL, OFFSET(i_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"p_count", NULL, OFFSET(p_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"skip_count", NULL, OFFSET(skip_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"misc_bits", NULL, OFFSET(misc_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"frame_bits", NULL, OFFSET(frame_bits), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#endif +{"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"}, +#if FF_API_OLD_MSMPEG4 +{"old_msmpeg4", "some old lavc-generated MSMPEG4v3 files (no autodetection)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_OLD_MSMPEG4 }, INT_MIN, INT_MAX, V|D, "bug"}, +#endif +{"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"}, +#if FF_API_AC_VLC +{"ac_vlc", "illegal VLC bug (autodetected per FOURCC)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AC_VLC }, INT_MIN, INT_MAX, V|D, "bug"}, +#endif +{"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"}, +{"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"}, +{"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|D, "err_detect"}, +{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, +{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, +{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, +{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, +{"ignore_err", "ignore errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_IGNORE_ERR }, INT_MIN, INT_MAX, A|V|D, "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|D, "err_detect"}, +{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, +{"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, +{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#if FF_API_PRIVATE_OPT +{"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +#if FF_API_MPV_OPT +{"qsquish", "deprecated, use encoder private options instead", OFFSET(rc_qsquish), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, 0, 99, V|E}, +{"rc_qmod_amp", "deprecated, use encoder private options instead", OFFSET(rc_qmod_amp), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E}, +{"rc_qmod_freq", "deprecated, use encoder private options instead", OFFSET(rc_qmod_freq), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +{"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#if FF_API_MPV_OPT +{"rc_eq", "deprecated, use encoder private options instead", OFFSET(rc_eq), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, V|E}, +#endif +{"maxrate", "maximum bitrate (in bits/s). Used for VBV together with bufsize.", OFFSET(rc_max_rate), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT_MAX, V|A|E}, +{"minrate", "minimum bitrate (in bits/s). Most useful in setting up a CBR encode. It is of little use otherwise.", + OFFSET(rc_min_rate), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, +{"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|E}, +#if FF_API_MPV_OPT +{"rc_buf_aggressivity", "deprecated, use encoder private options instead", OFFSET(rc_buffer_aggressivity), AV_OPT_TYPE_FLOAT, {.dbl = 1.0 }, -FLT_MAX, FLT_MAX, V|E}, +#endif +{"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}, +#if FF_API_MPV_OPT +{"rc_init_cplx", "deprecated, use encoder private options instead", OFFSET(rc_initial_cplx), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E}, +#endif +{"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"}, +{"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"}, +#if FF_API_ARCH_SH4 +{"sh4", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SH4 }, INT_MIN, INT_MAX, V|E|D, "idct"}, +#endif +{"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"}, +#if FF_API_ARCH_ALPHA +{"simplealpha", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEALPHA }, INT_MIN, INT_MAX, V|E|D, "idct"}, +#endif +#if FF_API_UNUSED_MEMBERS +{"ipp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_IPP }, INT_MIN, INT_MAX, V|E|D, "idct"}, +#endif /* FF_API_UNUSED_MEMBERS */ +{"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"}, +{"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"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"}, +{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#if FF_API_PRIVATE_OPT +{"pred", "prediction method", OFFSET(prediction_method), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "pred"}, +{"left", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_LEFT }, INT_MIN, INT_MAX, V|E, "pred"}, +{"plane", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_PLANE }, INT_MIN, INT_MAX, V|E, "pred"}, +{"median", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_MEDIAN }, INT_MIN, INT_MAX, V|E, "pred"}, +#endif +{"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"}, +#if FF_API_DEBUG_MV +{"mv", "motion vector", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MV }, INT_MIN, INT_MAX, V|D, "debug"}, +#endif +{"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"}, +#if FF_API_UNUSED_MEMBERS +{"pts", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_PTS }, INT_MIN, INT_MAX, V|D, "debug"}, +#endif /* FF_API_UNUSED_MEMBERS */ +{"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"}, +{"vis_qp", "visualize quantization parameter (QP), lower QP are tinted greener", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_QP }, INT_MIN, INT_MAX, V|D, "debug"}, +{"vis_mb_type", "visualize block types", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MB_TYPE }, 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"}, +#if FF_API_VISMV +{"vismv", "visualize motion vectors (MVs) (deprecated)", OFFSET(debug_mv), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|D, "debug_mv"}, +{"pf", "forward predicted MVs of P-frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MV_P_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"}, +{"bf", "forward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MV_B_FOR }, INT_MIN, INT_MAX, V|D, "debug_mv"}, +{"bb", "backward predicted MVs of B-frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MV_B_BACK }, INT_MIN, INT_MAX, V|D, "debug_mv"}, +#endif +{"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"}, +{"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}, +#if FF_API_PRIVATE_OPT +{"preme", "pre motion estimation", OFFSET(pre_me), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +{"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"}, +#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"}, +#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"}, +{"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}, +{"subq", "sub-pel motion estimation quality", OFFSET(me_subpel_quality), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E}, +#if FF_API_AFD +{"dtg_active_format", NULL, OFFSET(dtg_active_format), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#endif +{"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}, +#if FF_API_QUANT_BIAS +{"ibias", "intra quant bias", OFFSET(intra_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, V|E}, +{"pbias", "inter quant bias", OFFSET(inter_quant_bias), AV_OPT_TYPE_INT, {.i64 = FF_DEFAULT_QUANT_BIAS }, INT_MIN, INT_MAX, V|E}, +#endif +{"global_quality", NULL, OFFSET(global_quality), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, +#if FF_API_CODER_TYPE +{"coder", NULL, OFFSET(coder_type), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "coder"}, +{"vlc", "variable length coder / Huffman coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_VLC }, INT_MIN, INT_MAX, V|E, "coder"}, +{"ac", "arithmetic coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_AC }, INT_MIN, INT_MAX, V|E, "coder"}, +{"raw", "raw (no encoding)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_RAW }, INT_MIN, INT_MAX, V|E, "coder"}, +{"rle", "run-length coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_RLE }, INT_MIN, INT_MAX, V|E, "coder"}, +#if FF_API_UNUSED_MEMBERS +{"deflate", "deflate-based coder", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CODER_TYPE_DEFLATE }, INT_MIN, INT_MAX, V|E, "coder"}, +#endif /* FF_API_UNUSED_MEMBERS */ +#endif /* FF_API_CODER_TYPE */ +#if FF_API_PRIVATE_OPT +{"context", "context model", OFFSET(context_model), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +{"slice_flags", NULL, OFFSET(slice_flags), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#if FF_API_XVMC +{"xvmc_acceleration", NULL, OFFSET(xvmc_acceleration), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#endif /* FF_API_XVMC */ +{"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"}, +#if FF_API_STREAM_CODEC_TAG +{"stream_codec_tag", NULL, OFFSET(stream_codec_tag), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +#endif +#if FF_API_PRIVATE_OPT +{"sc_threshold", "scene change threshold", OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +#if FF_API_MPV_OPT +{"lmin", "deprecated, use encoder private options instead", OFFSET(lmin), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|E}, +{"lmax", "deprecated, use encoder private options instead", OFFSET(lmax), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|E}, +#endif +#if FF_API_PRIVATE_OPT +{"nr", "noise reduction", OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +{"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}, +{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, V|A|E|D, "flags2"}, +#if FF_API_ERROR_RATE +{"error", NULL, OFFSET(error_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +{"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"}, +#if FF_API_MPV_OPT +{"me_threshold", "motion estimation threshold", OFFSET(me_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +{"mb_threshold", "macroblock threshold", OFFSET(mb_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +{"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 = FF_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "profile"}, +{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "profile"}, +{"aac_main", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_MAIN }, INT_MIN, INT_MAX, A|E, "profile"}, +{"aac_low", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_LOW }, INT_MIN, INT_MAX, A|E, "profile"}, +{"aac_ssr", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_SSR }, INT_MIN, INT_MAX, A|E, "profile"}, +{"aac_ltp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_LTP }, INT_MIN, INT_MAX, A|E, "profile"}, +{"aac_he", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_HE }, INT_MIN, INT_MAX, A|E, "profile"}, +{"aac_he_v2", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_HE_V2 }, INT_MIN, INT_MAX, A|E, "profile"}, +{"aac_ld", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_LD }, INT_MIN, INT_MAX, A|E, "profile"}, +{"aac_eld", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_AAC_ELD }, INT_MIN, INT_MAX, A|E, "profile"}, +{"mpeg2_aac_low", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG2_AAC_LOW }, INT_MIN, INT_MAX, A|E, "profile"}, +{"mpeg2_aac_he", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG2_AAC_HE }, INT_MIN, INT_MAX, A|E, "profile"}, +{"dts", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS }, INT_MIN, INT_MAX, A|E, "profile"}, +{"dts_es", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_ES }, INT_MIN, INT_MAX, A|E, "profile"}, +{"dts_96_24", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_96_24 }, INT_MIN, INT_MAX, A|E, "profile"}, +{"dts_hd_hra", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_HD_HRA }, INT_MIN, INT_MAX, A|E, "profile"}, +{"dts_hd_ma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_DTS_HD_MA }, INT_MIN, INT_MAX, A|E, "profile"}, +{"mpeg4_sp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_SIMPLE }, INT_MIN, INT_MAX, V|E, "profile"}, +{"mpeg4_core", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_CORE }, INT_MIN, INT_MAX, V|E, "profile"}, +{"mpeg4_main", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_MAIN }, INT_MIN, INT_MAX, V|E, "profile"}, +{"mpeg4_asp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_ADVANCED_SIMPLE }, INT_MIN, INT_MAX, V|E, "profile"}, +{"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"}, +{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "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}, +#if FF_API_PRIVATE_OPT +{"skip_threshold", "frame skip threshold", OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +{"skip_factor", "frame skip factor", OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +{"skip_exp", "frame skip exponent", OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +{"skipcmp", "frame skip compare function", OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"}, +#endif +#if FF_API_MPV_OPT +{"border_mask", "deprecated, use encoder private options instead", OFFSET(border_masking), AV_OPT_TYPE_FLOAT, {.dbl = DEFAULT }, -FLT_MAX, FLT_MAX, V|E}, +#endif +{"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}, +#if FF_API_PRIVATE_OPT +{"mepc", "motion estimation bitrate penalty compensation (1.0 = 256)", OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, V|E}, +#endif +{"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"}, +{"nokey" , "discard all frames except keyframes", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY }, 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"}, +{"all" , "discard all frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, "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}, +#if FF_API_PRIVATE_OPT +{"brd_scale", "downscale frames for dynamic B-frame decision", OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 10, V|E}, +#endif +{"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}, +#if FF_API_PRIVATE_OPT +{"chromaoffset", "chroma QP offset from luma", OFFSET(chromaoffset), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, +#endif +{"trellis", "rate-distortion optimal quantization", OFFSET(trellis), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, +#if FF_API_UNUSED_MEMBERS +{"sc_factor", "multiplied by qscale for each frame and added to scene_change_score", OFFSET(scenechange_factor), AV_OPT_TYPE_INT, {.i64 = 6 }, 0, INT_MAX, V|E}, +#endif /* FF_API_UNUSED_MEMBERS */ +{"mv0_threshold", NULL, OFFSET(mv0_threshold), AV_OPT_TYPE_INT, {.i64 = 256 }, 0, INT_MAX, V|E}, +#if FF_API_PRIVATE_OPT +{"b_sensitivity", "adjust sensitivity of b_frame_strategy 1", OFFSET(b_sensitivity), AV_OPT_TYPE_INT, {.i64 = 40 }, 1, INT_MAX, V|E}, +#endif +{"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.i64 = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E}, +#if FF_API_PRIVATE_OPT +{"min_prediction_order", NULL, OFFSET(min_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E}, +{"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E}, +{"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, V|E}, +#endif +{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|E|D, "channel_layout"}, +{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|D, "request_channel_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}, +{"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D}, +{"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, AVCOL_PRI_NB-1, 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"}, +{"unspecified", "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_1", "SMPTE ST 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTEST428_1 }, 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, AVCOL_TRC_NB-1, 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"}, +{"unspecified", "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"}, +{"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"}, +{"smpte2084", "SMPTE ST 2084", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTEST2084 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, +{"smpte428_1", "SMPTE ST 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTEST428_1 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, +{"colorspace", "color space", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = AVCOL_SPC_UNSPECIFIED }, 0, AVCOL_SPC_NB-1, 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"}, +{"unspecified", "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"}, +{"ycocg", "YCOCG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCOCG }, 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, AVCOL_RANGE_NB-1, 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"}, +{"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, AVCHROMA_LOC_NB-1, 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"}, +{"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"}, +{"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"}, +{"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}, CHAR_MIN, CHAR_MAX, 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"}, +#if FF_API_ASS_TIMING +{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, 0, 1, S|D, "sub_text_format"}, +#else +{"sub_text_format", "set decoded text subtitle format", OFFSET(sub_text_format), AV_OPT_TYPE_INT, {.i64 = FF_SUB_TEXT_FMT_ASS}, 0, 1, S|D, "sub_text_format"}, +#endif +{"ass", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS}, INT_MIN, INT_MAX, S|D, "sub_text_format"}, +#if FF_API_ASS_TIMING +{"ass_with_timings", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS}, INT_MIN, INT_MAX, S|D, "sub_text_format"}, +#endif +{"refcounted_frames", NULL, OFFSET(refcounted_frames), AV_OPT_TYPE_BOOL, {.i64 = 0}, 0, 1, A|V|D }, +#if FF_API_SIDEDATA_ONLY_PKT +{"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, A|V|E }, +#endif +{"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" }, +{"dump_separator", "set information dump field separator", OFFSET(dump_separator), AV_OPT_TYPE_STRING, {.str = NULL}, CHAR_MIN, CHAR_MAX, 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 }, CHAR_MIN, CHAR_MAX, 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 }, +{NULL}, +}; + +#undef A +#undef V +#undef S +#undef E +#undef D +#undef DEFAULT +#undef OFFSET + +#endif /* AVCODEC_OPTIONS_TABLE_H */ diff --git a/media/ffvpx/libavutil/dummy_funcs.c b/media/ffvpx/libavutil/dummy_funcs.c index 2ea84a140793..e579fcc8933f 100644 --- a/media/ffvpx/libavutil/dummy_funcs.c +++ b/media/ffvpx/libavutil/dummy_funcs.c @@ -5,7 +5,6 @@ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ #include "avutil.h" -#include "opt.h" // cpu_internal.c int ff_get_cpu_flags_aarch64(void) { return 0; } @@ -19,65 +18,4 @@ void ff_float_dsp_init_arm(AVFloatDSPContext *fdsp) {} void ff_float_dsp_init_ppc(AVFloatDSPContext *fdsp, int strict) {} void ff_float_dsp_init_mips(AVFloatDSPContext *fdsp) {} -// opt.c -int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags) { return 0; } -void av_opt_set_defaults(void *s) {} -void av_opt_set_defaults2(void *s, int mask, int flags) {} -int av_set_options_string(void *ctx, const char *opts, - const char *key_val_sep, const char *pairs_sep) { return 0; } -int av_opt_set_from_string(void *ctx, const char *opts, - const char *const *shorthand, - const char *key_val_sep, const char *pairs_sep) { return 0; } -void av_opt_free(void *obj) {} -int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name) { return 0; } -int av_opt_set_dict(void *obj, struct AVDictionary **options) { return 0; } -int av_opt_set_dict2(void *obj, struct AVDictionary **options, int search_flags) { return 0; } -int av_opt_get_key_value(const char **ropts, - const char *key_val_sep, const char *pairs_sep, - unsigned flags, - char **rkey, char **rval) { return 0; } -int av_opt_eval_flags (void *obj, const AVOption *o, const char *val, int *flags_out) { return 0; } -int av_opt_eval_int (void *obj, const AVOption *o, const char *val, int *int_out) { return 0; } -int av_opt_eval_int64 (void *obj, const AVOption *o, const char *val, int64_t *int64_out) { return 0; } -int av_opt_eval_float (void *obj, const AVOption *o, const char *val, float *float_out) { return 0; } -int av_opt_eval_double(void *obj, const AVOption *o, const char *val, double *double_out) { return 0; } -int av_opt_eval_q (void *obj, const AVOption *o, const char *val, AVRational *q_out) { return 0; } -const AVOption *av_opt_find(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags) { return 0; } -const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, - int opt_flags, int search_flags, void **target_obj) { return 0; } -const AVOption *av_opt_next(const void *obj, const AVOption *prev) { return 0; } -void *av_opt_child_next(void *obj, void *prev) { return 0; } -const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev) { return 0; } -int av_opt_set (void *obj, const char *name, const char *val, int search_flags) { return 0; } -int av_opt_set_int (void *obj, const char *name, int64_t val, int search_flags) { return 0; } -int av_opt_set_double (void *obj, const char *name, double val, int search_flags) { return 0; } -int av_opt_set_q (void *obj, const char *name, AVRational val, int search_flags) { return 0; } -int av_opt_set_bin (void *obj, const char *name, const uint8_t *val, int size, int search_flags) { return 0; } -int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags) { return 0; } -int av_opt_set_pixel_fmt (void *obj, const char *name, enum AVPixelFormat fmt, int search_flags) { return 0; } -int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags) { return 0; } -int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags) { return 0; } -int av_opt_set_channel_layout(void *obj, const char *name, int64_t ch_layout, int search_flags) { return 0; } -int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, int search_flags) { return 0; } -int av_opt_get (void *obj, const char *name, int search_flags, uint8_t **out_val) { return 0; } -int av_opt_get_int (void *obj, const char *name, int search_flags, int64_t *out_val) { return 0; } -int av_opt_get_double (void *obj, const char *name, int search_flags, double *out_val) { return 0; } -int av_opt_get_q (void *obj, const char *name, int search_flags, AVRational *out_val) { return 0; } -int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out) { return 0; } -int av_opt_get_pixel_fmt (void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt) { return 0; } -int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt) { return 0; } -int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val) { return 0; } -int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *ch_layout) { return 0; } -int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val) { return 0; } -void *av_opt_ptr(const AVClass *avclass, void *obj, const char *name) { return 0; } -void av_opt_freep_ranges(AVOptionRanges **ranges) {} -int av_opt_query_ranges(AVOptionRanges **b, void *obj, const char *key, int flags) { return 0; } -int av_opt_copy(void *dest, const void *src) { return 0; } -int av_opt_query_ranges_default(AVOptionRanges **b, void *obj, const char *key, int flags) { return 0; } -int av_opt_is_set_to_default(void *obj, const AVOption *o) { return 0; } -int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags) { return 0; } -int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, - const char key_val_sep, const char pairs_sep) { return 0; } - int av_hwframe_get_buffer(struct AVBufferRef* hwframe_ref, struct AVFrame* frame, int flags) { return 0; } diff --git a/media/ffvpx/libavutil/moz.build b/media/ffvpx/libavutil/moz.build index 8063131c116a..f825d62cb805 100644 --- a/media/ffvpx/libavutil/moz.build +++ b/media/ffvpx/libavutil/moz.build @@ -38,6 +38,7 @@ SOURCES += [ 'log2_tab.c', 'mathematics.c', 'mem.c', + 'opt.c', 'parseutils.c', 'pixdesc.c', 'pixelutils.c', diff --git a/media/ffvpx/libavutil/opt.c b/media/ffvpx/libavutil/opt.c new file mode 100644 index 000000000000..cd16bd1d3f4c --- /dev/null +++ b/media/ffvpx/libavutil/opt.c @@ -0,0 +1,1994 @@ +/* + * AVOptions + * Copyright (c) 2005 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * AVOptions + * @author Michael Niedermayer + */ + +#include "avutil.h" +#include "avassert.h" +#include "avstring.h" +#include "channel_layout.h" +#include "common.h" +#include "dict.h" +#include "eval.h" +#include "log.h" +#include "parseutils.h" +#include "pixdesc.h" +#include "mathematics.h" +#include "opt.h" +#include "samplefmt.h" +#include "bprint.h" + +#include + +const AVOption *av_opt_next(const void *obj, const AVOption *last) +{ + const AVClass *class; + if (!obj) + return NULL; + class = *(const AVClass**)obj; + if (!last && class && class->option && class->option[0].name) + return class->option; + if (last && last[1].name) + return ++last; + return NULL; +} + +static int read_number(const AVOption *o, const void *dst, double *num, int *den, int64_t *intnum) +{ + switch (o->type) { + case AV_OPT_TYPE_FLAGS: + *intnum = *(unsigned int*)dst; + return 0; + case AV_OPT_TYPE_PIXEL_FMT: + *intnum = *(enum AVPixelFormat *)dst; + return 0; + case AV_OPT_TYPE_SAMPLE_FMT: + *intnum = *(enum AVSampleFormat *)dst; + return 0; + case AV_OPT_TYPE_BOOL: + case AV_OPT_TYPE_INT: + *intnum = *(int *)dst; + return 0; + case AV_OPT_TYPE_CHANNEL_LAYOUT: + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_INT64: + *intnum = *(int64_t *)dst; + return 0; + case AV_OPT_TYPE_FLOAT: + *num = *(float *)dst; + return 0; + case AV_OPT_TYPE_DOUBLE: + *num = *(double *)dst; + return 0; + case AV_OPT_TYPE_RATIONAL: + *intnum = ((AVRational *)dst)->num; + *den = ((AVRational *)dst)->den; + return 0; + case AV_OPT_TYPE_CONST: + *num = o->default_val.dbl; + return 0; + } + return AVERROR(EINVAL); +} + +static int write_number(void *obj, const AVOption *o, void *dst, double num, int den, int64_t intnum) +{ + if (o->type != AV_OPT_TYPE_FLAGS && + (o->max * den < num * intnum || o->min * den > num * intnum)) { + num = den ? num * intnum / den : (num * intnum ? INFINITY : NAN); + av_log(obj, AV_LOG_ERROR, "Value %f for parameter '%s' out of range [%g - %g]\n", + num, o->name, o->min, o->max); + return AVERROR(ERANGE); + } + if (o->type == AV_OPT_TYPE_FLAGS) { + double d = num*intnum/den; + if (d < -1.5 || d > 0xFFFFFFFF+0.5 || (llrint(d*256) & 255)) { + av_log(obj, AV_LOG_ERROR, + "Value %f for parameter '%s' is not a valid set of 32bit integer flags\n", + num*intnum/den, o->name); + return AVERROR(ERANGE); + } + } + + switch (o->type) { + case AV_OPT_TYPE_PIXEL_FMT: + *(enum AVPixelFormat *)dst = llrint(num / den) * intnum; + break; + case AV_OPT_TYPE_SAMPLE_FMT: + *(enum AVSampleFormat *)dst = llrint(num / den) * intnum; + break; + case AV_OPT_TYPE_BOOL: + case AV_OPT_TYPE_FLAGS: + case AV_OPT_TYPE_INT: + *(int *)dst = llrint(num / den) * intnum; + break; + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_CHANNEL_LAYOUT: + case AV_OPT_TYPE_INT64: + *(int64_t *)dst = llrint(num / den) * intnum; + break; + case AV_OPT_TYPE_FLOAT: + *(float *)dst = num * intnum / den; + break; + case AV_OPT_TYPE_DOUBLE: + *(double *)dst = num * intnum / den; + break; + case AV_OPT_TYPE_RATIONAL: + case AV_OPT_TYPE_VIDEO_RATE: + if ((int) num == num) + *(AVRational *)dst = (AVRational) { num *intnum, den }; + else + *(AVRational *)dst = av_d2q(num * intnum / den, 1 << 24); + break; + default: + return AVERROR(EINVAL); + } + return 0; +} + +static int hexchar2int(char c) { + if (c >= '0' && c <= '9') + return c - '0'; + if (c >= 'a' && c <= 'f') + return c - 'a' + 10; + if (c >= 'A' && c <= 'F') + return c - 'A' + 10; + return -1; +} + +static int set_string_binary(void *obj, const AVOption *o, const char *val, uint8_t **dst) +{ + int *lendst = (int *)(dst + 1); + uint8_t *bin, *ptr; + int len; + + av_freep(dst); + *lendst = 0; + + if (!val || !(len = strlen(val))) + return 0; + + if (len & 1) + return AVERROR(EINVAL); + len /= 2; + + ptr = bin = av_malloc(len); + if (!ptr) + return AVERROR(ENOMEM); + while (*val) { + int a = hexchar2int(*val++); + int b = hexchar2int(*val++); + if (a < 0 || b < 0) { + av_free(bin); + return AVERROR(EINVAL); + } + *ptr++ = (a << 4) | b; + } + *dst = bin; + *lendst = len; + + return 0; +} + +static int set_string(void *obj, const AVOption *o, const char *val, uint8_t **dst) +{ + av_freep(dst); + *dst = av_strdup(val); + return *dst ? 0 : AVERROR(ENOMEM); +} + +#define DEFAULT_NUMVAL(opt) ((opt->type == AV_OPT_TYPE_INT64 || \ + opt->type == AV_OPT_TYPE_CONST || \ + opt->type == AV_OPT_TYPE_FLAGS || \ + opt->type == AV_OPT_TYPE_INT) \ + ? opt->default_val.i64 \ + : opt->default_val.dbl) + +static int set_string_number(void *obj, void *target_obj, const AVOption *o, const char *val, void *dst) +{ + int ret = 0; + int num, den; + char c; + + if (sscanf(val, "%d%*1[:/]%d%c", &num, &den, &c) == 2) { + if ((ret = write_number(obj, o, dst, 1, den, num)) >= 0) + return ret; + ret = 0; + } + + for (;;) { + int i = 0; + char buf[256]; + int cmd = 0; + double d; + int64_t intnum = 1; + + if (o->type == AV_OPT_TYPE_FLAGS) { + if (*val == '+' || *val == '-') + cmd = *(val++); + for (; i < sizeof(buf) - 1 && val[i] && val[i] != '+' && val[i] != '-'; i++) + buf[i] = val[i]; + buf[i] = 0; + } + + { + const AVOption *o_named = av_opt_find(target_obj, i ? buf : val, o->unit, 0, 0); + int res; + int ci = 0; + double const_values[64]; + const char * const_names[64]; + if (o_named && o_named->type == AV_OPT_TYPE_CONST) + d = DEFAULT_NUMVAL(o_named); + else { + if (o->unit) { + for (o_named = NULL; o_named = av_opt_next(target_obj, o_named); ) { + if (o_named->type == AV_OPT_TYPE_CONST && + o_named->unit && + !strcmp(o_named->unit, o->unit)) { + if (ci + 6 >= FF_ARRAY_ELEMS(const_values)) { + av_log(obj, AV_LOG_ERROR, "const_values array too small for %s\n", o->unit); + return AVERROR_PATCHWELCOME; + } + const_names [ci ] = o_named->name; + const_values[ci++] = DEFAULT_NUMVAL(o_named); + } + } + } + const_names [ci ] = "default"; + const_values[ci++] = DEFAULT_NUMVAL(o); + const_names [ci ] = "max"; + const_values[ci++] = o->max; + const_names [ci ] = "min"; + const_values[ci++] = o->min; + const_names [ci ] = "none"; + const_values[ci++] = 0; + const_names [ci ] = "all"; + const_values[ci++] = ~0; + const_names [ci] = NULL; + const_values[ci] = 0; + + res = av_expr_parse_and_eval(&d, i ? buf : val, const_names, + const_values, NULL, NULL, NULL, NULL, NULL, 0, obj); + if (res < 0) { + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\"\n", val); + return res; + } + } + } + if (o->type == AV_OPT_TYPE_FLAGS) { + read_number(o, dst, NULL, NULL, &intnum); + if (cmd == '+') + d = intnum | (int64_t)d; + else if (cmd == '-') + d = intnum &~(int64_t)d; + } + + if ((ret = write_number(obj, o, dst, d, 1, 1)) < 0) + return ret; + val += i; + if (!i || !*val) + return 0; + } + + return 0; +} + +static int set_string_image_size(void *obj, const AVOption *o, const char *val, int *dst) +{ + int ret; + + if (!val || !strcmp(val, "none")) { + dst[0] = + dst[1] = 0; + return 0; + } + ret = av_parse_video_size(dst, dst + 1, val); + if (ret < 0) + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as image size\n", val); + return ret; +} + +static int set_string_video_rate(void *obj, const AVOption *o, const char *val, AVRational *dst) +{ + int ret; + if (!val) { + ret = AVERROR(EINVAL); + } else { + ret = av_parse_video_rate(dst, val); + } + if (ret < 0) + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as video rate\n", val); + return ret; +} + +static int set_string_color(void *obj, const AVOption *o, const char *val, uint8_t *dst) +{ + int ret; + + if (!val) { + return 0; + } else { + ret = av_parse_color(dst, val, -1, obj); + if (ret < 0) + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as color\n", val); + return ret; + } + return 0; +} + +static const char *get_bool_name(int val) +{ + if (val < 0) + return "auto"; + return val ? "true" : "false"; +} + +static int set_string_bool(void *obj, const AVOption *o, const char *val, int *dst) +{ + int n; + + if (!val) + return 0; + + if (!strcmp(val, "auto")) { + n = -1; + } else if (av_match_name(val, "true,y,yes,enable,enabled,on")) { + n = 1; + } else if (av_match_name(val, "false,n,no,disable,disabled,off")) { + n = 0; + } else { + char *end = NULL; + n = strtol(val, &end, 10); + if (val + strlen(val) != end) + goto fail; + } + + if (n < o->min || n > o->max) + goto fail; + + *dst = n; + return 0; + +fail: + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as boolean\n", val); + return AVERROR(EINVAL); +} + +static int set_string_fmt(void *obj, const AVOption *o, const char *val, uint8_t *dst, + int fmt_nb, int ((*get_fmt)(const char *)), const char *desc) +{ + int fmt, min, max; + + if (!val || !strcmp(val, "none")) { + fmt = -1; + } else { + fmt = get_fmt(val); + if (fmt == -1) { + char *tail; + fmt = strtol(val, &tail, 0); + if (*tail || (unsigned)fmt >= fmt_nb) { + av_log(obj, AV_LOG_ERROR, + "Unable to parse option value \"%s\" as %s\n", val, desc); + return AVERROR(EINVAL); + } + } + } + + min = FFMAX(o->min, -1); + max = FFMIN(o->max, fmt_nb-1); + + // hack for compatibility with old ffmpeg + if(min == 0 && max == 0) { + min = -1; + max = fmt_nb-1; + } + + if (fmt < min || fmt > max) { + av_log(obj, AV_LOG_ERROR, + "Value %d for parameter '%s' out of %s format range [%d - %d]\n", + fmt, o->name, desc, min, max); + return AVERROR(ERANGE); + } + + *(int *)dst = fmt; + return 0; +} + +static int set_string_pixel_fmt(void *obj, const AVOption *o, const char *val, uint8_t *dst) +{ + return set_string_fmt(obj, o, val, dst, + AV_PIX_FMT_NB, av_get_pix_fmt, "pixel format"); +} + +static int set_string_sample_fmt(void *obj, const AVOption *o, const char *val, uint8_t *dst) +{ + return set_string_fmt(obj, o, val, dst, + AV_SAMPLE_FMT_NB, av_get_sample_fmt, "sample format"); +} + +int av_opt_set(void *obj, const char *name, const char *val, int search_flags) +{ + int ret = 0; + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (!val && (o->type != AV_OPT_TYPE_STRING && + o->type != AV_OPT_TYPE_PIXEL_FMT && o->type != AV_OPT_TYPE_SAMPLE_FMT && + o->type != AV_OPT_TYPE_IMAGE_SIZE && o->type != AV_OPT_TYPE_VIDEO_RATE && + o->type != AV_OPT_TYPE_DURATION && o->type != AV_OPT_TYPE_COLOR && + o->type != AV_OPT_TYPE_CHANNEL_LAYOUT && o->type != AV_OPT_TYPE_BOOL)) + return AVERROR(EINVAL); + + if (o->flags & AV_OPT_FLAG_READONLY) + return AVERROR(EINVAL); + + dst = ((uint8_t *)target_obj) + o->offset; + switch (o->type) { + case AV_OPT_TYPE_BOOL: + return set_string_bool(obj, o, val, dst); + case AV_OPT_TYPE_STRING: + return set_string(obj, o, val, dst); + case AV_OPT_TYPE_BINARY: + return set_string_binary(obj, o, val, dst); + case AV_OPT_TYPE_FLAGS: + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_FLOAT: + case AV_OPT_TYPE_DOUBLE: + case AV_OPT_TYPE_RATIONAL: + return set_string_number(obj, target_obj, o, val, dst); + case AV_OPT_TYPE_IMAGE_SIZE: + return set_string_image_size(obj, o, val, dst); + case AV_OPT_TYPE_VIDEO_RATE: { + AVRational tmp; + ret = set_string_video_rate(obj, o, val, &tmp); + if (ret < 0) + return ret; + return write_number(obj, o, dst, 1, tmp.den, tmp.num); + } + case AV_OPT_TYPE_PIXEL_FMT: + return set_string_pixel_fmt(obj, o, val, dst); + case AV_OPT_TYPE_SAMPLE_FMT: + return set_string_sample_fmt(obj, o, val, dst); + case AV_OPT_TYPE_DURATION: + if (!val) { + *(int64_t *)dst = 0; + return 0; + } else { + if ((ret = av_parse_time(dst, val, 1)) < 0) + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as duration\n", val); + return ret; + } + break; + case AV_OPT_TYPE_COLOR: + return set_string_color(obj, o, val, dst); + case AV_OPT_TYPE_CHANNEL_LAYOUT: + if (!val || !strcmp(val, "none")) { + *(int64_t *)dst = 0; + } else { + int64_t cl = av_get_channel_layout(val); + if (!cl) { + av_log(obj, AV_LOG_ERROR, "Unable to parse option value \"%s\" as channel layout\n", val); + ret = AVERROR(EINVAL); + } + *(int64_t *)dst = cl; + return ret; + } + break; + } + + av_log(obj, AV_LOG_ERROR, "Invalid option type.\n"); + return AVERROR(EINVAL); +} + +#define OPT_EVAL_NUMBER(name, opttype, vartype) \ +int av_opt_eval_ ## name(void *obj, const AVOption *o, \ + const char *val, vartype *name ## _out) \ +{ \ + if (!o || o->type != opttype || o->flags & AV_OPT_FLAG_READONLY) \ + return AVERROR(EINVAL); \ + return set_string_number(obj, obj, o, val, name ## _out); \ +} + +OPT_EVAL_NUMBER(flags, AV_OPT_TYPE_FLAGS, int) +OPT_EVAL_NUMBER(int, AV_OPT_TYPE_INT, int) +OPT_EVAL_NUMBER(int64, AV_OPT_TYPE_INT64, int64_t) +OPT_EVAL_NUMBER(float, AV_OPT_TYPE_FLOAT, float) +OPT_EVAL_NUMBER(double, AV_OPT_TYPE_DOUBLE, double) +OPT_EVAL_NUMBER(q, AV_OPT_TYPE_RATIONAL, AVRational) + +static int set_number(void *obj, const char *name, double num, int den, int64_t intnum, + int search_flags) +{ + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + + if (o->flags & AV_OPT_FLAG_READONLY) + return AVERROR(EINVAL); + + dst = ((uint8_t *)target_obj) + o->offset; + return write_number(obj, o, dst, num, den, intnum); +} + +int av_opt_set_int(void *obj, const char *name, int64_t val, int search_flags) +{ + return set_number(obj, name, 1, 1, val, search_flags); +} + +int av_opt_set_double(void *obj, const char *name, double val, int search_flags) +{ + return set_number(obj, name, val, 1, 1, search_flags); +} + +int av_opt_set_q(void *obj, const char *name, AVRational val, int search_flags) +{ + return set_number(obj, name, val.num, val.den, 1, search_flags); +} + +int av_opt_set_bin(void *obj, const char *name, const uint8_t *val, int len, int search_flags) +{ + void *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + uint8_t *ptr; + uint8_t **dst; + int *lendst; + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + + if (o->type != AV_OPT_TYPE_BINARY || o->flags & AV_OPT_FLAG_READONLY) + return AVERROR(EINVAL); + + ptr = len ? av_malloc(len) : NULL; + if (len && !ptr) + return AVERROR(ENOMEM); + + dst = (uint8_t **)(((uint8_t *)target_obj) + o->offset); + lendst = (int *)(dst + 1); + + av_free(*dst); + *dst = ptr; + *lendst = len; + if (len) + memcpy(ptr, val, len); + + return 0; +} + +int av_opt_set_image_size(void *obj, const char *name, int w, int h, int search_flags) +{ + void *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != AV_OPT_TYPE_IMAGE_SIZE) { + av_log(obj, AV_LOG_ERROR, + "The value set by option '%s' is not an image size.\n", o->name); + return AVERROR(EINVAL); + } + if (w<0 || h<0) { + av_log(obj, AV_LOG_ERROR, + "Invalid negative size value %dx%d for size '%s'\n", w, h, o->name); + return AVERROR(EINVAL); + } + *(int *)(((uint8_t *)target_obj) + o->offset) = w; + *(int *)(((uint8_t *)target_obj+sizeof(int)) + o->offset) = h; + return 0; +} + +int av_opt_set_video_rate(void *obj, const char *name, AVRational val, int search_flags) +{ + void *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != AV_OPT_TYPE_VIDEO_RATE) { + av_log(obj, AV_LOG_ERROR, + "The value set by option '%s' is not a video rate.\n", o->name); + return AVERROR(EINVAL); + } + if (val.num <= 0 || val.den <= 0) + return AVERROR(EINVAL); + return set_number(obj, name, val.num, val.den, 1, search_flags); +} + +static int set_format(void *obj, const char *name, int fmt, int search_flags, + enum AVOptionType type, const char *desc, int nb_fmts) +{ + void *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, + search_flags, &target_obj); + int min, max; + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != type) { + av_log(obj, AV_LOG_ERROR, + "The value set by option '%s' is not a %s format", name, desc); + return AVERROR(EINVAL); + } + + min = FFMAX(o->min, -1); + max = FFMIN(o->max, nb_fmts-1); + + if (fmt < min || fmt > max) { + av_log(obj, AV_LOG_ERROR, + "Value %d for parameter '%s' out of %s format range [%d - %d]\n", + fmt, name, desc, min, max); + return AVERROR(ERANGE); + } + *(int *)(((uint8_t *)target_obj) + o->offset) = fmt; + return 0; +} + +int av_opt_set_pixel_fmt(void *obj, const char *name, enum AVPixelFormat fmt, int search_flags) +{ + return set_format(obj, name, fmt, search_flags, AV_OPT_TYPE_PIXEL_FMT, "pixel", AV_PIX_FMT_NB); +} + +int av_opt_set_sample_fmt(void *obj, const char *name, enum AVSampleFormat fmt, int search_flags) +{ + return set_format(obj, name, fmt, search_flags, AV_OPT_TYPE_SAMPLE_FMT, "sample", AV_SAMPLE_FMT_NB); +} + +int av_opt_set_channel_layout(void *obj, const char *name, int64_t cl, int search_flags) +{ + void *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != AV_OPT_TYPE_CHANNEL_LAYOUT) { + av_log(obj, AV_LOG_ERROR, + "The value set by option '%s' is not a channel layout.\n", o->name); + return AVERROR(EINVAL); + } + *(int64_t *)(((uint8_t *)target_obj) + o->offset) = cl; + return 0; +} + +int av_opt_set_dict_val(void *obj, const char *name, const AVDictionary *val, + int search_flags) +{ + void *target_obj; + AVDictionary **dst; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->flags & AV_OPT_FLAG_READONLY) + return AVERROR(EINVAL); + + dst = (AVDictionary **)(((uint8_t *)target_obj) + o->offset); + av_dict_free(dst); + av_dict_copy(dst, val, 0); + + return 0; +} + +static void format_duration(char *buf, size_t size, int64_t d) +{ + char *e; + + av_assert0(size >= 25); + if (d < 0 && d != INT64_MIN) { + *(buf++) = '-'; + size--; + d = -d; + } + if (d == INT64_MAX) + snprintf(buf, size, "INT64_MAX"); + else if (d == INT64_MIN) + snprintf(buf, size, "INT64_MIN"); + else if (d > (int64_t)3600*1000000) + snprintf(buf, size, "%"PRId64":%02d:%02d.%06d", d / 3600000000, + (int)((d / 60000000) % 60), + (int)((d / 1000000) % 60), + (int)(d % 1000000)); + else if (d > 60*1000000) + snprintf(buf, size, "%d:%02d.%06d", + (int)(d / 60000000), + (int)((d / 1000000) % 60), + (int)(d % 1000000)); + else + snprintf(buf, size, "%d.%06d", + (int)(d / 1000000), + (int)(d % 1000000)); + e = buf + strlen(buf); + while (e > buf && e[-1] == '0') + *(--e) = 0; + if (e > buf && e[-1] == '.') + *(--e) = 0; +} + +int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) +{ + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + uint8_t *bin, buf[128]; + int len, i, ret; + int64_t i64; + + if (!o || !target_obj || (o->offset<=0 && o->type != AV_OPT_TYPE_CONST)) + return AVERROR_OPTION_NOT_FOUND; + + dst = (uint8_t *)target_obj + o->offset; + + buf[0] = 0; + switch (o->type) { + case AV_OPT_TYPE_BOOL: + ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(get_bool_name(*(int *)dst), "invalid")); + break; + case AV_OPT_TYPE_FLAGS: + ret = snprintf(buf, sizeof(buf), "0x%08X", *(int *)dst); + break; + case AV_OPT_TYPE_INT: + ret = snprintf(buf, sizeof(buf), "%d", *(int *)dst); + break; + case AV_OPT_TYPE_INT64: + ret = snprintf(buf, sizeof(buf), "%"PRId64, *(int64_t *)dst); + break; + case AV_OPT_TYPE_FLOAT: + ret = snprintf(buf, sizeof(buf), "%f", *(float *)dst); + break; + case AV_OPT_TYPE_DOUBLE: + ret = snprintf(buf, sizeof(buf), "%f", *(double *)dst); + break; + case AV_OPT_TYPE_VIDEO_RATE: + case AV_OPT_TYPE_RATIONAL: + ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational *)dst)->num, ((AVRational *)dst)->den); + break; + case AV_OPT_TYPE_CONST: + ret = snprintf(buf, sizeof(buf), "%f", o->default_val.dbl); + break; + case AV_OPT_TYPE_STRING: + if (*(uint8_t **)dst) { + *out_val = av_strdup(*(uint8_t **)dst); + } else if (search_flags & AV_OPT_ALLOW_NULL) { + *out_val = NULL; + return 0; + } else { + *out_val = av_strdup(""); + } + return *out_val ? 0 : AVERROR(ENOMEM); + case AV_OPT_TYPE_BINARY: + if (!*(uint8_t **)dst && (search_flags & AV_OPT_ALLOW_NULL)) { + *out_val = NULL; + return 0; + } + len = *(int *)(((uint8_t *)dst) + sizeof(uint8_t *)); + if ((uint64_t)len * 2 + 1 > INT_MAX) + return AVERROR(EINVAL); + if (!(*out_val = av_malloc(len * 2 + 1))) + return AVERROR(ENOMEM); + if (!len) { + *out_val[0] = '\0'; + return 0; + } + bin = *(uint8_t **)dst; + for (i = 0; i < len; i++) + snprintf(*out_val + i * 2, 3, "%02X", bin[i]); + return 0; + case AV_OPT_TYPE_IMAGE_SIZE: + ret = snprintf(buf, sizeof(buf), "%dx%d", ((int *)dst)[0], ((int *)dst)[1]); + break; + case AV_OPT_TYPE_PIXEL_FMT: + ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_pix_fmt_name(*(enum AVPixelFormat *)dst), "none")); + break; + case AV_OPT_TYPE_SAMPLE_FMT: + ret = snprintf(buf, sizeof(buf), "%s", (char *)av_x_if_null(av_get_sample_fmt_name(*(enum AVSampleFormat *)dst), "none")); + break; + case AV_OPT_TYPE_DURATION: + i64 = *(int64_t *)dst; + format_duration(buf, sizeof(buf), i64); + ret = strlen(buf); // no overflow possible, checked by an assert + break; + case AV_OPT_TYPE_COLOR: + ret = snprintf(buf, sizeof(buf), "0x%02x%02x%02x%02x", + (int)((uint8_t *)dst)[0], (int)((uint8_t *)dst)[1], + (int)((uint8_t *)dst)[2], (int)((uint8_t *)dst)[3]); + break; + case AV_OPT_TYPE_CHANNEL_LAYOUT: + i64 = *(int64_t *)dst; + ret = snprintf(buf, sizeof(buf), "0x%"PRIx64, i64); + break; + default: + return AVERROR(EINVAL); + } + + if (ret >= sizeof(buf)) + return AVERROR(EINVAL); + *out_val = av_strdup(buf); + return *out_val ? 0 : AVERROR(ENOMEM); +} + +static int get_number(void *obj, const char *name, const AVOption **o_out, double *num, int *den, int64_t *intnum, + int search_flags) +{ + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + if (!o || !target_obj) + goto error; + + dst = ((uint8_t *)target_obj) + o->offset; + + if (o_out) *o_out= o; + + return read_number(o, dst, num, den, intnum); + +error: + *den = + *intnum = 0; + return -1; +} + +int av_opt_get_int(void *obj, const char *name, int search_flags, int64_t *out_val) +{ + int64_t intnum = 1; + double num = 1; + int ret, den = 1; + + if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + return ret; + *out_val = num * intnum / den; + return 0; +} + +int av_opt_get_double(void *obj, const char *name, int search_flags, double *out_val) +{ + int64_t intnum = 1; + double num = 1; + int ret, den = 1; + + if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + return ret; + *out_val = num * intnum / den; + return 0; +} + +int av_opt_get_q(void *obj, const char *name, int search_flags, AVRational *out_val) +{ + int64_t intnum = 1; + double num = 1; + int ret, den = 1; + + if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + return ret; + + if (num == 1.0 && (int)intnum == intnum) + *out_val = (AVRational){intnum, den}; + else + *out_val = av_d2q(num*intnum/den, 1<<24); + return 0; +} + +int av_opt_get_image_size(void *obj, const char *name, int search_flags, int *w_out, int *h_out) +{ + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != AV_OPT_TYPE_IMAGE_SIZE) { + av_log(obj, AV_LOG_ERROR, + "The value for option '%s' is not an image size.\n", name); + return AVERROR(EINVAL); + } + + dst = ((uint8_t*)target_obj) + o->offset; + if (w_out) *w_out = *(int *)dst; + if (h_out) *h_out = *((int *)dst+1); + return 0; +} + +int av_opt_get_video_rate(void *obj, const char *name, int search_flags, AVRational *out_val) +{ + int64_t intnum = 1; + double num = 1; + int ret, den = 1; + + if ((ret = get_number(obj, name, NULL, &num, &den, &intnum, search_flags)) < 0) + return ret; + + if (num == 1.0 && (int)intnum == intnum) + *out_val = (AVRational) { intnum, den }; + else + *out_val = av_d2q(num * intnum / den, 1 << 24); + return 0; +} + +static int get_format(void *obj, const char *name, int search_flags, int *out_fmt, + enum AVOptionType type, const char *desc) +{ + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != type) { + av_log(obj, AV_LOG_ERROR, + "The value for option '%s' is not a %s format.\n", desc, name); + return AVERROR(EINVAL); + } + + dst = ((uint8_t*)target_obj) + o->offset; + *out_fmt = *(int *)dst; + return 0; +} + +int av_opt_get_pixel_fmt(void *obj, const char *name, int search_flags, enum AVPixelFormat *out_fmt) +{ + return get_format(obj, name, search_flags, out_fmt, AV_OPT_TYPE_PIXEL_FMT, "pixel"); +} + +int av_opt_get_sample_fmt(void *obj, const char *name, int search_flags, enum AVSampleFormat *out_fmt) +{ + return get_format(obj, name, search_flags, out_fmt, AV_OPT_TYPE_SAMPLE_FMT, "sample"); +} + +int av_opt_get_channel_layout(void *obj, const char *name, int search_flags, int64_t *cl) +{ + void *dst, *target_obj; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != AV_OPT_TYPE_CHANNEL_LAYOUT) { + av_log(obj, AV_LOG_ERROR, + "The value for option '%s' is not a channel layout.\n", name); + return AVERROR(EINVAL); + } + + dst = ((uint8_t*)target_obj) + o->offset; + *cl = *(int64_t *)dst; + return 0; +} + +int av_opt_get_dict_val(void *obj, const char *name, int search_flags, AVDictionary **out_val) +{ + void *target_obj; + AVDictionary *src; + const AVOption *o = av_opt_find2(obj, name, NULL, 0, search_flags, &target_obj); + + if (!o || !target_obj) + return AVERROR_OPTION_NOT_FOUND; + if (o->type != AV_OPT_TYPE_DICT) + return AVERROR(EINVAL); + + src = *(AVDictionary **)(((uint8_t *)target_obj) + o->offset); + av_dict_copy(out_val, src, 0); + + return 0; +} + +int av_opt_flag_is_set(void *obj, const char *field_name, const char *flag_name) +{ + const AVOption *field = av_opt_find(obj, field_name, NULL, 0, 0); + const AVOption *flag = av_opt_find(obj, flag_name, + field ? field->unit : NULL, 0, 0); + int64_t res; + + if (!field || !flag || flag->type != AV_OPT_TYPE_CONST || + av_opt_get_int(obj, field_name, 0, &res) < 0) + return 0; + return res & flag->default_val.i64; +} + +static void log_value(void *av_log_obj, int level, double d) +{ + if (d == INT_MAX) { + av_log(av_log_obj, level, "INT_MAX"); + } else if (d == INT_MIN) { + av_log(av_log_obj, level, "INT_MIN"); + } else if (d == UINT32_MAX) { + av_log(av_log_obj, level, "UINT32_MAX"); + } else if (d == (double)INT64_MAX) { + av_log(av_log_obj, level, "I64_MAX"); + } else if (d == INT64_MIN) { + av_log(av_log_obj, level, "I64_MIN"); + } else if (d == FLT_MAX) { + av_log(av_log_obj, level, "FLT_MAX"); + } else if (d == FLT_MIN) { + av_log(av_log_obj, level, "FLT_MIN"); + } else if (d == -FLT_MAX) { + av_log(av_log_obj, level, "-FLT_MAX"); + } else if (d == -FLT_MIN) { + av_log(av_log_obj, level, "-FLT_MIN"); + } else if (d == DBL_MAX) { + av_log(av_log_obj, level, "DBL_MAX"); + } else if (d == DBL_MIN) { + av_log(av_log_obj, level, "DBL_MIN"); + } else if (d == -DBL_MAX) { + av_log(av_log_obj, level, "-DBL_MAX"); + } else if (d == -DBL_MIN) { + av_log(av_log_obj, level, "-DBL_MIN"); + } else { + av_log(av_log_obj, level, "%g", d); + } +} + +static const char *get_opt_const_name(void *obj, const char *unit, int64_t value) +{ + const AVOption *opt = NULL; + + if (!unit) + return NULL; + while ((opt = av_opt_next(obj, opt))) + if (opt->type == AV_OPT_TYPE_CONST && !strcmp(opt->unit, unit) && + opt->default_val.i64 == value) + return opt->name; + return NULL; +} + +static char *get_opt_flags_string(void *obj, const char *unit, int64_t value) +{ + const AVOption *opt = NULL; + char flags[512]; + + flags[0] = 0; + if (!unit) + return NULL; + while ((opt = av_opt_next(obj, opt))) { + if (opt->type == AV_OPT_TYPE_CONST && !strcmp(opt->unit, unit) && + opt->default_val.i64 & value) { + if (flags[0]) + av_strlcatf(flags, sizeof(flags), "+"); + av_strlcatf(flags, sizeof(flags), "%s", opt->name); + } + } + if (flags[0]) + return av_strdup(flags); + return NULL; +} + +static void opt_list(void *obj, void *av_log_obj, const char *unit, + int req_flags, int rej_flags) +{ + const AVOption *opt = NULL; + AVOptionRanges *r; + int i; + + while ((opt = av_opt_next(obj, opt))) { + if (!(opt->flags & req_flags) || (opt->flags & rej_flags)) + continue; + + /* Don't print CONST's on level one. + * Don't print anything but CONST's on level two. + * Only print items from the requested unit. + */ + if (!unit && opt->type == AV_OPT_TYPE_CONST) + continue; + else if (unit && opt->type != AV_OPT_TYPE_CONST) + continue; + else if (unit && opt->type == AV_OPT_TYPE_CONST && strcmp(unit, opt->unit)) + continue; + else if (unit && opt->type == AV_OPT_TYPE_CONST) + av_log(av_log_obj, AV_LOG_INFO, " %-15s ", opt->name); + else + av_log(av_log_obj, AV_LOG_INFO, " %s%-17s ", + (opt->flags & AV_OPT_FLAG_FILTERING_PARAM) ? "" : "-", + opt->name); + + switch (opt->type) { + case AV_OPT_TYPE_FLAGS: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_INT: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_INT64: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_DOUBLE: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_FLOAT: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_STRING: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_RATIONAL: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_BINARY: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_IMAGE_SIZE: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_VIDEO_RATE: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_PIXEL_FMT: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_SAMPLE_FMT: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_DURATION: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_COLOR: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_CHANNEL_LAYOUT: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_BOOL: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + case AV_OPT_TYPE_CONST: + default: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; + } + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_ENCODING_PARAM) ? 'E' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_DECODING_PARAM) ? 'D' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_FILTERING_PARAM)? 'F' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_VIDEO_PARAM ) ? 'V' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_AUDIO_PARAM ) ? 'A' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_SUBTITLE_PARAM) ? 'S' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_EXPORT) ? 'X' : '.'); + av_log(av_log_obj, AV_LOG_INFO, "%c", (opt->flags & AV_OPT_FLAG_READONLY) ? 'R' : '.'); + + if (opt->help) + av_log(av_log_obj, AV_LOG_INFO, " %s", opt->help); + + if (av_opt_query_ranges(&r, obj, opt->name, AV_OPT_SEARCH_FAKE_OBJ) >= 0) { + switch (opt->type) { + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_DOUBLE: + case AV_OPT_TYPE_FLOAT: + case AV_OPT_TYPE_RATIONAL: + for (i = 0; i < r->nb_ranges; i++) { + av_log(av_log_obj, AV_LOG_INFO, " (from "); + log_value(av_log_obj, AV_LOG_INFO, r->range[i]->value_min); + av_log(av_log_obj, AV_LOG_INFO, " to "); + log_value(av_log_obj, AV_LOG_INFO, r->range[i]->value_max); + av_log(av_log_obj, AV_LOG_INFO, ")"); + } + break; + } + av_opt_freep_ranges(&r); + } + + if (opt->type != AV_OPT_TYPE_CONST && + opt->type != AV_OPT_TYPE_BINARY && + !((opt->type == AV_OPT_TYPE_COLOR || + opt->type == AV_OPT_TYPE_IMAGE_SIZE || + opt->type == AV_OPT_TYPE_STRING || + opt->type == AV_OPT_TYPE_VIDEO_RATE) && + !opt->default_val.str)) { + av_log(av_log_obj, AV_LOG_INFO, " (default "); + switch (opt->type) { + case AV_OPT_TYPE_BOOL: + av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(get_bool_name(opt->default_val.i64), "invalid")); + break; + case AV_OPT_TYPE_FLAGS: { + char *def_flags = get_opt_flags_string(obj, opt->unit, opt->default_val.i64); + if (def_flags) { + av_log(av_log_obj, AV_LOG_INFO, "%s", def_flags); + av_freep(&def_flags); + } else { + av_log(av_log_obj, AV_LOG_INFO, "%"PRIX64, opt->default_val.i64); + } + break; + } + case AV_OPT_TYPE_DURATION: { + char buf[25]; + format_duration(buf, sizeof(buf), opt->default_val.i64); + av_log(av_log_obj, AV_LOG_INFO, "%s", buf); + break; + } + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_INT64: { + const char *def_const = get_opt_const_name(obj, opt->unit, opt->default_val.i64); + if (def_const) + av_log(av_log_obj, AV_LOG_INFO, "%s", def_const); + else + log_value(av_log_obj, AV_LOG_INFO, opt->default_val.i64); + break; + } + case AV_OPT_TYPE_DOUBLE: + case AV_OPT_TYPE_FLOAT: + log_value(av_log_obj, AV_LOG_INFO, opt->default_val.dbl); + break; + case AV_OPT_TYPE_RATIONAL: { + AVRational q = av_d2q(opt->default_val.dbl, INT_MAX); + av_log(av_log_obj, AV_LOG_INFO, "%d/%d", q.num, q.den); } + break; + case AV_OPT_TYPE_PIXEL_FMT: + av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(av_get_pix_fmt_name(opt->default_val.i64), "none")); + break; + case AV_OPT_TYPE_SAMPLE_FMT: + av_log(av_log_obj, AV_LOG_INFO, "%s", (char *)av_x_if_null(av_get_sample_fmt_name(opt->default_val.i64), "none")); + break; + case AV_OPT_TYPE_COLOR: + case AV_OPT_TYPE_IMAGE_SIZE: + case AV_OPT_TYPE_STRING: + case AV_OPT_TYPE_VIDEO_RATE: + av_log(av_log_obj, AV_LOG_INFO, "\"%s\"", opt->default_val.str); + break; + case AV_OPT_TYPE_CHANNEL_LAYOUT: + av_log(av_log_obj, AV_LOG_INFO, "0x%"PRIx64, opt->default_val.i64); + break; + } + av_log(av_log_obj, AV_LOG_INFO, ")"); + } + + av_log(av_log_obj, AV_LOG_INFO, "\n"); + if (opt->unit && opt->type != AV_OPT_TYPE_CONST) + opt_list(obj, av_log_obj, opt->unit, req_flags, rej_flags); + } +} + +int av_opt_show2(void *obj, void *av_log_obj, int req_flags, int rej_flags) +{ + if (!obj) + return -1; + + av_log(av_log_obj, AV_LOG_INFO, "%s AVOptions:\n", (*(AVClass **)obj)->class_name); + + opt_list(obj, av_log_obj, NULL, req_flags, rej_flags); + + return 0; +} + +void av_opt_set_defaults(void *s) +{ + av_opt_set_defaults2(s, 0, 0); +} + +void av_opt_set_defaults2(void *s, int mask, int flags) +{ + const AVOption *opt = NULL; + while ((opt = av_opt_next(s, opt))) { + void *dst = ((uint8_t*)s) + opt->offset; + + if ((opt->flags & mask) != flags) + continue; + + if (opt->flags & AV_OPT_FLAG_READONLY) + continue; + + switch (opt->type) { + case AV_OPT_TYPE_CONST: + /* Nothing to be done here */ + break; + case AV_OPT_TYPE_BOOL: + case AV_OPT_TYPE_FLAGS: + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_CHANNEL_LAYOUT: + case AV_OPT_TYPE_PIXEL_FMT: + case AV_OPT_TYPE_SAMPLE_FMT: + write_number(s, opt, dst, 1, 1, opt->default_val.i64); + break; + case AV_OPT_TYPE_DOUBLE: + case AV_OPT_TYPE_FLOAT: { + double val; + val = opt->default_val.dbl; + write_number(s, opt, dst, val, 1, 1); + } + break; + case AV_OPT_TYPE_RATIONAL: { + AVRational val; + val = av_d2q(opt->default_val.dbl, INT_MAX); + write_number(s, opt, dst, 1, val.den, val.num); + } + break; + case AV_OPT_TYPE_COLOR: + set_string_color(s, opt, opt->default_val.str, dst); + break; + case AV_OPT_TYPE_STRING: + set_string(s, opt, opt->default_val.str, dst); + break; + case AV_OPT_TYPE_IMAGE_SIZE: + set_string_image_size(s, opt, opt->default_val.str, dst); + break; + case AV_OPT_TYPE_VIDEO_RATE: + set_string_video_rate(s, opt, opt->default_val.str, dst); + break; + case AV_OPT_TYPE_BINARY: + set_string_binary(s, opt, opt->default_val.str, dst); + break; + case AV_OPT_TYPE_DICT: + /* Cannot set defaults for these types */ + break; + default: + av_log(s, AV_LOG_DEBUG, "AVOption type %d of option %s not implemented yet\n", + opt->type, opt->name); + } + } +} + +/** + * Store the value in the field in ctx that is named like key. + * ctx must be an AVClass context, storing is done using AVOptions. + * + * @param buf the string to parse, buf will be updated to point at the + * separator just after the parsed key/value pair + * @param key_val_sep a 0-terminated list of characters used to + * separate key from value + * @param pairs_sep a 0-terminated list of characters used to separate + * two pairs from each other + * @return 0 if the key/value pair has been successfully parsed and + * set, or a negative value corresponding to an AVERROR code in case + * of error: + * AVERROR(EINVAL) if the key/value pair cannot be parsed, + * the error code issued by av_opt_set() if the key/value pair + * cannot be set + */ +static int parse_key_value_pair(void *ctx, const char **buf, + const char *key_val_sep, const char *pairs_sep) +{ + char *key = av_get_token(buf, key_val_sep); + char *val; + int ret; + + if (!key) + return AVERROR(ENOMEM); + + if (*key && strspn(*buf, key_val_sep)) { + (*buf)++; + val = av_get_token(buf, pairs_sep); + if (!val) { + av_freep(&key); + return AVERROR(ENOMEM); + } + } else { + av_log(ctx, AV_LOG_ERROR, "Missing key or no key/value separator found after key '%s'\n", key); + av_free(key); + return AVERROR(EINVAL); + } + + av_log(ctx, AV_LOG_DEBUG, "Setting entry with key '%s' to value '%s'\n", key, val); + + ret = av_opt_set(ctx, key, val, AV_OPT_SEARCH_CHILDREN); + if (ret == AVERROR_OPTION_NOT_FOUND) + av_log(ctx, AV_LOG_ERROR, "Key '%s' not found.\n", key); + + av_free(key); + av_free(val); + return ret; +} + +int av_set_options_string(void *ctx, const char *opts, + const char *key_val_sep, const char *pairs_sep) +{ + int ret, count = 0; + + if (!opts) + return 0; + + while (*opts) { + if ((ret = parse_key_value_pair(ctx, &opts, key_val_sep, pairs_sep)) < 0) + return ret; + count++; + + if (*opts) + opts++; + } + + return count; +} + +#define WHITESPACES " \n\t\r" + +static int is_key_char(char c) +{ + return (unsigned)((c | 32) - 'a') < 26 || + (unsigned)(c - '0') < 10 || + c == '-' || c == '_' || c == '/' || c == '.'; +} + +/** + * Read a key from a string. + * + * The key consists of is_key_char characters and must be terminated by a + * character from the delim string; spaces are ignored. + * + * @return 0 for success (even with ellipsis), <0 for failure + */ +static int get_key(const char **ropts, const char *delim, char **rkey) +{ + const char *opts = *ropts; + const char *key_start, *key_end; + + key_start = opts += strspn(opts, WHITESPACES); + while (is_key_char(*opts)) + opts++; + key_end = opts; + opts += strspn(opts, WHITESPACES); + if (!*opts || !strchr(delim, *opts)) + return AVERROR(EINVAL); + opts++; + if (!(*rkey = av_malloc(key_end - key_start + 1))) + return AVERROR(ENOMEM); + memcpy(*rkey, key_start, key_end - key_start); + (*rkey)[key_end - key_start] = 0; + *ropts = opts; + return 0; +} + +int av_opt_get_key_value(const char **ropts, + const char *key_val_sep, const char *pairs_sep, + unsigned flags, + char **rkey, char **rval) +{ + int ret; + char *key = NULL, *val; + const char *opts = *ropts; + + if ((ret = get_key(&opts, key_val_sep, &key)) < 0 && + !(flags & AV_OPT_FLAG_IMPLICIT_KEY)) + return AVERROR(EINVAL); + if (!(val = av_get_token(&opts, pairs_sep))) { + av_free(key); + return AVERROR(ENOMEM); + } + *ropts = opts; + *rkey = key; + *rval = val; + return 0; +} + +int av_opt_set_from_string(void *ctx, const char *opts, + const char *const *shorthand, + const char *key_val_sep, const char *pairs_sep) +{ + int ret, count = 0; + const char *dummy_shorthand = NULL; + char *av_uninit(parsed_key), *av_uninit(value); + const char *key; + + if (!opts) + return 0; + if (!shorthand) + shorthand = &dummy_shorthand; + + while (*opts) { + ret = av_opt_get_key_value(&opts, key_val_sep, pairs_sep, + *shorthand ? AV_OPT_FLAG_IMPLICIT_KEY : 0, + &parsed_key, &value); + if (ret < 0) { + if (ret == AVERROR(EINVAL)) + av_log(ctx, AV_LOG_ERROR, "No option name near '%s'\n", opts); + else + av_log(ctx, AV_LOG_ERROR, "Unable to parse '%s': %s\n", opts, + av_err2str(ret)); + return ret; + } + if (*opts) + opts++; + if (parsed_key) { + key = parsed_key; + while (*shorthand) /* discard all remaining shorthand */ + shorthand++; + } else { + key = *(shorthand++); + } + + av_log(ctx, AV_LOG_DEBUG, "Setting '%s' to value '%s'\n", key, value); + if ((ret = av_opt_set(ctx, key, value, 0)) < 0) { + if (ret == AVERROR_OPTION_NOT_FOUND) + av_log(ctx, AV_LOG_ERROR, "Option '%s' not found\n", key); + av_free(value); + av_free(parsed_key); + return ret; + } + + av_free(value); + av_free(parsed_key); + count++; + } + return count; +} + +void av_opt_free(void *obj) +{ + const AVOption *o = NULL; + while ((o = av_opt_next(obj, o))) { + switch (o->type) { + case AV_OPT_TYPE_STRING: + case AV_OPT_TYPE_BINARY: + av_freep((uint8_t *)obj + o->offset); + break; + + case AV_OPT_TYPE_DICT: + av_dict_free((AVDictionary **)(((uint8_t *)obj) + o->offset)); + break; + + default: + break; + } + } +} + +int av_opt_set_dict2(void *obj, AVDictionary **options, int search_flags) +{ + AVDictionaryEntry *t = NULL; + AVDictionary *tmp = NULL; + int ret = 0; + + if (!options) + return 0; + + while ((t = av_dict_get(*options, "", t, AV_DICT_IGNORE_SUFFIX))) { + ret = av_opt_set(obj, t->key, t->value, search_flags); + if (ret == AVERROR_OPTION_NOT_FOUND) + ret = av_dict_set(&tmp, t->key, t->value, 0); + if (ret < 0) { + av_log(obj, AV_LOG_ERROR, "Error setting option %s to value %s.\n", t->key, t->value); + av_dict_free(&tmp); + return ret; + } + ret = 0; + } + av_dict_free(options); + *options = tmp; + return ret; +} + +int av_opt_set_dict(void *obj, AVDictionary **options) +{ + return av_opt_set_dict2(obj, options, 0); +} + +const AVOption *av_opt_find(void *obj, const char *name, const char *unit, + int opt_flags, int search_flags) +{ + return av_opt_find2(obj, name, unit, opt_flags, search_flags, NULL); +} + +const AVOption *av_opt_find2(void *obj, const char *name, const char *unit, + int opt_flags, int search_flags, void **target_obj) +{ + const AVClass *c; + const AVOption *o = NULL; + + if(!obj) + return NULL; + + c= *(AVClass**)obj; + + if (!c) + return NULL; + + if (search_flags & AV_OPT_SEARCH_CHILDREN) { + if (search_flags & AV_OPT_SEARCH_FAKE_OBJ) { + const AVClass *child = NULL; + while (child = av_opt_child_class_next(c, child)) + if (o = av_opt_find2(&child, name, unit, opt_flags, search_flags, NULL)) + return o; + } else { + void *child = NULL; + while (child = av_opt_child_next(obj, child)) + if (o = av_opt_find2(child, name, unit, opt_flags, search_flags, target_obj)) + return o; + } + } + + while (o = av_opt_next(obj, o)) { + if (!strcmp(o->name, name) && (o->flags & opt_flags) == opt_flags && + ((!unit && o->type != AV_OPT_TYPE_CONST) || + (unit && o->type == AV_OPT_TYPE_CONST && o->unit && !strcmp(o->unit, unit)))) { + if (target_obj) { + if (!(search_flags & AV_OPT_SEARCH_FAKE_OBJ)) + *target_obj = obj; + else + *target_obj = NULL; + } + return o; + } + } + return NULL; +} + +void *av_opt_child_next(void *obj, void *prev) +{ + const AVClass *c = *(AVClass **)obj; + if (c->child_next) + return c->child_next(obj, prev); + return NULL; +} + +const AVClass *av_opt_child_class_next(const AVClass *parent, const AVClass *prev) +{ + if (parent->child_class_next) + return parent->child_class_next(prev); + return NULL; +} + +void *av_opt_ptr(const AVClass *class, void *obj, const char *name) +{ + const AVOption *opt= av_opt_find2(&class, name, NULL, 0, AV_OPT_SEARCH_FAKE_OBJ, NULL); + if(!opt) + return NULL; + return (uint8_t*)obj + opt->offset; +} + +static int opt_size(enum AVOptionType type) +{ + switch(type) { + case AV_OPT_TYPE_BOOL: + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_FLAGS: + return sizeof(int); + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_CHANNEL_LAYOUT: + case AV_OPT_TYPE_INT64: + return sizeof(int64_t); + case AV_OPT_TYPE_DOUBLE: + return sizeof(double); + case AV_OPT_TYPE_FLOAT: + return sizeof(float); + case AV_OPT_TYPE_STRING: + return sizeof(uint8_t*); + case AV_OPT_TYPE_VIDEO_RATE: + case AV_OPT_TYPE_RATIONAL: + return sizeof(AVRational); + case AV_OPT_TYPE_BINARY: + return sizeof(uint8_t*) + sizeof(int); + case AV_OPT_TYPE_IMAGE_SIZE: + return sizeof(int[2]); + case AV_OPT_TYPE_PIXEL_FMT: + return sizeof(enum AVPixelFormat); + case AV_OPT_TYPE_SAMPLE_FMT: + return sizeof(enum AVSampleFormat); + case AV_OPT_TYPE_COLOR: + return 4; + } + return AVERROR(EINVAL); +} + +int av_opt_copy(void *dst, const void *src) +{ + const AVOption *o = NULL; + const AVClass *c; + int ret = 0; + + if (!src) + return AVERROR(EINVAL); + + c = *(AVClass **)src; + if (!c || c != *(AVClass **)dst) + return AVERROR(EINVAL); + + while ((o = av_opt_next(src, o))) { + void *field_dst = (uint8_t *)dst + o->offset; + void *field_src = (uint8_t *)src + o->offset; + uint8_t **field_dst8 = (uint8_t **)field_dst; + uint8_t **field_src8 = (uint8_t **)field_src; + + if (o->type == AV_OPT_TYPE_STRING) { + if (*field_dst8 != *field_src8) + av_freep(field_dst8); + *field_dst8 = av_strdup(*field_src8); + if (*field_src8 && !*field_dst8) + ret = AVERROR(ENOMEM); + } else if (o->type == AV_OPT_TYPE_BINARY) { + int len = *(int *)(field_src8 + 1); + if (*field_dst8 != *field_src8) + av_freep(field_dst8); + *field_dst8 = av_memdup(*field_src8, len); + if (len && !*field_dst8) { + ret = AVERROR(ENOMEM); + len = 0; + } + *(int *)(field_dst8 + 1) = len; + } else if (o->type == AV_OPT_TYPE_CONST) { + // do nothing + } else if (o->type == AV_OPT_TYPE_DICT) { + AVDictionary **sdict = (AVDictionary **) field_src; + AVDictionary **ddict = (AVDictionary **) field_dst; + if (*sdict != *ddict) + av_dict_free(ddict); + *ddict = NULL; + av_dict_copy(ddict, *sdict, 0); + if (av_dict_count(*sdict) != av_dict_count(*ddict)) + ret = AVERROR(ENOMEM); + } else { + int size = opt_size(o->type); + if (size < 0) + ret = size; + else + memcpy(field_dst, field_src, size); + } + } + return ret; +} + +int av_opt_query_ranges(AVOptionRanges **ranges_arg, void *obj, const char *key, int flags) +{ + int ret; + const AVClass *c = *(AVClass**)obj; + int (*callback)(AVOptionRanges **, void *obj, const char *key, int flags) = NULL; + + if (c->version > (52 << 16 | 11 << 8)) + callback = c->query_ranges; + + if (!callback) + callback = av_opt_query_ranges_default; + + ret = callback(ranges_arg, obj, key, flags); + if (ret >= 0) { + if (!(flags & AV_OPT_MULTI_COMPONENT_RANGE)) + ret = 1; + (*ranges_arg)->nb_components = ret; + } + return ret; +} + +int av_opt_query_ranges_default(AVOptionRanges **ranges_arg, void *obj, const char *key, int flags) +{ + AVOptionRanges *ranges = av_mallocz(sizeof(*ranges)); + AVOptionRange **range_array = av_mallocz(sizeof(void*)); + AVOptionRange *range = av_mallocz(sizeof(*range)); + const AVOption *field = av_opt_find(obj, key, NULL, 0, flags); + int ret; + + *ranges_arg = NULL; + + if (!ranges || !range || !range_array || !field) { + ret = AVERROR(ENOMEM); + goto fail; + } + + ranges->range = range_array; + ranges->range[0] = range; + ranges->nb_ranges = 1; + ranges->nb_components = 1; + range->is_range = 1; + range->value_min = field->min; + range->value_max = field->max; + + switch (field->type) { + case AV_OPT_TYPE_BOOL: + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_PIXEL_FMT: + case AV_OPT_TYPE_SAMPLE_FMT: + case AV_OPT_TYPE_FLOAT: + case AV_OPT_TYPE_DOUBLE: + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_COLOR: + case AV_OPT_TYPE_CHANNEL_LAYOUT: + break; + case AV_OPT_TYPE_STRING: + range->component_min = 0; + range->component_max = 0x10FFFF; // max unicode value + range->value_min = -1; + range->value_max = INT_MAX; + break; + case AV_OPT_TYPE_RATIONAL: + range->component_min = INT_MIN; + range->component_max = INT_MAX; + break; + case AV_OPT_TYPE_IMAGE_SIZE: + range->component_min = 0; + range->component_max = INT_MAX/128/8; + range->value_min = 0; + range->value_max = INT_MAX/8; + break; + case AV_OPT_TYPE_VIDEO_RATE: + range->component_min = 1; + range->component_max = INT_MAX; + range->value_min = 1; + range->value_max = INT_MAX; + break; + default: + ret = AVERROR(ENOSYS); + goto fail; + } + + *ranges_arg = ranges; + return 1; +fail: + av_free(ranges); + av_free(range); + av_free(range_array); + return ret; +} + +void av_opt_freep_ranges(AVOptionRanges **rangesp) +{ + int i; + AVOptionRanges *ranges = *rangesp; + + if (!ranges) + return; + + for (i = 0; i < ranges->nb_ranges * ranges->nb_components; i++) { + AVOptionRange *range = ranges->range[i]; + if (range) { + av_freep(&range->str); + av_freep(&ranges->range[i]); + } + } + av_freep(&ranges->range); + av_freep(rangesp); +} + +int av_opt_is_set_to_default(void *obj, const AVOption *o) +{ + int64_t i64; + double d, d2; + float f; + AVRational q; + int ret, w, h; + char *str; + void *dst; + + if (!o || !obj) + return AVERROR(EINVAL); + + dst = ((uint8_t*)obj) + o->offset; + + switch (o->type) { + case AV_OPT_TYPE_CONST: + return 1; + case AV_OPT_TYPE_BOOL: + case AV_OPT_TYPE_FLAGS: + case AV_OPT_TYPE_PIXEL_FMT: + case AV_OPT_TYPE_SAMPLE_FMT: + case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_CHANNEL_LAYOUT: + case AV_OPT_TYPE_DURATION: + case AV_OPT_TYPE_INT64: + read_number(o, dst, NULL, NULL, &i64); + return o->default_val.i64 == i64; + case AV_OPT_TYPE_STRING: + str = *(char **)dst; + if (str == o->default_val.str) //2 NULLs + return 1; + if (!str || !o->default_val.str) //1 NULL + return 0; + return !strcmp(str, o->default_val.str); + case AV_OPT_TYPE_DOUBLE: + read_number(o, dst, &d, NULL, NULL); + return o->default_val.dbl == d; + case AV_OPT_TYPE_FLOAT: + read_number(o, dst, &d, NULL, NULL); + f = o->default_val.dbl; + d2 = f; + return d2 == d; + case AV_OPT_TYPE_RATIONAL: + q = av_d2q(o->default_val.dbl, INT_MAX); + return !av_cmp_q(*(AVRational*)dst, q); + case AV_OPT_TYPE_BINARY: { + struct { + uint8_t *data; + int size; + } tmp = {0}; + int opt_size = *(int *)((void **)dst + 1); + void *opt_ptr = *(void **)dst; + if (!opt_size && (!o->default_val.str || !strlen(o->default_val.str))) + return 1; + if (!opt_size || !o->default_val.str || !strlen(o->default_val.str )) + return 0; + if (opt_size != strlen(o->default_val.str) / 2) + return 0; + ret = set_string_binary(NULL, NULL, o->default_val.str, &tmp.data); + if (!ret) + ret = !memcmp(opt_ptr, tmp.data, tmp.size); + av_free(tmp.data); + return ret; + } + case AV_OPT_TYPE_DICT: + /* Binary and dict have not default support yet. Any pointer is not default. */ + return !!(*(void **)dst); + case AV_OPT_TYPE_IMAGE_SIZE: + if (!o->default_val.str || !strcmp(o->default_val.str, "none")) + w = h = 0; + else if ((ret = av_parse_video_size(&w, &h, o->default_val.str)) < 0) + return ret; + return (w == *(int *)dst) && (h == *((int *)dst+1)); + case AV_OPT_TYPE_VIDEO_RATE: + q = (AVRational){0, 0}; + if (o->default_val.str) { + if ((ret = av_parse_video_rate(&q, o->default_val.str)) < 0) + return ret; + } + return !av_cmp_q(*(AVRational*)dst, q); + case AV_OPT_TYPE_COLOR: { + uint8_t color[4] = {0, 0, 0, 0}; + if (o->default_val.str) { + if ((ret = av_parse_color(color, o->default_val.str, -1, NULL)) < 0) + return ret; + } + return !memcmp(color, dst, sizeof(color)); + } + default: + av_log(obj, AV_LOG_WARNING, "Not supported option type: %d, option name: %s\n", o->type, o->name); + break; + } + return AVERROR_PATCHWELCOME; +} + +int av_opt_is_set_to_default_by_name(void *obj, const char *name, int search_flags) +{ + const AVOption *o; + void *target; + if (!obj) + return AVERROR(EINVAL); + o = av_opt_find2(obj, name, NULL, 0, search_flags, &target); + if (!o) + return AVERROR_OPTION_NOT_FOUND; + return av_opt_is_set_to_default(target, o); +} + +int av_opt_serialize(void *obj, int opt_flags, int flags, char **buffer, + const char key_val_sep, const char pairs_sep) +{ + const AVOption *o = NULL; + uint8_t *buf; + AVBPrint bprint; + int ret, cnt = 0; + const char special_chars[] = {pairs_sep, key_val_sep, '\0'}; + + if (pairs_sep == '\0' || key_val_sep == '\0' || pairs_sep == key_val_sep || + pairs_sep == '\\' || key_val_sep == '\\') { + av_log(obj, AV_LOG_ERROR, "Invalid separator(s) found."); + return AVERROR(EINVAL); + } + + if (!obj || !buffer) + return AVERROR(EINVAL); + + *buffer = NULL; + av_bprint_init(&bprint, 64, AV_BPRINT_SIZE_UNLIMITED); + + while (o = av_opt_next(obj, o)) { + if (o->type == AV_OPT_TYPE_CONST) + continue; + if ((flags & AV_OPT_SERIALIZE_OPT_FLAGS_EXACT) && o->flags != opt_flags) + continue; + else if (((o->flags & opt_flags) != opt_flags)) + continue; + if (flags & AV_OPT_SERIALIZE_SKIP_DEFAULTS && av_opt_is_set_to_default(obj, o) > 0) + continue; + if ((ret = av_opt_get(obj, o->name, 0, &buf)) < 0) { + av_bprint_finalize(&bprint, NULL); + return ret; + } + if (buf) { + if (cnt++) + av_bprint_append_data(&bprint, &pairs_sep, 1); + av_bprint_escape(&bprint, o->name, special_chars, AV_ESCAPE_MODE_BACKSLASH, 0); + av_bprint_append_data(&bprint, &key_val_sep, 1); + av_bprint_escape(&bprint, buf, special_chars, AV_ESCAPE_MODE_BACKSLASH, 0); + av_freep(&buf); + } + } + av_bprint_finalize(&bprint, buffer); + return 0; +} From 9bbe2b99fa05a7f70293e9c90de226a025a46f84 Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Tue, 24 Oct 2017 21:44:23 +0200 Subject: [PATCH 05/69] Bug 1366201 - P3. Update ffvp9/ffvp8 to 3.4 branch. r=gerald Structure of code was slightly modified so that it should be no longer necessary to re-generate the config_*.h files, greatly simplifying the resync process. MozReview-Commit-ID: Ap6HpJAANT6 --HG-- extra : rebase_source : 52e5e3b9b2401644dc536d746219e5f3864c600c --- media/ffvpx/COPYING.GPLv2 | 339 -- media/ffvpx/COPYING.GPLv3 | 674 --- media/ffvpx/CREDITS | 6 - media/ffvpx/Changelog | 1476 ------ media/ffvpx/FILES | 293 ++ media/ffvpx/INSTALL.md | 17 - media/ffvpx/LICENSE.md | 114 - media/ffvpx/MAINTAINERS | 619 --- media/ffvpx/README.md | 49 - media/ffvpx/README_MOZILLA | 14 +- media/ffvpx/RELEASE | 1 - media/ffvpx/RELEASE_NOTES | 15 - media/ffvpx/compat/atomics/win32/stdatomic.h | 181 + media/ffvpx/compat/w32pthreads.h | 38 +- media/ffvpx/config_common.h | 1 + media/ffvpx/config_darwin32.h | 1570 ------- media/ffvpx/config_darwin64.asm | 1570 ------- media/ffvpx/config_darwin64.h | 1570 ------- media/ffvpx/config_unix32.h | 1570 ------- media/ffvpx/config_unix64.asm | 1570 ------- media/ffvpx/config_unix64.h | 1574 +------ media/ffvpx/config_win32.asm | 1570 ------- media/ffvpx/config_win32.h | 1570 ------- media/ffvpx/config_win64.asm | 1570 ------- media/ffvpx/config_win64.h | 1570 ------- media/ffvpx/defaults_disabled.asm | 1674 +++++++ media/ffvpx/defaults_disabled.h | 1674 +++++++ media/ffvpx/ffvpxcommon.mozbuild | 4 +- media/ffvpx/libavcodec/allcodecs.c | 81 +- media/ffvpx/libavcodec/avcodec.h | 322 +- media/ffvpx/libavcodec/avdct.h | 84 - media/ffvpx/libavcodec/avpacket.c | 64 +- media/ffvpx/libavcodec/bitstream.c | 20 +- media/ffvpx/libavcodec/bitstream_filter.c | 185 + media/ffvpx/libavcodec/bitstream_filters.c | 91 + media/ffvpx/libavcodec/blockdsp.h | 3 +- media/ffvpx/libavcodec/bsf_list.c | 3 + media/ffvpx/libavcodec/bytestream.h | 2 +- media/ffvpx/libavcodec/codec_desc.c | 176 +- media/ffvpx/libavcodec/dct.h | 5 +- media/ffvpx/libavcodec/decode.c | 1756 ++++++++ media/ffvpx/libavcodec/decode.h | 39 + media/ffvpx/libavcodec/dummy_funcs.c | 74 +- media/ffvpx/libavcodec/error_resilience.h | 4 +- media/ffvpx/libavcodec/flac.c | 11 +- media/ffvpx/libavcodec/flac.h | 4 +- media/ffvpx/libavcodec/flac_parser.c | 4 +- media/ffvpx/libavcodec/flacdec.c | 30 +- media/ffvpx/libavcodec/flacdsp.c | 12 +- media/ffvpx/libavcodec/flacdsp.h | 1 + media/ffvpx/libavcodec/flacdsp_template.c | 2 +- media/ffvpx/libavcodec/get_bits.h | 19 + media/ffvpx/libavcodec/golomb.h | 55 +- media/ffvpx/libavcodec/h264chroma.h | 3 +- media/ffvpx/libavcodec/hpeldsp.h | 2 + media/ffvpx/libavcodec/hwaccel.h | 24 + media/ffvpx/libavcodec/idctdsp.h | 20 +- media/ffvpx/libavcodec/internal.h | 70 +- media/ffvpx/libavcodec/mathops.h | 19 +- media/ffvpx/libavcodec/me_cmp.h | 2 +- media/ffvpx/libavcodec/moz.build | 11 + media/ffvpx/libavcodec/mpegvideo.h | 3 +- media/ffvpx/libavcodec/null_bsf.c | 43 + media/ffvpx/libavcodec/options.c | 46 +- media/ffvpx/libavcodec/options_table.h | 60 +- media/ffvpx/libavcodec/parser.c | 7 +- media/ffvpx/libavcodec/pixblockdsp.h | 15 +- media/ffvpx/libavcodec/pthread_frame.c | 317 +- media/ffvpx/libavcodec/pthread_slice.c | 146 +- media/ffvpx/libavcodec/put_bits.h | 109 +- media/ffvpx/libavcodec/ratecontrol.h | 4 - media/ffvpx/libavcodec/raw.c | 14 + media/ffvpx/libavcodec/thread.h | 6 +- media/ffvpx/libavcodec/utils.c | 2036 +-------- media/ffvpx/libavcodec/version.h | 23 +- media/ffvpx/libavcodec/videodsp.c | 2 + media/ffvpx/libavcodec/videodsp.h | 1 + media/ffvpx/libavcodec/vlc.h | 20 +- media/ffvpx/libavcodec/vorbis_parser.h | 3 - media/ffvpx/libavcodec/vp3dsp.h | 10 +- media/ffvpx/libavcodec/vp56.h | 12 +- media/ffvpx/libavcodec/vp56dsp.h | 18 +- media/ffvpx/libavcodec/vp56rac.c | 5 +- media/ffvpx/libavcodec/vp8.c | 158 +- media/ffvpx/libavcodec/vp8.h | 31 +- media/ffvpx/libavcodec/vp8_parser.c | 49 +- media/ffvpx/libavcodec/vp8dsp.c | 38 +- media/ffvpx/libavcodec/vp8dsp.h | 4 +- media/ffvpx/libavcodec/vp9.c | 3994 +++-------------- media/ffvpx/libavcodec/vp9.h | 142 +- media/ffvpx/libavcodec/vp9_mc_template.c | 210 +- media/ffvpx/libavcodec/vp9block.c | 1449 ++++++ media/ffvpx/libavcodec/vp9data.c | 2247 ++++++++++ media/ffvpx/libavcodec/vp9data.h | 2290 +--------- media/ffvpx/libavcodec/vp9dec.h | 240 + media/ffvpx/libavcodec/vp9dsp.c | 58 + media/ffvpx/libavcodec/vp9dsp.h | 10 +- media/ffvpx/libavcodec/vp9dsp_template.c | 63 +- media/ffvpx/libavcodec/vp9lpf.c | 202 + media/ffvpx/libavcodec/vp9mvs.c | 364 ++ media/ffvpx/libavcodec/vp9prob.c | 274 ++ media/ffvpx/libavcodec/vp9recon.c | 644 +++ media/ffvpx/libavcodec/vp9shared.h | 169 + media/ffvpx/libavcodec/x86/constants.h | 1 + media/ffvpx/libavcodec/x86/flacdsp_init.c | 4 +- media/ffvpx/libavcodec/x86/h264_intrapred.asm | 102 +- .../libavcodec/x86/h264_intrapred_10bit.asm | 77 +- .../libavcodec/x86/h264_intrapred_init.c | 7 + media/ffvpx/libavcodec/x86/videodsp.asm | 2 +- media/ffvpx/libavcodec/x86/videodsp_init.c | 8 +- media/ffvpx/libavcodec/x86/vp8dsp.asm | 31 +- media/ffvpx/libavcodec/x86/vp8dsp_init.c | 21 +- .../libavcodec/x86/vp8dsp_loopfilter.asm | 6 +- media/ffvpx/libavcodec/x86/vp9dsp_init.c | 16 +- .../ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c | 18 +- .../x86/vp9dsp_init_16bpp_template.c | 8 +- .../libavcodec/x86/vp9intrapred_16bpp.asm | 257 ++ media/ffvpx/libavcodec/x86/vp9itxfm.asm | 188 +- media/ffvpx/libavcodec/x86/vp9mc.asm | 7 +- media/ffvpx/libavutil/atomic_gcc.h | 17 - media/ffvpx/libavutil/attributes.h | 5 +- media/ffvpx/libavutil/avstring.c | 23 + media/ffvpx/libavutil/avstring.h | 5 + media/ffvpx/libavutil/avutil.h | 20 + media/ffvpx/libavutil/avutil.symbols | 8 +- media/ffvpx/libavutil/buffer.c | 96 +- media/ffvpx/libavutil/buffer.h | 7 +- media/ffvpx/libavutil/buffer_internal.h | 7 +- media/ffvpx/libavutil/channel_layout.c | 22 + media/ffvpx/libavutil/channel_layout.h | 21 +- media/ffvpx/libavutil/cpu.c | 61 +- media/ffvpx/libavutil/cpu.h | 16 +- media/ffvpx/libavutil/cpu_internal.h | 5 + media/ffvpx/libavutil/display.h | 27 + media/ffvpx/libavutil/dummy_funcs.c | 5 + media/ffvpx/libavutil/eval.c | 18 +- media/ffvpx/libavutil/float_dsp.c | 9 + media/ffvpx/libavutil/float_dsp.h | 16 + media/ffvpx/libavutil/frame.c | 173 +- media/ffvpx/libavutil/frame.h | 130 +- media/ffvpx/libavutil/hwcontext.h | 161 +- media/ffvpx/libavutil/imgutils.c | 271 +- media/ffvpx/libavutil/imgutils.h | 70 +- media/ffvpx/libavutil/imgutils_internal.h | 30 + media/ffvpx/libavutil/internal.h | 15 +- media/ffvpx/libavutil/intreadwrite.h | 29 +- media/ffvpx/libavutil/log.c | 6 +- media/ffvpx/libavutil/mathematics.c | 4 +- media/ffvpx/libavutil/mem.c | 36 +- media/ffvpx/libavutil/mem.h | 5 +- media/ffvpx/libavutil/moz.build | 1 + media/ffvpx/libavutil/opt.h | 1 + media/ffvpx/libavutil/parseutils.c | 28 + media/ffvpx/libavutil/pixdesc.c | 314 +- media/ffvpx/libavutil/pixdesc.h | 36 + media/ffvpx/libavutil/pixfmt.h | 68 +- media/ffvpx/libavutil/reverse.h | 28 + media/ffvpx/libavutil/slicethread.c | 259 ++ media/ffvpx/libavutil/slicethread.h | 52 + media/ffvpx/libavutil/thread.h | 9 +- media/ffvpx/libavutil/threadmessage.c | 2 +- media/ffvpx/libavutil/time.c | 18 +- media/ffvpx/libavutil/timecode.c | 3 +- media/ffvpx/libavutil/timecode.h | 2 +- media/ffvpx/libavutil/timer.h | 71 +- media/ffvpx/libavutil/utils.c | 25 +- media/ffvpx/libavutil/version.h | 6 +- media/ffvpx/libavutil/x86/cpu.c | 37 +- media/ffvpx/libavutil/x86/cpu.h | 6 + media/ffvpx/libavutil/x86/emms.asm | 4 +- media/ffvpx/libavutil/x86/emms.h | 4 +- media/ffvpx/libavutil/x86/float_dsp.asm | 86 +- media/ffvpx/libavutil/x86/float_dsp_init.c | 17 +- media/ffvpx/libavutil/x86/imgutils.asm | 53 + media/ffvpx/libavutil/x86/imgutils_init.c | 49 + media/ffvpx/libavutil/x86/moz.build | 2 + media/ffvpx/libavutil/x86/x86inc.asm | 92 +- media/ffvpx/libavutil/x86/x86util.asm | 161 +- 178 files changed, 17112 insertions(+), 28020 deletions(-) delete mode 100644 media/ffvpx/COPYING.GPLv2 delete mode 100644 media/ffvpx/COPYING.GPLv3 delete mode 100644 media/ffvpx/CREDITS delete mode 100644 media/ffvpx/Changelog create mode 100644 media/ffvpx/FILES delete mode 100644 media/ffvpx/INSTALL.md delete mode 100644 media/ffvpx/LICENSE.md delete mode 100644 media/ffvpx/MAINTAINERS delete mode 100644 media/ffvpx/README.md delete mode 100644 media/ffvpx/RELEASE delete mode 100644 media/ffvpx/RELEASE_NOTES create mode 100644 media/ffvpx/compat/atomics/win32/stdatomic.h create mode 100644 media/ffvpx/defaults_disabled.asm create mode 100644 media/ffvpx/defaults_disabled.h delete mode 100644 media/ffvpx/libavcodec/avdct.h create mode 100644 media/ffvpx/libavcodec/bitstream_filter.c create mode 100644 media/ffvpx/libavcodec/bitstream_filters.c create mode 100644 media/ffvpx/libavcodec/bsf_list.c create mode 100644 media/ffvpx/libavcodec/decode.c create mode 100644 media/ffvpx/libavcodec/decode.h create mode 100644 media/ffvpx/libavcodec/hwaccel.h create mode 100644 media/ffvpx/libavcodec/null_bsf.c create mode 100644 media/ffvpx/libavcodec/vp9block.c create mode 100644 media/ffvpx/libavcodec/vp9data.c create mode 100644 media/ffvpx/libavcodec/vp9dec.h create mode 100644 media/ffvpx/libavcodec/vp9lpf.c create mode 100644 media/ffvpx/libavcodec/vp9mvs.c create mode 100644 media/ffvpx/libavcodec/vp9prob.c create mode 100644 media/ffvpx/libavcodec/vp9recon.c create mode 100644 media/ffvpx/libavcodec/vp9shared.h create mode 100644 media/ffvpx/libavutil/imgutils_internal.h create mode 100644 media/ffvpx/libavutil/reverse.h create mode 100644 media/ffvpx/libavutil/slicethread.c create mode 100644 media/ffvpx/libavutil/slicethread.h create mode 100644 media/ffvpx/libavutil/x86/imgutils.asm create mode 100644 media/ffvpx/libavutil/x86/imgutils_init.c diff --git a/media/ffvpx/COPYING.GPLv2 b/media/ffvpx/COPYING.GPLv2 deleted file mode 100644 index d159169d1050..000000000000 --- a/media/ffvpx/COPYING.GPLv2 +++ /dev/null @@ -1,339 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 2, June 1991 - - Copyright (C) 1989, 1991 Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The licenses for most software are designed to take away your -freedom to share and change it. By contrast, the GNU General Public -License is intended to guarantee your freedom to share and change free -software--to make sure the software is free for all its users. This -General Public License applies to most of the Free Software -Foundation's software and to any other program whose authors commit to -using it. (Some other Free Software Foundation software is covered by -the GNU Lesser General Public License instead.) You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -this service if you wish), that you receive source code or can get it -if you want it, that you can change the software or use pieces of it -in new free programs; and that you know you can do these things. - - To protect your rights, we need to make restrictions that forbid -anyone to deny you these rights or to ask you to surrender the rights. -These restrictions translate to certain responsibilities for you if you -distribute copies of the software, or if you modify it. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must give the recipients all the rights that -you have. You must make sure that they, too, receive or can get the -source code. And you must show them these terms so they know their -rights. - - We protect your rights with two steps: (1) copyright the software, and -(2) offer you this license which gives you legal permission to copy, -distribute and/or modify the software. - - Also, for each author's protection and ours, we want to make certain -that everyone understands that there is no warranty for this free -software. If the software is modified by someone else and passed on, we -want its recipients to know that what they have is not the original, so -that any problems introduced by others will not reflect on the original -authors' reputations. - - Finally, any free program is threatened constantly by software -patents. We wish to avoid the danger that redistributors of a free -program will individually obtain patent licenses, in effect making the -program proprietary. To prevent this, we have made it clear that any -patent must be licensed for everyone's free use or not licensed at all. - - The precise terms and conditions for copying, distribution and -modification follow. - - GNU GENERAL PUBLIC LICENSE - TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - 0. This License applies to any program or other work which contains -a notice placed by the copyright holder saying it may be distributed -under the terms of this General Public License. The "Program", below, -refers to any such program or work, and a "work based on the Program" -means either the Program or any derivative work under copyright law: -that is to say, a work containing the Program or a portion of it, -either verbatim or with modifications and/or translated into another -language. (Hereinafter, translation is included without limitation in -the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not -covered by this License; they are outside its scope. The act of -running the Program is not restricted, and the output from the Program -is covered only if its contents constitute a work based on the -Program (independent of having been made by running the Program). -Whether that is true depends on what the Program does. - - 1. You may copy and distribute verbatim copies of the Program's -source code as you receive it, in any medium, provided that you -conspicuously and appropriately publish on each copy an appropriate -copyright notice and disclaimer of warranty; keep intact all the -notices that refer to this License and to the absence of any warranty; -and give any other recipients of the Program a copy of this License -along with the Program. - -You may charge a fee for the physical act of transferring a copy, and -you may at your option offer warranty protection in exchange for a fee. - - 2. You may modify your copy or copies of the Program or any portion -of it, thus forming a work based on the Program, and copy and -distribute such modifications or work under the terms of Section 1 -above, provided that you also meet all of these conditions: - - a) You must cause the modified files to carry prominent notices - stating that you changed the files and the date of any change. - - b) You must cause any work that you distribute or publish, that in - whole or in part contains or is derived from the Program or any - part thereof, to be licensed as a whole at no charge to all third - parties under the terms of this License. - - c) If the modified program normally reads commands interactively - when run, you must cause it, when started running for such - interactive use in the most ordinary way, to print or display an - announcement including an appropriate copyright notice and a - notice that there is no warranty (or else, saying that you provide - a warranty) and that users may redistribute the program under - these conditions, and telling the user how to view a copy of this - License. (Exception: if the Program itself is interactive but - does not normally print such an announcement, your work based on - the Program is not required to print an announcement.) - -These requirements apply to the modified work as a whole. If -identifiable sections of that work are not derived from the Program, -and can be reasonably considered independent and separate works in -themselves, then this License, and its terms, do not apply to those -sections when you distribute them as separate works. But when you -distribute the same sections as part of a whole which is a work based -on the Program, the distribution of the whole must be on the terms of -this License, whose permissions for other licensees extend to the -entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest -your rights to work written entirely by you; rather, the intent is to -exercise the right to control the distribution of derivative or -collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program -with the Program (or with a work based on the Program) on a volume of -a storage or distribution medium does not bring the other work under -the scope of this License. - - 3. You may copy and distribute the Program (or a work based on it, -under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you also do one of the following: - - a) Accompany it with the complete corresponding machine-readable - source code, which must be distributed under the terms of Sections - 1 and 2 above on a medium customarily used for software interchange; or, - - b) Accompany it with a written offer, valid for at least three - years, to give any third party, for a charge no more than your - cost of physically performing source distribution, a complete - machine-readable copy of the corresponding source code, to be - distributed under the terms of Sections 1 and 2 above on a medium - customarily used for software interchange; or, - - c) Accompany it with the information you received as to the offer - to distribute corresponding source code. (This alternative is - allowed only for noncommercial distribution and only if you - received the program in object code or executable form with such - an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for -making modifications to it. For an executable work, complete source -code means all the source code for all modules it contains, plus any -associated interface definition files, plus the scripts used to -control compilation and installation of the executable. However, as a -special exception, the source code distributed need not include -anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component -itself accompanies the executable. - -If distribution of executable or object code is made by offering -access to copy from a designated place, then offering equivalent -access to copy the source code from the same place counts as -distribution of the source code, even though third parties are not -compelled to copy the source along with the object code. - - 4. You may not copy, modify, sublicense, or distribute the Program -except as expressly provided under this License. Any attempt -otherwise to copy, modify, sublicense or distribute the Program is -void, and will automatically terminate your rights under this License. -However, parties who have received copies, or rights, from you under -this License will not have their licenses terminated so long as such -parties remain in full compliance. - - 5. You are not required to accept this License, since you have not -signed it. However, nothing else grants you permission to modify or -distribute the Program or its derivative works. These actions are -prohibited by law if you do not accept this License. Therefore, by -modifying or distributing the Program (or any work based on the -Program), you indicate your acceptance of this License to do so, and -all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - - 6. Each time you redistribute the Program (or any work based on the -Program), the recipient automatically receives a license from the -original licensor to copy, distribute or modify the Program subject to -these terms and conditions. You may not impose any further -restrictions on the recipients' exercise of the rights granted herein. -You are not responsible for enforcing compliance by third parties to -this License. - - 7. If, as a consequence of a court judgment or allegation of patent -infringement or for any other reason (not limited to patent issues), -conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot -distribute so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you -may not distribute the Program at all. For example, if a patent -license would not permit royalty-free redistribution of the Program by -all those who receive copies directly or indirectly through you, then -the only way you could satisfy both it and this License would be to -refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under -any particular circumstance, the balance of the section is intended to -apply and the section as a whole is intended to apply in other -circumstances. - -It is not the purpose of this section to induce you to infringe any -patents or other property right claims or to contest validity of any -such claims; this section has the sole purpose of protecting the -integrity of the free software distribution system, which is -implemented by public license practices. Many people have made -generous contributions to the wide range of software distributed -through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing -to distribute software through any other system and a licensee cannot -impose that choice. - -This section is intended to make thoroughly clear what is believed to -be a consequence of the rest of this License. - - 8. If the distribution and/or use of the Program is restricted in -certain countries either by patents or by copyrighted interfaces, the -original copyright holder who places the Program under this License -may add an explicit geographical distribution limitation excluding -those countries, so that distribution is permitted only in or among -countries not thus excluded. In such case, this License incorporates -the limitation as if written in the body of this License. - - 9. The Free Software Foundation may publish revised and/or new versions -of the General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - -Each version is given a distinguishing version number. If the Program -specifies a version number of this License which applies to it and "any -later version", you have the option of following the terms and conditions -either of that version or of any later version published by the Free -Software Foundation. If the Program does not specify a version number of -this License, you may choose any version ever published by the Free Software -Foundation. - - 10. If you wish to incorporate parts of the Program into other free -programs whose distribution conditions are different, write to the author -to ask for permission. For software which is copyrighted by the Free -Software Foundation, write to the Free Software Foundation; we sometimes -make exceptions for this. Our decision will be guided by the two goals -of preserving the free status of all derivatives of our free software and -of promoting the sharing and reuse of software generally. - - NO WARRANTY - - 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY -FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN -OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES -PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED -OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE -PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, -REPAIR OR CORRECTION. - - 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR -REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, -INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING -OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED -TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY -YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER -PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE -POSSIBILITY OF SUCH DAMAGES. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -convey the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along - with this program; if not, write to the Free Software Foundation, Inc., - 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this -when it starts in an interactive mode: - - Gnomovision version 69, Copyright (C) year name of author - Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may -be called something other than `show w' and `show c'; they could even be -mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your -school, if any, to sign a "copyright disclaimer" for the program, if -necessary. Here is a sample; alter the names: - - Yoyodyne, Inc., hereby disclaims all copyright interest in the program - `Gnomovision' (which makes passes at compilers) written by James Hacker. - - , 1 April 1989 - Ty Coon, President of Vice - -This General Public License does not permit incorporating your program into -proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. diff --git a/media/ffvpx/COPYING.GPLv3 b/media/ffvpx/COPYING.GPLv3 deleted file mode 100644 index 94a9ed024d38..000000000000 --- a/media/ffvpx/COPYING.GPLv3 +++ /dev/null @@ -1,674 +0,0 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU General Public License is a free, copyleft license for -software and other kinds of works. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see -. - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/media/ffvpx/CREDITS b/media/ffvpx/CREDITS deleted file mode 100644 index e29f0b853c91..000000000000 --- a/media/ffvpx/CREDITS +++ /dev/null @@ -1,6 +0,0 @@ -See the Git history of the project (git://source.ffmpeg.org/ffmpeg) to -get the names of people who have contributed to FFmpeg. - -To check the log, you can type the command "git log" in the FFmpeg -source directory, or browse the online repository at -http://source.ffmpeg.org. diff --git a/media/ffvpx/Changelog b/media/ffvpx/Changelog deleted file mode 100644 index 2e1cd36f5fe9..000000000000 --- a/media/ffvpx/Changelog +++ /dev/null @@ -1,1476 +0,0 @@ -Entries are sorted chronologically from oldest to youngest within each release, -releases are sorted from youngest to oldest. - -version 3.0: -- Common Encryption (CENC) MP4 encoding and decoding support -- DXV decoding -- extrastereo filter -- ocr filter -- alimiter filter -- stereowiden filter -- stereotools filter -- rubberband filter -- tremolo filter -- agate filter -- chromakey filter -- maskedmerge filter -- Screenpresso SPV1 decoding -- chromaprint fingerprinting muxer -- ffplay dynamic volume control -- displace filter -- selectivecolor filter -- extensive native AAC encoder improvements and removal of experimental flag -- ADPCM PSX decoder -- 3dostr, dcstr, fsb, genh, vag, xvag, ads, msf, svag & vpk demuxer -- zscale filter -- wve demuxer -- zero-copy Intel QSV transcoding in ffmpeg -- shuffleframes filter -- SDX2 DPCM decoder -- vibrato filter -- innoHeim/Rsupport Screen Capture Codec decoder -- ADPCM AICA decoder -- Interplay ACM demuxer and audio decoder -- XMA1 & XMA2 decoder -- realtime filter -- anoisesrc audio filter source -- IVR demuxer -- compensationdelay filter -- acompressor filter -- support encoding 16-bit RLE SGI images -- apulsator filter -- sidechaingate audio filter -- mipsdspr1 option has been renamed to mipsdsp -- aemphasis filter -- mips32r5 option has been removed -- mips64r6 option has been removed -- DXVA2-accelerated VP9 decoding -- SOFAlizer: virtual binaural acoustics filter -- VAAPI VP9 hwaccel -- audio high-order multiband parametric equalizer -- automatic bitstream filtering -- showspectrumpic filter -- libstagefright support removed -- spectrumsynth filter -- ahistogram filter -- only seek with the right mouse button in ffplay -- toggle full screen when double-clicking with the left mouse button in ffplay -- afftfilt filter -- convolution filter -- libquvi support removed -- support for dvaudio in wav and avi -- libaacplus and libvo-aacenc support removed -- Cineform HD decoder -- new DCA decoder with full support for DTS-HD extensions -- significant performance improvements in Windows Television (WTV) demuxer -- nnedi deinterlacer -- streamselect video and astreamselect audio filter -- swaprect filter -- metadata video and ametadata audio filter -- SMPTE VC-2 HQ profile support for the Dirac decoder -- SMPTE VC-2 native encoder supporting the HQ profile - - -version 2.8: -- colorkey video filter -- BFSTM/BCSTM demuxer -- little-endian ADPCM_THP decoder -- Hap decoder and encoder -- DirectDraw Surface image/texture decoder -- ssim filter -- optional new ASF demuxer -- showvolume filter -- Many improvements to the JPEG 2000 decoder -- Go2Meeting decoding support -- adrawgraph audio and drawgraph video filter -- removegrain video filter -- Intel QSV-accelerated MPEG-2 video and HEVC encoding -- Intel QSV-accelerated MPEG-2 video and HEVC decoding -- Intel QSV-accelerated VC-1 video decoding -- libkvazaar HEVC encoder -- erosion, dilation, deflate and inflate video filters -- Dynamic Audio Normalizer as dynaudnorm filter -- Reverse video and areverse audio filter -- Random filter -- deband filter -- AAC fixed-point decoding -- sidechaincompress audio filter -- bitstream filter for converting HEVC from MP4 to Annex B -- acrossfade audio filter -- allyuv and allrgb video sources -- atadenoise video filter -- OS X VideoToolbox support -- aphasemeter filter -- showfreqs filter -- vectorscope filter -- waveform filter -- hstack and vstack filter -- Support DNx100 (1440x1080@8) -- VAAPI hevc hwaccel -- VDPAU hevc hwaccel -- framerate filter -- Switched default encoders for webm to VP9 and Opus -- Removed experimental flag from the JPEG 2000 encoder - - -version 2.7: -- FFT video filter -- TDSC decoder -- DTS lossless extension (XLL) decoding (not lossless, disabled by default) -- showwavespic filter -- DTS decoding through libdcadec -- Drop support for nvenc API before 5.0 -- nvenc HEVC encoder -- Detelecine filter -- Intel QSV-accelerated H.264 encoding -- MMAL-accelerated H.264 decoding -- basic APNG encoder and muxer with default extension "apng" -- unpack DivX-style packed B-frames in MPEG-4 bitstream filter -- WebM Live Chunk Muxer -- nvenc level and tier options -- chorus filter -- Canopus HQ/HQA decoder -- Automatically rotate videos based on metadata in ffmpeg -- improved Quickdraw compatibility -- VP9 high bit-depth and extended colorspaces decoding support -- WebPAnimEncoder API when available for encoding and muxing WebP -- Direct3D11-accelerated decoding -- Support Secure Transport -- Multipart JPEG demuxer - - -version 2.6: -- nvenc encoder -- 10bit spp filter -- colorlevels filter -- RIFX format for *.wav files -- RTP/mpegts muxer -- non continuous cache protocol support -- tblend filter -- cropdetect support for non 8bpp, absolute (if limit >= 1) and relative (if limit < 1.0) threshold -- Camellia symmetric block cipher -- OpenH264 encoder wrapper -- VOC seeking support -- Closed caption Decoder -- fspp, uspp, pp7 MPlayer postprocessing filters ported to native filters -- showpalette filter -- Twofish symmetric block cipher -- Support DNx100 (960x720@8) -- eq2 filter ported from libmpcodecs as eq filter -- removed libmpcodecs -- Changed default DNxHD colour range in QuickTime .mov derivatives to mpeg range -- ported softpulldown filter from libmpcodecs as repeatfields filter -- dcshift filter -- RTP depacketizer for loss tolerant payload format for MP3 audio (RFC 5219) -- RTP depacketizer for AC3 payload format (RFC 4184) -- palettegen and paletteuse filters -- VP9 RTP payload format (draft 0) experimental depacketizer -- RTP depacketizer for DV (RFC 6469) -- DXVA2-accelerated HEVC decoding -- AAC ELD 480 decoding -- Intel QSV-accelerated H.264 decoding -- DSS SP decoder and DSS demuxer -- Fix stsd atom corruption in DNxHD QuickTimes -- Canopus HQX decoder -- RTP depacketization of T.140 text (RFC 4103) -- Port MIPS optimizations to 64-bit - - -version 2.5: -- HEVC/H.265 RTP payload format (draft v6) packetizer -- SUP/PGS subtitle demuxer -- ffprobe -show_pixel_formats option -- CAST128 symmetric block cipher, ECB mode -- STL subtitle demuxer and decoder -- libutvideo YUV 4:2:2 10bit support -- XCB-based screen-grabber -- UDP-Lite support (RFC 3828) -- xBR scaling filter -- AVFoundation screen capturing support -- ffserver supports codec private options -- creating DASH compatible fragmented MP4, MPEG-DASH segmenting muxer -- WebP muxer with animated WebP support -- zygoaudio decoding support -- APNG demuxer -- postproc visualization support - - -version 2.4: -- Icecast protocol -- ported lenscorrection filter from frei0r filter -- large optimizations in dctdnoiz to make it usable -- ICY metadata are now requested by default with the HTTP protocol -- support for using metadata in stream specifiers in fftools -- LZMA compression support in TIFF decoder -- H.261 RTP payload format (RFC 4587) depacketizer and experimental packetizer -- HEVC/H.265 RTP payload format (draft v6) depacketizer -- added codecview filter to visualize information exported by some codecs -- Matroska 3D support thorugh side data -- HTML generation using texi2html is deprecated in favor of makeinfo/texi2any -- silenceremove filter - - -version 2.3: -- AC3 fixed-point decoding -- shuffleplanes filter -- subfile protocol -- Phantom Cine demuxer -- replaygain data export -- VP7 video decoder -- Alias PIX image encoder and decoder -- Improvements to the BRender PIX image decoder -- Improvements to the XBM decoder -- QTKit input device -- improvements to OpenEXR image decoder -- support decoding 16-bit RLE SGI images -- GDI screen grabbing for Windows -- alternative rendition support for HTTP Live Streaming -- AVFoundation input device -- Direct Stream Digital (DSD) decoder -- Magic Lantern Video (MLV) demuxer -- On2 AVC (Audio for Video) decoder -- support for decoding through DXVA2 in ffmpeg -- libbs2b-based stereo-to-binaural audio filter -- libx264 reference frames count limiting depending on level -- native Opus decoder -- display matrix export and rotation API -- WebVTT encoder -- showcqt multimedia filter -- zoompan filter -- signalstats filter -- hqx filter (hq2x, hq3x, hq4x) -- flanger filter -- Image format auto-detection -- LRC demuxer and muxer -- Samba protocol (via libsmbclient) -- WebM DASH Manifest muxer -- libfribidi support in drawtext - - -version 2.2: - -- HNM version 4 demuxer and video decoder -- Live HDS muxer -- setsar/setdar filters now support variables in ratio expressions -- elbg filter -- string validation in ffprobe -- support for decoding through VDPAU in ffmpeg (the -hwaccel option) -- complete Voxware MetaSound decoder -- remove mp3_header_compress bitstream filter -- Windows resource files for shared libraries -- aeval filter -- stereoscopic 3d metadata handling -- WebP encoding via libwebp -- ATRAC3+ decoder -- VP8 in Ogg demuxing -- side & metadata support in NUT -- framepack filter -- XYZ12 rawvideo support in NUT -- Exif metadata support in WebP decoder -- OpenGL device -- Use metadata_header_padding to control padding in ID3 tags (currently used in - MP3, AIFF, and OMA files), FLAC header, and the AVI "junk" block. -- Mirillis FIC video decoder -- Support DNx444 -- libx265 encoder -- dejudder filter -- Autodetect VDA like all other hardware accelerations -- aliases and defaults for Ogg subtypes (opus, spx) - - -version 2.1: - -- aecho filter -- perspective filter ported from libmpcodecs -- ffprobe -show_programs option -- compand filter -- RTMP seek support -- when transcoding with ffmpeg (i.e. not streamcopying), -ss is now accurate - even when used as an input option. Previous behavior can be restored with - the -noaccurate_seek option. -- ffmpeg -t option can now be used for inputs, to limit the duration of - data read from an input file -- incomplete Voxware MetaSound decoder -- read EXIF metadata from JPEG -- DVB teletext decoder -- phase filter ported from libmpcodecs -- w3fdif filter -- Opus support in Matroska -- FFV1 version 1.3 is stable and no longer experimental -- FFV1: YUVA(444,422,420) 9, 10 and 16 bit support -- changed DTS stream id in lavf mpeg ps muxer from 0x8a to 0x88, to be - more consistent with other muxers. -- adelay filter -- pullup filter ported from libmpcodecs -- ffprobe -read_intervals option -- Lossless and alpha support for WebP decoder -- Error Resilient AAC syntax (ER AAC LC) decoding -- Low Delay AAC (ER AAC LD) decoding -- mux chapters in ASF files -- SFTP protocol (via libssh) -- libx264: add ability to encode in YUVJ422P and YUVJ444P -- Fraps: use BT.709 colorspace by default for yuv, as reference fraps decoder does -- make decoding alpha optional for prores, ffv1 and vp6 by setting - the skip_alpha flag. -- ladspa wrapper filter -- native VP9 decoder -- dpx parser -- max_error_rate parameter in ffmpeg -- PulseAudio output device -- ReplayGain scanner -- Enhanced Low Delay AAC (ER AAC ELD) decoding (no LD SBR support) -- Linux framebuffer output device -- HEVC decoder -- raw HEVC, HEVC in MOV/MP4, HEVC in Matroska, HEVC in MPEG-TS demuxing -- mergeplanes filter - - -version 2.0: - -- curves filter -- reference-counting for AVFrame and AVPacket data -- ffmpeg now fails when input options are used for output file - or vice versa -- support for Monkey's Audio versions from 3.93 -- perms and aperms filters -- audio filtering support in ffplay -- 10% faster aac encoding on x86 and MIPS -- sine audio filter source -- WebP demuxing and decoding support -- ffmpeg options -filter_script and -filter_complex_script, which allow a - filtergraph description to be read from a file -- OpenCL support -- audio phaser filter -- separatefields filter -- libquvi demuxer -- uniform options syntax across all filters -- telecine filter -- interlace filter -- smptehdbars source -- inverse telecine filters (fieldmatch and decimate) -- colorbalance filter -- colorchannelmixer filter -- The matroska demuxer can now output proper verbatim ASS packets. It will - become the default at the next libavformat major bump. -- decent native animated GIF encoding -- asetrate filter -- interleave filter -- timeline editing with filters -- vidstabdetect and vidstabtransform filters for video stabilization using - the vid.stab library -- astats filter -- trim and atrim filters -- ffmpeg -t and -ss (output-only) options are now sample-accurate when - transcoding audio -- Matroska muxer can now put the index at the beginning of the file. -- extractplanes filter -- avectorscope filter -- ADPCM DTK decoder -- ADP demuxer -- RSD demuxer -- RedSpark demuxer -- ADPCM IMA Radical decoder -- zmq filters -- DCT denoiser filter (dctdnoiz) -- Wavelet denoiser filter ported from libmpcodecs as owdenoise (formerly "ow") -- Apple Intermediate Codec decoder -- Escape 130 video decoder -- FTP protocol support -- V4L2 output device -- 3D LUT filter (lut3d) -- SMPTE 302M audio encoder -- support for slice multithreading in libavfilter -- Hald CLUT support (generation and filtering) -- VC-1 interlaced B-frame support -- support for WavPack muxing (raw and in Matroska) -- XVideo output device -- vignette filter -- True Audio (TTA) encoder -- Go2Webinar decoder -- mcdeint filter ported from libmpcodecs -- sab filter ported from libmpcodecs -- ffprobe -show_chapters option -- WavPack encoding through libwavpack -- rotate filter -- spp filter ported from libmpcodecs -- libgme support -- psnr filter - - -version 1.2: - -- VDPAU hardware acceleration through normal hwaccel -- SRTP support -- Error diffusion dither in Swscale -- Chained Ogg support -- Theora Midstream reconfiguration support -- EVRC decoder -- audio fade filter -- filtering audio with unknown channel layout -- allpass, bass, bandpass, bandreject, biquad, equalizer, highpass, lowpass - and treble audio filter -- improved showspectrum filter, with multichannel support and sox-like colors -- histogram filter -- tee muxer -- il filter ported from libmpcodecs -- support ID3v2 tags in ASF files -- encrypted TTA stream decoding support -- RF64 support in WAV muxer -- noise filter ported from libmpcodecs -- Subtitles character encoding conversion -- blend filter -- stereo3d filter ported from libmpcodecs - - -version 1.1: - -- stream disposition information printing in ffprobe -- filter for loudness analysis following EBU R128 -- Opus encoder using libopus -- ffprobe -select_streams option -- Pinnacle TARGA CineWave YUV16 decoder -- TAK demuxer, decoder and parser -- DTS-HD demuxer -- remove -same_quant, it hasn't worked for years -- FFM2 support -- X-Face image encoder and decoder -- 24-bit FLAC encoding -- multi-channel ALAC encoding up to 7.1 -- metadata (INFO tag) support in WAV muxer -- subtitles raw text decoder -- support for building DLLs using MSVC -- LVF demuxer -- ffescape tool -- metadata (info chunk) support in CAF muxer -- field filter ported from libmpcodecs -- AVR demuxer -- geq filter ported from libmpcodecs -- remove ffserver daemon mode -- AST muxer/demuxer -- new expansion syntax for drawtext -- BRender PIX image decoder -- ffprobe -show_entries option -- ffprobe -sections option -- ADPCM IMA Dialogic decoder -- BRSTM demuxer -- animated GIF decoder and demuxer -- PVF demuxer -- subtitles filter -- IRCAM muxer/demuxer -- Paris Audio File demuxer -- Virtual concatenation demuxer -- VobSub demuxer -- JSON captions for TED talks decoding support -- SOX Resampler support in libswresample -- aselect filter -- SGI RLE 8-bit / Silicon Graphics RLE 8-bit video decoder -- Silicon Graphics Motion Video Compressor 1 & 2 decoder -- Silicon Graphics Movie demuxer -- apad filter -- Resolution & pixel format change support with multithreading for H.264 -- documentation split into per-component manuals -- pp (postproc) filter ported from MPlayer -- NIST Sphere demuxer -- MPL2, VPlayer, MPlayer, AQTitle, PJS and SubViewer v1 subtitles demuxers and decoders -- Sony Wave64 muxer -- adobe and limelight publisher authentication in RTMP -- data: URI scheme -- support building on the Plan 9 operating system -- kerndeint filter ported from MPlayer -- histeq filter ported from VirtualDub -- Megalux Frame demuxer -- 012v decoder -- Improved AVC Intra decoding support - - -version 1.0: - -- INI and flat output in ffprobe -- Scene detection in libavfilter -- Indeo Audio decoder -- channelsplit audio filter -- setnsamples audio filter -- atempo filter -- ffprobe -show_data option -- RTMPT protocol support -- iLBC encoding/decoding via libilbc -- Microsoft Screen 1 decoder -- join audio filter -- audio channel mapping filter -- Microsoft ATC Screen decoder -- RTSP listen mode -- TechSmith Screen Codec 2 decoder -- AAC encoding via libfdk-aac -- Microsoft Expression Encoder Screen decoder -- RTMPS protocol support -- RTMPTS protocol support -- RTMPE protocol support -- RTMPTE protocol support -- showwaves and showspectrum filter -- LucasArts SMUSH SANM playback support -- LucasArts SMUSH VIMA audio decoder (ADPCM) -- LucasArts SMUSH demuxer -- SAMI, RealText and SubViewer demuxers and decoders -- Heart Of Darkness PAF playback support -- iec61883 device -- asettb filter -- new option: -progress -- 3GPP Timed Text encoder/decoder -- GeoTIFF decoder support -- ffmpeg -(no)stdin option -- Opus decoder using libopus -- caca output device using libcaca -- alphaextract and alphamerge filters -- concat filter -- flite filter -- Canopus Lossless Codec decoder -- bitmap subtitles in filters (experimental and temporary) -- MP2 encoding via TwoLAME -- bmp parser -- smptebars source -- asetpts filter -- hue filter -- ICO muxer -- SubRip encoder and decoder without embedded timing -- edge detection filter -- framestep filter -- ffmpeg -shortest option is now per-output file - -pass and -passlogfile are now per-output stream -- volume measurement filter -- Ut Video encoder -- Microsoft Screen 2 decoder -- smartblur filter ported from MPlayer -- CPiA decoder -- decimate filter ported from MPlayer -- RTP depacketization of JPEG -- Smooth Streaming live segmenter muxer -- F4V muxer -- sendcmd and asendcmd filters -- WebVTT demuxer and decoder (simple tags supported) -- RTP packetization of JPEG -- faststart option in the MOV/MP4 muxer -- support for building with MSVC - - -version 0.11: - -- Fixes: CVE-2012-2772, CVE-2012-2774, CVE-2012-2775, CVE-2012-2776, CVE-2012-2777, - CVE-2012-2779, CVE-2012-2782, CVE-2012-2783, CVE-2012-2784, CVE-2012-2785, - CVE-2012-2786, CVE-2012-2787, CVE-2012-2788, CVE-2012-2789, CVE-2012-2790, - CVE-2012-2791, CVE-2012-2792, CVE-2012-2793, CVE-2012-2794, CVE-2012-2795, - CVE-2012-2796, CVE-2012-2797, CVE-2012-2798, CVE-2012-2799, CVE-2012-2800, - CVE-2012-2801, CVE-2012-2802, CVE-2012-2803, CVE-2012-2804, -- v408 Quicktime and Microsoft AYUV Uncompressed 4:4:4:4 encoder and decoder -- setfield filter -- CDXL demuxer and decoder -- Apple ProRes encoder -- ffprobe -count_packets and -count_frames options -- Sun Rasterfile Encoder -- ID3v2 attached pictures reading and writing -- WMA Lossless decoder -- bluray protocol -- blackdetect filter -- libutvideo encoder wrapper (--enable-libutvideo) -- swapuv filter -- bbox filter -- XBM encoder and decoder -- RealAudio Lossless decoder -- ZeroCodec decoder -- tile video filter -- Metal Gear Solid: The Twin Snakes demuxer -- OpenEXR image decoder -- removelogo filter -- drop support for ffmpeg without libavfilter -- drawtext video filter: fontconfig support -- ffmpeg -benchmark_all option -- super2xsai filter ported from libmpcodecs -- add libavresample audio conversion library for compatibility -- MicroDVD decoder -- Avid Meridien (AVUI) encoder and decoder -- accept + prefix to -pix_fmt option to disable automatic conversions. -- complete audio filtering in libavfilter and ffmpeg -- add fps filter -- vorbis parser -- png parser -- audio mix filter -- ffv1: support (draft) version 1.3 - - -version 0.10: - -- Fixes: CVE-2011-3929, CVE-2011-3934, CVE-2011-3935, CVE-2011-3936, - CVE-2011-3937, CVE-2011-3940, CVE-2011-3941, CVE-2011-3944, - CVE-2011-3945, CVE-2011-3946, CVE-2011-3947, CVE-2011-3949, - CVE-2011-3950, CVE-2011-3951, CVE-2011-3952 -- v410 Quicktime Uncompressed 4:4:4 10-bit encoder and decoder -- SBaGen (SBG) binaural beats script demuxer -- OpenMG Audio muxer -- Timecode extraction in DV and MOV -- thumbnail video filter -- XML output in ffprobe -- asplit audio filter -- tinterlace video filter -- astreamsync audio filter -- amerge audio filter -- ISMV (Smooth Streaming) muxer -- GSM audio parser -- SMJPEG muxer -- XWD encoder and decoder -- Automatic thread count based on detection number of (available) CPU cores -- y41p Brooktree Uncompressed 4:1:1 12-bit encoder and decoder -- ffprobe -show_error option -- Avid 1:1 10-bit RGB Packer codec -- v308 Quicktime Uncompressed 4:4:4 encoder and decoder -- yuv4 libquicktime packed 4:2:0 encoder and decoder -- ffprobe -show_frames option -- silencedetect audio filter -- ffprobe -show_program_version, -show_library_versions, -show_versions options -- rv34: frame-level multi-threading -- optimized iMDCT transform on x86 using SSE for for mpegaudiodec -- Improved PGS subtitle decoder -- dumpgraph option to lavfi device -- r210 and r10k encoders -- ffwavesynth decoder -- aviocat tool -- ffeval tool -- support encoding and decoding 4-channel SGI images - - -version 0.9: - -- openal input device added -- boxblur filter added -- BWF muxer -- Flash Screen Video 2 decoder -- lavfi input device added -- added avconv, which is almost the same for now, except -for a few incompatible changes in the options, which will hopefully make them -easier to use. The changes are: - * The options placement is now strictly enforced! While in theory the - options for ffmpeg should be given in [input options] -i INPUT [output - options] OUTPUT order, in practice it was possible to give output options - before the -i and it mostly worked. Except when it didn't - the behavior was - a bit inconsistent. In avconv, it is not possible to mix input and output - options. All non-global options are reset after an input or output filename. - * All per-file options are now truly per-file - they apply only to the next - input or output file and specifying different values for different files - will now work properly (notably -ss and -t options). - * All per-stream options are now truly per-stream - it is possible to - specify which stream(s) should a given option apply to. See the Stream - specifiers section in the avconv manual for details. - * In ffmpeg some options (like -newvideo/-newaudio/...) are irregular in the - sense that they're specified after the output filename instead of before, - like all other options. In avconv this irregularity is removed, all options - apply to the next input or output file. - * -newvideo/-newaudio/-newsubtitle options were removed. Not only were they - irregular and highly confusing, they were also redundant. In avconv the -map - option will create new streams in the output file and map input streams to - them. E.g. avconv -i INPUT -map 0 OUTPUT will create an output stream for - each stream in the first input file. - * The -map option now has slightly different and more powerful syntax: - + Colons (':') are used to separate file index/stream type/stream index - instead of dots. Comma (',') is used to separate the sync stream instead - of colon.. This is done for consistency with other options. - + It's possible to specify stream type. E.g. -map 0:a:2 creates an - output stream from the third input audio stream. - + Omitting the stream index now maps all the streams of the given type, - not just the first. E.g. -map 0:s creates output streams for all the - subtitle streams in the first input file. - + Since -map can now match multiple streams, negative mappings were - introduced. Negative mappings disable some streams from an already - defined map. E.g. '-map 0 -map -0:a:1' means 'create output streams for - all the stream in the first input file, except for the second audio - stream'. - * There is a new option -c (or -codec) for choosing the decoder/encoder to - use, which makes it possible to precisely specify target stream(s) consistently with - other options. E.g. -c:v lib264 sets the codec for all video streams, -c:a:0 - libvorbis sets the codec for the first audio stream and -c copy copies all - the streams without reencoding. Old -vcodec/-acodec/-scodec options are now - aliases to -c:v/a/s - * It is now possible to precisely specify which stream should an AVOption - apply to. E.g. -b:v:0 2M sets the bitrate for the first video stream, while - -b:a 128k sets the bitrate for all audio streams. Note that the old -ab 128k - syntax is deprecated and will stop working soon. - * -map_chapters now takes only an input file index and applies to the next - output file. This is consistent with how all the other options work. - * -map_metadata now takes only an input metadata specifier and applies to - the next output file. Output metadata specifier is now part of the option - name, similarly to the AVOptions/map/codec feature above. - * -metadata can now be used to set metadata on streams and chapters, e.g. - -metadata:s:1 language=eng sets the language of the first stream to 'eng'. - This made -vlang/-alang/-slang options redundant, so they were removed. - * -qscale option now uses stream specifiers and applies to all streams, not - just video. I.e. plain -qscale number would now apply to all streams. To get - the old behavior, use -qscale:v. Also there is now a shortcut -q for -qscale - and -aq is now an alias for -q:a. - * -vbsf/-absf/-sbsf options were removed and replaced by a -bsf option which - uses stream specifiers. Use -bsf:v/a/s instead of the old options. - * -itsscale option now uses stream specifiers, so its argument is only the - scale parameter. - * -intra option was removed, use -g 0 for the same effect. - * -psnr option was removed, use -flags +psnr for the same effect. - * -vf option is now an alias to the new -filter option, which uses stream specifiers. - * -vframes/-aframes/-dframes options are now aliases to the new -frames option. - * -vtag/-atag/-stag options are now aliases to the new -tag option. -- XMV demuxer -- LOAS demuxer -- ashowinfo filter added -- Windows Media Image decoder -- amovie source added -- LATM muxer/demuxer -- Speex encoder via libspeex -- JSON output in ffprobe -- WTV muxer -- Optional C++ Support (needed for libstagefright) -- H.264 Decoding on Android via Stagefright -- Prores decoder -- BIN/XBIN/ADF/IDF text file decoder -- aconvert audio filter added -- audio support to lavfi input device added -- libcdio-paranoia input device for audio CD grabbing -- Apple ProRes decoder -- CELT in Ogg demuxing -- G.723.1 demuxer and decoder -- libmodplug support (--enable-libmodplug) -- VC-1 interlaced decoding -- libutvideo wrapper (--enable-libutvideo) -- aevalsrc audio source added -- Ut Video decoder -- Speex encoding via libspeex -- 4:2:2 H.264 decoding support -- 4:2:2 and 4:4:4 H.264 encoding with libx264 -- Pulseaudio input device -- Prores encoder -- Video Decoder Acceleration (VDA) HWAccel module. -- replacement Indeo 3 decoder -- new ffmpeg option: -map_channel -- volume audio filter added -- earwax audio filter added -- libv4l2 support (--enable-libv4l2) -- TLS/SSL and HTTPS protocol support -- AVOptions API rewritten and documented -- most of CODEC_FLAG2_*, some CODEC_FLAG_* and many codec-specific fields in - AVCodecContext deprecated. Codec private options should be used instead. -- Properly working defaults in libx264 wrapper, support for native presets. -- Encrypted OMA files support -- Discworld II BMV decoding support -- VBLE Decoder -- OS X Video Decoder Acceleration (VDA) support -- compact and csv output in ffprobe -- pan audio filter -- IFF Amiga Continuous Bitmap (ACBM) decoder -- ass filter -- CRI ADX audio format muxer and demuxer -- Playstation Portable PMP format demuxer -- Microsoft Windows ICO demuxer -- life source -- PCM format support in OMA demuxer -- CLJR encoder -- new option: -report -- Dxtory capture format decoder -- cellauto source -- Simple segmenting muxer -- Indeo 4 decoder -- SMJPEG demuxer - - -version 0.8: - -- many many things we forgot because we rather write code than changelogs -- WebM support in Matroska de/muxer -- low overhead Ogg muxing -- MMS-TCP support -- VP8 de/encoding via libvpx -- Demuxer for On2's IVF format -- Pictor/PC Paint decoder -- HE-AAC v2 decoder -- HE-AAC v2 encoding with libaacplus -- libfaad2 wrapper removed -- DTS-ES extension (XCh) decoding support -- native VP8 decoder -- RTSP tunneling over HTTP -- RTP depacketization of SVQ3 -- -strict inofficial replaced by -strict unofficial -- ffplay -exitonkeydown and -exitonmousedown options added -- native GSM / GSM MS decoder -- RTP depacketization of QDM2 -- ANSI/ASCII art playback system -- Lego Mindstorms RSO de/muxer -- libavcore added (and subsequently removed) -- SubRip subtitle file muxer and demuxer -- Chinese AVS encoding via libxavs -- ffprobe -show_packets option added -- RTP packetization of Theora and Vorbis -- RTP depacketization of MP4A-LATM -- RTP packetization and depacketization of VP8 -- hflip filter -- Apple HTTP Live Streaming demuxer -- a64 codec -- MMS-HTTP support -- G.722 ADPCM audio encoder/decoder -- R10k video decoder -- ocv_smooth filter -- frei0r wrapper filter -- change crop filter syntax to width:height:x:y -- make the crop filter accept parametric expressions -- make ffprobe accept AVFormatContext options -- yadif filter -- blackframe filter -- Demuxer for Leitch/Harris' VR native stream format (LXF) -- RTP depacketization of the X-QT QuickTime format -- SAP (Session Announcement Protocol, RFC 2974) muxer and demuxer -- cropdetect filter -- ffmpeg -crop* options removed -- transpose filter added -- ffmpeg -force_key_frames option added -- demuxer for receiving raw rtp:// URLs without an SDP description -- single stream LATM/LOAS decoder -- setpts filter added -- Win64 support for optimized x86 assembly functions -- MJPEG/AVI1 to JPEG/JFIF bitstream filter -- ASS subtitle encoder and decoder -- IEC 61937 encapsulation for E-AC-3, TrueHD, DTS-HD (for HDMI passthrough) -- overlay filter added -- rename aspect filter to setdar, and pixelaspect to setsar -- IEC 61937 demuxer -- Mobotix .mxg demuxer -- frei0r source added -- hqdn3d filter added -- RTP depacketization of QCELP -- FLAC parser added -- gradfun filter added -- AMR-WB decoder -- replace the ocv_smooth filter with a more generic ocv filter -- Windows Televison (WTV) demuxer -- FFmpeg metadata format muxer and demuxer -- SubRip (srt) subtitle encoder and decoder -- floating-point AC-3 encoder added -- Lagarith decoder -- ffmpeg -copytb option added -- IVF muxer added -- Wing Commander IV movies decoder added -- movie source added -- Bink version 'b' audio and video decoder -- Bitmap Brothers JV playback system -- Apple HTTP Live Streaming protocol handler -- sndio support for playback and record -- Linux framebuffer input device added -- Chronomaster DFA decoder -- DPX image encoder -- MicroDVD subtitle file muxer and demuxer -- Playstation Portable PMP format demuxer -- fieldorder video filter added -- AAC encoding via libvo-aacenc -- AMR-WB encoding via libvo-amrwbenc -- xWMA demuxer -- Mobotix MxPEG decoder -- VP8 frame-multithreading -- NEON optimizations for VP8 -- Lots of deprecated API cruft removed -- fft and imdct optimizations for AVX (Sandy Bridge) processors -- showinfo filter added -- SMPTE 302M AES3 audio decoder -- Apple Core Audio Format muxer -- 9bit and 10bit per sample support in the H.264 decoder -- 9bit and 10bit FFV1 encoding / decoding -- split filter added -- select filter added -- sdl output device added -- libmpcodecs video filter support (3 times as many filters than before) -- mpeg2 aspect ratio dection fixed -- libxvid aspect pickiness fixed -- Frame multithreaded decoding -- E-AC-3 audio encoder -- ac3enc: add channel coupling support -- floating-point sample format support to the ac3, eac3, dca, aac, and vorbis decoders. -- H264/MPEG frame-level multi-threading -- All av_metadata_* functions renamed to av_dict_* and moved to libavutil -- 4:4:4 H.264 decoding support -- 10-bit H.264 optimizations for x86 -- lut, lutrgb, and lutyuv filters added -- buffersink libavfilter sink added -- Bump libswscale for recently reported ABI break -- New J2K encoder (via OpenJPEG) - - -version 0.7: - -- all the changes for 0.8, but keeping API/ABI compatibility with the 0.6 release - - -version 0.6: - -- PB-frame decoding for H.263 -- deprecated vhook subsystem removed -- deprecated old scaler removed -- VQF demuxer -- Alpha channel scaler -- PCX encoder -- RTP packetization of H.263 -- RTP packetization of AMR -- RTP depacketization of Vorbis -- CorePNG decoding support -- Cook multichannel decoding support -- introduced avlanguage helpers in libavformat -- 8088flex TMV demuxer and decoder -- per-stream language-tags extraction in asfdec -- V210 decoder and encoder -- remaining GPL parts in AC-3 decoder converted to LGPL -- QCP demuxer -- SoX native format muxer and demuxer -- AMR-NB decoding/encoding, AMR-WB decoding via OpenCORE libraries -- DPX image decoder -- Electronic Arts Madcow decoder -- DivX (XSUB) subtitle encoder -- nonfree libamr support for AMR-NB/WB decoding/encoding removed -- experimental AAC encoder -- RTP depacketization of ASF and RTSP from WMS servers -- RTMP support in libavformat -- noX handling for OPT_BOOL X options -- Wave64 demuxer -- IEC-61937 compatible Muxer -- TwinVQ decoder -- Bluray (PGS) subtitle decoder -- LPCM support in MPEG-TS (HDMV RID as found on Blu-ray disks) -- WMA Pro decoder -- Core Audio Format demuxer -- ATRAC1 decoder -- MD STUDIO audio demuxer -- RF64 support in WAV demuxer -- MPEG-4 Audio Lossless Coding (ALS) decoder -- -formats option split into -formats, -codecs, -bsfs, and -protocols -- IV8 demuxer -- CDG demuxer and decoder -- R210 decoder -- Auravision Aura 1 and 2 decoders -- Deluxe Paint Animation playback system -- SIPR decoder -- Adobe Filmstrip muxer and demuxer -- RTP depacketization of H.263 -- Bink demuxer and audio/video decoders -- enable symbol versioning by default for linkers that support it -- IFF PBM/ILBM bitmap decoder -- concat protocol -- Indeo 5 decoder -- RTP depacketization of AMR -- WMA Voice decoder -- ffprobe tool -- AMR-NB decoder -- RTSP muxer -- HE-AAC v1 decoder -- Kega Game Video (KGV1) decoder -- VorbisComment writing for FLAC, Ogg FLAC and Ogg Speex files -- RTP depacketization of Theora -- HTTP Digest authentication -- RTMP/RTMPT/RTMPS/RTMPE/RTMPTE protocol support via librtmp -- Psygnosis YOP demuxer and video decoder -- spectral extension support in the E-AC-3 decoder -- unsharp video filter -- RTP hinting in the mov/3gp/mp4 muxer -- Dirac in Ogg demuxing -- seek to keyframes in Ogg -- 4:2:2 and 4:4:4 Theora decoding -- 35% faster VP3/Theora decoding -- faster AAC decoding -- faster H.264 decoding -- RealAudio 1.0 (14.4K) encoder - - -version 0.5: - -- DV50 AKA DVCPRO50 encoder, decoder, muxer and demuxer -- TechSmith Camtasia (TSCC) video decoder -- IBM Ultimotion (ULTI) video decoder -- Sierra Online audio file demuxer and decoder -- Apple QuickDraw (qdrw) video decoder -- Creative ADPCM audio decoder (16 bits as well as 8 bits schemes) -- Electronic Arts Multimedia (WVE/UV2/etc.) file demuxer -- Miro VideoXL (VIXL) video decoder -- H.261 video encoder -- QPEG video decoder -- Nullsoft Video (NSV) file demuxer -- Shorten audio decoder -- LOCO video decoder -- Apple Lossless Audio Codec (ALAC) decoder -- Winnov WNV1 video decoder -- Autodesk Animator Studio Codec (AASC) decoder -- Indeo 2 video decoder -- Fraps FPS1 video decoder -- Snow video encoder/decoder -- Sonic audio encoder/decoder -- Vorbis audio decoder -- Macromedia ADPCM decoder -- Duck TrueMotion 2 video decoder -- support for decoding FLX and DTA extensions in FLIC files -- H.264 custom quantization matrices support -- ffserver fixed, it should now be usable again -- QDM2 audio decoder -- Real Cooker audio decoder -- TrueSpeech audio decoder -- WMA2 audio decoder fixed, now all files should play correctly -- RealAudio 14.4 and 28.8 decoders fixed -- JPEG-LS decoder -- build system improvements -- tabs and trailing whitespace removed from the codebase -- CamStudio video decoder -- AIFF/AIFF-C audio format, encoding and decoding -- ADTS AAC file reading and writing -- Creative VOC file reading and writing -- American Laser Games multimedia (*.mm) playback system -- Zip Motion Blocks Video decoder -- improved Theora/VP3 decoder -- True Audio (TTA) decoder -- AVS demuxer and video decoder -- JPEG-LS encoder -- Smacker demuxer and decoder -- NuppelVideo/MythTV demuxer and RTjpeg decoder -- KMVC decoder -- MPEG-2 intra VLC support -- MPEG-2 4:2:2 encoder -- Flash Screen Video decoder -- GXF demuxer -- Chinese AVS decoder -- GXF muxer -- MXF demuxer -- VC-1/WMV3/WMV9 video decoder -- MacIntel support -- AviSynth support -- VMware video decoder -- VP5 video decoder -- VP6 video decoder -- WavPack lossless audio decoder -- Targa (.TGA) picture decoder -- Vorbis audio encoder -- Delphine Software .cin demuxer/audio and video decoder -- Tiertex .seq demuxer/video decoder -- MTV demuxer -- TIFF picture encoder and decoder -- GIF picture decoder -- Intel Music Coder decoder -- Zip Motion Blocks Video encoder -- Musepack decoder -- Flash Screen Video encoder -- Theora encoding via libtheora -- BMP encoder -- WMA encoder -- GSM-MS encoder and decoder -- DCA decoder -- DXA demuxer and decoder -- DNxHD decoder -- Gamecube movie (.THP) playback system -- Blackfin optimizations -- Interplay C93 demuxer and video decoder -- Bethsoft VID demuxer and video decoder -- CRYO APC demuxer -- ATRAC3 decoder -- V.Flash PTX decoder -- RoQ muxer, RoQ audio encoder -- Renderware TXD demuxer and decoder -- extern C declarations for C++ removed from headers -- sws_flags command line option -- codebook generator -- RoQ video encoder -- QTRLE encoder -- OS/2 support removed and restored again -- AC-3 decoder -- NUT muxer -- additional SPARC (VIS) optimizations -- Matroska muxer -- slice-based parallel H.264 decoding -- Monkey's Audio demuxer and decoder -- AMV audio and video decoder -- DNxHD encoder -- H.264 PAFF decoding -- Nellymoser ASAO decoder -- Beam Software SIFF demuxer and decoder -- libvorbis Vorbis decoding removed in favor of native decoder -- IntraX8 (J-Frame) subdecoder for WMV2 and VC-1 -- Ogg (Theora, Vorbis and FLAC) muxer -- The "device" muxers and demuxers are now in a new libavdevice library -- PC Paintbrush PCX decoder -- Sun Rasterfile decoder -- TechnoTrend PVA demuxer -- Linux Media Labs MPEG-4 (LMLM4) demuxer -- AVM2 (Flash 9) SWF muxer -- QT variant of IMA ADPCM encoder -- VFW grabber -- iPod/iPhone compatible mp4 muxer -- Mimic decoder -- MSN TCP Webcam stream demuxer -- RL2 demuxer / decoder -- IFF demuxer -- 8SVX audio decoder -- non-recursive Makefiles -- BFI demuxer -- MAXIS EA XA (.xa) demuxer / decoder -- BFI video decoder -- OMA demuxer -- MLP/TrueHD decoder -- Electronic Arts CMV decoder -- Motion Pixels Video decoder -- Motion Pixels MVI demuxer -- removed animated GIF decoder/demuxer -- D-Cinema audio muxer -- Electronic Arts TGV decoder -- Apple Lossless Audio Codec (ALAC) encoder -- AAC decoder -- floating point PCM encoder/decoder -- MXF muxer -- DV100 AKA DVCPRO HD decoder and demuxer -- E-AC-3 support added to AC-3 decoder -- Nellymoser ASAO encoder -- ASS and SSA demuxer and muxer -- liba52 wrapper removed -- SVQ3 watermark decoding support -- Speex decoding via libspeex -- Electronic Arts TGQ decoder -- RV40 decoder -- QCELP / PureVoice decoder -- RV30 decoder -- hybrid WavPack support -- R3D REDCODE demuxer -- ALSA support for playback and record -- Electronic Arts TQI decoder -- OpenJPEG based JPEG 2000 decoder -- NC (NC4600) camera file demuxer -- Gopher client support -- MXF D-10 muxer -- generic metadata API -- flash ScreenVideo2 encoder - - -version 0.4.9-pre1: - -- DV encoder, DV muxer -- Microsoft RLE video decoder -- Microsoft Video-1 decoder -- Apple Animation (RLE) decoder -- Apple Graphics (SMC) decoder -- Apple Video (RPZA) decoder -- Cinepak decoder -- Sega FILM (CPK) file demuxer -- Westwood multimedia support (VQA & AUD files) -- Id Quake II CIN playback support -- 8BPS video decoder -- FLIC playback support -- RealVideo 2.0 (RV20) decoder -- Duck TrueMotion v1 (DUCK) video decoder -- Sierra VMD demuxer and video decoder -- MSZH and ZLIB decoder support -- SVQ1 video encoder -- AMR-WB support -- PPC optimizations -- rate distortion optimal cbp support -- rate distorted optimal ac prediction for MPEG-4 -- rate distorted optimal lambda->qp support -- AAC encoding with libfaac -- Sunplus JPEG codec (SP5X) support -- use Lagrange multipler instead of QP for ratecontrol -- Theora/VP3 decoding support -- XA and ADX ADPCM codecs -- export MPEG-2 active display area / pan scan -- Add support for configuring with IBM XLC -- floating point AAN DCT -- initial support for zygo video (not complete) -- RGB ffv1 support -- new audio/video parser API -- av_log() system -- av_read_frame() and av_seek_frame() support -- missing last frame fixes -- seek by mouse in ffplay -- noise reduction of DCT coefficients -- H.263 OBMC & 4MV support -- H.263 alternative inter vlc support -- H.263 loop filter -- H.263 slice structured mode -- interlaced DCT support for MPEG-2 encoding -- stuffing to stay above min_bitrate -- MB type & QP visualization -- frame stepping for ffplay -- interlaced motion estimation -- alternate scantable support -- SVCD scan offset support -- closed GOP support -- SSE2 FDCT -- quantizer noise shaping -- G.726 ADPCM audio codec -- MS ADPCM encoding -- multithreaded/SMP motion estimation -- multithreaded/SMP encoding for MPEG-1/MPEG-2/MPEG-4/H.263 -- multithreaded/SMP decoding for MPEG-2 -- FLAC decoder -- Metrowerks CodeWarrior suppport -- H.263+ custom pcf support -- nicer output for 'ffmpeg -formats' -- Matroska demuxer -- SGI image format, encoding and decoding -- H.264 loop filter support -- H.264 CABAC support -- nicer looking arrows for the motion vector visualization -- improved VCD support -- audio timestamp drift compensation -- MPEG-2 YUV 422/444 support -- polyphase kaiser windowed sinc and blackman nuttall windowed sinc audio resample -- better image scaling -- H.261 support -- correctly interleave packets during encoding -- VIS optimized motion compensation -- intra_dc_precision>0 encoding support -- support reuse of motion vectors/MB types/field select values of the source video -- more accurate deblock filter -- padding support -- many optimizations and bugfixes -- FunCom ISS audio file demuxer and according ADPCM decoding - - -version 0.4.8: - -- MPEG-2 video encoding (Michael) -- Id RoQ playback subsystem (Mike Melanson and Tim Ferguson) -- Wing Commander III Movie (.mve) file playback subsystem (Mike Melanson - and Mario Brito) -- Xan DPCM audio decoder (Mario Brito) -- Interplay MVE playback subsystem (Mike Melanson) -- Duck DK3 and DK4 ADPCM audio decoders (Mike Melanson) - - -version 0.4.7: - -- RealAudio 1.0 (14_4) and 2.0 (28_8) native decoders. Author unknown, code from mplayerhq - (originally from public domain player for Amiga at http://www.honeypot.net/audio) -- current version now also compiles with older GCC (Fabrice) -- 4X multimedia playback system including 4xm file demuxer (Mike - Melanson), and 4X video and audio codecs (Michael) -- Creative YUV (CYUV) decoder (Mike Melanson) -- FFV1 codec (our very simple lossless intra only codec, compresses much better - than HuffYUV) (Michael) -- ASV1 (Asus), H.264, Intel indeo3 codecs have been added (various) -- tiny PNG encoder and decoder, tiny GIF decoder, PAM decoder (PPM with - alpha support), JPEG YUV colorspace support. (Fabrice Bellard) -- ffplay has been replaced with a newer version which uses SDL (optionally) - for multiplatform support (Fabrice) -- Sorenson Version 3 codec (SVQ3) support has been added (decoding only) - donated - by anonymous -- AMR format has been added (Johannes Carlsson) -- 3GP support has been added (Johannes Carlsson) -- VP3 codec has been added (Mike Melanson) -- more MPEG-1/2 fixes -- better multiplatform support, MS Visual Studio fixes (various) -- AltiVec optimizations (Magnus Damn and others) -- SH4 processor support has been added (BERO) -- new public interfaces (avcodec_get_pix_fmt) (Roman Shaposhnick) -- VOB streaming support (Brian Foley) -- better MP3 autodetection (Andriy Rysin) -- qpel encoding (Michael) -- 4mv+b frames encoding finally fixed (Michael) -- chroma ME (Michael) -- 5 comparison functions for ME (Michael) -- B-frame encoding speedup (Michael) -- WMV2 codec (unfinished - Michael) -- user specified diamond size for EPZS (Michael) -- Playstation STR playback subsystem, still experimental (Mike and Michael) -- ASV2 codec (Michael) -- CLJR decoder (Alex) - -.. And lots more new enhancements and fixes. - - -version 0.4.6: - -- completely new integer only MPEG audio layer 1/2/3 decoder rewritten - from scratch -- Recoded DCT and motion vector search with gcc (no longer depends on nasm) -- fix quantization bug in AC3 encoder -- added PCM codecs and format. Corrected WAV/AVI/ASF PCM issues -- added prototype ffplay program -- added GOB header parsing on H.263/H.263+ decoder (Juanjo) -- bug fix on MCBPC tables of H.263 (Juanjo) -- bug fix on DC coefficients of H.263 (Juanjo) -- added Advanced Prediction Mode on H.263/H.263+ decoder (Juanjo) -- now we can decode H.263 streams found in QuickTime files (Juanjo) -- now we can decode H.263 streams found in VIVO v1 files(Juanjo) -- preliminary RTP "friendly" mode for H.263/H.263+ coding. (Juanjo) -- added GOB header for H.263/H.263+ coding on RTP mode (Juanjo) -- now H.263 picture size is returned on the first decoded frame (Juanjo) -- added first regression tests -- added MPEG-2 TS demuxer -- new demux API for libav -- more accurate and faster IDCT (Michael) -- faster and entropy-controlled motion search (Michael) -- two pass video encoding (Michael) -- new video rate control (Michael) -- added MSMPEG4V1, MSMPEGV2 and WMV1 support (Michael) -- great performance improvement of video encoders and decoders (Michael) -- new and faster bit readers and vlc parsers (Michael) -- high quality encoding mode: tries all macroblock/VLC types (Michael) -- added DV video decoder -- preliminary RTP/RTSP support in ffserver and libavformat -- H.263+ AIC decoding/encoding support (Juanjo) -- VCD MPEG-PS mode (Juanjo) -- PSNR stuff (Juanjo) -- simple stats output (Juanjo) -- 16-bit and 15-bit RGB/BGR/GBR support (Bisqwit) - - -version 0.4.5: - -- some header fixes (Zdenek Kabelac ) -- many MMX optimizations (Nick Kurshev ) -- added configure system (actually a small shell script) -- added MPEG audio layer 1/2/3 decoding using LGPL'ed mpglib by - Michael Hipp (temporary solution - waiting for integer only - decoder) -- fixed VIDIOCSYNC interrupt -- added Intel H.263 decoding support ('I263' AVI fourCC) -- added Real Video 1.0 decoding (needs further testing) -- simplified image formats again. Added PGM format (=grey - pgm). Renamed old PGM to PGMYUV. -- fixed msmpeg4 slice issues (tell me if you still find problems) -- fixed OpenDivX bugs with newer versions (added VOL header decoding) -- added support for MPlayer interface -- added macroblock skip optimization -- added MJPEG decoder -- added mmx/mmxext IDCT from libmpeg2 -- added pgmyuvpipe, ppm, and ppm_pipe formats (original patch by Celer - ) -- added pixel format conversion layer (e.g. for MJPEG or PPM) -- added deinterlacing option -- MPEG-1/2 fixes -- MPEG-4 vol header fixes (Jonathan Marsden ) -- ARM optimizations (Lionel Ulmer ). -- Windows porting of file converter -- added MJPEG raw format (input/output) -- added JPEG image format support (input/output) - - -version 0.4.4: - -- fixed some std header definitions (Bjorn Lindgren - ). -- added MPEG demuxer (MPEG-1 and 2 compatible). -- added ASF demuxer -- added prototype RM demuxer -- added AC3 decoding (done with libac3 by Aaron Holtzman) -- added decoding codec parameter guessing (.e.g. for MPEG, because the - header does not include them) -- fixed header generation in MPEG-1, AVI and ASF muxer: wmplayer can now - play them (only tested video) -- fixed H.263 white bug -- fixed phase rounding in img resample filter -- add MMX code for polyphase img resample filter -- added CPU autodetection -- added generic title/author/copyright/comment string handling (ASF and RM - use them) -- added SWF demux to extract MP3 track (not usable yet because no MP3 - decoder) -- added fractional frame rate support -- codecs are no longer searched by read_header() (should fix ffserver - segfault) - - -version 0.4.3: - -- BGR24 patch (initial patch by Jeroen Vreeken ) -- fixed raw yuv output -- added motion rounding support in MPEG-4 -- fixed motion bug rounding in MSMPEG4 -- added B-frame handling in video core -- added full MPEG-1 decoding support -- added partial (frame only) MPEG-2 support -- changed the FOURCC code for H.263 to "U263" to be able to see the - +AVI/H.263 file with the UB Video H.263+ decoder. MPlayer works with - this +codec ;) (JuanJo). -- Halfpel motion estimation after MB type selection (JuanJo) -- added pgm and .Y.U.V output format -- suppressed 'img:' protocol. Simply use: /tmp/test%d.[pgm|Y] as input or - output. -- added pgmpipe I/O format (original patch from Martin Aumueller - , but changed completely since we use a format - instead of a protocol) - - -version 0.4.2: - -- added H.263/MPEG-4/MSMPEG4 decoding support. MPEG-4 decoding support - (for OpenDivX) is almost complete: 8x8 MVs and rounding are - missing. MSMPEG4 support is complete. -- added prototype MPEG-1 decoder. Only I- and P-frames handled yet (it - can decode ffmpeg MPEGs :-)). -- added libavcodec API documentation (see apiexample.c). -- fixed image polyphase bug (the bottom of some images could be - greenish) -- added support for non clipped motion vectors (decoding only) - and image sizes non-multiple of 16 -- added support for AC prediction (decoding only) -- added file overwrite confirmation (can be disabled with -y) -- added custom size picture to H.263 using H.263+ (Juanjo) - - -version 0.4.1: - -- added MSMPEG4 (aka DivX) compatible encoder. Changed default codec - of AVI and ASF to DIV3. -- added -me option to set motion estimation method - (default=log). suppressed redundant -hq option. -- added options -acodec and -vcodec to force a given codec (useful for - AVI for example) -- fixed -an option -- improved dct_quantize speed -- factorized some motion estimation code - - -version 0.4.0: - -- removing grab code from ffserver and moved it to ffmpeg. Added - multistream support to ffmpeg. -- added timeshifting support for live feeds (option ?date=xxx in the - URL) -- added high quality image resize code with polyphase filter (need - mmx/see optimization). Enable multiple image size support in ffserver. -- added multi live feed support in ffserver -- suppressed master feature from ffserver (it should be done with an - external program which opens the .ffm url and writes it to another - ffserver) -- added preliminary support for video stream parsing (WAV and AVI half - done). Added proper support for audio/video file conversion in - ffmpeg. -- added preliminary support for video file sending from ffserver -- redesigning I/O subsystem: now using URL based input and output - (see avio.h) -- added WAV format support -- added "tty user interface" to ffmpeg to stop grabbing gracefully -- added MMX/SSE optimizations to SAD (Sums of Absolutes Differences) - (Juan J. Sierralta P. a.k.a. "Juanjo" ) -- added MMX DCT from mpeg2_movie 1.5 (Juanjo) -- added new motion estimation algorithms, log and phods (Juanjo) -- changed directories: libav for format handling, libavcodec for - codecs - - -version 0.3.4: - -- added stereo in MPEG audio encoder - - -version 0.3.3: - -- added 'high quality' mode which use motion vectors. It can be used in - real time at low resolution. -- fixed rounding problems which caused quality problems at high - bitrates and large GOP size - - -version 0.3.2: small fixes - -- ASF fixes -- put_seek bug fix - - -version 0.3.1: added avi/divx support - -- added AVI support -- added MPEG-4 codec compatible with OpenDivX. It is based on the H.263 codec -- added sound for flash format (not tested) - - -version 0.3: initial public release diff --git a/media/ffvpx/FILES b/media/ffvpx/FILES new file mode 100644 index 000000000000..e3c43b0ab259 --- /dev/null +++ b/media/ffvpx/FILES @@ -0,0 +1,293 @@ +./COPYING.LGPLv2.1 +./COPYING.LGPLv3 +./compat/va_copy.h +./compat/w32pthreads.h +./libavcodec/audioconvert.c +./libavcodec/audioconvert.h +./libavcodec/avpicture.c +./libavcodec/bit_depth_template.c +./libavcodec/fdctdsp.h +./libavcodec/flacdata.c +./libavcodec/flacdata.h +./libavcodec/flacdsp_lpc_template.c +./libavcodec/frame_thread_encoder.h +./libavcodec/golomb.c +./libavcodec/h263dsp.h +./libavcodec/h264pred.c +./libavcodec/h264pred.h +./libavcodec/h264pred_template.c +./libavcodec/log2_tab.c +./libavcodec/mathtables.c +./libavcodec/motion_est.h +./libavcodec/mpeg12data.h +./libavcodec/mpegpicture.h +./libavcodec/mpegutils.h +./libavcodec/mpegvideodsp.h +./libavcodec/mpegvideoencdsp.h +./libavcodec/parser.h +./libavcodec/profiles.c +./libavcodec/profiles.h +./libavcodec/pthread.c +./libavcodec/pthread_internal.h +./libavcodec/qpeldsp.h +./libavcodec/qsv_api.c +./libavcodec/raw.h +./libavcodec/rectangle.h +./libavcodec/resample.c +./libavcodec/resample2.c +./libavcodec/reverse.c +./libavcodec/rl.h +./libavcodec/rnd_avg.h +./libavcodec/unary.h +./libavcodec/videodsp_template.c +./libavcodec/vorbis_parser.c +./libavcodec/vorbis_parser_internal.h +./libavcodec/vp8data.h +./libavcodec/vp9_parser.c +./libavcodec/vp9dsp_10bpp.c +./libavcodec/vp9dsp_12bpp.c +./libavcodec/vp9dsp_8bpp.c +./libavcodec/x86/constants.c +./libavcodec/x86/flacdsp.asm +./libavcodec/x86/mathops.h +./libavcodec/x86/vp56_arith.h +./libavcodec/x86/vp9dsp_init.h +./libavcodec/x86/vp9dsp_init_10bpp.c +./libavcodec/x86/vp9dsp_init_12bpp.c +./libavcodec/x86/vp9intrapred.asm +./libavcodec/x86/vp9itxfm_16bpp.asm +./libavcodec/x86/vp9itxfm_template.asm +./libavcodec/x86/vp9mc_16bpp.asm +./libavcodec/x86/h264_i386.h +./libavcodec/x86/vp9lpf.asm +./libavcodec/x86/vp9lpf_16bpp.asm +./libavcodec/x86/constants.h +./libavcodec/x86/flacdsp_init.c +./libavcodec/x86/h264_intrapred.asm +./libavcodec/x86/h264_intrapred_10bit.asm +./libavcodec/x86/h264_intrapred_init.c +./libavcodec/x86/videodsp.asm +./libavcodec/x86/videodsp_init.c +./libavcodec/x86/vp8dsp.asm +./libavcodec/x86/vp8dsp_init.c +./libavcodec/x86/vp8dsp_loopfilter.asm +./libavcodec/x86/vp9dsp_init.c +./libavcodec/x86/vp9dsp_init_16bpp.c +./libavcodec/x86/vp9dsp_init_16bpp_template.c +./libavcodec/x86/vp9intrapred_16bpp.asm +./libavcodec/x86/vp9itxfm.asm +./libavcodec/x86/vp9mc.asm +./libavcodec/xiph.c +./libavcodec/xiph.h +./libavcodec/bsf.h +./libavcodec/h264dsp.h +./libavcodec/imgconvert.c +./libavcodec/avcodec.symbols +./libavcodec/bsf.c +./libavcodec/decode.c +./libavcodec/decode.h +./libavcodec/hwaccel.h +./libavcodec/vp9block.c +./libavcodec/vp9data.c +./libavcodec/vp9dec.h +./libavcodec/vp9lpf.c +./libavcodec/vp9mvs.c +./libavcodec/vp9prob.c +./libavcodec/vp9recon.c +./libavcodec/vp9shared.h +./libavcodec/allcodecs.c +./libavcodec/avcodec.h +./libavcodec/avpacket.c +./libavcodec/bitstream.c +./libavcodec/blockdsp.h +./libavcodec/bytestream.h +./libavcodec/codec_desc.c +./libavcodec/dct.h +./libavcodec/dummy_funcs.c +./libavcodec/error_resilience.h +./libavcodec/flac.c +./libavcodec/flac.h +./libavcodec/flac_parser.c +./libavcodec/flacdec.c +./libavcodec/flacdsp.c +./libavcodec/flacdsp.h +./libavcodec/flacdsp_template.c +./libavcodec/get_bits.h +./libavcodec/golomb.h +./libavcodec/h264chroma.h +./libavcodec/hpeldsp.h +./libavcodec/idctdsp.h +./libavcodec/internal.h +./libavcodec/mathops.h +./libavcodec/me_cmp.h +./libavcodec/mpegvideo.h +./libavcodec/options.c +./libavcodec/options_table.h +./libavcodec/parser.c +./libavcodec/pixblockdsp.h +./libavcodec/pthread_frame.c +./libavcodec/pthread_slice.c +./libavcodec/put_bits.h +./libavcodec/ratecontrol.h +./libavcodec/raw.c +./libavcodec/thread.h +./libavcodec/utils.c +./libavcodec/version.h +./libavcodec/videodsp.c +./libavcodec/videodsp.h +./libavcodec/vlc.h +./libavcodec/vorbis_parser.h +./libavcodec/vp3dsp.h +./libavcodec/vp56.h +./libavcodec/vp56dsp.h +./libavcodec/vp56rac.c +./libavcodec/vp8.c +./libavcodec/vp8.h +./libavcodec/vp8_parser.c +./libavcodec/vp8dsp.c +./libavcodec/vp8dsp.h +./libavcodec/vp9.c +./libavcodec/vp9.h +./libavcodec/vp9_mc_template.c +./libavcodec/vp9data.h +./libavcodec/vp9dsp.c +./libavcodec/vp9dsp.h +./libavcodec/vp9dsp_template.c +./libavcodec/bitstream_filters.c +./libavcodec/bitstream_filter.c +./libavcodec/bsf_list.c +./libavcodec/null_bsf.c +./libavutil/adler32.c +./libavutil/atomic.c +./libavutil/atomic.h +./libavutil/atomic_win32.h +./libavutil/avutilres.rc +./libavutil/base64.c +./libavutil/base64.h +./libavutil/bprint.c +./libavutil/bprint.h +./libavutil/bswap.h +./libavutil/color_utils.c +./libavutil/color_utils.h +./libavutil/colorspace.h +./libavutil/common.h +./libavutil/crc.c +./libavutil/dict.h +./libavutil/display.c +./libavutil/error.c +./libavutil/error.h +./libavutil/eval.h +./libavutil/ffmath.h +./libavutil/fftime.h +./libavutil/ffversion.h +./libavutil/fifo.c +./libavutil/fifo.h +./libavutil/fixed_dsp.c +./libavutil/fixed_dsp.h +./libavutil/integer.c +./libavutil/integer.h +./libavutil/intfloat.h +./libavutil/intmath.c +./libavutil/intmath.h +./libavutil/libm.h +./libavutil/lls.c +./libavutil/lls.h +./libavutil/log2_tab.c +./libavutil/lzo.c +./libavutil/lzo.h +./libavutil/macros.h +./libavutil/mem_internal.h +./libavutil/motion_vector.h +./libavutil/parseutils.h +./libavutil/pixelutils.c +./libavutil/pixelutils.h +./libavutil/qsort.h +./libavutil/rational.c +./libavutil/replaygain.h +./libavutil/reverse.c +./libavutil/threadmessage.h +./libavutil/time_internal.h +./libavutil/wchar_filename.h +./libavutil/x86/bswap.h +./libavutil/x86/cpuid.asm +./libavutil/x86/fixed_dsp.asm +./libavutil/x86/fixed_dsp_init.c +./libavutil/x86/intmath.h +./libavutil/x86/intreadwrite.h +./libavutil/x86/lls.asm +./libavutil/x86/lls_init.c +./libavutil/x86/pixelutils.asm +./libavutil/x86/pixelutils.h +./libavutil/x86/pixelutils_init.c +./libavutil/x86/timer.h +./libavutil/x86/asm.h +./libavutil/x86/imgutils.asm +./libavutil/x86/imgutils_init.c +./libavutil/x86/cpu.c +./libavutil/x86/cpu.h +./libavutil/x86/emms.asm +./libavutil/x86/emms.h +./libavutil/x86/float_dsp.asm +./libavutil/x86/float_dsp_init.c +./libavutil/x86/x86inc.asm +./libavutil/x86/x86util.asm +./libavutil/adler32.h +./libavutil/avassert.h +./libavutil/avconfig.h +./libavutil/crc.h +./libavutil/dict.c +./libavutil/dynarray.h +./libavutil/log.h +./libavutil/mathematics.h +./libavutil/rational.h +./libavutil/samplefmt.c +./libavutil/samplefmt.h +./libavutil/timestamp.h +./libavutil/opt.c +./libavutil/dummy_funcs.c +./libavutil/imgutils_internal.h +./libavutil/reverse.h +./libavutil/slicethread.c +./libavutil/slicethread.h +./libavutil/atomic_gcc.h +./libavutil/attributes.h +./libavutil/avstring.c +./libavutil/avstring.h +./libavutil/avutil.h +./libavutil/avutil.symbols +./libavutil/buffer.c +./libavutil/buffer.h +./libavutil/buffer_internal.h +./libavutil/channel_layout.c +./libavutil/channel_layout.h +./libavutil/cpu.c +./libavutil/cpu.h +./libavutil/cpu_internal.h +./libavutil/display.h +./libavutil/eval.c +./libavutil/float_dsp.c +./libavutil/float_dsp.h +./libavutil/frame.c +./libavutil/frame.h +./libavutil/hwcontext.h +./libavutil/imgutils.c +./libavutil/imgutils.h +./libavutil/internal.h +./libavutil/intreadwrite.h +./libavutil/log.c +./libavutil/mathematics.c +./libavutil/mem.c +./libavutil/mem.h +./libavutil/opt.h +./libavutil/parseutils.c +./libavutil/pixdesc.c +./libavutil/pixdesc.h +./libavutil/pixfmt.h +./libavutil/thread.h +./libavutil/threadmessage.c +./libavutil/time.c +./libavutil/timecode.c +./libavutil/timecode.h +./libavutil/timer.h +./libavutil/utils.c +./libavutil/version.h diff --git a/media/ffvpx/INSTALL.md b/media/ffvpx/INSTALL.md deleted file mode 100644 index 5db912231c2b..000000000000 --- a/media/ffvpx/INSTALL.md +++ /dev/null @@ -1,17 +0,0 @@ -#Installing FFmpeg: - -1. Type `./configure` to create the configuration. A list of configure -options is printed by running `configure --help`. - - `configure` can be launched from a directory different from the FFmpeg -sources to build the objects out of tree. To do this, use an absolute -path when launching `configure`, e.g. `/ffmpegdir/ffmpeg/configure`. - -2. Then type `make` to build FFmpeg. GNU Make 3.81 or later is required. - -3. Type `make install` to install all binaries and libraries you built. - -NOTICE ------- - - - Non system dependencies (e.g. libx264, libvpx) are disabled by default. diff --git a/media/ffvpx/LICENSE.md b/media/ffvpx/LICENSE.md deleted file mode 100644 index 0c53d0f5a9a7..000000000000 --- a/media/ffvpx/LICENSE.md +++ /dev/null @@ -1,114 +0,0 @@ -#FFmpeg: - -Most files in FFmpeg are under the GNU Lesser General Public License version 2.1 -or later (LGPL v2.1+). Read the file `COPYING.LGPLv2.1` for details. Some other -files have MIT/X11/BSD-style licenses. In combination the LGPL v2.1+ applies to -FFmpeg. - -Some optional parts of FFmpeg are licensed under the GNU General Public License -version 2 or later (GPL v2+). See the file `COPYING.GPLv2` for details. None of -these parts are used by default, you have to explicitly pass `--enable-gpl` to -configure to activate them. In this case, FFmpeg's license changes to GPL v2+. - -Specifically, the GPL parts of FFmpeg are: - -- libpostproc -- optional x86 optimizations in the files - - `libavcodec/x86/flac_dsp_gpl.asm` - - `libavcodec/x86/idct_mmx.c` - - `libavfilter/x86/vf_removegrain.asm` -- libutvideo encoding/decoding wrappers in - `libavcodec/libutvideo*.cpp` -- the X11 grabber in `libavdevice/x11grab.c` -- the swresample test app in - `libswresample/swresample-test.c` -- the `texi2pod.pl` tool -- the following filters in libavfilter: - - `f_ebur128.c` - - `vf_blackframe.c` - - `vf_boxblur.c` - - `vf_colormatrix.c` - - `vf_cover_rect.c` - - `vf_cropdetect.c` - - `vf_delogo.c` - - `vf_eq.c` - - `vf_find_rect.c` - - `vf_fspp.c` - - `vf_geq.c` - - `vf_histeq.c` - - `vf_hqdn3d.c` - - `vf_interlace.c` - - `vf_kerndeint.c` - - `vf_mcdeint.c` - - `vf_mpdecimate.c` - - `vf_owdenoise.c` - - `vf_perspective.c` - - `vf_phase.c` - - `vf_pp.c` - - `vf_pp7.c` - - `vf_pullup.c` - - `vf_sab.c` - - `vf_smartblur.c` - - `vf_repeatfields.c` - - `vf_spp.c` - - `vf_stereo3d.c` - - `vf_super2xsai.c` - - `vf_tinterlace.c` - - `vf_uspp.c` - - `vsrc_mptestsrc.c` - -Should you, for whatever reason, prefer to use version 3 of the (L)GPL, then -the configure parameter `--enable-version3` will activate this licensing option -for you. Read the file `COPYING.LGPLv3` or, if you have enabled GPL parts, -`COPYING.GPLv3` to learn the exact legal terms that apply in this case. - -There are a handful of files under other licensing terms, namely: - -* The files `libavcodec/jfdctfst.c`, `libavcodec/jfdctint_template.c` and - `libavcodec/jrevdct.c` are taken from libjpeg, see the top of the files for - licensing details. Specifically note that you must credit the IJG in the - documentation accompanying your program if you only distribute executables. - You must also indicate any changes including additions and deletions to - those three files in the documentation. -* `tests/reference.pnm` is under the expat license. - - -external libraries -================== - -FFmpeg can be combined with a number of external libraries, which sometimes -affect the licensing of binaries resulting from the combination. - -compatible libraries --------------------- - -The following libraries are under GPL: -- frei0r -- libcdio -- librubberband -- libutvideo -- libvidstab -- libx264 -- libx265 -- libxavs -- libxvid - -When combining them with FFmpeg, FFmpeg needs to be licensed as GPL as well by -passing `--enable-gpl` to configure. - -The OpenCORE and VisualOn libraries are under the Apache License 2.0. That -license is incompatible with the LGPL v2.1 and the GPL v2, but not with -version 3 of those licenses. So to combine these libraries with FFmpeg, the -license version needs to be upgraded by passing `--enable-version3` to configure. - -incompatible libraries ----------------------- - -The Fraunhofer AAC library and FAAC are under licenses which -are incompatible with the GPLv2 and v3. We do not know for certain if their -licenses are compatible with the LGPL. -If you wish to enable these libraries, pass `--enable-nonfree` to configure. -But note that if you enable any of these libraries the resulting binary will -be under a complex license mix that is more restrictive than the LGPL and that -may result in additional obligations. It is possible that these -restrictions cause the resulting binary to be unredistributeable. diff --git a/media/ffvpx/MAINTAINERS b/media/ffvpx/MAINTAINERS deleted file mode 100644 index e57150da90fe..000000000000 --- a/media/ffvpx/MAINTAINERS +++ /dev/null @@ -1,619 +0,0 @@ -FFmpeg maintainers -================== - -Below is a list of the people maintaining different parts of the -FFmpeg code. - -Please try to keep entries where you are the maintainer up to date! - -Names in () mean that the maintainer currently has no time to maintain the code. -A (CC
) after the name means that the maintainer prefers to be CC-ed on -patches and related discussions. - - -Project Leader -============== - - final design decisions - - -Applications -============ - -ffmpeg: - ffmpeg.c Michael Niedermayer - -ffplay: - ffplay.c Marton Balint - -ffprobe: - ffprobe.c Stefano Sabatini - -ffserver: - ffserver.c Reynaldo H. Verdejo Pinochet - -Commandline utility code: - cmdutils.c, cmdutils.h Michael Niedermayer - -QuickTime faststart: - tools/qt-faststart.c Baptiste Coudurier - - -Miscellaneous Areas -=================== - -documentation Stefano Sabatini, Mike Melanson, Timothy Gu, Lou Logan -build system (configure, makefiles) Diego Biurrun, Mans Rullgard -project server Árpád Gereöffy, Michael Niedermayer, Reimar Doeffinger, Alexander Strasser, Lou Logan -presets Robert Swain -metadata subsystem Aurelien Jacobs -release management Michael Niedermayer - - -Communication -============= - -website Deby Barbara Lepage -fate.ffmpeg.org Timothy Gu -Trac bug tracker Alexander Strasser, Michael Niedermayer, Carl Eugen Hoyos, Lou Logan -mailing lists Michael Niedermayer, Baptiste Coudurier, Lou Logan -Google+ Paul B Mahol, Michael Niedermayer, Alexander Strasser -Twitter Lou Logan, Reynaldo H. Verdejo Pinochet -Launchpad Timothy Gu - - -libavutil -========= - -External Interfaces: - libavutil/avutil.h Michael Niedermayer -Internal Interfaces: - libavutil/common.h Michael Niedermayer - -Other: - aes_ctr.c, aes_ctr.h Eran Kornblau - bprint Nicolas George - bswap.h - des Reimar Doeffinger - dynarray.h Nicolas George - eval.c, eval.h Michael Niedermayer - float_dsp Loren Merritt - hash Reimar Doeffinger - intfloat* Michael Niedermayer - integer.c, integer.h Michael Niedermayer - lzo Reimar Doeffinger - mathematics.c, mathematics.h Michael Niedermayer - mem.c, mem.h Michael Niedermayer - opencl.c, opencl.h Wei Gao - opt.c, opt.h Michael Niedermayer - rational.c, rational.h Michael Niedermayer - rc4 Reimar Doeffinger - ripemd.c, ripemd.h James Almer - timecode Clément Bœsch - - -libavcodec -========== - -Generic Parts: - External Interfaces: - avcodec.h Michael Niedermayer - utility code: - utils.c Michael Niedermayer - audio and video frame extraction: - parser.c Michael Niedermayer - bitstream reading: - bitstream.c, bitstream.h Michael Niedermayer - CABAC: - cabac.h, cabac.c Michael Niedermayer - codec names: - codec_names.sh Nicolas George - DSP utilities: - dsputils.c, dsputils.h Michael Niedermayer - entropy coding: - rangecoder.c, rangecoder.h Michael Niedermayer - lzw.* Michael Niedermayer - floating point AAN DCT: - faandct.c, faandct.h Michael Niedermayer - Golomb coding: - golomb.c, golomb.h Michael Niedermayer - LPC: - lpc.c, lpc.h Justin Ruggles - motion estimation: - motion* Michael Niedermayer - rate control: - ratecontrol.c Michael Niedermayer - libxvid_rc.c Michael Niedermayer - simple IDCT: - simple_idct.c, simple_idct.h Michael Niedermayer - postprocessing: - libpostproc/* Michael Niedermayer - table generation: - tableprint.c, tableprint.h Reimar Doeffinger - fixed point FFT: - fft* Zeljko Lukac - Text Subtitles Clément Bœsch - -Codecs: - 4xm.c Michael Niedermayer - 8bps.c Roberto Togni - 8svx.c Jaikrishnan Menon - aacenc*, aaccoder.c Rostislav Pehlivanov - aasc.c Kostya Shishkov - ac3* Justin Ruggles - alacenc.c Jaikrishnan Menon - alsdec.c Thilo Borgmann - apedec.c Kostya Shishkov - ass* Aurelien Jacobs - asv* Michael Niedermayer - atrac3* Benjamin Larsson - atrac3plus* Maxim Poliakovski - bgmc.c, bgmc.h Thilo Borgmann - bink.c Kostya Shishkov - binkaudio.c Peter Ross - bmp.c Mans Rullgard, Kostya Shishkov - cavs* Stefan Gehrer - cdxl.c Paul B Mahol - celp_filters.* Vitor Sessak - cinepak.c Roberto Togni - cinepakenc.c Rl / Aetey G.T. AB - ccaption_dec.c Anshul Maheshwari - cljr Alex Beregszaszi - cllc.c Derek Buitenhuis - cook.c, cookdata.h Benjamin Larsson - cpia.c Stephan Hilb - crystalhd.c Philip Langdale - cscd.c Reimar Doeffinger - dca.c Kostya Shishkov, Benjamin Larsson - dirac* Rostislav Pehlivanov - dnxhd* Baptiste Coudurier - dpcm.c Mike Melanson - dss_sp.c Oleksij Rempel, Michael Niedermayer - dv.c Roman Shaposhnik - dvbsubdec.c Anshul Maheshwari - dxa.c Kostya Shishkov - eacmv*, eaidct*, eat* Peter Ross - evrc* Paul B Mahol - exif.c, exif.h Thilo Borgmann - ffv1* Michael Niedermayer - ffwavesynth.c Nicolas George - fic.c Derek Buitenhuis - flac* Justin Ruggles - flashsv* Benjamin Larsson - flicvideo.c Mike Melanson - g722.c Martin Storsjo - g726.c Roman Shaposhnik - gifdec.c Baptiste Coudurier - h261* Michael Niedermayer - h263* Michael Niedermayer - h264* Loren Merritt, Michael Niedermayer - hap* Tom Butterworth - huffyuv* Michael Niedermayer, Christophe Gisquet - idcinvideo.c Mike Melanson - imc* Benjamin Larsson - indeo2* Kostya Shishkov - indeo5* Kostya Shishkov - interplayvideo.c Mike Melanson - ivi* Kostya Shishkov - jacosub* Clément Bœsch - jpeg2000* Nicolas Bertrand - jpeg_ls.c Kostya Shishkov - jvdec.c Peter Ross - kmvc.c Kostya Shishkov - lcl*.c Roberto Togni, Reimar Doeffinger - libcelt_dec.c Nicolas George - libdirac* David Conrad - libgsm.c Michel Bardiaux - libkvazaar.c Arttu Ylä-Outinen - libopenjpeg.c Jaikrishnan Menon - libopenjpegenc.c Michael Bradshaw - libschroedinger* David Conrad - libspeexdec.c Justin Ruggles - libtheoraenc.c David Conrad - libutvideo* Carl Eugen Hoyos - libvorbis.c David Conrad - libvpx* James Zern - libx264.c Mans Rullgard, Jason Garrett-Glaser - libx265.c Derek Buitenhuis - libxavs.c Stefan Gehrer - libzvbi-teletextdec.c Marton Balint - loco.c Kostya Shishkov - lzo.h, lzo.c Reimar Doeffinger - mdec.c Michael Niedermayer - mimic.c Ramiro Polla - mjpeg*.c Michael Niedermayer - mlp* Ramiro Polla - mmvideo.c Peter Ross - mpc* Kostya Shishkov - mpeg12.c, mpeg12data.h Michael Niedermayer - mpegvideo.c, mpegvideo.h Michael Niedermayer - mqc* Nicolas Bertrand - msmpeg4.c, msmpeg4data.h Michael Niedermayer - msrle.c Mike Melanson - msvideo1.c Mike Melanson - nellymoserdec.c Benjamin Larsson - nuv.c Reimar Doeffinger - nvenc.c Timo Rothenpieler - paf.* Paul B Mahol - pcx.c Ivo van Poorten - pgssubdec.c Reimar Doeffinger - ptx.c Ivo van Poorten - qcelp* Reynaldo H. Verdejo Pinochet - qdm2.c, qdm2data.h Roberto Togni, Benjamin Larsson - qdrw.c Kostya Shishkov - qpeg.c Kostya Shishkov - qsv* Ivan Uskov - qtrle.c Mike Melanson - ra144.c, ra144.h, ra288.c, ra288.h Roberto Togni - resample2.c Michael Niedermayer - rl2.c Sascha Sommer - rpza.c Roberto Togni - rtjpeg.c, rtjpeg.h Reimar Doeffinger - rv10.c Michael Niedermayer - rv3* Kostya Shishkov - rv4* Kostya Shishkov, Christophe Gisquet - s3tc* Ivo van Poorten - smacker.c Kostya Shishkov - smc.c Mike Melanson - smvjpegdec.c Ash Hughes - snow* Michael Niedermayer, Loren Merritt - sonic.c Alex Beregszaszi - srt* Aurelien Jacobs - sunrast.c Ivo van Poorten - svq3.c Michael Niedermayer - tak* Paul B Mahol - targa.c Kostya Shishkov - tiff.c Kostya Shishkov - truemotion1* Mike Melanson - truemotion2* Kostya Shishkov - truespeech.c Kostya Shishkov - tscc.c Kostya Shishkov - tta.c Alex Beregszaszi, Jaikrishnan Menon - ttaenc.c Paul B Mahol - txd.c Ivo van Poorten - ulti* Kostya Shishkov - v410*.c Derek Buitenhuis - vb.c Kostya Shishkov - vble.c Derek Buitenhuis - vc1* Kostya Shishkov, Christophe Gisquet - vc2* Rostislav Pehlivanov - vcr1.c Michael Niedermayer - vda_h264_dec.c Xidorn Quan - vima.c Paul B Mahol - vmnc.c Kostya Shishkov - vorbisdec.c Denes Balatoni, David Conrad - vorbisenc.c Oded Shimon - vp3* Mike Melanson - vp5 Aurelien Jacobs - vp6 Aurelien Jacobs - vp8 David Conrad, Jason Garrett-Glaser, Ronald Bultje - vp9 Ronald Bultje, Clément Bœsch - vqavideo.c Mike Melanson - wavpack.c Kostya Shishkov - wmaprodec.c Sascha Sommer - wmavoice.c Ronald S. Bultje - wmv2.c Michael Niedermayer - wnv1.c Kostya Shishkov - xan.c Mike Melanson - xbm* Paul B Mahol - xface Stefano Sabatini - xl.c Kostya Shishkov - xvmc.c Ivan Kalvachev - xwd* Paul B Mahol - zerocodec.c Derek Buitenhuis - zmbv* Kostya Shishkov - -Hardware acceleration: - crystalhd.c Philip Langdale - dxva2* Hendrik Leppkes, Laurent Aimar - vaapi* Gwenole Beauchesne - vda* Sebastien Zwickert - vdpau* Philip Langdale, Carl Eugen Hoyos - videotoolbox* Sebastien Zwickert - - -libavdevice -=========== - External Interface: - libavdevice/avdevice.h - - - avfoundation.m Thilo Borgmann - decklink* Deti Fliegl - dshow.c Roger Pack (CC rogerdpack@gmail.com) - fbdev_enc.c Lukasz Marek - gdigrab.c Roger Pack (CC rogerdpack@gmail.com) - iec61883.c Georg Lippitsch - lavfi Stefano Sabatini - libdc1394.c Roman Shaposhnik - opengl_enc.c Lukasz Marek - pulse_audio_enc.c Lukasz Marek - qtkit.m Thilo Borgmann - sdl Stefano Sabatini - v4l2.c Giorgio Vazzana - vfwcap.c Ramiro Polla - xv.c Lukasz Marek - -libavfilter -=========== - -Generic parts: - graphdump.c Nicolas George - -Filters: - f_drawgraph.c Paul B Mahol - af_adelay.c Paul B Mahol - af_aecho.c Paul B Mahol - af_afade.c Paul B Mahol - af_amerge.c Nicolas George - af_aphaser.c Paul B Mahol - af_aresample.c Michael Niedermayer - af_astats.c Paul B Mahol - af_atempo.c Pavel Koshevoy - af_biquads.c Paul B Mahol - af_chorus.c Paul B Mahol - af_compand.c Paul B Mahol - af_ladspa.c Paul B Mahol - af_pan.c Nicolas George - af_sidechaincompress.c Paul B Mahol - af_silenceremove.c Paul B Mahol - avf_aphasemeter.c Paul B Mahol - avf_avectorscope.c Paul B Mahol - avf_showcqt.c Muhammad Faiz - vf_blend.c Paul B Mahol - vf_chromakey.c Timo Rothenpieler - vf_colorchannelmixer.c Paul B Mahol - vf_colorbalance.c Paul B Mahol - vf_colorkey.c Timo Rothenpieler - vf_colorlevels.c Paul B Mahol - vf_deband.c Paul B Mahol - vf_dejudder.c Nicholas Robbins - vf_delogo.c Jean Delvare (CC ) - vf_drawbox.c/drawgrid Andrey Utkin - vf_extractplanes.c Paul B Mahol - vf_histogram.c Paul B Mahol - vf_hqx.c Clément Bœsch - vf_idet.c Pascal Massimino - vf_il.c Paul B Mahol - vf_lenscorrection.c Daniel Oberhoff - vf_mergeplanes.c Paul B Mahol - vf_neighbor.c Paul B Mahol - vf_psnr.c Paul B Mahol - vf_random.c Paul B Mahol - vf_scale.c Michael Niedermayer - vf_separatefields.c Paul B Mahol - vf_ssim.c Paul B Mahol - vf_stereo3d.c Paul B Mahol - vf_telecine.c Paul B Mahol - vf_yadif.c Michael Niedermayer - vf_zoompan.c Paul B Mahol - -Sources: - vsrc_mandelbrot.c Michael Niedermayer - -libavformat -=========== - -Generic parts: - External Interface: - libavformat/avformat.h Michael Niedermayer - Utility Code: - libavformat/utils.c Michael Niedermayer - - -Muxers/Demuxers: - 4xm.c Mike Melanson - aadec.c Vesselin Bontchev (vesselin.bontchev at yandex dot com) - adtsenc.c Robert Swain - afc.c Paul B Mahol - aiffdec.c Baptiste Coudurier, Matthieu Bouron - aiffenc.c Baptiste Coudurier, Matthieu Bouron - ape.c Kostya Shishkov - apngdec.c Benoit Fouet - ass* Aurelien Jacobs - astdec.c Paul B Mahol - astenc.c James Almer - avi* Michael Niedermayer - avisynth.c AvxSynth Team (avxsynth.testing at gmail dot com) - avr.c Paul B Mahol - bink.c Peter Ross - brstm.c Paul B Mahol - caf* Peter Ross - cdxl.c Paul B Mahol - crc.c Michael Niedermayer - daud.c Reimar Doeffinger - dss.c Oleksij Rempel, Michael Niedermayer - dtshddec.c Paul B Mahol - dv.c Roman Shaposhnik - dxa.c Kostya Shishkov - electronicarts.c Peter Ross - epafdec.c Paul B Mahol - ffm* Baptiste Coudurier - flac* Justin Ruggles - flic.c Mike Melanson - flvdec.c, flvenc.c Michael Niedermayer - gxf.c Reimar Doeffinger - gxfenc.c Baptiste Coudurier - hls.c Anssi Hannula - hls encryption (hlsenc.c) Christian Suloway - idcin.c Mike Melanson - idroqdec.c Mike Melanson - iff.c Jaikrishnan Menon - img2*.c Michael Niedermayer - ipmovie.c Mike Melanson - ircam* Paul B Mahol - iss.c Stefan Gehrer - jacosub* Clément Bœsch - jvdec.c Peter Ross - libmodplug.c Clément Bœsch - libnut.c Oded Shimon - lmlm4.c Ivo van Poorten - lvfdec.c Paul B Mahol - lxfdec.c Tomas Härdin - matroska.c Aurelien Jacobs - matroskadec.c Aurelien Jacobs - matroskaenc.c David Conrad - matroska subtitles (matroskaenc.c) John Peebles - metadata* Aurelien Jacobs - mgsts.c Paul B Mahol - microdvd* Aurelien Jacobs - mm.c Peter Ross - mov.c Michael Niedermayer, Baptiste Coudurier - movenc.c Baptiste Coudurier, Matthieu Bouron - movenccenc.c Eran Kornblau - mpc.c Kostya Shishkov - mpeg.c Michael Niedermayer - mpegenc.c Michael Niedermayer - mpegts.c Marton Balint - mpegtsenc.c Baptiste Coudurier - msnwc_tcp.c Ramiro Polla - mtv.c Reynaldo H. Verdejo Pinochet - mxf* Baptiste Coudurier - mxfdec.c Tomas Härdin - nistspheredec.c Paul B Mahol - nsvdec.c Francois Revol - nut* Michael Niedermayer - nuv.c Reimar Doeffinger - oggdec.c, oggdec.h David Conrad - oggenc.c Baptiste Coudurier - oggparse*.c David Conrad - oggparsedaala* Rostislav Pehlivanov - oma.c Maxim Poliakovski - paf.c Paul B Mahol - psxstr.c Mike Melanson - pva.c Ivo van Poorten - pvfdec.c Paul B Mahol - r3d.c Baptiste Coudurier - raw.c Michael Niedermayer - rdt.c Ronald S. Bultje - rl2.c Sascha Sommer - rmdec.c, rmenc.c Ronald S. Bultje, Kostya Shishkov - rtmp* Kostya Shishkov - rtp.c, rtpenc.c Martin Storsjo - rtpdec_ac3.* Gilles Chanteperdrix - rtpdec_dv.* Thomas Volkert - rtpdec_h261.*, rtpenc_h261.* Thomas Volkert - rtpdec_hevc.*, rtpenc_hevc.* Thomas Volkert - rtpdec_mpa_robust.* Gilles Chanteperdrix - rtpdec_asf.* Ronald S. Bultje - rtpdec_vp9.c Thomas Volkert - rtpenc_mpv.*, rtpenc_aac.* Martin Storsjo - rtsp.c Luca Barbato - sbgdec.c Nicolas George - sdp.c Martin Storsjo - segafilm.c Mike Melanson - segment.c Stefano Sabatini - siff.c Kostya Shishkov - smacker.c Kostya Shishkov - smjpeg* Paul B Mahol - spdif* Anssi Hannula - srtdec.c Aurelien Jacobs - swf.c Baptiste Coudurier - takdec.c Paul B Mahol - tta.c Alex Beregszaszi - txd.c Ivo van Poorten - voc.c Aurelien Jacobs - wav.c Michael Niedermayer - wc3movie.c Mike Melanson - webm dash (matroskaenc.c) Vignesh Venkatasubramanian - webvtt* Matthew J Heaney - westwood.c Mike Melanson - wtv.c Peter Ross - wv.c Kostya Shishkov - wvenc.c Paul B Mahol - -Protocols: - async.c Zhang Rui - bluray.c Petri Hintukainen - ftp.c Lukasz Marek - http.c Ronald S. Bultje - libssh.c Lukasz Marek - mms*.c Ronald S. Bultje - udp.c Luca Abeni - icecast.c Marvin Scholz - - -libswresample -============= - -Generic parts: - audioconvert.c Michael Niedermayer - dither.c Michael Niedermayer - rematrix*.c Michael Niedermayer - swresample*.c Michael Niedermayer - -Resamplers: - resample*.c Michael Niedermayer - soxr_resample.c Rob Sykes - - -Operating systems / CPU architectures -===================================== - -Alpha Mans Rullgard, Falk Hueffner -ARM Mans Rullgard -AVR32 Mans Rullgard -MIPS Mans Rullgard, Nedeljko Babic -Mac OS X / PowerPC Romain Dolbeau, Guillaume Poirier -Amiga / PowerPC Colin Ward -Linux / PowerPC Luca Barbato -Windows MinGW Alex Beregszaszi, Ramiro Polla -Windows Cygwin Victor Paesa -Windows MSVC Matthew Oliver, Hendrik Leppkes -Windows ICL Matthew Oliver -ADI/Blackfin DSP Marc Hoffman -Sparc Roman Shaposhnik -x86 Michael Niedermayer - - -Releases -======== - -2.8 Michael Niedermayer -2.7 Michael Niedermayer -2.6 Michael Niedermayer -2.5 Michael Niedermayer -2.4 Michael Niedermayer - -If you want to maintain an older release, please contact us - - -GnuPG Fingerprints of maintainers and contributors -================================================== - -Alexander Strasser 1C96 78B7 83CB 8AA7 9AF5 D1EB A7D8 A57B A876 E58F -Anssi Hannula 1A92 FF42 2DD9 8D2E 8AF7 65A9 4278 C520 513D F3CB -Anton Khirnov 6D0C 6625 56F8 65D1 E5F5 814B B50A 1241 C067 07AB -Ash Hughes 694D 43D2 D180 C7C7 6421 ABD3 A641 D0B7 623D 6029 -Attila Kinali 11F0 F9A6 A1D2 11F6 C745 D10C 6520 BCDD F2DF E765 -Baptiste Coudurier 8D77 134D 20CC 9220 201F C5DB 0AC9 325C 5C1A BAAA -Ben Littler 3EE3 3723 E560 3214 A8CD 4DEB 2CDB FCE7 768C 8D2C -Benoit Fouet B22A 4F4F 43EF 636B BB66 FCDC 0023 AE1E 2985 49C8 -Clément Bœsch 52D0 3A82 D445 F194 DB8B 2B16 87EE 2CB8 F4B8 FCF9 -Daniel Verkamp 78A6 07ED 782C 653E C628 B8B9 F0EB 8DD8 2F0E 21C7 -Diego Biurrun 8227 1E31 B6D9 4994 7427 E220 9CAE D6CC 4757 FCC5 -FFmpeg release signing key FCF9 86EA 15E6 E293 A564 4F10 B432 2F04 D676 58D8 -Ganesh Ajjanagadde C96A 848E 97C3 CEA2 AB72 5CE4 45F9 6A2D 3C36 FB1B -Gwenole Beauchesne 2E63 B3A6 3E44 37E2 017D 2704 53C7 6266 B153 99C4 -Jaikrishnan Menon 61A1 F09F 01C9 2D45 78E1 C862 25DC 8831 AF70 D368 -Jean Delvare 7CA6 9F44 60F1 BDC4 1FD2 C858 A552 6B9B B3CD 4E6A -Justin Ruggles 3136 ECC0 C10D 6C04 5F43 CA29 FCBE CD2A 3787 1EBF -Loren Merritt ABD9 08F4 C920 3F65 D8BE 35D7 1540 DAA7 060F 56DE -Lou Logan 7D68 DC73 CBEF EABB 671A B6CF 621C 2E28 82F8 DC3A -Luca Barbato 6677 4209 213C 8843 5B67 29E7 E84C 78C2 84E9 0E34 -Michael Niedermayer 9FF2 128B 147E F673 0BAD F133 611E C787 040B 0FAB -Nicolas George 24CE 01CE 9ACC 5CEB 74D8 8D9D B063 D997 36E5 4C93 -Panagiotis Issaris 6571 13A3 33D9 3726 F728 AA98 F643 B12E ECF3 E029 -Peter Ross A907 E02F A6E5 0CD2 34CD 20D2 6760 79C5 AC40 DD6B -Philip Langdale 5DC5 8D66 5FBA 3A43 18EC 045E F8D6 B194 6A75 682E -Reimar Doeffinger C61D 16E5 9E2C D10C 8958 38A4 0899 A2B9 06D4 D9C7 -Reinhard Tartler 9300 5DC2 7E87 6C37 ED7B CA9A 9808 3544 9453 48A4 -Reynaldo H. Verdejo Pinochet 6E27 CD34 170C C78E 4D4F 5F40 C18E 077F 3114 452A -Robert Swain EE7A 56EA 4A81 A7B5 2001 A521 67FA 362D A2FC 3E71 -Sascha Sommer 38A0 F88B 868E 9D3A 97D4 D6A0 E823 706F 1E07 0D3C -Stefano Sabatini 0D0B AD6B 5330 BBAD D3D6 6A0C 719C 2839 FC43 2D5F -Stephan Hilb 4F38 0B3A 5F39 B99B F505 E562 8D5C 5554 4E17 8863 -Tiancheng "Timothy" Gu 9456 AFC0 814A 8139 E994 8351 7FE6 B095 B582 B0D4 -Tim Nicholson 38CF DB09 3ED0 F607 8B67 6CED 0C0B FC44 8B0B FC83 -Tomas Härdin A79D 4E3D F38F 763F 91F5 8B33 A01E 8AE0 41BB 2551 -Wei Gao 4269 7741 857A 0E60 9EC5 08D2 4744 4EFA 62C1 87B9 diff --git a/media/ffvpx/README.md b/media/ffvpx/README.md deleted file mode 100644 index 241919193de0..000000000000 --- a/media/ffvpx/README.md +++ /dev/null @@ -1,49 +0,0 @@ -FFmpeg README -============= - -FFmpeg is a collection of libraries and tools to process multimedia content -such as audio, video, subtitles and related metadata. - -## Libraries - -* `libavcodec` provides implementation of a wider range of codecs. -* `libavformat` implements streaming protocols, container formats and basic I/O access. -* `libavutil` includes hashers, decompressors and miscellaneous utility functions. -* `libavfilter` provides a mean to alter decoded Audio and Video through chain of filters. -* `libavdevice` provides an abstraction to access capture and playback devices. -* `libswresample` implements audio mixing and resampling routines. -* `libswscale` implements color conversion and scaling routines. - -## Tools - -* [ffmpeg](https://ffmpeg.org/ffmpeg.html) is a command line toolbox to - manipulate, convert and stream multimedia content. -* [ffplay](https://ffmpeg.org/ffplay.html) is a minimalistic multimedia player. -* [ffprobe](https://ffmpeg.org/ffprobe.html) is a simple analysis tool to inspect - multimedia content. -* [ffserver](https://ffmpeg.org/ffserver.html) is a multimedia streaming server - for live broadcasts. -* Additional small tools such as `aviocat`, `ismindex` and `qt-faststart`. - -## Documentation - -The offline documentation is available in the **doc/** directory. - -The online documentation is available in the main [website](https://ffmpeg.org) -and in the [wiki](https://trac.ffmpeg.org). - -### Examples - -Coding examples are available in the **doc/examples** directory. - -## License - -FFmpeg codebase is mainly LGPL-licensed with optional components licensed under -GPL. Please refer to the LICENSE file for detailed information. - -## Contributing - -Patches should be submitted to the ffmpeg-devel mailing list using -`git format-patch` or `git send-email`. Github pull requests should be -avoided because they are not part of our review process. Few developers -follow pull requests so they will likely be ignored. diff --git a/media/ffvpx/README_MOZILLA b/media/ffvpx/README_MOZILLA index d7b178b65b2b..f2815630df80 100644 --- a/media/ffvpx/README_MOZILLA +++ b/media/ffvpx/README_MOZILLA @@ -1,6 +1,6 @@ This directory contains files used in gecko builds from FFmpeg (http://ffmpeg.org). The current files are from FFmpeg as of -revision n3.2-65-gee56777 +revision n3.4-1-g587fadaef1 All source files match their path from the library's source archive. Currently, we only use the vp8 and vp9 portion of the library, and only on x86 @@ -12,7 +12,7 @@ Once yasm is upgraded to 1.2 or later, AVX2 code could be re-enabled. Add --disable-avx2 to configure on those platforms. configuration files were generated as follow using the configure script: -./configure --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-asm --enable-yasm +./configure --disable-everything --disable-protocols --disable-demuxers --disable-muxers --disable-filters --disable-programs --disable-doc --disable-parsers --enable-parser=vp8 --enable-parser=vp9 --enable-decoder=vp8 --enable-decoder=vp9 --disable-static --enable-shared --disable-debug --disable-sdl2 --disable-libxcb --disable-securetransport --disable-iconv --disable-swresample --disable-swscale --disable-avdevice --disable-avfilter --disable-avformat --disable-d3d11va --disable-dxva2 --disable-vaapi --disable-vda --disable-vdpau --disable-videotoolbox --enable-decoder=flac --enable-parser=flac --enable-asm --enable-yasm config*: replace: /HAVE_(MALLOC_H|ARC4RANDOM|LOCALTIME_R|MEMALIGN|POSIX_MEMALIGN)/d @@ -30,3 +30,13 @@ replace: s/HAVE_SYSCTL 1/HAVE_SYSCTL 0 config_win32/64.h/asm: add to configure command: --toolchain=msvc + +Regenerate defaults_disabled.{h,asm} with: +$ grep -E ".*_(INDEV|OUTDEV|DECODER|ENCODER|DEMUXER|MUXER|PARSER|FILTER|HWACCEL|PROTOCOL|ENCODERS|DECODERS|HWACCELS|INDEVS|OUTDEVS|FILTERS|DEMUXERS|MUXERS|PROTOCOLS) 0" config.h > ~/Work/Mozilla/mozilla-central/media/ffvpx/defaults_disabled.h +$ grep -E ".*_(INDEV|OUTDEV|DECODER|ENCODER|DEMUXER|MUXER|PARSER|FILTER|HWACCEL|PROTOCOL|ENCODERS|DECODERS|HWACCELS|INDEVS|OUTDEVS|FILTERS|DEMUXERS|MUXERS|PROTOCOLS) 0" config.asm > ~/Work/Mozilla/mozilla-central/media/ffvpx/defaults_disabled.asm + +All new decoders/muxers/encoders/... should be added in the list of dummy functions found in libavcodec/dummy_funcs.c +otherwise linkage will fail on Windows. On other platforms they are optimised out and aren't necessary. + +To update the source tree, the files listed in FILES should typically be able to be copied as-is from ffmpeg tree. +Compilation will reveal if any files are missing. diff --git a/media/ffvpx/RELEASE b/media/ffvpx/RELEASE deleted file mode 100644 index 9f55b2ccb5f2..000000000000 --- a/media/ffvpx/RELEASE +++ /dev/null @@ -1 +0,0 @@ -3.0 diff --git a/media/ffvpx/RELEASE_NOTES b/media/ffvpx/RELEASE_NOTES deleted file mode 100644 index 861dc04a1316..000000000000 --- a/media/ffvpx/RELEASE_NOTES +++ /dev/null @@ -1,15 +0,0 @@ - - ┌─────────────────────────────────────────┐ - │ RELEASE NOTES for FFmpeg 3.0 "Einstein" │ - └─────────────────────────────────────────┘ - - The FFmpeg Project proudly presents FFmpeg 3.0 "Einstein", about 5 - months after the release of FFmpeg 2.8. - - A complete Changelog is available at the root of the project, and the - complete Git history on http://source.ffmpeg.org. - - We hope you will like this release as much as we enjoyed working on it, and - as usual, if you have any questions about it, or any FFmpeg related topic, - feel free to join us on the #ffmpeg IRC channel (on irc.freenode.net) or ask - on the mailing-lists. diff --git a/media/ffvpx/compat/atomics/win32/stdatomic.h b/media/ffvpx/compat/atomics/win32/stdatomic.h new file mode 100644 index 000000000000..bb8e6e7e15a5 --- /dev/null +++ b/media/ffvpx/compat/atomics/win32/stdatomic.h @@ -0,0 +1,181 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef COMPAT_ATOMICS_WIN32_STDATOMIC_H +#define COMPAT_ATOMICS_WIN32_STDATOMIC_H + +#define WIN32_LEAN_AND_MEAN +#include +#include +#include + +#define ATOMIC_FLAG_INIT 0 + +#define ATOMIC_VAR_INIT(value) (value) + +#define atomic_init(obj, value) \ +do { \ + *(obj) = (value); \ +} while(0) + +#define kill_dependency(y) ((void)0) + +#define atomic_thread_fence(order) \ + MemoryBarrier(); + +#define atomic_signal_fence(order) \ + ((void)0) + +#define atomic_is_lock_free(obj) 0 + +typedef intptr_t atomic_flag; +typedef intptr_t atomic_bool; +typedef intptr_t atomic_char; +typedef intptr_t atomic_schar; +typedef intptr_t atomic_uchar; +typedef intptr_t atomic_short; +typedef intptr_t atomic_ushort; +typedef intptr_t atomic_int; +typedef intptr_t atomic_uint; +typedef intptr_t atomic_long; +typedef intptr_t atomic_ulong; +typedef intptr_t atomic_llong; +typedef intptr_t atomic_ullong; +typedef intptr_t atomic_wchar_t; +typedef intptr_t atomic_int_least8_t; +typedef intptr_t atomic_uint_least8_t; +typedef intptr_t atomic_int_least16_t; +typedef intptr_t atomic_uint_least16_t; +typedef intptr_t atomic_int_least32_t; +typedef intptr_t atomic_uint_least32_t; +typedef intptr_t atomic_int_least64_t; +typedef intptr_t atomic_uint_least64_t; +typedef intptr_t atomic_int_fast8_t; +typedef intptr_t atomic_uint_fast8_t; +typedef intptr_t atomic_int_fast16_t; +typedef intptr_t atomic_uint_fast16_t; +typedef intptr_t atomic_int_fast32_t; +typedef intptr_t atomic_uint_fast32_t; +typedef intptr_t atomic_int_fast64_t; +typedef intptr_t atomic_uint_fast64_t; +typedef intptr_t atomic_intptr_t; +typedef intptr_t atomic_uintptr_t; +typedef intptr_t atomic_size_t; +typedef intptr_t atomic_ptrdiff_t; +typedef intptr_t atomic_intmax_t; +typedef intptr_t atomic_uintmax_t; + +#define atomic_store(object, desired) \ +do { \ + *(object) = (desired); \ + MemoryBarrier(); \ +} while (0) + +#define atomic_store_explicit(object, desired, order) \ + atomic_store(object, desired) + +#define atomic_load(object) \ + (MemoryBarrier(), *(object)) + +#define atomic_load_explicit(object, order) \ + atomic_load(object) + +#define atomic_exchange(object, desired) \ + InterlockedExchangePointer(object, desired); + +#define atomic_exchange_explicit(object, desired, order) \ + atomic_exchange(object, desired) + +static inline int atomic_compare_exchange_strong(intptr_t *object, intptr_t *expected, + intptr_t desired) +{ + intptr_t old = *expected; + *expected = (intptr_t)InterlockedCompareExchangePointer( + (PVOID *)object, (PVOID)desired, (PVOID)old); + return *expected == old; +} + +#define atomic_compare_exchange_strong_explicit(object, expected, desired, success, failure) \ + atomic_compare_exchange_strong(object, expected, desired) + +#define atomic_compare_exchange_weak(object, expected, desired) \ + atomic_compare_exchange_strong(object, expected, desired) + +#define atomic_compare_exchange_weak_explicit(object, expected, desired, success, failure) \ + atomic_compare_exchange_weak(object, expected, desired) + +#ifdef _WIN64 +#define atomic_fetch_add(object, operand) \ + InterlockedExchangeAdd64(object, operand) + +#define atomic_fetch_sub(object, operand) \ + InterlockedExchangeAdd64(object, -(operand)) + +#define atomic_fetch_or(object, operand) \ + InterlockedOr64(object, operand) + +#define atomic_fetch_xor(object, operand) \ + InterlockedXor64(object, operand) + +#define atomic_fetch_and(object, operand) \ + InterlockedAnd64(object, operand) +#else +#define atomic_fetch_add(object, operand) \ + InterlockedExchangeAdd(object, operand) + +#define atomic_fetch_sub(object, operand) \ + InterlockedExchangeAdd(object, -(operand)) + +#define atomic_fetch_or(object, operand) \ + InterlockedOr(object, operand) + +#define atomic_fetch_xor(object, operand) \ + InterlockedXor(object, operand) + +#define atomic_fetch_and(object, operand) \ + InterlockedAnd(object, operand) +#endif /* _WIN64 */ + +#define atomic_fetch_add_explicit(object, operand, order) \ + atomic_fetch_add(object, operand) + +#define atomic_fetch_sub_explicit(object, operand, order) \ + atomic_fetch_sub(object, operand) + +#define atomic_fetch_or_explicit(object, operand, order) \ + atomic_fetch_or(object, operand) + +#define atomic_fetch_xor_explicit(object, operand, order) \ + atomic_fetch_xor(object, operand) + +#define atomic_fetch_and_explicit(object, operand, order) \ + atomic_fetch_and(object, operand) + +#define atomic_flag_test_and_set(object) \ + atomic_exchange(object, 1) + +#define atomic_flag_test_and_set_explicit(object, order) \ + atomic_flag_test_and_set(object) + +#define atomic_flag_clear(object) \ + atomic_store(object, 0) + +#define atomic_flag_clear_explicit(object, order) \ + atomic_flag_clear(object) + +#endif /* COMPAT_ATOMICS_WIN32_STDATOMIC_H */ diff --git a/media/ffvpx/compat/w32pthreads.h b/media/ffvpx/compat/w32pthreads.h index 4ac2a995b84b..eeead6051f2d 100644 --- a/media/ffvpx/compat/w32pthreads.h +++ b/media/ffvpx/compat/w32pthreads.h @@ -77,7 +77,7 @@ typedef struct pthread_cond_t { static av_unused unsigned __stdcall attribute_align_arg win32thread_worker(void *arg) { - pthread_t *h = arg; + pthread_t *h = (pthread_t*)arg; h->ret = h->func(h->arg); return 0; } @@ -270,7 +270,7 @@ static av_unused int pthread_cond_init(pthread_cond_t *cond, const void *unused_ } /* non native condition variables */ - win32_cond = av_mallocz(sizeof(win32_cond_t)); + win32_cond = (win32_cond_t*)av_mallocz(sizeof(win32_cond_t)); if (!win32_cond) return ENOMEM; cond->Ptr = win32_cond; @@ -288,7 +288,7 @@ static av_unused int pthread_cond_init(pthread_cond_t *cond, const void *unused_ static av_unused int pthread_cond_destroy(pthread_cond_t *cond) { - win32_cond_t *win32_cond = cond->Ptr; + win32_cond_t *win32_cond = (win32_cond_t*)cond->Ptr; /* native condition variables do not destroy */ if (cond_init) return 0; @@ -305,7 +305,7 @@ static av_unused int pthread_cond_destroy(pthread_cond_t *cond) static av_unused int pthread_cond_broadcast(pthread_cond_t *cond) { - win32_cond_t *win32_cond = cond->Ptr; + win32_cond_t *win32_cond = (win32_cond_t*)cond->Ptr; int have_waiter; if (cond_broadcast) { @@ -337,7 +337,7 @@ static av_unused int pthread_cond_broadcast(pthread_cond_t *cond) static av_unused int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) { - win32_cond_t *win32_cond = cond->Ptr; + win32_cond_t *win32_cond = (win32_cond_t*)cond->Ptr; int last_waiter; if (cond_wait) { cond_wait(cond, mutex, INFINITE); @@ -369,7 +369,7 @@ static av_unused int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mu static av_unused int pthread_cond_signal(pthread_cond_t *cond) { - win32_cond_t *win32_cond = cond->Ptr; + win32_cond_t *win32_cond = (win32_cond_t*)cond->Ptr; int have_waiter; if (cond_signal) { cond_signal(cond); @@ -397,20 +397,20 @@ static av_unused int pthread_cond_signal(pthread_cond_t *cond) static av_unused void w32thread_init(void) { #if _WIN32_WINNT < 0x0600 - HANDLE kernel_dll = GetModuleHandle(TEXT("kernel32.dll")); + HMODULE kernel_dll = GetModuleHandle(TEXT("kernel32.dll")); /* if one is available, then they should all be available */ - cond_init = - (void*)GetProcAddress(kernel_dll, "InitializeConditionVariable"); - cond_broadcast = - (void*)GetProcAddress(kernel_dll, "WakeAllConditionVariable"); - cond_signal = - (void*)GetProcAddress(kernel_dll, "WakeConditionVariable"); - cond_wait = - (void*)GetProcAddress(kernel_dll, "SleepConditionVariableCS"); - initonce_begin = - (void*)GetProcAddress(kernel_dll, "InitOnceBeginInitialize"); - initonce_complete = - (void*)GetProcAddress(kernel_dll, "InitOnceComplete"); + cond_init = (void (WINAPI*)(pthread_cond_t *)) + GetProcAddress(kernel_dll, "InitializeConditionVariable"); + cond_broadcast = (void (WINAPI*)(pthread_cond_t *)) + GetProcAddress(kernel_dll, "WakeAllConditionVariable"); + cond_signal = (void (WINAPI*)(pthread_cond_t *)) + GetProcAddress(kernel_dll, "WakeConditionVariable"); + cond_wait = (BOOL (WINAPI*)(pthread_cond_t *, pthread_mutex_t *, DWORD)) + GetProcAddress(kernel_dll, "SleepConditionVariableCS"); + initonce_begin = (BOOL (WINAPI*)(pthread_once_t *, DWORD, BOOL *, void **)) + GetProcAddress(kernel_dll, "InitOnceBeginInitialize"); + initonce_complete = (BOOL (WINAPI*)(pthread_once_t *, DWORD, void *)) + GetProcAddress(kernel_dll, "InitOnceComplete"); #endif } diff --git a/media/ffvpx/config_common.h b/media/ffvpx/config_common.h index 6ee60762f942..dd3b3e1707fa 100644 --- a/media/ffvpx/config_common.h +++ b/media/ffvpx/config_common.h @@ -1,3 +1,4 @@ #ifndef MOZ_FFVPX_CONFIG_COMMON_H #define MOZ_FFVPX_CONFIG_COMMON_H +#include "defaults_disabled.h" #endif diff --git a/media/ffvpx/config_darwin32.h b/media/ffvpx/config_darwin32.h index de232dca27fa..f92be8737d46 100644 --- a/media/ffvpx/config_darwin32.h +++ b/media/ffvpx/config_darwin32.h @@ -384,15 +384,7 @@ #define HAVE_XLIB 0 #define CONFIG_BSFS 0 #define CONFIG_DECODERS 1 -#define CONFIG_ENCODERS 0 -#define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 -#define CONFIG_INDEVS 0 -#define CONFIG_OUTDEVS 0 -#define CONFIG_FILTERS 0 -#define CONFIG_DEMUXERS 0 -#define CONFIG_MUXERS 0 -#define CONFIG_PROTOCOLS 0 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 1 #define CONFIG_MANPAGES 1 @@ -514,7 +506,6 @@ #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 -#define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 @@ -579,7 +570,6 @@ #define CONFIG_FDCTDSP 0 #define CONFIG_FLACDSP 1 #define CONFIG_FMTCONVERT 0 -#define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 @@ -655,1570 +645,10 @@ #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 -#define CONFIG_AASC_DECODER 0 -#define CONFIG_AIC_DECODER 0 -#define CONFIG_ALIAS_PIX_DECODER 0 -#define CONFIG_AMV_DECODER 0 -#define CONFIG_ANM_DECODER 0 -#define CONFIG_ANSI_DECODER 0 -#define CONFIG_APNG_DECODER 0 -#define CONFIG_ASV1_DECODER 0 -#define CONFIG_ASV2_DECODER 0 -#define CONFIG_AURA_DECODER 0 -#define CONFIG_AURA2_DECODER 0 -#define CONFIG_AVRP_DECODER 0 -#define CONFIG_AVRN_DECODER 0 -#define CONFIG_AVS_DECODER 0 -#define CONFIG_AVUI_DECODER 0 -#define CONFIG_AYUV_DECODER 0 -#define CONFIG_BETHSOFTVID_DECODER 0 -#define CONFIG_BFI_DECODER 0 -#define CONFIG_BINK_DECODER 0 -#define CONFIG_BMP_DECODER 0 -#define CONFIG_BMV_VIDEO_DECODER 0 -#define CONFIG_BRENDER_PIX_DECODER 0 -#define CONFIG_C93_DECODER 0 -#define CONFIG_CAVS_DECODER 0 -#define CONFIG_CDGRAPHICS_DECODER 0 -#define CONFIG_CDXL_DECODER 0 -#define CONFIG_CFHD_DECODER 0 -#define CONFIG_CINEPAK_DECODER 0 -#define CONFIG_CLJR_DECODER 0 -#define CONFIG_CLLC_DECODER 0 -#define CONFIG_COMFORTNOISE_DECODER 0 -#define CONFIG_CPIA_DECODER 0 -#define CONFIG_CSCD_DECODER 0 -#define CONFIG_CYUV_DECODER 0 -#define CONFIG_DDS_DECODER 0 -#define CONFIG_DFA_DECODER 0 -#define CONFIG_DIRAC_DECODER 0 -#define CONFIG_DNXHD_DECODER 0 -#define CONFIG_DPX_DECODER 0 -#define CONFIG_DSICINVIDEO_DECODER 0 -#define CONFIG_DVAUDIO_DECODER 0 -#define CONFIG_DVVIDEO_DECODER 0 -#define CONFIG_DXA_DECODER 0 -#define CONFIG_DXTORY_DECODER 0 -#define CONFIG_DXV_DECODER 0 -#define CONFIG_EACMV_DECODER 0 -#define CONFIG_EAMAD_DECODER 0 -#define CONFIG_EATGQ_DECODER 0 -#define CONFIG_EATGV_DECODER 0 -#define CONFIG_EATQI_DECODER 0 -#define CONFIG_EIGHTBPS_DECODER 0 -#define CONFIG_EIGHTSVX_EXP_DECODER 0 -#define CONFIG_EIGHTSVX_FIB_DECODER 0 -#define CONFIG_ESCAPE124_DECODER 0 -#define CONFIG_ESCAPE130_DECODER 0 -#define CONFIG_EXR_DECODER 0 -#define CONFIG_FFV1_DECODER 0 -#define CONFIG_FFVHUFF_DECODER 0 -#define CONFIG_FIC_DECODER 0 -#define CONFIG_FLASHSV_DECODER 0 -#define CONFIG_FLASHSV2_DECODER 0 -#define CONFIG_FLIC_DECODER 0 -#define CONFIG_FLV_DECODER 0 -#define CONFIG_FOURXM_DECODER 0 -#define CONFIG_FRAPS_DECODER 0 -#define CONFIG_FRWU_DECODER 0 -#define CONFIG_G2M_DECODER 0 -#define CONFIG_GIF_DECODER 0 -#define CONFIG_H261_DECODER 0 -#define CONFIG_H263_DECODER 0 -#define CONFIG_H263I_DECODER 0 -#define CONFIG_H263P_DECODER 0 -#define CONFIG_H264_DECODER 0 -#define CONFIG_H264_CRYSTALHD_DECODER 0 -#define CONFIG_H264_MEDIACODEC_DECODER 0 -#define CONFIG_H264_MMAL_DECODER 0 -#define CONFIG_H264_QSV_DECODER 0 -#define CONFIG_H264_VDA_DECODER 0 -#define CONFIG_H264_VDPAU_DECODER 0 -#define CONFIG_HAP_DECODER 0 -#define CONFIG_HEVC_DECODER 0 -#define CONFIG_HEVC_QSV_DECODER 0 -#define CONFIG_HNM4_VIDEO_DECODER 0 -#define CONFIG_HQ_HQA_DECODER 0 -#define CONFIG_HQX_DECODER 0 -#define CONFIG_HUFFYUV_DECODER 0 -#define CONFIG_IDCIN_DECODER 0 -#define CONFIG_IFF_ILBM_DECODER 0 -#define CONFIG_INDEO2_DECODER 0 -#define CONFIG_INDEO3_DECODER 0 -#define CONFIG_INDEO4_DECODER 0 -#define CONFIG_INDEO5_DECODER 0 -#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -#define CONFIG_JPEG2000_DECODER 0 -#define CONFIG_JPEGLS_DECODER 0 -#define CONFIG_JV_DECODER 0 -#define CONFIG_KGV1_DECODER 0 -#define CONFIG_KMVC_DECODER 0 -#define CONFIG_LAGARITH_DECODER 0 -#define CONFIG_LOCO_DECODER 0 -#define CONFIG_M101_DECODER 0 -#define CONFIG_MAGICYUV_DECODER 0 -#define CONFIG_MDEC_DECODER 0 -#define CONFIG_MIMIC_DECODER 0 -#define CONFIG_MJPEG_DECODER 0 -#define CONFIG_MJPEGB_DECODER 0 -#define CONFIG_MMVIDEO_DECODER 0 -#define CONFIG_MOTIONPIXELS_DECODER 0 -#define CONFIG_MPEG_XVMC_DECODER 0 -#define CONFIG_MPEG1VIDEO_DECODER 0 -#define CONFIG_MPEG2VIDEO_DECODER 0 -#define CONFIG_MPEG4_DECODER 0 -#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG4_MMAL_DECODER 0 -#define CONFIG_MPEG4_VDPAU_DECODER 0 -#define CONFIG_MPEGVIDEO_DECODER 0 -#define CONFIG_MPEG_VDPAU_DECODER 0 -#define CONFIG_MPEG1_VDPAU_DECODER 0 -#define CONFIG_MPEG2_MMAL_DECODER 0 -#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG2_QSV_DECODER 0 -#define CONFIG_MSA1_DECODER 0 -#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MSMPEG4V1_DECODER 0 -#define CONFIG_MSMPEG4V2_DECODER 0 -#define CONFIG_MSMPEG4V3_DECODER 0 -#define CONFIG_MSRLE_DECODER 0 -#define CONFIG_MSS1_DECODER 0 -#define CONFIG_MSS2_DECODER 0 -#define CONFIG_MSVIDEO1_DECODER 0 -#define CONFIG_MSZH_DECODER 0 -#define CONFIG_MTS2_DECODER 0 -#define CONFIG_MVC1_DECODER 0 -#define CONFIG_MVC2_DECODER 0 -#define CONFIG_MXPEG_DECODER 0 -#define CONFIG_NUV_DECODER 0 -#define CONFIG_PAF_VIDEO_DECODER 0 -#define CONFIG_PAM_DECODER 0 -#define CONFIG_PBM_DECODER 0 -#define CONFIG_PCX_DECODER 0 -#define CONFIG_PGM_DECODER 0 -#define CONFIG_PGMYUV_DECODER 0 -#define CONFIG_PICTOR_DECODER 0 -#define CONFIG_PNG_DECODER 0 -#define CONFIG_PPM_DECODER 0 -#define CONFIG_PRORES_DECODER 0 -#define CONFIG_PRORES_LGPL_DECODER 0 -#define CONFIG_PTX_DECODER 0 -#define CONFIG_QDRAW_DECODER 0 -#define CONFIG_QPEG_DECODER 0 -#define CONFIG_QTRLE_DECODER 0 -#define CONFIG_R10K_DECODER 0 -#define CONFIG_R210_DECODER 0 -#define CONFIG_RAWVIDEO_DECODER 0 -#define CONFIG_RL2_DECODER 0 -#define CONFIG_ROQ_DECODER 0 -#define CONFIG_RPZA_DECODER 0 -#define CONFIG_RSCC_DECODER 0 -#define CONFIG_RV10_DECODER 0 -#define CONFIG_RV20_DECODER 0 -#define CONFIG_RV30_DECODER 0 -#define CONFIG_RV40_DECODER 0 -#define CONFIG_S302M_DECODER 0 -#define CONFIG_SANM_DECODER 0 -#define CONFIG_SCREENPRESSO_DECODER 0 -#define CONFIG_SDX2_DPCM_DECODER 0 -#define CONFIG_SGI_DECODER 0 -#define CONFIG_SGIRLE_DECODER 0 -#define CONFIG_SHEERVIDEO_DECODER 0 -#define CONFIG_SMACKER_DECODER 0 -#define CONFIG_SMC_DECODER 0 -#define CONFIG_SMVJPEG_DECODER 0 -#define CONFIG_SNOW_DECODER 0 -#define CONFIG_SP5X_DECODER 0 -#define CONFIG_SUNRAST_DECODER 0 -#define CONFIG_SVQ1_DECODER 0 -#define CONFIG_SVQ3_DECODER 0 -#define CONFIG_TARGA_DECODER 0 -#define CONFIG_TARGA_Y216_DECODER 0 -#define CONFIG_TDSC_DECODER 0 -#define CONFIG_THEORA_DECODER 0 -#define CONFIG_THP_DECODER 0 -#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -#define CONFIG_TIFF_DECODER 0 -#define CONFIG_TMV_DECODER 0 -#define CONFIG_TRUEMOTION1_DECODER 0 -#define CONFIG_TRUEMOTION2_DECODER 0 -#define CONFIG_TRUEMOTION2RT_DECODER 0 -#define CONFIG_TSCC_DECODER 0 -#define CONFIG_TSCC2_DECODER 0 -#define CONFIG_TXD_DECODER 0 -#define CONFIG_ULTI_DECODER 0 -#define CONFIG_UTVIDEO_DECODER 0 -#define CONFIG_V210_DECODER 0 -#define CONFIG_V210X_DECODER 0 -#define CONFIG_V308_DECODER 0 -#define CONFIG_V408_DECODER 0 -#define CONFIG_V410_DECODER 0 -#define CONFIG_VB_DECODER 0 -#define CONFIG_VBLE_DECODER 0 -#define CONFIG_VC1_DECODER 0 -#define CONFIG_VC1_CRYSTALHD_DECODER 0 -#define CONFIG_VC1_VDPAU_DECODER 0 -#define CONFIG_VC1IMAGE_DECODER 0 -#define CONFIG_VC1_MMAL_DECODER 0 -#define CONFIG_VC1_QSV_DECODER 0 -#define CONFIG_VCR1_DECODER 0 -#define CONFIG_VMDVIDEO_DECODER 0 -#define CONFIG_VMNC_DECODER 0 -#define CONFIG_VP3_DECODER 0 -#define CONFIG_VP5_DECODER 0 -#define CONFIG_VP6_DECODER 0 -#define CONFIG_VP6A_DECODER 0 -#define CONFIG_VP6F_DECODER 0 -#define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 1 #define CONFIG_VP9_DECODER 1 -#define CONFIG_VQA_DECODER 0 -#define CONFIG_WEBP_DECODER 0 -#define CONFIG_WMV1_DECODER 0 -#define CONFIG_WMV2_DECODER 0 -#define CONFIG_WMV3_DECODER 0 -#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -#define CONFIG_WMV3_VDPAU_DECODER 0 -#define CONFIG_WMV3IMAGE_DECODER 0 -#define CONFIG_WNV1_DECODER 0 -#define CONFIG_XAN_WC3_DECODER 0 -#define CONFIG_XAN_WC4_DECODER 0 -#define CONFIG_XBM_DECODER 0 -#define CONFIG_XFACE_DECODER 0 -#define CONFIG_XL_DECODER 0 -#define CONFIG_XWD_DECODER 0 -#define CONFIG_Y41P_DECODER 0 -#define CONFIG_YLC_DECODER 0 -#define CONFIG_YOP_DECODER 0 -#define CONFIG_YUV4_DECODER 0 -#define CONFIG_ZERO12V_DECODER 0 -#define CONFIG_ZEROCODEC_DECODER 0 -#define CONFIG_ZLIB_DECODER 0 -#define CONFIG_ZMBV_DECODER 0 -#define CONFIG_AAC_DECODER 0 -#define CONFIG_AAC_FIXED_DECODER 0 -#define CONFIG_AAC_LATM_DECODER 0 -#define CONFIG_AC3_DECODER 0 -#define CONFIG_AC3_FIXED_DECODER 0 -#define CONFIG_ALAC_DECODER 0 -#define CONFIG_ALS_DECODER 0 -#define CONFIG_AMRNB_DECODER 0 -#define CONFIG_AMRWB_DECODER 0 -#define CONFIG_APE_DECODER 0 -#define CONFIG_ATRAC1_DECODER 0 -#define CONFIG_ATRAC3_DECODER 0 -#define CONFIG_ATRAC3P_DECODER 0 -#define CONFIG_BINKAUDIO_DCT_DECODER 0 -#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -#define CONFIG_BMV_AUDIO_DECODER 0 -#define CONFIG_COOK_DECODER 0 -#define CONFIG_DCA_DECODER 0 -#define CONFIG_DSD_LSBF_DECODER 0 -#define CONFIG_DSD_MSBF_DECODER 0 -#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -#define CONFIG_DSICINAUDIO_DECODER 0 -#define CONFIG_DSS_SP_DECODER 0 -#define CONFIG_DST_DECODER 0 -#define CONFIG_EAC3_DECODER 0 -#define CONFIG_EVRC_DECODER 0 -#define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 1 -#define CONFIG_G723_1_DECODER 0 -#define CONFIG_G729_DECODER 0 -#define CONFIG_GSM_DECODER 0 -#define CONFIG_GSM_MS_DECODER 0 -#define CONFIG_IAC_DECODER 0 -#define CONFIG_IMC_DECODER 0 -#define CONFIG_INTERPLAY_ACM_DECODER 0 -#define CONFIG_MACE3_DECODER 0 -#define CONFIG_MACE6_DECODER 0 -#define CONFIG_METASOUND_DECODER 0 -#define CONFIG_MLP_DECODER 0 -#define CONFIG_MP1_DECODER 0 -#define CONFIG_MP1FLOAT_DECODER 0 -#define CONFIG_MP2_DECODER 0 -#define CONFIG_MP2FLOAT_DECODER 0 -#define CONFIG_MP3_DECODER 0 -#define CONFIG_MP3FLOAT_DECODER 0 -#define CONFIG_MP3ADU_DECODER 0 -#define CONFIG_MP3ADUFLOAT_DECODER 0 -#define CONFIG_MP3ON4_DECODER 0 -#define CONFIG_MP3ON4FLOAT_DECODER 0 -#define CONFIG_MPC7_DECODER 0 -#define CONFIG_MPC8_DECODER 0 -#define CONFIG_NELLYMOSER_DECODER 0 -#define CONFIG_ON2AVC_DECODER 0 -#define CONFIG_OPUS_DECODER 0 -#define CONFIG_PAF_AUDIO_DECODER 0 -#define CONFIG_QCELP_DECODER 0 -#define CONFIG_QDM2_DECODER 0 -#define CONFIG_RA_144_DECODER 0 -#define CONFIG_RA_288_DECODER 0 -#define CONFIG_RALF_DECODER 0 -#define CONFIG_SHORTEN_DECODER 0 -#define CONFIG_SIPR_DECODER 0 -#define CONFIG_SMACKAUD_DECODER 0 -#define CONFIG_SONIC_DECODER 0 -#define CONFIG_TAK_DECODER 0 -#define CONFIG_TRUEHD_DECODER 0 -#define CONFIG_TRUESPEECH_DECODER 0 -#define CONFIG_TTA_DECODER 0 -#define CONFIG_TWINVQ_DECODER 0 -#define CONFIG_VMDAUDIO_DECODER 0 -#define CONFIG_VORBIS_DECODER 0 -#define CONFIG_WAVPACK_DECODER 0 -#define CONFIG_WMALOSSLESS_DECODER 0 -#define CONFIG_WMAPRO_DECODER 0 -#define CONFIG_WMAV1_DECODER 0 -#define CONFIG_WMAV2_DECODER 0 -#define CONFIG_WMAVOICE_DECODER 0 -#define CONFIG_WS_SND1_DECODER 0 -#define CONFIG_XMA1_DECODER 0 -#define CONFIG_XMA2_DECODER 0 -#define CONFIG_PCM_ALAW_DECODER 0 -#define CONFIG_PCM_BLURAY_DECODER 0 -#define CONFIG_PCM_DVD_DECODER 0 -#define CONFIG_PCM_F32BE_DECODER 0 -#define CONFIG_PCM_F32LE_DECODER 0 -#define CONFIG_PCM_F64BE_DECODER 0 -#define CONFIG_PCM_F64LE_DECODER 0 -#define CONFIG_PCM_LXF_DECODER 0 -#define CONFIG_PCM_MULAW_DECODER 0 -#define CONFIG_PCM_S8_DECODER 0 -#define CONFIG_PCM_S8_PLANAR_DECODER 0 -#define CONFIG_PCM_S16BE_DECODER 0 -#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -#define CONFIG_PCM_S16LE_DECODER 0 -#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S24BE_DECODER 0 -#define CONFIG_PCM_S24DAUD_DECODER 0 -#define CONFIG_PCM_S24LE_DECODER 0 -#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S32BE_DECODER 0 -#define CONFIG_PCM_S32LE_DECODER 0 -#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S64BE_DECODER 0 -#define CONFIG_PCM_S64LE_DECODER 0 -#define CONFIG_PCM_U8_DECODER 0 -#define CONFIG_PCM_U16BE_DECODER 0 -#define CONFIG_PCM_U16LE_DECODER 0 -#define CONFIG_PCM_U24BE_DECODER 0 -#define CONFIG_PCM_U24LE_DECODER 0 -#define CONFIG_PCM_U32BE_DECODER 0 -#define CONFIG_PCM_U32LE_DECODER 0 -#define CONFIG_PCM_ZORK_DECODER 0 -#define CONFIG_INTERPLAY_DPCM_DECODER 0 -#define CONFIG_ROQ_DPCM_DECODER 0 -#define CONFIG_SOL_DPCM_DECODER 0 -#define CONFIG_XAN_DPCM_DECODER 0 -#define CONFIG_ADPCM_4XM_DECODER 0 -#define CONFIG_ADPCM_ADX_DECODER 0 -#define CONFIG_ADPCM_AFC_DECODER 0 -#define CONFIG_ADPCM_AICA_DECODER 0 -#define CONFIG_ADPCM_CT_DECODER 0 -#define CONFIG_ADPCM_DTK_DECODER 0 -#define CONFIG_ADPCM_EA_DECODER 0 -#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -#define CONFIG_ADPCM_EA_R1_DECODER 0 -#define CONFIG_ADPCM_EA_R2_DECODER 0 -#define CONFIG_ADPCM_EA_R3_DECODER 0 -#define CONFIG_ADPCM_EA_XAS_DECODER 0 -#define CONFIG_ADPCM_G722_DECODER 0 -#define CONFIG_ADPCM_G726_DECODER 0 -#define CONFIG_ADPCM_G726LE_DECODER 0 -#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -#define CONFIG_ADPCM_IMA_APC_DECODER 0 -#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_DECODER 0 -#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -#define CONFIG_ADPCM_IMA_WS_DECODER 0 -#define CONFIG_ADPCM_MS_DECODER 0 -#define CONFIG_ADPCM_MTAF_DECODER 0 -#define CONFIG_ADPCM_PSX_DECODER 0 -#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -#define CONFIG_ADPCM_SWF_DECODER 0 -#define CONFIG_ADPCM_THP_DECODER 0 -#define CONFIG_ADPCM_THP_LE_DECODER 0 -#define CONFIG_ADPCM_VIMA_DECODER 0 -#define CONFIG_ADPCM_XA_DECODER 0 -#define CONFIG_ADPCM_YAMAHA_DECODER 0 -#define CONFIG_SSA_DECODER 0 -#define CONFIG_ASS_DECODER 0 -#define CONFIG_CCAPTION_DECODER 0 -#define CONFIG_DVBSUB_DECODER 0 -#define CONFIG_DVDSUB_DECODER 0 -#define CONFIG_JACOSUB_DECODER 0 -#define CONFIG_MICRODVD_DECODER 0 -#define CONFIG_MOVTEXT_DECODER 0 -#define CONFIG_MPL2_DECODER 0 -#define CONFIG_PGSSUB_DECODER 0 -#define CONFIG_PJS_DECODER 0 -#define CONFIG_REALTEXT_DECODER 0 -#define CONFIG_SAMI_DECODER 0 -#define CONFIG_SRT_DECODER 0 -#define CONFIG_STL_DECODER 0 -#define CONFIG_SUBRIP_DECODER 0 -#define CONFIG_SUBVIEWER_DECODER 0 -#define CONFIG_SUBVIEWER1_DECODER 0 -#define CONFIG_TEXT_DECODER 0 -#define CONFIG_VPLAYER_DECODER 0 -#define CONFIG_WEBVTT_DECODER 0 -#define CONFIG_XSUB_DECODER 0 -#define CONFIG_AAC_AT_DECODER 0 -#define CONFIG_AC3_AT_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -#define CONFIG_ALAC_AT_DECODER 0 -#define CONFIG_AMR_NB_AT_DECODER 0 -#define CONFIG_EAC3_AT_DECODER 0 -#define CONFIG_GSM_MS_AT_DECODER 0 -#define CONFIG_ILBC_AT_DECODER 0 -#define CONFIG_MP1_AT_DECODER 0 -#define CONFIG_MP2_AT_DECODER 0 -#define CONFIG_MP3_AT_DECODER 0 -#define CONFIG_PCM_ALAW_AT_DECODER 0 -#define CONFIG_PCM_MULAW_AT_DECODER 0 -#define CONFIG_QDMC_AT_DECODER 0 -#define CONFIG_QDM2_AT_DECODER 0 -#define CONFIG_LIBCELT_DECODER 0 -#define CONFIG_LIBFDK_AAC_DECODER 0 -#define CONFIG_LIBGSM_DECODER 0 -#define CONFIG_LIBGSM_MS_DECODER 0 -#define CONFIG_LIBILBC_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -#define CONFIG_LIBOPENJPEG_DECODER 0 -#define CONFIG_LIBOPUS_DECODER 0 -#define CONFIG_LIBSCHROEDINGER_DECODER 0 -#define CONFIG_LIBSPEEX_DECODER 0 -#define CONFIG_LIBVORBIS_DECODER 0 -#define CONFIG_LIBVPX_VP8_DECODER 0 -#define CONFIG_LIBVPX_VP9_DECODER 0 -#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -#define CONFIG_BINTEXT_DECODER 0 -#define CONFIG_XBIN_DECODER 0 -#define CONFIG_IDF_DECODER 0 -#define CONFIG_LIBOPENH264_DECODER 0 -#define CONFIG_H263_CUVID_DECODER 0 -#define CONFIG_H264_CUVID_DECODER 0 -#define CONFIG_HEVC_CUVID_DECODER 0 -#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -#define CONFIG_MJPEG_CUVID_DECODER 0 -#define CONFIG_MPEG1_CUVID_DECODER 0 -#define CONFIG_MPEG2_CUVID_DECODER 0 -#define CONFIG_MPEG4_CUVID_DECODER 0 -#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -#define CONFIG_VC1_CUVID_DECODER 0 -#define CONFIG_VP8_CUVID_DECODER 0 -#define CONFIG_VP8_MEDIACODEC_DECODER 0 -#define CONFIG_VP9_CUVID_DECODER 0 -#define CONFIG_VP9_MEDIACODEC_DECODER 0 -#define CONFIG_AA_DEMUXER 0 -#define CONFIG_AAC_DEMUXER 0 -#define CONFIG_AC3_DEMUXER 0 -#define CONFIG_ACM_DEMUXER 0 -#define CONFIG_ACT_DEMUXER 0 -#define CONFIG_ADF_DEMUXER 0 -#define CONFIG_ADP_DEMUXER 0 -#define CONFIG_ADS_DEMUXER 0 -#define CONFIG_ADX_DEMUXER 0 -#define CONFIG_AEA_DEMUXER 0 -#define CONFIG_AFC_DEMUXER 0 -#define CONFIG_AIFF_DEMUXER 0 -#define CONFIG_AIX_DEMUXER 0 -#define CONFIG_AMR_DEMUXER 0 -#define CONFIG_ANM_DEMUXER 0 -#define CONFIG_APC_DEMUXER 0 -#define CONFIG_APE_DEMUXER 0 -#define CONFIG_APNG_DEMUXER 0 -#define CONFIG_AQTITLE_DEMUXER 0 -#define CONFIG_ASF_DEMUXER 0 -#define CONFIG_ASF_O_DEMUXER 0 -#define CONFIG_ASS_DEMUXER 0 -#define CONFIG_AST_DEMUXER 0 -#define CONFIG_AU_DEMUXER 0 -#define CONFIG_AVI_DEMUXER 0 -#define CONFIG_AVISYNTH_DEMUXER 0 -#define CONFIG_AVR_DEMUXER 0 -#define CONFIG_AVS_DEMUXER 0 -#define CONFIG_BETHSOFTVID_DEMUXER 0 -#define CONFIG_BFI_DEMUXER 0 -#define CONFIG_BINTEXT_DEMUXER 0 -#define CONFIG_BINK_DEMUXER 0 -#define CONFIG_BIT_DEMUXER 0 -#define CONFIG_BMV_DEMUXER 0 -#define CONFIG_BFSTM_DEMUXER 0 -#define CONFIG_BRSTM_DEMUXER 0 -#define CONFIG_BOA_DEMUXER 0 -#define CONFIG_C93_DEMUXER 0 -#define CONFIG_CAF_DEMUXER 0 -#define CONFIG_CAVSVIDEO_DEMUXER 0 -#define CONFIG_CDG_DEMUXER 0 -#define CONFIG_CDXL_DEMUXER 0 -#define CONFIG_CINE_DEMUXER 0 -#define CONFIG_CONCAT_DEMUXER 0 -#define CONFIG_DATA_DEMUXER 0 -#define CONFIG_DAUD_DEMUXER 0 -#define CONFIG_DCSTR_DEMUXER 0 -#define CONFIG_DFA_DEMUXER 0 -#define CONFIG_DIRAC_DEMUXER 0 -#define CONFIG_DNXHD_DEMUXER 0 -#define CONFIG_DSF_DEMUXER 0 -#define CONFIG_DSICIN_DEMUXER 0 -#define CONFIG_DSS_DEMUXER 0 -#define CONFIG_DTS_DEMUXER 0 -#define CONFIG_DTSHD_DEMUXER 0 -#define CONFIG_DV_DEMUXER 0 -#define CONFIG_DVBSUB_DEMUXER 0 -#define CONFIG_DVBTXT_DEMUXER 0 -#define CONFIG_DXA_DEMUXER 0 -#define CONFIG_EA_DEMUXER 0 -#define CONFIG_EA_CDATA_DEMUXER 0 -#define CONFIG_EAC3_DEMUXER 0 -#define CONFIG_EPAF_DEMUXER 0 -#define CONFIG_FFM_DEMUXER 0 -#define CONFIG_FFMETADATA_DEMUXER 0 -#define CONFIG_FILMSTRIP_DEMUXER 0 -#define CONFIG_FLAC_DEMUXER 0 -#define CONFIG_FLIC_DEMUXER 0 -#define CONFIG_FLV_DEMUXER 0 -#define CONFIG_LIVE_FLV_DEMUXER 0 -#define CONFIG_FOURXM_DEMUXER 0 -#define CONFIG_FRM_DEMUXER 0 -#define CONFIG_FSB_DEMUXER 0 -#define CONFIG_G722_DEMUXER 0 -#define CONFIG_G723_1_DEMUXER 0 -#define CONFIG_G729_DEMUXER 0 -#define CONFIG_GENH_DEMUXER 0 -#define CONFIG_GIF_DEMUXER 0 -#define CONFIG_GSM_DEMUXER 0 -#define CONFIG_GXF_DEMUXER 0 -#define CONFIG_H261_DEMUXER 0 -#define CONFIG_H263_DEMUXER 0 -#define CONFIG_H264_DEMUXER 0 -#define CONFIG_HEVC_DEMUXER 0 -#define CONFIG_HLS_DEMUXER 0 -#define CONFIG_HNM_DEMUXER 0 -#define CONFIG_ICO_DEMUXER 0 -#define CONFIG_IDCIN_DEMUXER 0 -#define CONFIG_IDF_DEMUXER 0 -#define CONFIG_IFF_DEMUXER 0 -#define CONFIG_ILBC_DEMUXER 0 -#define CONFIG_IMAGE2_DEMUXER 0 -#define CONFIG_IMAGE2PIPE_DEMUXER 0 -#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -#define CONFIG_INGENIENT_DEMUXER 0 -#define CONFIG_IPMOVIE_DEMUXER 0 -#define CONFIG_IRCAM_DEMUXER 0 -#define CONFIG_ISS_DEMUXER 0 -#define CONFIG_IV8_DEMUXER 0 -#define CONFIG_IVF_DEMUXER 0 -#define CONFIG_IVR_DEMUXER 0 -#define CONFIG_JACOSUB_DEMUXER 0 -#define CONFIG_JV_DEMUXER 0 -#define CONFIG_LMLM4_DEMUXER 0 -#define CONFIG_LOAS_DEMUXER 0 -#define CONFIG_LRC_DEMUXER 0 -#define CONFIG_LVF_DEMUXER 0 -#define CONFIG_LXF_DEMUXER 0 -#define CONFIG_M4V_DEMUXER 0 -#define CONFIG_MATROSKA_DEMUXER 0 -#define CONFIG_MGSTS_DEMUXER 0 -#define CONFIG_MICRODVD_DEMUXER 0 -#define CONFIG_MJPEG_DEMUXER 0 -#define CONFIG_MLP_DEMUXER 0 -#define CONFIG_MLV_DEMUXER 0 -#define CONFIG_MM_DEMUXER 0 -#define CONFIG_MMF_DEMUXER 0 -#define CONFIG_MOV_DEMUXER 0 -#define CONFIG_MP3_DEMUXER 0 -#define CONFIG_MPC_DEMUXER 0 -#define CONFIG_MPC8_DEMUXER 0 -#define CONFIG_MPEGPS_DEMUXER 0 -#define CONFIG_MPEGTS_DEMUXER 0 -#define CONFIG_MPEGTSRAW_DEMUXER 0 -#define CONFIG_MPEGVIDEO_DEMUXER 0 -#define CONFIG_MPJPEG_DEMUXER 0 -#define CONFIG_MPL2_DEMUXER 0 -#define CONFIG_MPSUB_DEMUXER 0 -#define CONFIG_MSF_DEMUXER 0 -#define CONFIG_MSNWC_TCP_DEMUXER 0 -#define CONFIG_MTAF_DEMUXER 0 -#define CONFIG_MTV_DEMUXER 0 -#define CONFIG_MUSX_DEMUXER 0 -#define CONFIG_MV_DEMUXER 0 -#define CONFIG_MVI_DEMUXER 0 -#define CONFIG_MXF_DEMUXER 0 -#define CONFIG_MXG_DEMUXER 0 -#define CONFIG_NC_DEMUXER 0 -#define CONFIG_NISTSPHERE_DEMUXER 0 -#define CONFIG_NSV_DEMUXER 0 -#define CONFIG_NUT_DEMUXER 0 -#define CONFIG_NUV_DEMUXER 0 -#define CONFIG_OGG_DEMUXER 0 -#define CONFIG_OMA_DEMUXER 0 -#define CONFIG_PAF_DEMUXER 0 -#define CONFIG_PCM_ALAW_DEMUXER 0 -#define CONFIG_PCM_MULAW_DEMUXER 0 -#define CONFIG_PCM_F64BE_DEMUXER 0 -#define CONFIG_PCM_F64LE_DEMUXER 0 -#define CONFIG_PCM_F32BE_DEMUXER 0 -#define CONFIG_PCM_F32LE_DEMUXER 0 -#define CONFIG_PCM_S32BE_DEMUXER 0 -#define CONFIG_PCM_S32LE_DEMUXER 0 -#define CONFIG_PCM_S24BE_DEMUXER 0 -#define CONFIG_PCM_S24LE_DEMUXER 0 -#define CONFIG_PCM_S16BE_DEMUXER 0 -#define CONFIG_PCM_S16LE_DEMUXER 0 -#define CONFIG_PCM_S8_DEMUXER 0 -#define CONFIG_PCM_U32BE_DEMUXER 0 -#define CONFIG_PCM_U32LE_DEMUXER 0 -#define CONFIG_PCM_U24BE_DEMUXER 0 -#define CONFIG_PCM_U24LE_DEMUXER 0 -#define CONFIG_PCM_U16BE_DEMUXER 0 -#define CONFIG_PCM_U16LE_DEMUXER 0 -#define CONFIG_PCM_U8_DEMUXER 0 -#define CONFIG_PJS_DEMUXER 0 -#define CONFIG_PMP_DEMUXER 0 -#define CONFIG_PVA_DEMUXER 0 -#define CONFIG_PVF_DEMUXER 0 -#define CONFIG_QCP_DEMUXER 0 -#define CONFIG_R3D_DEMUXER 0 -#define CONFIG_RAWVIDEO_DEMUXER 0 -#define CONFIG_REALTEXT_DEMUXER 0 -#define CONFIG_REDSPARK_DEMUXER 0 -#define CONFIG_RL2_DEMUXER 0 -#define CONFIG_RM_DEMUXER 0 -#define CONFIG_ROQ_DEMUXER 0 -#define CONFIG_RPL_DEMUXER 0 -#define CONFIG_RSD_DEMUXER 0 -#define CONFIG_RSO_DEMUXER 0 -#define CONFIG_RTP_DEMUXER 0 -#define CONFIG_RTSP_DEMUXER 0 -#define CONFIG_SAMI_DEMUXER 0 -#define CONFIG_SAP_DEMUXER 0 -#define CONFIG_SBG_DEMUXER 0 -#define CONFIG_SDP_DEMUXER 0 -#define CONFIG_SDR2_DEMUXER 0 -#define CONFIG_SEGAFILM_DEMUXER 0 -#define CONFIG_SHORTEN_DEMUXER 0 -#define CONFIG_SIFF_DEMUXER 0 -#define CONFIG_SLN_DEMUXER 0 -#define CONFIG_SMACKER_DEMUXER 0 -#define CONFIG_SMJPEG_DEMUXER 0 -#define CONFIG_SMUSH_DEMUXER 0 -#define CONFIG_SOL_DEMUXER 0 -#define CONFIG_SOX_DEMUXER 0 -#define CONFIG_SPDIF_DEMUXER 0 -#define CONFIG_SRT_DEMUXER 0 -#define CONFIG_STR_DEMUXER 0 -#define CONFIG_STL_DEMUXER 0 -#define CONFIG_SUBVIEWER1_DEMUXER 0 -#define CONFIG_SUBVIEWER_DEMUXER 0 -#define CONFIG_SUP_DEMUXER 0 -#define CONFIG_SVAG_DEMUXER 0 -#define CONFIG_SWF_DEMUXER 0 -#define CONFIG_TAK_DEMUXER 0 -#define CONFIG_TEDCAPTIONS_DEMUXER 0 -#define CONFIG_THP_DEMUXER 0 -#define CONFIG_THREEDOSTR_DEMUXER 0 -#define CONFIG_TIERTEXSEQ_DEMUXER 0 -#define CONFIG_TMV_DEMUXER 0 -#define CONFIG_TRUEHD_DEMUXER 0 -#define CONFIG_TTA_DEMUXER 0 -#define CONFIG_TXD_DEMUXER 0 -#define CONFIG_TTY_DEMUXER 0 -#define CONFIG_V210_DEMUXER 0 -#define CONFIG_V210X_DEMUXER 0 -#define CONFIG_VAG_DEMUXER 0 -#define CONFIG_VC1_DEMUXER 0 -#define CONFIG_VC1T_DEMUXER 0 -#define CONFIG_VIVO_DEMUXER 0 -#define CONFIG_VMD_DEMUXER 0 -#define CONFIG_VOBSUB_DEMUXER 0 -#define CONFIG_VOC_DEMUXER 0 -#define CONFIG_VPK_DEMUXER 0 -#define CONFIG_VPLAYER_DEMUXER 0 -#define CONFIG_VQF_DEMUXER 0 -#define CONFIG_W64_DEMUXER 0 -#define CONFIG_WAV_DEMUXER 0 -#define CONFIG_WC3_DEMUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -#define CONFIG_WEBVTT_DEMUXER 0 -#define CONFIG_WSAUD_DEMUXER 0 -#define CONFIG_WSD_DEMUXER 0 -#define CONFIG_WSVQA_DEMUXER 0 -#define CONFIG_WTV_DEMUXER 0 -#define CONFIG_WVE_DEMUXER 0 -#define CONFIG_WV_DEMUXER 0 -#define CONFIG_XA_DEMUXER 0 -#define CONFIG_XBIN_DEMUXER 0 -#define CONFIG_XMV_DEMUXER 0 -#define CONFIG_XVAG_DEMUXER 0 -#define CONFIG_XWMA_DEMUXER 0 -#define CONFIG_YOP_DEMUXER 0 -#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -#define CONFIG_LIBGME_DEMUXER 0 -#define CONFIG_LIBMODPLUG_DEMUXER 0 -#define CONFIG_LIBNUT_DEMUXER 0 -#define CONFIG_LIBOPENMPT_DEMUXER 0 -#define CONFIG_A64MULTI_ENCODER 0 -#define CONFIG_A64MULTI5_ENCODER 0 -#define CONFIG_ALIAS_PIX_ENCODER 0 -#define CONFIG_AMV_ENCODER 0 -#define CONFIG_APNG_ENCODER 0 -#define CONFIG_ASV1_ENCODER 0 -#define CONFIG_ASV2_ENCODER 0 -#define CONFIG_AVRP_ENCODER 0 -#define CONFIG_AVUI_ENCODER 0 -#define CONFIG_AYUV_ENCODER 0 -#define CONFIG_BMP_ENCODER 0 -#define CONFIG_CINEPAK_ENCODER 0 -#define CONFIG_CLJR_ENCODER 0 -#define CONFIG_COMFORTNOISE_ENCODER 0 -#define CONFIG_DNXHD_ENCODER 0 -#define CONFIG_DPX_ENCODER 0 -#define CONFIG_DVVIDEO_ENCODER 0 -#define CONFIG_FFV1_ENCODER 0 -#define CONFIG_FFVHUFF_ENCODER 0 -#define CONFIG_FLASHSV_ENCODER 0 -#define CONFIG_FLASHSV2_ENCODER 0 -#define CONFIG_FLV_ENCODER 0 -#define CONFIG_GIF_ENCODER 0 -#define CONFIG_H261_ENCODER 0 -#define CONFIG_H263_ENCODER 0 -#define CONFIG_H263P_ENCODER 0 -#define CONFIG_HAP_ENCODER 0 -#define CONFIG_HUFFYUV_ENCODER 0 -#define CONFIG_JPEG2000_ENCODER 0 -#define CONFIG_JPEGLS_ENCODER 0 -#define CONFIG_LJPEG_ENCODER 0 -#define CONFIG_MJPEG_ENCODER 0 -#define CONFIG_MPEG1VIDEO_ENCODER 0 -#define CONFIG_MPEG2VIDEO_ENCODER 0 -#define CONFIG_MPEG4_ENCODER 0 -#define CONFIG_MSMPEG4V2_ENCODER 0 -#define CONFIG_MSMPEG4V3_ENCODER 0 -#define CONFIG_MSVIDEO1_ENCODER 0 -#define CONFIG_PAM_ENCODER 0 -#define CONFIG_PBM_ENCODER 0 -#define CONFIG_PCX_ENCODER 0 -#define CONFIG_PGM_ENCODER 0 -#define CONFIG_PGMYUV_ENCODER 0 -#define CONFIG_PNG_ENCODER 0 -#define CONFIG_PPM_ENCODER 0 -#define CONFIG_PRORES_ENCODER 0 -#define CONFIG_PRORES_AW_ENCODER 0 -#define CONFIG_PRORES_KS_ENCODER 0 -#define CONFIG_QTRLE_ENCODER 0 -#define CONFIG_R10K_ENCODER 0 -#define CONFIG_R210_ENCODER 0 -#define CONFIG_RAWVIDEO_ENCODER 0 -#define CONFIG_ROQ_ENCODER 0 -#define CONFIG_RV10_ENCODER 0 -#define CONFIG_RV20_ENCODER 0 -#define CONFIG_S302M_ENCODER 0 -#define CONFIG_SGI_ENCODER 0 -#define CONFIG_SNOW_ENCODER 0 -#define CONFIG_SUNRAST_ENCODER 0 -#define CONFIG_SVQ1_ENCODER 0 -#define CONFIG_TARGA_ENCODER 0 -#define CONFIG_TIFF_ENCODER 0 -#define CONFIG_UTVIDEO_ENCODER 0 -#define CONFIG_V210_ENCODER 0 -#define CONFIG_V308_ENCODER 0 -#define CONFIG_V408_ENCODER 0 -#define CONFIG_V410_ENCODER 0 -#define CONFIG_VC2_ENCODER 0 -#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -#define CONFIG_WMV1_ENCODER 0 -#define CONFIG_WMV2_ENCODER 0 -#define CONFIG_XBM_ENCODER 0 -#define CONFIG_XFACE_ENCODER 0 -#define CONFIG_XWD_ENCODER 0 -#define CONFIG_Y41P_ENCODER 0 -#define CONFIG_YUV4_ENCODER 0 -#define CONFIG_ZLIB_ENCODER 0 -#define CONFIG_ZMBV_ENCODER 0 -#define CONFIG_AAC_ENCODER 0 -#define CONFIG_AC3_ENCODER 0 -#define CONFIG_AC3_FIXED_ENCODER 0 -#define CONFIG_ALAC_ENCODER 0 -#define CONFIG_DCA_ENCODER 0 -#define CONFIG_EAC3_ENCODER 0 -#define CONFIG_FLAC_ENCODER 0 -#define CONFIG_G723_1_ENCODER 0 -#define CONFIG_MLP_ENCODER 0 -#define CONFIG_MP2_ENCODER 0 -#define CONFIG_MP2FIXED_ENCODER 0 -#define CONFIG_NELLYMOSER_ENCODER 0 -#define CONFIG_RA_144_ENCODER 0 -#define CONFIG_SONIC_ENCODER 0 -#define CONFIG_SONIC_LS_ENCODER 0 -#define CONFIG_TRUEHD_ENCODER 0 -#define CONFIG_TTA_ENCODER 0 -#define CONFIG_VORBIS_ENCODER 0 -#define CONFIG_WAVPACK_ENCODER 0 -#define CONFIG_WMAV1_ENCODER 0 -#define CONFIG_WMAV2_ENCODER 0 -#define CONFIG_PCM_ALAW_ENCODER 0 -#define CONFIG_PCM_F32BE_ENCODER 0 -#define CONFIG_PCM_F32LE_ENCODER 0 -#define CONFIG_PCM_F64BE_ENCODER 0 -#define CONFIG_PCM_F64LE_ENCODER 0 -#define CONFIG_PCM_MULAW_ENCODER 0 -#define CONFIG_PCM_S8_ENCODER 0 -#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16BE_ENCODER 0 -#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16LE_ENCODER 0 -#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S24BE_ENCODER 0 -#define CONFIG_PCM_S24DAUD_ENCODER 0 -#define CONFIG_PCM_S24LE_ENCODER 0 -#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S32BE_ENCODER 0 -#define CONFIG_PCM_S32LE_ENCODER 0 -#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S64BE_ENCODER 0 -#define CONFIG_PCM_S64LE_ENCODER 0 -#define CONFIG_PCM_U8_ENCODER 0 -#define CONFIG_PCM_U16BE_ENCODER 0 -#define CONFIG_PCM_U16LE_ENCODER 0 -#define CONFIG_PCM_U24BE_ENCODER 0 -#define CONFIG_PCM_U24LE_ENCODER 0 -#define CONFIG_PCM_U32BE_ENCODER 0 -#define CONFIG_PCM_U32LE_ENCODER 0 -#define CONFIG_ROQ_DPCM_ENCODER 0 -#define CONFIG_ADPCM_ADX_ENCODER 0 -#define CONFIG_ADPCM_G722_ENCODER 0 -#define CONFIG_ADPCM_G726_ENCODER 0 -#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -#define CONFIG_ADPCM_MS_ENCODER 0 -#define CONFIG_ADPCM_SWF_ENCODER 0 -#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -#define CONFIG_SSA_ENCODER 0 -#define CONFIG_ASS_ENCODER 0 -#define CONFIG_DVBSUB_ENCODER 0 -#define CONFIG_DVDSUB_ENCODER 0 -#define CONFIG_MOVTEXT_ENCODER 0 -#define CONFIG_SRT_ENCODER 0 -#define CONFIG_SUBRIP_ENCODER 0 -#define CONFIG_TEXT_ENCODER 0 -#define CONFIG_WEBVTT_ENCODER 0 -#define CONFIG_XSUB_ENCODER 0 -#define CONFIG_AAC_AT_ENCODER 0 -#define CONFIG_ALAC_AT_ENCODER 0 -#define CONFIG_ILBC_AT_ENCODER 0 -#define CONFIG_PCM_ALAW_AT_ENCODER 0 -#define CONFIG_PCM_MULAW_AT_ENCODER 0 -#define CONFIG_LIBFDK_AAC_ENCODER 0 -#define CONFIG_LIBGSM_ENCODER 0 -#define CONFIG_LIBGSM_MS_ENCODER 0 -#define CONFIG_LIBILBC_ENCODER 0 -#define CONFIG_LIBMP3LAME_ENCODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -#define CONFIG_LIBOPENJPEG_ENCODER 0 -#define CONFIG_LIBOPUS_ENCODER 0 -#define CONFIG_LIBSCHROEDINGER_ENCODER 0 -#define CONFIG_LIBSHINE_ENCODER 0 -#define CONFIG_LIBSPEEX_ENCODER 0 -#define CONFIG_LIBTHEORA_ENCODER 0 -#define CONFIG_LIBTWOLAME_ENCODER 0 -#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -#define CONFIG_LIBVORBIS_ENCODER 0 -#define CONFIG_LIBVPX_VP8_ENCODER 0 -#define CONFIG_LIBVPX_VP9_ENCODER 0 -#define CONFIG_LIBWAVPACK_ENCODER 0 -#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -#define CONFIG_LIBWEBP_ENCODER 0 -#define CONFIG_LIBX262_ENCODER 0 -#define CONFIG_LIBX264_ENCODER 0 -#define CONFIG_LIBX264RGB_ENCODER 0 -#define CONFIG_LIBX265_ENCODER 0 -#define CONFIG_LIBXAVS_ENCODER 0 -#define CONFIG_LIBXVID_ENCODER 0 -#define CONFIG_LIBOPENH264_ENCODER 0 -#define CONFIG_H264_NVENC_ENCODER 0 -#define CONFIG_H264_OMX_ENCODER 0 -#define CONFIG_H264_QSV_ENCODER 0 -#define CONFIG_H264_VAAPI_ENCODER 0 -#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -#define CONFIG_NVENC_ENCODER 0 -#define CONFIG_NVENC_H264_ENCODER 0 -#define CONFIG_NVENC_HEVC_ENCODER 0 -#define CONFIG_HEVC_NVENC_ENCODER 0 -#define CONFIG_HEVC_QSV_ENCODER 0 -#define CONFIG_HEVC_VAAPI_ENCODER 0 -#define CONFIG_LIBKVAZAAR_ENCODER 0 -#define CONFIG_MJPEG_VAAPI_ENCODER 0 -#define CONFIG_MPEG2_QSV_ENCODER 0 -#define CONFIG_ABENCH_FILTER 0 -#define CONFIG_ACOMPRESSOR_FILTER 0 -#define CONFIG_ACROSSFADE_FILTER 0 -#define CONFIG_ACRUSHER_FILTER 0 -#define CONFIG_ADELAY_FILTER 0 -#define CONFIG_AECHO_FILTER 0 -#define CONFIG_AEMPHASIS_FILTER 0 -#define CONFIG_AEVAL_FILTER 0 -#define CONFIG_AFADE_FILTER 0 -#define CONFIG_AFFTFILT_FILTER 0 -#define CONFIG_AFORMAT_FILTER 0 -#define CONFIG_AGATE_FILTER 0 -#define CONFIG_AINTERLEAVE_FILTER 0 -#define CONFIG_ALIMITER_FILTER 0 -#define CONFIG_ALLPASS_FILTER 0 -#define CONFIG_ALOOP_FILTER 0 -#define CONFIG_AMERGE_FILTER 0 -#define CONFIG_AMETADATA_FILTER 0 -#define CONFIG_AMIX_FILTER 0 -#define CONFIG_ANEQUALIZER_FILTER 0 -#define CONFIG_ANULL_FILTER 0 -#define CONFIG_APAD_FILTER 0 -#define CONFIG_APERMS_FILTER 0 -#define CONFIG_APHASER_FILTER 0 -#define CONFIG_APULSATOR_FILTER 0 -#define CONFIG_AREALTIME_FILTER 0 -#define CONFIG_ARESAMPLE_FILTER 0 -#define CONFIG_AREVERSE_FILTER 0 -#define CONFIG_ASELECT_FILTER 0 -#define CONFIG_ASENDCMD_FILTER 0 -#define CONFIG_ASETNSAMPLES_FILTER 0 -#define CONFIG_ASETPTS_FILTER 0 -#define CONFIG_ASETRATE_FILTER 0 -#define CONFIG_ASETTB_FILTER 0 -#define CONFIG_ASHOWINFO_FILTER 0 -#define CONFIG_ASIDEDATA_FILTER 0 -#define CONFIG_ASPLIT_FILTER 0 -#define CONFIG_ASTATS_FILTER 0 -#define CONFIG_ASTREAMSELECT_FILTER 0 -#define CONFIG_ASYNCTS_FILTER 0 -#define CONFIG_ATEMPO_FILTER 0 -#define CONFIG_ATRIM_FILTER 0 -#define CONFIG_AZMQ_FILTER 0 -#define CONFIG_BANDPASS_FILTER 0 -#define CONFIG_BANDREJECT_FILTER 0 -#define CONFIG_BASS_FILTER 0 -#define CONFIG_BIQUAD_FILTER 0 -#define CONFIG_BS2B_FILTER 0 -#define CONFIG_CHANNELMAP_FILTER 0 -#define CONFIG_CHANNELSPLIT_FILTER 0 -#define CONFIG_CHORUS_FILTER 0 -#define CONFIG_COMPAND_FILTER 0 -#define CONFIG_COMPENSATIONDELAY_FILTER 0 -#define CONFIG_CRYSTALIZER_FILTER 0 -#define CONFIG_DCSHIFT_FILTER 0 -#define CONFIG_DYNAUDNORM_FILTER 0 -#define CONFIG_EARWAX_FILTER 0 -#define CONFIG_EBUR128_FILTER 0 -#define CONFIG_EQUALIZER_FILTER 0 -#define CONFIG_EXTRASTEREO_FILTER 0 -#define CONFIG_FIREQUALIZER_FILTER 0 -#define CONFIG_FLANGER_FILTER 0 -#define CONFIG_HDCD_FILTER 0 -#define CONFIG_HIGHPASS_FILTER 0 -#define CONFIG_JOIN_FILTER 0 -#define CONFIG_LADSPA_FILTER 0 -#define CONFIG_LOUDNORM_FILTER 0 -#define CONFIG_LOWPASS_FILTER 0 -#define CONFIG_PAN_FILTER 0 -#define CONFIG_REPLAYGAIN_FILTER 0 -#define CONFIG_RESAMPLE_FILTER 0 -#define CONFIG_RUBBERBAND_FILTER 0 -#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -#define CONFIG_SIDECHAINGATE_FILTER 0 -#define CONFIG_SILENCEDETECT_FILTER 0 -#define CONFIG_SILENCEREMOVE_FILTER 0 -#define CONFIG_SOFALIZER_FILTER 0 -#define CONFIG_STEREOTOOLS_FILTER 0 -#define CONFIG_STEREOWIDEN_FILTER 0 -#define CONFIG_TREBLE_FILTER 0 -#define CONFIG_TREMOLO_FILTER 0 -#define CONFIG_VIBRATO_FILTER 0 -#define CONFIG_VOLUME_FILTER 0 -#define CONFIG_VOLUMEDETECT_FILTER 0 -#define CONFIG_AEVALSRC_FILTER 0 -#define CONFIG_ANOISESRC_FILTER 0 -#define CONFIG_ANULLSRC_FILTER 0 -#define CONFIG_FLITE_FILTER 0 -#define CONFIG_SINE_FILTER 0 -#define CONFIG_ANULLSINK_FILTER 0 -#define CONFIG_ALPHAEXTRACT_FILTER 0 -#define CONFIG_ALPHAMERGE_FILTER 0 -#define CONFIG_ASS_FILTER 0 -#define CONFIG_ATADENOISE_FILTER 0 -#define CONFIG_AVGBLUR_FILTER 0 -#define CONFIG_BBOX_FILTER 0 -#define CONFIG_BENCH_FILTER 0 -#define CONFIG_BITPLANENOISE_FILTER 0 -#define CONFIG_BLACKDETECT_FILTER 0 -#define CONFIG_BLACKFRAME_FILTER 0 -#define CONFIG_BLEND_FILTER 0 -#define CONFIG_BOXBLUR_FILTER 0 -#define CONFIG_BWDIF_FILTER 0 -#define CONFIG_CHROMAKEY_FILTER 0 -#define CONFIG_CIESCOPE_FILTER 0 -#define CONFIG_CODECVIEW_FILTER 0 -#define CONFIG_COLORBALANCE_FILTER 0 -#define CONFIG_COLORCHANNELMIXER_FILTER 0 -#define CONFIG_COLORKEY_FILTER 0 -#define CONFIG_COLORLEVELS_FILTER 0 -#define CONFIG_COLORMATRIX_FILTER 0 -#define CONFIG_COLORSPACE_FILTER 0 -#define CONFIG_CONVOLUTION_FILTER 0 -#define CONFIG_COPY_FILTER 0 -#define CONFIG_COREIMAGE_FILTER 0 -#define CONFIG_COVER_RECT_FILTER 0 -#define CONFIG_CROP_FILTER 0 -#define CONFIG_CROPDETECT_FILTER 0 -#define CONFIG_CURVES_FILTER 0 -#define CONFIG_DATASCOPE_FILTER 0 -#define CONFIG_DCTDNOIZ_FILTER 0 -#define CONFIG_DEBAND_FILTER 0 -#define CONFIG_DECIMATE_FILTER 0 -#define CONFIG_DEFLATE_FILTER 0 -#define CONFIG_DEJUDDER_FILTER 0 -#define CONFIG_DELOGO_FILTER 0 -#define CONFIG_DESHAKE_FILTER 0 -#define CONFIG_DETELECINE_FILTER 0 -#define CONFIG_DILATION_FILTER 0 -#define CONFIG_DISPLACE_FILTER 0 -#define CONFIG_DRAWBOX_FILTER 0 -#define CONFIG_DRAWGRAPH_FILTER 0 -#define CONFIG_DRAWGRID_FILTER 0 -#define CONFIG_DRAWTEXT_FILTER 0 -#define CONFIG_EDGEDETECT_FILTER 0 -#define CONFIG_ELBG_FILTER 0 -#define CONFIG_EQ_FILTER 0 -#define CONFIG_EROSION_FILTER 0 -#define CONFIG_EXTRACTPLANES_FILTER 0 -#define CONFIG_FADE_FILTER 0 -#define CONFIG_FFTFILT_FILTER 0 -#define CONFIG_FIELD_FILTER 0 -#define CONFIG_FIELDHINT_FILTER 0 -#define CONFIG_FIELDMATCH_FILTER 0 -#define CONFIG_FIELDORDER_FILTER 0 -#define CONFIG_FIND_RECT_FILTER 0 -#define CONFIG_FORMAT_FILTER 0 -#define CONFIG_FPS_FILTER 0 -#define CONFIG_FRAMEPACK_FILTER 0 -#define CONFIG_FRAMERATE_FILTER 0 -#define CONFIG_FRAMESTEP_FILTER 0 -#define CONFIG_FREI0R_FILTER 0 -#define CONFIG_FSPP_FILTER 0 -#define CONFIG_GBLUR_FILTER 0 -#define CONFIG_GEQ_FILTER 0 -#define CONFIG_GRADFUN_FILTER 0 -#define CONFIG_HALDCLUT_FILTER 0 -#define CONFIG_HFLIP_FILTER 0 -#define CONFIG_HISTEQ_FILTER 0 -#define CONFIG_HISTOGRAM_FILTER 0 -#define CONFIG_HQDN3D_FILTER 0 -#define CONFIG_HQX_FILTER 0 -#define CONFIG_HSTACK_FILTER 0 -#define CONFIG_HUE_FILTER 0 -#define CONFIG_HWDOWNLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -#define CONFIG_HYSTERESIS_FILTER 0 -#define CONFIG_IDET_FILTER 0 -#define CONFIG_IL_FILTER 0 -#define CONFIG_INFLATE_FILTER 0 -#define CONFIG_INTERLACE_FILTER 0 -#define CONFIG_INTERLEAVE_FILTER 0 -#define CONFIG_KERNDEINT_FILTER 0 -#define CONFIG_LENSCORRECTION_FILTER 0 -#define CONFIG_LOOP_FILTER 0 -#define CONFIG_LUT_FILTER 0 -#define CONFIG_LUT2_FILTER 0 -#define CONFIG_LUT3D_FILTER 0 -#define CONFIG_LUTRGB_FILTER 0 -#define CONFIG_LUTYUV_FILTER 0 -#define CONFIG_MASKEDCLAMP_FILTER 0 -#define CONFIG_MASKEDMERGE_FILTER 0 -#define CONFIG_MCDEINT_FILTER 0 -#define CONFIG_MERGEPLANES_FILTER 0 -#define CONFIG_MESTIMATE_FILTER 0 -#define CONFIG_METADATA_FILTER 0 -#define CONFIG_MINTERPOLATE_FILTER 0 -#define CONFIG_MPDECIMATE_FILTER 0 -#define CONFIG_NEGATE_FILTER 0 -#define CONFIG_NLMEANS_FILTER 0 -#define CONFIG_NNEDI_FILTER 0 -#define CONFIG_NOFORMAT_FILTER 0 -#define CONFIG_NOISE_FILTER 0 -#define CONFIG_NULL_FILTER 0 -#define CONFIG_OCR_FILTER 0 -#define CONFIG_OCV_FILTER 0 -#define CONFIG_OVERLAY_FILTER 0 -#define CONFIG_OWDENOISE_FILTER 0 -#define CONFIG_PAD_FILTER 0 -#define CONFIG_PALETTEGEN_FILTER 0 -#define CONFIG_PALETTEUSE_FILTER 0 -#define CONFIG_PERMS_FILTER 0 -#define CONFIG_PERSPECTIVE_FILTER 0 -#define CONFIG_PHASE_FILTER 0 -#define CONFIG_PIXDESCTEST_FILTER 0 -#define CONFIG_PP_FILTER 0 -#define CONFIG_PP7_FILTER 0 -#define CONFIG_PREWITT_FILTER 0 -#define CONFIG_PSNR_FILTER 0 -#define CONFIG_PULLUP_FILTER 0 -#define CONFIG_QP_FILTER 0 -#define CONFIG_RANDOM_FILTER 0 -#define CONFIG_READVITC_FILTER 0 -#define CONFIG_REALTIME_FILTER 0 -#define CONFIG_REMAP_FILTER 0 -#define CONFIG_REMOVEGRAIN_FILTER 0 -#define CONFIG_REMOVELOGO_FILTER 0 -#define CONFIG_REPEATFIELDS_FILTER 0 -#define CONFIG_REVERSE_FILTER 0 -#define CONFIG_ROTATE_FILTER 0 -#define CONFIG_SAB_FILTER 0 -#define CONFIG_SCALE_FILTER 0 -#define CONFIG_SCALE_NPP_FILTER 0 -#define CONFIG_SCALE_VAAPI_FILTER 0 -#define CONFIG_SCALE2REF_FILTER 0 -#define CONFIG_SELECT_FILTER 0 -#define CONFIG_SELECTIVECOLOR_FILTER 0 -#define CONFIG_SENDCMD_FILTER 0 -#define CONFIG_SEPARATEFIELDS_FILTER 0 -#define CONFIG_SETDAR_FILTER 0 -#define CONFIG_SETFIELD_FILTER 0 -#define CONFIG_SETPTS_FILTER 0 -#define CONFIG_SETSAR_FILTER 0 -#define CONFIG_SETTB_FILTER 0 -#define CONFIG_SHOWINFO_FILTER 0 -#define CONFIG_SHOWPALETTE_FILTER 0 -#define CONFIG_SHUFFLEFRAMES_FILTER 0 -#define CONFIG_SHUFFLEPLANES_FILTER 0 -#define CONFIG_SIDEDATA_FILTER 0 -#define CONFIG_SIGNALSTATS_FILTER 0 -#define CONFIG_SMARTBLUR_FILTER 0 -#define CONFIG_SOBEL_FILTER 0 -#define CONFIG_SPLIT_FILTER 0 -#define CONFIG_SPP_FILTER 0 -#define CONFIG_SSIM_FILTER 0 -#define CONFIG_STEREO3D_FILTER 0 -#define CONFIG_STREAMSELECT_FILTER 0 -#define CONFIG_SUBTITLES_FILTER 0 -#define CONFIG_SUPER2XSAI_FILTER 0 -#define CONFIG_SWAPRECT_FILTER 0 -#define CONFIG_SWAPUV_FILTER 0 -#define CONFIG_TBLEND_FILTER 0 -#define CONFIG_TELECINE_FILTER 0 -#define CONFIG_THUMBNAIL_FILTER 0 -#define CONFIG_TILE_FILTER 0 -#define CONFIG_TINTERLACE_FILTER 0 -#define CONFIG_TRANSPOSE_FILTER 0 -#define CONFIG_TRIM_FILTER 0 -#define CONFIG_UNSHARP_FILTER 0 -#define CONFIG_USPP_FILTER 0 -#define CONFIG_VAGUEDENOISER_FILTER 0 -#define CONFIG_VECTORSCOPE_FILTER 0 -#define CONFIG_VFLIP_FILTER 0 -#define CONFIG_VIDSTABDETECT_FILTER 0 -#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -#define CONFIG_VIGNETTE_FILTER 0 -#define CONFIG_VSTACK_FILTER 0 -#define CONFIG_W3FDIF_FILTER 0 -#define CONFIG_WAVEFORM_FILTER 0 -#define CONFIG_WEAVE_FILTER 0 -#define CONFIG_XBR_FILTER 0 -#define CONFIG_YADIF_FILTER 0 -#define CONFIG_ZMQ_FILTER 0 -#define CONFIG_ZOOMPAN_FILTER 0 -#define CONFIG_ZSCALE_FILTER 0 -#define CONFIG_ALLRGB_FILTER 0 -#define CONFIG_ALLYUV_FILTER 0 -#define CONFIG_CELLAUTO_FILTER 0 -#define CONFIG_COLOR_FILTER 0 -#define CONFIG_COREIMAGESRC_FILTER 0 -#define CONFIG_FREI0R_SRC_FILTER 0 -#define CONFIG_HALDCLUTSRC_FILTER 0 -#define CONFIG_LIFE_FILTER 0 -#define CONFIG_MANDELBROT_FILTER 0 -#define CONFIG_MPTESTSRC_FILTER 0 -#define CONFIG_NULLSRC_FILTER 0 -#define CONFIG_RGBTESTSRC_FILTER 0 -#define CONFIG_SMPTEBARS_FILTER 0 -#define CONFIG_SMPTEHDBARS_FILTER 0 -#define CONFIG_TESTSRC_FILTER 0 -#define CONFIG_TESTSRC2_FILTER 0 -#define CONFIG_YUVTESTSRC_FILTER 0 -#define CONFIG_NULLSINK_FILTER 0 -#define CONFIG_ADRAWGRAPH_FILTER 0 -#define CONFIG_AHISTOGRAM_FILTER 0 -#define CONFIG_APHASEMETER_FILTER 0 -#define CONFIG_AVECTORSCOPE_FILTER 0 -#define CONFIG_CONCAT_FILTER 0 -#define CONFIG_SHOWCQT_FILTER 0 -#define CONFIG_SHOWFREQS_FILTER 0 -#define CONFIG_SHOWSPECTRUM_FILTER 0 -#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -#define CONFIG_SHOWVOLUME_FILTER 0 -#define CONFIG_SHOWWAVES_FILTER 0 -#define CONFIG_SHOWWAVESPIC_FILTER 0 -#define CONFIG_SPECTRUMSYNTH_FILTER 0 -#define CONFIG_AMOVIE_FILTER 0 -#define CONFIG_MOVIE_FILTER 0 -#define CONFIG_H263_CUVID_HWACCEL 0 -#define CONFIG_H263_VAAPI_HWACCEL 0 -#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_H264_CUVID_HWACCEL 0 -#define CONFIG_H264_D3D11VA_HWACCEL 0 -#define CONFIG_H264_DXVA2_HWACCEL 0 -#define CONFIG_H264_MEDIACODEC_HWACCEL 0 -#define CONFIG_H264_MMAL_HWACCEL 0 -#define CONFIG_H264_QSV_HWACCEL 0 -#define CONFIG_H264_VAAPI_HWACCEL 0 -#define CONFIG_H264_VDA_HWACCEL 0 -#define CONFIG_H264_VDA_OLD_HWACCEL 0 -#define CONFIG_H264_VDPAU_HWACCEL 0 -#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_HEVC_CUVID_HWACCEL 0 -#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -#define CONFIG_HEVC_DXVA2_HWACCEL 0 -#define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -#define CONFIG_HEVC_QSV_HWACCEL 0 -#define CONFIG_HEVC_VAAPI_HWACCEL 0 -#define CONFIG_HEVC_VDPAU_HWACCEL 0 -#define CONFIG_MJPEG_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_XVMC_HWACCEL 0 -#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG2_CUVID_HWACCEL 0 -#define CONFIG_MPEG2_XVMC_HWACCEL 0 -#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -#define CONFIG_MPEG2_MMAL_HWACCEL 0 -#define CONFIG_MPEG2_QSV_HWACCEL 0 -#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG4_CUVID_HWACCEL 0 -#define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -#define CONFIG_MPEG4_MMAL_HWACCEL 0 -#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_VC1_CUVID_HWACCEL 0 -#define CONFIG_VC1_D3D11VA_HWACCEL 0 -#define CONFIG_VC1_DXVA2_HWACCEL 0 -#define CONFIG_VC1_VAAPI_HWACCEL 0 -#define CONFIG_VC1_VDPAU_HWACCEL 0 -#define CONFIG_VC1_MMAL_HWACCEL 0 -#define CONFIG_VC1_QSV_HWACCEL 0 -#define CONFIG_VP8_CUVID_HWACCEL 0 -#define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_CUVID_HWACCEL 0 -#define CONFIG_VP9_D3D11VA_HWACCEL 0 -#define CONFIG_VP9_DXVA2_HWACCEL 0 -#define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -#define CONFIG_WMV3_DXVA2_HWACCEL 0 -#define CONFIG_WMV3_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_VDPAU_HWACCEL 0 -#define CONFIG_ALSA_INDEV 0 -#define CONFIG_AVFOUNDATION_INDEV 0 -#define CONFIG_BKTR_INDEV 0 -#define CONFIG_DECKLINK_INDEV 0 -#define CONFIG_DSHOW_INDEV 0 -#define CONFIG_DV1394_INDEV 0 -#define CONFIG_FBDEV_INDEV 0 -#define CONFIG_GDIGRAB_INDEV 0 -#define CONFIG_IEC61883_INDEV 0 -#define CONFIG_JACK_INDEV 0 -#define CONFIG_LAVFI_INDEV 0 -#define CONFIG_OPENAL_INDEV 0 -#define CONFIG_OSS_INDEV 0 -#define CONFIG_PULSE_INDEV 0 -#define CONFIG_QTKIT_INDEV 0 -#define CONFIG_SNDIO_INDEV 0 -#define CONFIG_V4L2_INDEV 0 -#define CONFIG_VFWCAP_INDEV 0 -#define CONFIG_X11GRAB_INDEV 0 -#define CONFIG_X11GRAB_XCB_INDEV 0 -#define CONFIG_LIBCDIO_INDEV 0 -#define CONFIG_LIBDC1394_INDEV 0 -#define CONFIG_A64_MUXER 0 -#define CONFIG_AC3_MUXER 0 -#define CONFIG_ADTS_MUXER 0 -#define CONFIG_ADX_MUXER 0 -#define CONFIG_AIFF_MUXER 0 -#define CONFIG_AMR_MUXER 0 -#define CONFIG_APNG_MUXER 0 -#define CONFIG_ASF_MUXER 0 -#define CONFIG_ASS_MUXER 0 -#define CONFIG_AST_MUXER 0 -#define CONFIG_ASF_STREAM_MUXER 0 -#define CONFIG_AU_MUXER 0 -#define CONFIG_AVI_MUXER 0 -#define CONFIG_AVM2_MUXER 0 -#define CONFIG_BIT_MUXER 0 -#define CONFIG_CAF_MUXER 0 -#define CONFIG_CAVSVIDEO_MUXER 0 -#define CONFIG_CRC_MUXER 0 -#define CONFIG_DASH_MUXER 0 -#define CONFIG_DATA_MUXER 0 -#define CONFIG_DAUD_MUXER 0 -#define CONFIG_DIRAC_MUXER 0 -#define CONFIG_DNXHD_MUXER 0 -#define CONFIG_DTS_MUXER 0 -#define CONFIG_DV_MUXER 0 -#define CONFIG_EAC3_MUXER 0 -#define CONFIG_F4V_MUXER 0 -#define CONFIG_FFM_MUXER 0 -#define CONFIG_FFMETADATA_MUXER 0 -#define CONFIG_FIFO_MUXER 0 -#define CONFIG_FILMSTRIP_MUXER 0 -#define CONFIG_FLAC_MUXER 0 -#define CONFIG_FLV_MUXER 0 -#define CONFIG_FRAMECRC_MUXER 0 -#define CONFIG_FRAMEHASH_MUXER 0 -#define CONFIG_FRAMEMD5_MUXER 0 -#define CONFIG_G722_MUXER 0 -#define CONFIG_G723_1_MUXER 0 -#define CONFIG_GIF_MUXER 0 -#define CONFIG_GSM_MUXER 0 -#define CONFIG_GXF_MUXER 0 -#define CONFIG_H261_MUXER 0 -#define CONFIG_H263_MUXER 0 -#define CONFIG_H264_MUXER 0 -#define CONFIG_HASH_MUXER 0 -#define CONFIG_HDS_MUXER 0 -#define CONFIG_HEVC_MUXER 0 -#define CONFIG_HLS_MUXER 0 -#define CONFIG_ICO_MUXER 0 -#define CONFIG_ILBC_MUXER 0 -#define CONFIG_IMAGE2_MUXER 0 -#define CONFIG_IMAGE2PIPE_MUXER 0 -#define CONFIG_IPOD_MUXER 0 -#define CONFIG_IRCAM_MUXER 0 -#define CONFIG_ISMV_MUXER 0 -#define CONFIG_IVF_MUXER 0 -#define CONFIG_JACOSUB_MUXER 0 -#define CONFIG_LATM_MUXER 0 -#define CONFIG_LRC_MUXER 0 -#define CONFIG_M4V_MUXER 0 -#define CONFIG_MD5_MUXER 0 -#define CONFIG_MATROSKA_MUXER 0 -#define CONFIG_MATROSKA_AUDIO_MUXER 0 -#define CONFIG_MICRODVD_MUXER 0 -#define CONFIG_MJPEG_MUXER 0 -#define CONFIG_MLP_MUXER 0 -#define CONFIG_MMF_MUXER 0 -#define CONFIG_MOV_MUXER 0 -#define CONFIG_MP2_MUXER 0 -#define CONFIG_MP3_MUXER 0 -#define CONFIG_MP4_MUXER 0 -#define CONFIG_MPEG1SYSTEM_MUXER 0 -#define CONFIG_MPEG1VCD_MUXER 0 -#define CONFIG_MPEG1VIDEO_MUXER 0 -#define CONFIG_MPEG2DVD_MUXER 0 -#define CONFIG_MPEG2SVCD_MUXER 0 -#define CONFIG_MPEG2VIDEO_MUXER 0 -#define CONFIG_MPEG2VOB_MUXER 0 -#define CONFIG_MPEGTS_MUXER 0 -#define CONFIG_MPJPEG_MUXER 0 -#define CONFIG_MXF_MUXER 0 -#define CONFIG_MXF_D10_MUXER 0 -#define CONFIG_MXF_OPATOM_MUXER 0 -#define CONFIG_NULL_MUXER 0 -#define CONFIG_NUT_MUXER 0 -#define CONFIG_OGA_MUXER 0 -#define CONFIG_OGG_MUXER 0 -#define CONFIG_OGV_MUXER 0 -#define CONFIG_OMA_MUXER 0 -#define CONFIG_OPUS_MUXER 0 -#define CONFIG_PCM_ALAW_MUXER 0 -#define CONFIG_PCM_MULAW_MUXER 0 -#define CONFIG_PCM_F64BE_MUXER 0 -#define CONFIG_PCM_F64LE_MUXER 0 -#define CONFIG_PCM_F32BE_MUXER 0 -#define CONFIG_PCM_F32LE_MUXER 0 -#define CONFIG_PCM_S32BE_MUXER 0 -#define CONFIG_PCM_S32LE_MUXER 0 -#define CONFIG_PCM_S24BE_MUXER 0 -#define CONFIG_PCM_S24LE_MUXER 0 -#define CONFIG_PCM_S16BE_MUXER 0 -#define CONFIG_PCM_S16LE_MUXER 0 -#define CONFIG_PCM_S8_MUXER 0 -#define CONFIG_PCM_U32BE_MUXER 0 -#define CONFIG_PCM_U32LE_MUXER 0 -#define CONFIG_PCM_U24BE_MUXER 0 -#define CONFIG_PCM_U24LE_MUXER 0 -#define CONFIG_PCM_U16BE_MUXER 0 -#define CONFIG_PCM_U16LE_MUXER 0 -#define CONFIG_PCM_U8_MUXER 0 -#define CONFIG_PSP_MUXER 0 -#define CONFIG_RAWVIDEO_MUXER 0 -#define CONFIG_RM_MUXER 0 -#define CONFIG_ROQ_MUXER 0 -#define CONFIG_RSO_MUXER 0 -#define CONFIG_RTP_MUXER 0 -#define CONFIG_RTP_MPEGTS_MUXER 0 -#define CONFIG_RTSP_MUXER 0 -#define CONFIG_SAP_MUXER 0 -#define CONFIG_SEGMENT_MUXER 0 -#define CONFIG_STREAM_SEGMENT_MUXER 0 -#define CONFIG_SINGLEJPEG_MUXER 0 -#define CONFIG_SMJPEG_MUXER 0 -#define CONFIG_SMOOTHSTREAMING_MUXER 0 -#define CONFIG_SOX_MUXER 0 -#define CONFIG_SPX_MUXER 0 -#define CONFIG_SPDIF_MUXER 0 -#define CONFIG_SRT_MUXER 0 -#define CONFIG_SWF_MUXER 0 -#define CONFIG_TEE_MUXER 0 -#define CONFIG_TG2_MUXER 0 -#define CONFIG_TGP_MUXER 0 -#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -#define CONFIG_TRUEHD_MUXER 0 -#define CONFIG_TTA_MUXER 0 -#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -#define CONFIG_VC1_MUXER 0 -#define CONFIG_VC1T_MUXER 0 -#define CONFIG_VOC_MUXER 0 -#define CONFIG_W64_MUXER 0 -#define CONFIG_WAV_MUXER 0 -#define CONFIG_WEBM_MUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -#define CONFIG_WEBM_CHUNK_MUXER 0 -#define CONFIG_WEBP_MUXER 0 -#define CONFIG_WEBVTT_MUXER 0 -#define CONFIG_WTV_MUXER 0 -#define CONFIG_WV_MUXER 0 -#define CONFIG_YUV4MPEGPIPE_MUXER 0 -#define CONFIG_CHROMAPRINT_MUXER 0 -#define CONFIG_LIBNUT_MUXER 0 -#define CONFIG_ALSA_OUTDEV 0 -#define CONFIG_CACA_OUTDEV 0 -#define CONFIG_DECKLINK_OUTDEV 0 -#define CONFIG_FBDEV_OUTDEV 0 -#define CONFIG_OPENGL_OUTDEV 0 -#define CONFIG_OSS_OUTDEV 0 -#define CONFIG_PULSE_OUTDEV 0 -#define CONFIG_SDL2_OUTDEV 0 -#define CONFIG_SNDIO_OUTDEV 0 -#define CONFIG_V4L2_OUTDEV 0 -#define CONFIG_XV_OUTDEV 0 -#define CONFIG_AAC_PARSER 0 -#define CONFIG_AAC_LATM_PARSER 0 -#define CONFIG_AC3_PARSER 0 -#define CONFIG_ADX_PARSER 0 -#define CONFIG_BMP_PARSER 0 -#define CONFIG_CAVSVIDEO_PARSER 0 -#define CONFIG_COOK_PARSER 0 -#define CONFIG_DCA_PARSER 0 -#define CONFIG_DIRAC_PARSER 0 -#define CONFIG_DNXHD_PARSER 0 -#define CONFIG_DPX_PARSER 0 -#define CONFIG_DVAUDIO_PARSER 0 -#define CONFIG_DVBSUB_PARSER 0 -#define CONFIG_DVDSUB_PARSER 0 -#define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 1 -#define CONFIG_G729_PARSER 0 -#define CONFIG_GSM_PARSER 0 -#define CONFIG_H261_PARSER 0 -#define CONFIG_H263_PARSER 0 -#define CONFIG_H264_PARSER 0 -#define CONFIG_HEVC_PARSER 0 -#define CONFIG_MJPEG_PARSER 0 -#define CONFIG_MLP_PARSER 0 -#define CONFIG_MPEG4VIDEO_PARSER 0 -#define CONFIG_MPEGAUDIO_PARSER 0 -#define CONFIG_MPEGVIDEO_PARSER 0 -#define CONFIG_OPUS_PARSER 0 -#define CONFIG_PNG_PARSER 0 -#define CONFIG_PNM_PARSER 0 -#define CONFIG_RV30_PARSER 0 -#define CONFIG_RV40_PARSER 0 -#define CONFIG_TAK_PARSER 0 -#define CONFIG_VC1_PARSER 0 -#define CONFIG_VORBIS_PARSER 0 -#define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 1 #define CONFIG_VP9_PARSER 1 -#define CONFIG_ASYNC_PROTOCOL 0 -#define CONFIG_BLURAY_PROTOCOL 0 -#define CONFIG_CACHE_PROTOCOL 0 -#define CONFIG_CONCAT_PROTOCOL 0 -#define CONFIG_CRYPTO_PROTOCOL 0 -#define CONFIG_DATA_PROTOCOL 0 -#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -#define CONFIG_FILE_PROTOCOL 0 -#define CONFIG_FTP_PROTOCOL 0 -#define CONFIG_GOPHER_PROTOCOL 0 -#define CONFIG_HLS_PROTOCOL 0 -#define CONFIG_HTTP_PROTOCOL 0 -#define CONFIG_HTTPPROXY_PROTOCOL 0 -#define CONFIG_HTTPS_PROTOCOL 0 -#define CONFIG_ICECAST_PROTOCOL 0 -#define CONFIG_MMSH_PROTOCOL 0 -#define CONFIG_MMST_PROTOCOL 0 -#define CONFIG_MD5_PROTOCOL 0 -#define CONFIG_PIPE_PROTOCOL 0 -#define CONFIG_RTMP_PROTOCOL 0 -#define CONFIG_RTMPE_PROTOCOL 0 -#define CONFIG_RTMPS_PROTOCOL 0 -#define CONFIG_RTMPT_PROTOCOL 0 -#define CONFIG_RTMPTE_PROTOCOL 0 -#define CONFIG_RTMPTS_PROTOCOL 0 -#define CONFIG_RTP_PROTOCOL 0 -#define CONFIG_SCTP_PROTOCOL 0 -#define CONFIG_SRTP_PROTOCOL 0 -#define CONFIG_SUBFILE_PROTOCOL 0 -#define CONFIG_TEE_PROTOCOL 0 -#define CONFIG_TCP_PROTOCOL 0 -#define CONFIG_TLS_GNUTLS_PROTOCOL 0 -#define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -#define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -#define CONFIG_TLS_OPENSSL_PROTOCOL 0 -#define CONFIG_UDP_PROTOCOL 0 -#define CONFIG_UDPLITE_PROTOCOL 0 -#define CONFIG_UNIX_PROTOCOL 0 -#define CONFIG_LIBRTMP_PROTOCOL 0 -#define CONFIG_LIBRTMPE_PROTOCOL 0 -#define CONFIG_LIBRTMPS_PROTOCOL 0 -#define CONFIG_LIBRTMPT_PROTOCOL 0 -#define CONFIG_LIBRTMPTE_PROTOCOL 0 -#define CONFIG_LIBSSH_PROTOCOL 0 -#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ diff --git a/media/ffvpx/config_darwin64.asm b/media/ffvpx/config_darwin64.asm index 0e386ee143db..af23f7124a73 100644 --- a/media/ffvpx/config_darwin64.asm +++ b/media/ffvpx/config_darwin64.asm @@ -369,15 +369,7 @@ %define HAVE_XLIB 0 %define CONFIG_BSFS 0 %define CONFIG_DECODERS 1 -%define CONFIG_ENCODERS 0 -%define CONFIG_HWACCELS 0 %define CONFIG_PARSERS 1 -%define CONFIG_INDEVS 0 -%define CONFIG_OUTDEVS 0 -%define CONFIG_FILTERS 0 -%define CONFIG_DEMUXERS 0 -%define CONFIG_MUXERS 0 -%define CONFIG_PROTOCOLS 0 %define CONFIG_DOC 0 %define CONFIG_HTMLPAGES 1 %define CONFIG_MANPAGES 1 @@ -499,7 +491,6 @@ %define CONFIG_VAAPI 0 %define CONFIG_VDA 0 %define CONFIG_VDPAU 0 -%define CONFIG_VIDEOTOOLBOX_HWACCEL 0 %define CONFIG_XVMC 0 %define CONFIG_FTRAPV 0 %define CONFIG_GRAY 0 @@ -564,7 +555,6 @@ %define CONFIG_FDCTDSP 0 %define CONFIG_FLACDSP 1 %define CONFIG_FMTCONVERT 0 -%define CONFIG_FRAME_THREAD_ENCODER 0 %define CONFIG_G722DSP 0 %define CONFIG_GOLOMB 1 %define CONFIG_GPLV3 0 @@ -640,1569 +630,9 @@ %define CONFIG_REMOVE_EXTRADATA_BSF 0 %define CONFIG_TEXT2MOVSUB_BSF 0 %define CONFIG_VP9_SUPERFRAME_BSF 0 -%define CONFIG_AASC_DECODER 0 -%define CONFIG_AIC_DECODER 0 -%define CONFIG_ALIAS_PIX_DECODER 0 -%define CONFIG_AMV_DECODER 0 -%define CONFIG_ANM_DECODER 0 -%define CONFIG_ANSI_DECODER 0 -%define CONFIG_APNG_DECODER 0 -%define CONFIG_ASV1_DECODER 0 -%define CONFIG_ASV2_DECODER 0 -%define CONFIG_AURA_DECODER 0 -%define CONFIG_AURA2_DECODER 0 -%define CONFIG_AVRP_DECODER 0 -%define CONFIG_AVRN_DECODER 0 -%define CONFIG_AVS_DECODER 0 -%define CONFIG_AVUI_DECODER 0 -%define CONFIG_AYUV_DECODER 0 -%define CONFIG_BETHSOFTVID_DECODER 0 -%define CONFIG_BFI_DECODER 0 -%define CONFIG_BINK_DECODER 0 -%define CONFIG_BMP_DECODER 0 -%define CONFIG_BMV_VIDEO_DECODER 0 -%define CONFIG_BRENDER_PIX_DECODER 0 -%define CONFIG_C93_DECODER 0 -%define CONFIG_CAVS_DECODER 0 -%define CONFIG_CDGRAPHICS_DECODER 0 -%define CONFIG_CDXL_DECODER 0 -%define CONFIG_CFHD_DECODER 0 -%define CONFIG_CINEPAK_DECODER 0 -%define CONFIG_CLJR_DECODER 0 -%define CONFIG_CLLC_DECODER 0 -%define CONFIG_COMFORTNOISE_DECODER 0 -%define CONFIG_CPIA_DECODER 0 -%define CONFIG_CSCD_DECODER 0 -%define CONFIG_CYUV_DECODER 0 -%define CONFIG_DDS_DECODER 0 -%define CONFIG_DFA_DECODER 0 -%define CONFIG_DIRAC_DECODER 0 -%define CONFIG_DNXHD_DECODER 0 -%define CONFIG_DPX_DECODER 0 -%define CONFIG_DSICINVIDEO_DECODER 0 -%define CONFIG_DVAUDIO_DECODER 0 -%define CONFIG_DVVIDEO_DECODER 0 -%define CONFIG_DXA_DECODER 0 -%define CONFIG_DXTORY_DECODER 0 -%define CONFIG_DXV_DECODER 0 -%define CONFIG_EACMV_DECODER 0 -%define CONFIG_EAMAD_DECODER 0 -%define CONFIG_EATGQ_DECODER 0 -%define CONFIG_EATGV_DECODER 0 -%define CONFIG_EATQI_DECODER 0 -%define CONFIG_EIGHTBPS_DECODER 0 -%define CONFIG_EIGHTSVX_EXP_DECODER 0 -%define CONFIG_EIGHTSVX_FIB_DECODER 0 -%define CONFIG_ESCAPE124_DECODER 0 -%define CONFIG_ESCAPE130_DECODER 0 -%define CONFIG_EXR_DECODER 0 -%define CONFIG_FFV1_DECODER 0 -%define CONFIG_FFVHUFF_DECODER 0 -%define CONFIG_FIC_DECODER 0 -%define CONFIG_FLASHSV_DECODER 0 -%define CONFIG_FLASHSV2_DECODER 0 -%define CONFIG_FLIC_DECODER 0 -%define CONFIG_FLV_DECODER 0 -%define CONFIG_FOURXM_DECODER 0 -%define CONFIG_FRAPS_DECODER 0 -%define CONFIG_FRWU_DECODER 0 -%define CONFIG_G2M_DECODER 0 -%define CONFIG_GIF_DECODER 0 -%define CONFIG_H261_DECODER 0 -%define CONFIG_H263_DECODER 0 -%define CONFIG_H263I_DECODER 0 -%define CONFIG_H263P_DECODER 0 -%define CONFIG_H264_DECODER 0 -%define CONFIG_H264_CRYSTALHD_DECODER 0 -%define CONFIG_H264_MEDIACODEC_DECODER 0 -%define CONFIG_H264_MMAL_DECODER 0 -%define CONFIG_H264_QSV_DECODER 0 -%define CONFIG_H264_VDA_DECODER 0 -%define CONFIG_H264_VDPAU_DECODER 0 -%define CONFIG_HAP_DECODER 0 -%define CONFIG_HEVC_DECODER 0 -%define CONFIG_HEVC_QSV_DECODER 0 -%define CONFIG_HNM4_VIDEO_DECODER 0 -%define CONFIG_HQ_HQA_DECODER 0 -%define CONFIG_HQX_DECODER 0 -%define CONFIG_HUFFYUV_DECODER 0 -%define CONFIG_IDCIN_DECODER 0 -%define CONFIG_IFF_ILBM_DECODER 0 -%define CONFIG_INDEO2_DECODER 0 -%define CONFIG_INDEO3_DECODER 0 -%define CONFIG_INDEO4_DECODER 0 -%define CONFIG_INDEO5_DECODER 0 -%define CONFIG_INTERPLAY_VIDEO_DECODER 0 -%define CONFIG_JPEG2000_DECODER 0 -%define CONFIG_JPEGLS_DECODER 0 -%define CONFIG_JV_DECODER 0 -%define CONFIG_KGV1_DECODER 0 -%define CONFIG_KMVC_DECODER 0 -%define CONFIG_LAGARITH_DECODER 0 -%define CONFIG_LOCO_DECODER 0 -%define CONFIG_M101_DECODER 0 -%define CONFIG_MAGICYUV_DECODER 0 -%define CONFIG_MDEC_DECODER 0 -%define CONFIG_MIMIC_DECODER 0 -%define CONFIG_MJPEG_DECODER 0 -%define CONFIG_MJPEGB_DECODER 0 -%define CONFIG_MMVIDEO_DECODER 0 -%define CONFIG_MOTIONPIXELS_DECODER 0 -%define CONFIG_MPEG_XVMC_DECODER 0 -%define CONFIG_MPEG1VIDEO_DECODER 0 -%define CONFIG_MPEG2VIDEO_DECODER 0 -%define CONFIG_MPEG4_DECODER 0 -%define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG4_MMAL_DECODER 0 -%define CONFIG_MPEG4_VDPAU_DECODER 0 -%define CONFIG_MPEGVIDEO_DECODER 0 -%define CONFIG_MPEG_VDPAU_DECODER 0 -%define CONFIG_MPEG1_VDPAU_DECODER 0 -%define CONFIG_MPEG2_MMAL_DECODER 0 -%define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG2_QSV_DECODER 0 -%define CONFIG_MSA1_DECODER 0 -%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MSMPEG4V1_DECODER 0 -%define CONFIG_MSMPEG4V2_DECODER 0 -%define CONFIG_MSMPEG4V3_DECODER 0 -%define CONFIG_MSRLE_DECODER 0 -%define CONFIG_MSS1_DECODER 0 -%define CONFIG_MSS2_DECODER 0 -%define CONFIG_MSVIDEO1_DECODER 0 -%define CONFIG_MSZH_DECODER 0 -%define CONFIG_MTS2_DECODER 0 -%define CONFIG_MVC1_DECODER 0 -%define CONFIG_MVC2_DECODER 0 -%define CONFIG_MXPEG_DECODER 0 -%define CONFIG_NUV_DECODER 0 -%define CONFIG_PAF_VIDEO_DECODER 0 -%define CONFIG_PAM_DECODER 0 -%define CONFIG_PBM_DECODER 0 -%define CONFIG_PCX_DECODER 0 -%define CONFIG_PGM_DECODER 0 -%define CONFIG_PGMYUV_DECODER 0 -%define CONFIG_PICTOR_DECODER 0 -%define CONFIG_PNG_DECODER 0 -%define CONFIG_PPM_DECODER 0 -%define CONFIG_PRORES_DECODER 0 -%define CONFIG_PRORES_LGPL_DECODER 0 -%define CONFIG_PTX_DECODER 0 -%define CONFIG_QDRAW_DECODER 0 -%define CONFIG_QPEG_DECODER 0 -%define CONFIG_QTRLE_DECODER 0 -%define CONFIG_R10K_DECODER 0 -%define CONFIG_R210_DECODER 0 -%define CONFIG_RAWVIDEO_DECODER 0 -%define CONFIG_RL2_DECODER 0 -%define CONFIG_ROQ_DECODER 0 -%define CONFIG_RPZA_DECODER 0 -%define CONFIG_RSCC_DECODER 0 -%define CONFIG_RV10_DECODER 0 -%define CONFIG_RV20_DECODER 0 -%define CONFIG_RV30_DECODER 0 -%define CONFIG_RV40_DECODER 0 -%define CONFIG_S302M_DECODER 0 -%define CONFIG_SANM_DECODER 0 -%define CONFIG_SCREENPRESSO_DECODER 0 -%define CONFIG_SDX2_DPCM_DECODER 0 -%define CONFIG_SGI_DECODER 0 -%define CONFIG_SGIRLE_DECODER 0 -%define CONFIG_SHEERVIDEO_DECODER 0 -%define CONFIG_SMACKER_DECODER 0 -%define CONFIG_SMC_DECODER 0 -%define CONFIG_SMVJPEG_DECODER 0 -%define CONFIG_SNOW_DECODER 0 -%define CONFIG_SP5X_DECODER 0 -%define CONFIG_SUNRAST_DECODER 0 -%define CONFIG_SVQ1_DECODER 0 -%define CONFIG_SVQ3_DECODER 0 -%define CONFIG_TARGA_DECODER 0 -%define CONFIG_TARGA_Y216_DECODER 0 -%define CONFIG_TDSC_DECODER 0 -%define CONFIG_THEORA_DECODER 0 -%define CONFIG_THP_DECODER 0 -%define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -%define CONFIG_TIFF_DECODER 0 -%define CONFIG_TMV_DECODER 0 -%define CONFIG_TRUEMOTION1_DECODER 0 -%define CONFIG_TRUEMOTION2_DECODER 0 -%define CONFIG_TRUEMOTION2RT_DECODER 0 -%define CONFIG_TSCC_DECODER 0 -%define CONFIG_TSCC2_DECODER 0 -%define CONFIG_TXD_DECODER 0 -%define CONFIG_ULTI_DECODER 0 -%define CONFIG_UTVIDEO_DECODER 0 -%define CONFIG_V210_DECODER 0 -%define CONFIG_V210X_DECODER 0 -%define CONFIG_V308_DECODER 0 -%define CONFIG_V408_DECODER 0 -%define CONFIG_V410_DECODER 0 -%define CONFIG_VB_DECODER 0 -%define CONFIG_VBLE_DECODER 0 -%define CONFIG_VC1_DECODER 0 -%define CONFIG_VC1_CRYSTALHD_DECODER 0 -%define CONFIG_VC1_VDPAU_DECODER 0 -%define CONFIG_VC1IMAGE_DECODER 0 -%define CONFIG_VC1_MMAL_DECODER 0 -%define CONFIG_VC1_QSV_DECODER 0 -%define CONFIG_VCR1_DECODER 0 -%define CONFIG_VMDVIDEO_DECODER 0 -%define CONFIG_VMNC_DECODER 0 -%define CONFIG_VP3_DECODER 0 -%define CONFIG_VP5_DECODER 0 -%define CONFIG_VP6_DECODER 0 -%define CONFIG_VP6A_DECODER 0 -%define CONFIG_VP6F_DECODER 0 -%define CONFIG_VP7_DECODER 0 %define CONFIG_VP8_DECODER 1 %define CONFIG_VP9_DECODER 1 -%define CONFIG_VQA_DECODER 0 -%define CONFIG_WEBP_DECODER 0 -%define CONFIG_WMV1_DECODER 0 -%define CONFIG_WMV2_DECODER 0 -%define CONFIG_WMV3_DECODER 0 -%define CONFIG_WMV3_CRYSTALHD_DECODER 0 -%define CONFIG_WMV3_VDPAU_DECODER 0 -%define CONFIG_WMV3IMAGE_DECODER 0 -%define CONFIG_WNV1_DECODER 0 -%define CONFIG_XAN_WC3_DECODER 0 -%define CONFIG_XAN_WC4_DECODER 0 -%define CONFIG_XBM_DECODER 0 -%define CONFIG_XFACE_DECODER 0 -%define CONFIG_XL_DECODER 0 -%define CONFIG_XWD_DECODER 0 -%define CONFIG_Y41P_DECODER 0 -%define CONFIG_YLC_DECODER 0 -%define CONFIG_YOP_DECODER 0 -%define CONFIG_YUV4_DECODER 0 -%define CONFIG_ZERO12V_DECODER 0 -%define CONFIG_ZEROCODEC_DECODER 0 -%define CONFIG_ZLIB_DECODER 0 -%define CONFIG_ZMBV_DECODER 0 -%define CONFIG_AAC_DECODER 0 -%define CONFIG_AAC_FIXED_DECODER 0 -%define CONFIG_AAC_LATM_DECODER 0 -%define CONFIG_AC3_DECODER 0 -%define CONFIG_AC3_FIXED_DECODER 0 -%define CONFIG_ALAC_DECODER 0 -%define CONFIG_ALS_DECODER 0 -%define CONFIG_AMRNB_DECODER 0 -%define CONFIG_AMRWB_DECODER 0 -%define CONFIG_APE_DECODER 0 -%define CONFIG_ATRAC1_DECODER 0 -%define CONFIG_ATRAC3_DECODER 0 -%define CONFIG_ATRAC3P_DECODER 0 -%define CONFIG_BINKAUDIO_DCT_DECODER 0 -%define CONFIG_BINKAUDIO_RDFT_DECODER 0 -%define CONFIG_BMV_AUDIO_DECODER 0 -%define CONFIG_COOK_DECODER 0 -%define CONFIG_DCA_DECODER 0 -%define CONFIG_DSD_LSBF_DECODER 0 -%define CONFIG_DSD_MSBF_DECODER 0 -%define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -%define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -%define CONFIG_DSICINAUDIO_DECODER 0 -%define CONFIG_DSS_SP_DECODER 0 -%define CONFIG_DST_DECODER 0 -%define CONFIG_EAC3_DECODER 0 -%define CONFIG_EVRC_DECODER 0 -%define CONFIG_FFWAVESYNTH_DECODER 0 %define CONFIG_FLAC_DECODER 1 -%define CONFIG_G723_1_DECODER 0 -%define CONFIG_G729_DECODER 0 -%define CONFIG_GSM_DECODER 0 -%define CONFIG_GSM_MS_DECODER 0 -%define CONFIG_IAC_DECODER 0 -%define CONFIG_IMC_DECODER 0 -%define CONFIG_INTERPLAY_ACM_DECODER 0 -%define CONFIG_MACE3_DECODER 0 -%define CONFIG_MACE6_DECODER 0 -%define CONFIG_METASOUND_DECODER 0 -%define CONFIG_MLP_DECODER 0 -%define CONFIG_MP1_DECODER 0 -%define CONFIG_MP1FLOAT_DECODER 0 -%define CONFIG_MP2_DECODER 0 -%define CONFIG_MP2FLOAT_DECODER 0 -%define CONFIG_MP3_DECODER 0 -%define CONFIG_MP3FLOAT_DECODER 0 -%define CONFIG_MP3ADU_DECODER 0 -%define CONFIG_MP3ADUFLOAT_DECODER 0 -%define CONFIG_MP3ON4_DECODER 0 -%define CONFIG_MP3ON4FLOAT_DECODER 0 -%define CONFIG_MPC7_DECODER 0 -%define CONFIG_MPC8_DECODER 0 -%define CONFIG_NELLYMOSER_DECODER 0 -%define CONFIG_ON2AVC_DECODER 0 -%define CONFIG_OPUS_DECODER 0 -%define CONFIG_PAF_AUDIO_DECODER 0 -%define CONFIG_QCELP_DECODER 0 -%define CONFIG_QDM2_DECODER 0 -%define CONFIG_RA_144_DECODER 0 -%define CONFIG_RA_288_DECODER 0 -%define CONFIG_RALF_DECODER 0 -%define CONFIG_SHORTEN_DECODER 0 -%define CONFIG_SIPR_DECODER 0 -%define CONFIG_SMACKAUD_DECODER 0 -%define CONFIG_SONIC_DECODER 0 -%define CONFIG_TAK_DECODER 0 -%define CONFIG_TRUEHD_DECODER 0 -%define CONFIG_TRUESPEECH_DECODER 0 -%define CONFIG_TTA_DECODER 0 -%define CONFIG_TWINVQ_DECODER 0 -%define CONFIG_VMDAUDIO_DECODER 0 -%define CONFIG_VORBIS_DECODER 0 -%define CONFIG_WAVPACK_DECODER 0 -%define CONFIG_WMALOSSLESS_DECODER 0 -%define CONFIG_WMAPRO_DECODER 0 -%define CONFIG_WMAV1_DECODER 0 -%define CONFIG_WMAV2_DECODER 0 -%define CONFIG_WMAVOICE_DECODER 0 -%define CONFIG_WS_SND1_DECODER 0 -%define CONFIG_XMA1_DECODER 0 -%define CONFIG_XMA2_DECODER 0 -%define CONFIG_PCM_ALAW_DECODER 0 -%define CONFIG_PCM_BLURAY_DECODER 0 -%define CONFIG_PCM_DVD_DECODER 0 -%define CONFIG_PCM_F32BE_DECODER 0 -%define CONFIG_PCM_F32LE_DECODER 0 -%define CONFIG_PCM_F64BE_DECODER 0 -%define CONFIG_PCM_F64LE_DECODER 0 -%define CONFIG_PCM_LXF_DECODER 0 -%define CONFIG_PCM_MULAW_DECODER 0 -%define CONFIG_PCM_S8_DECODER 0 -%define CONFIG_PCM_S8_PLANAR_DECODER 0 -%define CONFIG_PCM_S16BE_DECODER 0 -%define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -%define CONFIG_PCM_S16LE_DECODER 0 -%define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S24BE_DECODER 0 -%define CONFIG_PCM_S24DAUD_DECODER 0 -%define CONFIG_PCM_S24LE_DECODER 0 -%define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S32BE_DECODER 0 -%define CONFIG_PCM_S32LE_DECODER 0 -%define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S64BE_DECODER 0 -%define CONFIG_PCM_S64LE_DECODER 0 -%define CONFIG_PCM_U8_DECODER 0 -%define CONFIG_PCM_U16BE_DECODER 0 -%define CONFIG_PCM_U16LE_DECODER 0 -%define CONFIG_PCM_U24BE_DECODER 0 -%define CONFIG_PCM_U24LE_DECODER 0 -%define CONFIG_PCM_U32BE_DECODER 0 -%define CONFIG_PCM_U32LE_DECODER 0 -%define CONFIG_PCM_ZORK_DECODER 0 -%define CONFIG_INTERPLAY_DPCM_DECODER 0 -%define CONFIG_ROQ_DPCM_DECODER 0 -%define CONFIG_SOL_DPCM_DECODER 0 -%define CONFIG_XAN_DPCM_DECODER 0 -%define CONFIG_ADPCM_4XM_DECODER 0 -%define CONFIG_ADPCM_ADX_DECODER 0 -%define CONFIG_ADPCM_AFC_DECODER 0 -%define CONFIG_ADPCM_AICA_DECODER 0 -%define CONFIG_ADPCM_CT_DECODER 0 -%define CONFIG_ADPCM_DTK_DECODER 0 -%define CONFIG_ADPCM_EA_DECODER 0 -%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -%define CONFIG_ADPCM_EA_R1_DECODER 0 -%define CONFIG_ADPCM_EA_R2_DECODER 0 -%define CONFIG_ADPCM_EA_R3_DECODER 0 -%define CONFIG_ADPCM_EA_XAS_DECODER 0 -%define CONFIG_ADPCM_G722_DECODER 0 -%define CONFIG_ADPCM_G726_DECODER 0 -%define CONFIG_ADPCM_G726LE_DECODER 0 -%define CONFIG_ADPCM_IMA_AMV_DECODER 0 -%define CONFIG_ADPCM_IMA_APC_DECODER 0 -%define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -%define CONFIG_ADPCM_IMA_DK3_DECODER 0 -%define CONFIG_ADPCM_IMA_DK4_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -%define CONFIG_ADPCM_IMA_ISS_DECODER 0 -%define CONFIG_ADPCM_IMA_OKI_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_DECODER 0 -%define CONFIG_ADPCM_IMA_RAD_DECODER 0 -%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -%define CONFIG_ADPCM_IMA_WAV_DECODER 0 -%define CONFIG_ADPCM_IMA_WS_DECODER 0 -%define CONFIG_ADPCM_MS_DECODER 0 -%define CONFIG_ADPCM_MTAF_DECODER 0 -%define CONFIG_ADPCM_PSX_DECODER 0 -%define CONFIG_ADPCM_SBPRO_2_DECODER 0 -%define CONFIG_ADPCM_SBPRO_3_DECODER 0 -%define CONFIG_ADPCM_SBPRO_4_DECODER 0 -%define CONFIG_ADPCM_SWF_DECODER 0 -%define CONFIG_ADPCM_THP_DECODER 0 -%define CONFIG_ADPCM_THP_LE_DECODER 0 -%define CONFIG_ADPCM_VIMA_DECODER 0 -%define CONFIG_ADPCM_XA_DECODER 0 -%define CONFIG_ADPCM_YAMAHA_DECODER 0 -%define CONFIG_SSA_DECODER 0 -%define CONFIG_ASS_DECODER 0 -%define CONFIG_CCAPTION_DECODER 0 -%define CONFIG_DVBSUB_DECODER 0 -%define CONFIG_DVDSUB_DECODER 0 -%define CONFIG_JACOSUB_DECODER 0 -%define CONFIG_MICRODVD_DECODER 0 -%define CONFIG_MOVTEXT_DECODER 0 -%define CONFIG_MPL2_DECODER 0 -%define CONFIG_PGSSUB_DECODER 0 -%define CONFIG_PJS_DECODER 0 -%define CONFIG_REALTEXT_DECODER 0 -%define CONFIG_SAMI_DECODER 0 -%define CONFIG_SRT_DECODER 0 -%define CONFIG_STL_DECODER 0 -%define CONFIG_SUBRIP_DECODER 0 -%define CONFIG_SUBVIEWER_DECODER 0 -%define CONFIG_SUBVIEWER1_DECODER 0 -%define CONFIG_TEXT_DECODER 0 -%define CONFIG_VPLAYER_DECODER 0 -%define CONFIG_WEBVTT_DECODER 0 -%define CONFIG_XSUB_DECODER 0 -%define CONFIG_AAC_AT_DECODER 0 -%define CONFIG_AC3_AT_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -%define CONFIG_ALAC_AT_DECODER 0 -%define CONFIG_AMR_NB_AT_DECODER 0 -%define CONFIG_EAC3_AT_DECODER 0 -%define CONFIG_GSM_MS_AT_DECODER 0 -%define CONFIG_ILBC_AT_DECODER 0 -%define CONFIG_MP1_AT_DECODER 0 -%define CONFIG_MP2_AT_DECODER 0 -%define CONFIG_MP3_AT_DECODER 0 -%define CONFIG_PCM_ALAW_AT_DECODER 0 -%define CONFIG_PCM_MULAW_AT_DECODER 0 -%define CONFIG_QDMC_AT_DECODER 0 -%define CONFIG_QDM2_AT_DECODER 0 -%define CONFIG_LIBCELT_DECODER 0 -%define CONFIG_LIBFDK_AAC_DECODER 0 -%define CONFIG_LIBGSM_DECODER 0 -%define CONFIG_LIBGSM_MS_DECODER 0 -%define CONFIG_LIBILBC_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -%define CONFIG_LIBOPENJPEG_DECODER 0 -%define CONFIG_LIBOPUS_DECODER 0 -%define CONFIG_LIBSCHROEDINGER_DECODER 0 -%define CONFIG_LIBSPEEX_DECODER 0 -%define CONFIG_LIBVORBIS_DECODER 0 -%define CONFIG_LIBVPX_VP8_DECODER 0 -%define CONFIG_LIBVPX_VP9_DECODER 0 -%define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -%define CONFIG_BINTEXT_DECODER 0 -%define CONFIG_XBIN_DECODER 0 -%define CONFIG_IDF_DECODER 0 -%define CONFIG_LIBOPENH264_DECODER 0 -%define CONFIG_H263_CUVID_DECODER 0 -%define CONFIG_H264_CUVID_DECODER 0 -%define CONFIG_HEVC_CUVID_DECODER 0 -%define CONFIG_HEVC_MEDIACODEC_DECODER 0 -%define CONFIG_MJPEG_CUVID_DECODER 0 -%define CONFIG_MPEG1_CUVID_DECODER 0 -%define CONFIG_MPEG2_CUVID_DECODER 0 -%define CONFIG_MPEG4_CUVID_DECODER 0 -%define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -%define CONFIG_VC1_CUVID_DECODER 0 -%define CONFIG_VP8_CUVID_DECODER 0 -%define CONFIG_VP8_MEDIACODEC_DECODER 0 -%define CONFIG_VP9_CUVID_DECODER 0 -%define CONFIG_VP9_MEDIACODEC_DECODER 0 -%define CONFIG_AA_DEMUXER 0 -%define CONFIG_AAC_DEMUXER 0 -%define CONFIG_AC3_DEMUXER 0 -%define CONFIG_ACM_DEMUXER 0 -%define CONFIG_ACT_DEMUXER 0 -%define CONFIG_ADF_DEMUXER 0 -%define CONFIG_ADP_DEMUXER 0 -%define CONFIG_ADS_DEMUXER 0 -%define CONFIG_ADX_DEMUXER 0 -%define CONFIG_AEA_DEMUXER 0 -%define CONFIG_AFC_DEMUXER 0 -%define CONFIG_AIFF_DEMUXER 0 -%define CONFIG_AIX_DEMUXER 0 -%define CONFIG_AMR_DEMUXER 0 -%define CONFIG_ANM_DEMUXER 0 -%define CONFIG_APC_DEMUXER 0 -%define CONFIG_APE_DEMUXER 0 -%define CONFIG_APNG_DEMUXER 0 -%define CONFIG_AQTITLE_DEMUXER 0 -%define CONFIG_ASF_DEMUXER 0 -%define CONFIG_ASF_O_DEMUXER 0 -%define CONFIG_ASS_DEMUXER 0 -%define CONFIG_AST_DEMUXER 0 -%define CONFIG_AU_DEMUXER 0 -%define CONFIG_AVI_DEMUXER 0 -%define CONFIG_AVISYNTH_DEMUXER 0 -%define CONFIG_AVR_DEMUXER 0 -%define CONFIG_AVS_DEMUXER 0 -%define CONFIG_BETHSOFTVID_DEMUXER 0 -%define CONFIG_BFI_DEMUXER 0 -%define CONFIG_BINTEXT_DEMUXER 0 -%define CONFIG_BINK_DEMUXER 0 -%define CONFIG_BIT_DEMUXER 0 -%define CONFIG_BMV_DEMUXER 0 -%define CONFIG_BFSTM_DEMUXER 0 -%define CONFIG_BRSTM_DEMUXER 0 -%define CONFIG_BOA_DEMUXER 0 -%define CONFIG_C93_DEMUXER 0 -%define CONFIG_CAF_DEMUXER 0 -%define CONFIG_CAVSVIDEO_DEMUXER 0 -%define CONFIG_CDG_DEMUXER 0 -%define CONFIG_CDXL_DEMUXER 0 -%define CONFIG_CINE_DEMUXER 0 -%define CONFIG_CONCAT_DEMUXER 0 -%define CONFIG_DATA_DEMUXER 0 -%define CONFIG_DAUD_DEMUXER 0 -%define CONFIG_DCSTR_DEMUXER 0 -%define CONFIG_DFA_DEMUXER 0 -%define CONFIG_DIRAC_DEMUXER 0 -%define CONFIG_DNXHD_DEMUXER 0 -%define CONFIG_DSF_DEMUXER 0 -%define CONFIG_DSICIN_DEMUXER 0 -%define CONFIG_DSS_DEMUXER 0 -%define CONFIG_DTS_DEMUXER 0 -%define CONFIG_DTSHD_DEMUXER 0 -%define CONFIG_DV_DEMUXER 0 -%define CONFIG_DVBSUB_DEMUXER 0 -%define CONFIG_DVBTXT_DEMUXER 0 -%define CONFIG_DXA_DEMUXER 0 -%define CONFIG_EA_DEMUXER 0 -%define CONFIG_EA_CDATA_DEMUXER 0 -%define CONFIG_EAC3_DEMUXER 0 -%define CONFIG_EPAF_DEMUXER 0 -%define CONFIG_FFM_DEMUXER 0 -%define CONFIG_FFMETADATA_DEMUXER 0 -%define CONFIG_FILMSTRIP_DEMUXER 0 -%define CONFIG_FLAC_DEMUXER 0 -%define CONFIG_FLIC_DEMUXER 0 -%define CONFIG_FLV_DEMUXER 0 -%define CONFIG_LIVE_FLV_DEMUXER 0 -%define CONFIG_FOURXM_DEMUXER 0 -%define CONFIG_FRM_DEMUXER 0 -%define CONFIG_FSB_DEMUXER 0 -%define CONFIG_G722_DEMUXER 0 -%define CONFIG_G723_1_DEMUXER 0 -%define CONFIG_G729_DEMUXER 0 -%define CONFIG_GENH_DEMUXER 0 -%define CONFIG_GIF_DEMUXER 0 -%define CONFIG_GSM_DEMUXER 0 -%define CONFIG_GXF_DEMUXER 0 -%define CONFIG_H261_DEMUXER 0 -%define CONFIG_H263_DEMUXER 0 -%define CONFIG_H264_DEMUXER 0 -%define CONFIG_HEVC_DEMUXER 0 -%define CONFIG_HLS_DEMUXER 0 -%define CONFIG_HNM_DEMUXER 0 -%define CONFIG_ICO_DEMUXER 0 -%define CONFIG_IDCIN_DEMUXER 0 -%define CONFIG_IDF_DEMUXER 0 -%define CONFIG_IFF_DEMUXER 0 -%define CONFIG_ILBC_DEMUXER 0 -%define CONFIG_IMAGE2_DEMUXER 0 -%define CONFIG_IMAGE2PIPE_DEMUXER 0 -%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -%define CONFIG_INGENIENT_DEMUXER 0 -%define CONFIG_IPMOVIE_DEMUXER 0 -%define CONFIG_IRCAM_DEMUXER 0 -%define CONFIG_ISS_DEMUXER 0 -%define CONFIG_IV8_DEMUXER 0 -%define CONFIG_IVF_DEMUXER 0 -%define CONFIG_IVR_DEMUXER 0 -%define CONFIG_JACOSUB_DEMUXER 0 -%define CONFIG_JV_DEMUXER 0 -%define CONFIG_LMLM4_DEMUXER 0 -%define CONFIG_LOAS_DEMUXER 0 -%define CONFIG_LRC_DEMUXER 0 -%define CONFIG_LVF_DEMUXER 0 -%define CONFIG_LXF_DEMUXER 0 -%define CONFIG_M4V_DEMUXER 0 -%define CONFIG_MATROSKA_DEMUXER 0 -%define CONFIG_MGSTS_DEMUXER 0 -%define CONFIG_MICRODVD_DEMUXER 0 -%define CONFIG_MJPEG_DEMUXER 0 -%define CONFIG_MLP_DEMUXER 0 -%define CONFIG_MLV_DEMUXER 0 -%define CONFIG_MM_DEMUXER 0 -%define CONFIG_MMF_DEMUXER 0 -%define CONFIG_MOV_DEMUXER 0 -%define CONFIG_MP3_DEMUXER 0 -%define CONFIG_MPC_DEMUXER 0 -%define CONFIG_MPC8_DEMUXER 0 -%define CONFIG_MPEGPS_DEMUXER 0 -%define CONFIG_MPEGTS_DEMUXER 0 -%define CONFIG_MPEGTSRAW_DEMUXER 0 -%define CONFIG_MPEGVIDEO_DEMUXER 0 -%define CONFIG_MPJPEG_DEMUXER 0 -%define CONFIG_MPL2_DEMUXER 0 -%define CONFIG_MPSUB_DEMUXER 0 -%define CONFIG_MSF_DEMUXER 0 -%define CONFIG_MSNWC_TCP_DEMUXER 0 -%define CONFIG_MTAF_DEMUXER 0 -%define CONFIG_MTV_DEMUXER 0 -%define CONFIG_MUSX_DEMUXER 0 -%define CONFIG_MV_DEMUXER 0 -%define CONFIG_MVI_DEMUXER 0 -%define CONFIG_MXF_DEMUXER 0 -%define CONFIG_MXG_DEMUXER 0 -%define CONFIG_NC_DEMUXER 0 -%define CONFIG_NISTSPHERE_DEMUXER 0 -%define CONFIG_NSV_DEMUXER 0 -%define CONFIG_NUT_DEMUXER 0 -%define CONFIG_NUV_DEMUXER 0 -%define CONFIG_OGG_DEMUXER 0 -%define CONFIG_OMA_DEMUXER 0 -%define CONFIG_PAF_DEMUXER 0 -%define CONFIG_PCM_ALAW_DEMUXER 0 -%define CONFIG_PCM_MULAW_DEMUXER 0 -%define CONFIG_PCM_F64BE_DEMUXER 0 -%define CONFIG_PCM_F64LE_DEMUXER 0 -%define CONFIG_PCM_F32BE_DEMUXER 0 -%define CONFIG_PCM_F32LE_DEMUXER 0 -%define CONFIG_PCM_S32BE_DEMUXER 0 -%define CONFIG_PCM_S32LE_DEMUXER 0 -%define CONFIG_PCM_S24BE_DEMUXER 0 -%define CONFIG_PCM_S24LE_DEMUXER 0 -%define CONFIG_PCM_S16BE_DEMUXER 0 -%define CONFIG_PCM_S16LE_DEMUXER 0 -%define CONFIG_PCM_S8_DEMUXER 0 -%define CONFIG_PCM_U32BE_DEMUXER 0 -%define CONFIG_PCM_U32LE_DEMUXER 0 -%define CONFIG_PCM_U24BE_DEMUXER 0 -%define CONFIG_PCM_U24LE_DEMUXER 0 -%define CONFIG_PCM_U16BE_DEMUXER 0 -%define CONFIG_PCM_U16LE_DEMUXER 0 -%define CONFIG_PCM_U8_DEMUXER 0 -%define CONFIG_PJS_DEMUXER 0 -%define CONFIG_PMP_DEMUXER 0 -%define CONFIG_PVA_DEMUXER 0 -%define CONFIG_PVF_DEMUXER 0 -%define CONFIG_QCP_DEMUXER 0 -%define CONFIG_R3D_DEMUXER 0 -%define CONFIG_RAWVIDEO_DEMUXER 0 -%define CONFIG_REALTEXT_DEMUXER 0 -%define CONFIG_REDSPARK_DEMUXER 0 -%define CONFIG_RL2_DEMUXER 0 -%define CONFIG_RM_DEMUXER 0 -%define CONFIG_ROQ_DEMUXER 0 -%define CONFIG_RPL_DEMUXER 0 -%define CONFIG_RSD_DEMUXER 0 -%define CONFIG_RSO_DEMUXER 0 -%define CONFIG_RTP_DEMUXER 0 -%define CONFIG_RTSP_DEMUXER 0 -%define CONFIG_SAMI_DEMUXER 0 -%define CONFIG_SAP_DEMUXER 0 -%define CONFIG_SBG_DEMUXER 0 -%define CONFIG_SDP_DEMUXER 0 -%define CONFIG_SDR2_DEMUXER 0 -%define CONFIG_SEGAFILM_DEMUXER 0 -%define CONFIG_SHORTEN_DEMUXER 0 -%define CONFIG_SIFF_DEMUXER 0 -%define CONFIG_SLN_DEMUXER 0 -%define CONFIG_SMACKER_DEMUXER 0 -%define CONFIG_SMJPEG_DEMUXER 0 -%define CONFIG_SMUSH_DEMUXER 0 -%define CONFIG_SOL_DEMUXER 0 -%define CONFIG_SOX_DEMUXER 0 -%define CONFIG_SPDIF_DEMUXER 0 -%define CONFIG_SRT_DEMUXER 0 -%define CONFIG_STR_DEMUXER 0 -%define CONFIG_STL_DEMUXER 0 -%define CONFIG_SUBVIEWER1_DEMUXER 0 -%define CONFIG_SUBVIEWER_DEMUXER 0 -%define CONFIG_SUP_DEMUXER 0 -%define CONFIG_SVAG_DEMUXER 0 -%define CONFIG_SWF_DEMUXER 0 -%define CONFIG_TAK_DEMUXER 0 -%define CONFIG_TEDCAPTIONS_DEMUXER 0 -%define CONFIG_THP_DEMUXER 0 -%define CONFIG_THREEDOSTR_DEMUXER 0 -%define CONFIG_TIERTEXSEQ_DEMUXER 0 -%define CONFIG_TMV_DEMUXER 0 -%define CONFIG_TRUEHD_DEMUXER 0 -%define CONFIG_TTA_DEMUXER 0 -%define CONFIG_TXD_DEMUXER 0 -%define CONFIG_TTY_DEMUXER 0 -%define CONFIG_V210_DEMUXER 0 -%define CONFIG_V210X_DEMUXER 0 -%define CONFIG_VAG_DEMUXER 0 -%define CONFIG_VC1_DEMUXER 0 -%define CONFIG_VC1T_DEMUXER 0 -%define CONFIG_VIVO_DEMUXER 0 -%define CONFIG_VMD_DEMUXER 0 -%define CONFIG_VOBSUB_DEMUXER 0 -%define CONFIG_VOC_DEMUXER 0 -%define CONFIG_VPK_DEMUXER 0 -%define CONFIG_VPLAYER_DEMUXER 0 -%define CONFIG_VQF_DEMUXER 0 -%define CONFIG_W64_DEMUXER 0 -%define CONFIG_WAV_DEMUXER 0 -%define CONFIG_WC3_DEMUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -%define CONFIG_WEBVTT_DEMUXER 0 -%define CONFIG_WSAUD_DEMUXER 0 -%define CONFIG_WSD_DEMUXER 0 -%define CONFIG_WSVQA_DEMUXER 0 -%define CONFIG_WTV_DEMUXER 0 -%define CONFIG_WVE_DEMUXER 0 -%define CONFIG_WV_DEMUXER 0 -%define CONFIG_XA_DEMUXER 0 -%define CONFIG_XBIN_DEMUXER 0 -%define CONFIG_XMV_DEMUXER 0 -%define CONFIG_XVAG_DEMUXER 0 -%define CONFIG_XWMA_DEMUXER 0 -%define CONFIG_YOP_DEMUXER 0 -%define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -%define CONFIG_LIBGME_DEMUXER 0 -%define CONFIG_LIBMODPLUG_DEMUXER 0 -%define CONFIG_LIBNUT_DEMUXER 0 -%define CONFIG_LIBOPENMPT_DEMUXER 0 -%define CONFIG_A64MULTI_ENCODER 0 -%define CONFIG_A64MULTI5_ENCODER 0 -%define CONFIG_ALIAS_PIX_ENCODER 0 -%define CONFIG_AMV_ENCODER 0 -%define CONFIG_APNG_ENCODER 0 -%define CONFIG_ASV1_ENCODER 0 -%define CONFIG_ASV2_ENCODER 0 -%define CONFIG_AVRP_ENCODER 0 -%define CONFIG_AVUI_ENCODER 0 -%define CONFIG_AYUV_ENCODER 0 -%define CONFIG_BMP_ENCODER 0 -%define CONFIG_CINEPAK_ENCODER 0 -%define CONFIG_CLJR_ENCODER 0 -%define CONFIG_COMFORTNOISE_ENCODER 0 -%define CONFIG_DNXHD_ENCODER 0 -%define CONFIG_DPX_ENCODER 0 -%define CONFIG_DVVIDEO_ENCODER 0 -%define CONFIG_FFV1_ENCODER 0 -%define CONFIG_FFVHUFF_ENCODER 0 -%define CONFIG_FLASHSV_ENCODER 0 -%define CONFIG_FLASHSV2_ENCODER 0 -%define CONFIG_FLV_ENCODER 0 -%define CONFIG_GIF_ENCODER 0 -%define CONFIG_H261_ENCODER 0 -%define CONFIG_H263_ENCODER 0 -%define CONFIG_H263P_ENCODER 0 -%define CONFIG_HAP_ENCODER 0 -%define CONFIG_HUFFYUV_ENCODER 0 -%define CONFIG_JPEG2000_ENCODER 0 -%define CONFIG_JPEGLS_ENCODER 0 -%define CONFIG_LJPEG_ENCODER 0 -%define CONFIG_MJPEG_ENCODER 0 -%define CONFIG_MPEG1VIDEO_ENCODER 0 -%define CONFIG_MPEG2VIDEO_ENCODER 0 -%define CONFIG_MPEG4_ENCODER 0 -%define CONFIG_MSMPEG4V2_ENCODER 0 -%define CONFIG_MSMPEG4V3_ENCODER 0 -%define CONFIG_MSVIDEO1_ENCODER 0 -%define CONFIG_PAM_ENCODER 0 -%define CONFIG_PBM_ENCODER 0 -%define CONFIG_PCX_ENCODER 0 -%define CONFIG_PGM_ENCODER 0 -%define CONFIG_PGMYUV_ENCODER 0 -%define CONFIG_PNG_ENCODER 0 -%define CONFIG_PPM_ENCODER 0 -%define CONFIG_PRORES_ENCODER 0 -%define CONFIG_PRORES_AW_ENCODER 0 -%define CONFIG_PRORES_KS_ENCODER 0 -%define CONFIG_QTRLE_ENCODER 0 -%define CONFIG_R10K_ENCODER 0 -%define CONFIG_R210_ENCODER 0 -%define CONFIG_RAWVIDEO_ENCODER 0 -%define CONFIG_ROQ_ENCODER 0 -%define CONFIG_RV10_ENCODER 0 -%define CONFIG_RV20_ENCODER 0 -%define CONFIG_S302M_ENCODER 0 -%define CONFIG_SGI_ENCODER 0 -%define CONFIG_SNOW_ENCODER 0 -%define CONFIG_SUNRAST_ENCODER 0 -%define CONFIG_SVQ1_ENCODER 0 -%define CONFIG_TARGA_ENCODER 0 -%define CONFIG_TIFF_ENCODER 0 -%define CONFIG_UTVIDEO_ENCODER 0 -%define CONFIG_V210_ENCODER 0 -%define CONFIG_V308_ENCODER 0 -%define CONFIG_V408_ENCODER 0 -%define CONFIG_V410_ENCODER 0 -%define CONFIG_VC2_ENCODER 0 -%define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -%define CONFIG_WMV1_ENCODER 0 -%define CONFIG_WMV2_ENCODER 0 -%define CONFIG_XBM_ENCODER 0 -%define CONFIG_XFACE_ENCODER 0 -%define CONFIG_XWD_ENCODER 0 -%define CONFIG_Y41P_ENCODER 0 -%define CONFIG_YUV4_ENCODER 0 -%define CONFIG_ZLIB_ENCODER 0 -%define CONFIG_ZMBV_ENCODER 0 -%define CONFIG_AAC_ENCODER 0 -%define CONFIG_AC3_ENCODER 0 -%define CONFIG_AC3_FIXED_ENCODER 0 -%define CONFIG_ALAC_ENCODER 0 -%define CONFIG_DCA_ENCODER 0 -%define CONFIG_EAC3_ENCODER 0 -%define CONFIG_FLAC_ENCODER 0 -%define CONFIG_G723_1_ENCODER 0 -%define CONFIG_MLP_ENCODER 0 -%define CONFIG_MP2_ENCODER 0 -%define CONFIG_MP2FIXED_ENCODER 0 -%define CONFIG_NELLYMOSER_ENCODER 0 -%define CONFIG_RA_144_ENCODER 0 -%define CONFIG_SONIC_ENCODER 0 -%define CONFIG_SONIC_LS_ENCODER 0 -%define CONFIG_TRUEHD_ENCODER 0 -%define CONFIG_TTA_ENCODER 0 -%define CONFIG_VORBIS_ENCODER 0 -%define CONFIG_WAVPACK_ENCODER 0 -%define CONFIG_WMAV1_ENCODER 0 -%define CONFIG_WMAV2_ENCODER 0 -%define CONFIG_PCM_ALAW_ENCODER 0 -%define CONFIG_PCM_F32BE_ENCODER 0 -%define CONFIG_PCM_F32LE_ENCODER 0 -%define CONFIG_PCM_F64BE_ENCODER 0 -%define CONFIG_PCM_F64LE_ENCODER 0 -%define CONFIG_PCM_MULAW_ENCODER 0 -%define CONFIG_PCM_S8_ENCODER 0 -%define CONFIG_PCM_S8_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16BE_ENCODER 0 -%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16LE_ENCODER 0 -%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S24BE_ENCODER 0 -%define CONFIG_PCM_S24DAUD_ENCODER 0 -%define CONFIG_PCM_S24LE_ENCODER 0 -%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S32BE_ENCODER 0 -%define CONFIG_PCM_S32LE_ENCODER 0 -%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S64BE_ENCODER 0 -%define CONFIG_PCM_S64LE_ENCODER 0 -%define CONFIG_PCM_U8_ENCODER 0 -%define CONFIG_PCM_U16BE_ENCODER 0 -%define CONFIG_PCM_U16LE_ENCODER 0 -%define CONFIG_PCM_U24BE_ENCODER 0 -%define CONFIG_PCM_U24LE_ENCODER 0 -%define CONFIG_PCM_U32BE_ENCODER 0 -%define CONFIG_PCM_U32LE_ENCODER 0 -%define CONFIG_ROQ_DPCM_ENCODER 0 -%define CONFIG_ADPCM_ADX_ENCODER 0 -%define CONFIG_ADPCM_G722_ENCODER 0 -%define CONFIG_ADPCM_G726_ENCODER 0 -%define CONFIG_ADPCM_IMA_QT_ENCODER 0 -%define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -%define CONFIG_ADPCM_MS_ENCODER 0 -%define CONFIG_ADPCM_SWF_ENCODER 0 -%define CONFIG_ADPCM_YAMAHA_ENCODER 0 -%define CONFIG_SSA_ENCODER 0 -%define CONFIG_ASS_ENCODER 0 -%define CONFIG_DVBSUB_ENCODER 0 -%define CONFIG_DVDSUB_ENCODER 0 -%define CONFIG_MOVTEXT_ENCODER 0 -%define CONFIG_SRT_ENCODER 0 -%define CONFIG_SUBRIP_ENCODER 0 -%define CONFIG_TEXT_ENCODER 0 -%define CONFIG_WEBVTT_ENCODER 0 -%define CONFIG_XSUB_ENCODER 0 -%define CONFIG_AAC_AT_ENCODER 0 -%define CONFIG_ALAC_AT_ENCODER 0 -%define CONFIG_ILBC_AT_ENCODER 0 -%define CONFIG_PCM_ALAW_AT_ENCODER 0 -%define CONFIG_PCM_MULAW_AT_ENCODER 0 -%define CONFIG_LIBFDK_AAC_ENCODER 0 -%define CONFIG_LIBGSM_ENCODER 0 -%define CONFIG_LIBGSM_MS_ENCODER 0 -%define CONFIG_LIBILBC_ENCODER 0 -%define CONFIG_LIBMP3LAME_ENCODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -%define CONFIG_LIBOPENJPEG_ENCODER 0 -%define CONFIG_LIBOPUS_ENCODER 0 -%define CONFIG_LIBSCHROEDINGER_ENCODER 0 -%define CONFIG_LIBSHINE_ENCODER 0 -%define CONFIG_LIBSPEEX_ENCODER 0 -%define CONFIG_LIBTHEORA_ENCODER 0 -%define CONFIG_LIBTWOLAME_ENCODER 0 -%define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -%define CONFIG_LIBVORBIS_ENCODER 0 -%define CONFIG_LIBVPX_VP8_ENCODER 0 -%define CONFIG_LIBVPX_VP9_ENCODER 0 -%define CONFIG_LIBWAVPACK_ENCODER 0 -%define CONFIG_LIBWEBP_ANIM_ENCODER 0 -%define CONFIG_LIBWEBP_ENCODER 0 -%define CONFIG_LIBX262_ENCODER 0 -%define CONFIG_LIBX264_ENCODER 0 -%define CONFIG_LIBX264RGB_ENCODER 0 -%define CONFIG_LIBX265_ENCODER 0 -%define CONFIG_LIBXAVS_ENCODER 0 -%define CONFIG_LIBXVID_ENCODER 0 -%define CONFIG_LIBOPENH264_ENCODER 0 -%define CONFIG_H264_NVENC_ENCODER 0 -%define CONFIG_H264_OMX_ENCODER 0 -%define CONFIG_H264_QSV_ENCODER 0 -%define CONFIG_H264_VAAPI_ENCODER 0 -%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -%define CONFIG_NVENC_ENCODER 0 -%define CONFIG_NVENC_H264_ENCODER 0 -%define CONFIG_NVENC_HEVC_ENCODER 0 -%define CONFIG_HEVC_NVENC_ENCODER 0 -%define CONFIG_HEVC_QSV_ENCODER 0 -%define CONFIG_HEVC_VAAPI_ENCODER 0 -%define CONFIG_LIBKVAZAAR_ENCODER 0 -%define CONFIG_MJPEG_VAAPI_ENCODER 0 -%define CONFIG_MPEG2_QSV_ENCODER 0 -%define CONFIG_ABENCH_FILTER 0 -%define CONFIG_ACOMPRESSOR_FILTER 0 -%define CONFIG_ACROSSFADE_FILTER 0 -%define CONFIG_ACRUSHER_FILTER 0 -%define CONFIG_ADELAY_FILTER 0 -%define CONFIG_AECHO_FILTER 0 -%define CONFIG_AEMPHASIS_FILTER 0 -%define CONFIG_AEVAL_FILTER 0 -%define CONFIG_AFADE_FILTER 0 -%define CONFIG_AFFTFILT_FILTER 0 -%define CONFIG_AFORMAT_FILTER 0 -%define CONFIG_AGATE_FILTER 0 -%define CONFIG_AINTERLEAVE_FILTER 0 -%define CONFIG_ALIMITER_FILTER 0 -%define CONFIG_ALLPASS_FILTER 0 -%define CONFIG_ALOOP_FILTER 0 -%define CONFIG_AMERGE_FILTER 0 -%define CONFIG_AMETADATA_FILTER 0 -%define CONFIG_AMIX_FILTER 0 -%define CONFIG_ANEQUALIZER_FILTER 0 -%define CONFIG_ANULL_FILTER 0 -%define CONFIG_APAD_FILTER 0 -%define CONFIG_APERMS_FILTER 0 -%define CONFIG_APHASER_FILTER 0 -%define CONFIG_APULSATOR_FILTER 0 -%define CONFIG_AREALTIME_FILTER 0 -%define CONFIG_ARESAMPLE_FILTER 0 -%define CONFIG_AREVERSE_FILTER 0 -%define CONFIG_ASELECT_FILTER 0 -%define CONFIG_ASENDCMD_FILTER 0 -%define CONFIG_ASETNSAMPLES_FILTER 0 -%define CONFIG_ASETPTS_FILTER 0 -%define CONFIG_ASETRATE_FILTER 0 -%define CONFIG_ASETTB_FILTER 0 -%define CONFIG_ASHOWINFO_FILTER 0 -%define CONFIG_ASIDEDATA_FILTER 0 -%define CONFIG_ASPLIT_FILTER 0 -%define CONFIG_ASTATS_FILTER 0 -%define CONFIG_ASTREAMSELECT_FILTER 0 -%define CONFIG_ASYNCTS_FILTER 0 -%define CONFIG_ATEMPO_FILTER 0 -%define CONFIG_ATRIM_FILTER 0 -%define CONFIG_AZMQ_FILTER 0 -%define CONFIG_BANDPASS_FILTER 0 -%define CONFIG_BANDREJECT_FILTER 0 -%define CONFIG_BASS_FILTER 0 -%define CONFIG_BIQUAD_FILTER 0 -%define CONFIG_BS2B_FILTER 0 -%define CONFIG_CHANNELMAP_FILTER 0 -%define CONFIG_CHANNELSPLIT_FILTER 0 -%define CONFIG_CHORUS_FILTER 0 -%define CONFIG_COMPAND_FILTER 0 -%define CONFIG_COMPENSATIONDELAY_FILTER 0 -%define CONFIG_CRYSTALIZER_FILTER 0 -%define CONFIG_DCSHIFT_FILTER 0 -%define CONFIG_DYNAUDNORM_FILTER 0 -%define CONFIG_EARWAX_FILTER 0 -%define CONFIG_EBUR128_FILTER 0 -%define CONFIG_EQUALIZER_FILTER 0 -%define CONFIG_EXTRASTEREO_FILTER 0 -%define CONFIG_FIREQUALIZER_FILTER 0 -%define CONFIG_FLANGER_FILTER 0 -%define CONFIG_HDCD_FILTER 0 -%define CONFIG_HIGHPASS_FILTER 0 -%define CONFIG_JOIN_FILTER 0 -%define CONFIG_LADSPA_FILTER 0 -%define CONFIG_LOUDNORM_FILTER 0 -%define CONFIG_LOWPASS_FILTER 0 -%define CONFIG_PAN_FILTER 0 -%define CONFIG_REPLAYGAIN_FILTER 0 -%define CONFIG_RESAMPLE_FILTER 0 -%define CONFIG_RUBBERBAND_FILTER 0 -%define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -%define CONFIG_SIDECHAINGATE_FILTER 0 -%define CONFIG_SILENCEDETECT_FILTER 0 -%define CONFIG_SILENCEREMOVE_FILTER 0 -%define CONFIG_SOFALIZER_FILTER 0 -%define CONFIG_STEREOTOOLS_FILTER 0 -%define CONFIG_STEREOWIDEN_FILTER 0 -%define CONFIG_TREBLE_FILTER 0 -%define CONFIG_TREMOLO_FILTER 0 -%define CONFIG_VIBRATO_FILTER 0 -%define CONFIG_VOLUME_FILTER 0 -%define CONFIG_VOLUMEDETECT_FILTER 0 -%define CONFIG_AEVALSRC_FILTER 0 -%define CONFIG_ANOISESRC_FILTER 0 -%define CONFIG_ANULLSRC_FILTER 0 -%define CONFIG_FLITE_FILTER 0 -%define CONFIG_SINE_FILTER 0 -%define CONFIG_ANULLSINK_FILTER 0 -%define CONFIG_ALPHAEXTRACT_FILTER 0 -%define CONFIG_ALPHAMERGE_FILTER 0 -%define CONFIG_ASS_FILTER 0 -%define CONFIG_ATADENOISE_FILTER 0 -%define CONFIG_AVGBLUR_FILTER 0 -%define CONFIG_BBOX_FILTER 0 -%define CONFIG_BENCH_FILTER 0 -%define CONFIG_BITPLANENOISE_FILTER 0 -%define CONFIG_BLACKDETECT_FILTER 0 -%define CONFIG_BLACKFRAME_FILTER 0 -%define CONFIG_BLEND_FILTER 0 -%define CONFIG_BOXBLUR_FILTER 0 -%define CONFIG_BWDIF_FILTER 0 -%define CONFIG_CHROMAKEY_FILTER 0 -%define CONFIG_CIESCOPE_FILTER 0 -%define CONFIG_CODECVIEW_FILTER 0 -%define CONFIG_COLORBALANCE_FILTER 0 -%define CONFIG_COLORCHANNELMIXER_FILTER 0 -%define CONFIG_COLORKEY_FILTER 0 -%define CONFIG_COLORLEVELS_FILTER 0 -%define CONFIG_COLORMATRIX_FILTER 0 -%define CONFIG_COLORSPACE_FILTER 0 -%define CONFIG_CONVOLUTION_FILTER 0 -%define CONFIG_COPY_FILTER 0 -%define CONFIG_COREIMAGE_FILTER 0 -%define CONFIG_COVER_RECT_FILTER 0 -%define CONFIG_CROP_FILTER 0 -%define CONFIG_CROPDETECT_FILTER 0 -%define CONFIG_CURVES_FILTER 0 -%define CONFIG_DATASCOPE_FILTER 0 -%define CONFIG_DCTDNOIZ_FILTER 0 -%define CONFIG_DEBAND_FILTER 0 -%define CONFIG_DECIMATE_FILTER 0 -%define CONFIG_DEFLATE_FILTER 0 -%define CONFIG_DEJUDDER_FILTER 0 -%define CONFIG_DELOGO_FILTER 0 -%define CONFIG_DESHAKE_FILTER 0 -%define CONFIG_DETELECINE_FILTER 0 -%define CONFIG_DILATION_FILTER 0 -%define CONFIG_DISPLACE_FILTER 0 -%define CONFIG_DRAWBOX_FILTER 0 -%define CONFIG_DRAWGRAPH_FILTER 0 -%define CONFIG_DRAWGRID_FILTER 0 -%define CONFIG_DRAWTEXT_FILTER 0 -%define CONFIG_EDGEDETECT_FILTER 0 -%define CONFIG_ELBG_FILTER 0 -%define CONFIG_EQ_FILTER 0 -%define CONFIG_EROSION_FILTER 0 -%define CONFIG_EXTRACTPLANES_FILTER 0 -%define CONFIG_FADE_FILTER 0 -%define CONFIG_FFTFILT_FILTER 0 -%define CONFIG_FIELD_FILTER 0 -%define CONFIG_FIELDHINT_FILTER 0 -%define CONFIG_FIELDMATCH_FILTER 0 -%define CONFIG_FIELDORDER_FILTER 0 -%define CONFIG_FIND_RECT_FILTER 0 -%define CONFIG_FORMAT_FILTER 0 -%define CONFIG_FPS_FILTER 0 -%define CONFIG_FRAMEPACK_FILTER 0 -%define CONFIG_FRAMERATE_FILTER 0 -%define CONFIG_FRAMESTEP_FILTER 0 -%define CONFIG_FREI0R_FILTER 0 -%define CONFIG_FSPP_FILTER 0 -%define CONFIG_GBLUR_FILTER 0 -%define CONFIG_GEQ_FILTER 0 -%define CONFIG_GRADFUN_FILTER 0 -%define CONFIG_HALDCLUT_FILTER 0 -%define CONFIG_HFLIP_FILTER 0 -%define CONFIG_HISTEQ_FILTER 0 -%define CONFIG_HISTOGRAM_FILTER 0 -%define CONFIG_HQDN3D_FILTER 0 -%define CONFIG_HQX_FILTER 0 -%define CONFIG_HSTACK_FILTER 0 -%define CONFIG_HUE_FILTER 0 -%define CONFIG_HWDOWNLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_CUDA_FILTER 0 -%define CONFIG_HYSTERESIS_FILTER 0 -%define CONFIG_IDET_FILTER 0 -%define CONFIG_IL_FILTER 0 -%define CONFIG_INFLATE_FILTER 0 -%define CONFIG_INTERLACE_FILTER 0 -%define CONFIG_INTERLEAVE_FILTER 0 -%define CONFIG_KERNDEINT_FILTER 0 -%define CONFIG_LENSCORRECTION_FILTER 0 -%define CONFIG_LOOP_FILTER 0 -%define CONFIG_LUT_FILTER 0 -%define CONFIG_LUT2_FILTER 0 -%define CONFIG_LUT3D_FILTER 0 -%define CONFIG_LUTRGB_FILTER 0 -%define CONFIG_LUTYUV_FILTER 0 -%define CONFIG_MASKEDCLAMP_FILTER 0 -%define CONFIG_MASKEDMERGE_FILTER 0 -%define CONFIG_MCDEINT_FILTER 0 -%define CONFIG_MERGEPLANES_FILTER 0 -%define CONFIG_MESTIMATE_FILTER 0 -%define CONFIG_METADATA_FILTER 0 -%define CONFIG_MINTERPOLATE_FILTER 0 -%define CONFIG_MPDECIMATE_FILTER 0 -%define CONFIG_NEGATE_FILTER 0 -%define CONFIG_NLMEANS_FILTER 0 -%define CONFIG_NNEDI_FILTER 0 -%define CONFIG_NOFORMAT_FILTER 0 -%define CONFIG_NOISE_FILTER 0 -%define CONFIG_NULL_FILTER 0 -%define CONFIG_OCR_FILTER 0 -%define CONFIG_OCV_FILTER 0 -%define CONFIG_OVERLAY_FILTER 0 -%define CONFIG_OWDENOISE_FILTER 0 -%define CONFIG_PAD_FILTER 0 -%define CONFIG_PALETTEGEN_FILTER 0 -%define CONFIG_PALETTEUSE_FILTER 0 -%define CONFIG_PERMS_FILTER 0 -%define CONFIG_PERSPECTIVE_FILTER 0 -%define CONFIG_PHASE_FILTER 0 -%define CONFIG_PIXDESCTEST_FILTER 0 -%define CONFIG_PP_FILTER 0 -%define CONFIG_PP7_FILTER 0 -%define CONFIG_PREWITT_FILTER 0 -%define CONFIG_PSNR_FILTER 0 -%define CONFIG_PULLUP_FILTER 0 -%define CONFIG_QP_FILTER 0 -%define CONFIG_RANDOM_FILTER 0 -%define CONFIG_READVITC_FILTER 0 -%define CONFIG_REALTIME_FILTER 0 -%define CONFIG_REMAP_FILTER 0 -%define CONFIG_REMOVEGRAIN_FILTER 0 -%define CONFIG_REMOVELOGO_FILTER 0 -%define CONFIG_REPEATFIELDS_FILTER 0 -%define CONFIG_REVERSE_FILTER 0 -%define CONFIG_ROTATE_FILTER 0 -%define CONFIG_SAB_FILTER 0 -%define CONFIG_SCALE_FILTER 0 -%define CONFIG_SCALE_NPP_FILTER 0 -%define CONFIG_SCALE_VAAPI_FILTER 0 -%define CONFIG_SCALE2REF_FILTER 0 -%define CONFIG_SELECT_FILTER 0 -%define CONFIG_SELECTIVECOLOR_FILTER 0 -%define CONFIG_SENDCMD_FILTER 0 -%define CONFIG_SEPARATEFIELDS_FILTER 0 -%define CONFIG_SETDAR_FILTER 0 -%define CONFIG_SETFIELD_FILTER 0 -%define CONFIG_SETPTS_FILTER 0 -%define CONFIG_SETSAR_FILTER 0 -%define CONFIG_SETTB_FILTER 0 -%define CONFIG_SHOWINFO_FILTER 0 -%define CONFIG_SHOWPALETTE_FILTER 0 -%define CONFIG_SHUFFLEFRAMES_FILTER 0 -%define CONFIG_SHUFFLEPLANES_FILTER 0 -%define CONFIG_SIDEDATA_FILTER 0 -%define CONFIG_SIGNALSTATS_FILTER 0 -%define CONFIG_SMARTBLUR_FILTER 0 -%define CONFIG_SOBEL_FILTER 0 -%define CONFIG_SPLIT_FILTER 0 -%define CONFIG_SPP_FILTER 0 -%define CONFIG_SSIM_FILTER 0 -%define CONFIG_STEREO3D_FILTER 0 -%define CONFIG_STREAMSELECT_FILTER 0 -%define CONFIG_SUBTITLES_FILTER 0 -%define CONFIG_SUPER2XSAI_FILTER 0 -%define CONFIG_SWAPRECT_FILTER 0 -%define CONFIG_SWAPUV_FILTER 0 -%define CONFIG_TBLEND_FILTER 0 -%define CONFIG_TELECINE_FILTER 0 -%define CONFIG_THUMBNAIL_FILTER 0 -%define CONFIG_TILE_FILTER 0 -%define CONFIG_TINTERLACE_FILTER 0 -%define CONFIG_TRANSPOSE_FILTER 0 -%define CONFIG_TRIM_FILTER 0 -%define CONFIG_UNSHARP_FILTER 0 -%define CONFIG_USPP_FILTER 0 -%define CONFIG_VAGUEDENOISER_FILTER 0 -%define CONFIG_VECTORSCOPE_FILTER 0 -%define CONFIG_VFLIP_FILTER 0 -%define CONFIG_VIDSTABDETECT_FILTER 0 -%define CONFIG_VIDSTABTRANSFORM_FILTER 0 -%define CONFIG_VIGNETTE_FILTER 0 -%define CONFIG_VSTACK_FILTER 0 -%define CONFIG_W3FDIF_FILTER 0 -%define CONFIG_WAVEFORM_FILTER 0 -%define CONFIG_WEAVE_FILTER 0 -%define CONFIG_XBR_FILTER 0 -%define CONFIG_YADIF_FILTER 0 -%define CONFIG_ZMQ_FILTER 0 -%define CONFIG_ZOOMPAN_FILTER 0 -%define CONFIG_ZSCALE_FILTER 0 -%define CONFIG_ALLRGB_FILTER 0 -%define CONFIG_ALLYUV_FILTER 0 -%define CONFIG_CELLAUTO_FILTER 0 -%define CONFIG_COLOR_FILTER 0 -%define CONFIG_COREIMAGESRC_FILTER 0 -%define CONFIG_FREI0R_SRC_FILTER 0 -%define CONFIG_HALDCLUTSRC_FILTER 0 -%define CONFIG_LIFE_FILTER 0 -%define CONFIG_MANDELBROT_FILTER 0 -%define CONFIG_MPTESTSRC_FILTER 0 -%define CONFIG_NULLSRC_FILTER 0 -%define CONFIG_RGBTESTSRC_FILTER 0 -%define CONFIG_SMPTEBARS_FILTER 0 -%define CONFIG_SMPTEHDBARS_FILTER 0 -%define CONFIG_TESTSRC_FILTER 0 -%define CONFIG_TESTSRC2_FILTER 0 -%define CONFIG_YUVTESTSRC_FILTER 0 -%define CONFIG_NULLSINK_FILTER 0 -%define CONFIG_ADRAWGRAPH_FILTER 0 -%define CONFIG_AHISTOGRAM_FILTER 0 -%define CONFIG_APHASEMETER_FILTER 0 -%define CONFIG_AVECTORSCOPE_FILTER 0 -%define CONFIG_CONCAT_FILTER 0 -%define CONFIG_SHOWCQT_FILTER 0 -%define CONFIG_SHOWFREQS_FILTER 0 -%define CONFIG_SHOWSPECTRUM_FILTER 0 -%define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -%define CONFIG_SHOWVOLUME_FILTER 0 -%define CONFIG_SHOWWAVES_FILTER 0 -%define CONFIG_SHOWWAVESPIC_FILTER 0 -%define CONFIG_SPECTRUMSYNTH_FILTER 0 -%define CONFIG_AMOVIE_FILTER 0 -%define CONFIG_MOVIE_FILTER 0 -%define CONFIG_H263_CUVID_HWACCEL 0 -%define CONFIG_H263_VAAPI_HWACCEL 0 -%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_H264_CUVID_HWACCEL 0 -%define CONFIG_H264_D3D11VA_HWACCEL 0 -%define CONFIG_H264_DXVA2_HWACCEL 0 -%define CONFIG_H264_MEDIACODEC_HWACCEL 0 -%define CONFIG_H264_MMAL_HWACCEL 0 -%define CONFIG_H264_QSV_HWACCEL 0 -%define CONFIG_H264_VAAPI_HWACCEL 0 -%define CONFIG_H264_VDA_HWACCEL 0 -%define CONFIG_H264_VDA_OLD_HWACCEL 0 -%define CONFIG_H264_VDPAU_HWACCEL 0 -%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_HEVC_CUVID_HWACCEL 0 -%define CONFIG_HEVC_D3D11VA_HWACCEL 0 -%define CONFIG_HEVC_DXVA2_HWACCEL 0 -%define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -%define CONFIG_HEVC_QSV_HWACCEL 0 -%define CONFIG_HEVC_VAAPI_HWACCEL 0 -%define CONFIG_HEVC_VDPAU_HWACCEL 0 -%define CONFIG_MJPEG_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_XVMC_HWACCEL 0 -%define CONFIG_MPEG1_VDPAU_HWACCEL 0 -%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG2_CUVID_HWACCEL 0 -%define CONFIG_MPEG2_XVMC_HWACCEL 0 -%define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -%define CONFIG_MPEG2_DXVA2_HWACCEL 0 -%define CONFIG_MPEG2_MMAL_HWACCEL 0 -%define CONFIG_MPEG2_QSV_HWACCEL 0 -%define CONFIG_MPEG2_VAAPI_HWACCEL 0 -%define CONFIG_MPEG2_VDPAU_HWACCEL 0 -%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG4_CUVID_HWACCEL 0 -%define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -%define CONFIG_MPEG4_MMAL_HWACCEL 0 -%define CONFIG_MPEG4_VAAPI_HWACCEL 0 -%define CONFIG_MPEG4_VDPAU_HWACCEL 0 -%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_VC1_CUVID_HWACCEL 0 -%define CONFIG_VC1_D3D11VA_HWACCEL 0 -%define CONFIG_VC1_DXVA2_HWACCEL 0 -%define CONFIG_VC1_VAAPI_HWACCEL 0 -%define CONFIG_VC1_VDPAU_HWACCEL 0 -%define CONFIG_VC1_MMAL_HWACCEL 0 -%define CONFIG_VC1_QSV_HWACCEL 0 -%define CONFIG_VP8_CUVID_HWACCEL 0 -%define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_CUVID_HWACCEL 0 -%define CONFIG_VP9_D3D11VA_HWACCEL 0 -%define CONFIG_VP9_DXVA2_HWACCEL 0 -%define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_D3D11VA_HWACCEL 0 -%define CONFIG_WMV3_DXVA2_HWACCEL 0 -%define CONFIG_WMV3_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_VDPAU_HWACCEL 0 -%define CONFIG_ALSA_INDEV 0 -%define CONFIG_AVFOUNDATION_INDEV 0 -%define CONFIG_BKTR_INDEV 0 -%define CONFIG_DECKLINK_INDEV 0 -%define CONFIG_DSHOW_INDEV 0 -%define CONFIG_DV1394_INDEV 0 -%define CONFIG_FBDEV_INDEV 0 -%define CONFIG_GDIGRAB_INDEV 0 -%define CONFIG_IEC61883_INDEV 0 -%define CONFIG_JACK_INDEV 0 -%define CONFIG_LAVFI_INDEV 0 -%define CONFIG_OPENAL_INDEV 0 -%define CONFIG_OSS_INDEV 0 -%define CONFIG_PULSE_INDEV 0 -%define CONFIG_QTKIT_INDEV 0 -%define CONFIG_SNDIO_INDEV 0 -%define CONFIG_V4L2_INDEV 0 -%define CONFIG_VFWCAP_INDEV 0 -%define CONFIG_X11GRAB_INDEV 0 -%define CONFIG_X11GRAB_XCB_INDEV 0 -%define CONFIG_LIBCDIO_INDEV 0 -%define CONFIG_LIBDC1394_INDEV 0 -%define CONFIG_A64_MUXER 0 -%define CONFIG_AC3_MUXER 0 -%define CONFIG_ADTS_MUXER 0 -%define CONFIG_ADX_MUXER 0 -%define CONFIG_AIFF_MUXER 0 -%define CONFIG_AMR_MUXER 0 -%define CONFIG_APNG_MUXER 0 -%define CONFIG_ASF_MUXER 0 -%define CONFIG_ASS_MUXER 0 -%define CONFIG_AST_MUXER 0 -%define CONFIG_ASF_STREAM_MUXER 0 -%define CONFIG_AU_MUXER 0 -%define CONFIG_AVI_MUXER 0 -%define CONFIG_AVM2_MUXER 0 -%define CONFIG_BIT_MUXER 0 -%define CONFIG_CAF_MUXER 0 -%define CONFIG_CAVSVIDEO_MUXER 0 -%define CONFIG_CRC_MUXER 0 -%define CONFIG_DASH_MUXER 0 -%define CONFIG_DATA_MUXER 0 -%define CONFIG_DAUD_MUXER 0 -%define CONFIG_DIRAC_MUXER 0 -%define CONFIG_DNXHD_MUXER 0 -%define CONFIG_DTS_MUXER 0 -%define CONFIG_DV_MUXER 0 -%define CONFIG_EAC3_MUXER 0 -%define CONFIG_F4V_MUXER 0 -%define CONFIG_FFM_MUXER 0 -%define CONFIG_FFMETADATA_MUXER 0 -%define CONFIG_FIFO_MUXER 0 -%define CONFIG_FILMSTRIP_MUXER 0 -%define CONFIG_FLAC_MUXER 0 -%define CONFIG_FLV_MUXER 0 -%define CONFIG_FRAMECRC_MUXER 0 -%define CONFIG_FRAMEHASH_MUXER 0 -%define CONFIG_FRAMEMD5_MUXER 0 -%define CONFIG_G722_MUXER 0 -%define CONFIG_G723_1_MUXER 0 -%define CONFIG_GIF_MUXER 0 -%define CONFIG_GSM_MUXER 0 -%define CONFIG_GXF_MUXER 0 -%define CONFIG_H261_MUXER 0 -%define CONFIG_H263_MUXER 0 -%define CONFIG_H264_MUXER 0 -%define CONFIG_HASH_MUXER 0 -%define CONFIG_HDS_MUXER 0 -%define CONFIG_HEVC_MUXER 0 -%define CONFIG_HLS_MUXER 0 -%define CONFIG_ICO_MUXER 0 -%define CONFIG_ILBC_MUXER 0 -%define CONFIG_IMAGE2_MUXER 0 -%define CONFIG_IMAGE2PIPE_MUXER 0 -%define CONFIG_IPOD_MUXER 0 -%define CONFIG_IRCAM_MUXER 0 -%define CONFIG_ISMV_MUXER 0 -%define CONFIG_IVF_MUXER 0 -%define CONFIG_JACOSUB_MUXER 0 -%define CONFIG_LATM_MUXER 0 -%define CONFIG_LRC_MUXER 0 -%define CONFIG_M4V_MUXER 0 -%define CONFIG_MD5_MUXER 0 -%define CONFIG_MATROSKA_MUXER 0 -%define CONFIG_MATROSKA_AUDIO_MUXER 0 -%define CONFIG_MICRODVD_MUXER 0 -%define CONFIG_MJPEG_MUXER 0 -%define CONFIG_MLP_MUXER 0 -%define CONFIG_MMF_MUXER 0 -%define CONFIG_MOV_MUXER 0 -%define CONFIG_MP2_MUXER 0 -%define CONFIG_MP3_MUXER 0 -%define CONFIG_MP4_MUXER 0 -%define CONFIG_MPEG1SYSTEM_MUXER 0 -%define CONFIG_MPEG1VCD_MUXER 0 -%define CONFIG_MPEG1VIDEO_MUXER 0 -%define CONFIG_MPEG2DVD_MUXER 0 -%define CONFIG_MPEG2SVCD_MUXER 0 -%define CONFIG_MPEG2VIDEO_MUXER 0 -%define CONFIG_MPEG2VOB_MUXER 0 -%define CONFIG_MPEGTS_MUXER 0 -%define CONFIG_MPJPEG_MUXER 0 -%define CONFIG_MXF_MUXER 0 -%define CONFIG_MXF_D10_MUXER 0 -%define CONFIG_MXF_OPATOM_MUXER 0 -%define CONFIG_NULL_MUXER 0 -%define CONFIG_NUT_MUXER 0 -%define CONFIG_OGA_MUXER 0 -%define CONFIG_OGG_MUXER 0 -%define CONFIG_OGV_MUXER 0 -%define CONFIG_OMA_MUXER 0 -%define CONFIG_OPUS_MUXER 0 -%define CONFIG_PCM_ALAW_MUXER 0 -%define CONFIG_PCM_MULAW_MUXER 0 -%define CONFIG_PCM_F64BE_MUXER 0 -%define CONFIG_PCM_F64LE_MUXER 0 -%define CONFIG_PCM_F32BE_MUXER 0 -%define CONFIG_PCM_F32LE_MUXER 0 -%define CONFIG_PCM_S32BE_MUXER 0 -%define CONFIG_PCM_S32LE_MUXER 0 -%define CONFIG_PCM_S24BE_MUXER 0 -%define CONFIG_PCM_S24LE_MUXER 0 -%define CONFIG_PCM_S16BE_MUXER 0 -%define CONFIG_PCM_S16LE_MUXER 0 -%define CONFIG_PCM_S8_MUXER 0 -%define CONFIG_PCM_U32BE_MUXER 0 -%define CONFIG_PCM_U32LE_MUXER 0 -%define CONFIG_PCM_U24BE_MUXER 0 -%define CONFIG_PCM_U24LE_MUXER 0 -%define CONFIG_PCM_U16BE_MUXER 0 -%define CONFIG_PCM_U16LE_MUXER 0 -%define CONFIG_PCM_U8_MUXER 0 -%define CONFIG_PSP_MUXER 0 -%define CONFIG_RAWVIDEO_MUXER 0 -%define CONFIG_RM_MUXER 0 -%define CONFIG_ROQ_MUXER 0 -%define CONFIG_RSO_MUXER 0 -%define CONFIG_RTP_MUXER 0 -%define CONFIG_RTP_MPEGTS_MUXER 0 -%define CONFIG_RTSP_MUXER 0 -%define CONFIG_SAP_MUXER 0 -%define CONFIG_SEGMENT_MUXER 0 -%define CONFIG_STREAM_SEGMENT_MUXER 0 -%define CONFIG_SINGLEJPEG_MUXER 0 -%define CONFIG_SMJPEG_MUXER 0 -%define CONFIG_SMOOTHSTREAMING_MUXER 0 -%define CONFIG_SOX_MUXER 0 -%define CONFIG_SPX_MUXER 0 -%define CONFIG_SPDIF_MUXER 0 -%define CONFIG_SRT_MUXER 0 -%define CONFIG_SWF_MUXER 0 -%define CONFIG_TEE_MUXER 0 -%define CONFIG_TG2_MUXER 0 -%define CONFIG_TGP_MUXER 0 -%define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -%define CONFIG_TRUEHD_MUXER 0 -%define CONFIG_TTA_MUXER 0 -%define CONFIG_UNCODEDFRAMECRC_MUXER 0 -%define CONFIG_VC1_MUXER 0 -%define CONFIG_VC1T_MUXER 0 -%define CONFIG_VOC_MUXER 0 -%define CONFIG_W64_MUXER 0 -%define CONFIG_WAV_MUXER 0 -%define CONFIG_WEBM_MUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -%define CONFIG_WEBM_CHUNK_MUXER 0 -%define CONFIG_WEBP_MUXER 0 -%define CONFIG_WEBVTT_MUXER 0 -%define CONFIG_WTV_MUXER 0 -%define CONFIG_WV_MUXER 0 -%define CONFIG_YUV4MPEGPIPE_MUXER 0 -%define CONFIG_CHROMAPRINT_MUXER 0 -%define CONFIG_LIBNUT_MUXER 0 -%define CONFIG_ALSA_OUTDEV 0 -%define CONFIG_CACA_OUTDEV 0 -%define CONFIG_DECKLINK_OUTDEV 0 -%define CONFIG_FBDEV_OUTDEV 0 -%define CONFIG_OPENGL_OUTDEV 0 -%define CONFIG_OSS_OUTDEV 0 -%define CONFIG_PULSE_OUTDEV 0 -%define CONFIG_SDL2_OUTDEV 0 -%define CONFIG_SNDIO_OUTDEV 0 -%define CONFIG_V4L2_OUTDEV 0 -%define CONFIG_XV_OUTDEV 0 -%define CONFIG_AAC_PARSER 0 -%define CONFIG_AAC_LATM_PARSER 0 -%define CONFIG_AC3_PARSER 0 -%define CONFIG_ADX_PARSER 0 -%define CONFIG_BMP_PARSER 0 -%define CONFIG_CAVSVIDEO_PARSER 0 -%define CONFIG_COOK_PARSER 0 -%define CONFIG_DCA_PARSER 0 -%define CONFIG_DIRAC_PARSER 0 -%define CONFIG_DNXHD_PARSER 0 -%define CONFIG_DPX_PARSER 0 -%define CONFIG_DVAUDIO_PARSER 0 -%define CONFIG_DVBSUB_PARSER 0 -%define CONFIG_DVDSUB_PARSER 0 -%define CONFIG_DVD_NAV_PARSER 0 %define CONFIG_FLAC_PARSER 1 -%define CONFIG_G729_PARSER 0 -%define CONFIG_GSM_PARSER 0 -%define CONFIG_H261_PARSER 0 -%define CONFIG_H263_PARSER 0 -%define CONFIG_H264_PARSER 0 -%define CONFIG_HEVC_PARSER 0 -%define CONFIG_MJPEG_PARSER 0 -%define CONFIG_MLP_PARSER 0 -%define CONFIG_MPEG4VIDEO_PARSER 0 -%define CONFIG_MPEGAUDIO_PARSER 0 -%define CONFIG_MPEGVIDEO_PARSER 0 -%define CONFIG_OPUS_PARSER 0 -%define CONFIG_PNG_PARSER 0 -%define CONFIG_PNM_PARSER 0 -%define CONFIG_RV30_PARSER 0 -%define CONFIG_RV40_PARSER 0 -%define CONFIG_TAK_PARSER 0 -%define CONFIG_VC1_PARSER 0 -%define CONFIG_VORBIS_PARSER 0 -%define CONFIG_VP3_PARSER 0 %define CONFIG_VP8_PARSER 1 %define CONFIG_VP9_PARSER 1 -%define CONFIG_ASYNC_PROTOCOL 0 -%define CONFIG_BLURAY_PROTOCOL 0 -%define CONFIG_CACHE_PROTOCOL 0 -%define CONFIG_CONCAT_PROTOCOL 0 -%define CONFIG_CRYPTO_PROTOCOL 0 -%define CONFIG_DATA_PROTOCOL 0 -%define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -%define CONFIG_FFRTMPHTTP_PROTOCOL 0 -%define CONFIG_FILE_PROTOCOL 0 -%define CONFIG_FTP_PROTOCOL 0 -%define CONFIG_GOPHER_PROTOCOL 0 -%define CONFIG_HLS_PROTOCOL 0 -%define CONFIG_HTTP_PROTOCOL 0 -%define CONFIG_HTTPPROXY_PROTOCOL 0 -%define CONFIG_HTTPS_PROTOCOL 0 -%define CONFIG_ICECAST_PROTOCOL 0 -%define CONFIG_MMSH_PROTOCOL 0 -%define CONFIG_MMST_PROTOCOL 0 -%define CONFIG_MD5_PROTOCOL 0 -%define CONFIG_PIPE_PROTOCOL 0 -%define CONFIG_RTMP_PROTOCOL 0 -%define CONFIG_RTMPE_PROTOCOL 0 -%define CONFIG_RTMPS_PROTOCOL 0 -%define CONFIG_RTMPT_PROTOCOL 0 -%define CONFIG_RTMPTE_PROTOCOL 0 -%define CONFIG_RTMPTS_PROTOCOL 0 -%define CONFIG_RTP_PROTOCOL 0 -%define CONFIG_SCTP_PROTOCOL 0 -%define CONFIG_SRTP_PROTOCOL 0 -%define CONFIG_SUBFILE_PROTOCOL 0 -%define CONFIG_TEE_PROTOCOL 0 -%define CONFIG_TCP_PROTOCOL 0 -%define CONFIG_TLS_GNUTLS_PROTOCOL 0 -%define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -%define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -%define CONFIG_TLS_OPENSSL_PROTOCOL 0 -%define CONFIG_UDP_PROTOCOL 0 -%define CONFIG_UDPLITE_PROTOCOL 0 -%define CONFIG_UNIX_PROTOCOL 0 -%define CONFIG_LIBRTMP_PROTOCOL 0 -%define CONFIG_LIBRTMPE_PROTOCOL 0 -%define CONFIG_LIBRTMPS_PROTOCOL 0 -%define CONFIG_LIBRTMPT_PROTOCOL 0 -%define CONFIG_LIBRTMPTE_PROTOCOL 0 -%define CONFIG_LIBSSH_PROTOCOL 0 -%define CONFIG_LIBSMBCLIENT_PROTOCOL 0 diff --git a/media/ffvpx/config_darwin64.h b/media/ffvpx/config_darwin64.h index e1d42ad39ca1..9eee5087279b 100644 --- a/media/ffvpx/config_darwin64.h +++ b/media/ffvpx/config_darwin64.h @@ -385,15 +385,7 @@ #define HAVE_XLIB 0 #define CONFIG_BSFS 0 #define CONFIG_DECODERS 1 -#define CONFIG_ENCODERS 0 -#define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 -#define CONFIG_INDEVS 0 -#define CONFIG_OUTDEVS 0 -#define CONFIG_FILTERS 0 -#define CONFIG_DEMUXERS 0 -#define CONFIG_MUXERS 0 -#define CONFIG_PROTOCOLS 0 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 1 #define CONFIG_MANPAGES 1 @@ -515,7 +507,6 @@ #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 -#define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 @@ -580,7 +571,6 @@ #define CONFIG_FDCTDSP 0 #define CONFIG_FLACDSP 1 #define CONFIG_FMTCONVERT 0 -#define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 @@ -656,1570 +646,10 @@ #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 -#define CONFIG_AASC_DECODER 0 -#define CONFIG_AIC_DECODER 0 -#define CONFIG_ALIAS_PIX_DECODER 0 -#define CONFIG_AMV_DECODER 0 -#define CONFIG_ANM_DECODER 0 -#define CONFIG_ANSI_DECODER 0 -#define CONFIG_APNG_DECODER 0 -#define CONFIG_ASV1_DECODER 0 -#define CONFIG_ASV2_DECODER 0 -#define CONFIG_AURA_DECODER 0 -#define CONFIG_AURA2_DECODER 0 -#define CONFIG_AVRP_DECODER 0 -#define CONFIG_AVRN_DECODER 0 -#define CONFIG_AVS_DECODER 0 -#define CONFIG_AVUI_DECODER 0 -#define CONFIG_AYUV_DECODER 0 -#define CONFIG_BETHSOFTVID_DECODER 0 -#define CONFIG_BFI_DECODER 0 -#define CONFIG_BINK_DECODER 0 -#define CONFIG_BMP_DECODER 0 -#define CONFIG_BMV_VIDEO_DECODER 0 -#define CONFIG_BRENDER_PIX_DECODER 0 -#define CONFIG_C93_DECODER 0 -#define CONFIG_CAVS_DECODER 0 -#define CONFIG_CDGRAPHICS_DECODER 0 -#define CONFIG_CDXL_DECODER 0 -#define CONFIG_CFHD_DECODER 0 -#define CONFIG_CINEPAK_DECODER 0 -#define CONFIG_CLJR_DECODER 0 -#define CONFIG_CLLC_DECODER 0 -#define CONFIG_COMFORTNOISE_DECODER 0 -#define CONFIG_CPIA_DECODER 0 -#define CONFIG_CSCD_DECODER 0 -#define CONFIG_CYUV_DECODER 0 -#define CONFIG_DDS_DECODER 0 -#define CONFIG_DFA_DECODER 0 -#define CONFIG_DIRAC_DECODER 0 -#define CONFIG_DNXHD_DECODER 0 -#define CONFIG_DPX_DECODER 0 -#define CONFIG_DSICINVIDEO_DECODER 0 -#define CONFIG_DVAUDIO_DECODER 0 -#define CONFIG_DVVIDEO_DECODER 0 -#define CONFIG_DXA_DECODER 0 -#define CONFIG_DXTORY_DECODER 0 -#define CONFIG_DXV_DECODER 0 -#define CONFIG_EACMV_DECODER 0 -#define CONFIG_EAMAD_DECODER 0 -#define CONFIG_EATGQ_DECODER 0 -#define CONFIG_EATGV_DECODER 0 -#define CONFIG_EATQI_DECODER 0 -#define CONFIG_EIGHTBPS_DECODER 0 -#define CONFIG_EIGHTSVX_EXP_DECODER 0 -#define CONFIG_EIGHTSVX_FIB_DECODER 0 -#define CONFIG_ESCAPE124_DECODER 0 -#define CONFIG_ESCAPE130_DECODER 0 -#define CONFIG_EXR_DECODER 0 -#define CONFIG_FFV1_DECODER 0 -#define CONFIG_FFVHUFF_DECODER 0 -#define CONFIG_FIC_DECODER 0 -#define CONFIG_FLASHSV_DECODER 0 -#define CONFIG_FLASHSV2_DECODER 0 -#define CONFIG_FLIC_DECODER 0 -#define CONFIG_FLV_DECODER 0 -#define CONFIG_FOURXM_DECODER 0 -#define CONFIG_FRAPS_DECODER 0 -#define CONFIG_FRWU_DECODER 0 -#define CONFIG_G2M_DECODER 0 -#define CONFIG_GIF_DECODER 0 -#define CONFIG_H261_DECODER 0 -#define CONFIG_H263_DECODER 0 -#define CONFIG_H263I_DECODER 0 -#define CONFIG_H263P_DECODER 0 -#define CONFIG_H264_DECODER 0 -#define CONFIG_H264_CRYSTALHD_DECODER 0 -#define CONFIG_H264_MEDIACODEC_DECODER 0 -#define CONFIG_H264_MMAL_DECODER 0 -#define CONFIG_H264_QSV_DECODER 0 -#define CONFIG_H264_VDA_DECODER 0 -#define CONFIG_H264_VDPAU_DECODER 0 -#define CONFIG_HAP_DECODER 0 -#define CONFIG_HEVC_DECODER 0 -#define CONFIG_HEVC_QSV_DECODER 0 -#define CONFIG_HNM4_VIDEO_DECODER 0 -#define CONFIG_HQ_HQA_DECODER 0 -#define CONFIG_HQX_DECODER 0 -#define CONFIG_HUFFYUV_DECODER 0 -#define CONFIG_IDCIN_DECODER 0 -#define CONFIG_IFF_ILBM_DECODER 0 -#define CONFIG_INDEO2_DECODER 0 -#define CONFIG_INDEO3_DECODER 0 -#define CONFIG_INDEO4_DECODER 0 -#define CONFIG_INDEO5_DECODER 0 -#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -#define CONFIG_JPEG2000_DECODER 0 -#define CONFIG_JPEGLS_DECODER 0 -#define CONFIG_JV_DECODER 0 -#define CONFIG_KGV1_DECODER 0 -#define CONFIG_KMVC_DECODER 0 -#define CONFIG_LAGARITH_DECODER 0 -#define CONFIG_LOCO_DECODER 0 -#define CONFIG_M101_DECODER 0 -#define CONFIG_MAGICYUV_DECODER 0 -#define CONFIG_MDEC_DECODER 0 -#define CONFIG_MIMIC_DECODER 0 -#define CONFIG_MJPEG_DECODER 0 -#define CONFIG_MJPEGB_DECODER 0 -#define CONFIG_MMVIDEO_DECODER 0 -#define CONFIG_MOTIONPIXELS_DECODER 0 -#define CONFIG_MPEG_XVMC_DECODER 0 -#define CONFIG_MPEG1VIDEO_DECODER 0 -#define CONFIG_MPEG2VIDEO_DECODER 0 -#define CONFIG_MPEG4_DECODER 0 -#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG4_MMAL_DECODER 0 -#define CONFIG_MPEG4_VDPAU_DECODER 0 -#define CONFIG_MPEGVIDEO_DECODER 0 -#define CONFIG_MPEG_VDPAU_DECODER 0 -#define CONFIG_MPEG1_VDPAU_DECODER 0 -#define CONFIG_MPEG2_MMAL_DECODER 0 -#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG2_QSV_DECODER 0 -#define CONFIG_MSA1_DECODER 0 -#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MSMPEG4V1_DECODER 0 -#define CONFIG_MSMPEG4V2_DECODER 0 -#define CONFIG_MSMPEG4V3_DECODER 0 -#define CONFIG_MSRLE_DECODER 0 -#define CONFIG_MSS1_DECODER 0 -#define CONFIG_MSS2_DECODER 0 -#define CONFIG_MSVIDEO1_DECODER 0 -#define CONFIG_MSZH_DECODER 0 -#define CONFIG_MTS2_DECODER 0 -#define CONFIG_MVC1_DECODER 0 -#define CONFIG_MVC2_DECODER 0 -#define CONFIG_MXPEG_DECODER 0 -#define CONFIG_NUV_DECODER 0 -#define CONFIG_PAF_VIDEO_DECODER 0 -#define CONFIG_PAM_DECODER 0 -#define CONFIG_PBM_DECODER 0 -#define CONFIG_PCX_DECODER 0 -#define CONFIG_PGM_DECODER 0 -#define CONFIG_PGMYUV_DECODER 0 -#define CONFIG_PICTOR_DECODER 0 -#define CONFIG_PNG_DECODER 0 -#define CONFIG_PPM_DECODER 0 -#define CONFIG_PRORES_DECODER 0 -#define CONFIG_PRORES_LGPL_DECODER 0 -#define CONFIG_PTX_DECODER 0 -#define CONFIG_QDRAW_DECODER 0 -#define CONFIG_QPEG_DECODER 0 -#define CONFIG_QTRLE_DECODER 0 -#define CONFIG_R10K_DECODER 0 -#define CONFIG_R210_DECODER 0 -#define CONFIG_RAWVIDEO_DECODER 0 -#define CONFIG_RL2_DECODER 0 -#define CONFIG_ROQ_DECODER 0 -#define CONFIG_RPZA_DECODER 0 -#define CONFIG_RSCC_DECODER 0 -#define CONFIG_RV10_DECODER 0 -#define CONFIG_RV20_DECODER 0 -#define CONFIG_RV30_DECODER 0 -#define CONFIG_RV40_DECODER 0 -#define CONFIG_S302M_DECODER 0 -#define CONFIG_SANM_DECODER 0 -#define CONFIG_SCREENPRESSO_DECODER 0 -#define CONFIG_SDX2_DPCM_DECODER 0 -#define CONFIG_SGI_DECODER 0 -#define CONFIG_SGIRLE_DECODER 0 -#define CONFIG_SHEERVIDEO_DECODER 0 -#define CONFIG_SMACKER_DECODER 0 -#define CONFIG_SMC_DECODER 0 -#define CONFIG_SMVJPEG_DECODER 0 -#define CONFIG_SNOW_DECODER 0 -#define CONFIG_SP5X_DECODER 0 -#define CONFIG_SUNRAST_DECODER 0 -#define CONFIG_SVQ1_DECODER 0 -#define CONFIG_SVQ3_DECODER 0 -#define CONFIG_TARGA_DECODER 0 -#define CONFIG_TARGA_Y216_DECODER 0 -#define CONFIG_TDSC_DECODER 0 -#define CONFIG_THEORA_DECODER 0 -#define CONFIG_THP_DECODER 0 -#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -#define CONFIG_TIFF_DECODER 0 -#define CONFIG_TMV_DECODER 0 -#define CONFIG_TRUEMOTION1_DECODER 0 -#define CONFIG_TRUEMOTION2_DECODER 0 -#define CONFIG_TRUEMOTION2RT_DECODER 0 -#define CONFIG_TSCC_DECODER 0 -#define CONFIG_TSCC2_DECODER 0 -#define CONFIG_TXD_DECODER 0 -#define CONFIG_ULTI_DECODER 0 -#define CONFIG_UTVIDEO_DECODER 0 -#define CONFIG_V210_DECODER 0 -#define CONFIG_V210X_DECODER 0 -#define CONFIG_V308_DECODER 0 -#define CONFIG_V408_DECODER 0 -#define CONFIG_V410_DECODER 0 -#define CONFIG_VB_DECODER 0 -#define CONFIG_VBLE_DECODER 0 -#define CONFIG_VC1_DECODER 0 -#define CONFIG_VC1_CRYSTALHD_DECODER 0 -#define CONFIG_VC1_VDPAU_DECODER 0 -#define CONFIG_VC1IMAGE_DECODER 0 -#define CONFIG_VC1_MMAL_DECODER 0 -#define CONFIG_VC1_QSV_DECODER 0 -#define CONFIG_VCR1_DECODER 0 -#define CONFIG_VMDVIDEO_DECODER 0 -#define CONFIG_VMNC_DECODER 0 -#define CONFIG_VP3_DECODER 0 -#define CONFIG_VP5_DECODER 0 -#define CONFIG_VP6_DECODER 0 -#define CONFIG_VP6A_DECODER 0 -#define CONFIG_VP6F_DECODER 0 -#define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 1 #define CONFIG_VP9_DECODER 1 -#define CONFIG_VQA_DECODER 0 -#define CONFIG_WEBP_DECODER 0 -#define CONFIG_WMV1_DECODER 0 -#define CONFIG_WMV2_DECODER 0 -#define CONFIG_WMV3_DECODER 0 -#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -#define CONFIG_WMV3_VDPAU_DECODER 0 -#define CONFIG_WMV3IMAGE_DECODER 0 -#define CONFIG_WNV1_DECODER 0 -#define CONFIG_XAN_WC3_DECODER 0 -#define CONFIG_XAN_WC4_DECODER 0 -#define CONFIG_XBM_DECODER 0 -#define CONFIG_XFACE_DECODER 0 -#define CONFIG_XL_DECODER 0 -#define CONFIG_XWD_DECODER 0 -#define CONFIG_Y41P_DECODER 0 -#define CONFIG_YLC_DECODER 0 -#define CONFIG_YOP_DECODER 0 -#define CONFIG_YUV4_DECODER 0 -#define CONFIG_ZERO12V_DECODER 0 -#define CONFIG_ZEROCODEC_DECODER 0 -#define CONFIG_ZLIB_DECODER 0 -#define CONFIG_ZMBV_DECODER 0 -#define CONFIG_AAC_DECODER 0 -#define CONFIG_AAC_FIXED_DECODER 0 -#define CONFIG_AAC_LATM_DECODER 0 -#define CONFIG_AC3_DECODER 0 -#define CONFIG_AC3_FIXED_DECODER 0 -#define CONFIG_ALAC_DECODER 0 -#define CONFIG_ALS_DECODER 0 -#define CONFIG_AMRNB_DECODER 0 -#define CONFIG_AMRWB_DECODER 0 -#define CONFIG_APE_DECODER 0 -#define CONFIG_ATRAC1_DECODER 0 -#define CONFIG_ATRAC3_DECODER 0 -#define CONFIG_ATRAC3P_DECODER 0 -#define CONFIG_BINKAUDIO_DCT_DECODER 0 -#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -#define CONFIG_BMV_AUDIO_DECODER 0 -#define CONFIG_COOK_DECODER 0 -#define CONFIG_DCA_DECODER 0 -#define CONFIG_DSD_LSBF_DECODER 0 -#define CONFIG_DSD_MSBF_DECODER 0 -#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -#define CONFIG_DSICINAUDIO_DECODER 0 -#define CONFIG_DSS_SP_DECODER 0 -#define CONFIG_DST_DECODER 0 -#define CONFIG_EAC3_DECODER 0 -#define CONFIG_EVRC_DECODER 0 -#define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 1 -#define CONFIG_G723_1_DECODER 0 -#define CONFIG_G729_DECODER 0 -#define CONFIG_GSM_DECODER 0 -#define CONFIG_GSM_MS_DECODER 0 -#define CONFIG_IAC_DECODER 0 -#define CONFIG_IMC_DECODER 0 -#define CONFIG_INTERPLAY_ACM_DECODER 0 -#define CONFIG_MACE3_DECODER 0 -#define CONFIG_MACE6_DECODER 0 -#define CONFIG_METASOUND_DECODER 0 -#define CONFIG_MLP_DECODER 0 -#define CONFIG_MP1_DECODER 0 -#define CONFIG_MP1FLOAT_DECODER 0 -#define CONFIG_MP2_DECODER 0 -#define CONFIG_MP2FLOAT_DECODER 0 -#define CONFIG_MP3_DECODER 0 -#define CONFIG_MP3FLOAT_DECODER 0 -#define CONFIG_MP3ADU_DECODER 0 -#define CONFIG_MP3ADUFLOAT_DECODER 0 -#define CONFIG_MP3ON4_DECODER 0 -#define CONFIG_MP3ON4FLOAT_DECODER 0 -#define CONFIG_MPC7_DECODER 0 -#define CONFIG_MPC8_DECODER 0 -#define CONFIG_NELLYMOSER_DECODER 0 -#define CONFIG_ON2AVC_DECODER 0 -#define CONFIG_OPUS_DECODER 0 -#define CONFIG_PAF_AUDIO_DECODER 0 -#define CONFIG_QCELP_DECODER 0 -#define CONFIG_QDM2_DECODER 0 -#define CONFIG_RA_144_DECODER 0 -#define CONFIG_RA_288_DECODER 0 -#define CONFIG_RALF_DECODER 0 -#define CONFIG_SHORTEN_DECODER 0 -#define CONFIG_SIPR_DECODER 0 -#define CONFIG_SMACKAUD_DECODER 0 -#define CONFIG_SONIC_DECODER 0 -#define CONFIG_TAK_DECODER 0 -#define CONFIG_TRUEHD_DECODER 0 -#define CONFIG_TRUESPEECH_DECODER 0 -#define CONFIG_TTA_DECODER 0 -#define CONFIG_TWINVQ_DECODER 0 -#define CONFIG_VMDAUDIO_DECODER 0 -#define CONFIG_VORBIS_DECODER 0 -#define CONFIG_WAVPACK_DECODER 0 -#define CONFIG_WMALOSSLESS_DECODER 0 -#define CONFIG_WMAPRO_DECODER 0 -#define CONFIG_WMAV1_DECODER 0 -#define CONFIG_WMAV2_DECODER 0 -#define CONFIG_WMAVOICE_DECODER 0 -#define CONFIG_WS_SND1_DECODER 0 -#define CONFIG_XMA1_DECODER 0 -#define CONFIG_XMA2_DECODER 0 -#define CONFIG_PCM_ALAW_DECODER 0 -#define CONFIG_PCM_BLURAY_DECODER 0 -#define CONFIG_PCM_DVD_DECODER 0 -#define CONFIG_PCM_F32BE_DECODER 0 -#define CONFIG_PCM_F32LE_DECODER 0 -#define CONFIG_PCM_F64BE_DECODER 0 -#define CONFIG_PCM_F64LE_DECODER 0 -#define CONFIG_PCM_LXF_DECODER 0 -#define CONFIG_PCM_MULAW_DECODER 0 -#define CONFIG_PCM_S8_DECODER 0 -#define CONFIG_PCM_S8_PLANAR_DECODER 0 -#define CONFIG_PCM_S16BE_DECODER 0 -#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -#define CONFIG_PCM_S16LE_DECODER 0 -#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S24BE_DECODER 0 -#define CONFIG_PCM_S24DAUD_DECODER 0 -#define CONFIG_PCM_S24LE_DECODER 0 -#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S32BE_DECODER 0 -#define CONFIG_PCM_S32LE_DECODER 0 -#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S64BE_DECODER 0 -#define CONFIG_PCM_S64LE_DECODER 0 -#define CONFIG_PCM_U8_DECODER 0 -#define CONFIG_PCM_U16BE_DECODER 0 -#define CONFIG_PCM_U16LE_DECODER 0 -#define CONFIG_PCM_U24BE_DECODER 0 -#define CONFIG_PCM_U24LE_DECODER 0 -#define CONFIG_PCM_U32BE_DECODER 0 -#define CONFIG_PCM_U32LE_DECODER 0 -#define CONFIG_PCM_ZORK_DECODER 0 -#define CONFIG_INTERPLAY_DPCM_DECODER 0 -#define CONFIG_ROQ_DPCM_DECODER 0 -#define CONFIG_SOL_DPCM_DECODER 0 -#define CONFIG_XAN_DPCM_DECODER 0 -#define CONFIG_ADPCM_4XM_DECODER 0 -#define CONFIG_ADPCM_ADX_DECODER 0 -#define CONFIG_ADPCM_AFC_DECODER 0 -#define CONFIG_ADPCM_AICA_DECODER 0 -#define CONFIG_ADPCM_CT_DECODER 0 -#define CONFIG_ADPCM_DTK_DECODER 0 -#define CONFIG_ADPCM_EA_DECODER 0 -#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -#define CONFIG_ADPCM_EA_R1_DECODER 0 -#define CONFIG_ADPCM_EA_R2_DECODER 0 -#define CONFIG_ADPCM_EA_R3_DECODER 0 -#define CONFIG_ADPCM_EA_XAS_DECODER 0 -#define CONFIG_ADPCM_G722_DECODER 0 -#define CONFIG_ADPCM_G726_DECODER 0 -#define CONFIG_ADPCM_G726LE_DECODER 0 -#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -#define CONFIG_ADPCM_IMA_APC_DECODER 0 -#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_DECODER 0 -#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -#define CONFIG_ADPCM_IMA_WS_DECODER 0 -#define CONFIG_ADPCM_MS_DECODER 0 -#define CONFIG_ADPCM_MTAF_DECODER 0 -#define CONFIG_ADPCM_PSX_DECODER 0 -#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -#define CONFIG_ADPCM_SWF_DECODER 0 -#define CONFIG_ADPCM_THP_DECODER 0 -#define CONFIG_ADPCM_THP_LE_DECODER 0 -#define CONFIG_ADPCM_VIMA_DECODER 0 -#define CONFIG_ADPCM_XA_DECODER 0 -#define CONFIG_ADPCM_YAMAHA_DECODER 0 -#define CONFIG_SSA_DECODER 0 -#define CONFIG_ASS_DECODER 0 -#define CONFIG_CCAPTION_DECODER 0 -#define CONFIG_DVBSUB_DECODER 0 -#define CONFIG_DVDSUB_DECODER 0 -#define CONFIG_JACOSUB_DECODER 0 -#define CONFIG_MICRODVD_DECODER 0 -#define CONFIG_MOVTEXT_DECODER 0 -#define CONFIG_MPL2_DECODER 0 -#define CONFIG_PGSSUB_DECODER 0 -#define CONFIG_PJS_DECODER 0 -#define CONFIG_REALTEXT_DECODER 0 -#define CONFIG_SAMI_DECODER 0 -#define CONFIG_SRT_DECODER 0 -#define CONFIG_STL_DECODER 0 -#define CONFIG_SUBRIP_DECODER 0 -#define CONFIG_SUBVIEWER_DECODER 0 -#define CONFIG_SUBVIEWER1_DECODER 0 -#define CONFIG_TEXT_DECODER 0 -#define CONFIG_VPLAYER_DECODER 0 -#define CONFIG_WEBVTT_DECODER 0 -#define CONFIG_XSUB_DECODER 0 -#define CONFIG_AAC_AT_DECODER 0 -#define CONFIG_AC3_AT_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -#define CONFIG_ALAC_AT_DECODER 0 -#define CONFIG_AMR_NB_AT_DECODER 0 -#define CONFIG_EAC3_AT_DECODER 0 -#define CONFIG_GSM_MS_AT_DECODER 0 -#define CONFIG_ILBC_AT_DECODER 0 -#define CONFIG_MP1_AT_DECODER 0 -#define CONFIG_MP2_AT_DECODER 0 -#define CONFIG_MP3_AT_DECODER 0 -#define CONFIG_PCM_ALAW_AT_DECODER 0 -#define CONFIG_PCM_MULAW_AT_DECODER 0 -#define CONFIG_QDMC_AT_DECODER 0 -#define CONFIG_QDM2_AT_DECODER 0 -#define CONFIG_LIBCELT_DECODER 0 -#define CONFIG_LIBFDK_AAC_DECODER 0 -#define CONFIG_LIBGSM_DECODER 0 -#define CONFIG_LIBGSM_MS_DECODER 0 -#define CONFIG_LIBILBC_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -#define CONFIG_LIBOPENJPEG_DECODER 0 -#define CONFIG_LIBOPUS_DECODER 0 -#define CONFIG_LIBSCHROEDINGER_DECODER 0 -#define CONFIG_LIBSPEEX_DECODER 0 -#define CONFIG_LIBVORBIS_DECODER 0 -#define CONFIG_LIBVPX_VP8_DECODER 0 -#define CONFIG_LIBVPX_VP9_DECODER 0 -#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -#define CONFIG_BINTEXT_DECODER 0 -#define CONFIG_XBIN_DECODER 0 -#define CONFIG_IDF_DECODER 0 -#define CONFIG_LIBOPENH264_DECODER 0 -#define CONFIG_H263_CUVID_DECODER 0 -#define CONFIG_H264_CUVID_DECODER 0 -#define CONFIG_HEVC_CUVID_DECODER 0 -#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -#define CONFIG_MJPEG_CUVID_DECODER 0 -#define CONFIG_MPEG1_CUVID_DECODER 0 -#define CONFIG_MPEG2_CUVID_DECODER 0 -#define CONFIG_MPEG4_CUVID_DECODER 0 -#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -#define CONFIG_VC1_CUVID_DECODER 0 -#define CONFIG_VP8_CUVID_DECODER 0 -#define CONFIG_VP8_MEDIACODEC_DECODER 0 -#define CONFIG_VP9_CUVID_DECODER 0 -#define CONFIG_VP9_MEDIACODEC_DECODER 0 -#define CONFIG_AA_DEMUXER 0 -#define CONFIG_AAC_DEMUXER 0 -#define CONFIG_AC3_DEMUXER 0 -#define CONFIG_ACM_DEMUXER 0 -#define CONFIG_ACT_DEMUXER 0 -#define CONFIG_ADF_DEMUXER 0 -#define CONFIG_ADP_DEMUXER 0 -#define CONFIG_ADS_DEMUXER 0 -#define CONFIG_ADX_DEMUXER 0 -#define CONFIG_AEA_DEMUXER 0 -#define CONFIG_AFC_DEMUXER 0 -#define CONFIG_AIFF_DEMUXER 0 -#define CONFIG_AIX_DEMUXER 0 -#define CONFIG_AMR_DEMUXER 0 -#define CONFIG_ANM_DEMUXER 0 -#define CONFIG_APC_DEMUXER 0 -#define CONFIG_APE_DEMUXER 0 -#define CONFIG_APNG_DEMUXER 0 -#define CONFIG_AQTITLE_DEMUXER 0 -#define CONFIG_ASF_DEMUXER 0 -#define CONFIG_ASF_O_DEMUXER 0 -#define CONFIG_ASS_DEMUXER 0 -#define CONFIG_AST_DEMUXER 0 -#define CONFIG_AU_DEMUXER 0 -#define CONFIG_AVI_DEMUXER 0 -#define CONFIG_AVISYNTH_DEMUXER 0 -#define CONFIG_AVR_DEMUXER 0 -#define CONFIG_AVS_DEMUXER 0 -#define CONFIG_BETHSOFTVID_DEMUXER 0 -#define CONFIG_BFI_DEMUXER 0 -#define CONFIG_BINTEXT_DEMUXER 0 -#define CONFIG_BINK_DEMUXER 0 -#define CONFIG_BIT_DEMUXER 0 -#define CONFIG_BMV_DEMUXER 0 -#define CONFIG_BFSTM_DEMUXER 0 -#define CONFIG_BRSTM_DEMUXER 0 -#define CONFIG_BOA_DEMUXER 0 -#define CONFIG_C93_DEMUXER 0 -#define CONFIG_CAF_DEMUXER 0 -#define CONFIG_CAVSVIDEO_DEMUXER 0 -#define CONFIG_CDG_DEMUXER 0 -#define CONFIG_CDXL_DEMUXER 0 -#define CONFIG_CINE_DEMUXER 0 -#define CONFIG_CONCAT_DEMUXER 0 -#define CONFIG_DATA_DEMUXER 0 -#define CONFIG_DAUD_DEMUXER 0 -#define CONFIG_DCSTR_DEMUXER 0 -#define CONFIG_DFA_DEMUXER 0 -#define CONFIG_DIRAC_DEMUXER 0 -#define CONFIG_DNXHD_DEMUXER 0 -#define CONFIG_DSF_DEMUXER 0 -#define CONFIG_DSICIN_DEMUXER 0 -#define CONFIG_DSS_DEMUXER 0 -#define CONFIG_DTS_DEMUXER 0 -#define CONFIG_DTSHD_DEMUXER 0 -#define CONFIG_DV_DEMUXER 0 -#define CONFIG_DVBSUB_DEMUXER 0 -#define CONFIG_DVBTXT_DEMUXER 0 -#define CONFIG_DXA_DEMUXER 0 -#define CONFIG_EA_DEMUXER 0 -#define CONFIG_EA_CDATA_DEMUXER 0 -#define CONFIG_EAC3_DEMUXER 0 -#define CONFIG_EPAF_DEMUXER 0 -#define CONFIG_FFM_DEMUXER 0 -#define CONFIG_FFMETADATA_DEMUXER 0 -#define CONFIG_FILMSTRIP_DEMUXER 0 -#define CONFIG_FLAC_DEMUXER 0 -#define CONFIG_FLIC_DEMUXER 0 -#define CONFIG_FLV_DEMUXER 0 -#define CONFIG_LIVE_FLV_DEMUXER 0 -#define CONFIG_FOURXM_DEMUXER 0 -#define CONFIG_FRM_DEMUXER 0 -#define CONFIG_FSB_DEMUXER 0 -#define CONFIG_G722_DEMUXER 0 -#define CONFIG_G723_1_DEMUXER 0 -#define CONFIG_G729_DEMUXER 0 -#define CONFIG_GENH_DEMUXER 0 -#define CONFIG_GIF_DEMUXER 0 -#define CONFIG_GSM_DEMUXER 0 -#define CONFIG_GXF_DEMUXER 0 -#define CONFIG_H261_DEMUXER 0 -#define CONFIG_H263_DEMUXER 0 -#define CONFIG_H264_DEMUXER 0 -#define CONFIG_HEVC_DEMUXER 0 -#define CONFIG_HLS_DEMUXER 0 -#define CONFIG_HNM_DEMUXER 0 -#define CONFIG_ICO_DEMUXER 0 -#define CONFIG_IDCIN_DEMUXER 0 -#define CONFIG_IDF_DEMUXER 0 -#define CONFIG_IFF_DEMUXER 0 -#define CONFIG_ILBC_DEMUXER 0 -#define CONFIG_IMAGE2_DEMUXER 0 -#define CONFIG_IMAGE2PIPE_DEMUXER 0 -#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -#define CONFIG_INGENIENT_DEMUXER 0 -#define CONFIG_IPMOVIE_DEMUXER 0 -#define CONFIG_IRCAM_DEMUXER 0 -#define CONFIG_ISS_DEMUXER 0 -#define CONFIG_IV8_DEMUXER 0 -#define CONFIG_IVF_DEMUXER 0 -#define CONFIG_IVR_DEMUXER 0 -#define CONFIG_JACOSUB_DEMUXER 0 -#define CONFIG_JV_DEMUXER 0 -#define CONFIG_LMLM4_DEMUXER 0 -#define CONFIG_LOAS_DEMUXER 0 -#define CONFIG_LRC_DEMUXER 0 -#define CONFIG_LVF_DEMUXER 0 -#define CONFIG_LXF_DEMUXER 0 -#define CONFIG_M4V_DEMUXER 0 -#define CONFIG_MATROSKA_DEMUXER 0 -#define CONFIG_MGSTS_DEMUXER 0 -#define CONFIG_MICRODVD_DEMUXER 0 -#define CONFIG_MJPEG_DEMUXER 0 -#define CONFIG_MLP_DEMUXER 0 -#define CONFIG_MLV_DEMUXER 0 -#define CONFIG_MM_DEMUXER 0 -#define CONFIG_MMF_DEMUXER 0 -#define CONFIG_MOV_DEMUXER 0 -#define CONFIG_MP3_DEMUXER 0 -#define CONFIG_MPC_DEMUXER 0 -#define CONFIG_MPC8_DEMUXER 0 -#define CONFIG_MPEGPS_DEMUXER 0 -#define CONFIG_MPEGTS_DEMUXER 0 -#define CONFIG_MPEGTSRAW_DEMUXER 0 -#define CONFIG_MPEGVIDEO_DEMUXER 0 -#define CONFIG_MPJPEG_DEMUXER 0 -#define CONFIG_MPL2_DEMUXER 0 -#define CONFIG_MPSUB_DEMUXER 0 -#define CONFIG_MSF_DEMUXER 0 -#define CONFIG_MSNWC_TCP_DEMUXER 0 -#define CONFIG_MTAF_DEMUXER 0 -#define CONFIG_MTV_DEMUXER 0 -#define CONFIG_MUSX_DEMUXER 0 -#define CONFIG_MV_DEMUXER 0 -#define CONFIG_MVI_DEMUXER 0 -#define CONFIG_MXF_DEMUXER 0 -#define CONFIG_MXG_DEMUXER 0 -#define CONFIG_NC_DEMUXER 0 -#define CONFIG_NISTSPHERE_DEMUXER 0 -#define CONFIG_NSV_DEMUXER 0 -#define CONFIG_NUT_DEMUXER 0 -#define CONFIG_NUV_DEMUXER 0 -#define CONFIG_OGG_DEMUXER 0 -#define CONFIG_OMA_DEMUXER 0 -#define CONFIG_PAF_DEMUXER 0 -#define CONFIG_PCM_ALAW_DEMUXER 0 -#define CONFIG_PCM_MULAW_DEMUXER 0 -#define CONFIG_PCM_F64BE_DEMUXER 0 -#define CONFIG_PCM_F64LE_DEMUXER 0 -#define CONFIG_PCM_F32BE_DEMUXER 0 -#define CONFIG_PCM_F32LE_DEMUXER 0 -#define CONFIG_PCM_S32BE_DEMUXER 0 -#define CONFIG_PCM_S32LE_DEMUXER 0 -#define CONFIG_PCM_S24BE_DEMUXER 0 -#define CONFIG_PCM_S24LE_DEMUXER 0 -#define CONFIG_PCM_S16BE_DEMUXER 0 -#define CONFIG_PCM_S16LE_DEMUXER 0 -#define CONFIG_PCM_S8_DEMUXER 0 -#define CONFIG_PCM_U32BE_DEMUXER 0 -#define CONFIG_PCM_U32LE_DEMUXER 0 -#define CONFIG_PCM_U24BE_DEMUXER 0 -#define CONFIG_PCM_U24LE_DEMUXER 0 -#define CONFIG_PCM_U16BE_DEMUXER 0 -#define CONFIG_PCM_U16LE_DEMUXER 0 -#define CONFIG_PCM_U8_DEMUXER 0 -#define CONFIG_PJS_DEMUXER 0 -#define CONFIG_PMP_DEMUXER 0 -#define CONFIG_PVA_DEMUXER 0 -#define CONFIG_PVF_DEMUXER 0 -#define CONFIG_QCP_DEMUXER 0 -#define CONFIG_R3D_DEMUXER 0 -#define CONFIG_RAWVIDEO_DEMUXER 0 -#define CONFIG_REALTEXT_DEMUXER 0 -#define CONFIG_REDSPARK_DEMUXER 0 -#define CONFIG_RL2_DEMUXER 0 -#define CONFIG_RM_DEMUXER 0 -#define CONFIG_ROQ_DEMUXER 0 -#define CONFIG_RPL_DEMUXER 0 -#define CONFIG_RSD_DEMUXER 0 -#define CONFIG_RSO_DEMUXER 0 -#define CONFIG_RTP_DEMUXER 0 -#define CONFIG_RTSP_DEMUXER 0 -#define CONFIG_SAMI_DEMUXER 0 -#define CONFIG_SAP_DEMUXER 0 -#define CONFIG_SBG_DEMUXER 0 -#define CONFIG_SDP_DEMUXER 0 -#define CONFIG_SDR2_DEMUXER 0 -#define CONFIG_SEGAFILM_DEMUXER 0 -#define CONFIG_SHORTEN_DEMUXER 0 -#define CONFIG_SIFF_DEMUXER 0 -#define CONFIG_SLN_DEMUXER 0 -#define CONFIG_SMACKER_DEMUXER 0 -#define CONFIG_SMJPEG_DEMUXER 0 -#define CONFIG_SMUSH_DEMUXER 0 -#define CONFIG_SOL_DEMUXER 0 -#define CONFIG_SOX_DEMUXER 0 -#define CONFIG_SPDIF_DEMUXER 0 -#define CONFIG_SRT_DEMUXER 0 -#define CONFIG_STR_DEMUXER 0 -#define CONFIG_STL_DEMUXER 0 -#define CONFIG_SUBVIEWER1_DEMUXER 0 -#define CONFIG_SUBVIEWER_DEMUXER 0 -#define CONFIG_SUP_DEMUXER 0 -#define CONFIG_SVAG_DEMUXER 0 -#define CONFIG_SWF_DEMUXER 0 -#define CONFIG_TAK_DEMUXER 0 -#define CONFIG_TEDCAPTIONS_DEMUXER 0 -#define CONFIG_THP_DEMUXER 0 -#define CONFIG_THREEDOSTR_DEMUXER 0 -#define CONFIG_TIERTEXSEQ_DEMUXER 0 -#define CONFIG_TMV_DEMUXER 0 -#define CONFIG_TRUEHD_DEMUXER 0 -#define CONFIG_TTA_DEMUXER 0 -#define CONFIG_TXD_DEMUXER 0 -#define CONFIG_TTY_DEMUXER 0 -#define CONFIG_V210_DEMUXER 0 -#define CONFIG_V210X_DEMUXER 0 -#define CONFIG_VAG_DEMUXER 0 -#define CONFIG_VC1_DEMUXER 0 -#define CONFIG_VC1T_DEMUXER 0 -#define CONFIG_VIVO_DEMUXER 0 -#define CONFIG_VMD_DEMUXER 0 -#define CONFIG_VOBSUB_DEMUXER 0 -#define CONFIG_VOC_DEMUXER 0 -#define CONFIG_VPK_DEMUXER 0 -#define CONFIG_VPLAYER_DEMUXER 0 -#define CONFIG_VQF_DEMUXER 0 -#define CONFIG_W64_DEMUXER 0 -#define CONFIG_WAV_DEMUXER 0 -#define CONFIG_WC3_DEMUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -#define CONFIG_WEBVTT_DEMUXER 0 -#define CONFIG_WSAUD_DEMUXER 0 -#define CONFIG_WSD_DEMUXER 0 -#define CONFIG_WSVQA_DEMUXER 0 -#define CONFIG_WTV_DEMUXER 0 -#define CONFIG_WVE_DEMUXER 0 -#define CONFIG_WV_DEMUXER 0 -#define CONFIG_XA_DEMUXER 0 -#define CONFIG_XBIN_DEMUXER 0 -#define CONFIG_XMV_DEMUXER 0 -#define CONFIG_XVAG_DEMUXER 0 -#define CONFIG_XWMA_DEMUXER 0 -#define CONFIG_YOP_DEMUXER 0 -#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -#define CONFIG_LIBGME_DEMUXER 0 -#define CONFIG_LIBMODPLUG_DEMUXER 0 -#define CONFIG_LIBNUT_DEMUXER 0 -#define CONFIG_LIBOPENMPT_DEMUXER 0 -#define CONFIG_A64MULTI_ENCODER 0 -#define CONFIG_A64MULTI5_ENCODER 0 -#define CONFIG_ALIAS_PIX_ENCODER 0 -#define CONFIG_AMV_ENCODER 0 -#define CONFIG_APNG_ENCODER 0 -#define CONFIG_ASV1_ENCODER 0 -#define CONFIG_ASV2_ENCODER 0 -#define CONFIG_AVRP_ENCODER 0 -#define CONFIG_AVUI_ENCODER 0 -#define CONFIG_AYUV_ENCODER 0 -#define CONFIG_BMP_ENCODER 0 -#define CONFIG_CINEPAK_ENCODER 0 -#define CONFIG_CLJR_ENCODER 0 -#define CONFIG_COMFORTNOISE_ENCODER 0 -#define CONFIG_DNXHD_ENCODER 0 -#define CONFIG_DPX_ENCODER 0 -#define CONFIG_DVVIDEO_ENCODER 0 -#define CONFIG_FFV1_ENCODER 0 -#define CONFIG_FFVHUFF_ENCODER 0 -#define CONFIG_FLASHSV_ENCODER 0 -#define CONFIG_FLASHSV2_ENCODER 0 -#define CONFIG_FLV_ENCODER 0 -#define CONFIG_GIF_ENCODER 0 -#define CONFIG_H261_ENCODER 0 -#define CONFIG_H263_ENCODER 0 -#define CONFIG_H263P_ENCODER 0 -#define CONFIG_HAP_ENCODER 0 -#define CONFIG_HUFFYUV_ENCODER 0 -#define CONFIG_JPEG2000_ENCODER 0 -#define CONFIG_JPEGLS_ENCODER 0 -#define CONFIG_LJPEG_ENCODER 0 -#define CONFIG_MJPEG_ENCODER 0 -#define CONFIG_MPEG1VIDEO_ENCODER 0 -#define CONFIG_MPEG2VIDEO_ENCODER 0 -#define CONFIG_MPEG4_ENCODER 0 -#define CONFIG_MSMPEG4V2_ENCODER 0 -#define CONFIG_MSMPEG4V3_ENCODER 0 -#define CONFIG_MSVIDEO1_ENCODER 0 -#define CONFIG_PAM_ENCODER 0 -#define CONFIG_PBM_ENCODER 0 -#define CONFIG_PCX_ENCODER 0 -#define CONFIG_PGM_ENCODER 0 -#define CONFIG_PGMYUV_ENCODER 0 -#define CONFIG_PNG_ENCODER 0 -#define CONFIG_PPM_ENCODER 0 -#define CONFIG_PRORES_ENCODER 0 -#define CONFIG_PRORES_AW_ENCODER 0 -#define CONFIG_PRORES_KS_ENCODER 0 -#define CONFIG_QTRLE_ENCODER 0 -#define CONFIG_R10K_ENCODER 0 -#define CONFIG_R210_ENCODER 0 -#define CONFIG_RAWVIDEO_ENCODER 0 -#define CONFIG_ROQ_ENCODER 0 -#define CONFIG_RV10_ENCODER 0 -#define CONFIG_RV20_ENCODER 0 -#define CONFIG_S302M_ENCODER 0 -#define CONFIG_SGI_ENCODER 0 -#define CONFIG_SNOW_ENCODER 0 -#define CONFIG_SUNRAST_ENCODER 0 -#define CONFIG_SVQ1_ENCODER 0 -#define CONFIG_TARGA_ENCODER 0 -#define CONFIG_TIFF_ENCODER 0 -#define CONFIG_UTVIDEO_ENCODER 0 -#define CONFIG_V210_ENCODER 0 -#define CONFIG_V308_ENCODER 0 -#define CONFIG_V408_ENCODER 0 -#define CONFIG_V410_ENCODER 0 -#define CONFIG_VC2_ENCODER 0 -#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -#define CONFIG_WMV1_ENCODER 0 -#define CONFIG_WMV2_ENCODER 0 -#define CONFIG_XBM_ENCODER 0 -#define CONFIG_XFACE_ENCODER 0 -#define CONFIG_XWD_ENCODER 0 -#define CONFIG_Y41P_ENCODER 0 -#define CONFIG_YUV4_ENCODER 0 -#define CONFIG_ZLIB_ENCODER 0 -#define CONFIG_ZMBV_ENCODER 0 -#define CONFIG_AAC_ENCODER 0 -#define CONFIG_AC3_ENCODER 0 -#define CONFIG_AC3_FIXED_ENCODER 0 -#define CONFIG_ALAC_ENCODER 0 -#define CONFIG_DCA_ENCODER 0 -#define CONFIG_EAC3_ENCODER 0 -#define CONFIG_FLAC_ENCODER 0 -#define CONFIG_G723_1_ENCODER 0 -#define CONFIG_MLP_ENCODER 0 -#define CONFIG_MP2_ENCODER 0 -#define CONFIG_MP2FIXED_ENCODER 0 -#define CONFIG_NELLYMOSER_ENCODER 0 -#define CONFIG_RA_144_ENCODER 0 -#define CONFIG_SONIC_ENCODER 0 -#define CONFIG_SONIC_LS_ENCODER 0 -#define CONFIG_TRUEHD_ENCODER 0 -#define CONFIG_TTA_ENCODER 0 -#define CONFIG_VORBIS_ENCODER 0 -#define CONFIG_WAVPACK_ENCODER 0 -#define CONFIG_WMAV1_ENCODER 0 -#define CONFIG_WMAV2_ENCODER 0 -#define CONFIG_PCM_ALAW_ENCODER 0 -#define CONFIG_PCM_F32BE_ENCODER 0 -#define CONFIG_PCM_F32LE_ENCODER 0 -#define CONFIG_PCM_F64BE_ENCODER 0 -#define CONFIG_PCM_F64LE_ENCODER 0 -#define CONFIG_PCM_MULAW_ENCODER 0 -#define CONFIG_PCM_S8_ENCODER 0 -#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16BE_ENCODER 0 -#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16LE_ENCODER 0 -#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S24BE_ENCODER 0 -#define CONFIG_PCM_S24DAUD_ENCODER 0 -#define CONFIG_PCM_S24LE_ENCODER 0 -#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S32BE_ENCODER 0 -#define CONFIG_PCM_S32LE_ENCODER 0 -#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S64BE_ENCODER 0 -#define CONFIG_PCM_S64LE_ENCODER 0 -#define CONFIG_PCM_U8_ENCODER 0 -#define CONFIG_PCM_U16BE_ENCODER 0 -#define CONFIG_PCM_U16LE_ENCODER 0 -#define CONFIG_PCM_U24BE_ENCODER 0 -#define CONFIG_PCM_U24LE_ENCODER 0 -#define CONFIG_PCM_U32BE_ENCODER 0 -#define CONFIG_PCM_U32LE_ENCODER 0 -#define CONFIG_ROQ_DPCM_ENCODER 0 -#define CONFIG_ADPCM_ADX_ENCODER 0 -#define CONFIG_ADPCM_G722_ENCODER 0 -#define CONFIG_ADPCM_G726_ENCODER 0 -#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -#define CONFIG_ADPCM_MS_ENCODER 0 -#define CONFIG_ADPCM_SWF_ENCODER 0 -#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -#define CONFIG_SSA_ENCODER 0 -#define CONFIG_ASS_ENCODER 0 -#define CONFIG_DVBSUB_ENCODER 0 -#define CONFIG_DVDSUB_ENCODER 0 -#define CONFIG_MOVTEXT_ENCODER 0 -#define CONFIG_SRT_ENCODER 0 -#define CONFIG_SUBRIP_ENCODER 0 -#define CONFIG_TEXT_ENCODER 0 -#define CONFIG_WEBVTT_ENCODER 0 -#define CONFIG_XSUB_ENCODER 0 -#define CONFIG_AAC_AT_ENCODER 0 -#define CONFIG_ALAC_AT_ENCODER 0 -#define CONFIG_ILBC_AT_ENCODER 0 -#define CONFIG_PCM_ALAW_AT_ENCODER 0 -#define CONFIG_PCM_MULAW_AT_ENCODER 0 -#define CONFIG_LIBFDK_AAC_ENCODER 0 -#define CONFIG_LIBGSM_ENCODER 0 -#define CONFIG_LIBGSM_MS_ENCODER 0 -#define CONFIG_LIBILBC_ENCODER 0 -#define CONFIG_LIBMP3LAME_ENCODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -#define CONFIG_LIBOPENJPEG_ENCODER 0 -#define CONFIG_LIBOPUS_ENCODER 0 -#define CONFIG_LIBSCHROEDINGER_ENCODER 0 -#define CONFIG_LIBSHINE_ENCODER 0 -#define CONFIG_LIBSPEEX_ENCODER 0 -#define CONFIG_LIBTHEORA_ENCODER 0 -#define CONFIG_LIBTWOLAME_ENCODER 0 -#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -#define CONFIG_LIBVORBIS_ENCODER 0 -#define CONFIG_LIBVPX_VP8_ENCODER 0 -#define CONFIG_LIBVPX_VP9_ENCODER 0 -#define CONFIG_LIBWAVPACK_ENCODER 0 -#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -#define CONFIG_LIBWEBP_ENCODER 0 -#define CONFIG_LIBX262_ENCODER 0 -#define CONFIG_LIBX264_ENCODER 0 -#define CONFIG_LIBX264RGB_ENCODER 0 -#define CONFIG_LIBX265_ENCODER 0 -#define CONFIG_LIBXAVS_ENCODER 0 -#define CONFIG_LIBXVID_ENCODER 0 -#define CONFIG_LIBOPENH264_ENCODER 0 -#define CONFIG_H264_NVENC_ENCODER 0 -#define CONFIG_H264_OMX_ENCODER 0 -#define CONFIG_H264_QSV_ENCODER 0 -#define CONFIG_H264_VAAPI_ENCODER 0 -#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -#define CONFIG_NVENC_ENCODER 0 -#define CONFIG_NVENC_H264_ENCODER 0 -#define CONFIG_NVENC_HEVC_ENCODER 0 -#define CONFIG_HEVC_NVENC_ENCODER 0 -#define CONFIG_HEVC_QSV_ENCODER 0 -#define CONFIG_HEVC_VAAPI_ENCODER 0 -#define CONFIG_LIBKVAZAAR_ENCODER 0 -#define CONFIG_MJPEG_VAAPI_ENCODER 0 -#define CONFIG_MPEG2_QSV_ENCODER 0 -#define CONFIG_ABENCH_FILTER 0 -#define CONFIG_ACOMPRESSOR_FILTER 0 -#define CONFIG_ACROSSFADE_FILTER 0 -#define CONFIG_ACRUSHER_FILTER 0 -#define CONFIG_ADELAY_FILTER 0 -#define CONFIG_AECHO_FILTER 0 -#define CONFIG_AEMPHASIS_FILTER 0 -#define CONFIG_AEVAL_FILTER 0 -#define CONFIG_AFADE_FILTER 0 -#define CONFIG_AFFTFILT_FILTER 0 -#define CONFIG_AFORMAT_FILTER 0 -#define CONFIG_AGATE_FILTER 0 -#define CONFIG_AINTERLEAVE_FILTER 0 -#define CONFIG_ALIMITER_FILTER 0 -#define CONFIG_ALLPASS_FILTER 0 -#define CONFIG_ALOOP_FILTER 0 -#define CONFIG_AMERGE_FILTER 0 -#define CONFIG_AMETADATA_FILTER 0 -#define CONFIG_AMIX_FILTER 0 -#define CONFIG_ANEQUALIZER_FILTER 0 -#define CONFIG_ANULL_FILTER 0 -#define CONFIG_APAD_FILTER 0 -#define CONFIG_APERMS_FILTER 0 -#define CONFIG_APHASER_FILTER 0 -#define CONFIG_APULSATOR_FILTER 0 -#define CONFIG_AREALTIME_FILTER 0 -#define CONFIG_ARESAMPLE_FILTER 0 -#define CONFIG_AREVERSE_FILTER 0 -#define CONFIG_ASELECT_FILTER 0 -#define CONFIG_ASENDCMD_FILTER 0 -#define CONFIG_ASETNSAMPLES_FILTER 0 -#define CONFIG_ASETPTS_FILTER 0 -#define CONFIG_ASETRATE_FILTER 0 -#define CONFIG_ASETTB_FILTER 0 -#define CONFIG_ASHOWINFO_FILTER 0 -#define CONFIG_ASIDEDATA_FILTER 0 -#define CONFIG_ASPLIT_FILTER 0 -#define CONFIG_ASTATS_FILTER 0 -#define CONFIG_ASTREAMSELECT_FILTER 0 -#define CONFIG_ASYNCTS_FILTER 0 -#define CONFIG_ATEMPO_FILTER 0 -#define CONFIG_ATRIM_FILTER 0 -#define CONFIG_AZMQ_FILTER 0 -#define CONFIG_BANDPASS_FILTER 0 -#define CONFIG_BANDREJECT_FILTER 0 -#define CONFIG_BASS_FILTER 0 -#define CONFIG_BIQUAD_FILTER 0 -#define CONFIG_BS2B_FILTER 0 -#define CONFIG_CHANNELMAP_FILTER 0 -#define CONFIG_CHANNELSPLIT_FILTER 0 -#define CONFIG_CHORUS_FILTER 0 -#define CONFIG_COMPAND_FILTER 0 -#define CONFIG_COMPENSATIONDELAY_FILTER 0 -#define CONFIG_CRYSTALIZER_FILTER 0 -#define CONFIG_DCSHIFT_FILTER 0 -#define CONFIG_DYNAUDNORM_FILTER 0 -#define CONFIG_EARWAX_FILTER 0 -#define CONFIG_EBUR128_FILTER 0 -#define CONFIG_EQUALIZER_FILTER 0 -#define CONFIG_EXTRASTEREO_FILTER 0 -#define CONFIG_FIREQUALIZER_FILTER 0 -#define CONFIG_FLANGER_FILTER 0 -#define CONFIG_HDCD_FILTER 0 -#define CONFIG_HIGHPASS_FILTER 0 -#define CONFIG_JOIN_FILTER 0 -#define CONFIG_LADSPA_FILTER 0 -#define CONFIG_LOUDNORM_FILTER 0 -#define CONFIG_LOWPASS_FILTER 0 -#define CONFIG_PAN_FILTER 0 -#define CONFIG_REPLAYGAIN_FILTER 0 -#define CONFIG_RESAMPLE_FILTER 0 -#define CONFIG_RUBBERBAND_FILTER 0 -#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -#define CONFIG_SIDECHAINGATE_FILTER 0 -#define CONFIG_SILENCEDETECT_FILTER 0 -#define CONFIG_SILENCEREMOVE_FILTER 0 -#define CONFIG_SOFALIZER_FILTER 0 -#define CONFIG_STEREOTOOLS_FILTER 0 -#define CONFIG_STEREOWIDEN_FILTER 0 -#define CONFIG_TREBLE_FILTER 0 -#define CONFIG_TREMOLO_FILTER 0 -#define CONFIG_VIBRATO_FILTER 0 -#define CONFIG_VOLUME_FILTER 0 -#define CONFIG_VOLUMEDETECT_FILTER 0 -#define CONFIG_AEVALSRC_FILTER 0 -#define CONFIG_ANOISESRC_FILTER 0 -#define CONFIG_ANULLSRC_FILTER 0 -#define CONFIG_FLITE_FILTER 0 -#define CONFIG_SINE_FILTER 0 -#define CONFIG_ANULLSINK_FILTER 0 -#define CONFIG_ALPHAEXTRACT_FILTER 0 -#define CONFIG_ALPHAMERGE_FILTER 0 -#define CONFIG_ASS_FILTER 0 -#define CONFIG_ATADENOISE_FILTER 0 -#define CONFIG_AVGBLUR_FILTER 0 -#define CONFIG_BBOX_FILTER 0 -#define CONFIG_BENCH_FILTER 0 -#define CONFIG_BITPLANENOISE_FILTER 0 -#define CONFIG_BLACKDETECT_FILTER 0 -#define CONFIG_BLACKFRAME_FILTER 0 -#define CONFIG_BLEND_FILTER 0 -#define CONFIG_BOXBLUR_FILTER 0 -#define CONFIG_BWDIF_FILTER 0 -#define CONFIG_CHROMAKEY_FILTER 0 -#define CONFIG_CIESCOPE_FILTER 0 -#define CONFIG_CODECVIEW_FILTER 0 -#define CONFIG_COLORBALANCE_FILTER 0 -#define CONFIG_COLORCHANNELMIXER_FILTER 0 -#define CONFIG_COLORKEY_FILTER 0 -#define CONFIG_COLORLEVELS_FILTER 0 -#define CONFIG_COLORMATRIX_FILTER 0 -#define CONFIG_COLORSPACE_FILTER 0 -#define CONFIG_CONVOLUTION_FILTER 0 -#define CONFIG_COPY_FILTER 0 -#define CONFIG_COREIMAGE_FILTER 0 -#define CONFIG_COVER_RECT_FILTER 0 -#define CONFIG_CROP_FILTER 0 -#define CONFIG_CROPDETECT_FILTER 0 -#define CONFIG_CURVES_FILTER 0 -#define CONFIG_DATASCOPE_FILTER 0 -#define CONFIG_DCTDNOIZ_FILTER 0 -#define CONFIG_DEBAND_FILTER 0 -#define CONFIG_DECIMATE_FILTER 0 -#define CONFIG_DEFLATE_FILTER 0 -#define CONFIG_DEJUDDER_FILTER 0 -#define CONFIG_DELOGO_FILTER 0 -#define CONFIG_DESHAKE_FILTER 0 -#define CONFIG_DETELECINE_FILTER 0 -#define CONFIG_DILATION_FILTER 0 -#define CONFIG_DISPLACE_FILTER 0 -#define CONFIG_DRAWBOX_FILTER 0 -#define CONFIG_DRAWGRAPH_FILTER 0 -#define CONFIG_DRAWGRID_FILTER 0 -#define CONFIG_DRAWTEXT_FILTER 0 -#define CONFIG_EDGEDETECT_FILTER 0 -#define CONFIG_ELBG_FILTER 0 -#define CONFIG_EQ_FILTER 0 -#define CONFIG_EROSION_FILTER 0 -#define CONFIG_EXTRACTPLANES_FILTER 0 -#define CONFIG_FADE_FILTER 0 -#define CONFIG_FFTFILT_FILTER 0 -#define CONFIG_FIELD_FILTER 0 -#define CONFIG_FIELDHINT_FILTER 0 -#define CONFIG_FIELDMATCH_FILTER 0 -#define CONFIG_FIELDORDER_FILTER 0 -#define CONFIG_FIND_RECT_FILTER 0 -#define CONFIG_FORMAT_FILTER 0 -#define CONFIG_FPS_FILTER 0 -#define CONFIG_FRAMEPACK_FILTER 0 -#define CONFIG_FRAMERATE_FILTER 0 -#define CONFIG_FRAMESTEP_FILTER 0 -#define CONFIG_FREI0R_FILTER 0 -#define CONFIG_FSPP_FILTER 0 -#define CONFIG_GBLUR_FILTER 0 -#define CONFIG_GEQ_FILTER 0 -#define CONFIG_GRADFUN_FILTER 0 -#define CONFIG_HALDCLUT_FILTER 0 -#define CONFIG_HFLIP_FILTER 0 -#define CONFIG_HISTEQ_FILTER 0 -#define CONFIG_HISTOGRAM_FILTER 0 -#define CONFIG_HQDN3D_FILTER 0 -#define CONFIG_HQX_FILTER 0 -#define CONFIG_HSTACK_FILTER 0 -#define CONFIG_HUE_FILTER 0 -#define CONFIG_HWDOWNLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -#define CONFIG_HYSTERESIS_FILTER 0 -#define CONFIG_IDET_FILTER 0 -#define CONFIG_IL_FILTER 0 -#define CONFIG_INFLATE_FILTER 0 -#define CONFIG_INTERLACE_FILTER 0 -#define CONFIG_INTERLEAVE_FILTER 0 -#define CONFIG_KERNDEINT_FILTER 0 -#define CONFIG_LENSCORRECTION_FILTER 0 -#define CONFIG_LOOP_FILTER 0 -#define CONFIG_LUT_FILTER 0 -#define CONFIG_LUT2_FILTER 0 -#define CONFIG_LUT3D_FILTER 0 -#define CONFIG_LUTRGB_FILTER 0 -#define CONFIG_LUTYUV_FILTER 0 -#define CONFIG_MASKEDCLAMP_FILTER 0 -#define CONFIG_MASKEDMERGE_FILTER 0 -#define CONFIG_MCDEINT_FILTER 0 -#define CONFIG_MERGEPLANES_FILTER 0 -#define CONFIG_MESTIMATE_FILTER 0 -#define CONFIG_METADATA_FILTER 0 -#define CONFIG_MINTERPOLATE_FILTER 0 -#define CONFIG_MPDECIMATE_FILTER 0 -#define CONFIG_NEGATE_FILTER 0 -#define CONFIG_NLMEANS_FILTER 0 -#define CONFIG_NNEDI_FILTER 0 -#define CONFIG_NOFORMAT_FILTER 0 -#define CONFIG_NOISE_FILTER 0 -#define CONFIG_NULL_FILTER 0 -#define CONFIG_OCR_FILTER 0 -#define CONFIG_OCV_FILTER 0 -#define CONFIG_OVERLAY_FILTER 0 -#define CONFIG_OWDENOISE_FILTER 0 -#define CONFIG_PAD_FILTER 0 -#define CONFIG_PALETTEGEN_FILTER 0 -#define CONFIG_PALETTEUSE_FILTER 0 -#define CONFIG_PERMS_FILTER 0 -#define CONFIG_PERSPECTIVE_FILTER 0 -#define CONFIG_PHASE_FILTER 0 -#define CONFIG_PIXDESCTEST_FILTER 0 -#define CONFIG_PP_FILTER 0 -#define CONFIG_PP7_FILTER 0 -#define CONFIG_PREWITT_FILTER 0 -#define CONFIG_PSNR_FILTER 0 -#define CONFIG_PULLUP_FILTER 0 -#define CONFIG_QP_FILTER 0 -#define CONFIG_RANDOM_FILTER 0 -#define CONFIG_READVITC_FILTER 0 -#define CONFIG_REALTIME_FILTER 0 -#define CONFIG_REMAP_FILTER 0 -#define CONFIG_REMOVEGRAIN_FILTER 0 -#define CONFIG_REMOVELOGO_FILTER 0 -#define CONFIG_REPEATFIELDS_FILTER 0 -#define CONFIG_REVERSE_FILTER 0 -#define CONFIG_ROTATE_FILTER 0 -#define CONFIG_SAB_FILTER 0 -#define CONFIG_SCALE_FILTER 0 -#define CONFIG_SCALE_NPP_FILTER 0 -#define CONFIG_SCALE_VAAPI_FILTER 0 -#define CONFIG_SCALE2REF_FILTER 0 -#define CONFIG_SELECT_FILTER 0 -#define CONFIG_SELECTIVECOLOR_FILTER 0 -#define CONFIG_SENDCMD_FILTER 0 -#define CONFIG_SEPARATEFIELDS_FILTER 0 -#define CONFIG_SETDAR_FILTER 0 -#define CONFIG_SETFIELD_FILTER 0 -#define CONFIG_SETPTS_FILTER 0 -#define CONFIG_SETSAR_FILTER 0 -#define CONFIG_SETTB_FILTER 0 -#define CONFIG_SHOWINFO_FILTER 0 -#define CONFIG_SHOWPALETTE_FILTER 0 -#define CONFIG_SHUFFLEFRAMES_FILTER 0 -#define CONFIG_SHUFFLEPLANES_FILTER 0 -#define CONFIG_SIDEDATA_FILTER 0 -#define CONFIG_SIGNALSTATS_FILTER 0 -#define CONFIG_SMARTBLUR_FILTER 0 -#define CONFIG_SOBEL_FILTER 0 -#define CONFIG_SPLIT_FILTER 0 -#define CONFIG_SPP_FILTER 0 -#define CONFIG_SSIM_FILTER 0 -#define CONFIG_STEREO3D_FILTER 0 -#define CONFIG_STREAMSELECT_FILTER 0 -#define CONFIG_SUBTITLES_FILTER 0 -#define CONFIG_SUPER2XSAI_FILTER 0 -#define CONFIG_SWAPRECT_FILTER 0 -#define CONFIG_SWAPUV_FILTER 0 -#define CONFIG_TBLEND_FILTER 0 -#define CONFIG_TELECINE_FILTER 0 -#define CONFIG_THUMBNAIL_FILTER 0 -#define CONFIG_TILE_FILTER 0 -#define CONFIG_TINTERLACE_FILTER 0 -#define CONFIG_TRANSPOSE_FILTER 0 -#define CONFIG_TRIM_FILTER 0 -#define CONFIG_UNSHARP_FILTER 0 -#define CONFIG_USPP_FILTER 0 -#define CONFIG_VAGUEDENOISER_FILTER 0 -#define CONFIG_VECTORSCOPE_FILTER 0 -#define CONFIG_VFLIP_FILTER 0 -#define CONFIG_VIDSTABDETECT_FILTER 0 -#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -#define CONFIG_VIGNETTE_FILTER 0 -#define CONFIG_VSTACK_FILTER 0 -#define CONFIG_W3FDIF_FILTER 0 -#define CONFIG_WAVEFORM_FILTER 0 -#define CONFIG_WEAVE_FILTER 0 -#define CONFIG_XBR_FILTER 0 -#define CONFIG_YADIF_FILTER 0 -#define CONFIG_ZMQ_FILTER 0 -#define CONFIG_ZOOMPAN_FILTER 0 -#define CONFIG_ZSCALE_FILTER 0 -#define CONFIG_ALLRGB_FILTER 0 -#define CONFIG_ALLYUV_FILTER 0 -#define CONFIG_CELLAUTO_FILTER 0 -#define CONFIG_COLOR_FILTER 0 -#define CONFIG_COREIMAGESRC_FILTER 0 -#define CONFIG_FREI0R_SRC_FILTER 0 -#define CONFIG_HALDCLUTSRC_FILTER 0 -#define CONFIG_LIFE_FILTER 0 -#define CONFIG_MANDELBROT_FILTER 0 -#define CONFIG_MPTESTSRC_FILTER 0 -#define CONFIG_NULLSRC_FILTER 0 -#define CONFIG_RGBTESTSRC_FILTER 0 -#define CONFIG_SMPTEBARS_FILTER 0 -#define CONFIG_SMPTEHDBARS_FILTER 0 -#define CONFIG_TESTSRC_FILTER 0 -#define CONFIG_TESTSRC2_FILTER 0 -#define CONFIG_YUVTESTSRC_FILTER 0 -#define CONFIG_NULLSINK_FILTER 0 -#define CONFIG_ADRAWGRAPH_FILTER 0 -#define CONFIG_AHISTOGRAM_FILTER 0 -#define CONFIG_APHASEMETER_FILTER 0 -#define CONFIG_AVECTORSCOPE_FILTER 0 -#define CONFIG_CONCAT_FILTER 0 -#define CONFIG_SHOWCQT_FILTER 0 -#define CONFIG_SHOWFREQS_FILTER 0 -#define CONFIG_SHOWSPECTRUM_FILTER 0 -#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -#define CONFIG_SHOWVOLUME_FILTER 0 -#define CONFIG_SHOWWAVES_FILTER 0 -#define CONFIG_SHOWWAVESPIC_FILTER 0 -#define CONFIG_SPECTRUMSYNTH_FILTER 0 -#define CONFIG_AMOVIE_FILTER 0 -#define CONFIG_MOVIE_FILTER 0 -#define CONFIG_H263_CUVID_HWACCEL 0 -#define CONFIG_H263_VAAPI_HWACCEL 0 -#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_H264_CUVID_HWACCEL 0 -#define CONFIG_H264_D3D11VA_HWACCEL 0 -#define CONFIG_H264_DXVA2_HWACCEL 0 -#define CONFIG_H264_MEDIACODEC_HWACCEL 0 -#define CONFIG_H264_MMAL_HWACCEL 0 -#define CONFIG_H264_QSV_HWACCEL 0 -#define CONFIG_H264_VAAPI_HWACCEL 0 -#define CONFIG_H264_VDA_HWACCEL 0 -#define CONFIG_H264_VDA_OLD_HWACCEL 0 -#define CONFIG_H264_VDPAU_HWACCEL 0 -#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_HEVC_CUVID_HWACCEL 0 -#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -#define CONFIG_HEVC_DXVA2_HWACCEL 0 -#define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -#define CONFIG_HEVC_QSV_HWACCEL 0 -#define CONFIG_HEVC_VAAPI_HWACCEL 0 -#define CONFIG_HEVC_VDPAU_HWACCEL 0 -#define CONFIG_MJPEG_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_XVMC_HWACCEL 0 -#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG2_CUVID_HWACCEL 0 -#define CONFIG_MPEG2_XVMC_HWACCEL 0 -#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -#define CONFIG_MPEG2_MMAL_HWACCEL 0 -#define CONFIG_MPEG2_QSV_HWACCEL 0 -#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG4_CUVID_HWACCEL 0 -#define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -#define CONFIG_MPEG4_MMAL_HWACCEL 0 -#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_VC1_CUVID_HWACCEL 0 -#define CONFIG_VC1_D3D11VA_HWACCEL 0 -#define CONFIG_VC1_DXVA2_HWACCEL 0 -#define CONFIG_VC1_VAAPI_HWACCEL 0 -#define CONFIG_VC1_VDPAU_HWACCEL 0 -#define CONFIG_VC1_MMAL_HWACCEL 0 -#define CONFIG_VC1_QSV_HWACCEL 0 -#define CONFIG_VP8_CUVID_HWACCEL 0 -#define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_CUVID_HWACCEL 0 -#define CONFIG_VP9_D3D11VA_HWACCEL 0 -#define CONFIG_VP9_DXVA2_HWACCEL 0 -#define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -#define CONFIG_WMV3_DXVA2_HWACCEL 0 -#define CONFIG_WMV3_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_VDPAU_HWACCEL 0 -#define CONFIG_ALSA_INDEV 0 -#define CONFIG_AVFOUNDATION_INDEV 0 -#define CONFIG_BKTR_INDEV 0 -#define CONFIG_DECKLINK_INDEV 0 -#define CONFIG_DSHOW_INDEV 0 -#define CONFIG_DV1394_INDEV 0 -#define CONFIG_FBDEV_INDEV 0 -#define CONFIG_GDIGRAB_INDEV 0 -#define CONFIG_IEC61883_INDEV 0 -#define CONFIG_JACK_INDEV 0 -#define CONFIG_LAVFI_INDEV 0 -#define CONFIG_OPENAL_INDEV 0 -#define CONFIG_OSS_INDEV 0 -#define CONFIG_PULSE_INDEV 0 -#define CONFIG_QTKIT_INDEV 0 -#define CONFIG_SNDIO_INDEV 0 -#define CONFIG_V4L2_INDEV 0 -#define CONFIG_VFWCAP_INDEV 0 -#define CONFIG_X11GRAB_INDEV 0 -#define CONFIG_X11GRAB_XCB_INDEV 0 -#define CONFIG_LIBCDIO_INDEV 0 -#define CONFIG_LIBDC1394_INDEV 0 -#define CONFIG_A64_MUXER 0 -#define CONFIG_AC3_MUXER 0 -#define CONFIG_ADTS_MUXER 0 -#define CONFIG_ADX_MUXER 0 -#define CONFIG_AIFF_MUXER 0 -#define CONFIG_AMR_MUXER 0 -#define CONFIG_APNG_MUXER 0 -#define CONFIG_ASF_MUXER 0 -#define CONFIG_ASS_MUXER 0 -#define CONFIG_AST_MUXER 0 -#define CONFIG_ASF_STREAM_MUXER 0 -#define CONFIG_AU_MUXER 0 -#define CONFIG_AVI_MUXER 0 -#define CONFIG_AVM2_MUXER 0 -#define CONFIG_BIT_MUXER 0 -#define CONFIG_CAF_MUXER 0 -#define CONFIG_CAVSVIDEO_MUXER 0 -#define CONFIG_CRC_MUXER 0 -#define CONFIG_DASH_MUXER 0 -#define CONFIG_DATA_MUXER 0 -#define CONFIG_DAUD_MUXER 0 -#define CONFIG_DIRAC_MUXER 0 -#define CONFIG_DNXHD_MUXER 0 -#define CONFIG_DTS_MUXER 0 -#define CONFIG_DV_MUXER 0 -#define CONFIG_EAC3_MUXER 0 -#define CONFIG_F4V_MUXER 0 -#define CONFIG_FFM_MUXER 0 -#define CONFIG_FFMETADATA_MUXER 0 -#define CONFIG_FIFO_MUXER 0 -#define CONFIG_FILMSTRIP_MUXER 0 -#define CONFIG_FLAC_MUXER 0 -#define CONFIG_FLV_MUXER 0 -#define CONFIG_FRAMECRC_MUXER 0 -#define CONFIG_FRAMEHASH_MUXER 0 -#define CONFIG_FRAMEMD5_MUXER 0 -#define CONFIG_G722_MUXER 0 -#define CONFIG_G723_1_MUXER 0 -#define CONFIG_GIF_MUXER 0 -#define CONFIG_GSM_MUXER 0 -#define CONFIG_GXF_MUXER 0 -#define CONFIG_H261_MUXER 0 -#define CONFIG_H263_MUXER 0 -#define CONFIG_H264_MUXER 0 -#define CONFIG_HASH_MUXER 0 -#define CONFIG_HDS_MUXER 0 -#define CONFIG_HEVC_MUXER 0 -#define CONFIG_HLS_MUXER 0 -#define CONFIG_ICO_MUXER 0 -#define CONFIG_ILBC_MUXER 0 -#define CONFIG_IMAGE2_MUXER 0 -#define CONFIG_IMAGE2PIPE_MUXER 0 -#define CONFIG_IPOD_MUXER 0 -#define CONFIG_IRCAM_MUXER 0 -#define CONFIG_ISMV_MUXER 0 -#define CONFIG_IVF_MUXER 0 -#define CONFIG_JACOSUB_MUXER 0 -#define CONFIG_LATM_MUXER 0 -#define CONFIG_LRC_MUXER 0 -#define CONFIG_M4V_MUXER 0 -#define CONFIG_MD5_MUXER 0 -#define CONFIG_MATROSKA_MUXER 0 -#define CONFIG_MATROSKA_AUDIO_MUXER 0 -#define CONFIG_MICRODVD_MUXER 0 -#define CONFIG_MJPEG_MUXER 0 -#define CONFIG_MLP_MUXER 0 -#define CONFIG_MMF_MUXER 0 -#define CONFIG_MOV_MUXER 0 -#define CONFIG_MP2_MUXER 0 -#define CONFIG_MP3_MUXER 0 -#define CONFIG_MP4_MUXER 0 -#define CONFIG_MPEG1SYSTEM_MUXER 0 -#define CONFIG_MPEG1VCD_MUXER 0 -#define CONFIG_MPEG1VIDEO_MUXER 0 -#define CONFIG_MPEG2DVD_MUXER 0 -#define CONFIG_MPEG2SVCD_MUXER 0 -#define CONFIG_MPEG2VIDEO_MUXER 0 -#define CONFIG_MPEG2VOB_MUXER 0 -#define CONFIG_MPEGTS_MUXER 0 -#define CONFIG_MPJPEG_MUXER 0 -#define CONFIG_MXF_MUXER 0 -#define CONFIG_MXF_D10_MUXER 0 -#define CONFIG_MXF_OPATOM_MUXER 0 -#define CONFIG_NULL_MUXER 0 -#define CONFIG_NUT_MUXER 0 -#define CONFIG_OGA_MUXER 0 -#define CONFIG_OGG_MUXER 0 -#define CONFIG_OGV_MUXER 0 -#define CONFIG_OMA_MUXER 0 -#define CONFIG_OPUS_MUXER 0 -#define CONFIG_PCM_ALAW_MUXER 0 -#define CONFIG_PCM_MULAW_MUXER 0 -#define CONFIG_PCM_F64BE_MUXER 0 -#define CONFIG_PCM_F64LE_MUXER 0 -#define CONFIG_PCM_F32BE_MUXER 0 -#define CONFIG_PCM_F32LE_MUXER 0 -#define CONFIG_PCM_S32BE_MUXER 0 -#define CONFIG_PCM_S32LE_MUXER 0 -#define CONFIG_PCM_S24BE_MUXER 0 -#define CONFIG_PCM_S24LE_MUXER 0 -#define CONFIG_PCM_S16BE_MUXER 0 -#define CONFIG_PCM_S16LE_MUXER 0 -#define CONFIG_PCM_S8_MUXER 0 -#define CONFIG_PCM_U32BE_MUXER 0 -#define CONFIG_PCM_U32LE_MUXER 0 -#define CONFIG_PCM_U24BE_MUXER 0 -#define CONFIG_PCM_U24LE_MUXER 0 -#define CONFIG_PCM_U16BE_MUXER 0 -#define CONFIG_PCM_U16LE_MUXER 0 -#define CONFIG_PCM_U8_MUXER 0 -#define CONFIG_PSP_MUXER 0 -#define CONFIG_RAWVIDEO_MUXER 0 -#define CONFIG_RM_MUXER 0 -#define CONFIG_ROQ_MUXER 0 -#define CONFIG_RSO_MUXER 0 -#define CONFIG_RTP_MUXER 0 -#define CONFIG_RTP_MPEGTS_MUXER 0 -#define CONFIG_RTSP_MUXER 0 -#define CONFIG_SAP_MUXER 0 -#define CONFIG_SEGMENT_MUXER 0 -#define CONFIG_STREAM_SEGMENT_MUXER 0 -#define CONFIG_SINGLEJPEG_MUXER 0 -#define CONFIG_SMJPEG_MUXER 0 -#define CONFIG_SMOOTHSTREAMING_MUXER 0 -#define CONFIG_SOX_MUXER 0 -#define CONFIG_SPX_MUXER 0 -#define CONFIG_SPDIF_MUXER 0 -#define CONFIG_SRT_MUXER 0 -#define CONFIG_SWF_MUXER 0 -#define CONFIG_TEE_MUXER 0 -#define CONFIG_TG2_MUXER 0 -#define CONFIG_TGP_MUXER 0 -#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -#define CONFIG_TRUEHD_MUXER 0 -#define CONFIG_TTA_MUXER 0 -#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -#define CONFIG_VC1_MUXER 0 -#define CONFIG_VC1T_MUXER 0 -#define CONFIG_VOC_MUXER 0 -#define CONFIG_W64_MUXER 0 -#define CONFIG_WAV_MUXER 0 -#define CONFIG_WEBM_MUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -#define CONFIG_WEBM_CHUNK_MUXER 0 -#define CONFIG_WEBP_MUXER 0 -#define CONFIG_WEBVTT_MUXER 0 -#define CONFIG_WTV_MUXER 0 -#define CONFIG_WV_MUXER 0 -#define CONFIG_YUV4MPEGPIPE_MUXER 0 -#define CONFIG_CHROMAPRINT_MUXER 0 -#define CONFIG_LIBNUT_MUXER 0 -#define CONFIG_ALSA_OUTDEV 0 -#define CONFIG_CACA_OUTDEV 0 -#define CONFIG_DECKLINK_OUTDEV 0 -#define CONFIG_FBDEV_OUTDEV 0 -#define CONFIG_OPENGL_OUTDEV 0 -#define CONFIG_OSS_OUTDEV 0 -#define CONFIG_PULSE_OUTDEV 0 -#define CONFIG_SDL2_OUTDEV 0 -#define CONFIG_SNDIO_OUTDEV 0 -#define CONFIG_V4L2_OUTDEV 0 -#define CONFIG_XV_OUTDEV 0 -#define CONFIG_AAC_PARSER 0 -#define CONFIG_AAC_LATM_PARSER 0 -#define CONFIG_AC3_PARSER 0 -#define CONFIG_ADX_PARSER 0 -#define CONFIG_BMP_PARSER 0 -#define CONFIG_CAVSVIDEO_PARSER 0 -#define CONFIG_COOK_PARSER 0 -#define CONFIG_DCA_PARSER 0 -#define CONFIG_DIRAC_PARSER 0 -#define CONFIG_DNXHD_PARSER 0 -#define CONFIG_DPX_PARSER 0 -#define CONFIG_DVAUDIO_PARSER 0 -#define CONFIG_DVBSUB_PARSER 0 -#define CONFIG_DVDSUB_PARSER 0 -#define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 1 -#define CONFIG_G729_PARSER 0 -#define CONFIG_GSM_PARSER 0 -#define CONFIG_H261_PARSER 0 -#define CONFIG_H263_PARSER 0 -#define CONFIG_H264_PARSER 0 -#define CONFIG_HEVC_PARSER 0 -#define CONFIG_MJPEG_PARSER 0 -#define CONFIG_MLP_PARSER 0 -#define CONFIG_MPEG4VIDEO_PARSER 0 -#define CONFIG_MPEGAUDIO_PARSER 0 -#define CONFIG_MPEGVIDEO_PARSER 0 -#define CONFIG_OPUS_PARSER 0 -#define CONFIG_PNG_PARSER 0 -#define CONFIG_PNM_PARSER 0 -#define CONFIG_RV30_PARSER 0 -#define CONFIG_RV40_PARSER 0 -#define CONFIG_TAK_PARSER 0 -#define CONFIG_VC1_PARSER 0 -#define CONFIG_VORBIS_PARSER 0 -#define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 1 #define CONFIG_VP9_PARSER 1 -#define CONFIG_ASYNC_PROTOCOL 0 -#define CONFIG_BLURAY_PROTOCOL 0 -#define CONFIG_CACHE_PROTOCOL 0 -#define CONFIG_CONCAT_PROTOCOL 0 -#define CONFIG_CRYPTO_PROTOCOL 0 -#define CONFIG_DATA_PROTOCOL 0 -#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -#define CONFIG_FILE_PROTOCOL 0 -#define CONFIG_FTP_PROTOCOL 0 -#define CONFIG_GOPHER_PROTOCOL 0 -#define CONFIG_HLS_PROTOCOL 0 -#define CONFIG_HTTP_PROTOCOL 0 -#define CONFIG_HTTPPROXY_PROTOCOL 0 -#define CONFIG_HTTPS_PROTOCOL 0 -#define CONFIG_ICECAST_PROTOCOL 0 -#define CONFIG_MMSH_PROTOCOL 0 -#define CONFIG_MMST_PROTOCOL 0 -#define CONFIG_MD5_PROTOCOL 0 -#define CONFIG_PIPE_PROTOCOL 0 -#define CONFIG_RTMP_PROTOCOL 0 -#define CONFIG_RTMPE_PROTOCOL 0 -#define CONFIG_RTMPS_PROTOCOL 0 -#define CONFIG_RTMPT_PROTOCOL 0 -#define CONFIG_RTMPTE_PROTOCOL 0 -#define CONFIG_RTMPTS_PROTOCOL 0 -#define CONFIG_RTP_PROTOCOL 0 -#define CONFIG_SCTP_PROTOCOL 0 -#define CONFIG_SRTP_PROTOCOL 0 -#define CONFIG_SUBFILE_PROTOCOL 0 -#define CONFIG_TEE_PROTOCOL 0 -#define CONFIG_TCP_PROTOCOL 0 -#define CONFIG_TLS_GNUTLS_PROTOCOL 0 -#define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -#define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -#define CONFIG_TLS_OPENSSL_PROTOCOL 0 -#define CONFIG_UDP_PROTOCOL 0 -#define CONFIG_UDPLITE_PROTOCOL 0 -#define CONFIG_UNIX_PROTOCOL 0 -#define CONFIG_LIBRTMP_PROTOCOL 0 -#define CONFIG_LIBRTMPE_PROTOCOL 0 -#define CONFIG_LIBRTMPS_PROTOCOL 0 -#define CONFIG_LIBRTMPT_PROTOCOL 0 -#define CONFIG_LIBRTMPTE_PROTOCOL 0 -#define CONFIG_LIBSSH_PROTOCOL 0 -#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ diff --git a/media/ffvpx/config_unix32.h b/media/ffvpx/config_unix32.h index 9318d1851db9..69808f6d7471 100644 --- a/media/ffvpx/config_unix32.h +++ b/media/ffvpx/config_unix32.h @@ -384,15 +384,7 @@ #define HAVE_XLIB 0 #define CONFIG_BSFS 0 #define CONFIG_DECODERS 1 -#define CONFIG_ENCODERS 0 -#define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 -#define CONFIG_INDEVS 0 -#define CONFIG_OUTDEVS 0 -#define CONFIG_FILTERS 0 -#define CONFIG_DEMUXERS 0 -#define CONFIG_MUXERS 0 -#define CONFIG_PROTOCOLS 0 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 1 @@ -513,7 +505,6 @@ #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 -#define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 @@ -578,7 +569,6 @@ #define CONFIG_FDCTDSP 0 #define CONFIG_FLACDSP 1 #define CONFIG_FMTCONVERT 0 -#define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 @@ -654,1570 +644,10 @@ #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 -#define CONFIG_AASC_DECODER 0 -#define CONFIG_AIC_DECODER 0 -#define CONFIG_ALIAS_PIX_DECODER 0 -#define CONFIG_AMV_DECODER 0 -#define CONFIG_ANM_DECODER 0 -#define CONFIG_ANSI_DECODER 0 -#define CONFIG_APNG_DECODER 0 -#define CONFIG_ASV1_DECODER 0 -#define CONFIG_ASV2_DECODER 0 -#define CONFIG_AURA_DECODER 0 -#define CONFIG_AURA2_DECODER 0 -#define CONFIG_AVRP_DECODER 0 -#define CONFIG_AVRN_DECODER 0 -#define CONFIG_AVS_DECODER 0 -#define CONFIG_AVUI_DECODER 0 -#define CONFIG_AYUV_DECODER 0 -#define CONFIG_BETHSOFTVID_DECODER 0 -#define CONFIG_BFI_DECODER 0 -#define CONFIG_BINK_DECODER 0 -#define CONFIG_BMP_DECODER 0 -#define CONFIG_BMV_VIDEO_DECODER 0 -#define CONFIG_BRENDER_PIX_DECODER 0 -#define CONFIG_C93_DECODER 0 -#define CONFIG_CAVS_DECODER 0 -#define CONFIG_CDGRAPHICS_DECODER 0 -#define CONFIG_CDXL_DECODER 0 -#define CONFIG_CFHD_DECODER 0 -#define CONFIG_CINEPAK_DECODER 0 -#define CONFIG_CLJR_DECODER 0 -#define CONFIG_CLLC_DECODER 0 -#define CONFIG_COMFORTNOISE_DECODER 0 -#define CONFIG_CPIA_DECODER 0 -#define CONFIG_CSCD_DECODER 0 -#define CONFIG_CYUV_DECODER 0 -#define CONFIG_DDS_DECODER 0 -#define CONFIG_DFA_DECODER 0 -#define CONFIG_DIRAC_DECODER 0 -#define CONFIG_DNXHD_DECODER 0 -#define CONFIG_DPX_DECODER 0 -#define CONFIG_DSICINVIDEO_DECODER 0 -#define CONFIG_DVAUDIO_DECODER 0 -#define CONFIG_DVVIDEO_DECODER 0 -#define CONFIG_DXA_DECODER 0 -#define CONFIG_DXTORY_DECODER 0 -#define CONFIG_DXV_DECODER 0 -#define CONFIG_EACMV_DECODER 0 -#define CONFIG_EAMAD_DECODER 0 -#define CONFIG_EATGQ_DECODER 0 -#define CONFIG_EATGV_DECODER 0 -#define CONFIG_EATQI_DECODER 0 -#define CONFIG_EIGHTBPS_DECODER 0 -#define CONFIG_EIGHTSVX_EXP_DECODER 0 -#define CONFIG_EIGHTSVX_FIB_DECODER 0 -#define CONFIG_ESCAPE124_DECODER 0 -#define CONFIG_ESCAPE130_DECODER 0 -#define CONFIG_EXR_DECODER 0 -#define CONFIG_FFV1_DECODER 0 -#define CONFIG_FFVHUFF_DECODER 0 -#define CONFIG_FIC_DECODER 0 -#define CONFIG_FLASHSV_DECODER 0 -#define CONFIG_FLASHSV2_DECODER 0 -#define CONFIG_FLIC_DECODER 0 -#define CONFIG_FLV_DECODER 0 -#define CONFIG_FOURXM_DECODER 0 -#define CONFIG_FRAPS_DECODER 0 -#define CONFIG_FRWU_DECODER 0 -#define CONFIG_G2M_DECODER 0 -#define CONFIG_GIF_DECODER 0 -#define CONFIG_H261_DECODER 0 -#define CONFIG_H263_DECODER 0 -#define CONFIG_H263I_DECODER 0 -#define CONFIG_H263P_DECODER 0 -#define CONFIG_H264_DECODER 0 -#define CONFIG_H264_CRYSTALHD_DECODER 0 -#define CONFIG_H264_MEDIACODEC_DECODER 0 -#define CONFIG_H264_MMAL_DECODER 0 -#define CONFIG_H264_QSV_DECODER 0 -#define CONFIG_H264_VDA_DECODER 0 -#define CONFIG_H264_VDPAU_DECODER 0 -#define CONFIG_HAP_DECODER 0 -#define CONFIG_HEVC_DECODER 0 -#define CONFIG_HEVC_QSV_DECODER 0 -#define CONFIG_HNM4_VIDEO_DECODER 0 -#define CONFIG_HQ_HQA_DECODER 0 -#define CONFIG_HQX_DECODER 0 -#define CONFIG_HUFFYUV_DECODER 0 -#define CONFIG_IDCIN_DECODER 0 -#define CONFIG_IFF_ILBM_DECODER 0 -#define CONFIG_INDEO2_DECODER 0 -#define CONFIG_INDEO3_DECODER 0 -#define CONFIG_INDEO4_DECODER 0 -#define CONFIG_INDEO5_DECODER 0 -#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -#define CONFIG_JPEG2000_DECODER 0 -#define CONFIG_JPEGLS_DECODER 0 -#define CONFIG_JV_DECODER 0 -#define CONFIG_KGV1_DECODER 0 -#define CONFIG_KMVC_DECODER 0 -#define CONFIG_LAGARITH_DECODER 0 -#define CONFIG_LOCO_DECODER 0 -#define CONFIG_M101_DECODER 0 -#define CONFIG_MAGICYUV_DECODER 0 -#define CONFIG_MDEC_DECODER 0 -#define CONFIG_MIMIC_DECODER 0 -#define CONFIG_MJPEG_DECODER 0 -#define CONFIG_MJPEGB_DECODER 0 -#define CONFIG_MMVIDEO_DECODER 0 -#define CONFIG_MOTIONPIXELS_DECODER 0 -#define CONFIG_MPEG_XVMC_DECODER 0 -#define CONFIG_MPEG1VIDEO_DECODER 0 -#define CONFIG_MPEG2VIDEO_DECODER 0 -#define CONFIG_MPEG4_DECODER 0 -#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG4_MMAL_DECODER 0 -#define CONFIG_MPEG4_VDPAU_DECODER 0 -#define CONFIG_MPEGVIDEO_DECODER 0 -#define CONFIG_MPEG_VDPAU_DECODER 0 -#define CONFIG_MPEG1_VDPAU_DECODER 0 -#define CONFIG_MPEG2_MMAL_DECODER 0 -#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG2_QSV_DECODER 0 -#define CONFIG_MSA1_DECODER 0 -#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MSMPEG4V1_DECODER 0 -#define CONFIG_MSMPEG4V2_DECODER 0 -#define CONFIG_MSMPEG4V3_DECODER 0 -#define CONFIG_MSRLE_DECODER 0 -#define CONFIG_MSS1_DECODER 0 -#define CONFIG_MSS2_DECODER 0 -#define CONFIG_MSVIDEO1_DECODER 0 -#define CONFIG_MSZH_DECODER 0 -#define CONFIG_MTS2_DECODER 0 -#define CONFIG_MVC1_DECODER 0 -#define CONFIG_MVC2_DECODER 0 -#define CONFIG_MXPEG_DECODER 0 -#define CONFIG_NUV_DECODER 0 -#define CONFIG_PAF_VIDEO_DECODER 0 -#define CONFIG_PAM_DECODER 0 -#define CONFIG_PBM_DECODER 0 -#define CONFIG_PCX_DECODER 0 -#define CONFIG_PGM_DECODER 0 -#define CONFIG_PGMYUV_DECODER 0 -#define CONFIG_PICTOR_DECODER 0 -#define CONFIG_PNG_DECODER 0 -#define CONFIG_PPM_DECODER 0 -#define CONFIG_PRORES_DECODER 0 -#define CONFIG_PRORES_LGPL_DECODER 0 -#define CONFIG_PTX_DECODER 0 -#define CONFIG_QDRAW_DECODER 0 -#define CONFIG_QPEG_DECODER 0 -#define CONFIG_QTRLE_DECODER 0 -#define CONFIG_R10K_DECODER 0 -#define CONFIG_R210_DECODER 0 -#define CONFIG_RAWVIDEO_DECODER 0 -#define CONFIG_RL2_DECODER 0 -#define CONFIG_ROQ_DECODER 0 -#define CONFIG_RPZA_DECODER 0 -#define CONFIG_RSCC_DECODER 0 -#define CONFIG_RV10_DECODER 0 -#define CONFIG_RV20_DECODER 0 -#define CONFIG_RV30_DECODER 0 -#define CONFIG_RV40_DECODER 0 -#define CONFIG_S302M_DECODER 0 -#define CONFIG_SANM_DECODER 0 -#define CONFIG_SCREENPRESSO_DECODER 0 -#define CONFIG_SDX2_DPCM_DECODER 0 -#define CONFIG_SGI_DECODER 0 -#define CONFIG_SGIRLE_DECODER 0 -#define CONFIG_SHEERVIDEO_DECODER 0 -#define CONFIG_SMACKER_DECODER 0 -#define CONFIG_SMC_DECODER 0 -#define CONFIG_SMVJPEG_DECODER 0 -#define CONFIG_SNOW_DECODER 0 -#define CONFIG_SP5X_DECODER 0 -#define CONFIG_SUNRAST_DECODER 0 -#define CONFIG_SVQ1_DECODER 0 -#define CONFIG_SVQ3_DECODER 0 -#define CONFIG_TARGA_DECODER 0 -#define CONFIG_TARGA_Y216_DECODER 0 -#define CONFIG_TDSC_DECODER 0 -#define CONFIG_THEORA_DECODER 0 -#define CONFIG_THP_DECODER 0 -#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -#define CONFIG_TIFF_DECODER 0 -#define CONFIG_TMV_DECODER 0 -#define CONFIG_TRUEMOTION1_DECODER 0 -#define CONFIG_TRUEMOTION2_DECODER 0 -#define CONFIG_TRUEMOTION2RT_DECODER 0 -#define CONFIG_TSCC_DECODER 0 -#define CONFIG_TSCC2_DECODER 0 -#define CONFIG_TXD_DECODER 0 -#define CONFIG_ULTI_DECODER 0 -#define CONFIG_UTVIDEO_DECODER 0 -#define CONFIG_V210_DECODER 0 -#define CONFIG_V210X_DECODER 0 -#define CONFIG_V308_DECODER 0 -#define CONFIG_V408_DECODER 0 -#define CONFIG_V410_DECODER 0 -#define CONFIG_VB_DECODER 0 -#define CONFIG_VBLE_DECODER 0 -#define CONFIG_VC1_DECODER 0 -#define CONFIG_VC1_CRYSTALHD_DECODER 0 -#define CONFIG_VC1_VDPAU_DECODER 0 -#define CONFIG_VC1IMAGE_DECODER 0 -#define CONFIG_VC1_MMAL_DECODER 0 -#define CONFIG_VC1_QSV_DECODER 0 -#define CONFIG_VCR1_DECODER 0 -#define CONFIG_VMDVIDEO_DECODER 0 -#define CONFIG_VMNC_DECODER 0 -#define CONFIG_VP3_DECODER 0 -#define CONFIG_VP5_DECODER 0 -#define CONFIG_VP6_DECODER 0 -#define CONFIG_VP6A_DECODER 0 -#define CONFIG_VP6F_DECODER 0 -#define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 1 #define CONFIG_VP9_DECODER 1 -#define CONFIG_VQA_DECODER 0 -#define CONFIG_WEBP_DECODER 0 -#define CONFIG_WMV1_DECODER 0 -#define CONFIG_WMV2_DECODER 0 -#define CONFIG_WMV3_DECODER 0 -#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -#define CONFIG_WMV3_VDPAU_DECODER 0 -#define CONFIG_WMV3IMAGE_DECODER 0 -#define CONFIG_WNV1_DECODER 0 -#define CONFIG_XAN_WC3_DECODER 0 -#define CONFIG_XAN_WC4_DECODER 0 -#define CONFIG_XBM_DECODER 0 -#define CONFIG_XFACE_DECODER 0 -#define CONFIG_XL_DECODER 0 -#define CONFIG_XWD_DECODER 0 -#define CONFIG_Y41P_DECODER 0 -#define CONFIG_YLC_DECODER 0 -#define CONFIG_YOP_DECODER 0 -#define CONFIG_YUV4_DECODER 0 -#define CONFIG_ZERO12V_DECODER 0 -#define CONFIG_ZEROCODEC_DECODER 0 -#define CONFIG_ZLIB_DECODER 0 -#define CONFIG_ZMBV_DECODER 0 -#define CONFIG_AAC_DECODER 0 -#define CONFIG_AAC_FIXED_DECODER 0 -#define CONFIG_AAC_LATM_DECODER 0 -#define CONFIG_AC3_DECODER 0 -#define CONFIG_AC3_FIXED_DECODER 0 -#define CONFIG_ALAC_DECODER 0 -#define CONFIG_ALS_DECODER 0 -#define CONFIG_AMRNB_DECODER 0 -#define CONFIG_AMRWB_DECODER 0 -#define CONFIG_APE_DECODER 0 -#define CONFIG_ATRAC1_DECODER 0 -#define CONFIG_ATRAC3_DECODER 0 -#define CONFIG_ATRAC3P_DECODER 0 -#define CONFIG_BINKAUDIO_DCT_DECODER 0 -#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -#define CONFIG_BMV_AUDIO_DECODER 0 -#define CONFIG_COOK_DECODER 0 -#define CONFIG_DCA_DECODER 0 -#define CONFIG_DSD_LSBF_DECODER 0 -#define CONFIG_DSD_MSBF_DECODER 0 -#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -#define CONFIG_DSICINAUDIO_DECODER 0 -#define CONFIG_DSS_SP_DECODER 0 -#define CONFIG_DST_DECODER 0 -#define CONFIG_EAC3_DECODER 0 -#define CONFIG_EVRC_DECODER 0 -#define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 1 -#define CONFIG_G723_1_DECODER 0 -#define CONFIG_G729_DECODER 0 -#define CONFIG_GSM_DECODER 0 -#define CONFIG_GSM_MS_DECODER 0 -#define CONFIG_IAC_DECODER 0 -#define CONFIG_IMC_DECODER 0 -#define CONFIG_INTERPLAY_ACM_DECODER 0 -#define CONFIG_MACE3_DECODER 0 -#define CONFIG_MACE6_DECODER 0 -#define CONFIG_METASOUND_DECODER 0 -#define CONFIG_MLP_DECODER 0 -#define CONFIG_MP1_DECODER 0 -#define CONFIG_MP1FLOAT_DECODER 0 -#define CONFIG_MP2_DECODER 0 -#define CONFIG_MP2FLOAT_DECODER 0 -#define CONFIG_MP3_DECODER 0 -#define CONFIG_MP3FLOAT_DECODER 0 -#define CONFIG_MP3ADU_DECODER 0 -#define CONFIG_MP3ADUFLOAT_DECODER 0 -#define CONFIG_MP3ON4_DECODER 0 -#define CONFIG_MP3ON4FLOAT_DECODER 0 -#define CONFIG_MPC7_DECODER 0 -#define CONFIG_MPC8_DECODER 0 -#define CONFIG_NELLYMOSER_DECODER 0 -#define CONFIG_ON2AVC_DECODER 0 -#define CONFIG_OPUS_DECODER 0 -#define CONFIG_PAF_AUDIO_DECODER 0 -#define CONFIG_QCELP_DECODER 0 -#define CONFIG_QDM2_DECODER 0 -#define CONFIG_RA_144_DECODER 0 -#define CONFIG_RA_288_DECODER 0 -#define CONFIG_RALF_DECODER 0 -#define CONFIG_SHORTEN_DECODER 0 -#define CONFIG_SIPR_DECODER 0 -#define CONFIG_SMACKAUD_DECODER 0 -#define CONFIG_SONIC_DECODER 0 -#define CONFIG_TAK_DECODER 0 -#define CONFIG_TRUEHD_DECODER 0 -#define CONFIG_TRUESPEECH_DECODER 0 -#define CONFIG_TTA_DECODER 0 -#define CONFIG_TWINVQ_DECODER 0 -#define CONFIG_VMDAUDIO_DECODER 0 -#define CONFIG_VORBIS_DECODER 0 -#define CONFIG_WAVPACK_DECODER 0 -#define CONFIG_WMALOSSLESS_DECODER 0 -#define CONFIG_WMAPRO_DECODER 0 -#define CONFIG_WMAV1_DECODER 0 -#define CONFIG_WMAV2_DECODER 0 -#define CONFIG_WMAVOICE_DECODER 0 -#define CONFIG_WS_SND1_DECODER 0 -#define CONFIG_XMA1_DECODER 0 -#define CONFIG_XMA2_DECODER 0 -#define CONFIG_PCM_ALAW_DECODER 0 -#define CONFIG_PCM_BLURAY_DECODER 0 -#define CONFIG_PCM_DVD_DECODER 0 -#define CONFIG_PCM_F32BE_DECODER 0 -#define CONFIG_PCM_F32LE_DECODER 0 -#define CONFIG_PCM_F64BE_DECODER 0 -#define CONFIG_PCM_F64LE_DECODER 0 -#define CONFIG_PCM_LXF_DECODER 0 -#define CONFIG_PCM_MULAW_DECODER 0 -#define CONFIG_PCM_S8_DECODER 0 -#define CONFIG_PCM_S8_PLANAR_DECODER 0 -#define CONFIG_PCM_S16BE_DECODER 0 -#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -#define CONFIG_PCM_S16LE_DECODER 0 -#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S24BE_DECODER 0 -#define CONFIG_PCM_S24DAUD_DECODER 0 -#define CONFIG_PCM_S24LE_DECODER 0 -#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S32BE_DECODER 0 -#define CONFIG_PCM_S32LE_DECODER 0 -#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S64BE_DECODER 0 -#define CONFIG_PCM_S64LE_DECODER 0 -#define CONFIG_PCM_U8_DECODER 0 -#define CONFIG_PCM_U16BE_DECODER 0 -#define CONFIG_PCM_U16LE_DECODER 0 -#define CONFIG_PCM_U24BE_DECODER 0 -#define CONFIG_PCM_U24LE_DECODER 0 -#define CONFIG_PCM_U32BE_DECODER 0 -#define CONFIG_PCM_U32LE_DECODER 0 -#define CONFIG_PCM_ZORK_DECODER 0 -#define CONFIG_INTERPLAY_DPCM_DECODER 0 -#define CONFIG_ROQ_DPCM_DECODER 0 -#define CONFIG_SOL_DPCM_DECODER 0 -#define CONFIG_XAN_DPCM_DECODER 0 -#define CONFIG_ADPCM_4XM_DECODER 0 -#define CONFIG_ADPCM_ADX_DECODER 0 -#define CONFIG_ADPCM_AFC_DECODER 0 -#define CONFIG_ADPCM_AICA_DECODER 0 -#define CONFIG_ADPCM_CT_DECODER 0 -#define CONFIG_ADPCM_DTK_DECODER 0 -#define CONFIG_ADPCM_EA_DECODER 0 -#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -#define CONFIG_ADPCM_EA_R1_DECODER 0 -#define CONFIG_ADPCM_EA_R2_DECODER 0 -#define CONFIG_ADPCM_EA_R3_DECODER 0 -#define CONFIG_ADPCM_EA_XAS_DECODER 0 -#define CONFIG_ADPCM_G722_DECODER 0 -#define CONFIG_ADPCM_G726_DECODER 0 -#define CONFIG_ADPCM_G726LE_DECODER 0 -#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -#define CONFIG_ADPCM_IMA_APC_DECODER 0 -#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_DECODER 0 -#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -#define CONFIG_ADPCM_IMA_WS_DECODER 0 -#define CONFIG_ADPCM_MS_DECODER 0 -#define CONFIG_ADPCM_MTAF_DECODER 0 -#define CONFIG_ADPCM_PSX_DECODER 0 -#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -#define CONFIG_ADPCM_SWF_DECODER 0 -#define CONFIG_ADPCM_THP_DECODER 0 -#define CONFIG_ADPCM_THP_LE_DECODER 0 -#define CONFIG_ADPCM_VIMA_DECODER 0 -#define CONFIG_ADPCM_XA_DECODER 0 -#define CONFIG_ADPCM_YAMAHA_DECODER 0 -#define CONFIG_SSA_DECODER 0 -#define CONFIG_ASS_DECODER 0 -#define CONFIG_CCAPTION_DECODER 0 -#define CONFIG_DVBSUB_DECODER 0 -#define CONFIG_DVDSUB_DECODER 0 -#define CONFIG_JACOSUB_DECODER 0 -#define CONFIG_MICRODVD_DECODER 0 -#define CONFIG_MOVTEXT_DECODER 0 -#define CONFIG_MPL2_DECODER 0 -#define CONFIG_PGSSUB_DECODER 0 -#define CONFIG_PJS_DECODER 0 -#define CONFIG_REALTEXT_DECODER 0 -#define CONFIG_SAMI_DECODER 0 -#define CONFIG_SRT_DECODER 0 -#define CONFIG_STL_DECODER 0 -#define CONFIG_SUBRIP_DECODER 0 -#define CONFIG_SUBVIEWER_DECODER 0 -#define CONFIG_SUBVIEWER1_DECODER 0 -#define CONFIG_TEXT_DECODER 0 -#define CONFIG_VPLAYER_DECODER 0 -#define CONFIG_WEBVTT_DECODER 0 -#define CONFIG_XSUB_DECODER 0 -#define CONFIG_AAC_AT_DECODER 0 -#define CONFIG_AC3_AT_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -#define CONFIG_ALAC_AT_DECODER 0 -#define CONFIG_AMR_NB_AT_DECODER 0 -#define CONFIG_EAC3_AT_DECODER 0 -#define CONFIG_GSM_MS_AT_DECODER 0 -#define CONFIG_ILBC_AT_DECODER 0 -#define CONFIG_MP1_AT_DECODER 0 -#define CONFIG_MP2_AT_DECODER 0 -#define CONFIG_MP3_AT_DECODER 0 -#define CONFIG_PCM_ALAW_AT_DECODER 0 -#define CONFIG_PCM_MULAW_AT_DECODER 0 -#define CONFIG_QDMC_AT_DECODER 0 -#define CONFIG_QDM2_AT_DECODER 0 -#define CONFIG_LIBCELT_DECODER 0 -#define CONFIG_LIBFDK_AAC_DECODER 0 -#define CONFIG_LIBGSM_DECODER 0 -#define CONFIG_LIBGSM_MS_DECODER 0 -#define CONFIG_LIBILBC_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -#define CONFIG_LIBOPENJPEG_DECODER 0 -#define CONFIG_LIBOPUS_DECODER 0 -#define CONFIG_LIBSCHROEDINGER_DECODER 0 -#define CONFIG_LIBSPEEX_DECODER 0 -#define CONFIG_LIBVORBIS_DECODER 0 -#define CONFIG_LIBVPX_VP8_DECODER 0 -#define CONFIG_LIBVPX_VP9_DECODER 0 -#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -#define CONFIG_BINTEXT_DECODER 0 -#define CONFIG_XBIN_DECODER 0 -#define CONFIG_IDF_DECODER 0 -#define CONFIG_LIBOPENH264_DECODER 0 -#define CONFIG_H263_CUVID_DECODER 0 -#define CONFIG_H264_CUVID_DECODER 0 -#define CONFIG_HEVC_CUVID_DECODER 0 -#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -#define CONFIG_MJPEG_CUVID_DECODER 0 -#define CONFIG_MPEG1_CUVID_DECODER 0 -#define CONFIG_MPEG2_CUVID_DECODER 0 -#define CONFIG_MPEG4_CUVID_DECODER 0 -#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -#define CONFIG_VC1_CUVID_DECODER 0 -#define CONFIG_VP8_CUVID_DECODER 0 -#define CONFIG_VP8_MEDIACODEC_DECODER 0 -#define CONFIG_VP9_CUVID_DECODER 0 -#define CONFIG_VP9_MEDIACODEC_DECODER 0 -#define CONFIG_AA_DEMUXER 0 -#define CONFIG_AAC_DEMUXER 0 -#define CONFIG_AC3_DEMUXER 0 -#define CONFIG_ACM_DEMUXER 0 -#define CONFIG_ACT_DEMUXER 0 -#define CONFIG_ADF_DEMUXER 0 -#define CONFIG_ADP_DEMUXER 0 -#define CONFIG_ADS_DEMUXER 0 -#define CONFIG_ADX_DEMUXER 0 -#define CONFIG_AEA_DEMUXER 0 -#define CONFIG_AFC_DEMUXER 0 -#define CONFIG_AIFF_DEMUXER 0 -#define CONFIG_AIX_DEMUXER 0 -#define CONFIG_AMR_DEMUXER 0 -#define CONFIG_ANM_DEMUXER 0 -#define CONFIG_APC_DEMUXER 0 -#define CONFIG_APE_DEMUXER 0 -#define CONFIG_APNG_DEMUXER 0 -#define CONFIG_AQTITLE_DEMUXER 0 -#define CONFIG_ASF_DEMUXER 0 -#define CONFIG_ASF_O_DEMUXER 0 -#define CONFIG_ASS_DEMUXER 0 -#define CONFIG_AST_DEMUXER 0 -#define CONFIG_AU_DEMUXER 0 -#define CONFIG_AVI_DEMUXER 0 -#define CONFIG_AVISYNTH_DEMUXER 0 -#define CONFIG_AVR_DEMUXER 0 -#define CONFIG_AVS_DEMUXER 0 -#define CONFIG_BETHSOFTVID_DEMUXER 0 -#define CONFIG_BFI_DEMUXER 0 -#define CONFIG_BINTEXT_DEMUXER 0 -#define CONFIG_BINK_DEMUXER 0 -#define CONFIG_BIT_DEMUXER 0 -#define CONFIG_BMV_DEMUXER 0 -#define CONFIG_BFSTM_DEMUXER 0 -#define CONFIG_BRSTM_DEMUXER 0 -#define CONFIG_BOA_DEMUXER 0 -#define CONFIG_C93_DEMUXER 0 -#define CONFIG_CAF_DEMUXER 0 -#define CONFIG_CAVSVIDEO_DEMUXER 0 -#define CONFIG_CDG_DEMUXER 0 -#define CONFIG_CDXL_DEMUXER 0 -#define CONFIG_CINE_DEMUXER 0 -#define CONFIG_CONCAT_DEMUXER 0 -#define CONFIG_DATA_DEMUXER 0 -#define CONFIG_DAUD_DEMUXER 0 -#define CONFIG_DCSTR_DEMUXER 0 -#define CONFIG_DFA_DEMUXER 0 -#define CONFIG_DIRAC_DEMUXER 0 -#define CONFIG_DNXHD_DEMUXER 0 -#define CONFIG_DSF_DEMUXER 0 -#define CONFIG_DSICIN_DEMUXER 0 -#define CONFIG_DSS_DEMUXER 0 -#define CONFIG_DTS_DEMUXER 0 -#define CONFIG_DTSHD_DEMUXER 0 -#define CONFIG_DV_DEMUXER 0 -#define CONFIG_DVBSUB_DEMUXER 0 -#define CONFIG_DVBTXT_DEMUXER 0 -#define CONFIG_DXA_DEMUXER 0 -#define CONFIG_EA_DEMUXER 0 -#define CONFIG_EA_CDATA_DEMUXER 0 -#define CONFIG_EAC3_DEMUXER 0 -#define CONFIG_EPAF_DEMUXER 0 -#define CONFIG_FFM_DEMUXER 0 -#define CONFIG_FFMETADATA_DEMUXER 0 -#define CONFIG_FILMSTRIP_DEMUXER 0 -#define CONFIG_FLAC_DEMUXER 0 -#define CONFIG_FLIC_DEMUXER 0 -#define CONFIG_FLV_DEMUXER 0 -#define CONFIG_LIVE_FLV_DEMUXER 0 -#define CONFIG_FOURXM_DEMUXER 0 -#define CONFIG_FRM_DEMUXER 0 -#define CONFIG_FSB_DEMUXER 0 -#define CONFIG_G722_DEMUXER 0 -#define CONFIG_G723_1_DEMUXER 0 -#define CONFIG_G729_DEMUXER 0 -#define CONFIG_GENH_DEMUXER 0 -#define CONFIG_GIF_DEMUXER 0 -#define CONFIG_GSM_DEMUXER 0 -#define CONFIG_GXF_DEMUXER 0 -#define CONFIG_H261_DEMUXER 0 -#define CONFIG_H263_DEMUXER 0 -#define CONFIG_H264_DEMUXER 0 -#define CONFIG_HEVC_DEMUXER 0 -#define CONFIG_HLS_DEMUXER 0 -#define CONFIG_HNM_DEMUXER 0 -#define CONFIG_ICO_DEMUXER 0 -#define CONFIG_IDCIN_DEMUXER 0 -#define CONFIG_IDF_DEMUXER 0 -#define CONFIG_IFF_DEMUXER 0 -#define CONFIG_ILBC_DEMUXER 0 -#define CONFIG_IMAGE2_DEMUXER 0 -#define CONFIG_IMAGE2PIPE_DEMUXER 0 -#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -#define CONFIG_INGENIENT_DEMUXER 0 -#define CONFIG_IPMOVIE_DEMUXER 0 -#define CONFIG_IRCAM_DEMUXER 0 -#define CONFIG_ISS_DEMUXER 0 -#define CONFIG_IV8_DEMUXER 0 -#define CONFIG_IVF_DEMUXER 0 -#define CONFIG_IVR_DEMUXER 0 -#define CONFIG_JACOSUB_DEMUXER 0 -#define CONFIG_JV_DEMUXER 0 -#define CONFIG_LMLM4_DEMUXER 0 -#define CONFIG_LOAS_DEMUXER 0 -#define CONFIG_LRC_DEMUXER 0 -#define CONFIG_LVF_DEMUXER 0 -#define CONFIG_LXF_DEMUXER 0 -#define CONFIG_M4V_DEMUXER 0 -#define CONFIG_MATROSKA_DEMUXER 0 -#define CONFIG_MGSTS_DEMUXER 0 -#define CONFIG_MICRODVD_DEMUXER 0 -#define CONFIG_MJPEG_DEMUXER 0 -#define CONFIG_MLP_DEMUXER 0 -#define CONFIG_MLV_DEMUXER 0 -#define CONFIG_MM_DEMUXER 0 -#define CONFIG_MMF_DEMUXER 0 -#define CONFIG_MOV_DEMUXER 0 -#define CONFIG_MP3_DEMUXER 0 -#define CONFIG_MPC_DEMUXER 0 -#define CONFIG_MPC8_DEMUXER 0 -#define CONFIG_MPEGPS_DEMUXER 0 -#define CONFIG_MPEGTS_DEMUXER 0 -#define CONFIG_MPEGTSRAW_DEMUXER 0 -#define CONFIG_MPEGVIDEO_DEMUXER 0 -#define CONFIG_MPJPEG_DEMUXER 0 -#define CONFIG_MPL2_DEMUXER 0 -#define CONFIG_MPSUB_DEMUXER 0 -#define CONFIG_MSF_DEMUXER 0 -#define CONFIG_MSNWC_TCP_DEMUXER 0 -#define CONFIG_MTAF_DEMUXER 0 -#define CONFIG_MTV_DEMUXER 0 -#define CONFIG_MUSX_DEMUXER 0 -#define CONFIG_MV_DEMUXER 0 -#define CONFIG_MVI_DEMUXER 0 -#define CONFIG_MXF_DEMUXER 0 -#define CONFIG_MXG_DEMUXER 0 -#define CONFIG_NC_DEMUXER 0 -#define CONFIG_NISTSPHERE_DEMUXER 0 -#define CONFIG_NSV_DEMUXER 0 -#define CONFIG_NUT_DEMUXER 0 -#define CONFIG_NUV_DEMUXER 0 -#define CONFIG_OGG_DEMUXER 0 -#define CONFIG_OMA_DEMUXER 0 -#define CONFIG_PAF_DEMUXER 0 -#define CONFIG_PCM_ALAW_DEMUXER 0 -#define CONFIG_PCM_MULAW_DEMUXER 0 -#define CONFIG_PCM_F64BE_DEMUXER 0 -#define CONFIG_PCM_F64LE_DEMUXER 0 -#define CONFIG_PCM_F32BE_DEMUXER 0 -#define CONFIG_PCM_F32LE_DEMUXER 0 -#define CONFIG_PCM_S32BE_DEMUXER 0 -#define CONFIG_PCM_S32LE_DEMUXER 0 -#define CONFIG_PCM_S24BE_DEMUXER 0 -#define CONFIG_PCM_S24LE_DEMUXER 0 -#define CONFIG_PCM_S16BE_DEMUXER 0 -#define CONFIG_PCM_S16LE_DEMUXER 0 -#define CONFIG_PCM_S8_DEMUXER 0 -#define CONFIG_PCM_U32BE_DEMUXER 0 -#define CONFIG_PCM_U32LE_DEMUXER 0 -#define CONFIG_PCM_U24BE_DEMUXER 0 -#define CONFIG_PCM_U24LE_DEMUXER 0 -#define CONFIG_PCM_U16BE_DEMUXER 0 -#define CONFIG_PCM_U16LE_DEMUXER 0 -#define CONFIG_PCM_U8_DEMUXER 0 -#define CONFIG_PJS_DEMUXER 0 -#define CONFIG_PMP_DEMUXER 0 -#define CONFIG_PVA_DEMUXER 0 -#define CONFIG_PVF_DEMUXER 0 -#define CONFIG_QCP_DEMUXER 0 -#define CONFIG_R3D_DEMUXER 0 -#define CONFIG_RAWVIDEO_DEMUXER 0 -#define CONFIG_REALTEXT_DEMUXER 0 -#define CONFIG_REDSPARK_DEMUXER 0 -#define CONFIG_RL2_DEMUXER 0 -#define CONFIG_RM_DEMUXER 0 -#define CONFIG_ROQ_DEMUXER 0 -#define CONFIG_RPL_DEMUXER 0 -#define CONFIG_RSD_DEMUXER 0 -#define CONFIG_RSO_DEMUXER 0 -#define CONFIG_RTP_DEMUXER 0 -#define CONFIG_RTSP_DEMUXER 0 -#define CONFIG_SAMI_DEMUXER 0 -#define CONFIG_SAP_DEMUXER 0 -#define CONFIG_SBG_DEMUXER 0 -#define CONFIG_SDP_DEMUXER 0 -#define CONFIG_SDR2_DEMUXER 0 -#define CONFIG_SEGAFILM_DEMUXER 0 -#define CONFIG_SHORTEN_DEMUXER 0 -#define CONFIG_SIFF_DEMUXER 0 -#define CONFIG_SLN_DEMUXER 0 -#define CONFIG_SMACKER_DEMUXER 0 -#define CONFIG_SMJPEG_DEMUXER 0 -#define CONFIG_SMUSH_DEMUXER 0 -#define CONFIG_SOL_DEMUXER 0 -#define CONFIG_SOX_DEMUXER 0 -#define CONFIG_SPDIF_DEMUXER 0 -#define CONFIG_SRT_DEMUXER 0 -#define CONFIG_STR_DEMUXER 0 -#define CONFIG_STL_DEMUXER 0 -#define CONFIG_SUBVIEWER1_DEMUXER 0 -#define CONFIG_SUBVIEWER_DEMUXER 0 -#define CONFIG_SUP_DEMUXER 0 -#define CONFIG_SVAG_DEMUXER 0 -#define CONFIG_SWF_DEMUXER 0 -#define CONFIG_TAK_DEMUXER 0 -#define CONFIG_TEDCAPTIONS_DEMUXER 0 -#define CONFIG_THP_DEMUXER 0 -#define CONFIG_THREEDOSTR_DEMUXER 0 -#define CONFIG_TIERTEXSEQ_DEMUXER 0 -#define CONFIG_TMV_DEMUXER 0 -#define CONFIG_TRUEHD_DEMUXER 0 -#define CONFIG_TTA_DEMUXER 0 -#define CONFIG_TXD_DEMUXER 0 -#define CONFIG_TTY_DEMUXER 0 -#define CONFIG_V210_DEMUXER 0 -#define CONFIG_V210X_DEMUXER 0 -#define CONFIG_VAG_DEMUXER 0 -#define CONFIG_VC1_DEMUXER 0 -#define CONFIG_VC1T_DEMUXER 0 -#define CONFIG_VIVO_DEMUXER 0 -#define CONFIG_VMD_DEMUXER 0 -#define CONFIG_VOBSUB_DEMUXER 0 -#define CONFIG_VOC_DEMUXER 0 -#define CONFIG_VPK_DEMUXER 0 -#define CONFIG_VPLAYER_DEMUXER 0 -#define CONFIG_VQF_DEMUXER 0 -#define CONFIG_W64_DEMUXER 0 -#define CONFIG_WAV_DEMUXER 0 -#define CONFIG_WC3_DEMUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -#define CONFIG_WEBVTT_DEMUXER 0 -#define CONFIG_WSAUD_DEMUXER 0 -#define CONFIG_WSD_DEMUXER 0 -#define CONFIG_WSVQA_DEMUXER 0 -#define CONFIG_WTV_DEMUXER 0 -#define CONFIG_WVE_DEMUXER 0 -#define CONFIG_WV_DEMUXER 0 -#define CONFIG_XA_DEMUXER 0 -#define CONFIG_XBIN_DEMUXER 0 -#define CONFIG_XMV_DEMUXER 0 -#define CONFIG_XVAG_DEMUXER 0 -#define CONFIG_XWMA_DEMUXER 0 -#define CONFIG_YOP_DEMUXER 0 -#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -#define CONFIG_LIBGME_DEMUXER 0 -#define CONFIG_LIBMODPLUG_DEMUXER 0 -#define CONFIG_LIBNUT_DEMUXER 0 -#define CONFIG_LIBOPENMPT_DEMUXER 0 -#define CONFIG_A64MULTI_ENCODER 0 -#define CONFIG_A64MULTI5_ENCODER 0 -#define CONFIG_ALIAS_PIX_ENCODER 0 -#define CONFIG_AMV_ENCODER 0 -#define CONFIG_APNG_ENCODER 0 -#define CONFIG_ASV1_ENCODER 0 -#define CONFIG_ASV2_ENCODER 0 -#define CONFIG_AVRP_ENCODER 0 -#define CONFIG_AVUI_ENCODER 0 -#define CONFIG_AYUV_ENCODER 0 -#define CONFIG_BMP_ENCODER 0 -#define CONFIG_CINEPAK_ENCODER 0 -#define CONFIG_CLJR_ENCODER 0 -#define CONFIG_COMFORTNOISE_ENCODER 0 -#define CONFIG_DNXHD_ENCODER 0 -#define CONFIG_DPX_ENCODER 0 -#define CONFIG_DVVIDEO_ENCODER 0 -#define CONFIG_FFV1_ENCODER 0 -#define CONFIG_FFVHUFF_ENCODER 0 -#define CONFIG_FLASHSV_ENCODER 0 -#define CONFIG_FLASHSV2_ENCODER 0 -#define CONFIG_FLV_ENCODER 0 -#define CONFIG_GIF_ENCODER 0 -#define CONFIG_H261_ENCODER 0 -#define CONFIG_H263_ENCODER 0 -#define CONFIG_H263P_ENCODER 0 -#define CONFIG_HAP_ENCODER 0 -#define CONFIG_HUFFYUV_ENCODER 0 -#define CONFIG_JPEG2000_ENCODER 0 -#define CONFIG_JPEGLS_ENCODER 0 -#define CONFIG_LJPEG_ENCODER 0 -#define CONFIG_MJPEG_ENCODER 0 -#define CONFIG_MPEG1VIDEO_ENCODER 0 -#define CONFIG_MPEG2VIDEO_ENCODER 0 -#define CONFIG_MPEG4_ENCODER 0 -#define CONFIG_MSMPEG4V2_ENCODER 0 -#define CONFIG_MSMPEG4V3_ENCODER 0 -#define CONFIG_MSVIDEO1_ENCODER 0 -#define CONFIG_PAM_ENCODER 0 -#define CONFIG_PBM_ENCODER 0 -#define CONFIG_PCX_ENCODER 0 -#define CONFIG_PGM_ENCODER 0 -#define CONFIG_PGMYUV_ENCODER 0 -#define CONFIG_PNG_ENCODER 0 -#define CONFIG_PPM_ENCODER 0 -#define CONFIG_PRORES_ENCODER 0 -#define CONFIG_PRORES_AW_ENCODER 0 -#define CONFIG_PRORES_KS_ENCODER 0 -#define CONFIG_QTRLE_ENCODER 0 -#define CONFIG_R10K_ENCODER 0 -#define CONFIG_R210_ENCODER 0 -#define CONFIG_RAWVIDEO_ENCODER 0 -#define CONFIG_ROQ_ENCODER 0 -#define CONFIG_RV10_ENCODER 0 -#define CONFIG_RV20_ENCODER 0 -#define CONFIG_S302M_ENCODER 0 -#define CONFIG_SGI_ENCODER 0 -#define CONFIG_SNOW_ENCODER 0 -#define CONFIG_SUNRAST_ENCODER 0 -#define CONFIG_SVQ1_ENCODER 0 -#define CONFIG_TARGA_ENCODER 0 -#define CONFIG_TIFF_ENCODER 0 -#define CONFIG_UTVIDEO_ENCODER 0 -#define CONFIG_V210_ENCODER 0 -#define CONFIG_V308_ENCODER 0 -#define CONFIG_V408_ENCODER 0 -#define CONFIG_V410_ENCODER 0 -#define CONFIG_VC2_ENCODER 0 -#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -#define CONFIG_WMV1_ENCODER 0 -#define CONFIG_WMV2_ENCODER 0 -#define CONFIG_XBM_ENCODER 0 -#define CONFIG_XFACE_ENCODER 0 -#define CONFIG_XWD_ENCODER 0 -#define CONFIG_Y41P_ENCODER 0 -#define CONFIG_YUV4_ENCODER 0 -#define CONFIG_ZLIB_ENCODER 0 -#define CONFIG_ZMBV_ENCODER 0 -#define CONFIG_AAC_ENCODER 0 -#define CONFIG_AC3_ENCODER 0 -#define CONFIG_AC3_FIXED_ENCODER 0 -#define CONFIG_ALAC_ENCODER 0 -#define CONFIG_DCA_ENCODER 0 -#define CONFIG_EAC3_ENCODER 0 -#define CONFIG_FLAC_ENCODER 0 -#define CONFIG_G723_1_ENCODER 0 -#define CONFIG_MLP_ENCODER 0 -#define CONFIG_MP2_ENCODER 0 -#define CONFIG_MP2FIXED_ENCODER 0 -#define CONFIG_NELLYMOSER_ENCODER 0 -#define CONFIG_RA_144_ENCODER 0 -#define CONFIG_SONIC_ENCODER 0 -#define CONFIG_SONIC_LS_ENCODER 0 -#define CONFIG_TRUEHD_ENCODER 0 -#define CONFIG_TTA_ENCODER 0 -#define CONFIG_VORBIS_ENCODER 0 -#define CONFIG_WAVPACK_ENCODER 0 -#define CONFIG_WMAV1_ENCODER 0 -#define CONFIG_WMAV2_ENCODER 0 -#define CONFIG_PCM_ALAW_ENCODER 0 -#define CONFIG_PCM_F32BE_ENCODER 0 -#define CONFIG_PCM_F32LE_ENCODER 0 -#define CONFIG_PCM_F64BE_ENCODER 0 -#define CONFIG_PCM_F64LE_ENCODER 0 -#define CONFIG_PCM_MULAW_ENCODER 0 -#define CONFIG_PCM_S8_ENCODER 0 -#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16BE_ENCODER 0 -#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16LE_ENCODER 0 -#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S24BE_ENCODER 0 -#define CONFIG_PCM_S24DAUD_ENCODER 0 -#define CONFIG_PCM_S24LE_ENCODER 0 -#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S32BE_ENCODER 0 -#define CONFIG_PCM_S32LE_ENCODER 0 -#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S64BE_ENCODER 0 -#define CONFIG_PCM_S64LE_ENCODER 0 -#define CONFIG_PCM_U8_ENCODER 0 -#define CONFIG_PCM_U16BE_ENCODER 0 -#define CONFIG_PCM_U16LE_ENCODER 0 -#define CONFIG_PCM_U24BE_ENCODER 0 -#define CONFIG_PCM_U24LE_ENCODER 0 -#define CONFIG_PCM_U32BE_ENCODER 0 -#define CONFIG_PCM_U32LE_ENCODER 0 -#define CONFIG_ROQ_DPCM_ENCODER 0 -#define CONFIG_ADPCM_ADX_ENCODER 0 -#define CONFIG_ADPCM_G722_ENCODER 0 -#define CONFIG_ADPCM_G726_ENCODER 0 -#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -#define CONFIG_ADPCM_MS_ENCODER 0 -#define CONFIG_ADPCM_SWF_ENCODER 0 -#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -#define CONFIG_SSA_ENCODER 0 -#define CONFIG_ASS_ENCODER 0 -#define CONFIG_DVBSUB_ENCODER 0 -#define CONFIG_DVDSUB_ENCODER 0 -#define CONFIG_MOVTEXT_ENCODER 0 -#define CONFIG_SRT_ENCODER 0 -#define CONFIG_SUBRIP_ENCODER 0 -#define CONFIG_TEXT_ENCODER 0 -#define CONFIG_WEBVTT_ENCODER 0 -#define CONFIG_XSUB_ENCODER 0 -#define CONFIG_AAC_AT_ENCODER 0 -#define CONFIG_ALAC_AT_ENCODER 0 -#define CONFIG_ILBC_AT_ENCODER 0 -#define CONFIG_PCM_ALAW_AT_ENCODER 0 -#define CONFIG_PCM_MULAW_AT_ENCODER 0 -#define CONFIG_LIBFDK_AAC_ENCODER 0 -#define CONFIG_LIBGSM_ENCODER 0 -#define CONFIG_LIBGSM_MS_ENCODER 0 -#define CONFIG_LIBILBC_ENCODER 0 -#define CONFIG_LIBMP3LAME_ENCODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -#define CONFIG_LIBOPENJPEG_ENCODER 0 -#define CONFIG_LIBOPUS_ENCODER 0 -#define CONFIG_LIBSCHROEDINGER_ENCODER 0 -#define CONFIG_LIBSHINE_ENCODER 0 -#define CONFIG_LIBSPEEX_ENCODER 0 -#define CONFIG_LIBTHEORA_ENCODER 0 -#define CONFIG_LIBTWOLAME_ENCODER 0 -#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -#define CONFIG_LIBVORBIS_ENCODER 0 -#define CONFIG_LIBVPX_VP8_ENCODER 0 -#define CONFIG_LIBVPX_VP9_ENCODER 0 -#define CONFIG_LIBWAVPACK_ENCODER 0 -#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -#define CONFIG_LIBWEBP_ENCODER 0 -#define CONFIG_LIBX262_ENCODER 0 -#define CONFIG_LIBX264_ENCODER 0 -#define CONFIG_LIBX264RGB_ENCODER 0 -#define CONFIG_LIBX265_ENCODER 0 -#define CONFIG_LIBXAVS_ENCODER 0 -#define CONFIG_LIBXVID_ENCODER 0 -#define CONFIG_LIBOPENH264_ENCODER 0 -#define CONFIG_H264_NVENC_ENCODER 0 -#define CONFIG_H264_OMX_ENCODER 0 -#define CONFIG_H264_QSV_ENCODER 0 -#define CONFIG_H264_VAAPI_ENCODER 0 -#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -#define CONFIG_NVENC_ENCODER 0 -#define CONFIG_NVENC_H264_ENCODER 0 -#define CONFIG_NVENC_HEVC_ENCODER 0 -#define CONFIG_HEVC_NVENC_ENCODER 0 -#define CONFIG_HEVC_QSV_ENCODER 0 -#define CONFIG_HEVC_VAAPI_ENCODER 0 -#define CONFIG_LIBKVAZAAR_ENCODER 0 -#define CONFIG_MJPEG_VAAPI_ENCODER 0 -#define CONFIG_MPEG2_QSV_ENCODER 0 -#define CONFIG_ABENCH_FILTER 0 -#define CONFIG_ACOMPRESSOR_FILTER 0 -#define CONFIG_ACROSSFADE_FILTER 0 -#define CONFIG_ACRUSHER_FILTER 0 -#define CONFIG_ADELAY_FILTER 0 -#define CONFIG_AECHO_FILTER 0 -#define CONFIG_AEMPHASIS_FILTER 0 -#define CONFIG_AEVAL_FILTER 0 -#define CONFIG_AFADE_FILTER 0 -#define CONFIG_AFFTFILT_FILTER 0 -#define CONFIG_AFORMAT_FILTER 0 -#define CONFIG_AGATE_FILTER 0 -#define CONFIG_AINTERLEAVE_FILTER 0 -#define CONFIG_ALIMITER_FILTER 0 -#define CONFIG_ALLPASS_FILTER 0 -#define CONFIG_ALOOP_FILTER 0 -#define CONFIG_AMERGE_FILTER 0 -#define CONFIG_AMETADATA_FILTER 0 -#define CONFIG_AMIX_FILTER 0 -#define CONFIG_ANEQUALIZER_FILTER 0 -#define CONFIG_ANULL_FILTER 0 -#define CONFIG_APAD_FILTER 0 -#define CONFIG_APERMS_FILTER 0 -#define CONFIG_APHASER_FILTER 0 -#define CONFIG_APULSATOR_FILTER 0 -#define CONFIG_AREALTIME_FILTER 0 -#define CONFIG_ARESAMPLE_FILTER 0 -#define CONFIG_AREVERSE_FILTER 0 -#define CONFIG_ASELECT_FILTER 0 -#define CONFIG_ASENDCMD_FILTER 0 -#define CONFIG_ASETNSAMPLES_FILTER 0 -#define CONFIG_ASETPTS_FILTER 0 -#define CONFIG_ASETRATE_FILTER 0 -#define CONFIG_ASETTB_FILTER 0 -#define CONFIG_ASHOWINFO_FILTER 0 -#define CONFIG_ASIDEDATA_FILTER 0 -#define CONFIG_ASPLIT_FILTER 0 -#define CONFIG_ASTATS_FILTER 0 -#define CONFIG_ASTREAMSELECT_FILTER 0 -#define CONFIG_ASYNCTS_FILTER 0 -#define CONFIG_ATEMPO_FILTER 0 -#define CONFIG_ATRIM_FILTER 0 -#define CONFIG_AZMQ_FILTER 0 -#define CONFIG_BANDPASS_FILTER 0 -#define CONFIG_BANDREJECT_FILTER 0 -#define CONFIG_BASS_FILTER 0 -#define CONFIG_BIQUAD_FILTER 0 -#define CONFIG_BS2B_FILTER 0 -#define CONFIG_CHANNELMAP_FILTER 0 -#define CONFIG_CHANNELSPLIT_FILTER 0 -#define CONFIG_CHORUS_FILTER 0 -#define CONFIG_COMPAND_FILTER 0 -#define CONFIG_COMPENSATIONDELAY_FILTER 0 -#define CONFIG_CRYSTALIZER_FILTER 0 -#define CONFIG_DCSHIFT_FILTER 0 -#define CONFIG_DYNAUDNORM_FILTER 0 -#define CONFIG_EARWAX_FILTER 0 -#define CONFIG_EBUR128_FILTER 0 -#define CONFIG_EQUALIZER_FILTER 0 -#define CONFIG_EXTRASTEREO_FILTER 0 -#define CONFIG_FIREQUALIZER_FILTER 0 -#define CONFIG_FLANGER_FILTER 0 -#define CONFIG_HDCD_FILTER 0 -#define CONFIG_HIGHPASS_FILTER 0 -#define CONFIG_JOIN_FILTER 0 -#define CONFIG_LADSPA_FILTER 0 -#define CONFIG_LOUDNORM_FILTER 0 -#define CONFIG_LOWPASS_FILTER 0 -#define CONFIG_PAN_FILTER 0 -#define CONFIG_REPLAYGAIN_FILTER 0 -#define CONFIG_RESAMPLE_FILTER 0 -#define CONFIG_RUBBERBAND_FILTER 0 -#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -#define CONFIG_SIDECHAINGATE_FILTER 0 -#define CONFIG_SILENCEDETECT_FILTER 0 -#define CONFIG_SILENCEREMOVE_FILTER 0 -#define CONFIG_SOFALIZER_FILTER 0 -#define CONFIG_STEREOTOOLS_FILTER 0 -#define CONFIG_STEREOWIDEN_FILTER 0 -#define CONFIG_TREBLE_FILTER 0 -#define CONFIG_TREMOLO_FILTER 0 -#define CONFIG_VIBRATO_FILTER 0 -#define CONFIG_VOLUME_FILTER 0 -#define CONFIG_VOLUMEDETECT_FILTER 0 -#define CONFIG_AEVALSRC_FILTER 0 -#define CONFIG_ANOISESRC_FILTER 0 -#define CONFIG_ANULLSRC_FILTER 0 -#define CONFIG_FLITE_FILTER 0 -#define CONFIG_SINE_FILTER 0 -#define CONFIG_ANULLSINK_FILTER 0 -#define CONFIG_ALPHAEXTRACT_FILTER 0 -#define CONFIG_ALPHAMERGE_FILTER 0 -#define CONFIG_ASS_FILTER 0 -#define CONFIG_ATADENOISE_FILTER 0 -#define CONFIG_AVGBLUR_FILTER 0 -#define CONFIG_BBOX_FILTER 0 -#define CONFIG_BENCH_FILTER 0 -#define CONFIG_BITPLANENOISE_FILTER 0 -#define CONFIG_BLACKDETECT_FILTER 0 -#define CONFIG_BLACKFRAME_FILTER 0 -#define CONFIG_BLEND_FILTER 0 -#define CONFIG_BOXBLUR_FILTER 0 -#define CONFIG_BWDIF_FILTER 0 -#define CONFIG_CHROMAKEY_FILTER 0 -#define CONFIG_CIESCOPE_FILTER 0 -#define CONFIG_CODECVIEW_FILTER 0 -#define CONFIG_COLORBALANCE_FILTER 0 -#define CONFIG_COLORCHANNELMIXER_FILTER 0 -#define CONFIG_COLORKEY_FILTER 0 -#define CONFIG_COLORLEVELS_FILTER 0 -#define CONFIG_COLORMATRIX_FILTER 0 -#define CONFIG_COLORSPACE_FILTER 0 -#define CONFIG_CONVOLUTION_FILTER 0 -#define CONFIG_COPY_FILTER 0 -#define CONFIG_COREIMAGE_FILTER 0 -#define CONFIG_COVER_RECT_FILTER 0 -#define CONFIG_CROP_FILTER 0 -#define CONFIG_CROPDETECT_FILTER 0 -#define CONFIG_CURVES_FILTER 0 -#define CONFIG_DATASCOPE_FILTER 0 -#define CONFIG_DCTDNOIZ_FILTER 0 -#define CONFIG_DEBAND_FILTER 0 -#define CONFIG_DECIMATE_FILTER 0 -#define CONFIG_DEFLATE_FILTER 0 -#define CONFIG_DEJUDDER_FILTER 0 -#define CONFIG_DELOGO_FILTER 0 -#define CONFIG_DESHAKE_FILTER 0 -#define CONFIG_DETELECINE_FILTER 0 -#define CONFIG_DILATION_FILTER 0 -#define CONFIG_DISPLACE_FILTER 0 -#define CONFIG_DRAWBOX_FILTER 0 -#define CONFIG_DRAWGRAPH_FILTER 0 -#define CONFIG_DRAWGRID_FILTER 0 -#define CONFIG_DRAWTEXT_FILTER 0 -#define CONFIG_EDGEDETECT_FILTER 0 -#define CONFIG_ELBG_FILTER 0 -#define CONFIG_EQ_FILTER 0 -#define CONFIG_EROSION_FILTER 0 -#define CONFIG_EXTRACTPLANES_FILTER 0 -#define CONFIG_FADE_FILTER 0 -#define CONFIG_FFTFILT_FILTER 0 -#define CONFIG_FIELD_FILTER 0 -#define CONFIG_FIELDHINT_FILTER 0 -#define CONFIG_FIELDMATCH_FILTER 0 -#define CONFIG_FIELDORDER_FILTER 0 -#define CONFIG_FIND_RECT_FILTER 0 -#define CONFIG_FORMAT_FILTER 0 -#define CONFIG_FPS_FILTER 0 -#define CONFIG_FRAMEPACK_FILTER 0 -#define CONFIG_FRAMERATE_FILTER 0 -#define CONFIG_FRAMESTEP_FILTER 0 -#define CONFIG_FREI0R_FILTER 0 -#define CONFIG_FSPP_FILTER 0 -#define CONFIG_GBLUR_FILTER 0 -#define CONFIG_GEQ_FILTER 0 -#define CONFIG_GRADFUN_FILTER 0 -#define CONFIG_HALDCLUT_FILTER 0 -#define CONFIG_HFLIP_FILTER 0 -#define CONFIG_HISTEQ_FILTER 0 -#define CONFIG_HISTOGRAM_FILTER 0 -#define CONFIG_HQDN3D_FILTER 0 -#define CONFIG_HQX_FILTER 0 -#define CONFIG_HSTACK_FILTER 0 -#define CONFIG_HUE_FILTER 0 -#define CONFIG_HWDOWNLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -#define CONFIG_HYSTERESIS_FILTER 0 -#define CONFIG_IDET_FILTER 0 -#define CONFIG_IL_FILTER 0 -#define CONFIG_INFLATE_FILTER 0 -#define CONFIG_INTERLACE_FILTER 0 -#define CONFIG_INTERLEAVE_FILTER 0 -#define CONFIG_KERNDEINT_FILTER 0 -#define CONFIG_LENSCORRECTION_FILTER 0 -#define CONFIG_LOOP_FILTER 0 -#define CONFIG_LUT_FILTER 0 -#define CONFIG_LUT2_FILTER 0 -#define CONFIG_LUT3D_FILTER 0 -#define CONFIG_LUTRGB_FILTER 0 -#define CONFIG_LUTYUV_FILTER 0 -#define CONFIG_MASKEDCLAMP_FILTER 0 -#define CONFIG_MASKEDMERGE_FILTER 0 -#define CONFIG_MCDEINT_FILTER 0 -#define CONFIG_MERGEPLANES_FILTER 0 -#define CONFIG_MESTIMATE_FILTER 0 -#define CONFIG_METADATA_FILTER 0 -#define CONFIG_MINTERPOLATE_FILTER 0 -#define CONFIG_MPDECIMATE_FILTER 0 -#define CONFIG_NEGATE_FILTER 0 -#define CONFIG_NLMEANS_FILTER 0 -#define CONFIG_NNEDI_FILTER 0 -#define CONFIG_NOFORMAT_FILTER 0 -#define CONFIG_NOISE_FILTER 0 -#define CONFIG_NULL_FILTER 0 -#define CONFIG_OCR_FILTER 0 -#define CONFIG_OCV_FILTER 0 -#define CONFIG_OVERLAY_FILTER 0 -#define CONFIG_OWDENOISE_FILTER 0 -#define CONFIG_PAD_FILTER 0 -#define CONFIG_PALETTEGEN_FILTER 0 -#define CONFIG_PALETTEUSE_FILTER 0 -#define CONFIG_PERMS_FILTER 0 -#define CONFIG_PERSPECTIVE_FILTER 0 -#define CONFIG_PHASE_FILTER 0 -#define CONFIG_PIXDESCTEST_FILTER 0 -#define CONFIG_PP_FILTER 0 -#define CONFIG_PP7_FILTER 0 -#define CONFIG_PREWITT_FILTER 0 -#define CONFIG_PSNR_FILTER 0 -#define CONFIG_PULLUP_FILTER 0 -#define CONFIG_QP_FILTER 0 -#define CONFIG_RANDOM_FILTER 0 -#define CONFIG_READVITC_FILTER 0 -#define CONFIG_REALTIME_FILTER 0 -#define CONFIG_REMAP_FILTER 0 -#define CONFIG_REMOVEGRAIN_FILTER 0 -#define CONFIG_REMOVELOGO_FILTER 0 -#define CONFIG_REPEATFIELDS_FILTER 0 -#define CONFIG_REVERSE_FILTER 0 -#define CONFIG_ROTATE_FILTER 0 -#define CONFIG_SAB_FILTER 0 -#define CONFIG_SCALE_FILTER 0 -#define CONFIG_SCALE_NPP_FILTER 0 -#define CONFIG_SCALE_VAAPI_FILTER 0 -#define CONFIG_SCALE2REF_FILTER 0 -#define CONFIG_SELECT_FILTER 0 -#define CONFIG_SELECTIVECOLOR_FILTER 0 -#define CONFIG_SENDCMD_FILTER 0 -#define CONFIG_SEPARATEFIELDS_FILTER 0 -#define CONFIG_SETDAR_FILTER 0 -#define CONFIG_SETFIELD_FILTER 0 -#define CONFIG_SETPTS_FILTER 0 -#define CONFIG_SETSAR_FILTER 0 -#define CONFIG_SETTB_FILTER 0 -#define CONFIG_SHOWINFO_FILTER 0 -#define CONFIG_SHOWPALETTE_FILTER 0 -#define CONFIG_SHUFFLEFRAMES_FILTER 0 -#define CONFIG_SHUFFLEPLANES_FILTER 0 -#define CONFIG_SIDEDATA_FILTER 0 -#define CONFIG_SIGNALSTATS_FILTER 0 -#define CONFIG_SMARTBLUR_FILTER 0 -#define CONFIG_SOBEL_FILTER 0 -#define CONFIG_SPLIT_FILTER 0 -#define CONFIG_SPP_FILTER 0 -#define CONFIG_SSIM_FILTER 0 -#define CONFIG_STEREO3D_FILTER 0 -#define CONFIG_STREAMSELECT_FILTER 0 -#define CONFIG_SUBTITLES_FILTER 0 -#define CONFIG_SUPER2XSAI_FILTER 0 -#define CONFIG_SWAPRECT_FILTER 0 -#define CONFIG_SWAPUV_FILTER 0 -#define CONFIG_TBLEND_FILTER 0 -#define CONFIG_TELECINE_FILTER 0 -#define CONFIG_THUMBNAIL_FILTER 0 -#define CONFIG_TILE_FILTER 0 -#define CONFIG_TINTERLACE_FILTER 0 -#define CONFIG_TRANSPOSE_FILTER 0 -#define CONFIG_TRIM_FILTER 0 -#define CONFIG_UNSHARP_FILTER 0 -#define CONFIG_USPP_FILTER 0 -#define CONFIG_VAGUEDENOISER_FILTER 0 -#define CONFIG_VECTORSCOPE_FILTER 0 -#define CONFIG_VFLIP_FILTER 0 -#define CONFIG_VIDSTABDETECT_FILTER 0 -#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -#define CONFIG_VIGNETTE_FILTER 0 -#define CONFIG_VSTACK_FILTER 0 -#define CONFIG_W3FDIF_FILTER 0 -#define CONFIG_WAVEFORM_FILTER 0 -#define CONFIG_WEAVE_FILTER 0 -#define CONFIG_XBR_FILTER 0 -#define CONFIG_YADIF_FILTER 0 -#define CONFIG_ZMQ_FILTER 0 -#define CONFIG_ZOOMPAN_FILTER 0 -#define CONFIG_ZSCALE_FILTER 0 -#define CONFIG_ALLRGB_FILTER 0 -#define CONFIG_ALLYUV_FILTER 0 -#define CONFIG_CELLAUTO_FILTER 0 -#define CONFIG_COLOR_FILTER 0 -#define CONFIG_COREIMAGESRC_FILTER 0 -#define CONFIG_FREI0R_SRC_FILTER 0 -#define CONFIG_HALDCLUTSRC_FILTER 0 -#define CONFIG_LIFE_FILTER 0 -#define CONFIG_MANDELBROT_FILTER 0 -#define CONFIG_MPTESTSRC_FILTER 0 -#define CONFIG_NULLSRC_FILTER 0 -#define CONFIG_RGBTESTSRC_FILTER 0 -#define CONFIG_SMPTEBARS_FILTER 0 -#define CONFIG_SMPTEHDBARS_FILTER 0 -#define CONFIG_TESTSRC_FILTER 0 -#define CONFIG_TESTSRC2_FILTER 0 -#define CONFIG_YUVTESTSRC_FILTER 0 -#define CONFIG_NULLSINK_FILTER 0 -#define CONFIG_ADRAWGRAPH_FILTER 0 -#define CONFIG_AHISTOGRAM_FILTER 0 -#define CONFIG_APHASEMETER_FILTER 0 -#define CONFIG_AVECTORSCOPE_FILTER 0 -#define CONFIG_CONCAT_FILTER 0 -#define CONFIG_SHOWCQT_FILTER 0 -#define CONFIG_SHOWFREQS_FILTER 0 -#define CONFIG_SHOWSPECTRUM_FILTER 0 -#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -#define CONFIG_SHOWVOLUME_FILTER 0 -#define CONFIG_SHOWWAVES_FILTER 0 -#define CONFIG_SHOWWAVESPIC_FILTER 0 -#define CONFIG_SPECTRUMSYNTH_FILTER 0 -#define CONFIG_AMOVIE_FILTER 0 -#define CONFIG_MOVIE_FILTER 0 -#define CONFIG_H263_CUVID_HWACCEL 0 -#define CONFIG_H263_VAAPI_HWACCEL 0 -#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_H264_CUVID_HWACCEL 0 -#define CONFIG_H264_D3D11VA_HWACCEL 0 -#define CONFIG_H264_DXVA2_HWACCEL 0 -#define CONFIG_H264_MEDIACODEC_HWACCEL 0 -#define CONFIG_H264_MMAL_HWACCEL 0 -#define CONFIG_H264_QSV_HWACCEL 0 -#define CONFIG_H264_VAAPI_HWACCEL 0 -#define CONFIG_H264_VDA_HWACCEL 0 -#define CONFIG_H264_VDA_OLD_HWACCEL 0 -#define CONFIG_H264_VDPAU_HWACCEL 0 -#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_HEVC_CUVID_HWACCEL 0 -#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -#define CONFIG_HEVC_DXVA2_HWACCEL 0 -#define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -#define CONFIG_HEVC_QSV_HWACCEL 0 -#define CONFIG_HEVC_VAAPI_HWACCEL 0 -#define CONFIG_HEVC_VDPAU_HWACCEL 0 -#define CONFIG_MJPEG_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_XVMC_HWACCEL 0 -#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG2_CUVID_HWACCEL 0 -#define CONFIG_MPEG2_XVMC_HWACCEL 0 -#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -#define CONFIG_MPEG2_MMAL_HWACCEL 0 -#define CONFIG_MPEG2_QSV_HWACCEL 0 -#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG4_CUVID_HWACCEL 0 -#define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -#define CONFIG_MPEG4_MMAL_HWACCEL 0 -#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_VC1_CUVID_HWACCEL 0 -#define CONFIG_VC1_D3D11VA_HWACCEL 0 -#define CONFIG_VC1_DXVA2_HWACCEL 0 -#define CONFIG_VC1_VAAPI_HWACCEL 0 -#define CONFIG_VC1_VDPAU_HWACCEL 0 -#define CONFIG_VC1_MMAL_HWACCEL 0 -#define CONFIG_VC1_QSV_HWACCEL 0 -#define CONFIG_VP8_CUVID_HWACCEL 0 -#define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_CUVID_HWACCEL 0 -#define CONFIG_VP9_D3D11VA_HWACCEL 0 -#define CONFIG_VP9_DXVA2_HWACCEL 0 -#define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -#define CONFIG_WMV3_DXVA2_HWACCEL 0 -#define CONFIG_WMV3_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_VDPAU_HWACCEL 0 -#define CONFIG_ALSA_INDEV 0 -#define CONFIG_AVFOUNDATION_INDEV 0 -#define CONFIG_BKTR_INDEV 0 -#define CONFIG_DECKLINK_INDEV 0 -#define CONFIG_DSHOW_INDEV 0 -#define CONFIG_DV1394_INDEV 0 -#define CONFIG_FBDEV_INDEV 0 -#define CONFIG_GDIGRAB_INDEV 0 -#define CONFIG_IEC61883_INDEV 0 -#define CONFIG_JACK_INDEV 0 -#define CONFIG_LAVFI_INDEV 0 -#define CONFIG_OPENAL_INDEV 0 -#define CONFIG_OSS_INDEV 0 -#define CONFIG_PULSE_INDEV 0 -#define CONFIG_QTKIT_INDEV 0 -#define CONFIG_SNDIO_INDEV 0 -#define CONFIG_V4L2_INDEV 0 -#define CONFIG_VFWCAP_INDEV 0 -#define CONFIG_X11GRAB_INDEV 0 -#define CONFIG_X11GRAB_XCB_INDEV 0 -#define CONFIG_LIBCDIO_INDEV 0 -#define CONFIG_LIBDC1394_INDEV 0 -#define CONFIG_A64_MUXER 0 -#define CONFIG_AC3_MUXER 0 -#define CONFIG_ADTS_MUXER 0 -#define CONFIG_ADX_MUXER 0 -#define CONFIG_AIFF_MUXER 0 -#define CONFIG_AMR_MUXER 0 -#define CONFIG_APNG_MUXER 0 -#define CONFIG_ASF_MUXER 0 -#define CONFIG_ASS_MUXER 0 -#define CONFIG_AST_MUXER 0 -#define CONFIG_ASF_STREAM_MUXER 0 -#define CONFIG_AU_MUXER 0 -#define CONFIG_AVI_MUXER 0 -#define CONFIG_AVM2_MUXER 0 -#define CONFIG_BIT_MUXER 0 -#define CONFIG_CAF_MUXER 0 -#define CONFIG_CAVSVIDEO_MUXER 0 -#define CONFIG_CRC_MUXER 0 -#define CONFIG_DASH_MUXER 0 -#define CONFIG_DATA_MUXER 0 -#define CONFIG_DAUD_MUXER 0 -#define CONFIG_DIRAC_MUXER 0 -#define CONFIG_DNXHD_MUXER 0 -#define CONFIG_DTS_MUXER 0 -#define CONFIG_DV_MUXER 0 -#define CONFIG_EAC3_MUXER 0 -#define CONFIG_F4V_MUXER 0 -#define CONFIG_FFM_MUXER 0 -#define CONFIG_FFMETADATA_MUXER 0 -#define CONFIG_FIFO_MUXER 0 -#define CONFIG_FILMSTRIP_MUXER 0 -#define CONFIG_FLAC_MUXER 0 -#define CONFIG_FLV_MUXER 0 -#define CONFIG_FRAMECRC_MUXER 0 -#define CONFIG_FRAMEHASH_MUXER 0 -#define CONFIG_FRAMEMD5_MUXER 0 -#define CONFIG_G722_MUXER 0 -#define CONFIG_G723_1_MUXER 0 -#define CONFIG_GIF_MUXER 0 -#define CONFIG_GSM_MUXER 0 -#define CONFIG_GXF_MUXER 0 -#define CONFIG_H261_MUXER 0 -#define CONFIG_H263_MUXER 0 -#define CONFIG_H264_MUXER 0 -#define CONFIG_HASH_MUXER 0 -#define CONFIG_HDS_MUXER 0 -#define CONFIG_HEVC_MUXER 0 -#define CONFIG_HLS_MUXER 0 -#define CONFIG_ICO_MUXER 0 -#define CONFIG_ILBC_MUXER 0 -#define CONFIG_IMAGE2_MUXER 0 -#define CONFIG_IMAGE2PIPE_MUXER 0 -#define CONFIG_IPOD_MUXER 0 -#define CONFIG_IRCAM_MUXER 0 -#define CONFIG_ISMV_MUXER 0 -#define CONFIG_IVF_MUXER 0 -#define CONFIG_JACOSUB_MUXER 0 -#define CONFIG_LATM_MUXER 0 -#define CONFIG_LRC_MUXER 0 -#define CONFIG_M4V_MUXER 0 -#define CONFIG_MD5_MUXER 0 -#define CONFIG_MATROSKA_MUXER 0 -#define CONFIG_MATROSKA_AUDIO_MUXER 0 -#define CONFIG_MICRODVD_MUXER 0 -#define CONFIG_MJPEG_MUXER 0 -#define CONFIG_MLP_MUXER 0 -#define CONFIG_MMF_MUXER 0 -#define CONFIG_MOV_MUXER 0 -#define CONFIG_MP2_MUXER 0 -#define CONFIG_MP3_MUXER 0 -#define CONFIG_MP4_MUXER 0 -#define CONFIG_MPEG1SYSTEM_MUXER 0 -#define CONFIG_MPEG1VCD_MUXER 0 -#define CONFIG_MPEG1VIDEO_MUXER 0 -#define CONFIG_MPEG2DVD_MUXER 0 -#define CONFIG_MPEG2SVCD_MUXER 0 -#define CONFIG_MPEG2VIDEO_MUXER 0 -#define CONFIG_MPEG2VOB_MUXER 0 -#define CONFIG_MPEGTS_MUXER 0 -#define CONFIG_MPJPEG_MUXER 0 -#define CONFIG_MXF_MUXER 0 -#define CONFIG_MXF_D10_MUXER 0 -#define CONFIG_MXF_OPATOM_MUXER 0 -#define CONFIG_NULL_MUXER 0 -#define CONFIG_NUT_MUXER 0 -#define CONFIG_OGA_MUXER 0 -#define CONFIG_OGG_MUXER 0 -#define CONFIG_OGV_MUXER 0 -#define CONFIG_OMA_MUXER 0 -#define CONFIG_OPUS_MUXER 0 -#define CONFIG_PCM_ALAW_MUXER 0 -#define CONFIG_PCM_MULAW_MUXER 0 -#define CONFIG_PCM_F64BE_MUXER 0 -#define CONFIG_PCM_F64LE_MUXER 0 -#define CONFIG_PCM_F32BE_MUXER 0 -#define CONFIG_PCM_F32LE_MUXER 0 -#define CONFIG_PCM_S32BE_MUXER 0 -#define CONFIG_PCM_S32LE_MUXER 0 -#define CONFIG_PCM_S24BE_MUXER 0 -#define CONFIG_PCM_S24LE_MUXER 0 -#define CONFIG_PCM_S16BE_MUXER 0 -#define CONFIG_PCM_S16LE_MUXER 0 -#define CONFIG_PCM_S8_MUXER 0 -#define CONFIG_PCM_U32BE_MUXER 0 -#define CONFIG_PCM_U32LE_MUXER 0 -#define CONFIG_PCM_U24BE_MUXER 0 -#define CONFIG_PCM_U24LE_MUXER 0 -#define CONFIG_PCM_U16BE_MUXER 0 -#define CONFIG_PCM_U16LE_MUXER 0 -#define CONFIG_PCM_U8_MUXER 0 -#define CONFIG_PSP_MUXER 0 -#define CONFIG_RAWVIDEO_MUXER 0 -#define CONFIG_RM_MUXER 0 -#define CONFIG_ROQ_MUXER 0 -#define CONFIG_RSO_MUXER 0 -#define CONFIG_RTP_MUXER 0 -#define CONFIG_RTP_MPEGTS_MUXER 0 -#define CONFIG_RTSP_MUXER 0 -#define CONFIG_SAP_MUXER 0 -#define CONFIG_SEGMENT_MUXER 0 -#define CONFIG_STREAM_SEGMENT_MUXER 0 -#define CONFIG_SINGLEJPEG_MUXER 0 -#define CONFIG_SMJPEG_MUXER 0 -#define CONFIG_SMOOTHSTREAMING_MUXER 0 -#define CONFIG_SOX_MUXER 0 -#define CONFIG_SPX_MUXER 0 -#define CONFIG_SPDIF_MUXER 0 -#define CONFIG_SRT_MUXER 0 -#define CONFIG_SWF_MUXER 0 -#define CONFIG_TEE_MUXER 0 -#define CONFIG_TG2_MUXER 0 -#define CONFIG_TGP_MUXER 0 -#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -#define CONFIG_TRUEHD_MUXER 0 -#define CONFIG_TTA_MUXER 0 -#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -#define CONFIG_VC1_MUXER 0 -#define CONFIG_VC1T_MUXER 0 -#define CONFIG_VOC_MUXER 0 -#define CONFIG_W64_MUXER 0 -#define CONFIG_WAV_MUXER 0 -#define CONFIG_WEBM_MUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -#define CONFIG_WEBM_CHUNK_MUXER 0 -#define CONFIG_WEBP_MUXER 0 -#define CONFIG_WEBVTT_MUXER 0 -#define CONFIG_WTV_MUXER 0 -#define CONFIG_WV_MUXER 0 -#define CONFIG_YUV4MPEGPIPE_MUXER 0 -#define CONFIG_CHROMAPRINT_MUXER 0 -#define CONFIG_LIBNUT_MUXER 0 -#define CONFIG_ALSA_OUTDEV 0 -#define CONFIG_CACA_OUTDEV 0 -#define CONFIG_DECKLINK_OUTDEV 0 -#define CONFIG_FBDEV_OUTDEV 0 -#define CONFIG_OPENGL_OUTDEV 0 -#define CONFIG_OSS_OUTDEV 0 -#define CONFIG_PULSE_OUTDEV 0 -#define CONFIG_SDL2_OUTDEV 0 -#define CONFIG_SNDIO_OUTDEV 0 -#define CONFIG_V4L2_OUTDEV 0 -#define CONFIG_XV_OUTDEV 0 -#define CONFIG_AAC_PARSER 0 -#define CONFIG_AAC_LATM_PARSER 0 -#define CONFIG_AC3_PARSER 0 -#define CONFIG_ADX_PARSER 0 -#define CONFIG_BMP_PARSER 0 -#define CONFIG_CAVSVIDEO_PARSER 0 -#define CONFIG_COOK_PARSER 0 -#define CONFIG_DCA_PARSER 0 -#define CONFIG_DIRAC_PARSER 0 -#define CONFIG_DNXHD_PARSER 0 -#define CONFIG_DPX_PARSER 0 -#define CONFIG_DVAUDIO_PARSER 0 -#define CONFIG_DVBSUB_PARSER 0 -#define CONFIG_DVDSUB_PARSER 0 -#define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 1 -#define CONFIG_G729_PARSER 0 -#define CONFIG_GSM_PARSER 0 -#define CONFIG_H261_PARSER 0 -#define CONFIG_H263_PARSER 0 -#define CONFIG_H264_PARSER 0 -#define CONFIG_HEVC_PARSER 0 -#define CONFIG_MJPEG_PARSER 0 -#define CONFIG_MLP_PARSER 0 -#define CONFIG_MPEG4VIDEO_PARSER 0 -#define CONFIG_MPEGAUDIO_PARSER 0 -#define CONFIG_MPEGVIDEO_PARSER 0 -#define CONFIG_OPUS_PARSER 0 -#define CONFIG_PNG_PARSER 0 -#define CONFIG_PNM_PARSER 0 -#define CONFIG_RV30_PARSER 0 -#define CONFIG_RV40_PARSER 0 -#define CONFIG_TAK_PARSER 0 -#define CONFIG_VC1_PARSER 0 -#define CONFIG_VORBIS_PARSER 0 -#define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 1 #define CONFIG_VP9_PARSER 1 -#define CONFIG_ASYNC_PROTOCOL 0 -#define CONFIG_BLURAY_PROTOCOL 0 -#define CONFIG_CACHE_PROTOCOL 0 -#define CONFIG_CONCAT_PROTOCOL 0 -#define CONFIG_CRYPTO_PROTOCOL 0 -#define CONFIG_DATA_PROTOCOL 0 -#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -#define CONFIG_FILE_PROTOCOL 0 -#define CONFIG_FTP_PROTOCOL 0 -#define CONFIG_GOPHER_PROTOCOL 0 -#define CONFIG_HLS_PROTOCOL 0 -#define CONFIG_HTTP_PROTOCOL 0 -#define CONFIG_HTTPPROXY_PROTOCOL 0 -#define CONFIG_HTTPS_PROTOCOL 0 -#define CONFIG_ICECAST_PROTOCOL 0 -#define CONFIG_MMSH_PROTOCOL 0 -#define CONFIG_MMST_PROTOCOL 0 -#define CONFIG_MD5_PROTOCOL 0 -#define CONFIG_PIPE_PROTOCOL 0 -#define CONFIG_RTMP_PROTOCOL 0 -#define CONFIG_RTMPE_PROTOCOL 0 -#define CONFIG_RTMPS_PROTOCOL 0 -#define CONFIG_RTMPT_PROTOCOL 0 -#define CONFIG_RTMPTE_PROTOCOL 0 -#define CONFIG_RTMPTS_PROTOCOL 0 -#define CONFIG_RTP_PROTOCOL 0 -#define CONFIG_SCTP_PROTOCOL 0 -#define CONFIG_SRTP_PROTOCOL 0 -#define CONFIG_SUBFILE_PROTOCOL 0 -#define CONFIG_TEE_PROTOCOL 0 -#define CONFIG_TCP_PROTOCOL 0 -#define CONFIG_TLS_GNUTLS_PROTOCOL 0 -#define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -#define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -#define CONFIG_TLS_OPENSSL_PROTOCOL 0 -#define CONFIG_UDP_PROTOCOL 0 -#define CONFIG_UDPLITE_PROTOCOL 0 -#define CONFIG_UNIX_PROTOCOL 0 -#define CONFIG_LIBRTMP_PROTOCOL 0 -#define CONFIG_LIBRTMPE_PROTOCOL 0 -#define CONFIG_LIBRTMPS_PROTOCOL 0 -#define CONFIG_LIBRTMPT_PROTOCOL 0 -#define CONFIG_LIBRTMPTE_PROTOCOL 0 -#define CONFIG_LIBSSH_PROTOCOL 0 -#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ diff --git a/media/ffvpx/config_unix64.asm b/media/ffvpx/config_unix64.asm index 61cfce6a6f0e..120e6e99fc56 100644 --- a/media/ffvpx/config_unix64.asm +++ b/media/ffvpx/config_unix64.asm @@ -369,15 +369,7 @@ %define HAVE_XLIB 0 %define CONFIG_BSFS 0 %define CONFIG_DECODERS 1 -%define CONFIG_ENCODERS 0 -%define CONFIG_HWACCELS 0 %define CONFIG_PARSERS 1 -%define CONFIG_INDEVS 0 -%define CONFIG_OUTDEVS 0 -%define CONFIG_FILTERS 0 -%define CONFIG_DEMUXERS 0 -%define CONFIG_MUXERS 0 -%define CONFIG_PROTOCOLS 0 %define CONFIG_DOC 0 %define CONFIG_HTMLPAGES 0 %define CONFIG_MANPAGES 1 @@ -499,7 +491,6 @@ %define CONFIG_VAAPI 0 %define CONFIG_VDA 0 %define CONFIG_VDPAU 0 -%define CONFIG_VIDEOTOOLBOX_HWACCEL 0 %define CONFIG_XVMC 0 %define CONFIG_FTRAPV 0 %define CONFIG_GRAY 0 @@ -564,7 +555,6 @@ %define CONFIG_FDCTDSP 0 %define CONFIG_FLACDSP 1 %define CONFIG_FMTCONVERT 0 -%define CONFIG_FRAME_THREAD_ENCODER 0 %define CONFIG_G722DSP 0 %define CONFIG_GOLOMB 1 %define CONFIG_GPLV3 0 @@ -640,1569 +630,9 @@ %define CONFIG_REMOVE_EXTRADATA_BSF 0 %define CONFIG_TEXT2MOVSUB_BSF 0 %define CONFIG_VP9_SUPERFRAME_BSF 0 -%define CONFIG_AASC_DECODER 0 -%define CONFIG_AIC_DECODER 0 -%define CONFIG_ALIAS_PIX_DECODER 0 -%define CONFIG_AMV_DECODER 0 -%define CONFIG_ANM_DECODER 0 -%define CONFIG_ANSI_DECODER 0 -%define CONFIG_APNG_DECODER 0 -%define CONFIG_ASV1_DECODER 0 -%define CONFIG_ASV2_DECODER 0 -%define CONFIG_AURA_DECODER 0 -%define CONFIG_AURA2_DECODER 0 -%define CONFIG_AVRP_DECODER 0 -%define CONFIG_AVRN_DECODER 0 -%define CONFIG_AVS_DECODER 0 -%define CONFIG_AVUI_DECODER 0 -%define CONFIG_AYUV_DECODER 0 -%define CONFIG_BETHSOFTVID_DECODER 0 -%define CONFIG_BFI_DECODER 0 -%define CONFIG_BINK_DECODER 0 -%define CONFIG_BMP_DECODER 0 -%define CONFIG_BMV_VIDEO_DECODER 0 -%define CONFIG_BRENDER_PIX_DECODER 0 -%define CONFIG_C93_DECODER 0 -%define CONFIG_CAVS_DECODER 0 -%define CONFIG_CDGRAPHICS_DECODER 0 -%define CONFIG_CDXL_DECODER 0 -%define CONFIG_CFHD_DECODER 0 -%define CONFIG_CINEPAK_DECODER 0 -%define CONFIG_CLJR_DECODER 0 -%define CONFIG_CLLC_DECODER 0 -%define CONFIG_COMFORTNOISE_DECODER 0 -%define CONFIG_CPIA_DECODER 0 -%define CONFIG_CSCD_DECODER 0 -%define CONFIG_CYUV_DECODER 0 -%define CONFIG_DDS_DECODER 0 -%define CONFIG_DFA_DECODER 0 -%define CONFIG_DIRAC_DECODER 0 -%define CONFIG_DNXHD_DECODER 0 -%define CONFIG_DPX_DECODER 0 -%define CONFIG_DSICINVIDEO_DECODER 0 -%define CONFIG_DVAUDIO_DECODER 0 -%define CONFIG_DVVIDEO_DECODER 0 -%define CONFIG_DXA_DECODER 0 -%define CONFIG_DXTORY_DECODER 0 -%define CONFIG_DXV_DECODER 0 -%define CONFIG_EACMV_DECODER 0 -%define CONFIG_EAMAD_DECODER 0 -%define CONFIG_EATGQ_DECODER 0 -%define CONFIG_EATGV_DECODER 0 -%define CONFIG_EATQI_DECODER 0 -%define CONFIG_EIGHTBPS_DECODER 0 -%define CONFIG_EIGHTSVX_EXP_DECODER 0 -%define CONFIG_EIGHTSVX_FIB_DECODER 0 -%define CONFIG_ESCAPE124_DECODER 0 -%define CONFIG_ESCAPE130_DECODER 0 -%define CONFIG_EXR_DECODER 0 -%define CONFIG_FFV1_DECODER 0 -%define CONFIG_FFVHUFF_DECODER 0 -%define CONFIG_FIC_DECODER 0 -%define CONFIG_FLASHSV_DECODER 0 -%define CONFIG_FLASHSV2_DECODER 0 -%define CONFIG_FLIC_DECODER 0 -%define CONFIG_FLV_DECODER 0 -%define CONFIG_FOURXM_DECODER 0 -%define CONFIG_FRAPS_DECODER 0 -%define CONFIG_FRWU_DECODER 0 -%define CONFIG_G2M_DECODER 0 -%define CONFIG_GIF_DECODER 0 -%define CONFIG_H261_DECODER 0 -%define CONFIG_H263_DECODER 0 -%define CONFIG_H263I_DECODER 0 -%define CONFIG_H263P_DECODER 0 -%define CONFIG_H264_DECODER 0 -%define CONFIG_H264_CRYSTALHD_DECODER 0 -%define CONFIG_H264_MEDIACODEC_DECODER 0 -%define CONFIG_H264_MMAL_DECODER 0 -%define CONFIG_H264_QSV_DECODER 0 -%define CONFIG_H264_VDA_DECODER 0 -%define CONFIG_H264_VDPAU_DECODER 0 -%define CONFIG_HAP_DECODER 0 -%define CONFIG_HEVC_DECODER 0 -%define CONFIG_HEVC_QSV_DECODER 0 -%define CONFIG_HNM4_VIDEO_DECODER 0 -%define CONFIG_HQ_HQA_DECODER 0 -%define CONFIG_HQX_DECODER 0 -%define CONFIG_HUFFYUV_DECODER 0 -%define CONFIG_IDCIN_DECODER 0 -%define CONFIG_IFF_ILBM_DECODER 0 -%define CONFIG_INDEO2_DECODER 0 -%define CONFIG_INDEO3_DECODER 0 -%define CONFIG_INDEO4_DECODER 0 -%define CONFIG_INDEO5_DECODER 0 -%define CONFIG_INTERPLAY_VIDEO_DECODER 0 -%define CONFIG_JPEG2000_DECODER 0 -%define CONFIG_JPEGLS_DECODER 0 -%define CONFIG_JV_DECODER 0 -%define CONFIG_KGV1_DECODER 0 -%define CONFIG_KMVC_DECODER 0 -%define CONFIG_LAGARITH_DECODER 0 -%define CONFIG_LOCO_DECODER 0 -%define CONFIG_M101_DECODER 0 -%define CONFIG_MAGICYUV_DECODER 0 -%define CONFIG_MDEC_DECODER 0 -%define CONFIG_MIMIC_DECODER 0 -%define CONFIG_MJPEG_DECODER 0 -%define CONFIG_MJPEGB_DECODER 0 -%define CONFIG_MMVIDEO_DECODER 0 -%define CONFIG_MOTIONPIXELS_DECODER 0 -%define CONFIG_MPEG_XVMC_DECODER 0 -%define CONFIG_MPEG1VIDEO_DECODER 0 -%define CONFIG_MPEG2VIDEO_DECODER 0 -%define CONFIG_MPEG4_DECODER 0 -%define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG4_MMAL_DECODER 0 -%define CONFIG_MPEG4_VDPAU_DECODER 0 -%define CONFIG_MPEGVIDEO_DECODER 0 -%define CONFIG_MPEG_VDPAU_DECODER 0 -%define CONFIG_MPEG1_VDPAU_DECODER 0 -%define CONFIG_MPEG2_MMAL_DECODER 0 -%define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG2_QSV_DECODER 0 -%define CONFIG_MSA1_DECODER 0 -%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MSMPEG4V1_DECODER 0 -%define CONFIG_MSMPEG4V2_DECODER 0 -%define CONFIG_MSMPEG4V3_DECODER 0 -%define CONFIG_MSRLE_DECODER 0 -%define CONFIG_MSS1_DECODER 0 -%define CONFIG_MSS2_DECODER 0 -%define CONFIG_MSVIDEO1_DECODER 0 -%define CONFIG_MSZH_DECODER 0 -%define CONFIG_MTS2_DECODER 0 -%define CONFIG_MVC1_DECODER 0 -%define CONFIG_MVC2_DECODER 0 -%define CONFIG_MXPEG_DECODER 0 -%define CONFIG_NUV_DECODER 0 -%define CONFIG_PAF_VIDEO_DECODER 0 -%define CONFIG_PAM_DECODER 0 -%define CONFIG_PBM_DECODER 0 -%define CONFIG_PCX_DECODER 0 -%define CONFIG_PGM_DECODER 0 -%define CONFIG_PGMYUV_DECODER 0 -%define CONFIG_PICTOR_DECODER 0 -%define CONFIG_PNG_DECODER 0 -%define CONFIG_PPM_DECODER 0 -%define CONFIG_PRORES_DECODER 0 -%define CONFIG_PRORES_LGPL_DECODER 0 -%define CONFIG_PTX_DECODER 0 -%define CONFIG_QDRAW_DECODER 0 -%define CONFIG_QPEG_DECODER 0 -%define CONFIG_QTRLE_DECODER 0 -%define CONFIG_R10K_DECODER 0 -%define CONFIG_R210_DECODER 0 -%define CONFIG_RAWVIDEO_DECODER 0 -%define CONFIG_RL2_DECODER 0 -%define CONFIG_ROQ_DECODER 0 -%define CONFIG_RPZA_DECODER 0 -%define CONFIG_RSCC_DECODER 0 -%define CONFIG_RV10_DECODER 0 -%define CONFIG_RV20_DECODER 0 -%define CONFIG_RV30_DECODER 0 -%define CONFIG_RV40_DECODER 0 -%define CONFIG_S302M_DECODER 0 -%define CONFIG_SANM_DECODER 0 -%define CONFIG_SCREENPRESSO_DECODER 0 -%define CONFIG_SDX2_DPCM_DECODER 0 -%define CONFIG_SGI_DECODER 0 -%define CONFIG_SGIRLE_DECODER 0 -%define CONFIG_SHEERVIDEO_DECODER 0 -%define CONFIG_SMACKER_DECODER 0 -%define CONFIG_SMC_DECODER 0 -%define CONFIG_SMVJPEG_DECODER 0 -%define CONFIG_SNOW_DECODER 0 -%define CONFIG_SP5X_DECODER 0 -%define CONFIG_SUNRAST_DECODER 0 -%define CONFIG_SVQ1_DECODER 0 -%define CONFIG_SVQ3_DECODER 0 -%define CONFIG_TARGA_DECODER 0 -%define CONFIG_TARGA_Y216_DECODER 0 -%define CONFIG_TDSC_DECODER 0 -%define CONFIG_THEORA_DECODER 0 -%define CONFIG_THP_DECODER 0 -%define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -%define CONFIG_TIFF_DECODER 0 -%define CONFIG_TMV_DECODER 0 -%define CONFIG_TRUEMOTION1_DECODER 0 -%define CONFIG_TRUEMOTION2_DECODER 0 -%define CONFIG_TRUEMOTION2RT_DECODER 0 -%define CONFIG_TSCC_DECODER 0 -%define CONFIG_TSCC2_DECODER 0 -%define CONFIG_TXD_DECODER 0 -%define CONFIG_ULTI_DECODER 0 -%define CONFIG_UTVIDEO_DECODER 0 -%define CONFIG_V210_DECODER 0 -%define CONFIG_V210X_DECODER 0 -%define CONFIG_V308_DECODER 0 -%define CONFIG_V408_DECODER 0 -%define CONFIG_V410_DECODER 0 -%define CONFIG_VB_DECODER 0 -%define CONFIG_VBLE_DECODER 0 -%define CONFIG_VC1_DECODER 0 -%define CONFIG_VC1_CRYSTALHD_DECODER 0 -%define CONFIG_VC1_VDPAU_DECODER 0 -%define CONFIG_VC1IMAGE_DECODER 0 -%define CONFIG_VC1_MMAL_DECODER 0 -%define CONFIG_VC1_QSV_DECODER 0 -%define CONFIG_VCR1_DECODER 0 -%define CONFIG_VMDVIDEO_DECODER 0 -%define CONFIG_VMNC_DECODER 0 -%define CONFIG_VP3_DECODER 0 -%define CONFIG_VP5_DECODER 0 -%define CONFIG_VP6_DECODER 0 -%define CONFIG_VP6A_DECODER 0 -%define CONFIG_VP6F_DECODER 0 -%define CONFIG_VP7_DECODER 0 %define CONFIG_VP8_DECODER 1 %define CONFIG_VP9_DECODER 1 -%define CONFIG_VQA_DECODER 0 -%define CONFIG_WEBP_DECODER 0 -%define CONFIG_WMV1_DECODER 0 -%define CONFIG_WMV2_DECODER 0 -%define CONFIG_WMV3_DECODER 0 -%define CONFIG_WMV3_CRYSTALHD_DECODER 0 -%define CONFIG_WMV3_VDPAU_DECODER 0 -%define CONFIG_WMV3IMAGE_DECODER 0 -%define CONFIG_WNV1_DECODER 0 -%define CONFIG_XAN_WC3_DECODER 0 -%define CONFIG_XAN_WC4_DECODER 0 -%define CONFIG_XBM_DECODER 0 -%define CONFIG_XFACE_DECODER 0 -%define CONFIG_XL_DECODER 0 -%define CONFIG_XWD_DECODER 0 -%define CONFIG_Y41P_DECODER 0 -%define CONFIG_YLC_DECODER 0 -%define CONFIG_YOP_DECODER 0 -%define CONFIG_YUV4_DECODER 0 -%define CONFIG_ZERO12V_DECODER 0 -%define CONFIG_ZEROCODEC_DECODER 0 -%define CONFIG_ZLIB_DECODER 0 -%define CONFIG_ZMBV_DECODER 0 -%define CONFIG_AAC_DECODER 0 -%define CONFIG_AAC_FIXED_DECODER 0 -%define CONFIG_AAC_LATM_DECODER 0 -%define CONFIG_AC3_DECODER 0 -%define CONFIG_AC3_FIXED_DECODER 0 -%define CONFIG_ALAC_DECODER 0 -%define CONFIG_ALS_DECODER 0 -%define CONFIG_AMRNB_DECODER 0 -%define CONFIG_AMRWB_DECODER 0 -%define CONFIG_APE_DECODER 0 -%define CONFIG_ATRAC1_DECODER 0 -%define CONFIG_ATRAC3_DECODER 0 -%define CONFIG_ATRAC3P_DECODER 0 -%define CONFIG_BINKAUDIO_DCT_DECODER 0 -%define CONFIG_BINKAUDIO_RDFT_DECODER 0 -%define CONFIG_BMV_AUDIO_DECODER 0 -%define CONFIG_COOK_DECODER 0 -%define CONFIG_DCA_DECODER 0 -%define CONFIG_DSD_LSBF_DECODER 0 -%define CONFIG_DSD_MSBF_DECODER 0 -%define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -%define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -%define CONFIG_DSICINAUDIO_DECODER 0 -%define CONFIG_DSS_SP_DECODER 0 -%define CONFIG_DST_DECODER 0 -%define CONFIG_EAC3_DECODER 0 -%define CONFIG_EVRC_DECODER 0 -%define CONFIG_FFWAVESYNTH_DECODER 0 %define CONFIG_FLAC_DECODER 1 -%define CONFIG_G723_1_DECODER 0 -%define CONFIG_G729_DECODER 0 -%define CONFIG_GSM_DECODER 0 -%define CONFIG_GSM_MS_DECODER 0 -%define CONFIG_IAC_DECODER 0 -%define CONFIG_IMC_DECODER 0 -%define CONFIG_INTERPLAY_ACM_DECODER 0 -%define CONFIG_MACE3_DECODER 0 -%define CONFIG_MACE6_DECODER 0 -%define CONFIG_METASOUND_DECODER 0 -%define CONFIG_MLP_DECODER 0 -%define CONFIG_MP1_DECODER 0 -%define CONFIG_MP1FLOAT_DECODER 0 -%define CONFIG_MP2_DECODER 0 -%define CONFIG_MP2FLOAT_DECODER 0 -%define CONFIG_MP3_DECODER 0 -%define CONFIG_MP3FLOAT_DECODER 0 -%define CONFIG_MP3ADU_DECODER 0 -%define CONFIG_MP3ADUFLOAT_DECODER 0 -%define CONFIG_MP3ON4_DECODER 0 -%define CONFIG_MP3ON4FLOAT_DECODER 0 -%define CONFIG_MPC7_DECODER 0 -%define CONFIG_MPC8_DECODER 0 -%define CONFIG_NELLYMOSER_DECODER 0 -%define CONFIG_ON2AVC_DECODER 0 -%define CONFIG_OPUS_DECODER 0 -%define CONFIG_PAF_AUDIO_DECODER 0 -%define CONFIG_QCELP_DECODER 0 -%define CONFIG_QDM2_DECODER 0 -%define CONFIG_RA_144_DECODER 0 -%define CONFIG_RA_288_DECODER 0 -%define CONFIG_RALF_DECODER 0 -%define CONFIG_SHORTEN_DECODER 0 -%define CONFIG_SIPR_DECODER 0 -%define CONFIG_SMACKAUD_DECODER 0 -%define CONFIG_SONIC_DECODER 0 -%define CONFIG_TAK_DECODER 0 -%define CONFIG_TRUEHD_DECODER 0 -%define CONFIG_TRUESPEECH_DECODER 0 -%define CONFIG_TTA_DECODER 0 -%define CONFIG_TWINVQ_DECODER 0 -%define CONFIG_VMDAUDIO_DECODER 0 -%define CONFIG_VORBIS_DECODER 0 -%define CONFIG_WAVPACK_DECODER 0 -%define CONFIG_WMALOSSLESS_DECODER 0 -%define CONFIG_WMAPRO_DECODER 0 -%define CONFIG_WMAV1_DECODER 0 -%define CONFIG_WMAV2_DECODER 0 -%define CONFIG_WMAVOICE_DECODER 0 -%define CONFIG_WS_SND1_DECODER 0 -%define CONFIG_XMA1_DECODER 0 -%define CONFIG_XMA2_DECODER 0 -%define CONFIG_PCM_ALAW_DECODER 0 -%define CONFIG_PCM_BLURAY_DECODER 0 -%define CONFIG_PCM_DVD_DECODER 0 -%define CONFIG_PCM_F32BE_DECODER 0 -%define CONFIG_PCM_F32LE_DECODER 0 -%define CONFIG_PCM_F64BE_DECODER 0 -%define CONFIG_PCM_F64LE_DECODER 0 -%define CONFIG_PCM_LXF_DECODER 0 -%define CONFIG_PCM_MULAW_DECODER 0 -%define CONFIG_PCM_S8_DECODER 0 -%define CONFIG_PCM_S8_PLANAR_DECODER 0 -%define CONFIG_PCM_S16BE_DECODER 0 -%define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -%define CONFIG_PCM_S16LE_DECODER 0 -%define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S24BE_DECODER 0 -%define CONFIG_PCM_S24DAUD_DECODER 0 -%define CONFIG_PCM_S24LE_DECODER 0 -%define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S32BE_DECODER 0 -%define CONFIG_PCM_S32LE_DECODER 0 -%define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S64BE_DECODER 0 -%define CONFIG_PCM_S64LE_DECODER 0 -%define CONFIG_PCM_U8_DECODER 0 -%define CONFIG_PCM_U16BE_DECODER 0 -%define CONFIG_PCM_U16LE_DECODER 0 -%define CONFIG_PCM_U24BE_DECODER 0 -%define CONFIG_PCM_U24LE_DECODER 0 -%define CONFIG_PCM_U32BE_DECODER 0 -%define CONFIG_PCM_U32LE_DECODER 0 -%define CONFIG_PCM_ZORK_DECODER 0 -%define CONFIG_INTERPLAY_DPCM_DECODER 0 -%define CONFIG_ROQ_DPCM_DECODER 0 -%define CONFIG_SOL_DPCM_DECODER 0 -%define CONFIG_XAN_DPCM_DECODER 0 -%define CONFIG_ADPCM_4XM_DECODER 0 -%define CONFIG_ADPCM_ADX_DECODER 0 -%define CONFIG_ADPCM_AFC_DECODER 0 -%define CONFIG_ADPCM_AICA_DECODER 0 -%define CONFIG_ADPCM_CT_DECODER 0 -%define CONFIG_ADPCM_DTK_DECODER 0 -%define CONFIG_ADPCM_EA_DECODER 0 -%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -%define CONFIG_ADPCM_EA_R1_DECODER 0 -%define CONFIG_ADPCM_EA_R2_DECODER 0 -%define CONFIG_ADPCM_EA_R3_DECODER 0 -%define CONFIG_ADPCM_EA_XAS_DECODER 0 -%define CONFIG_ADPCM_G722_DECODER 0 -%define CONFIG_ADPCM_G726_DECODER 0 -%define CONFIG_ADPCM_G726LE_DECODER 0 -%define CONFIG_ADPCM_IMA_AMV_DECODER 0 -%define CONFIG_ADPCM_IMA_APC_DECODER 0 -%define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -%define CONFIG_ADPCM_IMA_DK3_DECODER 0 -%define CONFIG_ADPCM_IMA_DK4_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -%define CONFIG_ADPCM_IMA_ISS_DECODER 0 -%define CONFIG_ADPCM_IMA_OKI_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_DECODER 0 -%define CONFIG_ADPCM_IMA_RAD_DECODER 0 -%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -%define CONFIG_ADPCM_IMA_WAV_DECODER 0 -%define CONFIG_ADPCM_IMA_WS_DECODER 0 -%define CONFIG_ADPCM_MS_DECODER 0 -%define CONFIG_ADPCM_MTAF_DECODER 0 -%define CONFIG_ADPCM_PSX_DECODER 0 -%define CONFIG_ADPCM_SBPRO_2_DECODER 0 -%define CONFIG_ADPCM_SBPRO_3_DECODER 0 -%define CONFIG_ADPCM_SBPRO_4_DECODER 0 -%define CONFIG_ADPCM_SWF_DECODER 0 -%define CONFIG_ADPCM_THP_DECODER 0 -%define CONFIG_ADPCM_THP_LE_DECODER 0 -%define CONFIG_ADPCM_VIMA_DECODER 0 -%define CONFIG_ADPCM_XA_DECODER 0 -%define CONFIG_ADPCM_YAMAHA_DECODER 0 -%define CONFIG_SSA_DECODER 0 -%define CONFIG_ASS_DECODER 0 -%define CONFIG_CCAPTION_DECODER 0 -%define CONFIG_DVBSUB_DECODER 0 -%define CONFIG_DVDSUB_DECODER 0 -%define CONFIG_JACOSUB_DECODER 0 -%define CONFIG_MICRODVD_DECODER 0 -%define CONFIG_MOVTEXT_DECODER 0 -%define CONFIG_MPL2_DECODER 0 -%define CONFIG_PGSSUB_DECODER 0 -%define CONFIG_PJS_DECODER 0 -%define CONFIG_REALTEXT_DECODER 0 -%define CONFIG_SAMI_DECODER 0 -%define CONFIG_SRT_DECODER 0 -%define CONFIG_STL_DECODER 0 -%define CONFIG_SUBRIP_DECODER 0 -%define CONFIG_SUBVIEWER_DECODER 0 -%define CONFIG_SUBVIEWER1_DECODER 0 -%define CONFIG_TEXT_DECODER 0 -%define CONFIG_VPLAYER_DECODER 0 -%define CONFIG_WEBVTT_DECODER 0 -%define CONFIG_XSUB_DECODER 0 -%define CONFIG_AAC_AT_DECODER 0 -%define CONFIG_AC3_AT_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -%define CONFIG_ALAC_AT_DECODER 0 -%define CONFIG_AMR_NB_AT_DECODER 0 -%define CONFIG_EAC3_AT_DECODER 0 -%define CONFIG_GSM_MS_AT_DECODER 0 -%define CONFIG_ILBC_AT_DECODER 0 -%define CONFIG_MP1_AT_DECODER 0 -%define CONFIG_MP2_AT_DECODER 0 -%define CONFIG_MP3_AT_DECODER 0 -%define CONFIG_PCM_ALAW_AT_DECODER 0 -%define CONFIG_PCM_MULAW_AT_DECODER 0 -%define CONFIG_QDMC_AT_DECODER 0 -%define CONFIG_QDM2_AT_DECODER 0 -%define CONFIG_LIBCELT_DECODER 0 -%define CONFIG_LIBFDK_AAC_DECODER 0 -%define CONFIG_LIBGSM_DECODER 0 -%define CONFIG_LIBGSM_MS_DECODER 0 -%define CONFIG_LIBILBC_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -%define CONFIG_LIBOPENJPEG_DECODER 0 -%define CONFIG_LIBOPUS_DECODER 0 -%define CONFIG_LIBSCHROEDINGER_DECODER 0 -%define CONFIG_LIBSPEEX_DECODER 0 -%define CONFIG_LIBVORBIS_DECODER 0 -%define CONFIG_LIBVPX_VP8_DECODER 0 -%define CONFIG_LIBVPX_VP9_DECODER 0 -%define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -%define CONFIG_BINTEXT_DECODER 0 -%define CONFIG_XBIN_DECODER 0 -%define CONFIG_IDF_DECODER 0 -%define CONFIG_LIBOPENH264_DECODER 0 -%define CONFIG_H263_CUVID_DECODER 0 -%define CONFIG_H264_CUVID_DECODER 0 -%define CONFIG_HEVC_CUVID_DECODER 0 -%define CONFIG_HEVC_MEDIACODEC_DECODER 0 -%define CONFIG_MJPEG_CUVID_DECODER 0 -%define CONFIG_MPEG1_CUVID_DECODER 0 -%define CONFIG_MPEG2_CUVID_DECODER 0 -%define CONFIG_MPEG4_CUVID_DECODER 0 -%define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -%define CONFIG_VC1_CUVID_DECODER 0 -%define CONFIG_VP8_CUVID_DECODER 0 -%define CONFIG_VP8_MEDIACODEC_DECODER 0 -%define CONFIG_VP9_CUVID_DECODER 0 -%define CONFIG_VP9_MEDIACODEC_DECODER 0 -%define CONFIG_AA_DEMUXER 0 -%define CONFIG_AAC_DEMUXER 0 -%define CONFIG_AC3_DEMUXER 0 -%define CONFIG_ACM_DEMUXER 0 -%define CONFIG_ACT_DEMUXER 0 -%define CONFIG_ADF_DEMUXER 0 -%define CONFIG_ADP_DEMUXER 0 -%define CONFIG_ADS_DEMUXER 0 -%define CONFIG_ADX_DEMUXER 0 -%define CONFIG_AEA_DEMUXER 0 -%define CONFIG_AFC_DEMUXER 0 -%define CONFIG_AIFF_DEMUXER 0 -%define CONFIG_AIX_DEMUXER 0 -%define CONFIG_AMR_DEMUXER 0 -%define CONFIG_ANM_DEMUXER 0 -%define CONFIG_APC_DEMUXER 0 -%define CONFIG_APE_DEMUXER 0 -%define CONFIG_APNG_DEMUXER 0 -%define CONFIG_AQTITLE_DEMUXER 0 -%define CONFIG_ASF_DEMUXER 0 -%define CONFIG_ASF_O_DEMUXER 0 -%define CONFIG_ASS_DEMUXER 0 -%define CONFIG_AST_DEMUXER 0 -%define CONFIG_AU_DEMUXER 0 -%define CONFIG_AVI_DEMUXER 0 -%define CONFIG_AVISYNTH_DEMUXER 0 -%define CONFIG_AVR_DEMUXER 0 -%define CONFIG_AVS_DEMUXER 0 -%define CONFIG_BETHSOFTVID_DEMUXER 0 -%define CONFIG_BFI_DEMUXER 0 -%define CONFIG_BINTEXT_DEMUXER 0 -%define CONFIG_BINK_DEMUXER 0 -%define CONFIG_BIT_DEMUXER 0 -%define CONFIG_BMV_DEMUXER 0 -%define CONFIG_BFSTM_DEMUXER 0 -%define CONFIG_BRSTM_DEMUXER 0 -%define CONFIG_BOA_DEMUXER 0 -%define CONFIG_C93_DEMUXER 0 -%define CONFIG_CAF_DEMUXER 0 -%define CONFIG_CAVSVIDEO_DEMUXER 0 -%define CONFIG_CDG_DEMUXER 0 -%define CONFIG_CDXL_DEMUXER 0 -%define CONFIG_CINE_DEMUXER 0 -%define CONFIG_CONCAT_DEMUXER 0 -%define CONFIG_DATA_DEMUXER 0 -%define CONFIG_DAUD_DEMUXER 0 -%define CONFIG_DCSTR_DEMUXER 0 -%define CONFIG_DFA_DEMUXER 0 -%define CONFIG_DIRAC_DEMUXER 0 -%define CONFIG_DNXHD_DEMUXER 0 -%define CONFIG_DSF_DEMUXER 0 -%define CONFIG_DSICIN_DEMUXER 0 -%define CONFIG_DSS_DEMUXER 0 -%define CONFIG_DTS_DEMUXER 0 -%define CONFIG_DTSHD_DEMUXER 0 -%define CONFIG_DV_DEMUXER 0 -%define CONFIG_DVBSUB_DEMUXER 0 -%define CONFIG_DVBTXT_DEMUXER 0 -%define CONFIG_DXA_DEMUXER 0 -%define CONFIG_EA_DEMUXER 0 -%define CONFIG_EA_CDATA_DEMUXER 0 -%define CONFIG_EAC3_DEMUXER 0 -%define CONFIG_EPAF_DEMUXER 0 -%define CONFIG_FFM_DEMUXER 0 -%define CONFIG_FFMETADATA_DEMUXER 0 -%define CONFIG_FILMSTRIP_DEMUXER 0 -%define CONFIG_FLAC_DEMUXER 0 -%define CONFIG_FLIC_DEMUXER 0 -%define CONFIG_FLV_DEMUXER 0 -%define CONFIG_LIVE_FLV_DEMUXER 0 -%define CONFIG_FOURXM_DEMUXER 0 -%define CONFIG_FRM_DEMUXER 0 -%define CONFIG_FSB_DEMUXER 0 -%define CONFIG_G722_DEMUXER 0 -%define CONFIG_G723_1_DEMUXER 0 -%define CONFIG_G729_DEMUXER 0 -%define CONFIG_GENH_DEMUXER 0 -%define CONFIG_GIF_DEMUXER 0 -%define CONFIG_GSM_DEMUXER 0 -%define CONFIG_GXF_DEMUXER 0 -%define CONFIG_H261_DEMUXER 0 -%define CONFIG_H263_DEMUXER 0 -%define CONFIG_H264_DEMUXER 0 -%define CONFIG_HEVC_DEMUXER 0 -%define CONFIG_HLS_DEMUXER 0 -%define CONFIG_HNM_DEMUXER 0 -%define CONFIG_ICO_DEMUXER 0 -%define CONFIG_IDCIN_DEMUXER 0 -%define CONFIG_IDF_DEMUXER 0 -%define CONFIG_IFF_DEMUXER 0 -%define CONFIG_ILBC_DEMUXER 0 -%define CONFIG_IMAGE2_DEMUXER 0 -%define CONFIG_IMAGE2PIPE_DEMUXER 0 -%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -%define CONFIG_INGENIENT_DEMUXER 0 -%define CONFIG_IPMOVIE_DEMUXER 0 -%define CONFIG_IRCAM_DEMUXER 0 -%define CONFIG_ISS_DEMUXER 0 -%define CONFIG_IV8_DEMUXER 0 -%define CONFIG_IVF_DEMUXER 0 -%define CONFIG_IVR_DEMUXER 0 -%define CONFIG_JACOSUB_DEMUXER 0 -%define CONFIG_JV_DEMUXER 0 -%define CONFIG_LMLM4_DEMUXER 0 -%define CONFIG_LOAS_DEMUXER 0 -%define CONFIG_LRC_DEMUXER 0 -%define CONFIG_LVF_DEMUXER 0 -%define CONFIG_LXF_DEMUXER 0 -%define CONFIG_M4V_DEMUXER 0 -%define CONFIG_MATROSKA_DEMUXER 0 -%define CONFIG_MGSTS_DEMUXER 0 -%define CONFIG_MICRODVD_DEMUXER 0 -%define CONFIG_MJPEG_DEMUXER 0 -%define CONFIG_MLP_DEMUXER 0 -%define CONFIG_MLV_DEMUXER 0 -%define CONFIG_MM_DEMUXER 0 -%define CONFIG_MMF_DEMUXER 0 -%define CONFIG_MOV_DEMUXER 0 -%define CONFIG_MP3_DEMUXER 0 -%define CONFIG_MPC_DEMUXER 0 -%define CONFIG_MPC8_DEMUXER 0 -%define CONFIG_MPEGPS_DEMUXER 0 -%define CONFIG_MPEGTS_DEMUXER 0 -%define CONFIG_MPEGTSRAW_DEMUXER 0 -%define CONFIG_MPEGVIDEO_DEMUXER 0 -%define CONFIG_MPJPEG_DEMUXER 0 -%define CONFIG_MPL2_DEMUXER 0 -%define CONFIG_MPSUB_DEMUXER 0 -%define CONFIG_MSF_DEMUXER 0 -%define CONFIG_MSNWC_TCP_DEMUXER 0 -%define CONFIG_MTAF_DEMUXER 0 -%define CONFIG_MTV_DEMUXER 0 -%define CONFIG_MUSX_DEMUXER 0 -%define CONFIG_MV_DEMUXER 0 -%define CONFIG_MVI_DEMUXER 0 -%define CONFIG_MXF_DEMUXER 0 -%define CONFIG_MXG_DEMUXER 0 -%define CONFIG_NC_DEMUXER 0 -%define CONFIG_NISTSPHERE_DEMUXER 0 -%define CONFIG_NSV_DEMUXER 0 -%define CONFIG_NUT_DEMUXER 0 -%define CONFIG_NUV_DEMUXER 0 -%define CONFIG_OGG_DEMUXER 0 -%define CONFIG_OMA_DEMUXER 0 -%define CONFIG_PAF_DEMUXER 0 -%define CONFIG_PCM_ALAW_DEMUXER 0 -%define CONFIG_PCM_MULAW_DEMUXER 0 -%define CONFIG_PCM_F64BE_DEMUXER 0 -%define CONFIG_PCM_F64LE_DEMUXER 0 -%define CONFIG_PCM_F32BE_DEMUXER 0 -%define CONFIG_PCM_F32LE_DEMUXER 0 -%define CONFIG_PCM_S32BE_DEMUXER 0 -%define CONFIG_PCM_S32LE_DEMUXER 0 -%define CONFIG_PCM_S24BE_DEMUXER 0 -%define CONFIG_PCM_S24LE_DEMUXER 0 -%define CONFIG_PCM_S16BE_DEMUXER 0 -%define CONFIG_PCM_S16LE_DEMUXER 0 -%define CONFIG_PCM_S8_DEMUXER 0 -%define CONFIG_PCM_U32BE_DEMUXER 0 -%define CONFIG_PCM_U32LE_DEMUXER 0 -%define CONFIG_PCM_U24BE_DEMUXER 0 -%define CONFIG_PCM_U24LE_DEMUXER 0 -%define CONFIG_PCM_U16BE_DEMUXER 0 -%define CONFIG_PCM_U16LE_DEMUXER 0 -%define CONFIG_PCM_U8_DEMUXER 0 -%define CONFIG_PJS_DEMUXER 0 -%define CONFIG_PMP_DEMUXER 0 -%define CONFIG_PVA_DEMUXER 0 -%define CONFIG_PVF_DEMUXER 0 -%define CONFIG_QCP_DEMUXER 0 -%define CONFIG_R3D_DEMUXER 0 -%define CONFIG_RAWVIDEO_DEMUXER 0 -%define CONFIG_REALTEXT_DEMUXER 0 -%define CONFIG_REDSPARK_DEMUXER 0 -%define CONFIG_RL2_DEMUXER 0 -%define CONFIG_RM_DEMUXER 0 -%define CONFIG_ROQ_DEMUXER 0 -%define CONFIG_RPL_DEMUXER 0 -%define CONFIG_RSD_DEMUXER 0 -%define CONFIG_RSO_DEMUXER 0 -%define CONFIG_RTP_DEMUXER 0 -%define CONFIG_RTSP_DEMUXER 0 -%define CONFIG_SAMI_DEMUXER 0 -%define CONFIG_SAP_DEMUXER 0 -%define CONFIG_SBG_DEMUXER 0 -%define CONFIG_SDP_DEMUXER 0 -%define CONFIG_SDR2_DEMUXER 0 -%define CONFIG_SEGAFILM_DEMUXER 0 -%define CONFIG_SHORTEN_DEMUXER 0 -%define CONFIG_SIFF_DEMUXER 0 -%define CONFIG_SLN_DEMUXER 0 -%define CONFIG_SMACKER_DEMUXER 0 -%define CONFIG_SMJPEG_DEMUXER 0 -%define CONFIG_SMUSH_DEMUXER 0 -%define CONFIG_SOL_DEMUXER 0 -%define CONFIG_SOX_DEMUXER 0 -%define CONFIG_SPDIF_DEMUXER 0 -%define CONFIG_SRT_DEMUXER 0 -%define CONFIG_STR_DEMUXER 0 -%define CONFIG_STL_DEMUXER 0 -%define CONFIG_SUBVIEWER1_DEMUXER 0 -%define CONFIG_SUBVIEWER_DEMUXER 0 -%define CONFIG_SUP_DEMUXER 0 -%define CONFIG_SVAG_DEMUXER 0 -%define CONFIG_SWF_DEMUXER 0 -%define CONFIG_TAK_DEMUXER 0 -%define CONFIG_TEDCAPTIONS_DEMUXER 0 -%define CONFIG_THP_DEMUXER 0 -%define CONFIG_THREEDOSTR_DEMUXER 0 -%define CONFIG_TIERTEXSEQ_DEMUXER 0 -%define CONFIG_TMV_DEMUXER 0 -%define CONFIG_TRUEHD_DEMUXER 0 -%define CONFIG_TTA_DEMUXER 0 -%define CONFIG_TXD_DEMUXER 0 -%define CONFIG_TTY_DEMUXER 0 -%define CONFIG_V210_DEMUXER 0 -%define CONFIG_V210X_DEMUXER 0 -%define CONFIG_VAG_DEMUXER 0 -%define CONFIG_VC1_DEMUXER 0 -%define CONFIG_VC1T_DEMUXER 0 -%define CONFIG_VIVO_DEMUXER 0 -%define CONFIG_VMD_DEMUXER 0 -%define CONFIG_VOBSUB_DEMUXER 0 -%define CONFIG_VOC_DEMUXER 0 -%define CONFIG_VPK_DEMUXER 0 -%define CONFIG_VPLAYER_DEMUXER 0 -%define CONFIG_VQF_DEMUXER 0 -%define CONFIG_W64_DEMUXER 0 -%define CONFIG_WAV_DEMUXER 0 -%define CONFIG_WC3_DEMUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -%define CONFIG_WEBVTT_DEMUXER 0 -%define CONFIG_WSAUD_DEMUXER 0 -%define CONFIG_WSD_DEMUXER 0 -%define CONFIG_WSVQA_DEMUXER 0 -%define CONFIG_WTV_DEMUXER 0 -%define CONFIG_WVE_DEMUXER 0 -%define CONFIG_WV_DEMUXER 0 -%define CONFIG_XA_DEMUXER 0 -%define CONFIG_XBIN_DEMUXER 0 -%define CONFIG_XMV_DEMUXER 0 -%define CONFIG_XVAG_DEMUXER 0 -%define CONFIG_XWMA_DEMUXER 0 -%define CONFIG_YOP_DEMUXER 0 -%define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -%define CONFIG_LIBGME_DEMUXER 0 -%define CONFIG_LIBMODPLUG_DEMUXER 0 -%define CONFIG_LIBNUT_DEMUXER 0 -%define CONFIG_LIBOPENMPT_DEMUXER 0 -%define CONFIG_A64MULTI_ENCODER 0 -%define CONFIG_A64MULTI5_ENCODER 0 -%define CONFIG_ALIAS_PIX_ENCODER 0 -%define CONFIG_AMV_ENCODER 0 -%define CONFIG_APNG_ENCODER 0 -%define CONFIG_ASV1_ENCODER 0 -%define CONFIG_ASV2_ENCODER 0 -%define CONFIG_AVRP_ENCODER 0 -%define CONFIG_AVUI_ENCODER 0 -%define CONFIG_AYUV_ENCODER 0 -%define CONFIG_BMP_ENCODER 0 -%define CONFIG_CINEPAK_ENCODER 0 -%define CONFIG_CLJR_ENCODER 0 -%define CONFIG_COMFORTNOISE_ENCODER 0 -%define CONFIG_DNXHD_ENCODER 0 -%define CONFIG_DPX_ENCODER 0 -%define CONFIG_DVVIDEO_ENCODER 0 -%define CONFIG_FFV1_ENCODER 0 -%define CONFIG_FFVHUFF_ENCODER 0 -%define CONFIG_FLASHSV_ENCODER 0 -%define CONFIG_FLASHSV2_ENCODER 0 -%define CONFIG_FLV_ENCODER 0 -%define CONFIG_GIF_ENCODER 0 -%define CONFIG_H261_ENCODER 0 -%define CONFIG_H263_ENCODER 0 -%define CONFIG_H263P_ENCODER 0 -%define CONFIG_HAP_ENCODER 0 -%define CONFIG_HUFFYUV_ENCODER 0 -%define CONFIG_JPEG2000_ENCODER 0 -%define CONFIG_JPEGLS_ENCODER 0 -%define CONFIG_LJPEG_ENCODER 0 -%define CONFIG_MJPEG_ENCODER 0 -%define CONFIG_MPEG1VIDEO_ENCODER 0 -%define CONFIG_MPEG2VIDEO_ENCODER 0 -%define CONFIG_MPEG4_ENCODER 0 -%define CONFIG_MSMPEG4V2_ENCODER 0 -%define CONFIG_MSMPEG4V3_ENCODER 0 -%define CONFIG_MSVIDEO1_ENCODER 0 -%define CONFIG_PAM_ENCODER 0 -%define CONFIG_PBM_ENCODER 0 -%define CONFIG_PCX_ENCODER 0 -%define CONFIG_PGM_ENCODER 0 -%define CONFIG_PGMYUV_ENCODER 0 -%define CONFIG_PNG_ENCODER 0 -%define CONFIG_PPM_ENCODER 0 -%define CONFIG_PRORES_ENCODER 0 -%define CONFIG_PRORES_AW_ENCODER 0 -%define CONFIG_PRORES_KS_ENCODER 0 -%define CONFIG_QTRLE_ENCODER 0 -%define CONFIG_R10K_ENCODER 0 -%define CONFIG_R210_ENCODER 0 -%define CONFIG_RAWVIDEO_ENCODER 0 -%define CONFIG_ROQ_ENCODER 0 -%define CONFIG_RV10_ENCODER 0 -%define CONFIG_RV20_ENCODER 0 -%define CONFIG_S302M_ENCODER 0 -%define CONFIG_SGI_ENCODER 0 -%define CONFIG_SNOW_ENCODER 0 -%define CONFIG_SUNRAST_ENCODER 0 -%define CONFIG_SVQ1_ENCODER 0 -%define CONFIG_TARGA_ENCODER 0 -%define CONFIG_TIFF_ENCODER 0 -%define CONFIG_UTVIDEO_ENCODER 0 -%define CONFIG_V210_ENCODER 0 -%define CONFIG_V308_ENCODER 0 -%define CONFIG_V408_ENCODER 0 -%define CONFIG_V410_ENCODER 0 -%define CONFIG_VC2_ENCODER 0 -%define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -%define CONFIG_WMV1_ENCODER 0 -%define CONFIG_WMV2_ENCODER 0 -%define CONFIG_XBM_ENCODER 0 -%define CONFIG_XFACE_ENCODER 0 -%define CONFIG_XWD_ENCODER 0 -%define CONFIG_Y41P_ENCODER 0 -%define CONFIG_YUV4_ENCODER 0 -%define CONFIG_ZLIB_ENCODER 0 -%define CONFIG_ZMBV_ENCODER 0 -%define CONFIG_AAC_ENCODER 0 -%define CONFIG_AC3_ENCODER 0 -%define CONFIG_AC3_FIXED_ENCODER 0 -%define CONFIG_ALAC_ENCODER 0 -%define CONFIG_DCA_ENCODER 0 -%define CONFIG_EAC3_ENCODER 0 -%define CONFIG_FLAC_ENCODER 0 -%define CONFIG_G723_1_ENCODER 0 -%define CONFIG_MLP_ENCODER 0 -%define CONFIG_MP2_ENCODER 0 -%define CONFIG_MP2FIXED_ENCODER 0 -%define CONFIG_NELLYMOSER_ENCODER 0 -%define CONFIG_RA_144_ENCODER 0 -%define CONFIG_SONIC_ENCODER 0 -%define CONFIG_SONIC_LS_ENCODER 0 -%define CONFIG_TRUEHD_ENCODER 0 -%define CONFIG_TTA_ENCODER 0 -%define CONFIG_VORBIS_ENCODER 0 -%define CONFIG_WAVPACK_ENCODER 0 -%define CONFIG_WMAV1_ENCODER 0 -%define CONFIG_WMAV2_ENCODER 0 -%define CONFIG_PCM_ALAW_ENCODER 0 -%define CONFIG_PCM_F32BE_ENCODER 0 -%define CONFIG_PCM_F32LE_ENCODER 0 -%define CONFIG_PCM_F64BE_ENCODER 0 -%define CONFIG_PCM_F64LE_ENCODER 0 -%define CONFIG_PCM_MULAW_ENCODER 0 -%define CONFIG_PCM_S8_ENCODER 0 -%define CONFIG_PCM_S8_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16BE_ENCODER 0 -%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16LE_ENCODER 0 -%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S24BE_ENCODER 0 -%define CONFIG_PCM_S24DAUD_ENCODER 0 -%define CONFIG_PCM_S24LE_ENCODER 0 -%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S32BE_ENCODER 0 -%define CONFIG_PCM_S32LE_ENCODER 0 -%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S64BE_ENCODER 0 -%define CONFIG_PCM_S64LE_ENCODER 0 -%define CONFIG_PCM_U8_ENCODER 0 -%define CONFIG_PCM_U16BE_ENCODER 0 -%define CONFIG_PCM_U16LE_ENCODER 0 -%define CONFIG_PCM_U24BE_ENCODER 0 -%define CONFIG_PCM_U24LE_ENCODER 0 -%define CONFIG_PCM_U32BE_ENCODER 0 -%define CONFIG_PCM_U32LE_ENCODER 0 -%define CONFIG_ROQ_DPCM_ENCODER 0 -%define CONFIG_ADPCM_ADX_ENCODER 0 -%define CONFIG_ADPCM_G722_ENCODER 0 -%define CONFIG_ADPCM_G726_ENCODER 0 -%define CONFIG_ADPCM_IMA_QT_ENCODER 0 -%define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -%define CONFIG_ADPCM_MS_ENCODER 0 -%define CONFIG_ADPCM_SWF_ENCODER 0 -%define CONFIG_ADPCM_YAMAHA_ENCODER 0 -%define CONFIG_SSA_ENCODER 0 -%define CONFIG_ASS_ENCODER 0 -%define CONFIG_DVBSUB_ENCODER 0 -%define CONFIG_DVDSUB_ENCODER 0 -%define CONFIG_MOVTEXT_ENCODER 0 -%define CONFIG_SRT_ENCODER 0 -%define CONFIG_SUBRIP_ENCODER 0 -%define CONFIG_TEXT_ENCODER 0 -%define CONFIG_WEBVTT_ENCODER 0 -%define CONFIG_XSUB_ENCODER 0 -%define CONFIG_AAC_AT_ENCODER 0 -%define CONFIG_ALAC_AT_ENCODER 0 -%define CONFIG_ILBC_AT_ENCODER 0 -%define CONFIG_PCM_ALAW_AT_ENCODER 0 -%define CONFIG_PCM_MULAW_AT_ENCODER 0 -%define CONFIG_LIBFDK_AAC_ENCODER 0 -%define CONFIG_LIBGSM_ENCODER 0 -%define CONFIG_LIBGSM_MS_ENCODER 0 -%define CONFIG_LIBILBC_ENCODER 0 -%define CONFIG_LIBMP3LAME_ENCODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -%define CONFIG_LIBOPENJPEG_ENCODER 0 -%define CONFIG_LIBOPUS_ENCODER 0 -%define CONFIG_LIBSCHROEDINGER_ENCODER 0 -%define CONFIG_LIBSHINE_ENCODER 0 -%define CONFIG_LIBSPEEX_ENCODER 0 -%define CONFIG_LIBTHEORA_ENCODER 0 -%define CONFIG_LIBTWOLAME_ENCODER 0 -%define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -%define CONFIG_LIBVORBIS_ENCODER 0 -%define CONFIG_LIBVPX_VP8_ENCODER 0 -%define CONFIG_LIBVPX_VP9_ENCODER 0 -%define CONFIG_LIBWAVPACK_ENCODER 0 -%define CONFIG_LIBWEBP_ANIM_ENCODER 0 -%define CONFIG_LIBWEBP_ENCODER 0 -%define CONFIG_LIBX262_ENCODER 0 -%define CONFIG_LIBX264_ENCODER 0 -%define CONFIG_LIBX264RGB_ENCODER 0 -%define CONFIG_LIBX265_ENCODER 0 -%define CONFIG_LIBXAVS_ENCODER 0 -%define CONFIG_LIBXVID_ENCODER 0 -%define CONFIG_LIBOPENH264_ENCODER 0 -%define CONFIG_H264_NVENC_ENCODER 0 -%define CONFIG_H264_OMX_ENCODER 0 -%define CONFIG_H264_QSV_ENCODER 0 -%define CONFIG_H264_VAAPI_ENCODER 0 -%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -%define CONFIG_NVENC_ENCODER 0 -%define CONFIG_NVENC_H264_ENCODER 0 -%define CONFIG_NVENC_HEVC_ENCODER 0 -%define CONFIG_HEVC_NVENC_ENCODER 0 -%define CONFIG_HEVC_QSV_ENCODER 0 -%define CONFIG_HEVC_VAAPI_ENCODER 0 -%define CONFIG_LIBKVAZAAR_ENCODER 0 -%define CONFIG_MJPEG_VAAPI_ENCODER 0 -%define CONFIG_MPEG2_QSV_ENCODER 0 -%define CONFIG_ABENCH_FILTER 0 -%define CONFIG_ACOMPRESSOR_FILTER 0 -%define CONFIG_ACROSSFADE_FILTER 0 -%define CONFIG_ACRUSHER_FILTER 0 -%define CONFIG_ADELAY_FILTER 0 -%define CONFIG_AECHO_FILTER 0 -%define CONFIG_AEMPHASIS_FILTER 0 -%define CONFIG_AEVAL_FILTER 0 -%define CONFIG_AFADE_FILTER 0 -%define CONFIG_AFFTFILT_FILTER 0 -%define CONFIG_AFORMAT_FILTER 0 -%define CONFIG_AGATE_FILTER 0 -%define CONFIG_AINTERLEAVE_FILTER 0 -%define CONFIG_ALIMITER_FILTER 0 -%define CONFIG_ALLPASS_FILTER 0 -%define CONFIG_ALOOP_FILTER 0 -%define CONFIG_AMERGE_FILTER 0 -%define CONFIG_AMETADATA_FILTER 0 -%define CONFIG_AMIX_FILTER 0 -%define CONFIG_ANEQUALIZER_FILTER 0 -%define CONFIG_ANULL_FILTER 0 -%define CONFIG_APAD_FILTER 0 -%define CONFIG_APERMS_FILTER 0 -%define CONFIG_APHASER_FILTER 0 -%define CONFIG_APULSATOR_FILTER 0 -%define CONFIG_AREALTIME_FILTER 0 -%define CONFIG_ARESAMPLE_FILTER 0 -%define CONFIG_AREVERSE_FILTER 0 -%define CONFIG_ASELECT_FILTER 0 -%define CONFIG_ASENDCMD_FILTER 0 -%define CONFIG_ASETNSAMPLES_FILTER 0 -%define CONFIG_ASETPTS_FILTER 0 -%define CONFIG_ASETRATE_FILTER 0 -%define CONFIG_ASETTB_FILTER 0 -%define CONFIG_ASHOWINFO_FILTER 0 -%define CONFIG_ASIDEDATA_FILTER 0 -%define CONFIG_ASPLIT_FILTER 0 -%define CONFIG_ASTATS_FILTER 0 -%define CONFIG_ASTREAMSELECT_FILTER 0 -%define CONFIG_ASYNCTS_FILTER 0 -%define CONFIG_ATEMPO_FILTER 0 -%define CONFIG_ATRIM_FILTER 0 -%define CONFIG_AZMQ_FILTER 0 -%define CONFIG_BANDPASS_FILTER 0 -%define CONFIG_BANDREJECT_FILTER 0 -%define CONFIG_BASS_FILTER 0 -%define CONFIG_BIQUAD_FILTER 0 -%define CONFIG_BS2B_FILTER 0 -%define CONFIG_CHANNELMAP_FILTER 0 -%define CONFIG_CHANNELSPLIT_FILTER 0 -%define CONFIG_CHORUS_FILTER 0 -%define CONFIG_COMPAND_FILTER 0 -%define CONFIG_COMPENSATIONDELAY_FILTER 0 -%define CONFIG_CRYSTALIZER_FILTER 0 -%define CONFIG_DCSHIFT_FILTER 0 -%define CONFIG_DYNAUDNORM_FILTER 0 -%define CONFIG_EARWAX_FILTER 0 -%define CONFIG_EBUR128_FILTER 0 -%define CONFIG_EQUALIZER_FILTER 0 -%define CONFIG_EXTRASTEREO_FILTER 0 -%define CONFIG_FIREQUALIZER_FILTER 0 -%define CONFIG_FLANGER_FILTER 0 -%define CONFIG_HDCD_FILTER 0 -%define CONFIG_HIGHPASS_FILTER 0 -%define CONFIG_JOIN_FILTER 0 -%define CONFIG_LADSPA_FILTER 0 -%define CONFIG_LOUDNORM_FILTER 0 -%define CONFIG_LOWPASS_FILTER 0 -%define CONFIG_PAN_FILTER 0 -%define CONFIG_REPLAYGAIN_FILTER 0 -%define CONFIG_RESAMPLE_FILTER 0 -%define CONFIG_RUBBERBAND_FILTER 0 -%define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -%define CONFIG_SIDECHAINGATE_FILTER 0 -%define CONFIG_SILENCEDETECT_FILTER 0 -%define CONFIG_SILENCEREMOVE_FILTER 0 -%define CONFIG_SOFALIZER_FILTER 0 -%define CONFIG_STEREOTOOLS_FILTER 0 -%define CONFIG_STEREOWIDEN_FILTER 0 -%define CONFIG_TREBLE_FILTER 0 -%define CONFIG_TREMOLO_FILTER 0 -%define CONFIG_VIBRATO_FILTER 0 -%define CONFIG_VOLUME_FILTER 0 -%define CONFIG_VOLUMEDETECT_FILTER 0 -%define CONFIG_AEVALSRC_FILTER 0 -%define CONFIG_ANOISESRC_FILTER 0 -%define CONFIG_ANULLSRC_FILTER 0 -%define CONFIG_FLITE_FILTER 0 -%define CONFIG_SINE_FILTER 0 -%define CONFIG_ANULLSINK_FILTER 0 -%define CONFIG_ALPHAEXTRACT_FILTER 0 -%define CONFIG_ALPHAMERGE_FILTER 0 -%define CONFIG_ASS_FILTER 0 -%define CONFIG_ATADENOISE_FILTER 0 -%define CONFIG_AVGBLUR_FILTER 0 -%define CONFIG_BBOX_FILTER 0 -%define CONFIG_BENCH_FILTER 0 -%define CONFIG_BITPLANENOISE_FILTER 0 -%define CONFIG_BLACKDETECT_FILTER 0 -%define CONFIG_BLACKFRAME_FILTER 0 -%define CONFIG_BLEND_FILTER 0 -%define CONFIG_BOXBLUR_FILTER 0 -%define CONFIG_BWDIF_FILTER 0 -%define CONFIG_CHROMAKEY_FILTER 0 -%define CONFIG_CIESCOPE_FILTER 0 -%define CONFIG_CODECVIEW_FILTER 0 -%define CONFIG_COLORBALANCE_FILTER 0 -%define CONFIG_COLORCHANNELMIXER_FILTER 0 -%define CONFIG_COLORKEY_FILTER 0 -%define CONFIG_COLORLEVELS_FILTER 0 -%define CONFIG_COLORMATRIX_FILTER 0 -%define CONFIG_COLORSPACE_FILTER 0 -%define CONFIG_CONVOLUTION_FILTER 0 -%define CONFIG_COPY_FILTER 0 -%define CONFIG_COREIMAGE_FILTER 0 -%define CONFIG_COVER_RECT_FILTER 0 -%define CONFIG_CROP_FILTER 0 -%define CONFIG_CROPDETECT_FILTER 0 -%define CONFIG_CURVES_FILTER 0 -%define CONFIG_DATASCOPE_FILTER 0 -%define CONFIG_DCTDNOIZ_FILTER 0 -%define CONFIG_DEBAND_FILTER 0 -%define CONFIG_DECIMATE_FILTER 0 -%define CONFIG_DEFLATE_FILTER 0 -%define CONFIG_DEJUDDER_FILTER 0 -%define CONFIG_DELOGO_FILTER 0 -%define CONFIG_DESHAKE_FILTER 0 -%define CONFIG_DETELECINE_FILTER 0 -%define CONFIG_DILATION_FILTER 0 -%define CONFIG_DISPLACE_FILTER 0 -%define CONFIG_DRAWBOX_FILTER 0 -%define CONFIG_DRAWGRAPH_FILTER 0 -%define CONFIG_DRAWGRID_FILTER 0 -%define CONFIG_DRAWTEXT_FILTER 0 -%define CONFIG_EDGEDETECT_FILTER 0 -%define CONFIG_ELBG_FILTER 0 -%define CONFIG_EQ_FILTER 0 -%define CONFIG_EROSION_FILTER 0 -%define CONFIG_EXTRACTPLANES_FILTER 0 -%define CONFIG_FADE_FILTER 0 -%define CONFIG_FFTFILT_FILTER 0 -%define CONFIG_FIELD_FILTER 0 -%define CONFIG_FIELDHINT_FILTER 0 -%define CONFIG_FIELDMATCH_FILTER 0 -%define CONFIG_FIELDORDER_FILTER 0 -%define CONFIG_FIND_RECT_FILTER 0 -%define CONFIG_FORMAT_FILTER 0 -%define CONFIG_FPS_FILTER 0 -%define CONFIG_FRAMEPACK_FILTER 0 -%define CONFIG_FRAMERATE_FILTER 0 -%define CONFIG_FRAMESTEP_FILTER 0 -%define CONFIG_FREI0R_FILTER 0 -%define CONFIG_FSPP_FILTER 0 -%define CONFIG_GBLUR_FILTER 0 -%define CONFIG_GEQ_FILTER 0 -%define CONFIG_GRADFUN_FILTER 0 -%define CONFIG_HALDCLUT_FILTER 0 -%define CONFIG_HFLIP_FILTER 0 -%define CONFIG_HISTEQ_FILTER 0 -%define CONFIG_HISTOGRAM_FILTER 0 -%define CONFIG_HQDN3D_FILTER 0 -%define CONFIG_HQX_FILTER 0 -%define CONFIG_HSTACK_FILTER 0 -%define CONFIG_HUE_FILTER 0 -%define CONFIG_HWDOWNLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_CUDA_FILTER 0 -%define CONFIG_HYSTERESIS_FILTER 0 -%define CONFIG_IDET_FILTER 0 -%define CONFIG_IL_FILTER 0 -%define CONFIG_INFLATE_FILTER 0 -%define CONFIG_INTERLACE_FILTER 0 -%define CONFIG_INTERLEAVE_FILTER 0 -%define CONFIG_KERNDEINT_FILTER 0 -%define CONFIG_LENSCORRECTION_FILTER 0 -%define CONFIG_LOOP_FILTER 0 -%define CONFIG_LUT_FILTER 0 -%define CONFIG_LUT2_FILTER 0 -%define CONFIG_LUT3D_FILTER 0 -%define CONFIG_LUTRGB_FILTER 0 -%define CONFIG_LUTYUV_FILTER 0 -%define CONFIG_MASKEDCLAMP_FILTER 0 -%define CONFIG_MASKEDMERGE_FILTER 0 -%define CONFIG_MCDEINT_FILTER 0 -%define CONFIG_MERGEPLANES_FILTER 0 -%define CONFIG_MESTIMATE_FILTER 0 -%define CONFIG_METADATA_FILTER 0 -%define CONFIG_MINTERPOLATE_FILTER 0 -%define CONFIG_MPDECIMATE_FILTER 0 -%define CONFIG_NEGATE_FILTER 0 -%define CONFIG_NLMEANS_FILTER 0 -%define CONFIG_NNEDI_FILTER 0 -%define CONFIG_NOFORMAT_FILTER 0 -%define CONFIG_NOISE_FILTER 0 -%define CONFIG_NULL_FILTER 0 -%define CONFIG_OCR_FILTER 0 -%define CONFIG_OCV_FILTER 0 -%define CONFIG_OVERLAY_FILTER 0 -%define CONFIG_OWDENOISE_FILTER 0 -%define CONFIG_PAD_FILTER 0 -%define CONFIG_PALETTEGEN_FILTER 0 -%define CONFIG_PALETTEUSE_FILTER 0 -%define CONFIG_PERMS_FILTER 0 -%define CONFIG_PERSPECTIVE_FILTER 0 -%define CONFIG_PHASE_FILTER 0 -%define CONFIG_PIXDESCTEST_FILTER 0 -%define CONFIG_PP_FILTER 0 -%define CONFIG_PP7_FILTER 0 -%define CONFIG_PREWITT_FILTER 0 -%define CONFIG_PSNR_FILTER 0 -%define CONFIG_PULLUP_FILTER 0 -%define CONFIG_QP_FILTER 0 -%define CONFIG_RANDOM_FILTER 0 -%define CONFIG_READVITC_FILTER 0 -%define CONFIG_REALTIME_FILTER 0 -%define CONFIG_REMAP_FILTER 0 -%define CONFIG_REMOVEGRAIN_FILTER 0 -%define CONFIG_REMOVELOGO_FILTER 0 -%define CONFIG_REPEATFIELDS_FILTER 0 -%define CONFIG_REVERSE_FILTER 0 -%define CONFIG_ROTATE_FILTER 0 -%define CONFIG_SAB_FILTER 0 -%define CONFIG_SCALE_FILTER 0 -%define CONFIG_SCALE_NPP_FILTER 0 -%define CONFIG_SCALE_VAAPI_FILTER 0 -%define CONFIG_SCALE2REF_FILTER 0 -%define CONFIG_SELECT_FILTER 0 -%define CONFIG_SELECTIVECOLOR_FILTER 0 -%define CONFIG_SENDCMD_FILTER 0 -%define CONFIG_SEPARATEFIELDS_FILTER 0 -%define CONFIG_SETDAR_FILTER 0 -%define CONFIG_SETFIELD_FILTER 0 -%define CONFIG_SETPTS_FILTER 0 -%define CONFIG_SETSAR_FILTER 0 -%define CONFIG_SETTB_FILTER 0 -%define CONFIG_SHOWINFO_FILTER 0 -%define CONFIG_SHOWPALETTE_FILTER 0 -%define CONFIG_SHUFFLEFRAMES_FILTER 0 -%define CONFIG_SHUFFLEPLANES_FILTER 0 -%define CONFIG_SIDEDATA_FILTER 0 -%define CONFIG_SIGNALSTATS_FILTER 0 -%define CONFIG_SMARTBLUR_FILTER 0 -%define CONFIG_SOBEL_FILTER 0 -%define CONFIG_SPLIT_FILTER 0 -%define CONFIG_SPP_FILTER 0 -%define CONFIG_SSIM_FILTER 0 -%define CONFIG_STEREO3D_FILTER 0 -%define CONFIG_STREAMSELECT_FILTER 0 -%define CONFIG_SUBTITLES_FILTER 0 -%define CONFIG_SUPER2XSAI_FILTER 0 -%define CONFIG_SWAPRECT_FILTER 0 -%define CONFIG_SWAPUV_FILTER 0 -%define CONFIG_TBLEND_FILTER 0 -%define CONFIG_TELECINE_FILTER 0 -%define CONFIG_THUMBNAIL_FILTER 0 -%define CONFIG_TILE_FILTER 0 -%define CONFIG_TINTERLACE_FILTER 0 -%define CONFIG_TRANSPOSE_FILTER 0 -%define CONFIG_TRIM_FILTER 0 -%define CONFIG_UNSHARP_FILTER 0 -%define CONFIG_USPP_FILTER 0 -%define CONFIG_VAGUEDENOISER_FILTER 0 -%define CONFIG_VECTORSCOPE_FILTER 0 -%define CONFIG_VFLIP_FILTER 0 -%define CONFIG_VIDSTABDETECT_FILTER 0 -%define CONFIG_VIDSTABTRANSFORM_FILTER 0 -%define CONFIG_VIGNETTE_FILTER 0 -%define CONFIG_VSTACK_FILTER 0 -%define CONFIG_W3FDIF_FILTER 0 -%define CONFIG_WAVEFORM_FILTER 0 -%define CONFIG_WEAVE_FILTER 0 -%define CONFIG_XBR_FILTER 0 -%define CONFIG_YADIF_FILTER 0 -%define CONFIG_ZMQ_FILTER 0 -%define CONFIG_ZOOMPAN_FILTER 0 -%define CONFIG_ZSCALE_FILTER 0 -%define CONFIG_ALLRGB_FILTER 0 -%define CONFIG_ALLYUV_FILTER 0 -%define CONFIG_CELLAUTO_FILTER 0 -%define CONFIG_COLOR_FILTER 0 -%define CONFIG_COREIMAGESRC_FILTER 0 -%define CONFIG_FREI0R_SRC_FILTER 0 -%define CONFIG_HALDCLUTSRC_FILTER 0 -%define CONFIG_LIFE_FILTER 0 -%define CONFIG_MANDELBROT_FILTER 0 -%define CONFIG_MPTESTSRC_FILTER 0 -%define CONFIG_NULLSRC_FILTER 0 -%define CONFIG_RGBTESTSRC_FILTER 0 -%define CONFIG_SMPTEBARS_FILTER 0 -%define CONFIG_SMPTEHDBARS_FILTER 0 -%define CONFIG_TESTSRC_FILTER 0 -%define CONFIG_TESTSRC2_FILTER 0 -%define CONFIG_YUVTESTSRC_FILTER 0 -%define CONFIG_NULLSINK_FILTER 0 -%define CONFIG_ADRAWGRAPH_FILTER 0 -%define CONFIG_AHISTOGRAM_FILTER 0 -%define CONFIG_APHASEMETER_FILTER 0 -%define CONFIG_AVECTORSCOPE_FILTER 0 -%define CONFIG_CONCAT_FILTER 0 -%define CONFIG_SHOWCQT_FILTER 0 -%define CONFIG_SHOWFREQS_FILTER 0 -%define CONFIG_SHOWSPECTRUM_FILTER 0 -%define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -%define CONFIG_SHOWVOLUME_FILTER 0 -%define CONFIG_SHOWWAVES_FILTER 0 -%define CONFIG_SHOWWAVESPIC_FILTER 0 -%define CONFIG_SPECTRUMSYNTH_FILTER 0 -%define CONFIG_AMOVIE_FILTER 0 -%define CONFIG_MOVIE_FILTER 0 -%define CONFIG_H263_CUVID_HWACCEL 0 -%define CONFIG_H263_VAAPI_HWACCEL 0 -%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_H264_CUVID_HWACCEL 0 -%define CONFIG_H264_D3D11VA_HWACCEL 0 -%define CONFIG_H264_DXVA2_HWACCEL 0 -%define CONFIG_H264_MEDIACODEC_HWACCEL 0 -%define CONFIG_H264_MMAL_HWACCEL 0 -%define CONFIG_H264_QSV_HWACCEL 0 -%define CONFIG_H264_VAAPI_HWACCEL 0 -%define CONFIG_H264_VDA_HWACCEL 0 -%define CONFIG_H264_VDA_OLD_HWACCEL 0 -%define CONFIG_H264_VDPAU_HWACCEL 0 -%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_HEVC_CUVID_HWACCEL 0 -%define CONFIG_HEVC_D3D11VA_HWACCEL 0 -%define CONFIG_HEVC_DXVA2_HWACCEL 0 -%define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -%define CONFIG_HEVC_QSV_HWACCEL 0 -%define CONFIG_HEVC_VAAPI_HWACCEL 0 -%define CONFIG_HEVC_VDPAU_HWACCEL 0 -%define CONFIG_MJPEG_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_XVMC_HWACCEL 0 -%define CONFIG_MPEG1_VDPAU_HWACCEL 0 -%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG2_CUVID_HWACCEL 0 -%define CONFIG_MPEG2_XVMC_HWACCEL 0 -%define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -%define CONFIG_MPEG2_DXVA2_HWACCEL 0 -%define CONFIG_MPEG2_MMAL_HWACCEL 0 -%define CONFIG_MPEG2_QSV_HWACCEL 0 -%define CONFIG_MPEG2_VAAPI_HWACCEL 0 -%define CONFIG_MPEG2_VDPAU_HWACCEL 0 -%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG4_CUVID_HWACCEL 0 -%define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -%define CONFIG_MPEG4_MMAL_HWACCEL 0 -%define CONFIG_MPEG4_VAAPI_HWACCEL 0 -%define CONFIG_MPEG4_VDPAU_HWACCEL 0 -%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_VC1_CUVID_HWACCEL 0 -%define CONFIG_VC1_D3D11VA_HWACCEL 0 -%define CONFIG_VC1_DXVA2_HWACCEL 0 -%define CONFIG_VC1_VAAPI_HWACCEL 0 -%define CONFIG_VC1_VDPAU_HWACCEL 0 -%define CONFIG_VC1_MMAL_HWACCEL 0 -%define CONFIG_VC1_QSV_HWACCEL 0 -%define CONFIG_VP8_CUVID_HWACCEL 0 -%define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_CUVID_HWACCEL 0 -%define CONFIG_VP9_D3D11VA_HWACCEL 0 -%define CONFIG_VP9_DXVA2_HWACCEL 0 -%define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_D3D11VA_HWACCEL 0 -%define CONFIG_WMV3_DXVA2_HWACCEL 0 -%define CONFIG_WMV3_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_VDPAU_HWACCEL 0 -%define CONFIG_ALSA_INDEV 0 -%define CONFIG_AVFOUNDATION_INDEV 0 -%define CONFIG_BKTR_INDEV 0 -%define CONFIG_DECKLINK_INDEV 0 -%define CONFIG_DSHOW_INDEV 0 -%define CONFIG_DV1394_INDEV 0 -%define CONFIG_FBDEV_INDEV 0 -%define CONFIG_GDIGRAB_INDEV 0 -%define CONFIG_IEC61883_INDEV 0 -%define CONFIG_JACK_INDEV 0 -%define CONFIG_LAVFI_INDEV 0 -%define CONFIG_OPENAL_INDEV 0 -%define CONFIG_OSS_INDEV 0 -%define CONFIG_PULSE_INDEV 0 -%define CONFIG_QTKIT_INDEV 0 -%define CONFIG_SNDIO_INDEV 0 -%define CONFIG_V4L2_INDEV 0 -%define CONFIG_VFWCAP_INDEV 0 -%define CONFIG_X11GRAB_INDEV 0 -%define CONFIG_X11GRAB_XCB_INDEV 0 -%define CONFIG_LIBCDIO_INDEV 0 -%define CONFIG_LIBDC1394_INDEV 0 -%define CONFIG_A64_MUXER 0 -%define CONFIG_AC3_MUXER 0 -%define CONFIG_ADTS_MUXER 0 -%define CONFIG_ADX_MUXER 0 -%define CONFIG_AIFF_MUXER 0 -%define CONFIG_AMR_MUXER 0 -%define CONFIG_APNG_MUXER 0 -%define CONFIG_ASF_MUXER 0 -%define CONFIG_ASS_MUXER 0 -%define CONFIG_AST_MUXER 0 -%define CONFIG_ASF_STREAM_MUXER 0 -%define CONFIG_AU_MUXER 0 -%define CONFIG_AVI_MUXER 0 -%define CONFIG_AVM2_MUXER 0 -%define CONFIG_BIT_MUXER 0 -%define CONFIG_CAF_MUXER 0 -%define CONFIG_CAVSVIDEO_MUXER 0 -%define CONFIG_CRC_MUXER 0 -%define CONFIG_DASH_MUXER 0 -%define CONFIG_DATA_MUXER 0 -%define CONFIG_DAUD_MUXER 0 -%define CONFIG_DIRAC_MUXER 0 -%define CONFIG_DNXHD_MUXER 0 -%define CONFIG_DTS_MUXER 0 -%define CONFIG_DV_MUXER 0 -%define CONFIG_EAC3_MUXER 0 -%define CONFIG_F4V_MUXER 0 -%define CONFIG_FFM_MUXER 0 -%define CONFIG_FFMETADATA_MUXER 0 -%define CONFIG_FIFO_MUXER 0 -%define CONFIG_FILMSTRIP_MUXER 0 -%define CONFIG_FLAC_MUXER 0 -%define CONFIG_FLV_MUXER 0 -%define CONFIG_FRAMECRC_MUXER 0 -%define CONFIG_FRAMEHASH_MUXER 0 -%define CONFIG_FRAMEMD5_MUXER 0 -%define CONFIG_G722_MUXER 0 -%define CONFIG_G723_1_MUXER 0 -%define CONFIG_GIF_MUXER 0 -%define CONFIG_GSM_MUXER 0 -%define CONFIG_GXF_MUXER 0 -%define CONFIG_H261_MUXER 0 -%define CONFIG_H263_MUXER 0 -%define CONFIG_H264_MUXER 0 -%define CONFIG_HASH_MUXER 0 -%define CONFIG_HDS_MUXER 0 -%define CONFIG_HEVC_MUXER 0 -%define CONFIG_HLS_MUXER 0 -%define CONFIG_ICO_MUXER 0 -%define CONFIG_ILBC_MUXER 0 -%define CONFIG_IMAGE2_MUXER 0 -%define CONFIG_IMAGE2PIPE_MUXER 0 -%define CONFIG_IPOD_MUXER 0 -%define CONFIG_IRCAM_MUXER 0 -%define CONFIG_ISMV_MUXER 0 -%define CONFIG_IVF_MUXER 0 -%define CONFIG_JACOSUB_MUXER 0 -%define CONFIG_LATM_MUXER 0 -%define CONFIG_LRC_MUXER 0 -%define CONFIG_M4V_MUXER 0 -%define CONFIG_MD5_MUXER 0 -%define CONFIG_MATROSKA_MUXER 0 -%define CONFIG_MATROSKA_AUDIO_MUXER 0 -%define CONFIG_MICRODVD_MUXER 0 -%define CONFIG_MJPEG_MUXER 0 -%define CONFIG_MLP_MUXER 0 -%define CONFIG_MMF_MUXER 0 -%define CONFIG_MOV_MUXER 0 -%define CONFIG_MP2_MUXER 0 -%define CONFIG_MP3_MUXER 0 -%define CONFIG_MP4_MUXER 0 -%define CONFIG_MPEG1SYSTEM_MUXER 0 -%define CONFIG_MPEG1VCD_MUXER 0 -%define CONFIG_MPEG1VIDEO_MUXER 0 -%define CONFIG_MPEG2DVD_MUXER 0 -%define CONFIG_MPEG2SVCD_MUXER 0 -%define CONFIG_MPEG2VIDEO_MUXER 0 -%define CONFIG_MPEG2VOB_MUXER 0 -%define CONFIG_MPEGTS_MUXER 0 -%define CONFIG_MPJPEG_MUXER 0 -%define CONFIG_MXF_MUXER 0 -%define CONFIG_MXF_D10_MUXER 0 -%define CONFIG_MXF_OPATOM_MUXER 0 -%define CONFIG_NULL_MUXER 0 -%define CONFIG_NUT_MUXER 0 -%define CONFIG_OGA_MUXER 0 -%define CONFIG_OGG_MUXER 0 -%define CONFIG_OGV_MUXER 0 -%define CONFIG_OMA_MUXER 0 -%define CONFIG_OPUS_MUXER 0 -%define CONFIG_PCM_ALAW_MUXER 0 -%define CONFIG_PCM_MULAW_MUXER 0 -%define CONFIG_PCM_F64BE_MUXER 0 -%define CONFIG_PCM_F64LE_MUXER 0 -%define CONFIG_PCM_F32BE_MUXER 0 -%define CONFIG_PCM_F32LE_MUXER 0 -%define CONFIG_PCM_S32BE_MUXER 0 -%define CONFIG_PCM_S32LE_MUXER 0 -%define CONFIG_PCM_S24BE_MUXER 0 -%define CONFIG_PCM_S24LE_MUXER 0 -%define CONFIG_PCM_S16BE_MUXER 0 -%define CONFIG_PCM_S16LE_MUXER 0 -%define CONFIG_PCM_S8_MUXER 0 -%define CONFIG_PCM_U32BE_MUXER 0 -%define CONFIG_PCM_U32LE_MUXER 0 -%define CONFIG_PCM_U24BE_MUXER 0 -%define CONFIG_PCM_U24LE_MUXER 0 -%define CONFIG_PCM_U16BE_MUXER 0 -%define CONFIG_PCM_U16LE_MUXER 0 -%define CONFIG_PCM_U8_MUXER 0 -%define CONFIG_PSP_MUXER 0 -%define CONFIG_RAWVIDEO_MUXER 0 -%define CONFIG_RM_MUXER 0 -%define CONFIG_ROQ_MUXER 0 -%define CONFIG_RSO_MUXER 0 -%define CONFIG_RTP_MUXER 0 -%define CONFIG_RTP_MPEGTS_MUXER 0 -%define CONFIG_RTSP_MUXER 0 -%define CONFIG_SAP_MUXER 0 -%define CONFIG_SEGMENT_MUXER 0 -%define CONFIG_STREAM_SEGMENT_MUXER 0 -%define CONFIG_SINGLEJPEG_MUXER 0 -%define CONFIG_SMJPEG_MUXER 0 -%define CONFIG_SMOOTHSTREAMING_MUXER 0 -%define CONFIG_SOX_MUXER 0 -%define CONFIG_SPX_MUXER 0 -%define CONFIG_SPDIF_MUXER 0 -%define CONFIG_SRT_MUXER 0 -%define CONFIG_SWF_MUXER 0 -%define CONFIG_TEE_MUXER 0 -%define CONFIG_TG2_MUXER 0 -%define CONFIG_TGP_MUXER 0 -%define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -%define CONFIG_TRUEHD_MUXER 0 -%define CONFIG_TTA_MUXER 0 -%define CONFIG_UNCODEDFRAMECRC_MUXER 0 -%define CONFIG_VC1_MUXER 0 -%define CONFIG_VC1T_MUXER 0 -%define CONFIG_VOC_MUXER 0 -%define CONFIG_W64_MUXER 0 -%define CONFIG_WAV_MUXER 0 -%define CONFIG_WEBM_MUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -%define CONFIG_WEBM_CHUNK_MUXER 0 -%define CONFIG_WEBP_MUXER 0 -%define CONFIG_WEBVTT_MUXER 0 -%define CONFIG_WTV_MUXER 0 -%define CONFIG_WV_MUXER 0 -%define CONFIG_YUV4MPEGPIPE_MUXER 0 -%define CONFIG_CHROMAPRINT_MUXER 0 -%define CONFIG_LIBNUT_MUXER 0 -%define CONFIG_ALSA_OUTDEV 0 -%define CONFIG_CACA_OUTDEV 0 -%define CONFIG_DECKLINK_OUTDEV 0 -%define CONFIG_FBDEV_OUTDEV 0 -%define CONFIG_OPENGL_OUTDEV 0 -%define CONFIG_OSS_OUTDEV 0 -%define CONFIG_PULSE_OUTDEV 0 -%define CONFIG_SDL2_OUTDEV 0 -%define CONFIG_SNDIO_OUTDEV 0 -%define CONFIG_V4L2_OUTDEV 0 -%define CONFIG_XV_OUTDEV 0 -%define CONFIG_AAC_PARSER 0 -%define CONFIG_AAC_LATM_PARSER 0 -%define CONFIG_AC3_PARSER 0 -%define CONFIG_ADX_PARSER 0 -%define CONFIG_BMP_PARSER 0 -%define CONFIG_CAVSVIDEO_PARSER 0 -%define CONFIG_COOK_PARSER 0 -%define CONFIG_DCA_PARSER 0 -%define CONFIG_DIRAC_PARSER 0 -%define CONFIG_DNXHD_PARSER 0 -%define CONFIG_DPX_PARSER 0 -%define CONFIG_DVAUDIO_PARSER 0 -%define CONFIG_DVBSUB_PARSER 0 -%define CONFIG_DVDSUB_PARSER 0 -%define CONFIG_DVD_NAV_PARSER 0 %define CONFIG_FLAC_PARSER 1 -%define CONFIG_G729_PARSER 0 -%define CONFIG_GSM_PARSER 0 -%define CONFIG_H261_PARSER 0 -%define CONFIG_H263_PARSER 0 -%define CONFIG_H264_PARSER 0 -%define CONFIG_HEVC_PARSER 0 -%define CONFIG_MJPEG_PARSER 0 -%define CONFIG_MLP_PARSER 0 -%define CONFIG_MPEG4VIDEO_PARSER 0 -%define CONFIG_MPEGAUDIO_PARSER 0 -%define CONFIG_MPEGVIDEO_PARSER 0 -%define CONFIG_OPUS_PARSER 0 -%define CONFIG_PNG_PARSER 0 -%define CONFIG_PNM_PARSER 0 -%define CONFIG_RV30_PARSER 0 -%define CONFIG_RV40_PARSER 0 -%define CONFIG_TAK_PARSER 0 -%define CONFIG_VC1_PARSER 0 -%define CONFIG_VORBIS_PARSER 0 -%define CONFIG_VP3_PARSER 0 %define CONFIG_VP8_PARSER 1 %define CONFIG_VP9_PARSER 1 -%define CONFIG_ASYNC_PROTOCOL 0 -%define CONFIG_BLURAY_PROTOCOL 0 -%define CONFIG_CACHE_PROTOCOL 0 -%define CONFIG_CONCAT_PROTOCOL 0 -%define CONFIG_CRYPTO_PROTOCOL 0 -%define CONFIG_DATA_PROTOCOL 0 -%define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -%define CONFIG_FFRTMPHTTP_PROTOCOL 0 -%define CONFIG_FILE_PROTOCOL 0 -%define CONFIG_FTP_PROTOCOL 0 -%define CONFIG_GOPHER_PROTOCOL 0 -%define CONFIG_HLS_PROTOCOL 0 -%define CONFIG_HTTP_PROTOCOL 0 -%define CONFIG_HTTPPROXY_PROTOCOL 0 -%define CONFIG_HTTPS_PROTOCOL 0 -%define CONFIG_ICECAST_PROTOCOL 0 -%define CONFIG_MMSH_PROTOCOL 0 -%define CONFIG_MMST_PROTOCOL 0 -%define CONFIG_MD5_PROTOCOL 0 -%define CONFIG_PIPE_PROTOCOL 0 -%define CONFIG_RTMP_PROTOCOL 0 -%define CONFIG_RTMPE_PROTOCOL 0 -%define CONFIG_RTMPS_PROTOCOL 0 -%define CONFIG_RTMPT_PROTOCOL 0 -%define CONFIG_RTMPTE_PROTOCOL 0 -%define CONFIG_RTMPTS_PROTOCOL 0 -%define CONFIG_RTP_PROTOCOL 0 -%define CONFIG_SCTP_PROTOCOL 0 -%define CONFIG_SRTP_PROTOCOL 0 -%define CONFIG_SUBFILE_PROTOCOL 0 -%define CONFIG_TEE_PROTOCOL 0 -%define CONFIG_TCP_PROTOCOL 0 -%define CONFIG_TLS_GNUTLS_PROTOCOL 0 -%define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -%define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -%define CONFIG_TLS_OPENSSL_PROTOCOL 0 -%define CONFIG_UDP_PROTOCOL 0 -%define CONFIG_UDPLITE_PROTOCOL 0 -%define CONFIG_UNIX_PROTOCOL 0 -%define CONFIG_LIBRTMP_PROTOCOL 0 -%define CONFIG_LIBRTMPE_PROTOCOL 0 -%define CONFIG_LIBRTMPS_PROTOCOL 0 -%define CONFIG_LIBRTMPT_PROTOCOL 0 -%define CONFIG_LIBRTMPTE_PROTOCOL 0 -%define CONFIG_LIBSSH_PROTOCOL 0 -%define CONFIG_LIBSMBCLIENT_PROTOCOL 0 diff --git a/media/ffvpx/config_unix64.h b/media/ffvpx/config_unix64.h index 26d6be5d4f04..2e0fc0aa7ea8 100644 --- a/media/ffvpx/config_unix64.h +++ b/media/ffvpx/config_unix64.h @@ -178,6 +178,7 @@ #define HAVE_LOCAL_ALIGNED_16 1 #define HAVE_LOCAL_ALIGNED_32 1 #define HAVE_SIMD_ALIGN_16 1 +#define HAVE_SIMD_ALIGN_32 1 #define HAVE_ATOMICS_GCC 1 #define HAVE_ATOMICS_SUNCC 0 #define HAVE_ATOMICS_WIN32 0 @@ -194,7 +195,7 @@ #define HAVE_CEXP 1 #define HAVE_INLINE_ASM 1 #define HAVE_SYMVER 1 -#define HAVE_YASM 1 +#define HAVE_X86ASM 1 #define HAVE_BIGENDIAN 0 #define HAVE_FAST_UNALIGNED 1 #define HAVE_ALSA_ASOUNDLIB_H 0 @@ -228,6 +229,7 @@ #define HAVE_POLL_H 1 #define HAVE_SNDIO_H 0 #define HAVE_SOUNDCARD_H 0 +#define HAVE_STDATOMIC_H 1 #define HAVE_SYS_MMAN_H 1 #define HAVE_SYS_PARAM_H 1 #define HAVE_SYS_RESOURCE_H 1 @@ -384,15 +386,7 @@ #define HAVE_XLIB 0 #define CONFIG_BSFS 0 #define CONFIG_DECODERS 1 -#define CONFIG_ENCODERS 0 -#define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 -#define CONFIG_INDEVS 0 -#define CONFIG_OUTDEVS 0 -#define CONFIG_FILTERS 0 -#define CONFIG_DEMUXERS 0 -#define CONFIG_MUXERS 0 -#define CONFIG_PROTOCOLS 0 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 1 @@ -514,7 +508,6 @@ #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 -#define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 @@ -579,7 +572,6 @@ #define CONFIG_FDCTDSP 0 #define CONFIG_FLACDSP 1 #define CONFIG_FMTCONVERT 0 -#define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 @@ -655,1570 +647,10 @@ #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 -#define CONFIG_AASC_DECODER 0 -#define CONFIG_AIC_DECODER 0 -#define CONFIG_ALIAS_PIX_DECODER 0 -#define CONFIG_AMV_DECODER 0 -#define CONFIG_ANM_DECODER 0 -#define CONFIG_ANSI_DECODER 0 -#define CONFIG_APNG_DECODER 0 -#define CONFIG_ASV1_DECODER 0 -#define CONFIG_ASV2_DECODER 0 -#define CONFIG_AURA_DECODER 0 -#define CONFIG_AURA2_DECODER 0 -#define CONFIG_AVRP_DECODER 0 -#define CONFIG_AVRN_DECODER 0 -#define CONFIG_AVS_DECODER 0 -#define CONFIG_AVUI_DECODER 0 -#define CONFIG_AYUV_DECODER 0 -#define CONFIG_BETHSOFTVID_DECODER 0 -#define CONFIG_BFI_DECODER 0 -#define CONFIG_BINK_DECODER 0 -#define CONFIG_BMP_DECODER 0 -#define CONFIG_BMV_VIDEO_DECODER 0 -#define CONFIG_BRENDER_PIX_DECODER 0 -#define CONFIG_C93_DECODER 0 -#define CONFIG_CAVS_DECODER 0 -#define CONFIG_CDGRAPHICS_DECODER 0 -#define CONFIG_CDXL_DECODER 0 -#define CONFIG_CFHD_DECODER 0 -#define CONFIG_CINEPAK_DECODER 0 -#define CONFIG_CLJR_DECODER 0 -#define CONFIG_CLLC_DECODER 0 -#define CONFIG_COMFORTNOISE_DECODER 0 -#define CONFIG_CPIA_DECODER 0 -#define CONFIG_CSCD_DECODER 0 -#define CONFIG_CYUV_DECODER 0 -#define CONFIG_DDS_DECODER 0 -#define CONFIG_DFA_DECODER 0 -#define CONFIG_DIRAC_DECODER 0 -#define CONFIG_DNXHD_DECODER 0 -#define CONFIG_DPX_DECODER 0 -#define CONFIG_DSICINVIDEO_DECODER 0 -#define CONFIG_DVAUDIO_DECODER 0 -#define CONFIG_DVVIDEO_DECODER 0 -#define CONFIG_DXA_DECODER 0 -#define CONFIG_DXTORY_DECODER 0 -#define CONFIG_DXV_DECODER 0 -#define CONFIG_EACMV_DECODER 0 -#define CONFIG_EAMAD_DECODER 0 -#define CONFIG_EATGQ_DECODER 0 -#define CONFIG_EATGV_DECODER 0 -#define CONFIG_EATQI_DECODER 0 -#define CONFIG_EIGHTBPS_DECODER 0 -#define CONFIG_EIGHTSVX_EXP_DECODER 0 -#define CONFIG_EIGHTSVX_FIB_DECODER 0 -#define CONFIG_ESCAPE124_DECODER 0 -#define CONFIG_ESCAPE130_DECODER 0 -#define CONFIG_EXR_DECODER 0 -#define CONFIG_FFV1_DECODER 0 -#define CONFIG_FFVHUFF_DECODER 0 -#define CONFIG_FIC_DECODER 0 -#define CONFIG_FLASHSV_DECODER 0 -#define CONFIG_FLASHSV2_DECODER 0 -#define CONFIG_FLIC_DECODER 0 -#define CONFIG_FLV_DECODER 0 -#define CONFIG_FOURXM_DECODER 0 -#define CONFIG_FRAPS_DECODER 0 -#define CONFIG_FRWU_DECODER 0 -#define CONFIG_G2M_DECODER 0 -#define CONFIG_GIF_DECODER 0 -#define CONFIG_H261_DECODER 0 -#define CONFIG_H263_DECODER 0 -#define CONFIG_H263I_DECODER 0 -#define CONFIG_H263P_DECODER 0 -#define CONFIG_H264_DECODER 0 -#define CONFIG_H264_CRYSTALHD_DECODER 0 -#define CONFIG_H264_MEDIACODEC_DECODER 0 -#define CONFIG_H264_MMAL_DECODER 0 -#define CONFIG_H264_QSV_DECODER 0 -#define CONFIG_H264_VDA_DECODER 0 -#define CONFIG_H264_VDPAU_DECODER 0 -#define CONFIG_HAP_DECODER 0 -#define CONFIG_HEVC_DECODER 0 -#define CONFIG_HEVC_QSV_DECODER 0 -#define CONFIG_HNM4_VIDEO_DECODER 0 -#define CONFIG_HQ_HQA_DECODER 0 -#define CONFIG_HQX_DECODER 0 -#define CONFIG_HUFFYUV_DECODER 0 -#define CONFIG_IDCIN_DECODER 0 -#define CONFIG_IFF_ILBM_DECODER 0 -#define CONFIG_INDEO2_DECODER 0 -#define CONFIG_INDEO3_DECODER 0 -#define CONFIG_INDEO4_DECODER 0 -#define CONFIG_INDEO5_DECODER 0 -#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -#define CONFIG_JPEG2000_DECODER 0 -#define CONFIG_JPEGLS_DECODER 0 -#define CONFIG_JV_DECODER 0 -#define CONFIG_KGV1_DECODER 0 -#define CONFIG_KMVC_DECODER 0 -#define CONFIG_LAGARITH_DECODER 0 -#define CONFIG_LOCO_DECODER 0 -#define CONFIG_M101_DECODER 0 -#define CONFIG_MAGICYUV_DECODER 0 -#define CONFIG_MDEC_DECODER 0 -#define CONFIG_MIMIC_DECODER 0 -#define CONFIG_MJPEG_DECODER 0 -#define CONFIG_MJPEGB_DECODER 0 -#define CONFIG_MMVIDEO_DECODER 0 -#define CONFIG_MOTIONPIXELS_DECODER 0 -#define CONFIG_MPEG_XVMC_DECODER 0 -#define CONFIG_MPEG1VIDEO_DECODER 0 -#define CONFIG_MPEG2VIDEO_DECODER 0 -#define CONFIG_MPEG4_DECODER 0 -#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG4_MMAL_DECODER 0 -#define CONFIG_MPEG4_VDPAU_DECODER 0 -#define CONFIG_MPEGVIDEO_DECODER 0 -#define CONFIG_MPEG_VDPAU_DECODER 0 -#define CONFIG_MPEG1_VDPAU_DECODER 0 -#define CONFIG_MPEG2_MMAL_DECODER 0 -#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG2_QSV_DECODER 0 -#define CONFIG_MSA1_DECODER 0 -#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MSMPEG4V1_DECODER 0 -#define CONFIG_MSMPEG4V2_DECODER 0 -#define CONFIG_MSMPEG4V3_DECODER 0 -#define CONFIG_MSRLE_DECODER 0 -#define CONFIG_MSS1_DECODER 0 -#define CONFIG_MSS2_DECODER 0 -#define CONFIG_MSVIDEO1_DECODER 0 -#define CONFIG_MSZH_DECODER 0 -#define CONFIG_MTS2_DECODER 0 -#define CONFIG_MVC1_DECODER 0 -#define CONFIG_MVC2_DECODER 0 -#define CONFIG_MXPEG_DECODER 0 -#define CONFIG_NUV_DECODER 0 -#define CONFIG_PAF_VIDEO_DECODER 0 -#define CONFIG_PAM_DECODER 0 -#define CONFIG_PBM_DECODER 0 -#define CONFIG_PCX_DECODER 0 -#define CONFIG_PGM_DECODER 0 -#define CONFIG_PGMYUV_DECODER 0 -#define CONFIG_PICTOR_DECODER 0 -#define CONFIG_PNG_DECODER 0 -#define CONFIG_PPM_DECODER 0 -#define CONFIG_PRORES_DECODER 0 -#define CONFIG_PRORES_LGPL_DECODER 0 -#define CONFIG_PTX_DECODER 0 -#define CONFIG_QDRAW_DECODER 0 -#define CONFIG_QPEG_DECODER 0 -#define CONFIG_QTRLE_DECODER 0 -#define CONFIG_R10K_DECODER 0 -#define CONFIG_R210_DECODER 0 -#define CONFIG_RAWVIDEO_DECODER 0 -#define CONFIG_RL2_DECODER 0 -#define CONFIG_ROQ_DECODER 0 -#define CONFIG_RPZA_DECODER 0 -#define CONFIG_RSCC_DECODER 0 -#define CONFIG_RV10_DECODER 0 -#define CONFIG_RV20_DECODER 0 -#define CONFIG_RV30_DECODER 0 -#define CONFIG_RV40_DECODER 0 -#define CONFIG_S302M_DECODER 0 -#define CONFIG_SANM_DECODER 0 -#define CONFIG_SCREENPRESSO_DECODER 0 -#define CONFIG_SDX2_DPCM_DECODER 0 -#define CONFIG_SGI_DECODER 0 -#define CONFIG_SGIRLE_DECODER 0 -#define CONFIG_SHEERVIDEO_DECODER 0 -#define CONFIG_SMACKER_DECODER 0 -#define CONFIG_SMC_DECODER 0 -#define CONFIG_SMVJPEG_DECODER 0 -#define CONFIG_SNOW_DECODER 0 -#define CONFIG_SP5X_DECODER 0 -#define CONFIG_SUNRAST_DECODER 0 -#define CONFIG_SVQ1_DECODER 0 -#define CONFIG_SVQ3_DECODER 0 -#define CONFIG_TARGA_DECODER 0 -#define CONFIG_TARGA_Y216_DECODER 0 -#define CONFIG_TDSC_DECODER 0 -#define CONFIG_THEORA_DECODER 0 -#define CONFIG_THP_DECODER 0 -#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -#define CONFIG_TIFF_DECODER 0 -#define CONFIG_TMV_DECODER 0 -#define CONFIG_TRUEMOTION1_DECODER 0 -#define CONFIG_TRUEMOTION2_DECODER 0 -#define CONFIG_TRUEMOTION2RT_DECODER 0 -#define CONFIG_TSCC_DECODER 0 -#define CONFIG_TSCC2_DECODER 0 -#define CONFIG_TXD_DECODER 0 -#define CONFIG_ULTI_DECODER 0 -#define CONFIG_UTVIDEO_DECODER 0 -#define CONFIG_V210_DECODER 0 -#define CONFIG_V210X_DECODER 0 -#define CONFIG_V308_DECODER 0 -#define CONFIG_V408_DECODER 0 -#define CONFIG_V410_DECODER 0 -#define CONFIG_VB_DECODER 0 -#define CONFIG_VBLE_DECODER 0 -#define CONFIG_VC1_DECODER 0 -#define CONFIG_VC1_CRYSTALHD_DECODER 0 -#define CONFIG_VC1_VDPAU_DECODER 0 -#define CONFIG_VC1IMAGE_DECODER 0 -#define CONFIG_VC1_MMAL_DECODER 0 -#define CONFIG_VC1_QSV_DECODER 0 -#define CONFIG_VCR1_DECODER 0 -#define CONFIG_VMDVIDEO_DECODER 0 -#define CONFIG_VMNC_DECODER 0 -#define CONFIG_VP3_DECODER 0 -#define CONFIG_VP5_DECODER 0 -#define CONFIG_VP6_DECODER 0 -#define CONFIG_VP6A_DECODER 0 -#define CONFIG_VP6F_DECODER 0 -#define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 1 #define CONFIG_VP9_DECODER 1 -#define CONFIG_VQA_DECODER 0 -#define CONFIG_WEBP_DECODER 0 -#define CONFIG_WMV1_DECODER 0 -#define CONFIG_WMV2_DECODER 0 -#define CONFIG_WMV3_DECODER 0 -#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -#define CONFIG_WMV3_VDPAU_DECODER 0 -#define CONFIG_WMV3IMAGE_DECODER 0 -#define CONFIG_WNV1_DECODER 0 -#define CONFIG_XAN_WC3_DECODER 0 -#define CONFIG_XAN_WC4_DECODER 0 -#define CONFIG_XBM_DECODER 0 -#define CONFIG_XFACE_DECODER 0 -#define CONFIG_XL_DECODER 0 -#define CONFIG_XWD_DECODER 0 -#define CONFIG_Y41P_DECODER 0 -#define CONFIG_YLC_DECODER 0 -#define CONFIG_YOP_DECODER 0 -#define CONFIG_YUV4_DECODER 0 -#define CONFIG_ZERO12V_DECODER 0 -#define CONFIG_ZEROCODEC_DECODER 0 -#define CONFIG_ZLIB_DECODER 0 -#define CONFIG_ZMBV_DECODER 0 -#define CONFIG_AAC_DECODER 0 -#define CONFIG_AAC_FIXED_DECODER 0 -#define CONFIG_AAC_LATM_DECODER 0 -#define CONFIG_AC3_DECODER 0 -#define CONFIG_AC3_FIXED_DECODER 0 -#define CONFIG_ALAC_DECODER 0 -#define CONFIG_ALS_DECODER 0 -#define CONFIG_AMRNB_DECODER 0 -#define CONFIG_AMRWB_DECODER 0 -#define CONFIG_APE_DECODER 0 -#define CONFIG_ATRAC1_DECODER 0 -#define CONFIG_ATRAC3_DECODER 0 -#define CONFIG_ATRAC3P_DECODER 0 -#define CONFIG_BINKAUDIO_DCT_DECODER 0 -#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -#define CONFIG_BMV_AUDIO_DECODER 0 -#define CONFIG_COOK_DECODER 0 -#define CONFIG_DCA_DECODER 0 -#define CONFIG_DSD_LSBF_DECODER 0 -#define CONFIG_DSD_MSBF_DECODER 0 -#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -#define CONFIG_DSICINAUDIO_DECODER 0 -#define CONFIG_DSS_SP_DECODER 0 -#define CONFIG_DST_DECODER 0 -#define CONFIG_EAC3_DECODER 0 -#define CONFIG_EVRC_DECODER 0 -#define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 1 -#define CONFIG_G723_1_DECODER 0 -#define CONFIG_G729_DECODER 0 -#define CONFIG_GSM_DECODER 0 -#define CONFIG_GSM_MS_DECODER 0 -#define CONFIG_IAC_DECODER 0 -#define CONFIG_IMC_DECODER 0 -#define CONFIG_INTERPLAY_ACM_DECODER 0 -#define CONFIG_MACE3_DECODER 0 -#define CONFIG_MACE6_DECODER 0 -#define CONFIG_METASOUND_DECODER 0 -#define CONFIG_MLP_DECODER 0 -#define CONFIG_MP1_DECODER 0 -#define CONFIG_MP1FLOAT_DECODER 0 -#define CONFIG_MP2_DECODER 0 -#define CONFIG_MP2FLOAT_DECODER 0 -#define CONFIG_MP3_DECODER 0 -#define CONFIG_MP3FLOAT_DECODER 0 -#define CONFIG_MP3ADU_DECODER 0 -#define CONFIG_MP3ADUFLOAT_DECODER 0 -#define CONFIG_MP3ON4_DECODER 0 -#define CONFIG_MP3ON4FLOAT_DECODER 0 -#define CONFIG_MPC7_DECODER 0 -#define CONFIG_MPC8_DECODER 0 -#define CONFIG_NELLYMOSER_DECODER 0 -#define CONFIG_ON2AVC_DECODER 0 -#define CONFIG_OPUS_DECODER 0 -#define CONFIG_PAF_AUDIO_DECODER 0 -#define CONFIG_QCELP_DECODER 0 -#define CONFIG_QDM2_DECODER 0 -#define CONFIG_RA_144_DECODER 0 -#define CONFIG_RA_288_DECODER 0 -#define CONFIG_RALF_DECODER 0 -#define CONFIG_SHORTEN_DECODER 0 -#define CONFIG_SIPR_DECODER 0 -#define CONFIG_SMACKAUD_DECODER 0 -#define CONFIG_SONIC_DECODER 0 -#define CONFIG_TAK_DECODER 0 -#define CONFIG_TRUEHD_DECODER 0 -#define CONFIG_TRUESPEECH_DECODER 0 -#define CONFIG_TTA_DECODER 0 -#define CONFIG_TWINVQ_DECODER 0 -#define CONFIG_VMDAUDIO_DECODER 0 -#define CONFIG_VORBIS_DECODER 0 -#define CONFIG_WAVPACK_DECODER 0 -#define CONFIG_WMALOSSLESS_DECODER 0 -#define CONFIG_WMAPRO_DECODER 0 -#define CONFIG_WMAV1_DECODER 0 -#define CONFIG_WMAV2_DECODER 0 -#define CONFIG_WMAVOICE_DECODER 0 -#define CONFIG_WS_SND1_DECODER 0 -#define CONFIG_XMA1_DECODER 0 -#define CONFIG_XMA2_DECODER 0 -#define CONFIG_PCM_ALAW_DECODER 0 -#define CONFIG_PCM_BLURAY_DECODER 0 -#define CONFIG_PCM_DVD_DECODER 0 -#define CONFIG_PCM_F32BE_DECODER 0 -#define CONFIG_PCM_F32LE_DECODER 0 -#define CONFIG_PCM_F64BE_DECODER 0 -#define CONFIG_PCM_F64LE_DECODER 0 -#define CONFIG_PCM_LXF_DECODER 0 -#define CONFIG_PCM_MULAW_DECODER 0 -#define CONFIG_PCM_S8_DECODER 0 -#define CONFIG_PCM_S8_PLANAR_DECODER 0 -#define CONFIG_PCM_S16BE_DECODER 0 -#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -#define CONFIG_PCM_S16LE_DECODER 0 -#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S24BE_DECODER 0 -#define CONFIG_PCM_S24DAUD_DECODER 0 -#define CONFIG_PCM_S24LE_DECODER 0 -#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S32BE_DECODER 0 -#define CONFIG_PCM_S32LE_DECODER 0 -#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S64BE_DECODER 0 -#define CONFIG_PCM_S64LE_DECODER 0 -#define CONFIG_PCM_U8_DECODER 0 -#define CONFIG_PCM_U16BE_DECODER 0 -#define CONFIG_PCM_U16LE_DECODER 0 -#define CONFIG_PCM_U24BE_DECODER 0 -#define CONFIG_PCM_U24LE_DECODER 0 -#define CONFIG_PCM_U32BE_DECODER 0 -#define CONFIG_PCM_U32LE_DECODER 0 -#define CONFIG_PCM_ZORK_DECODER 0 -#define CONFIG_INTERPLAY_DPCM_DECODER 0 -#define CONFIG_ROQ_DPCM_DECODER 0 -#define CONFIG_SOL_DPCM_DECODER 0 -#define CONFIG_XAN_DPCM_DECODER 0 -#define CONFIG_ADPCM_4XM_DECODER 0 -#define CONFIG_ADPCM_ADX_DECODER 0 -#define CONFIG_ADPCM_AFC_DECODER 0 -#define CONFIG_ADPCM_AICA_DECODER 0 -#define CONFIG_ADPCM_CT_DECODER 0 -#define CONFIG_ADPCM_DTK_DECODER 0 -#define CONFIG_ADPCM_EA_DECODER 0 -#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -#define CONFIG_ADPCM_EA_R1_DECODER 0 -#define CONFIG_ADPCM_EA_R2_DECODER 0 -#define CONFIG_ADPCM_EA_R3_DECODER 0 -#define CONFIG_ADPCM_EA_XAS_DECODER 0 -#define CONFIG_ADPCM_G722_DECODER 0 -#define CONFIG_ADPCM_G726_DECODER 0 -#define CONFIG_ADPCM_G726LE_DECODER 0 -#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -#define CONFIG_ADPCM_IMA_APC_DECODER 0 -#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_DECODER 0 -#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -#define CONFIG_ADPCM_IMA_WS_DECODER 0 -#define CONFIG_ADPCM_MS_DECODER 0 -#define CONFIG_ADPCM_MTAF_DECODER 0 -#define CONFIG_ADPCM_PSX_DECODER 0 -#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -#define CONFIG_ADPCM_SWF_DECODER 0 -#define CONFIG_ADPCM_THP_DECODER 0 -#define CONFIG_ADPCM_THP_LE_DECODER 0 -#define CONFIG_ADPCM_VIMA_DECODER 0 -#define CONFIG_ADPCM_XA_DECODER 0 -#define CONFIG_ADPCM_YAMAHA_DECODER 0 -#define CONFIG_SSA_DECODER 0 -#define CONFIG_ASS_DECODER 0 -#define CONFIG_CCAPTION_DECODER 0 -#define CONFIG_DVBSUB_DECODER 0 -#define CONFIG_DVDSUB_DECODER 0 -#define CONFIG_JACOSUB_DECODER 0 -#define CONFIG_MICRODVD_DECODER 0 -#define CONFIG_MOVTEXT_DECODER 0 -#define CONFIG_MPL2_DECODER 0 -#define CONFIG_PGSSUB_DECODER 0 -#define CONFIG_PJS_DECODER 0 -#define CONFIG_REALTEXT_DECODER 0 -#define CONFIG_SAMI_DECODER 0 -#define CONFIG_SRT_DECODER 0 -#define CONFIG_STL_DECODER 0 -#define CONFIG_SUBRIP_DECODER 0 -#define CONFIG_SUBVIEWER_DECODER 0 -#define CONFIG_SUBVIEWER1_DECODER 0 -#define CONFIG_TEXT_DECODER 0 -#define CONFIG_VPLAYER_DECODER 0 -#define CONFIG_WEBVTT_DECODER 0 -#define CONFIG_XSUB_DECODER 0 -#define CONFIG_AAC_AT_DECODER 0 -#define CONFIG_AC3_AT_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -#define CONFIG_ALAC_AT_DECODER 0 -#define CONFIG_AMR_NB_AT_DECODER 0 -#define CONFIG_EAC3_AT_DECODER 0 -#define CONFIG_GSM_MS_AT_DECODER 0 -#define CONFIG_ILBC_AT_DECODER 0 -#define CONFIG_MP1_AT_DECODER 0 -#define CONFIG_MP2_AT_DECODER 0 -#define CONFIG_MP3_AT_DECODER 0 -#define CONFIG_PCM_ALAW_AT_DECODER 0 -#define CONFIG_PCM_MULAW_AT_DECODER 0 -#define CONFIG_QDMC_AT_DECODER 0 -#define CONFIG_QDM2_AT_DECODER 0 -#define CONFIG_LIBCELT_DECODER 0 -#define CONFIG_LIBFDK_AAC_DECODER 0 -#define CONFIG_LIBGSM_DECODER 0 -#define CONFIG_LIBGSM_MS_DECODER 0 -#define CONFIG_LIBILBC_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -#define CONFIG_LIBOPENJPEG_DECODER 0 -#define CONFIG_LIBOPUS_DECODER 0 -#define CONFIG_LIBSCHROEDINGER_DECODER 0 -#define CONFIG_LIBSPEEX_DECODER 0 -#define CONFIG_LIBVORBIS_DECODER 0 -#define CONFIG_LIBVPX_VP8_DECODER 0 -#define CONFIG_LIBVPX_VP9_DECODER 0 -#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -#define CONFIG_BINTEXT_DECODER 0 -#define CONFIG_XBIN_DECODER 0 -#define CONFIG_IDF_DECODER 0 -#define CONFIG_LIBOPENH264_DECODER 0 -#define CONFIG_H263_CUVID_DECODER 0 -#define CONFIG_H264_CUVID_DECODER 0 -#define CONFIG_HEVC_CUVID_DECODER 0 -#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -#define CONFIG_MJPEG_CUVID_DECODER 0 -#define CONFIG_MPEG1_CUVID_DECODER 0 -#define CONFIG_MPEG2_CUVID_DECODER 0 -#define CONFIG_MPEG4_CUVID_DECODER 0 -#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -#define CONFIG_VC1_CUVID_DECODER 0 -#define CONFIG_VP8_CUVID_DECODER 0 -#define CONFIG_VP8_MEDIACODEC_DECODER 0 -#define CONFIG_VP9_CUVID_DECODER 0 -#define CONFIG_VP9_MEDIACODEC_DECODER 0 -#define CONFIG_AA_DEMUXER 0 -#define CONFIG_AAC_DEMUXER 0 -#define CONFIG_AC3_DEMUXER 0 -#define CONFIG_ACM_DEMUXER 0 -#define CONFIG_ACT_DEMUXER 0 -#define CONFIG_ADF_DEMUXER 0 -#define CONFIG_ADP_DEMUXER 0 -#define CONFIG_ADS_DEMUXER 0 -#define CONFIG_ADX_DEMUXER 0 -#define CONFIG_AEA_DEMUXER 0 -#define CONFIG_AFC_DEMUXER 0 -#define CONFIG_AIFF_DEMUXER 0 -#define CONFIG_AIX_DEMUXER 0 -#define CONFIG_AMR_DEMUXER 0 -#define CONFIG_ANM_DEMUXER 0 -#define CONFIG_APC_DEMUXER 0 -#define CONFIG_APE_DEMUXER 0 -#define CONFIG_APNG_DEMUXER 0 -#define CONFIG_AQTITLE_DEMUXER 0 -#define CONFIG_ASF_DEMUXER 0 -#define CONFIG_ASF_O_DEMUXER 0 -#define CONFIG_ASS_DEMUXER 0 -#define CONFIG_AST_DEMUXER 0 -#define CONFIG_AU_DEMUXER 0 -#define CONFIG_AVI_DEMUXER 0 -#define CONFIG_AVISYNTH_DEMUXER 0 -#define CONFIG_AVR_DEMUXER 0 -#define CONFIG_AVS_DEMUXER 0 -#define CONFIG_BETHSOFTVID_DEMUXER 0 -#define CONFIG_BFI_DEMUXER 0 -#define CONFIG_BINTEXT_DEMUXER 0 -#define CONFIG_BINK_DEMUXER 0 -#define CONFIG_BIT_DEMUXER 0 -#define CONFIG_BMV_DEMUXER 0 -#define CONFIG_BFSTM_DEMUXER 0 -#define CONFIG_BRSTM_DEMUXER 0 -#define CONFIG_BOA_DEMUXER 0 -#define CONFIG_C93_DEMUXER 0 -#define CONFIG_CAF_DEMUXER 0 -#define CONFIG_CAVSVIDEO_DEMUXER 0 -#define CONFIG_CDG_DEMUXER 0 -#define CONFIG_CDXL_DEMUXER 0 -#define CONFIG_CINE_DEMUXER 0 -#define CONFIG_CONCAT_DEMUXER 0 -#define CONFIG_DATA_DEMUXER 0 -#define CONFIG_DAUD_DEMUXER 0 -#define CONFIG_DCSTR_DEMUXER 0 -#define CONFIG_DFA_DEMUXER 0 -#define CONFIG_DIRAC_DEMUXER 0 -#define CONFIG_DNXHD_DEMUXER 0 -#define CONFIG_DSF_DEMUXER 0 -#define CONFIG_DSICIN_DEMUXER 0 -#define CONFIG_DSS_DEMUXER 0 -#define CONFIG_DTS_DEMUXER 0 -#define CONFIG_DTSHD_DEMUXER 0 -#define CONFIG_DV_DEMUXER 0 -#define CONFIG_DVBSUB_DEMUXER 0 -#define CONFIG_DVBTXT_DEMUXER 0 -#define CONFIG_DXA_DEMUXER 0 -#define CONFIG_EA_DEMUXER 0 -#define CONFIG_EA_CDATA_DEMUXER 0 -#define CONFIG_EAC3_DEMUXER 0 -#define CONFIG_EPAF_DEMUXER 0 -#define CONFIG_FFM_DEMUXER 0 -#define CONFIG_FFMETADATA_DEMUXER 0 -#define CONFIG_FILMSTRIP_DEMUXER 0 -#define CONFIG_FLAC_DEMUXER 0 -#define CONFIG_FLIC_DEMUXER 0 -#define CONFIG_FLV_DEMUXER 0 -#define CONFIG_LIVE_FLV_DEMUXER 0 -#define CONFIG_FOURXM_DEMUXER 0 -#define CONFIG_FRM_DEMUXER 0 -#define CONFIG_FSB_DEMUXER 0 -#define CONFIG_G722_DEMUXER 0 -#define CONFIG_G723_1_DEMUXER 0 -#define CONFIG_G729_DEMUXER 0 -#define CONFIG_GENH_DEMUXER 0 -#define CONFIG_GIF_DEMUXER 0 -#define CONFIG_GSM_DEMUXER 0 -#define CONFIG_GXF_DEMUXER 0 -#define CONFIG_H261_DEMUXER 0 -#define CONFIG_H263_DEMUXER 0 -#define CONFIG_H264_DEMUXER 0 -#define CONFIG_HEVC_DEMUXER 0 -#define CONFIG_HLS_DEMUXER 0 -#define CONFIG_HNM_DEMUXER 0 -#define CONFIG_ICO_DEMUXER 0 -#define CONFIG_IDCIN_DEMUXER 0 -#define CONFIG_IDF_DEMUXER 0 -#define CONFIG_IFF_DEMUXER 0 -#define CONFIG_ILBC_DEMUXER 0 -#define CONFIG_IMAGE2_DEMUXER 0 -#define CONFIG_IMAGE2PIPE_DEMUXER 0 -#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -#define CONFIG_INGENIENT_DEMUXER 0 -#define CONFIG_IPMOVIE_DEMUXER 0 -#define CONFIG_IRCAM_DEMUXER 0 -#define CONFIG_ISS_DEMUXER 0 -#define CONFIG_IV8_DEMUXER 0 -#define CONFIG_IVF_DEMUXER 0 -#define CONFIG_IVR_DEMUXER 0 -#define CONFIG_JACOSUB_DEMUXER 0 -#define CONFIG_JV_DEMUXER 0 -#define CONFIG_LMLM4_DEMUXER 0 -#define CONFIG_LOAS_DEMUXER 0 -#define CONFIG_LRC_DEMUXER 0 -#define CONFIG_LVF_DEMUXER 0 -#define CONFIG_LXF_DEMUXER 0 -#define CONFIG_M4V_DEMUXER 0 -#define CONFIG_MATROSKA_DEMUXER 0 -#define CONFIG_MGSTS_DEMUXER 0 -#define CONFIG_MICRODVD_DEMUXER 0 -#define CONFIG_MJPEG_DEMUXER 0 -#define CONFIG_MLP_DEMUXER 0 -#define CONFIG_MLV_DEMUXER 0 -#define CONFIG_MM_DEMUXER 0 -#define CONFIG_MMF_DEMUXER 0 -#define CONFIG_MOV_DEMUXER 0 -#define CONFIG_MP3_DEMUXER 0 -#define CONFIG_MPC_DEMUXER 0 -#define CONFIG_MPC8_DEMUXER 0 -#define CONFIG_MPEGPS_DEMUXER 0 -#define CONFIG_MPEGTS_DEMUXER 0 -#define CONFIG_MPEGTSRAW_DEMUXER 0 -#define CONFIG_MPEGVIDEO_DEMUXER 0 -#define CONFIG_MPJPEG_DEMUXER 0 -#define CONFIG_MPL2_DEMUXER 0 -#define CONFIG_MPSUB_DEMUXER 0 -#define CONFIG_MSF_DEMUXER 0 -#define CONFIG_MSNWC_TCP_DEMUXER 0 -#define CONFIG_MTAF_DEMUXER 0 -#define CONFIG_MTV_DEMUXER 0 -#define CONFIG_MUSX_DEMUXER 0 -#define CONFIG_MV_DEMUXER 0 -#define CONFIG_MVI_DEMUXER 0 -#define CONFIG_MXF_DEMUXER 0 -#define CONFIG_MXG_DEMUXER 0 -#define CONFIG_NC_DEMUXER 0 -#define CONFIG_NISTSPHERE_DEMUXER 0 -#define CONFIG_NSV_DEMUXER 0 -#define CONFIG_NUT_DEMUXER 0 -#define CONFIG_NUV_DEMUXER 0 -#define CONFIG_OGG_DEMUXER 0 -#define CONFIG_OMA_DEMUXER 0 -#define CONFIG_PAF_DEMUXER 0 -#define CONFIG_PCM_ALAW_DEMUXER 0 -#define CONFIG_PCM_MULAW_DEMUXER 0 -#define CONFIG_PCM_F64BE_DEMUXER 0 -#define CONFIG_PCM_F64LE_DEMUXER 0 -#define CONFIG_PCM_F32BE_DEMUXER 0 -#define CONFIG_PCM_F32LE_DEMUXER 0 -#define CONFIG_PCM_S32BE_DEMUXER 0 -#define CONFIG_PCM_S32LE_DEMUXER 0 -#define CONFIG_PCM_S24BE_DEMUXER 0 -#define CONFIG_PCM_S24LE_DEMUXER 0 -#define CONFIG_PCM_S16BE_DEMUXER 0 -#define CONFIG_PCM_S16LE_DEMUXER 0 -#define CONFIG_PCM_S8_DEMUXER 0 -#define CONFIG_PCM_U32BE_DEMUXER 0 -#define CONFIG_PCM_U32LE_DEMUXER 0 -#define CONFIG_PCM_U24BE_DEMUXER 0 -#define CONFIG_PCM_U24LE_DEMUXER 0 -#define CONFIG_PCM_U16BE_DEMUXER 0 -#define CONFIG_PCM_U16LE_DEMUXER 0 -#define CONFIG_PCM_U8_DEMUXER 0 -#define CONFIG_PJS_DEMUXER 0 -#define CONFIG_PMP_DEMUXER 0 -#define CONFIG_PVA_DEMUXER 0 -#define CONFIG_PVF_DEMUXER 0 -#define CONFIG_QCP_DEMUXER 0 -#define CONFIG_R3D_DEMUXER 0 -#define CONFIG_RAWVIDEO_DEMUXER 0 -#define CONFIG_REALTEXT_DEMUXER 0 -#define CONFIG_REDSPARK_DEMUXER 0 -#define CONFIG_RL2_DEMUXER 0 -#define CONFIG_RM_DEMUXER 0 -#define CONFIG_ROQ_DEMUXER 0 -#define CONFIG_RPL_DEMUXER 0 -#define CONFIG_RSD_DEMUXER 0 -#define CONFIG_RSO_DEMUXER 0 -#define CONFIG_RTP_DEMUXER 0 -#define CONFIG_RTSP_DEMUXER 0 -#define CONFIG_SAMI_DEMUXER 0 -#define CONFIG_SAP_DEMUXER 0 -#define CONFIG_SBG_DEMUXER 0 -#define CONFIG_SDP_DEMUXER 0 -#define CONFIG_SDR2_DEMUXER 0 -#define CONFIG_SEGAFILM_DEMUXER 0 -#define CONFIG_SHORTEN_DEMUXER 0 -#define CONFIG_SIFF_DEMUXER 0 -#define CONFIG_SLN_DEMUXER 0 -#define CONFIG_SMACKER_DEMUXER 0 -#define CONFIG_SMJPEG_DEMUXER 0 -#define CONFIG_SMUSH_DEMUXER 0 -#define CONFIG_SOL_DEMUXER 0 -#define CONFIG_SOX_DEMUXER 0 -#define CONFIG_SPDIF_DEMUXER 0 -#define CONFIG_SRT_DEMUXER 0 -#define CONFIG_STR_DEMUXER 0 -#define CONFIG_STL_DEMUXER 0 -#define CONFIG_SUBVIEWER1_DEMUXER 0 -#define CONFIG_SUBVIEWER_DEMUXER 0 -#define CONFIG_SUP_DEMUXER 0 -#define CONFIG_SVAG_DEMUXER 0 -#define CONFIG_SWF_DEMUXER 0 -#define CONFIG_TAK_DEMUXER 0 -#define CONFIG_TEDCAPTIONS_DEMUXER 0 -#define CONFIG_THP_DEMUXER 0 -#define CONFIG_THREEDOSTR_DEMUXER 0 -#define CONFIG_TIERTEXSEQ_DEMUXER 0 -#define CONFIG_TMV_DEMUXER 0 -#define CONFIG_TRUEHD_DEMUXER 0 -#define CONFIG_TTA_DEMUXER 0 -#define CONFIG_TXD_DEMUXER 0 -#define CONFIG_TTY_DEMUXER 0 -#define CONFIG_V210_DEMUXER 0 -#define CONFIG_V210X_DEMUXER 0 -#define CONFIG_VAG_DEMUXER 0 -#define CONFIG_VC1_DEMUXER 0 -#define CONFIG_VC1T_DEMUXER 0 -#define CONFIG_VIVO_DEMUXER 0 -#define CONFIG_VMD_DEMUXER 0 -#define CONFIG_VOBSUB_DEMUXER 0 -#define CONFIG_VOC_DEMUXER 0 -#define CONFIG_VPK_DEMUXER 0 -#define CONFIG_VPLAYER_DEMUXER 0 -#define CONFIG_VQF_DEMUXER 0 -#define CONFIG_W64_DEMUXER 0 -#define CONFIG_WAV_DEMUXER 0 -#define CONFIG_WC3_DEMUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -#define CONFIG_WEBVTT_DEMUXER 0 -#define CONFIG_WSAUD_DEMUXER 0 -#define CONFIG_WSD_DEMUXER 0 -#define CONFIG_WSVQA_DEMUXER 0 -#define CONFIG_WTV_DEMUXER 0 -#define CONFIG_WVE_DEMUXER 0 -#define CONFIG_WV_DEMUXER 0 -#define CONFIG_XA_DEMUXER 0 -#define CONFIG_XBIN_DEMUXER 0 -#define CONFIG_XMV_DEMUXER 0 -#define CONFIG_XVAG_DEMUXER 0 -#define CONFIG_XWMA_DEMUXER 0 -#define CONFIG_YOP_DEMUXER 0 -#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -#define CONFIG_LIBGME_DEMUXER 0 -#define CONFIG_LIBMODPLUG_DEMUXER 0 -#define CONFIG_LIBNUT_DEMUXER 0 -#define CONFIG_LIBOPENMPT_DEMUXER 0 -#define CONFIG_A64MULTI_ENCODER 0 -#define CONFIG_A64MULTI5_ENCODER 0 -#define CONFIG_ALIAS_PIX_ENCODER 0 -#define CONFIG_AMV_ENCODER 0 -#define CONFIG_APNG_ENCODER 0 -#define CONFIG_ASV1_ENCODER 0 -#define CONFIG_ASV2_ENCODER 0 -#define CONFIG_AVRP_ENCODER 0 -#define CONFIG_AVUI_ENCODER 0 -#define CONFIG_AYUV_ENCODER 0 -#define CONFIG_BMP_ENCODER 0 -#define CONFIG_CINEPAK_ENCODER 0 -#define CONFIG_CLJR_ENCODER 0 -#define CONFIG_COMFORTNOISE_ENCODER 0 -#define CONFIG_DNXHD_ENCODER 0 -#define CONFIG_DPX_ENCODER 0 -#define CONFIG_DVVIDEO_ENCODER 0 -#define CONFIG_FFV1_ENCODER 0 -#define CONFIG_FFVHUFF_ENCODER 0 -#define CONFIG_FLASHSV_ENCODER 0 -#define CONFIG_FLASHSV2_ENCODER 0 -#define CONFIG_FLV_ENCODER 0 -#define CONFIG_GIF_ENCODER 0 -#define CONFIG_H261_ENCODER 0 -#define CONFIG_H263_ENCODER 0 -#define CONFIG_H263P_ENCODER 0 -#define CONFIG_HAP_ENCODER 0 -#define CONFIG_HUFFYUV_ENCODER 0 -#define CONFIG_JPEG2000_ENCODER 0 -#define CONFIG_JPEGLS_ENCODER 0 -#define CONFIG_LJPEG_ENCODER 0 -#define CONFIG_MJPEG_ENCODER 0 -#define CONFIG_MPEG1VIDEO_ENCODER 0 -#define CONFIG_MPEG2VIDEO_ENCODER 0 -#define CONFIG_MPEG4_ENCODER 0 -#define CONFIG_MSMPEG4V2_ENCODER 0 -#define CONFIG_MSMPEG4V3_ENCODER 0 -#define CONFIG_MSVIDEO1_ENCODER 0 -#define CONFIG_PAM_ENCODER 0 -#define CONFIG_PBM_ENCODER 0 -#define CONFIG_PCX_ENCODER 0 -#define CONFIG_PGM_ENCODER 0 -#define CONFIG_PGMYUV_ENCODER 0 -#define CONFIG_PNG_ENCODER 0 -#define CONFIG_PPM_ENCODER 0 -#define CONFIG_PRORES_ENCODER 0 -#define CONFIG_PRORES_AW_ENCODER 0 -#define CONFIG_PRORES_KS_ENCODER 0 -#define CONFIG_QTRLE_ENCODER 0 -#define CONFIG_R10K_ENCODER 0 -#define CONFIG_R210_ENCODER 0 -#define CONFIG_RAWVIDEO_ENCODER 0 -#define CONFIG_ROQ_ENCODER 0 -#define CONFIG_RV10_ENCODER 0 -#define CONFIG_RV20_ENCODER 0 -#define CONFIG_S302M_ENCODER 0 -#define CONFIG_SGI_ENCODER 0 -#define CONFIG_SNOW_ENCODER 0 -#define CONFIG_SUNRAST_ENCODER 0 -#define CONFIG_SVQ1_ENCODER 0 -#define CONFIG_TARGA_ENCODER 0 -#define CONFIG_TIFF_ENCODER 0 -#define CONFIG_UTVIDEO_ENCODER 0 -#define CONFIG_V210_ENCODER 0 -#define CONFIG_V308_ENCODER 0 -#define CONFIG_V408_ENCODER 0 -#define CONFIG_V410_ENCODER 0 -#define CONFIG_VC2_ENCODER 0 -#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -#define CONFIG_WMV1_ENCODER 0 -#define CONFIG_WMV2_ENCODER 0 -#define CONFIG_XBM_ENCODER 0 -#define CONFIG_XFACE_ENCODER 0 -#define CONFIG_XWD_ENCODER 0 -#define CONFIG_Y41P_ENCODER 0 -#define CONFIG_YUV4_ENCODER 0 -#define CONFIG_ZLIB_ENCODER 0 -#define CONFIG_ZMBV_ENCODER 0 -#define CONFIG_AAC_ENCODER 0 -#define CONFIG_AC3_ENCODER 0 -#define CONFIG_AC3_FIXED_ENCODER 0 -#define CONFIG_ALAC_ENCODER 0 -#define CONFIG_DCA_ENCODER 0 -#define CONFIG_EAC3_ENCODER 0 -#define CONFIG_FLAC_ENCODER 0 -#define CONFIG_G723_1_ENCODER 0 -#define CONFIG_MLP_ENCODER 0 -#define CONFIG_MP2_ENCODER 0 -#define CONFIG_MP2FIXED_ENCODER 0 -#define CONFIG_NELLYMOSER_ENCODER 0 -#define CONFIG_RA_144_ENCODER 0 -#define CONFIG_SONIC_ENCODER 0 -#define CONFIG_SONIC_LS_ENCODER 0 -#define CONFIG_TRUEHD_ENCODER 0 -#define CONFIG_TTA_ENCODER 0 -#define CONFIG_VORBIS_ENCODER 0 -#define CONFIG_WAVPACK_ENCODER 0 -#define CONFIG_WMAV1_ENCODER 0 -#define CONFIG_WMAV2_ENCODER 0 -#define CONFIG_PCM_ALAW_ENCODER 0 -#define CONFIG_PCM_F32BE_ENCODER 0 -#define CONFIG_PCM_F32LE_ENCODER 0 -#define CONFIG_PCM_F64BE_ENCODER 0 -#define CONFIG_PCM_F64LE_ENCODER 0 -#define CONFIG_PCM_MULAW_ENCODER 0 -#define CONFIG_PCM_S8_ENCODER 0 -#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16BE_ENCODER 0 -#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16LE_ENCODER 0 -#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S24BE_ENCODER 0 -#define CONFIG_PCM_S24DAUD_ENCODER 0 -#define CONFIG_PCM_S24LE_ENCODER 0 -#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S32BE_ENCODER 0 -#define CONFIG_PCM_S32LE_ENCODER 0 -#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S64BE_ENCODER 0 -#define CONFIG_PCM_S64LE_ENCODER 0 -#define CONFIG_PCM_U8_ENCODER 0 -#define CONFIG_PCM_U16BE_ENCODER 0 -#define CONFIG_PCM_U16LE_ENCODER 0 -#define CONFIG_PCM_U24BE_ENCODER 0 -#define CONFIG_PCM_U24LE_ENCODER 0 -#define CONFIG_PCM_U32BE_ENCODER 0 -#define CONFIG_PCM_U32LE_ENCODER 0 -#define CONFIG_ROQ_DPCM_ENCODER 0 -#define CONFIG_ADPCM_ADX_ENCODER 0 -#define CONFIG_ADPCM_G722_ENCODER 0 -#define CONFIG_ADPCM_G726_ENCODER 0 -#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -#define CONFIG_ADPCM_MS_ENCODER 0 -#define CONFIG_ADPCM_SWF_ENCODER 0 -#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -#define CONFIG_SSA_ENCODER 0 -#define CONFIG_ASS_ENCODER 0 -#define CONFIG_DVBSUB_ENCODER 0 -#define CONFIG_DVDSUB_ENCODER 0 -#define CONFIG_MOVTEXT_ENCODER 0 -#define CONFIG_SRT_ENCODER 0 -#define CONFIG_SUBRIP_ENCODER 0 -#define CONFIG_TEXT_ENCODER 0 -#define CONFIG_WEBVTT_ENCODER 0 -#define CONFIG_XSUB_ENCODER 0 -#define CONFIG_AAC_AT_ENCODER 0 -#define CONFIG_ALAC_AT_ENCODER 0 -#define CONFIG_ILBC_AT_ENCODER 0 -#define CONFIG_PCM_ALAW_AT_ENCODER 0 -#define CONFIG_PCM_MULAW_AT_ENCODER 0 -#define CONFIG_LIBFDK_AAC_ENCODER 0 -#define CONFIG_LIBGSM_ENCODER 0 -#define CONFIG_LIBGSM_MS_ENCODER 0 -#define CONFIG_LIBILBC_ENCODER 0 -#define CONFIG_LIBMP3LAME_ENCODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -#define CONFIG_LIBOPENJPEG_ENCODER 0 -#define CONFIG_LIBOPUS_ENCODER 0 -#define CONFIG_LIBSCHROEDINGER_ENCODER 0 -#define CONFIG_LIBSHINE_ENCODER 0 -#define CONFIG_LIBSPEEX_ENCODER 0 -#define CONFIG_LIBTHEORA_ENCODER 0 -#define CONFIG_LIBTWOLAME_ENCODER 0 -#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -#define CONFIG_LIBVORBIS_ENCODER 0 -#define CONFIG_LIBVPX_VP8_ENCODER 0 -#define CONFIG_LIBVPX_VP9_ENCODER 0 -#define CONFIG_LIBWAVPACK_ENCODER 0 -#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -#define CONFIG_LIBWEBP_ENCODER 0 -#define CONFIG_LIBX262_ENCODER 0 -#define CONFIG_LIBX264_ENCODER 0 -#define CONFIG_LIBX264RGB_ENCODER 0 -#define CONFIG_LIBX265_ENCODER 0 -#define CONFIG_LIBXAVS_ENCODER 0 -#define CONFIG_LIBXVID_ENCODER 0 -#define CONFIG_LIBOPENH264_ENCODER 0 -#define CONFIG_H264_NVENC_ENCODER 0 -#define CONFIG_H264_OMX_ENCODER 0 -#define CONFIG_H264_QSV_ENCODER 0 -#define CONFIG_H264_VAAPI_ENCODER 0 -#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -#define CONFIG_NVENC_ENCODER 0 -#define CONFIG_NVENC_H264_ENCODER 0 -#define CONFIG_NVENC_HEVC_ENCODER 0 -#define CONFIG_HEVC_NVENC_ENCODER 0 -#define CONFIG_HEVC_QSV_ENCODER 0 -#define CONFIG_HEVC_VAAPI_ENCODER 0 -#define CONFIG_LIBKVAZAAR_ENCODER 0 -#define CONFIG_MJPEG_VAAPI_ENCODER 0 -#define CONFIG_MPEG2_QSV_ENCODER 0 -#define CONFIG_ABENCH_FILTER 0 -#define CONFIG_ACOMPRESSOR_FILTER 0 -#define CONFIG_ACROSSFADE_FILTER 0 -#define CONFIG_ACRUSHER_FILTER 0 -#define CONFIG_ADELAY_FILTER 0 -#define CONFIG_AECHO_FILTER 0 -#define CONFIG_AEMPHASIS_FILTER 0 -#define CONFIG_AEVAL_FILTER 0 -#define CONFIG_AFADE_FILTER 0 -#define CONFIG_AFFTFILT_FILTER 0 -#define CONFIG_AFORMAT_FILTER 0 -#define CONFIG_AGATE_FILTER 0 -#define CONFIG_AINTERLEAVE_FILTER 0 -#define CONFIG_ALIMITER_FILTER 0 -#define CONFIG_ALLPASS_FILTER 0 -#define CONFIG_ALOOP_FILTER 0 -#define CONFIG_AMERGE_FILTER 0 -#define CONFIG_AMETADATA_FILTER 0 -#define CONFIG_AMIX_FILTER 0 -#define CONFIG_ANEQUALIZER_FILTER 0 -#define CONFIG_ANULL_FILTER 0 -#define CONFIG_APAD_FILTER 0 -#define CONFIG_APERMS_FILTER 0 -#define CONFIG_APHASER_FILTER 0 -#define CONFIG_APULSATOR_FILTER 0 -#define CONFIG_AREALTIME_FILTER 0 -#define CONFIG_ARESAMPLE_FILTER 0 -#define CONFIG_AREVERSE_FILTER 0 -#define CONFIG_ASELECT_FILTER 0 -#define CONFIG_ASENDCMD_FILTER 0 -#define CONFIG_ASETNSAMPLES_FILTER 0 -#define CONFIG_ASETPTS_FILTER 0 -#define CONFIG_ASETRATE_FILTER 0 -#define CONFIG_ASETTB_FILTER 0 -#define CONFIG_ASHOWINFO_FILTER 0 -#define CONFIG_ASIDEDATA_FILTER 0 -#define CONFIG_ASPLIT_FILTER 0 -#define CONFIG_ASTATS_FILTER 0 -#define CONFIG_ASTREAMSELECT_FILTER 0 -#define CONFIG_ASYNCTS_FILTER 0 -#define CONFIG_ATEMPO_FILTER 0 -#define CONFIG_ATRIM_FILTER 0 -#define CONFIG_AZMQ_FILTER 0 -#define CONFIG_BANDPASS_FILTER 0 -#define CONFIG_BANDREJECT_FILTER 0 -#define CONFIG_BASS_FILTER 0 -#define CONFIG_BIQUAD_FILTER 0 -#define CONFIG_BS2B_FILTER 0 -#define CONFIG_CHANNELMAP_FILTER 0 -#define CONFIG_CHANNELSPLIT_FILTER 0 -#define CONFIG_CHORUS_FILTER 0 -#define CONFIG_COMPAND_FILTER 0 -#define CONFIG_COMPENSATIONDELAY_FILTER 0 -#define CONFIG_CRYSTALIZER_FILTER 0 -#define CONFIG_DCSHIFT_FILTER 0 -#define CONFIG_DYNAUDNORM_FILTER 0 -#define CONFIG_EARWAX_FILTER 0 -#define CONFIG_EBUR128_FILTER 0 -#define CONFIG_EQUALIZER_FILTER 0 -#define CONFIG_EXTRASTEREO_FILTER 0 -#define CONFIG_FIREQUALIZER_FILTER 0 -#define CONFIG_FLANGER_FILTER 0 -#define CONFIG_HDCD_FILTER 0 -#define CONFIG_HIGHPASS_FILTER 0 -#define CONFIG_JOIN_FILTER 0 -#define CONFIG_LADSPA_FILTER 0 -#define CONFIG_LOUDNORM_FILTER 0 -#define CONFIG_LOWPASS_FILTER 0 -#define CONFIG_PAN_FILTER 0 -#define CONFIG_REPLAYGAIN_FILTER 0 -#define CONFIG_RESAMPLE_FILTER 0 -#define CONFIG_RUBBERBAND_FILTER 0 -#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -#define CONFIG_SIDECHAINGATE_FILTER 0 -#define CONFIG_SILENCEDETECT_FILTER 0 -#define CONFIG_SILENCEREMOVE_FILTER 0 -#define CONFIG_SOFALIZER_FILTER 0 -#define CONFIG_STEREOTOOLS_FILTER 0 -#define CONFIG_STEREOWIDEN_FILTER 0 -#define CONFIG_TREBLE_FILTER 0 -#define CONFIG_TREMOLO_FILTER 0 -#define CONFIG_VIBRATO_FILTER 0 -#define CONFIG_VOLUME_FILTER 0 -#define CONFIG_VOLUMEDETECT_FILTER 0 -#define CONFIG_AEVALSRC_FILTER 0 -#define CONFIG_ANOISESRC_FILTER 0 -#define CONFIG_ANULLSRC_FILTER 0 -#define CONFIG_FLITE_FILTER 0 -#define CONFIG_SINE_FILTER 0 -#define CONFIG_ANULLSINK_FILTER 0 -#define CONFIG_ALPHAEXTRACT_FILTER 0 -#define CONFIG_ALPHAMERGE_FILTER 0 -#define CONFIG_ASS_FILTER 0 -#define CONFIG_ATADENOISE_FILTER 0 -#define CONFIG_AVGBLUR_FILTER 0 -#define CONFIG_BBOX_FILTER 0 -#define CONFIG_BENCH_FILTER 0 -#define CONFIG_BITPLANENOISE_FILTER 0 -#define CONFIG_BLACKDETECT_FILTER 0 -#define CONFIG_BLACKFRAME_FILTER 0 -#define CONFIG_BLEND_FILTER 0 -#define CONFIG_BOXBLUR_FILTER 0 -#define CONFIG_BWDIF_FILTER 0 -#define CONFIG_CHROMAKEY_FILTER 0 -#define CONFIG_CIESCOPE_FILTER 0 -#define CONFIG_CODECVIEW_FILTER 0 -#define CONFIG_COLORBALANCE_FILTER 0 -#define CONFIG_COLORCHANNELMIXER_FILTER 0 -#define CONFIG_COLORKEY_FILTER 0 -#define CONFIG_COLORLEVELS_FILTER 0 -#define CONFIG_COLORMATRIX_FILTER 0 -#define CONFIG_COLORSPACE_FILTER 0 -#define CONFIG_CONVOLUTION_FILTER 0 -#define CONFIG_COPY_FILTER 0 -#define CONFIG_COREIMAGE_FILTER 0 -#define CONFIG_COVER_RECT_FILTER 0 -#define CONFIG_CROP_FILTER 0 -#define CONFIG_CROPDETECT_FILTER 0 -#define CONFIG_CURVES_FILTER 0 -#define CONFIG_DATASCOPE_FILTER 0 -#define CONFIG_DCTDNOIZ_FILTER 0 -#define CONFIG_DEBAND_FILTER 0 -#define CONFIG_DECIMATE_FILTER 0 -#define CONFIG_DEFLATE_FILTER 0 -#define CONFIG_DEJUDDER_FILTER 0 -#define CONFIG_DELOGO_FILTER 0 -#define CONFIG_DESHAKE_FILTER 0 -#define CONFIG_DETELECINE_FILTER 0 -#define CONFIG_DILATION_FILTER 0 -#define CONFIG_DISPLACE_FILTER 0 -#define CONFIG_DRAWBOX_FILTER 0 -#define CONFIG_DRAWGRAPH_FILTER 0 -#define CONFIG_DRAWGRID_FILTER 0 -#define CONFIG_DRAWTEXT_FILTER 0 -#define CONFIG_EDGEDETECT_FILTER 0 -#define CONFIG_ELBG_FILTER 0 -#define CONFIG_EQ_FILTER 0 -#define CONFIG_EROSION_FILTER 0 -#define CONFIG_EXTRACTPLANES_FILTER 0 -#define CONFIG_FADE_FILTER 0 -#define CONFIG_FFTFILT_FILTER 0 -#define CONFIG_FIELD_FILTER 0 -#define CONFIG_FIELDHINT_FILTER 0 -#define CONFIG_FIELDMATCH_FILTER 0 -#define CONFIG_FIELDORDER_FILTER 0 -#define CONFIG_FIND_RECT_FILTER 0 -#define CONFIG_FORMAT_FILTER 0 -#define CONFIG_FPS_FILTER 0 -#define CONFIG_FRAMEPACK_FILTER 0 -#define CONFIG_FRAMERATE_FILTER 0 -#define CONFIG_FRAMESTEP_FILTER 0 -#define CONFIG_FREI0R_FILTER 0 -#define CONFIG_FSPP_FILTER 0 -#define CONFIG_GBLUR_FILTER 0 -#define CONFIG_GEQ_FILTER 0 -#define CONFIG_GRADFUN_FILTER 0 -#define CONFIG_HALDCLUT_FILTER 0 -#define CONFIG_HFLIP_FILTER 0 -#define CONFIG_HISTEQ_FILTER 0 -#define CONFIG_HISTOGRAM_FILTER 0 -#define CONFIG_HQDN3D_FILTER 0 -#define CONFIG_HQX_FILTER 0 -#define CONFIG_HSTACK_FILTER 0 -#define CONFIG_HUE_FILTER 0 -#define CONFIG_HWDOWNLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -#define CONFIG_HYSTERESIS_FILTER 0 -#define CONFIG_IDET_FILTER 0 -#define CONFIG_IL_FILTER 0 -#define CONFIG_INFLATE_FILTER 0 -#define CONFIG_INTERLACE_FILTER 0 -#define CONFIG_INTERLEAVE_FILTER 0 -#define CONFIG_KERNDEINT_FILTER 0 -#define CONFIG_LENSCORRECTION_FILTER 0 -#define CONFIG_LOOP_FILTER 0 -#define CONFIG_LUT_FILTER 0 -#define CONFIG_LUT2_FILTER 0 -#define CONFIG_LUT3D_FILTER 0 -#define CONFIG_LUTRGB_FILTER 0 -#define CONFIG_LUTYUV_FILTER 0 -#define CONFIG_MASKEDCLAMP_FILTER 0 -#define CONFIG_MASKEDMERGE_FILTER 0 -#define CONFIG_MCDEINT_FILTER 0 -#define CONFIG_MERGEPLANES_FILTER 0 -#define CONFIG_MESTIMATE_FILTER 0 -#define CONFIG_METADATA_FILTER 0 -#define CONFIG_MINTERPOLATE_FILTER 0 -#define CONFIG_MPDECIMATE_FILTER 0 -#define CONFIG_NEGATE_FILTER 0 -#define CONFIG_NLMEANS_FILTER 0 -#define CONFIG_NNEDI_FILTER 0 -#define CONFIG_NOFORMAT_FILTER 0 -#define CONFIG_NOISE_FILTER 0 -#define CONFIG_NULL_FILTER 0 -#define CONFIG_OCR_FILTER 0 -#define CONFIG_OCV_FILTER 0 -#define CONFIG_OVERLAY_FILTER 0 -#define CONFIG_OWDENOISE_FILTER 0 -#define CONFIG_PAD_FILTER 0 -#define CONFIG_PALETTEGEN_FILTER 0 -#define CONFIG_PALETTEUSE_FILTER 0 -#define CONFIG_PERMS_FILTER 0 -#define CONFIG_PERSPECTIVE_FILTER 0 -#define CONFIG_PHASE_FILTER 0 -#define CONFIG_PIXDESCTEST_FILTER 0 -#define CONFIG_PP_FILTER 0 -#define CONFIG_PP7_FILTER 0 -#define CONFIG_PREWITT_FILTER 0 -#define CONFIG_PSNR_FILTER 0 -#define CONFIG_PULLUP_FILTER 0 -#define CONFIG_QP_FILTER 0 -#define CONFIG_RANDOM_FILTER 0 -#define CONFIG_READVITC_FILTER 0 -#define CONFIG_REALTIME_FILTER 0 -#define CONFIG_REMAP_FILTER 0 -#define CONFIG_REMOVEGRAIN_FILTER 0 -#define CONFIG_REMOVELOGO_FILTER 0 -#define CONFIG_REPEATFIELDS_FILTER 0 -#define CONFIG_REVERSE_FILTER 0 -#define CONFIG_ROTATE_FILTER 0 -#define CONFIG_SAB_FILTER 0 -#define CONFIG_SCALE_FILTER 0 -#define CONFIG_SCALE_NPP_FILTER 0 -#define CONFIG_SCALE_VAAPI_FILTER 0 -#define CONFIG_SCALE2REF_FILTER 0 -#define CONFIG_SELECT_FILTER 0 -#define CONFIG_SELECTIVECOLOR_FILTER 0 -#define CONFIG_SENDCMD_FILTER 0 -#define CONFIG_SEPARATEFIELDS_FILTER 0 -#define CONFIG_SETDAR_FILTER 0 -#define CONFIG_SETFIELD_FILTER 0 -#define CONFIG_SETPTS_FILTER 0 -#define CONFIG_SETSAR_FILTER 0 -#define CONFIG_SETTB_FILTER 0 -#define CONFIG_SHOWINFO_FILTER 0 -#define CONFIG_SHOWPALETTE_FILTER 0 -#define CONFIG_SHUFFLEFRAMES_FILTER 0 -#define CONFIG_SHUFFLEPLANES_FILTER 0 -#define CONFIG_SIDEDATA_FILTER 0 -#define CONFIG_SIGNALSTATS_FILTER 0 -#define CONFIG_SMARTBLUR_FILTER 0 -#define CONFIG_SOBEL_FILTER 0 -#define CONFIG_SPLIT_FILTER 0 -#define CONFIG_SPP_FILTER 0 -#define CONFIG_SSIM_FILTER 0 -#define CONFIG_STEREO3D_FILTER 0 -#define CONFIG_STREAMSELECT_FILTER 0 -#define CONFIG_SUBTITLES_FILTER 0 -#define CONFIG_SUPER2XSAI_FILTER 0 -#define CONFIG_SWAPRECT_FILTER 0 -#define CONFIG_SWAPUV_FILTER 0 -#define CONFIG_TBLEND_FILTER 0 -#define CONFIG_TELECINE_FILTER 0 -#define CONFIG_THUMBNAIL_FILTER 0 -#define CONFIG_TILE_FILTER 0 -#define CONFIG_TINTERLACE_FILTER 0 -#define CONFIG_TRANSPOSE_FILTER 0 -#define CONFIG_TRIM_FILTER 0 -#define CONFIG_UNSHARP_FILTER 0 -#define CONFIG_USPP_FILTER 0 -#define CONFIG_VAGUEDENOISER_FILTER 0 -#define CONFIG_VECTORSCOPE_FILTER 0 -#define CONFIG_VFLIP_FILTER 0 -#define CONFIG_VIDSTABDETECT_FILTER 0 -#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -#define CONFIG_VIGNETTE_FILTER 0 -#define CONFIG_VSTACK_FILTER 0 -#define CONFIG_W3FDIF_FILTER 0 -#define CONFIG_WAVEFORM_FILTER 0 -#define CONFIG_WEAVE_FILTER 0 -#define CONFIG_XBR_FILTER 0 -#define CONFIG_YADIF_FILTER 0 -#define CONFIG_ZMQ_FILTER 0 -#define CONFIG_ZOOMPAN_FILTER 0 -#define CONFIG_ZSCALE_FILTER 0 -#define CONFIG_ALLRGB_FILTER 0 -#define CONFIG_ALLYUV_FILTER 0 -#define CONFIG_CELLAUTO_FILTER 0 -#define CONFIG_COLOR_FILTER 0 -#define CONFIG_COREIMAGESRC_FILTER 0 -#define CONFIG_FREI0R_SRC_FILTER 0 -#define CONFIG_HALDCLUTSRC_FILTER 0 -#define CONFIG_LIFE_FILTER 0 -#define CONFIG_MANDELBROT_FILTER 0 -#define CONFIG_MPTESTSRC_FILTER 0 -#define CONFIG_NULLSRC_FILTER 0 -#define CONFIG_RGBTESTSRC_FILTER 0 -#define CONFIG_SMPTEBARS_FILTER 0 -#define CONFIG_SMPTEHDBARS_FILTER 0 -#define CONFIG_TESTSRC_FILTER 0 -#define CONFIG_TESTSRC2_FILTER 0 -#define CONFIG_YUVTESTSRC_FILTER 0 -#define CONFIG_NULLSINK_FILTER 0 -#define CONFIG_ADRAWGRAPH_FILTER 0 -#define CONFIG_AHISTOGRAM_FILTER 0 -#define CONFIG_APHASEMETER_FILTER 0 -#define CONFIG_AVECTORSCOPE_FILTER 0 -#define CONFIG_CONCAT_FILTER 0 -#define CONFIG_SHOWCQT_FILTER 0 -#define CONFIG_SHOWFREQS_FILTER 0 -#define CONFIG_SHOWSPECTRUM_FILTER 0 -#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -#define CONFIG_SHOWVOLUME_FILTER 0 -#define CONFIG_SHOWWAVES_FILTER 0 -#define CONFIG_SHOWWAVESPIC_FILTER 0 -#define CONFIG_SPECTRUMSYNTH_FILTER 0 -#define CONFIG_AMOVIE_FILTER 0 -#define CONFIG_MOVIE_FILTER 0 -#define CONFIG_H263_CUVID_HWACCEL 0 -#define CONFIG_H263_VAAPI_HWACCEL 0 -#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_H264_CUVID_HWACCEL 0 -#define CONFIG_H264_D3D11VA_HWACCEL 0 -#define CONFIG_H264_DXVA2_HWACCEL 0 -#define CONFIG_H264_MEDIACODEC_HWACCEL 0 -#define CONFIG_H264_MMAL_HWACCEL 0 -#define CONFIG_H264_QSV_HWACCEL 0 -#define CONFIG_H264_VAAPI_HWACCEL 0 -#define CONFIG_H264_VDA_HWACCEL 0 -#define CONFIG_H264_VDA_OLD_HWACCEL 0 -#define CONFIG_H264_VDPAU_HWACCEL 0 -#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_HEVC_CUVID_HWACCEL 0 -#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -#define CONFIG_HEVC_DXVA2_HWACCEL 0 -#define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -#define CONFIG_HEVC_QSV_HWACCEL 0 -#define CONFIG_HEVC_VAAPI_HWACCEL 0 -#define CONFIG_HEVC_VDPAU_HWACCEL 0 -#define CONFIG_MJPEG_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_XVMC_HWACCEL 0 -#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG2_CUVID_HWACCEL 0 -#define CONFIG_MPEG2_XVMC_HWACCEL 0 -#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -#define CONFIG_MPEG2_MMAL_HWACCEL 0 -#define CONFIG_MPEG2_QSV_HWACCEL 0 -#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG4_CUVID_HWACCEL 0 -#define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -#define CONFIG_MPEG4_MMAL_HWACCEL 0 -#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_VC1_CUVID_HWACCEL 0 -#define CONFIG_VC1_D3D11VA_HWACCEL 0 -#define CONFIG_VC1_DXVA2_HWACCEL 0 -#define CONFIG_VC1_VAAPI_HWACCEL 0 -#define CONFIG_VC1_VDPAU_HWACCEL 0 -#define CONFIG_VC1_MMAL_HWACCEL 0 -#define CONFIG_VC1_QSV_HWACCEL 0 -#define CONFIG_VP8_CUVID_HWACCEL 0 -#define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_CUVID_HWACCEL 0 -#define CONFIG_VP9_D3D11VA_HWACCEL 0 -#define CONFIG_VP9_DXVA2_HWACCEL 0 -#define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -#define CONFIG_WMV3_DXVA2_HWACCEL 0 -#define CONFIG_WMV3_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_VDPAU_HWACCEL 0 -#define CONFIG_ALSA_INDEV 0 -#define CONFIG_AVFOUNDATION_INDEV 0 -#define CONFIG_BKTR_INDEV 0 -#define CONFIG_DECKLINK_INDEV 0 -#define CONFIG_DSHOW_INDEV 0 -#define CONFIG_DV1394_INDEV 0 -#define CONFIG_FBDEV_INDEV 0 -#define CONFIG_GDIGRAB_INDEV 0 -#define CONFIG_IEC61883_INDEV 0 -#define CONFIG_JACK_INDEV 0 -#define CONFIG_LAVFI_INDEV 0 -#define CONFIG_OPENAL_INDEV 0 -#define CONFIG_OSS_INDEV 0 -#define CONFIG_PULSE_INDEV 0 -#define CONFIG_QTKIT_INDEV 0 -#define CONFIG_SNDIO_INDEV 0 -#define CONFIG_V4L2_INDEV 0 -#define CONFIG_VFWCAP_INDEV 0 -#define CONFIG_X11GRAB_INDEV 0 -#define CONFIG_X11GRAB_XCB_INDEV 0 -#define CONFIG_LIBCDIO_INDEV 0 -#define CONFIG_LIBDC1394_INDEV 0 -#define CONFIG_A64_MUXER 0 -#define CONFIG_AC3_MUXER 0 -#define CONFIG_ADTS_MUXER 0 -#define CONFIG_ADX_MUXER 0 -#define CONFIG_AIFF_MUXER 0 -#define CONFIG_AMR_MUXER 0 -#define CONFIG_APNG_MUXER 0 -#define CONFIG_ASF_MUXER 0 -#define CONFIG_ASS_MUXER 0 -#define CONFIG_AST_MUXER 0 -#define CONFIG_ASF_STREAM_MUXER 0 -#define CONFIG_AU_MUXER 0 -#define CONFIG_AVI_MUXER 0 -#define CONFIG_AVM2_MUXER 0 -#define CONFIG_BIT_MUXER 0 -#define CONFIG_CAF_MUXER 0 -#define CONFIG_CAVSVIDEO_MUXER 0 -#define CONFIG_CRC_MUXER 0 -#define CONFIG_DASH_MUXER 0 -#define CONFIG_DATA_MUXER 0 -#define CONFIG_DAUD_MUXER 0 -#define CONFIG_DIRAC_MUXER 0 -#define CONFIG_DNXHD_MUXER 0 -#define CONFIG_DTS_MUXER 0 -#define CONFIG_DV_MUXER 0 -#define CONFIG_EAC3_MUXER 0 -#define CONFIG_F4V_MUXER 0 -#define CONFIG_FFM_MUXER 0 -#define CONFIG_FFMETADATA_MUXER 0 -#define CONFIG_FIFO_MUXER 0 -#define CONFIG_FILMSTRIP_MUXER 0 -#define CONFIG_FLAC_MUXER 0 -#define CONFIG_FLV_MUXER 0 -#define CONFIG_FRAMECRC_MUXER 0 -#define CONFIG_FRAMEHASH_MUXER 0 -#define CONFIG_FRAMEMD5_MUXER 0 -#define CONFIG_G722_MUXER 0 -#define CONFIG_G723_1_MUXER 0 -#define CONFIG_GIF_MUXER 0 -#define CONFIG_GSM_MUXER 0 -#define CONFIG_GXF_MUXER 0 -#define CONFIG_H261_MUXER 0 -#define CONFIG_H263_MUXER 0 -#define CONFIG_H264_MUXER 0 -#define CONFIG_HASH_MUXER 0 -#define CONFIG_HDS_MUXER 0 -#define CONFIG_HEVC_MUXER 0 -#define CONFIG_HLS_MUXER 0 -#define CONFIG_ICO_MUXER 0 -#define CONFIG_ILBC_MUXER 0 -#define CONFIG_IMAGE2_MUXER 0 -#define CONFIG_IMAGE2PIPE_MUXER 0 -#define CONFIG_IPOD_MUXER 0 -#define CONFIG_IRCAM_MUXER 0 -#define CONFIG_ISMV_MUXER 0 -#define CONFIG_IVF_MUXER 0 -#define CONFIG_JACOSUB_MUXER 0 -#define CONFIG_LATM_MUXER 0 -#define CONFIG_LRC_MUXER 0 -#define CONFIG_M4V_MUXER 0 -#define CONFIG_MD5_MUXER 0 -#define CONFIG_MATROSKA_MUXER 0 -#define CONFIG_MATROSKA_AUDIO_MUXER 0 -#define CONFIG_MICRODVD_MUXER 0 -#define CONFIG_MJPEG_MUXER 0 -#define CONFIG_MLP_MUXER 0 -#define CONFIG_MMF_MUXER 0 -#define CONFIG_MOV_MUXER 0 -#define CONFIG_MP2_MUXER 0 -#define CONFIG_MP3_MUXER 0 -#define CONFIG_MP4_MUXER 0 -#define CONFIG_MPEG1SYSTEM_MUXER 0 -#define CONFIG_MPEG1VCD_MUXER 0 -#define CONFIG_MPEG1VIDEO_MUXER 0 -#define CONFIG_MPEG2DVD_MUXER 0 -#define CONFIG_MPEG2SVCD_MUXER 0 -#define CONFIG_MPEG2VIDEO_MUXER 0 -#define CONFIG_MPEG2VOB_MUXER 0 -#define CONFIG_MPEGTS_MUXER 0 -#define CONFIG_MPJPEG_MUXER 0 -#define CONFIG_MXF_MUXER 0 -#define CONFIG_MXF_D10_MUXER 0 -#define CONFIG_MXF_OPATOM_MUXER 0 -#define CONFIG_NULL_MUXER 0 -#define CONFIG_NUT_MUXER 0 -#define CONFIG_OGA_MUXER 0 -#define CONFIG_OGG_MUXER 0 -#define CONFIG_OGV_MUXER 0 -#define CONFIG_OMA_MUXER 0 -#define CONFIG_OPUS_MUXER 0 -#define CONFIG_PCM_ALAW_MUXER 0 -#define CONFIG_PCM_MULAW_MUXER 0 -#define CONFIG_PCM_F64BE_MUXER 0 -#define CONFIG_PCM_F64LE_MUXER 0 -#define CONFIG_PCM_F32BE_MUXER 0 -#define CONFIG_PCM_F32LE_MUXER 0 -#define CONFIG_PCM_S32BE_MUXER 0 -#define CONFIG_PCM_S32LE_MUXER 0 -#define CONFIG_PCM_S24BE_MUXER 0 -#define CONFIG_PCM_S24LE_MUXER 0 -#define CONFIG_PCM_S16BE_MUXER 0 -#define CONFIG_PCM_S16LE_MUXER 0 -#define CONFIG_PCM_S8_MUXER 0 -#define CONFIG_PCM_U32BE_MUXER 0 -#define CONFIG_PCM_U32LE_MUXER 0 -#define CONFIG_PCM_U24BE_MUXER 0 -#define CONFIG_PCM_U24LE_MUXER 0 -#define CONFIG_PCM_U16BE_MUXER 0 -#define CONFIG_PCM_U16LE_MUXER 0 -#define CONFIG_PCM_U8_MUXER 0 -#define CONFIG_PSP_MUXER 0 -#define CONFIG_RAWVIDEO_MUXER 0 -#define CONFIG_RM_MUXER 0 -#define CONFIG_ROQ_MUXER 0 -#define CONFIG_RSO_MUXER 0 -#define CONFIG_RTP_MUXER 0 -#define CONFIG_RTP_MPEGTS_MUXER 0 -#define CONFIG_RTSP_MUXER 0 -#define CONFIG_SAP_MUXER 0 -#define CONFIG_SEGMENT_MUXER 0 -#define CONFIG_STREAM_SEGMENT_MUXER 0 -#define CONFIG_SINGLEJPEG_MUXER 0 -#define CONFIG_SMJPEG_MUXER 0 -#define CONFIG_SMOOTHSTREAMING_MUXER 0 -#define CONFIG_SOX_MUXER 0 -#define CONFIG_SPX_MUXER 0 -#define CONFIG_SPDIF_MUXER 0 -#define CONFIG_SRT_MUXER 0 -#define CONFIG_SWF_MUXER 0 -#define CONFIG_TEE_MUXER 0 -#define CONFIG_TG2_MUXER 0 -#define CONFIG_TGP_MUXER 0 -#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -#define CONFIG_TRUEHD_MUXER 0 -#define CONFIG_TTA_MUXER 0 -#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -#define CONFIG_VC1_MUXER 0 -#define CONFIG_VC1T_MUXER 0 -#define CONFIG_VOC_MUXER 0 -#define CONFIG_W64_MUXER 0 -#define CONFIG_WAV_MUXER 0 -#define CONFIG_WEBM_MUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -#define CONFIG_WEBM_CHUNK_MUXER 0 -#define CONFIG_WEBP_MUXER 0 -#define CONFIG_WEBVTT_MUXER 0 -#define CONFIG_WTV_MUXER 0 -#define CONFIG_WV_MUXER 0 -#define CONFIG_YUV4MPEGPIPE_MUXER 0 -#define CONFIG_CHROMAPRINT_MUXER 0 -#define CONFIG_LIBNUT_MUXER 0 -#define CONFIG_ALSA_OUTDEV 0 -#define CONFIG_CACA_OUTDEV 0 -#define CONFIG_DECKLINK_OUTDEV 0 -#define CONFIG_FBDEV_OUTDEV 0 -#define CONFIG_OPENGL_OUTDEV 0 -#define CONFIG_OSS_OUTDEV 0 -#define CONFIG_PULSE_OUTDEV 0 -#define CONFIG_SDL2_OUTDEV 0 -#define CONFIG_SNDIO_OUTDEV 0 -#define CONFIG_V4L2_OUTDEV 0 -#define CONFIG_XV_OUTDEV 0 -#define CONFIG_AAC_PARSER 0 -#define CONFIG_AAC_LATM_PARSER 0 -#define CONFIG_AC3_PARSER 0 -#define CONFIG_ADX_PARSER 0 -#define CONFIG_BMP_PARSER 0 -#define CONFIG_CAVSVIDEO_PARSER 0 -#define CONFIG_COOK_PARSER 0 -#define CONFIG_DCA_PARSER 0 -#define CONFIG_DIRAC_PARSER 0 -#define CONFIG_DNXHD_PARSER 0 -#define CONFIG_DPX_PARSER 0 -#define CONFIG_DVAUDIO_PARSER 0 -#define CONFIG_DVBSUB_PARSER 0 -#define CONFIG_DVDSUB_PARSER 0 -#define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 1 -#define CONFIG_G729_PARSER 0 -#define CONFIG_GSM_PARSER 0 -#define CONFIG_H261_PARSER 0 -#define CONFIG_H263_PARSER 0 -#define CONFIG_H264_PARSER 0 -#define CONFIG_HEVC_PARSER 0 -#define CONFIG_MJPEG_PARSER 0 -#define CONFIG_MLP_PARSER 0 -#define CONFIG_MPEG4VIDEO_PARSER 0 -#define CONFIG_MPEGAUDIO_PARSER 0 -#define CONFIG_MPEGVIDEO_PARSER 0 -#define CONFIG_OPUS_PARSER 0 -#define CONFIG_PNG_PARSER 0 -#define CONFIG_PNM_PARSER 0 -#define CONFIG_RV30_PARSER 0 -#define CONFIG_RV40_PARSER 0 -#define CONFIG_TAK_PARSER 0 -#define CONFIG_VC1_PARSER 0 -#define CONFIG_VORBIS_PARSER 0 -#define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 1 #define CONFIG_VP9_PARSER 1 -#define CONFIG_ASYNC_PROTOCOL 0 -#define CONFIG_BLURAY_PROTOCOL 0 -#define CONFIG_CACHE_PROTOCOL 0 -#define CONFIG_CONCAT_PROTOCOL 0 -#define CONFIG_CRYPTO_PROTOCOL 0 -#define CONFIG_DATA_PROTOCOL 0 -#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -#define CONFIG_FILE_PROTOCOL 0 -#define CONFIG_FTP_PROTOCOL 0 -#define CONFIG_GOPHER_PROTOCOL 0 -#define CONFIG_HLS_PROTOCOL 0 -#define CONFIG_HTTP_PROTOCOL 0 -#define CONFIG_HTTPPROXY_PROTOCOL 0 -#define CONFIG_HTTPS_PROTOCOL 0 -#define CONFIG_ICECAST_PROTOCOL 0 -#define CONFIG_MMSH_PROTOCOL 0 -#define CONFIG_MMST_PROTOCOL 0 -#define CONFIG_MD5_PROTOCOL 0 -#define CONFIG_PIPE_PROTOCOL 0 -#define CONFIG_RTMP_PROTOCOL 0 -#define CONFIG_RTMPE_PROTOCOL 0 -#define CONFIG_RTMPS_PROTOCOL 0 -#define CONFIG_RTMPT_PROTOCOL 0 -#define CONFIG_RTMPTE_PROTOCOL 0 -#define CONFIG_RTMPTS_PROTOCOL 0 -#define CONFIG_RTP_PROTOCOL 0 -#define CONFIG_SCTP_PROTOCOL 0 -#define CONFIG_SRTP_PROTOCOL 0 -#define CONFIG_SUBFILE_PROTOCOL 0 -#define CONFIG_TEE_PROTOCOL 0 -#define CONFIG_TCP_PROTOCOL 0 -#define CONFIG_TLS_GNUTLS_PROTOCOL 0 -#define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -#define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -#define CONFIG_TLS_OPENSSL_PROTOCOL 0 -#define CONFIG_UDP_PROTOCOL 0 -#define CONFIG_UDPLITE_PROTOCOL 0 -#define CONFIG_UNIX_PROTOCOL 0 -#define CONFIG_LIBRTMP_PROTOCOL 0 -#define CONFIG_LIBRTMPE_PROTOCOL 0 -#define CONFIG_LIBRTMPS_PROTOCOL 0 -#define CONFIG_LIBRTMPT_PROTOCOL 0 -#define CONFIG_LIBRTMPTE_PROTOCOL 0 -#define CONFIG_LIBSSH_PROTOCOL 0 -#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ diff --git a/media/ffvpx/config_win32.asm b/media/ffvpx/config_win32.asm index 85eef2216e09..660202d0a964 100644 --- a/media/ffvpx/config_win32.asm +++ b/media/ffvpx/config_win32.asm @@ -369,15 +369,7 @@ %define HAVE_XLIB 0 %define CONFIG_BSFS 0 %define CONFIG_DECODERS 1 -%define CONFIG_ENCODERS 0 -%define CONFIG_HWACCELS 0 %define CONFIG_PARSERS 1 -%define CONFIG_INDEVS 0 -%define CONFIG_OUTDEVS 0 -%define CONFIG_FILTERS 0 -%define CONFIG_DEMUXERS 0 -%define CONFIG_MUXERS 0 -%define CONFIG_PROTOCOLS 0 %define CONFIG_DOC 0 %define CONFIG_HTMLPAGES 0 %define CONFIG_MANPAGES 1 @@ -499,7 +491,6 @@ %define CONFIG_VAAPI 0 %define CONFIG_VDA 0 %define CONFIG_VDPAU 0 -%define CONFIG_VIDEOTOOLBOX_HWACCEL 0 %define CONFIG_XVMC 0 %define CONFIG_FTRAPV 0 %define CONFIG_GRAY 0 @@ -564,7 +555,6 @@ %define CONFIG_FDCTDSP 0 %define CONFIG_FLACDSP 1 %define CONFIG_FMTCONVERT 0 -%define CONFIG_FRAME_THREAD_ENCODER 0 %define CONFIG_G722DSP 0 %define CONFIG_GOLOMB 1 %define CONFIG_GPLV3 0 @@ -640,1569 +630,9 @@ %define CONFIG_REMOVE_EXTRADATA_BSF 0 %define CONFIG_TEXT2MOVSUB_BSF 0 %define CONFIG_VP9_SUPERFRAME_BSF 0 -%define CONFIG_AASC_DECODER 0 -%define CONFIG_AIC_DECODER 0 -%define CONFIG_ALIAS_PIX_DECODER 0 -%define CONFIG_AMV_DECODER 0 -%define CONFIG_ANM_DECODER 0 -%define CONFIG_ANSI_DECODER 0 -%define CONFIG_APNG_DECODER 0 -%define CONFIG_ASV1_DECODER 0 -%define CONFIG_ASV2_DECODER 0 -%define CONFIG_AURA_DECODER 0 -%define CONFIG_AURA2_DECODER 0 -%define CONFIG_AVRP_DECODER 0 -%define CONFIG_AVRN_DECODER 0 -%define CONFIG_AVS_DECODER 0 -%define CONFIG_AVUI_DECODER 0 -%define CONFIG_AYUV_DECODER 0 -%define CONFIG_BETHSOFTVID_DECODER 0 -%define CONFIG_BFI_DECODER 0 -%define CONFIG_BINK_DECODER 0 -%define CONFIG_BMP_DECODER 0 -%define CONFIG_BMV_VIDEO_DECODER 0 -%define CONFIG_BRENDER_PIX_DECODER 0 -%define CONFIG_C93_DECODER 0 -%define CONFIG_CAVS_DECODER 0 -%define CONFIG_CDGRAPHICS_DECODER 0 -%define CONFIG_CDXL_DECODER 0 -%define CONFIG_CFHD_DECODER 0 -%define CONFIG_CINEPAK_DECODER 0 -%define CONFIG_CLJR_DECODER 0 -%define CONFIG_CLLC_DECODER 0 -%define CONFIG_COMFORTNOISE_DECODER 0 -%define CONFIG_CPIA_DECODER 0 -%define CONFIG_CSCD_DECODER 0 -%define CONFIG_CYUV_DECODER 0 -%define CONFIG_DDS_DECODER 0 -%define CONFIG_DFA_DECODER 0 -%define CONFIG_DIRAC_DECODER 0 -%define CONFIG_DNXHD_DECODER 0 -%define CONFIG_DPX_DECODER 0 -%define CONFIG_DSICINVIDEO_DECODER 0 -%define CONFIG_DVAUDIO_DECODER 0 -%define CONFIG_DVVIDEO_DECODER 0 -%define CONFIG_DXA_DECODER 0 -%define CONFIG_DXTORY_DECODER 0 -%define CONFIG_DXV_DECODER 0 -%define CONFIG_EACMV_DECODER 0 -%define CONFIG_EAMAD_DECODER 0 -%define CONFIG_EATGQ_DECODER 0 -%define CONFIG_EATGV_DECODER 0 -%define CONFIG_EATQI_DECODER 0 -%define CONFIG_EIGHTBPS_DECODER 0 -%define CONFIG_EIGHTSVX_EXP_DECODER 0 -%define CONFIG_EIGHTSVX_FIB_DECODER 0 -%define CONFIG_ESCAPE124_DECODER 0 -%define CONFIG_ESCAPE130_DECODER 0 -%define CONFIG_EXR_DECODER 0 -%define CONFIG_FFV1_DECODER 0 -%define CONFIG_FFVHUFF_DECODER 0 -%define CONFIG_FIC_DECODER 0 -%define CONFIG_FLASHSV_DECODER 0 -%define CONFIG_FLASHSV2_DECODER 0 -%define CONFIG_FLIC_DECODER 0 -%define CONFIG_FLV_DECODER 0 -%define CONFIG_FOURXM_DECODER 0 -%define CONFIG_FRAPS_DECODER 0 -%define CONFIG_FRWU_DECODER 0 -%define CONFIG_G2M_DECODER 0 -%define CONFIG_GIF_DECODER 0 -%define CONFIG_H261_DECODER 0 -%define CONFIG_H263_DECODER 0 -%define CONFIG_H263I_DECODER 0 -%define CONFIG_H263P_DECODER 0 -%define CONFIG_H264_DECODER 0 -%define CONFIG_H264_CRYSTALHD_DECODER 0 -%define CONFIG_H264_MEDIACODEC_DECODER 0 -%define CONFIG_H264_MMAL_DECODER 0 -%define CONFIG_H264_QSV_DECODER 0 -%define CONFIG_H264_VDA_DECODER 0 -%define CONFIG_H264_VDPAU_DECODER 0 -%define CONFIG_HAP_DECODER 0 -%define CONFIG_HEVC_DECODER 0 -%define CONFIG_HEVC_QSV_DECODER 0 -%define CONFIG_HNM4_VIDEO_DECODER 0 -%define CONFIG_HQ_HQA_DECODER 0 -%define CONFIG_HQX_DECODER 0 -%define CONFIG_HUFFYUV_DECODER 0 -%define CONFIG_IDCIN_DECODER 0 -%define CONFIG_IFF_ILBM_DECODER 0 -%define CONFIG_INDEO2_DECODER 0 -%define CONFIG_INDEO3_DECODER 0 -%define CONFIG_INDEO4_DECODER 0 -%define CONFIG_INDEO5_DECODER 0 -%define CONFIG_INTERPLAY_VIDEO_DECODER 0 -%define CONFIG_JPEG2000_DECODER 0 -%define CONFIG_JPEGLS_DECODER 0 -%define CONFIG_JV_DECODER 0 -%define CONFIG_KGV1_DECODER 0 -%define CONFIG_KMVC_DECODER 0 -%define CONFIG_LAGARITH_DECODER 0 -%define CONFIG_LOCO_DECODER 0 -%define CONFIG_M101_DECODER 0 -%define CONFIG_MAGICYUV_DECODER 0 -%define CONFIG_MDEC_DECODER 0 -%define CONFIG_MIMIC_DECODER 0 -%define CONFIG_MJPEG_DECODER 0 -%define CONFIG_MJPEGB_DECODER 0 -%define CONFIG_MMVIDEO_DECODER 0 -%define CONFIG_MOTIONPIXELS_DECODER 0 -%define CONFIG_MPEG_XVMC_DECODER 0 -%define CONFIG_MPEG1VIDEO_DECODER 0 -%define CONFIG_MPEG2VIDEO_DECODER 0 -%define CONFIG_MPEG4_DECODER 0 -%define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG4_MMAL_DECODER 0 -%define CONFIG_MPEG4_VDPAU_DECODER 0 -%define CONFIG_MPEGVIDEO_DECODER 0 -%define CONFIG_MPEG_VDPAU_DECODER 0 -%define CONFIG_MPEG1_VDPAU_DECODER 0 -%define CONFIG_MPEG2_MMAL_DECODER 0 -%define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG2_QSV_DECODER 0 -%define CONFIG_MSA1_DECODER 0 -%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MSMPEG4V1_DECODER 0 -%define CONFIG_MSMPEG4V2_DECODER 0 -%define CONFIG_MSMPEG4V3_DECODER 0 -%define CONFIG_MSRLE_DECODER 0 -%define CONFIG_MSS1_DECODER 0 -%define CONFIG_MSS2_DECODER 0 -%define CONFIG_MSVIDEO1_DECODER 0 -%define CONFIG_MSZH_DECODER 0 -%define CONFIG_MTS2_DECODER 0 -%define CONFIG_MVC1_DECODER 0 -%define CONFIG_MVC2_DECODER 0 -%define CONFIG_MXPEG_DECODER 0 -%define CONFIG_NUV_DECODER 0 -%define CONFIG_PAF_VIDEO_DECODER 0 -%define CONFIG_PAM_DECODER 0 -%define CONFIG_PBM_DECODER 0 -%define CONFIG_PCX_DECODER 0 -%define CONFIG_PGM_DECODER 0 -%define CONFIG_PGMYUV_DECODER 0 -%define CONFIG_PICTOR_DECODER 0 -%define CONFIG_PNG_DECODER 0 -%define CONFIG_PPM_DECODER 0 -%define CONFIG_PRORES_DECODER 0 -%define CONFIG_PRORES_LGPL_DECODER 0 -%define CONFIG_PTX_DECODER 0 -%define CONFIG_QDRAW_DECODER 0 -%define CONFIG_QPEG_DECODER 0 -%define CONFIG_QTRLE_DECODER 0 -%define CONFIG_R10K_DECODER 0 -%define CONFIG_R210_DECODER 0 -%define CONFIG_RAWVIDEO_DECODER 0 -%define CONFIG_RL2_DECODER 0 -%define CONFIG_ROQ_DECODER 0 -%define CONFIG_RPZA_DECODER 0 -%define CONFIG_RSCC_DECODER 0 -%define CONFIG_RV10_DECODER 0 -%define CONFIG_RV20_DECODER 0 -%define CONFIG_RV30_DECODER 0 -%define CONFIG_RV40_DECODER 0 -%define CONFIG_S302M_DECODER 0 -%define CONFIG_SANM_DECODER 0 -%define CONFIG_SCREENPRESSO_DECODER 0 -%define CONFIG_SDX2_DPCM_DECODER 0 -%define CONFIG_SGI_DECODER 0 -%define CONFIG_SGIRLE_DECODER 0 -%define CONFIG_SHEERVIDEO_DECODER 0 -%define CONFIG_SMACKER_DECODER 0 -%define CONFIG_SMC_DECODER 0 -%define CONFIG_SMVJPEG_DECODER 0 -%define CONFIG_SNOW_DECODER 0 -%define CONFIG_SP5X_DECODER 0 -%define CONFIG_SUNRAST_DECODER 0 -%define CONFIG_SVQ1_DECODER 0 -%define CONFIG_SVQ3_DECODER 0 -%define CONFIG_TARGA_DECODER 0 -%define CONFIG_TARGA_Y216_DECODER 0 -%define CONFIG_TDSC_DECODER 0 -%define CONFIG_THEORA_DECODER 0 -%define CONFIG_THP_DECODER 0 -%define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -%define CONFIG_TIFF_DECODER 0 -%define CONFIG_TMV_DECODER 0 -%define CONFIG_TRUEMOTION1_DECODER 0 -%define CONFIG_TRUEMOTION2_DECODER 0 -%define CONFIG_TRUEMOTION2RT_DECODER 0 -%define CONFIG_TSCC_DECODER 0 -%define CONFIG_TSCC2_DECODER 0 -%define CONFIG_TXD_DECODER 0 -%define CONFIG_ULTI_DECODER 0 -%define CONFIG_UTVIDEO_DECODER 0 -%define CONFIG_V210_DECODER 0 -%define CONFIG_V210X_DECODER 0 -%define CONFIG_V308_DECODER 0 -%define CONFIG_V408_DECODER 0 -%define CONFIG_V410_DECODER 0 -%define CONFIG_VB_DECODER 0 -%define CONFIG_VBLE_DECODER 0 -%define CONFIG_VC1_DECODER 0 -%define CONFIG_VC1_CRYSTALHD_DECODER 0 -%define CONFIG_VC1_VDPAU_DECODER 0 -%define CONFIG_VC1IMAGE_DECODER 0 -%define CONFIG_VC1_MMAL_DECODER 0 -%define CONFIG_VC1_QSV_DECODER 0 -%define CONFIG_VCR1_DECODER 0 -%define CONFIG_VMDVIDEO_DECODER 0 -%define CONFIG_VMNC_DECODER 0 -%define CONFIG_VP3_DECODER 0 -%define CONFIG_VP5_DECODER 0 -%define CONFIG_VP6_DECODER 0 -%define CONFIG_VP6A_DECODER 0 -%define CONFIG_VP6F_DECODER 0 -%define CONFIG_VP7_DECODER 0 %define CONFIG_VP8_DECODER 1 %define CONFIG_VP9_DECODER 1 -%define CONFIG_VQA_DECODER 0 -%define CONFIG_WEBP_DECODER 0 -%define CONFIG_WMV1_DECODER 0 -%define CONFIG_WMV2_DECODER 0 -%define CONFIG_WMV3_DECODER 0 -%define CONFIG_WMV3_CRYSTALHD_DECODER 0 -%define CONFIG_WMV3_VDPAU_DECODER 0 -%define CONFIG_WMV3IMAGE_DECODER 0 -%define CONFIG_WNV1_DECODER 0 -%define CONFIG_XAN_WC3_DECODER 0 -%define CONFIG_XAN_WC4_DECODER 0 -%define CONFIG_XBM_DECODER 0 -%define CONFIG_XFACE_DECODER 0 -%define CONFIG_XL_DECODER 0 -%define CONFIG_XWD_DECODER 0 -%define CONFIG_Y41P_DECODER 0 -%define CONFIG_YLC_DECODER 0 -%define CONFIG_YOP_DECODER 0 -%define CONFIG_YUV4_DECODER 0 -%define CONFIG_ZERO12V_DECODER 0 -%define CONFIG_ZEROCODEC_DECODER 0 -%define CONFIG_ZLIB_DECODER 0 -%define CONFIG_ZMBV_DECODER 0 -%define CONFIG_AAC_DECODER 0 -%define CONFIG_AAC_FIXED_DECODER 0 -%define CONFIG_AAC_LATM_DECODER 0 -%define CONFIG_AC3_DECODER 0 -%define CONFIG_AC3_FIXED_DECODER 0 -%define CONFIG_ALAC_DECODER 0 -%define CONFIG_ALS_DECODER 0 -%define CONFIG_AMRNB_DECODER 0 -%define CONFIG_AMRWB_DECODER 0 -%define CONFIG_APE_DECODER 0 -%define CONFIG_ATRAC1_DECODER 0 -%define CONFIG_ATRAC3_DECODER 0 -%define CONFIG_ATRAC3P_DECODER 0 -%define CONFIG_BINKAUDIO_DCT_DECODER 0 -%define CONFIG_BINKAUDIO_RDFT_DECODER 0 -%define CONFIG_BMV_AUDIO_DECODER 0 -%define CONFIG_COOK_DECODER 0 -%define CONFIG_DCA_DECODER 0 -%define CONFIG_DSD_LSBF_DECODER 0 -%define CONFIG_DSD_MSBF_DECODER 0 -%define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -%define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -%define CONFIG_DSICINAUDIO_DECODER 0 -%define CONFIG_DSS_SP_DECODER 0 -%define CONFIG_DST_DECODER 0 -%define CONFIG_EAC3_DECODER 0 -%define CONFIG_EVRC_DECODER 0 -%define CONFIG_FFWAVESYNTH_DECODER 0 %define CONFIG_FLAC_DECODER 1 -%define CONFIG_G723_1_DECODER 0 -%define CONFIG_G729_DECODER 0 -%define CONFIG_GSM_DECODER 0 -%define CONFIG_GSM_MS_DECODER 0 -%define CONFIG_IAC_DECODER 0 -%define CONFIG_IMC_DECODER 0 -%define CONFIG_INTERPLAY_ACM_DECODER 0 -%define CONFIG_MACE3_DECODER 0 -%define CONFIG_MACE6_DECODER 0 -%define CONFIG_METASOUND_DECODER 0 -%define CONFIG_MLP_DECODER 0 -%define CONFIG_MP1_DECODER 0 -%define CONFIG_MP1FLOAT_DECODER 0 -%define CONFIG_MP2_DECODER 0 -%define CONFIG_MP2FLOAT_DECODER 0 -%define CONFIG_MP3_DECODER 0 -%define CONFIG_MP3FLOAT_DECODER 0 -%define CONFIG_MP3ADU_DECODER 0 -%define CONFIG_MP3ADUFLOAT_DECODER 0 -%define CONFIG_MP3ON4_DECODER 0 -%define CONFIG_MP3ON4FLOAT_DECODER 0 -%define CONFIG_MPC7_DECODER 0 -%define CONFIG_MPC8_DECODER 0 -%define CONFIG_NELLYMOSER_DECODER 0 -%define CONFIG_ON2AVC_DECODER 0 -%define CONFIG_OPUS_DECODER 0 -%define CONFIG_PAF_AUDIO_DECODER 0 -%define CONFIG_QCELP_DECODER 0 -%define CONFIG_QDM2_DECODER 0 -%define CONFIG_RA_144_DECODER 0 -%define CONFIG_RA_288_DECODER 0 -%define CONFIG_RALF_DECODER 0 -%define CONFIG_SHORTEN_DECODER 0 -%define CONFIG_SIPR_DECODER 0 -%define CONFIG_SMACKAUD_DECODER 0 -%define CONFIG_SONIC_DECODER 0 -%define CONFIG_TAK_DECODER 0 -%define CONFIG_TRUEHD_DECODER 0 -%define CONFIG_TRUESPEECH_DECODER 0 -%define CONFIG_TTA_DECODER 0 -%define CONFIG_TWINVQ_DECODER 0 -%define CONFIG_VMDAUDIO_DECODER 0 -%define CONFIG_VORBIS_DECODER 0 -%define CONFIG_WAVPACK_DECODER 0 -%define CONFIG_WMALOSSLESS_DECODER 0 -%define CONFIG_WMAPRO_DECODER 0 -%define CONFIG_WMAV1_DECODER 0 -%define CONFIG_WMAV2_DECODER 0 -%define CONFIG_WMAVOICE_DECODER 0 -%define CONFIG_WS_SND1_DECODER 0 -%define CONFIG_XMA1_DECODER 0 -%define CONFIG_XMA2_DECODER 0 -%define CONFIG_PCM_ALAW_DECODER 0 -%define CONFIG_PCM_BLURAY_DECODER 0 -%define CONFIG_PCM_DVD_DECODER 0 -%define CONFIG_PCM_F32BE_DECODER 0 -%define CONFIG_PCM_F32LE_DECODER 0 -%define CONFIG_PCM_F64BE_DECODER 0 -%define CONFIG_PCM_F64LE_DECODER 0 -%define CONFIG_PCM_LXF_DECODER 0 -%define CONFIG_PCM_MULAW_DECODER 0 -%define CONFIG_PCM_S8_DECODER 0 -%define CONFIG_PCM_S8_PLANAR_DECODER 0 -%define CONFIG_PCM_S16BE_DECODER 0 -%define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -%define CONFIG_PCM_S16LE_DECODER 0 -%define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S24BE_DECODER 0 -%define CONFIG_PCM_S24DAUD_DECODER 0 -%define CONFIG_PCM_S24LE_DECODER 0 -%define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S32BE_DECODER 0 -%define CONFIG_PCM_S32LE_DECODER 0 -%define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S64BE_DECODER 0 -%define CONFIG_PCM_S64LE_DECODER 0 -%define CONFIG_PCM_U8_DECODER 0 -%define CONFIG_PCM_U16BE_DECODER 0 -%define CONFIG_PCM_U16LE_DECODER 0 -%define CONFIG_PCM_U24BE_DECODER 0 -%define CONFIG_PCM_U24LE_DECODER 0 -%define CONFIG_PCM_U32BE_DECODER 0 -%define CONFIG_PCM_U32LE_DECODER 0 -%define CONFIG_PCM_ZORK_DECODER 0 -%define CONFIG_INTERPLAY_DPCM_DECODER 0 -%define CONFIG_ROQ_DPCM_DECODER 0 -%define CONFIG_SOL_DPCM_DECODER 0 -%define CONFIG_XAN_DPCM_DECODER 0 -%define CONFIG_ADPCM_4XM_DECODER 0 -%define CONFIG_ADPCM_ADX_DECODER 0 -%define CONFIG_ADPCM_AFC_DECODER 0 -%define CONFIG_ADPCM_AICA_DECODER 0 -%define CONFIG_ADPCM_CT_DECODER 0 -%define CONFIG_ADPCM_DTK_DECODER 0 -%define CONFIG_ADPCM_EA_DECODER 0 -%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -%define CONFIG_ADPCM_EA_R1_DECODER 0 -%define CONFIG_ADPCM_EA_R2_DECODER 0 -%define CONFIG_ADPCM_EA_R3_DECODER 0 -%define CONFIG_ADPCM_EA_XAS_DECODER 0 -%define CONFIG_ADPCM_G722_DECODER 0 -%define CONFIG_ADPCM_G726_DECODER 0 -%define CONFIG_ADPCM_G726LE_DECODER 0 -%define CONFIG_ADPCM_IMA_AMV_DECODER 0 -%define CONFIG_ADPCM_IMA_APC_DECODER 0 -%define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -%define CONFIG_ADPCM_IMA_DK3_DECODER 0 -%define CONFIG_ADPCM_IMA_DK4_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -%define CONFIG_ADPCM_IMA_ISS_DECODER 0 -%define CONFIG_ADPCM_IMA_OKI_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_DECODER 0 -%define CONFIG_ADPCM_IMA_RAD_DECODER 0 -%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -%define CONFIG_ADPCM_IMA_WAV_DECODER 0 -%define CONFIG_ADPCM_IMA_WS_DECODER 0 -%define CONFIG_ADPCM_MS_DECODER 0 -%define CONFIG_ADPCM_MTAF_DECODER 0 -%define CONFIG_ADPCM_PSX_DECODER 0 -%define CONFIG_ADPCM_SBPRO_2_DECODER 0 -%define CONFIG_ADPCM_SBPRO_3_DECODER 0 -%define CONFIG_ADPCM_SBPRO_4_DECODER 0 -%define CONFIG_ADPCM_SWF_DECODER 0 -%define CONFIG_ADPCM_THP_DECODER 0 -%define CONFIG_ADPCM_THP_LE_DECODER 0 -%define CONFIG_ADPCM_VIMA_DECODER 0 -%define CONFIG_ADPCM_XA_DECODER 0 -%define CONFIG_ADPCM_YAMAHA_DECODER 0 -%define CONFIG_SSA_DECODER 0 -%define CONFIG_ASS_DECODER 0 -%define CONFIG_CCAPTION_DECODER 0 -%define CONFIG_DVBSUB_DECODER 0 -%define CONFIG_DVDSUB_DECODER 0 -%define CONFIG_JACOSUB_DECODER 0 -%define CONFIG_MICRODVD_DECODER 0 -%define CONFIG_MOVTEXT_DECODER 0 -%define CONFIG_MPL2_DECODER 0 -%define CONFIG_PGSSUB_DECODER 0 -%define CONFIG_PJS_DECODER 0 -%define CONFIG_REALTEXT_DECODER 0 -%define CONFIG_SAMI_DECODER 0 -%define CONFIG_SRT_DECODER 0 -%define CONFIG_STL_DECODER 0 -%define CONFIG_SUBRIP_DECODER 0 -%define CONFIG_SUBVIEWER_DECODER 0 -%define CONFIG_SUBVIEWER1_DECODER 0 -%define CONFIG_TEXT_DECODER 0 -%define CONFIG_VPLAYER_DECODER 0 -%define CONFIG_WEBVTT_DECODER 0 -%define CONFIG_XSUB_DECODER 0 -%define CONFIG_AAC_AT_DECODER 0 -%define CONFIG_AC3_AT_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -%define CONFIG_ALAC_AT_DECODER 0 -%define CONFIG_AMR_NB_AT_DECODER 0 -%define CONFIG_EAC3_AT_DECODER 0 -%define CONFIG_GSM_MS_AT_DECODER 0 -%define CONFIG_ILBC_AT_DECODER 0 -%define CONFIG_MP1_AT_DECODER 0 -%define CONFIG_MP2_AT_DECODER 0 -%define CONFIG_MP3_AT_DECODER 0 -%define CONFIG_PCM_ALAW_AT_DECODER 0 -%define CONFIG_PCM_MULAW_AT_DECODER 0 -%define CONFIG_QDMC_AT_DECODER 0 -%define CONFIG_QDM2_AT_DECODER 0 -%define CONFIG_LIBCELT_DECODER 0 -%define CONFIG_LIBFDK_AAC_DECODER 0 -%define CONFIG_LIBGSM_DECODER 0 -%define CONFIG_LIBGSM_MS_DECODER 0 -%define CONFIG_LIBILBC_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -%define CONFIG_LIBOPENJPEG_DECODER 0 -%define CONFIG_LIBOPUS_DECODER 0 -%define CONFIG_LIBSCHROEDINGER_DECODER 0 -%define CONFIG_LIBSPEEX_DECODER 0 -%define CONFIG_LIBVORBIS_DECODER 0 -%define CONFIG_LIBVPX_VP8_DECODER 0 -%define CONFIG_LIBVPX_VP9_DECODER 0 -%define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -%define CONFIG_BINTEXT_DECODER 0 -%define CONFIG_XBIN_DECODER 0 -%define CONFIG_IDF_DECODER 0 -%define CONFIG_LIBOPENH264_DECODER 0 -%define CONFIG_H263_CUVID_DECODER 0 -%define CONFIG_H264_CUVID_DECODER 0 -%define CONFIG_HEVC_CUVID_DECODER 0 -%define CONFIG_HEVC_MEDIACODEC_DECODER 0 -%define CONFIG_MJPEG_CUVID_DECODER 0 -%define CONFIG_MPEG1_CUVID_DECODER 0 -%define CONFIG_MPEG2_CUVID_DECODER 0 -%define CONFIG_MPEG4_CUVID_DECODER 0 -%define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -%define CONFIG_VC1_CUVID_DECODER 0 -%define CONFIG_VP8_CUVID_DECODER 0 -%define CONFIG_VP8_MEDIACODEC_DECODER 0 -%define CONFIG_VP9_CUVID_DECODER 0 -%define CONFIG_VP9_MEDIACODEC_DECODER 0 -%define CONFIG_AA_DEMUXER 0 -%define CONFIG_AAC_DEMUXER 0 -%define CONFIG_AC3_DEMUXER 0 -%define CONFIG_ACM_DEMUXER 0 -%define CONFIG_ACT_DEMUXER 0 -%define CONFIG_ADF_DEMUXER 0 -%define CONFIG_ADP_DEMUXER 0 -%define CONFIG_ADS_DEMUXER 0 -%define CONFIG_ADX_DEMUXER 0 -%define CONFIG_AEA_DEMUXER 0 -%define CONFIG_AFC_DEMUXER 0 -%define CONFIG_AIFF_DEMUXER 0 -%define CONFIG_AIX_DEMUXER 0 -%define CONFIG_AMR_DEMUXER 0 -%define CONFIG_ANM_DEMUXER 0 -%define CONFIG_APC_DEMUXER 0 -%define CONFIG_APE_DEMUXER 0 -%define CONFIG_APNG_DEMUXER 0 -%define CONFIG_AQTITLE_DEMUXER 0 -%define CONFIG_ASF_DEMUXER 0 -%define CONFIG_ASF_O_DEMUXER 0 -%define CONFIG_ASS_DEMUXER 0 -%define CONFIG_AST_DEMUXER 0 -%define CONFIG_AU_DEMUXER 0 -%define CONFIG_AVI_DEMUXER 0 -%define CONFIG_AVISYNTH_DEMUXER 0 -%define CONFIG_AVR_DEMUXER 0 -%define CONFIG_AVS_DEMUXER 0 -%define CONFIG_BETHSOFTVID_DEMUXER 0 -%define CONFIG_BFI_DEMUXER 0 -%define CONFIG_BINTEXT_DEMUXER 0 -%define CONFIG_BINK_DEMUXER 0 -%define CONFIG_BIT_DEMUXER 0 -%define CONFIG_BMV_DEMUXER 0 -%define CONFIG_BFSTM_DEMUXER 0 -%define CONFIG_BRSTM_DEMUXER 0 -%define CONFIG_BOA_DEMUXER 0 -%define CONFIG_C93_DEMUXER 0 -%define CONFIG_CAF_DEMUXER 0 -%define CONFIG_CAVSVIDEO_DEMUXER 0 -%define CONFIG_CDG_DEMUXER 0 -%define CONFIG_CDXL_DEMUXER 0 -%define CONFIG_CINE_DEMUXER 0 -%define CONFIG_CONCAT_DEMUXER 0 -%define CONFIG_DATA_DEMUXER 0 -%define CONFIG_DAUD_DEMUXER 0 -%define CONFIG_DCSTR_DEMUXER 0 -%define CONFIG_DFA_DEMUXER 0 -%define CONFIG_DIRAC_DEMUXER 0 -%define CONFIG_DNXHD_DEMUXER 0 -%define CONFIG_DSF_DEMUXER 0 -%define CONFIG_DSICIN_DEMUXER 0 -%define CONFIG_DSS_DEMUXER 0 -%define CONFIG_DTS_DEMUXER 0 -%define CONFIG_DTSHD_DEMUXER 0 -%define CONFIG_DV_DEMUXER 0 -%define CONFIG_DVBSUB_DEMUXER 0 -%define CONFIG_DVBTXT_DEMUXER 0 -%define CONFIG_DXA_DEMUXER 0 -%define CONFIG_EA_DEMUXER 0 -%define CONFIG_EA_CDATA_DEMUXER 0 -%define CONFIG_EAC3_DEMUXER 0 -%define CONFIG_EPAF_DEMUXER 0 -%define CONFIG_FFM_DEMUXER 0 -%define CONFIG_FFMETADATA_DEMUXER 0 -%define CONFIG_FILMSTRIP_DEMUXER 0 -%define CONFIG_FLAC_DEMUXER 0 -%define CONFIG_FLIC_DEMUXER 0 -%define CONFIG_FLV_DEMUXER 0 -%define CONFIG_LIVE_FLV_DEMUXER 0 -%define CONFIG_FOURXM_DEMUXER 0 -%define CONFIG_FRM_DEMUXER 0 -%define CONFIG_FSB_DEMUXER 0 -%define CONFIG_G722_DEMUXER 0 -%define CONFIG_G723_1_DEMUXER 0 -%define CONFIG_G729_DEMUXER 0 -%define CONFIG_GENH_DEMUXER 0 -%define CONFIG_GIF_DEMUXER 0 -%define CONFIG_GSM_DEMUXER 0 -%define CONFIG_GXF_DEMUXER 0 -%define CONFIG_H261_DEMUXER 0 -%define CONFIG_H263_DEMUXER 0 -%define CONFIG_H264_DEMUXER 0 -%define CONFIG_HEVC_DEMUXER 0 -%define CONFIG_HLS_DEMUXER 0 -%define CONFIG_HNM_DEMUXER 0 -%define CONFIG_ICO_DEMUXER 0 -%define CONFIG_IDCIN_DEMUXER 0 -%define CONFIG_IDF_DEMUXER 0 -%define CONFIG_IFF_DEMUXER 0 -%define CONFIG_ILBC_DEMUXER 0 -%define CONFIG_IMAGE2_DEMUXER 0 -%define CONFIG_IMAGE2PIPE_DEMUXER 0 -%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -%define CONFIG_INGENIENT_DEMUXER 0 -%define CONFIG_IPMOVIE_DEMUXER 0 -%define CONFIG_IRCAM_DEMUXER 0 -%define CONFIG_ISS_DEMUXER 0 -%define CONFIG_IV8_DEMUXER 0 -%define CONFIG_IVF_DEMUXER 0 -%define CONFIG_IVR_DEMUXER 0 -%define CONFIG_JACOSUB_DEMUXER 0 -%define CONFIG_JV_DEMUXER 0 -%define CONFIG_LMLM4_DEMUXER 0 -%define CONFIG_LOAS_DEMUXER 0 -%define CONFIG_LRC_DEMUXER 0 -%define CONFIG_LVF_DEMUXER 0 -%define CONFIG_LXF_DEMUXER 0 -%define CONFIG_M4V_DEMUXER 0 -%define CONFIG_MATROSKA_DEMUXER 0 -%define CONFIG_MGSTS_DEMUXER 0 -%define CONFIG_MICRODVD_DEMUXER 0 -%define CONFIG_MJPEG_DEMUXER 0 -%define CONFIG_MLP_DEMUXER 0 -%define CONFIG_MLV_DEMUXER 0 -%define CONFIG_MM_DEMUXER 0 -%define CONFIG_MMF_DEMUXER 0 -%define CONFIG_MOV_DEMUXER 0 -%define CONFIG_MP3_DEMUXER 0 -%define CONFIG_MPC_DEMUXER 0 -%define CONFIG_MPC8_DEMUXER 0 -%define CONFIG_MPEGPS_DEMUXER 0 -%define CONFIG_MPEGTS_DEMUXER 0 -%define CONFIG_MPEGTSRAW_DEMUXER 0 -%define CONFIG_MPEGVIDEO_DEMUXER 0 -%define CONFIG_MPJPEG_DEMUXER 0 -%define CONFIG_MPL2_DEMUXER 0 -%define CONFIG_MPSUB_DEMUXER 0 -%define CONFIG_MSF_DEMUXER 0 -%define CONFIG_MSNWC_TCP_DEMUXER 0 -%define CONFIG_MTAF_DEMUXER 0 -%define CONFIG_MTV_DEMUXER 0 -%define CONFIG_MUSX_DEMUXER 0 -%define CONFIG_MV_DEMUXER 0 -%define CONFIG_MVI_DEMUXER 0 -%define CONFIG_MXF_DEMUXER 0 -%define CONFIG_MXG_DEMUXER 0 -%define CONFIG_NC_DEMUXER 0 -%define CONFIG_NISTSPHERE_DEMUXER 0 -%define CONFIG_NSV_DEMUXER 0 -%define CONFIG_NUT_DEMUXER 0 -%define CONFIG_NUV_DEMUXER 0 -%define CONFIG_OGG_DEMUXER 0 -%define CONFIG_OMA_DEMUXER 0 -%define CONFIG_PAF_DEMUXER 0 -%define CONFIG_PCM_ALAW_DEMUXER 0 -%define CONFIG_PCM_MULAW_DEMUXER 0 -%define CONFIG_PCM_F64BE_DEMUXER 0 -%define CONFIG_PCM_F64LE_DEMUXER 0 -%define CONFIG_PCM_F32BE_DEMUXER 0 -%define CONFIG_PCM_F32LE_DEMUXER 0 -%define CONFIG_PCM_S32BE_DEMUXER 0 -%define CONFIG_PCM_S32LE_DEMUXER 0 -%define CONFIG_PCM_S24BE_DEMUXER 0 -%define CONFIG_PCM_S24LE_DEMUXER 0 -%define CONFIG_PCM_S16BE_DEMUXER 0 -%define CONFIG_PCM_S16LE_DEMUXER 0 -%define CONFIG_PCM_S8_DEMUXER 0 -%define CONFIG_PCM_U32BE_DEMUXER 0 -%define CONFIG_PCM_U32LE_DEMUXER 0 -%define CONFIG_PCM_U24BE_DEMUXER 0 -%define CONFIG_PCM_U24LE_DEMUXER 0 -%define CONFIG_PCM_U16BE_DEMUXER 0 -%define CONFIG_PCM_U16LE_DEMUXER 0 -%define CONFIG_PCM_U8_DEMUXER 0 -%define CONFIG_PJS_DEMUXER 0 -%define CONFIG_PMP_DEMUXER 0 -%define CONFIG_PVA_DEMUXER 0 -%define CONFIG_PVF_DEMUXER 0 -%define CONFIG_QCP_DEMUXER 0 -%define CONFIG_R3D_DEMUXER 0 -%define CONFIG_RAWVIDEO_DEMUXER 0 -%define CONFIG_REALTEXT_DEMUXER 0 -%define CONFIG_REDSPARK_DEMUXER 0 -%define CONFIG_RL2_DEMUXER 0 -%define CONFIG_RM_DEMUXER 0 -%define CONFIG_ROQ_DEMUXER 0 -%define CONFIG_RPL_DEMUXER 0 -%define CONFIG_RSD_DEMUXER 0 -%define CONFIG_RSO_DEMUXER 0 -%define CONFIG_RTP_DEMUXER 0 -%define CONFIG_RTSP_DEMUXER 0 -%define CONFIG_SAMI_DEMUXER 0 -%define CONFIG_SAP_DEMUXER 0 -%define CONFIG_SBG_DEMUXER 0 -%define CONFIG_SDP_DEMUXER 0 -%define CONFIG_SDR2_DEMUXER 0 -%define CONFIG_SEGAFILM_DEMUXER 0 -%define CONFIG_SHORTEN_DEMUXER 0 -%define CONFIG_SIFF_DEMUXER 0 -%define CONFIG_SLN_DEMUXER 0 -%define CONFIG_SMACKER_DEMUXER 0 -%define CONFIG_SMJPEG_DEMUXER 0 -%define CONFIG_SMUSH_DEMUXER 0 -%define CONFIG_SOL_DEMUXER 0 -%define CONFIG_SOX_DEMUXER 0 -%define CONFIG_SPDIF_DEMUXER 0 -%define CONFIG_SRT_DEMUXER 0 -%define CONFIG_STR_DEMUXER 0 -%define CONFIG_STL_DEMUXER 0 -%define CONFIG_SUBVIEWER1_DEMUXER 0 -%define CONFIG_SUBVIEWER_DEMUXER 0 -%define CONFIG_SUP_DEMUXER 0 -%define CONFIG_SVAG_DEMUXER 0 -%define CONFIG_SWF_DEMUXER 0 -%define CONFIG_TAK_DEMUXER 0 -%define CONFIG_TEDCAPTIONS_DEMUXER 0 -%define CONFIG_THP_DEMUXER 0 -%define CONFIG_THREEDOSTR_DEMUXER 0 -%define CONFIG_TIERTEXSEQ_DEMUXER 0 -%define CONFIG_TMV_DEMUXER 0 -%define CONFIG_TRUEHD_DEMUXER 0 -%define CONFIG_TTA_DEMUXER 0 -%define CONFIG_TXD_DEMUXER 0 -%define CONFIG_TTY_DEMUXER 0 -%define CONFIG_V210_DEMUXER 0 -%define CONFIG_V210X_DEMUXER 0 -%define CONFIG_VAG_DEMUXER 0 -%define CONFIG_VC1_DEMUXER 0 -%define CONFIG_VC1T_DEMUXER 0 -%define CONFIG_VIVO_DEMUXER 0 -%define CONFIG_VMD_DEMUXER 0 -%define CONFIG_VOBSUB_DEMUXER 0 -%define CONFIG_VOC_DEMUXER 0 -%define CONFIG_VPK_DEMUXER 0 -%define CONFIG_VPLAYER_DEMUXER 0 -%define CONFIG_VQF_DEMUXER 0 -%define CONFIG_W64_DEMUXER 0 -%define CONFIG_WAV_DEMUXER 0 -%define CONFIG_WC3_DEMUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -%define CONFIG_WEBVTT_DEMUXER 0 -%define CONFIG_WSAUD_DEMUXER 0 -%define CONFIG_WSD_DEMUXER 0 -%define CONFIG_WSVQA_DEMUXER 0 -%define CONFIG_WTV_DEMUXER 0 -%define CONFIG_WVE_DEMUXER 0 -%define CONFIG_WV_DEMUXER 0 -%define CONFIG_XA_DEMUXER 0 -%define CONFIG_XBIN_DEMUXER 0 -%define CONFIG_XMV_DEMUXER 0 -%define CONFIG_XVAG_DEMUXER 0 -%define CONFIG_XWMA_DEMUXER 0 -%define CONFIG_YOP_DEMUXER 0 -%define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -%define CONFIG_LIBGME_DEMUXER 0 -%define CONFIG_LIBMODPLUG_DEMUXER 0 -%define CONFIG_LIBNUT_DEMUXER 0 -%define CONFIG_LIBOPENMPT_DEMUXER 0 -%define CONFIG_A64MULTI_ENCODER 0 -%define CONFIG_A64MULTI5_ENCODER 0 -%define CONFIG_ALIAS_PIX_ENCODER 0 -%define CONFIG_AMV_ENCODER 0 -%define CONFIG_APNG_ENCODER 0 -%define CONFIG_ASV1_ENCODER 0 -%define CONFIG_ASV2_ENCODER 0 -%define CONFIG_AVRP_ENCODER 0 -%define CONFIG_AVUI_ENCODER 0 -%define CONFIG_AYUV_ENCODER 0 -%define CONFIG_BMP_ENCODER 0 -%define CONFIG_CINEPAK_ENCODER 0 -%define CONFIG_CLJR_ENCODER 0 -%define CONFIG_COMFORTNOISE_ENCODER 0 -%define CONFIG_DNXHD_ENCODER 0 -%define CONFIG_DPX_ENCODER 0 -%define CONFIG_DVVIDEO_ENCODER 0 -%define CONFIG_FFV1_ENCODER 0 -%define CONFIG_FFVHUFF_ENCODER 0 -%define CONFIG_FLASHSV_ENCODER 0 -%define CONFIG_FLASHSV2_ENCODER 0 -%define CONFIG_FLV_ENCODER 0 -%define CONFIG_GIF_ENCODER 0 -%define CONFIG_H261_ENCODER 0 -%define CONFIG_H263_ENCODER 0 -%define CONFIG_H263P_ENCODER 0 -%define CONFIG_HAP_ENCODER 0 -%define CONFIG_HUFFYUV_ENCODER 0 -%define CONFIG_JPEG2000_ENCODER 0 -%define CONFIG_JPEGLS_ENCODER 0 -%define CONFIG_LJPEG_ENCODER 0 -%define CONFIG_MJPEG_ENCODER 0 -%define CONFIG_MPEG1VIDEO_ENCODER 0 -%define CONFIG_MPEG2VIDEO_ENCODER 0 -%define CONFIG_MPEG4_ENCODER 0 -%define CONFIG_MSMPEG4V2_ENCODER 0 -%define CONFIG_MSMPEG4V3_ENCODER 0 -%define CONFIG_MSVIDEO1_ENCODER 0 -%define CONFIG_PAM_ENCODER 0 -%define CONFIG_PBM_ENCODER 0 -%define CONFIG_PCX_ENCODER 0 -%define CONFIG_PGM_ENCODER 0 -%define CONFIG_PGMYUV_ENCODER 0 -%define CONFIG_PNG_ENCODER 0 -%define CONFIG_PPM_ENCODER 0 -%define CONFIG_PRORES_ENCODER 0 -%define CONFIG_PRORES_AW_ENCODER 0 -%define CONFIG_PRORES_KS_ENCODER 0 -%define CONFIG_QTRLE_ENCODER 0 -%define CONFIG_R10K_ENCODER 0 -%define CONFIG_R210_ENCODER 0 -%define CONFIG_RAWVIDEO_ENCODER 0 -%define CONFIG_ROQ_ENCODER 0 -%define CONFIG_RV10_ENCODER 0 -%define CONFIG_RV20_ENCODER 0 -%define CONFIG_S302M_ENCODER 0 -%define CONFIG_SGI_ENCODER 0 -%define CONFIG_SNOW_ENCODER 0 -%define CONFIG_SUNRAST_ENCODER 0 -%define CONFIG_SVQ1_ENCODER 0 -%define CONFIG_TARGA_ENCODER 0 -%define CONFIG_TIFF_ENCODER 0 -%define CONFIG_UTVIDEO_ENCODER 0 -%define CONFIG_V210_ENCODER 0 -%define CONFIG_V308_ENCODER 0 -%define CONFIG_V408_ENCODER 0 -%define CONFIG_V410_ENCODER 0 -%define CONFIG_VC2_ENCODER 0 -%define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -%define CONFIG_WMV1_ENCODER 0 -%define CONFIG_WMV2_ENCODER 0 -%define CONFIG_XBM_ENCODER 0 -%define CONFIG_XFACE_ENCODER 0 -%define CONFIG_XWD_ENCODER 0 -%define CONFIG_Y41P_ENCODER 0 -%define CONFIG_YUV4_ENCODER 0 -%define CONFIG_ZLIB_ENCODER 0 -%define CONFIG_ZMBV_ENCODER 0 -%define CONFIG_AAC_ENCODER 0 -%define CONFIG_AC3_ENCODER 0 -%define CONFIG_AC3_FIXED_ENCODER 0 -%define CONFIG_ALAC_ENCODER 0 -%define CONFIG_DCA_ENCODER 0 -%define CONFIG_EAC3_ENCODER 0 -%define CONFIG_FLAC_ENCODER 0 -%define CONFIG_G723_1_ENCODER 0 -%define CONFIG_MLP_ENCODER 0 -%define CONFIG_MP2_ENCODER 0 -%define CONFIG_MP2FIXED_ENCODER 0 -%define CONFIG_NELLYMOSER_ENCODER 0 -%define CONFIG_RA_144_ENCODER 0 -%define CONFIG_SONIC_ENCODER 0 -%define CONFIG_SONIC_LS_ENCODER 0 -%define CONFIG_TRUEHD_ENCODER 0 -%define CONFIG_TTA_ENCODER 0 -%define CONFIG_VORBIS_ENCODER 0 -%define CONFIG_WAVPACK_ENCODER 0 -%define CONFIG_WMAV1_ENCODER 0 -%define CONFIG_WMAV2_ENCODER 0 -%define CONFIG_PCM_ALAW_ENCODER 0 -%define CONFIG_PCM_F32BE_ENCODER 0 -%define CONFIG_PCM_F32LE_ENCODER 0 -%define CONFIG_PCM_F64BE_ENCODER 0 -%define CONFIG_PCM_F64LE_ENCODER 0 -%define CONFIG_PCM_MULAW_ENCODER 0 -%define CONFIG_PCM_S8_ENCODER 0 -%define CONFIG_PCM_S8_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16BE_ENCODER 0 -%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16LE_ENCODER 0 -%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S24BE_ENCODER 0 -%define CONFIG_PCM_S24DAUD_ENCODER 0 -%define CONFIG_PCM_S24LE_ENCODER 0 -%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S32BE_ENCODER 0 -%define CONFIG_PCM_S32LE_ENCODER 0 -%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S64BE_ENCODER 0 -%define CONFIG_PCM_S64LE_ENCODER 0 -%define CONFIG_PCM_U8_ENCODER 0 -%define CONFIG_PCM_U16BE_ENCODER 0 -%define CONFIG_PCM_U16LE_ENCODER 0 -%define CONFIG_PCM_U24BE_ENCODER 0 -%define CONFIG_PCM_U24LE_ENCODER 0 -%define CONFIG_PCM_U32BE_ENCODER 0 -%define CONFIG_PCM_U32LE_ENCODER 0 -%define CONFIG_ROQ_DPCM_ENCODER 0 -%define CONFIG_ADPCM_ADX_ENCODER 0 -%define CONFIG_ADPCM_G722_ENCODER 0 -%define CONFIG_ADPCM_G726_ENCODER 0 -%define CONFIG_ADPCM_IMA_QT_ENCODER 0 -%define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -%define CONFIG_ADPCM_MS_ENCODER 0 -%define CONFIG_ADPCM_SWF_ENCODER 0 -%define CONFIG_ADPCM_YAMAHA_ENCODER 0 -%define CONFIG_SSA_ENCODER 0 -%define CONFIG_ASS_ENCODER 0 -%define CONFIG_DVBSUB_ENCODER 0 -%define CONFIG_DVDSUB_ENCODER 0 -%define CONFIG_MOVTEXT_ENCODER 0 -%define CONFIG_SRT_ENCODER 0 -%define CONFIG_SUBRIP_ENCODER 0 -%define CONFIG_TEXT_ENCODER 0 -%define CONFIG_WEBVTT_ENCODER 0 -%define CONFIG_XSUB_ENCODER 0 -%define CONFIG_AAC_AT_ENCODER 0 -%define CONFIG_ALAC_AT_ENCODER 0 -%define CONFIG_ILBC_AT_ENCODER 0 -%define CONFIG_PCM_ALAW_AT_ENCODER 0 -%define CONFIG_PCM_MULAW_AT_ENCODER 0 -%define CONFIG_LIBFDK_AAC_ENCODER 0 -%define CONFIG_LIBGSM_ENCODER 0 -%define CONFIG_LIBGSM_MS_ENCODER 0 -%define CONFIG_LIBILBC_ENCODER 0 -%define CONFIG_LIBMP3LAME_ENCODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -%define CONFIG_LIBOPENJPEG_ENCODER 0 -%define CONFIG_LIBOPUS_ENCODER 0 -%define CONFIG_LIBSCHROEDINGER_ENCODER 0 -%define CONFIG_LIBSHINE_ENCODER 0 -%define CONFIG_LIBSPEEX_ENCODER 0 -%define CONFIG_LIBTHEORA_ENCODER 0 -%define CONFIG_LIBTWOLAME_ENCODER 0 -%define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -%define CONFIG_LIBVORBIS_ENCODER 0 -%define CONFIG_LIBVPX_VP8_ENCODER 0 -%define CONFIG_LIBVPX_VP9_ENCODER 0 -%define CONFIG_LIBWAVPACK_ENCODER 0 -%define CONFIG_LIBWEBP_ANIM_ENCODER 0 -%define CONFIG_LIBWEBP_ENCODER 0 -%define CONFIG_LIBX262_ENCODER 0 -%define CONFIG_LIBX264_ENCODER 0 -%define CONFIG_LIBX264RGB_ENCODER 0 -%define CONFIG_LIBX265_ENCODER 0 -%define CONFIG_LIBXAVS_ENCODER 0 -%define CONFIG_LIBXVID_ENCODER 0 -%define CONFIG_LIBOPENH264_ENCODER 0 -%define CONFIG_H264_NVENC_ENCODER 0 -%define CONFIG_H264_OMX_ENCODER 0 -%define CONFIG_H264_QSV_ENCODER 0 -%define CONFIG_H264_VAAPI_ENCODER 0 -%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -%define CONFIG_NVENC_ENCODER 0 -%define CONFIG_NVENC_H264_ENCODER 0 -%define CONFIG_NVENC_HEVC_ENCODER 0 -%define CONFIG_HEVC_NVENC_ENCODER 0 -%define CONFIG_HEVC_QSV_ENCODER 0 -%define CONFIG_HEVC_VAAPI_ENCODER 0 -%define CONFIG_LIBKVAZAAR_ENCODER 0 -%define CONFIG_MJPEG_VAAPI_ENCODER 0 -%define CONFIG_MPEG2_QSV_ENCODER 0 -%define CONFIG_ABENCH_FILTER 0 -%define CONFIG_ACOMPRESSOR_FILTER 0 -%define CONFIG_ACROSSFADE_FILTER 0 -%define CONFIG_ACRUSHER_FILTER 0 -%define CONFIG_ADELAY_FILTER 0 -%define CONFIG_AECHO_FILTER 0 -%define CONFIG_AEMPHASIS_FILTER 0 -%define CONFIG_AEVAL_FILTER 0 -%define CONFIG_AFADE_FILTER 0 -%define CONFIG_AFFTFILT_FILTER 0 -%define CONFIG_AFORMAT_FILTER 0 -%define CONFIG_AGATE_FILTER 0 -%define CONFIG_AINTERLEAVE_FILTER 0 -%define CONFIG_ALIMITER_FILTER 0 -%define CONFIG_ALLPASS_FILTER 0 -%define CONFIG_ALOOP_FILTER 0 -%define CONFIG_AMERGE_FILTER 0 -%define CONFIG_AMETADATA_FILTER 0 -%define CONFIG_AMIX_FILTER 0 -%define CONFIG_ANEQUALIZER_FILTER 0 -%define CONFIG_ANULL_FILTER 0 -%define CONFIG_APAD_FILTER 0 -%define CONFIG_APERMS_FILTER 0 -%define CONFIG_APHASER_FILTER 0 -%define CONFIG_APULSATOR_FILTER 0 -%define CONFIG_AREALTIME_FILTER 0 -%define CONFIG_ARESAMPLE_FILTER 0 -%define CONFIG_AREVERSE_FILTER 0 -%define CONFIG_ASELECT_FILTER 0 -%define CONFIG_ASENDCMD_FILTER 0 -%define CONFIG_ASETNSAMPLES_FILTER 0 -%define CONFIG_ASETPTS_FILTER 0 -%define CONFIG_ASETRATE_FILTER 0 -%define CONFIG_ASETTB_FILTER 0 -%define CONFIG_ASHOWINFO_FILTER 0 -%define CONFIG_ASIDEDATA_FILTER 0 -%define CONFIG_ASPLIT_FILTER 0 -%define CONFIG_ASTATS_FILTER 0 -%define CONFIG_ASTREAMSELECT_FILTER 0 -%define CONFIG_ASYNCTS_FILTER 0 -%define CONFIG_ATEMPO_FILTER 0 -%define CONFIG_ATRIM_FILTER 0 -%define CONFIG_AZMQ_FILTER 0 -%define CONFIG_BANDPASS_FILTER 0 -%define CONFIG_BANDREJECT_FILTER 0 -%define CONFIG_BASS_FILTER 0 -%define CONFIG_BIQUAD_FILTER 0 -%define CONFIG_BS2B_FILTER 0 -%define CONFIG_CHANNELMAP_FILTER 0 -%define CONFIG_CHANNELSPLIT_FILTER 0 -%define CONFIG_CHORUS_FILTER 0 -%define CONFIG_COMPAND_FILTER 0 -%define CONFIG_COMPENSATIONDELAY_FILTER 0 -%define CONFIG_CRYSTALIZER_FILTER 0 -%define CONFIG_DCSHIFT_FILTER 0 -%define CONFIG_DYNAUDNORM_FILTER 0 -%define CONFIG_EARWAX_FILTER 0 -%define CONFIG_EBUR128_FILTER 0 -%define CONFIG_EQUALIZER_FILTER 0 -%define CONFIG_EXTRASTEREO_FILTER 0 -%define CONFIG_FIREQUALIZER_FILTER 0 -%define CONFIG_FLANGER_FILTER 0 -%define CONFIG_HDCD_FILTER 0 -%define CONFIG_HIGHPASS_FILTER 0 -%define CONFIG_JOIN_FILTER 0 -%define CONFIG_LADSPA_FILTER 0 -%define CONFIG_LOUDNORM_FILTER 0 -%define CONFIG_LOWPASS_FILTER 0 -%define CONFIG_PAN_FILTER 0 -%define CONFIG_REPLAYGAIN_FILTER 0 -%define CONFIG_RESAMPLE_FILTER 0 -%define CONFIG_RUBBERBAND_FILTER 0 -%define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -%define CONFIG_SIDECHAINGATE_FILTER 0 -%define CONFIG_SILENCEDETECT_FILTER 0 -%define CONFIG_SILENCEREMOVE_FILTER 0 -%define CONFIG_SOFALIZER_FILTER 0 -%define CONFIG_STEREOTOOLS_FILTER 0 -%define CONFIG_STEREOWIDEN_FILTER 0 -%define CONFIG_TREBLE_FILTER 0 -%define CONFIG_TREMOLO_FILTER 0 -%define CONFIG_VIBRATO_FILTER 0 -%define CONFIG_VOLUME_FILTER 0 -%define CONFIG_VOLUMEDETECT_FILTER 0 -%define CONFIG_AEVALSRC_FILTER 0 -%define CONFIG_ANOISESRC_FILTER 0 -%define CONFIG_ANULLSRC_FILTER 0 -%define CONFIG_FLITE_FILTER 0 -%define CONFIG_SINE_FILTER 0 -%define CONFIG_ANULLSINK_FILTER 0 -%define CONFIG_ALPHAEXTRACT_FILTER 0 -%define CONFIG_ALPHAMERGE_FILTER 0 -%define CONFIG_ASS_FILTER 0 -%define CONFIG_ATADENOISE_FILTER 0 -%define CONFIG_AVGBLUR_FILTER 0 -%define CONFIG_BBOX_FILTER 0 -%define CONFIG_BENCH_FILTER 0 -%define CONFIG_BITPLANENOISE_FILTER 0 -%define CONFIG_BLACKDETECT_FILTER 0 -%define CONFIG_BLACKFRAME_FILTER 0 -%define CONFIG_BLEND_FILTER 0 -%define CONFIG_BOXBLUR_FILTER 0 -%define CONFIG_BWDIF_FILTER 0 -%define CONFIG_CHROMAKEY_FILTER 0 -%define CONFIG_CIESCOPE_FILTER 0 -%define CONFIG_CODECVIEW_FILTER 0 -%define CONFIG_COLORBALANCE_FILTER 0 -%define CONFIG_COLORCHANNELMIXER_FILTER 0 -%define CONFIG_COLORKEY_FILTER 0 -%define CONFIG_COLORLEVELS_FILTER 0 -%define CONFIG_COLORMATRIX_FILTER 0 -%define CONFIG_COLORSPACE_FILTER 0 -%define CONFIG_CONVOLUTION_FILTER 0 -%define CONFIG_COPY_FILTER 0 -%define CONFIG_COREIMAGE_FILTER 0 -%define CONFIG_COVER_RECT_FILTER 0 -%define CONFIG_CROP_FILTER 0 -%define CONFIG_CROPDETECT_FILTER 0 -%define CONFIG_CURVES_FILTER 0 -%define CONFIG_DATASCOPE_FILTER 0 -%define CONFIG_DCTDNOIZ_FILTER 0 -%define CONFIG_DEBAND_FILTER 0 -%define CONFIG_DECIMATE_FILTER 0 -%define CONFIG_DEFLATE_FILTER 0 -%define CONFIG_DEJUDDER_FILTER 0 -%define CONFIG_DELOGO_FILTER 0 -%define CONFIG_DESHAKE_FILTER 0 -%define CONFIG_DETELECINE_FILTER 0 -%define CONFIG_DILATION_FILTER 0 -%define CONFIG_DISPLACE_FILTER 0 -%define CONFIG_DRAWBOX_FILTER 0 -%define CONFIG_DRAWGRAPH_FILTER 0 -%define CONFIG_DRAWGRID_FILTER 0 -%define CONFIG_DRAWTEXT_FILTER 0 -%define CONFIG_EDGEDETECT_FILTER 0 -%define CONFIG_ELBG_FILTER 0 -%define CONFIG_EQ_FILTER 0 -%define CONFIG_EROSION_FILTER 0 -%define CONFIG_EXTRACTPLANES_FILTER 0 -%define CONFIG_FADE_FILTER 0 -%define CONFIG_FFTFILT_FILTER 0 -%define CONFIG_FIELD_FILTER 0 -%define CONFIG_FIELDHINT_FILTER 0 -%define CONFIG_FIELDMATCH_FILTER 0 -%define CONFIG_FIELDORDER_FILTER 0 -%define CONFIG_FIND_RECT_FILTER 0 -%define CONFIG_FORMAT_FILTER 0 -%define CONFIG_FPS_FILTER 0 -%define CONFIG_FRAMEPACK_FILTER 0 -%define CONFIG_FRAMERATE_FILTER 0 -%define CONFIG_FRAMESTEP_FILTER 0 -%define CONFIG_FREI0R_FILTER 0 -%define CONFIG_FSPP_FILTER 0 -%define CONFIG_GBLUR_FILTER 0 -%define CONFIG_GEQ_FILTER 0 -%define CONFIG_GRADFUN_FILTER 0 -%define CONFIG_HALDCLUT_FILTER 0 -%define CONFIG_HFLIP_FILTER 0 -%define CONFIG_HISTEQ_FILTER 0 -%define CONFIG_HISTOGRAM_FILTER 0 -%define CONFIG_HQDN3D_FILTER 0 -%define CONFIG_HQX_FILTER 0 -%define CONFIG_HSTACK_FILTER 0 -%define CONFIG_HUE_FILTER 0 -%define CONFIG_HWDOWNLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_CUDA_FILTER 0 -%define CONFIG_HYSTERESIS_FILTER 0 -%define CONFIG_IDET_FILTER 0 -%define CONFIG_IL_FILTER 0 -%define CONFIG_INFLATE_FILTER 0 -%define CONFIG_INTERLACE_FILTER 0 -%define CONFIG_INTERLEAVE_FILTER 0 -%define CONFIG_KERNDEINT_FILTER 0 -%define CONFIG_LENSCORRECTION_FILTER 0 -%define CONFIG_LOOP_FILTER 0 -%define CONFIG_LUT_FILTER 0 -%define CONFIG_LUT2_FILTER 0 -%define CONFIG_LUT3D_FILTER 0 -%define CONFIG_LUTRGB_FILTER 0 -%define CONFIG_LUTYUV_FILTER 0 -%define CONFIG_MASKEDCLAMP_FILTER 0 -%define CONFIG_MASKEDMERGE_FILTER 0 -%define CONFIG_MCDEINT_FILTER 0 -%define CONFIG_MERGEPLANES_FILTER 0 -%define CONFIG_MESTIMATE_FILTER 0 -%define CONFIG_METADATA_FILTER 0 -%define CONFIG_MINTERPOLATE_FILTER 0 -%define CONFIG_MPDECIMATE_FILTER 0 -%define CONFIG_NEGATE_FILTER 0 -%define CONFIG_NLMEANS_FILTER 0 -%define CONFIG_NNEDI_FILTER 0 -%define CONFIG_NOFORMAT_FILTER 0 -%define CONFIG_NOISE_FILTER 0 -%define CONFIG_NULL_FILTER 0 -%define CONFIG_OCR_FILTER 0 -%define CONFIG_OCV_FILTER 0 -%define CONFIG_OVERLAY_FILTER 0 -%define CONFIG_OWDENOISE_FILTER 0 -%define CONFIG_PAD_FILTER 0 -%define CONFIG_PALETTEGEN_FILTER 0 -%define CONFIG_PALETTEUSE_FILTER 0 -%define CONFIG_PERMS_FILTER 0 -%define CONFIG_PERSPECTIVE_FILTER 0 -%define CONFIG_PHASE_FILTER 0 -%define CONFIG_PIXDESCTEST_FILTER 0 -%define CONFIG_PP_FILTER 0 -%define CONFIG_PP7_FILTER 0 -%define CONFIG_PREWITT_FILTER 0 -%define CONFIG_PSNR_FILTER 0 -%define CONFIG_PULLUP_FILTER 0 -%define CONFIG_QP_FILTER 0 -%define CONFIG_RANDOM_FILTER 0 -%define CONFIG_READVITC_FILTER 0 -%define CONFIG_REALTIME_FILTER 0 -%define CONFIG_REMAP_FILTER 0 -%define CONFIG_REMOVEGRAIN_FILTER 0 -%define CONFIG_REMOVELOGO_FILTER 0 -%define CONFIG_REPEATFIELDS_FILTER 0 -%define CONFIG_REVERSE_FILTER 0 -%define CONFIG_ROTATE_FILTER 0 -%define CONFIG_SAB_FILTER 0 -%define CONFIG_SCALE_FILTER 0 -%define CONFIG_SCALE_NPP_FILTER 0 -%define CONFIG_SCALE_VAAPI_FILTER 0 -%define CONFIG_SCALE2REF_FILTER 0 -%define CONFIG_SELECT_FILTER 0 -%define CONFIG_SELECTIVECOLOR_FILTER 0 -%define CONFIG_SENDCMD_FILTER 0 -%define CONFIG_SEPARATEFIELDS_FILTER 0 -%define CONFIG_SETDAR_FILTER 0 -%define CONFIG_SETFIELD_FILTER 0 -%define CONFIG_SETPTS_FILTER 0 -%define CONFIG_SETSAR_FILTER 0 -%define CONFIG_SETTB_FILTER 0 -%define CONFIG_SHOWINFO_FILTER 0 -%define CONFIG_SHOWPALETTE_FILTER 0 -%define CONFIG_SHUFFLEFRAMES_FILTER 0 -%define CONFIG_SHUFFLEPLANES_FILTER 0 -%define CONFIG_SIDEDATA_FILTER 0 -%define CONFIG_SIGNALSTATS_FILTER 0 -%define CONFIG_SMARTBLUR_FILTER 0 -%define CONFIG_SOBEL_FILTER 0 -%define CONFIG_SPLIT_FILTER 0 -%define CONFIG_SPP_FILTER 0 -%define CONFIG_SSIM_FILTER 0 -%define CONFIG_STEREO3D_FILTER 0 -%define CONFIG_STREAMSELECT_FILTER 0 -%define CONFIG_SUBTITLES_FILTER 0 -%define CONFIG_SUPER2XSAI_FILTER 0 -%define CONFIG_SWAPRECT_FILTER 0 -%define CONFIG_SWAPUV_FILTER 0 -%define CONFIG_TBLEND_FILTER 0 -%define CONFIG_TELECINE_FILTER 0 -%define CONFIG_THUMBNAIL_FILTER 0 -%define CONFIG_TILE_FILTER 0 -%define CONFIG_TINTERLACE_FILTER 0 -%define CONFIG_TRANSPOSE_FILTER 0 -%define CONFIG_TRIM_FILTER 0 -%define CONFIG_UNSHARP_FILTER 0 -%define CONFIG_USPP_FILTER 0 -%define CONFIG_VAGUEDENOISER_FILTER 0 -%define CONFIG_VECTORSCOPE_FILTER 0 -%define CONFIG_VFLIP_FILTER 0 -%define CONFIG_VIDSTABDETECT_FILTER 0 -%define CONFIG_VIDSTABTRANSFORM_FILTER 0 -%define CONFIG_VIGNETTE_FILTER 0 -%define CONFIG_VSTACK_FILTER 0 -%define CONFIG_W3FDIF_FILTER 0 -%define CONFIG_WAVEFORM_FILTER 0 -%define CONFIG_WEAVE_FILTER 0 -%define CONFIG_XBR_FILTER 0 -%define CONFIG_YADIF_FILTER 0 -%define CONFIG_ZMQ_FILTER 0 -%define CONFIG_ZOOMPAN_FILTER 0 -%define CONFIG_ZSCALE_FILTER 0 -%define CONFIG_ALLRGB_FILTER 0 -%define CONFIG_ALLYUV_FILTER 0 -%define CONFIG_CELLAUTO_FILTER 0 -%define CONFIG_COLOR_FILTER 0 -%define CONFIG_COREIMAGESRC_FILTER 0 -%define CONFIG_FREI0R_SRC_FILTER 0 -%define CONFIG_HALDCLUTSRC_FILTER 0 -%define CONFIG_LIFE_FILTER 0 -%define CONFIG_MANDELBROT_FILTER 0 -%define CONFIG_MPTESTSRC_FILTER 0 -%define CONFIG_NULLSRC_FILTER 0 -%define CONFIG_RGBTESTSRC_FILTER 0 -%define CONFIG_SMPTEBARS_FILTER 0 -%define CONFIG_SMPTEHDBARS_FILTER 0 -%define CONFIG_TESTSRC_FILTER 0 -%define CONFIG_TESTSRC2_FILTER 0 -%define CONFIG_YUVTESTSRC_FILTER 0 -%define CONFIG_NULLSINK_FILTER 0 -%define CONFIG_ADRAWGRAPH_FILTER 0 -%define CONFIG_AHISTOGRAM_FILTER 0 -%define CONFIG_APHASEMETER_FILTER 0 -%define CONFIG_AVECTORSCOPE_FILTER 0 -%define CONFIG_CONCAT_FILTER 0 -%define CONFIG_SHOWCQT_FILTER 0 -%define CONFIG_SHOWFREQS_FILTER 0 -%define CONFIG_SHOWSPECTRUM_FILTER 0 -%define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -%define CONFIG_SHOWVOLUME_FILTER 0 -%define CONFIG_SHOWWAVES_FILTER 0 -%define CONFIG_SHOWWAVESPIC_FILTER 0 -%define CONFIG_SPECTRUMSYNTH_FILTER 0 -%define CONFIG_AMOVIE_FILTER 0 -%define CONFIG_MOVIE_FILTER 0 -%define CONFIG_H263_CUVID_HWACCEL 0 -%define CONFIG_H263_VAAPI_HWACCEL 0 -%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_H264_CUVID_HWACCEL 0 -%define CONFIG_H264_D3D11VA_HWACCEL 0 -%define CONFIG_H264_DXVA2_HWACCEL 0 -%define CONFIG_H264_MEDIACODEC_HWACCEL 0 -%define CONFIG_H264_MMAL_HWACCEL 0 -%define CONFIG_H264_QSV_HWACCEL 0 -%define CONFIG_H264_VAAPI_HWACCEL 0 -%define CONFIG_H264_VDA_HWACCEL 0 -%define CONFIG_H264_VDA_OLD_HWACCEL 0 -%define CONFIG_H264_VDPAU_HWACCEL 0 -%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_HEVC_CUVID_HWACCEL 0 -%define CONFIG_HEVC_D3D11VA_HWACCEL 0 -%define CONFIG_HEVC_DXVA2_HWACCEL 0 -%define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -%define CONFIG_HEVC_QSV_HWACCEL 0 -%define CONFIG_HEVC_VAAPI_HWACCEL 0 -%define CONFIG_HEVC_VDPAU_HWACCEL 0 -%define CONFIG_MJPEG_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_XVMC_HWACCEL 0 -%define CONFIG_MPEG1_VDPAU_HWACCEL 0 -%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG2_CUVID_HWACCEL 0 -%define CONFIG_MPEG2_XVMC_HWACCEL 0 -%define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -%define CONFIG_MPEG2_DXVA2_HWACCEL 0 -%define CONFIG_MPEG2_MMAL_HWACCEL 0 -%define CONFIG_MPEG2_QSV_HWACCEL 0 -%define CONFIG_MPEG2_VAAPI_HWACCEL 0 -%define CONFIG_MPEG2_VDPAU_HWACCEL 0 -%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG4_CUVID_HWACCEL 0 -%define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -%define CONFIG_MPEG4_MMAL_HWACCEL 0 -%define CONFIG_MPEG4_VAAPI_HWACCEL 0 -%define CONFIG_MPEG4_VDPAU_HWACCEL 0 -%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_VC1_CUVID_HWACCEL 0 -%define CONFIG_VC1_D3D11VA_HWACCEL 0 -%define CONFIG_VC1_DXVA2_HWACCEL 0 -%define CONFIG_VC1_VAAPI_HWACCEL 0 -%define CONFIG_VC1_VDPAU_HWACCEL 0 -%define CONFIG_VC1_MMAL_HWACCEL 0 -%define CONFIG_VC1_QSV_HWACCEL 0 -%define CONFIG_VP8_CUVID_HWACCEL 0 -%define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_CUVID_HWACCEL 0 -%define CONFIG_VP9_D3D11VA_HWACCEL 0 -%define CONFIG_VP9_DXVA2_HWACCEL 0 -%define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_D3D11VA_HWACCEL 0 -%define CONFIG_WMV3_DXVA2_HWACCEL 0 -%define CONFIG_WMV3_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_VDPAU_HWACCEL 0 -%define CONFIG_ALSA_INDEV 0 -%define CONFIG_AVFOUNDATION_INDEV 0 -%define CONFIG_BKTR_INDEV 0 -%define CONFIG_DECKLINK_INDEV 0 -%define CONFIG_DSHOW_INDEV 0 -%define CONFIG_DV1394_INDEV 0 -%define CONFIG_FBDEV_INDEV 0 -%define CONFIG_GDIGRAB_INDEV 0 -%define CONFIG_IEC61883_INDEV 0 -%define CONFIG_JACK_INDEV 0 -%define CONFIG_LAVFI_INDEV 0 -%define CONFIG_OPENAL_INDEV 0 -%define CONFIG_OSS_INDEV 0 -%define CONFIG_PULSE_INDEV 0 -%define CONFIG_QTKIT_INDEV 0 -%define CONFIG_SNDIO_INDEV 0 -%define CONFIG_V4L2_INDEV 0 -%define CONFIG_VFWCAP_INDEV 0 -%define CONFIG_X11GRAB_INDEV 0 -%define CONFIG_X11GRAB_XCB_INDEV 0 -%define CONFIG_LIBCDIO_INDEV 0 -%define CONFIG_LIBDC1394_INDEV 0 -%define CONFIG_A64_MUXER 0 -%define CONFIG_AC3_MUXER 0 -%define CONFIG_ADTS_MUXER 0 -%define CONFIG_ADX_MUXER 0 -%define CONFIG_AIFF_MUXER 0 -%define CONFIG_AMR_MUXER 0 -%define CONFIG_APNG_MUXER 0 -%define CONFIG_ASF_MUXER 0 -%define CONFIG_ASS_MUXER 0 -%define CONFIG_AST_MUXER 0 -%define CONFIG_ASF_STREAM_MUXER 0 -%define CONFIG_AU_MUXER 0 -%define CONFIG_AVI_MUXER 0 -%define CONFIG_AVM2_MUXER 0 -%define CONFIG_BIT_MUXER 0 -%define CONFIG_CAF_MUXER 0 -%define CONFIG_CAVSVIDEO_MUXER 0 -%define CONFIG_CRC_MUXER 0 -%define CONFIG_DASH_MUXER 0 -%define CONFIG_DATA_MUXER 0 -%define CONFIG_DAUD_MUXER 0 -%define CONFIG_DIRAC_MUXER 0 -%define CONFIG_DNXHD_MUXER 0 -%define CONFIG_DTS_MUXER 0 -%define CONFIG_DV_MUXER 0 -%define CONFIG_EAC3_MUXER 0 -%define CONFIG_F4V_MUXER 0 -%define CONFIG_FFM_MUXER 0 -%define CONFIG_FFMETADATA_MUXER 0 -%define CONFIG_FIFO_MUXER 0 -%define CONFIG_FILMSTRIP_MUXER 0 -%define CONFIG_FLAC_MUXER 0 -%define CONFIG_FLV_MUXER 0 -%define CONFIG_FRAMECRC_MUXER 0 -%define CONFIG_FRAMEHASH_MUXER 0 -%define CONFIG_FRAMEMD5_MUXER 0 -%define CONFIG_G722_MUXER 0 -%define CONFIG_G723_1_MUXER 0 -%define CONFIG_GIF_MUXER 0 -%define CONFIG_GSM_MUXER 0 -%define CONFIG_GXF_MUXER 0 -%define CONFIG_H261_MUXER 0 -%define CONFIG_H263_MUXER 0 -%define CONFIG_H264_MUXER 0 -%define CONFIG_HASH_MUXER 0 -%define CONFIG_HDS_MUXER 0 -%define CONFIG_HEVC_MUXER 0 -%define CONFIG_HLS_MUXER 0 -%define CONFIG_ICO_MUXER 0 -%define CONFIG_ILBC_MUXER 0 -%define CONFIG_IMAGE2_MUXER 0 -%define CONFIG_IMAGE2PIPE_MUXER 0 -%define CONFIG_IPOD_MUXER 0 -%define CONFIG_IRCAM_MUXER 0 -%define CONFIG_ISMV_MUXER 0 -%define CONFIG_IVF_MUXER 0 -%define CONFIG_JACOSUB_MUXER 0 -%define CONFIG_LATM_MUXER 0 -%define CONFIG_LRC_MUXER 0 -%define CONFIG_M4V_MUXER 0 -%define CONFIG_MD5_MUXER 0 -%define CONFIG_MATROSKA_MUXER 0 -%define CONFIG_MATROSKA_AUDIO_MUXER 0 -%define CONFIG_MICRODVD_MUXER 0 -%define CONFIG_MJPEG_MUXER 0 -%define CONFIG_MLP_MUXER 0 -%define CONFIG_MMF_MUXER 0 -%define CONFIG_MOV_MUXER 0 -%define CONFIG_MP2_MUXER 0 -%define CONFIG_MP3_MUXER 0 -%define CONFIG_MP4_MUXER 0 -%define CONFIG_MPEG1SYSTEM_MUXER 0 -%define CONFIG_MPEG1VCD_MUXER 0 -%define CONFIG_MPEG1VIDEO_MUXER 0 -%define CONFIG_MPEG2DVD_MUXER 0 -%define CONFIG_MPEG2SVCD_MUXER 0 -%define CONFIG_MPEG2VIDEO_MUXER 0 -%define CONFIG_MPEG2VOB_MUXER 0 -%define CONFIG_MPEGTS_MUXER 0 -%define CONFIG_MPJPEG_MUXER 0 -%define CONFIG_MXF_MUXER 0 -%define CONFIG_MXF_D10_MUXER 0 -%define CONFIG_MXF_OPATOM_MUXER 0 -%define CONFIG_NULL_MUXER 0 -%define CONFIG_NUT_MUXER 0 -%define CONFIG_OGA_MUXER 0 -%define CONFIG_OGG_MUXER 0 -%define CONFIG_OGV_MUXER 0 -%define CONFIG_OMA_MUXER 0 -%define CONFIG_OPUS_MUXER 0 -%define CONFIG_PCM_ALAW_MUXER 0 -%define CONFIG_PCM_MULAW_MUXER 0 -%define CONFIG_PCM_F64BE_MUXER 0 -%define CONFIG_PCM_F64LE_MUXER 0 -%define CONFIG_PCM_F32BE_MUXER 0 -%define CONFIG_PCM_F32LE_MUXER 0 -%define CONFIG_PCM_S32BE_MUXER 0 -%define CONFIG_PCM_S32LE_MUXER 0 -%define CONFIG_PCM_S24BE_MUXER 0 -%define CONFIG_PCM_S24LE_MUXER 0 -%define CONFIG_PCM_S16BE_MUXER 0 -%define CONFIG_PCM_S16LE_MUXER 0 -%define CONFIG_PCM_S8_MUXER 0 -%define CONFIG_PCM_U32BE_MUXER 0 -%define CONFIG_PCM_U32LE_MUXER 0 -%define CONFIG_PCM_U24BE_MUXER 0 -%define CONFIG_PCM_U24LE_MUXER 0 -%define CONFIG_PCM_U16BE_MUXER 0 -%define CONFIG_PCM_U16LE_MUXER 0 -%define CONFIG_PCM_U8_MUXER 0 -%define CONFIG_PSP_MUXER 0 -%define CONFIG_RAWVIDEO_MUXER 0 -%define CONFIG_RM_MUXER 0 -%define CONFIG_ROQ_MUXER 0 -%define CONFIG_RSO_MUXER 0 -%define CONFIG_RTP_MUXER 0 -%define CONFIG_RTP_MPEGTS_MUXER 0 -%define CONFIG_RTSP_MUXER 0 -%define CONFIG_SAP_MUXER 0 -%define CONFIG_SEGMENT_MUXER 0 -%define CONFIG_STREAM_SEGMENT_MUXER 0 -%define CONFIG_SINGLEJPEG_MUXER 0 -%define CONFIG_SMJPEG_MUXER 0 -%define CONFIG_SMOOTHSTREAMING_MUXER 0 -%define CONFIG_SOX_MUXER 0 -%define CONFIG_SPX_MUXER 0 -%define CONFIG_SPDIF_MUXER 0 -%define CONFIG_SRT_MUXER 0 -%define CONFIG_SWF_MUXER 0 -%define CONFIG_TEE_MUXER 0 -%define CONFIG_TG2_MUXER 0 -%define CONFIG_TGP_MUXER 0 -%define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -%define CONFIG_TRUEHD_MUXER 0 -%define CONFIG_TTA_MUXER 0 -%define CONFIG_UNCODEDFRAMECRC_MUXER 0 -%define CONFIG_VC1_MUXER 0 -%define CONFIG_VC1T_MUXER 0 -%define CONFIG_VOC_MUXER 0 -%define CONFIG_W64_MUXER 0 -%define CONFIG_WAV_MUXER 0 -%define CONFIG_WEBM_MUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -%define CONFIG_WEBM_CHUNK_MUXER 0 -%define CONFIG_WEBP_MUXER 0 -%define CONFIG_WEBVTT_MUXER 0 -%define CONFIG_WTV_MUXER 0 -%define CONFIG_WV_MUXER 0 -%define CONFIG_YUV4MPEGPIPE_MUXER 0 -%define CONFIG_CHROMAPRINT_MUXER 0 -%define CONFIG_LIBNUT_MUXER 0 -%define CONFIG_ALSA_OUTDEV 0 -%define CONFIG_CACA_OUTDEV 0 -%define CONFIG_DECKLINK_OUTDEV 0 -%define CONFIG_FBDEV_OUTDEV 0 -%define CONFIG_OPENGL_OUTDEV 0 -%define CONFIG_OSS_OUTDEV 0 -%define CONFIG_PULSE_OUTDEV 0 -%define CONFIG_SDL2_OUTDEV 0 -%define CONFIG_SNDIO_OUTDEV 0 -%define CONFIG_V4L2_OUTDEV 0 -%define CONFIG_XV_OUTDEV 0 -%define CONFIG_AAC_PARSER 0 -%define CONFIG_AAC_LATM_PARSER 0 -%define CONFIG_AC3_PARSER 0 -%define CONFIG_ADX_PARSER 0 -%define CONFIG_BMP_PARSER 0 -%define CONFIG_CAVSVIDEO_PARSER 0 -%define CONFIG_COOK_PARSER 0 -%define CONFIG_DCA_PARSER 0 -%define CONFIG_DIRAC_PARSER 0 -%define CONFIG_DNXHD_PARSER 0 -%define CONFIG_DPX_PARSER 0 -%define CONFIG_DVAUDIO_PARSER 0 -%define CONFIG_DVBSUB_PARSER 0 -%define CONFIG_DVDSUB_PARSER 0 -%define CONFIG_DVD_NAV_PARSER 0 %define CONFIG_FLAC_PARSER 1 -%define CONFIG_G729_PARSER 0 -%define CONFIG_GSM_PARSER 0 -%define CONFIG_H261_PARSER 0 -%define CONFIG_H263_PARSER 0 -%define CONFIG_H264_PARSER 0 -%define CONFIG_HEVC_PARSER 0 -%define CONFIG_MJPEG_PARSER 0 -%define CONFIG_MLP_PARSER 0 -%define CONFIG_MPEG4VIDEO_PARSER 0 -%define CONFIG_MPEGAUDIO_PARSER 0 -%define CONFIG_MPEGVIDEO_PARSER 0 -%define CONFIG_OPUS_PARSER 0 -%define CONFIG_PNG_PARSER 0 -%define CONFIG_PNM_PARSER 0 -%define CONFIG_RV30_PARSER 0 -%define CONFIG_RV40_PARSER 0 -%define CONFIG_TAK_PARSER 0 -%define CONFIG_VC1_PARSER 0 -%define CONFIG_VORBIS_PARSER 0 -%define CONFIG_VP3_PARSER 0 %define CONFIG_VP8_PARSER 1 %define CONFIG_VP9_PARSER 1 -%define CONFIG_ASYNC_PROTOCOL 0 -%define CONFIG_BLURAY_PROTOCOL 0 -%define CONFIG_CACHE_PROTOCOL 0 -%define CONFIG_CONCAT_PROTOCOL 0 -%define CONFIG_CRYPTO_PROTOCOL 0 -%define CONFIG_DATA_PROTOCOL 0 -%define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -%define CONFIG_FFRTMPHTTP_PROTOCOL 0 -%define CONFIG_FILE_PROTOCOL 0 -%define CONFIG_FTP_PROTOCOL 0 -%define CONFIG_GOPHER_PROTOCOL 0 -%define CONFIG_HLS_PROTOCOL 0 -%define CONFIG_HTTP_PROTOCOL 0 -%define CONFIG_HTTPPROXY_PROTOCOL 0 -%define CONFIG_HTTPS_PROTOCOL 0 -%define CONFIG_ICECAST_PROTOCOL 0 -%define CONFIG_MMSH_PROTOCOL 0 -%define CONFIG_MMST_PROTOCOL 0 -%define CONFIG_MD5_PROTOCOL 0 -%define CONFIG_PIPE_PROTOCOL 0 -%define CONFIG_RTMP_PROTOCOL 0 -%define CONFIG_RTMPE_PROTOCOL 0 -%define CONFIG_RTMPS_PROTOCOL 0 -%define CONFIG_RTMPT_PROTOCOL 0 -%define CONFIG_RTMPTE_PROTOCOL 0 -%define CONFIG_RTMPTS_PROTOCOL 0 -%define CONFIG_RTP_PROTOCOL 0 -%define CONFIG_SCTP_PROTOCOL 0 -%define CONFIG_SRTP_PROTOCOL 0 -%define CONFIG_SUBFILE_PROTOCOL 0 -%define CONFIG_TEE_PROTOCOL 0 -%define CONFIG_TCP_PROTOCOL 0 -%define CONFIG_TLS_GNUTLS_PROTOCOL 0 -%define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -%define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -%define CONFIG_TLS_OPENSSL_PROTOCOL 0 -%define CONFIG_UDP_PROTOCOL 0 -%define CONFIG_UDPLITE_PROTOCOL 0 -%define CONFIG_UNIX_PROTOCOL 0 -%define CONFIG_LIBRTMP_PROTOCOL 0 -%define CONFIG_LIBRTMPE_PROTOCOL 0 -%define CONFIG_LIBRTMPS_PROTOCOL 0 -%define CONFIG_LIBRTMPT_PROTOCOL 0 -%define CONFIG_LIBRTMPTE_PROTOCOL 0 -%define CONFIG_LIBSSH_PROTOCOL 0 -%define CONFIG_LIBSMBCLIENT_PROTOCOL 0 diff --git a/media/ffvpx/config_win32.h b/media/ffvpx/config_win32.h index b23b2ad9f8e7..8460c7a105f4 100644 --- a/media/ffvpx/config_win32.h +++ b/media/ffvpx/config_win32.h @@ -384,15 +384,7 @@ #define HAVE_XLIB 0 #define CONFIG_BSFS 0 #define CONFIG_DECODERS 1 -#define CONFIG_ENCODERS 0 -#define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 -#define CONFIG_INDEVS 0 -#define CONFIG_OUTDEVS 0 -#define CONFIG_FILTERS 0 -#define CONFIG_DEMUXERS 0 -#define CONFIG_MUXERS 0 -#define CONFIG_PROTOCOLS 0 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 1 @@ -514,7 +506,6 @@ #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 -#define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 @@ -579,7 +570,6 @@ #define CONFIG_FDCTDSP 0 #define CONFIG_FLACDSP 1 #define CONFIG_FMTCONVERT 0 -#define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 @@ -655,1570 +645,10 @@ #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 -#define CONFIG_AASC_DECODER 0 -#define CONFIG_AIC_DECODER 0 -#define CONFIG_ALIAS_PIX_DECODER 0 -#define CONFIG_AMV_DECODER 0 -#define CONFIG_ANM_DECODER 0 -#define CONFIG_ANSI_DECODER 0 -#define CONFIG_APNG_DECODER 0 -#define CONFIG_ASV1_DECODER 0 -#define CONFIG_ASV2_DECODER 0 -#define CONFIG_AURA_DECODER 0 -#define CONFIG_AURA2_DECODER 0 -#define CONFIG_AVRP_DECODER 0 -#define CONFIG_AVRN_DECODER 0 -#define CONFIG_AVS_DECODER 0 -#define CONFIG_AVUI_DECODER 0 -#define CONFIG_AYUV_DECODER 0 -#define CONFIG_BETHSOFTVID_DECODER 0 -#define CONFIG_BFI_DECODER 0 -#define CONFIG_BINK_DECODER 0 -#define CONFIG_BMP_DECODER 0 -#define CONFIG_BMV_VIDEO_DECODER 0 -#define CONFIG_BRENDER_PIX_DECODER 0 -#define CONFIG_C93_DECODER 0 -#define CONFIG_CAVS_DECODER 0 -#define CONFIG_CDGRAPHICS_DECODER 0 -#define CONFIG_CDXL_DECODER 0 -#define CONFIG_CFHD_DECODER 0 -#define CONFIG_CINEPAK_DECODER 0 -#define CONFIG_CLJR_DECODER 0 -#define CONFIG_CLLC_DECODER 0 -#define CONFIG_COMFORTNOISE_DECODER 0 -#define CONFIG_CPIA_DECODER 0 -#define CONFIG_CSCD_DECODER 0 -#define CONFIG_CYUV_DECODER 0 -#define CONFIG_DDS_DECODER 0 -#define CONFIG_DFA_DECODER 0 -#define CONFIG_DIRAC_DECODER 0 -#define CONFIG_DNXHD_DECODER 0 -#define CONFIG_DPX_DECODER 0 -#define CONFIG_DSICINVIDEO_DECODER 0 -#define CONFIG_DVAUDIO_DECODER 0 -#define CONFIG_DVVIDEO_DECODER 0 -#define CONFIG_DXA_DECODER 0 -#define CONFIG_DXTORY_DECODER 0 -#define CONFIG_DXV_DECODER 0 -#define CONFIG_EACMV_DECODER 0 -#define CONFIG_EAMAD_DECODER 0 -#define CONFIG_EATGQ_DECODER 0 -#define CONFIG_EATGV_DECODER 0 -#define CONFIG_EATQI_DECODER 0 -#define CONFIG_EIGHTBPS_DECODER 0 -#define CONFIG_EIGHTSVX_EXP_DECODER 0 -#define CONFIG_EIGHTSVX_FIB_DECODER 0 -#define CONFIG_ESCAPE124_DECODER 0 -#define CONFIG_ESCAPE130_DECODER 0 -#define CONFIG_EXR_DECODER 0 -#define CONFIG_FFV1_DECODER 0 -#define CONFIG_FFVHUFF_DECODER 0 -#define CONFIG_FIC_DECODER 0 -#define CONFIG_FLASHSV_DECODER 0 -#define CONFIG_FLASHSV2_DECODER 0 -#define CONFIG_FLIC_DECODER 0 -#define CONFIG_FLV_DECODER 0 -#define CONFIG_FOURXM_DECODER 0 -#define CONFIG_FRAPS_DECODER 0 -#define CONFIG_FRWU_DECODER 0 -#define CONFIG_G2M_DECODER 0 -#define CONFIG_GIF_DECODER 0 -#define CONFIG_H261_DECODER 0 -#define CONFIG_H263_DECODER 0 -#define CONFIG_H263I_DECODER 0 -#define CONFIG_H263P_DECODER 0 -#define CONFIG_H264_DECODER 0 -#define CONFIG_H264_CRYSTALHD_DECODER 0 -#define CONFIG_H264_MEDIACODEC_DECODER 0 -#define CONFIG_H264_MMAL_DECODER 0 -#define CONFIG_H264_QSV_DECODER 0 -#define CONFIG_H264_VDA_DECODER 0 -#define CONFIG_H264_VDPAU_DECODER 0 -#define CONFIG_HAP_DECODER 0 -#define CONFIG_HEVC_DECODER 0 -#define CONFIG_HEVC_QSV_DECODER 0 -#define CONFIG_HNM4_VIDEO_DECODER 0 -#define CONFIG_HQ_HQA_DECODER 0 -#define CONFIG_HQX_DECODER 0 -#define CONFIG_HUFFYUV_DECODER 0 -#define CONFIG_IDCIN_DECODER 0 -#define CONFIG_IFF_ILBM_DECODER 0 -#define CONFIG_INDEO2_DECODER 0 -#define CONFIG_INDEO3_DECODER 0 -#define CONFIG_INDEO4_DECODER 0 -#define CONFIG_INDEO5_DECODER 0 -#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -#define CONFIG_JPEG2000_DECODER 0 -#define CONFIG_JPEGLS_DECODER 0 -#define CONFIG_JV_DECODER 0 -#define CONFIG_KGV1_DECODER 0 -#define CONFIG_KMVC_DECODER 0 -#define CONFIG_LAGARITH_DECODER 0 -#define CONFIG_LOCO_DECODER 0 -#define CONFIG_M101_DECODER 0 -#define CONFIG_MAGICYUV_DECODER 0 -#define CONFIG_MDEC_DECODER 0 -#define CONFIG_MIMIC_DECODER 0 -#define CONFIG_MJPEG_DECODER 0 -#define CONFIG_MJPEGB_DECODER 0 -#define CONFIG_MMVIDEO_DECODER 0 -#define CONFIG_MOTIONPIXELS_DECODER 0 -#define CONFIG_MPEG_XVMC_DECODER 0 -#define CONFIG_MPEG1VIDEO_DECODER 0 -#define CONFIG_MPEG2VIDEO_DECODER 0 -#define CONFIG_MPEG4_DECODER 0 -#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG4_MMAL_DECODER 0 -#define CONFIG_MPEG4_VDPAU_DECODER 0 -#define CONFIG_MPEGVIDEO_DECODER 0 -#define CONFIG_MPEG_VDPAU_DECODER 0 -#define CONFIG_MPEG1_VDPAU_DECODER 0 -#define CONFIG_MPEG2_MMAL_DECODER 0 -#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG2_QSV_DECODER 0 -#define CONFIG_MSA1_DECODER 0 -#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MSMPEG4V1_DECODER 0 -#define CONFIG_MSMPEG4V2_DECODER 0 -#define CONFIG_MSMPEG4V3_DECODER 0 -#define CONFIG_MSRLE_DECODER 0 -#define CONFIG_MSS1_DECODER 0 -#define CONFIG_MSS2_DECODER 0 -#define CONFIG_MSVIDEO1_DECODER 0 -#define CONFIG_MSZH_DECODER 0 -#define CONFIG_MTS2_DECODER 0 -#define CONFIG_MVC1_DECODER 0 -#define CONFIG_MVC2_DECODER 0 -#define CONFIG_MXPEG_DECODER 0 -#define CONFIG_NUV_DECODER 0 -#define CONFIG_PAF_VIDEO_DECODER 0 -#define CONFIG_PAM_DECODER 0 -#define CONFIG_PBM_DECODER 0 -#define CONFIG_PCX_DECODER 0 -#define CONFIG_PGM_DECODER 0 -#define CONFIG_PGMYUV_DECODER 0 -#define CONFIG_PICTOR_DECODER 0 -#define CONFIG_PNG_DECODER 0 -#define CONFIG_PPM_DECODER 0 -#define CONFIG_PRORES_DECODER 0 -#define CONFIG_PRORES_LGPL_DECODER 0 -#define CONFIG_PTX_DECODER 0 -#define CONFIG_QDRAW_DECODER 0 -#define CONFIG_QPEG_DECODER 0 -#define CONFIG_QTRLE_DECODER 0 -#define CONFIG_R10K_DECODER 0 -#define CONFIG_R210_DECODER 0 -#define CONFIG_RAWVIDEO_DECODER 0 -#define CONFIG_RL2_DECODER 0 -#define CONFIG_ROQ_DECODER 0 -#define CONFIG_RPZA_DECODER 0 -#define CONFIG_RSCC_DECODER 0 -#define CONFIG_RV10_DECODER 0 -#define CONFIG_RV20_DECODER 0 -#define CONFIG_RV30_DECODER 0 -#define CONFIG_RV40_DECODER 0 -#define CONFIG_S302M_DECODER 0 -#define CONFIG_SANM_DECODER 0 -#define CONFIG_SCREENPRESSO_DECODER 0 -#define CONFIG_SDX2_DPCM_DECODER 0 -#define CONFIG_SGI_DECODER 0 -#define CONFIG_SGIRLE_DECODER 0 -#define CONFIG_SHEERVIDEO_DECODER 0 -#define CONFIG_SMACKER_DECODER 0 -#define CONFIG_SMC_DECODER 0 -#define CONFIG_SMVJPEG_DECODER 0 -#define CONFIG_SNOW_DECODER 0 -#define CONFIG_SP5X_DECODER 0 -#define CONFIG_SUNRAST_DECODER 0 -#define CONFIG_SVQ1_DECODER 0 -#define CONFIG_SVQ3_DECODER 0 -#define CONFIG_TARGA_DECODER 0 -#define CONFIG_TARGA_Y216_DECODER 0 -#define CONFIG_TDSC_DECODER 0 -#define CONFIG_THEORA_DECODER 0 -#define CONFIG_THP_DECODER 0 -#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -#define CONFIG_TIFF_DECODER 0 -#define CONFIG_TMV_DECODER 0 -#define CONFIG_TRUEMOTION1_DECODER 0 -#define CONFIG_TRUEMOTION2_DECODER 0 -#define CONFIG_TRUEMOTION2RT_DECODER 0 -#define CONFIG_TSCC_DECODER 0 -#define CONFIG_TSCC2_DECODER 0 -#define CONFIG_TXD_DECODER 0 -#define CONFIG_ULTI_DECODER 0 -#define CONFIG_UTVIDEO_DECODER 0 -#define CONFIG_V210_DECODER 0 -#define CONFIG_V210X_DECODER 0 -#define CONFIG_V308_DECODER 0 -#define CONFIG_V408_DECODER 0 -#define CONFIG_V410_DECODER 0 -#define CONFIG_VB_DECODER 0 -#define CONFIG_VBLE_DECODER 0 -#define CONFIG_VC1_DECODER 0 -#define CONFIG_VC1_CRYSTALHD_DECODER 0 -#define CONFIG_VC1_VDPAU_DECODER 0 -#define CONFIG_VC1IMAGE_DECODER 0 -#define CONFIG_VC1_MMAL_DECODER 0 -#define CONFIG_VC1_QSV_DECODER 0 -#define CONFIG_VCR1_DECODER 0 -#define CONFIG_VMDVIDEO_DECODER 0 -#define CONFIG_VMNC_DECODER 0 -#define CONFIG_VP3_DECODER 0 -#define CONFIG_VP5_DECODER 0 -#define CONFIG_VP6_DECODER 0 -#define CONFIG_VP6A_DECODER 0 -#define CONFIG_VP6F_DECODER 0 -#define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 1 #define CONFIG_VP9_DECODER 1 -#define CONFIG_VQA_DECODER 0 -#define CONFIG_WEBP_DECODER 0 -#define CONFIG_WMV1_DECODER 0 -#define CONFIG_WMV2_DECODER 0 -#define CONFIG_WMV3_DECODER 0 -#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -#define CONFIG_WMV3_VDPAU_DECODER 0 -#define CONFIG_WMV3IMAGE_DECODER 0 -#define CONFIG_WNV1_DECODER 0 -#define CONFIG_XAN_WC3_DECODER 0 -#define CONFIG_XAN_WC4_DECODER 0 -#define CONFIG_XBM_DECODER 0 -#define CONFIG_XFACE_DECODER 0 -#define CONFIG_XL_DECODER 0 -#define CONFIG_XWD_DECODER 0 -#define CONFIG_Y41P_DECODER 0 -#define CONFIG_YLC_DECODER 0 -#define CONFIG_YOP_DECODER 0 -#define CONFIG_YUV4_DECODER 0 -#define CONFIG_ZERO12V_DECODER 0 -#define CONFIG_ZEROCODEC_DECODER 0 -#define CONFIG_ZLIB_DECODER 0 -#define CONFIG_ZMBV_DECODER 0 -#define CONFIG_AAC_DECODER 0 -#define CONFIG_AAC_FIXED_DECODER 0 -#define CONFIG_AAC_LATM_DECODER 0 -#define CONFIG_AC3_DECODER 0 -#define CONFIG_AC3_FIXED_DECODER 0 -#define CONFIG_ALAC_DECODER 0 -#define CONFIG_ALS_DECODER 0 -#define CONFIG_AMRNB_DECODER 0 -#define CONFIG_AMRWB_DECODER 0 -#define CONFIG_APE_DECODER 0 -#define CONFIG_ATRAC1_DECODER 0 -#define CONFIG_ATRAC3_DECODER 0 -#define CONFIG_ATRAC3P_DECODER 0 -#define CONFIG_BINKAUDIO_DCT_DECODER 0 -#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -#define CONFIG_BMV_AUDIO_DECODER 0 -#define CONFIG_COOK_DECODER 0 -#define CONFIG_DCA_DECODER 0 -#define CONFIG_DSD_LSBF_DECODER 0 -#define CONFIG_DSD_MSBF_DECODER 0 -#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -#define CONFIG_DSICINAUDIO_DECODER 0 -#define CONFIG_DSS_SP_DECODER 0 -#define CONFIG_DST_DECODER 0 -#define CONFIG_EAC3_DECODER 0 -#define CONFIG_EVRC_DECODER 0 -#define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 1 -#define CONFIG_G723_1_DECODER 0 -#define CONFIG_G729_DECODER 0 -#define CONFIG_GSM_DECODER 0 -#define CONFIG_GSM_MS_DECODER 0 -#define CONFIG_IAC_DECODER 0 -#define CONFIG_IMC_DECODER 0 -#define CONFIG_INTERPLAY_ACM_DECODER 0 -#define CONFIG_MACE3_DECODER 0 -#define CONFIG_MACE6_DECODER 0 -#define CONFIG_METASOUND_DECODER 0 -#define CONFIG_MLP_DECODER 0 -#define CONFIG_MP1_DECODER 0 -#define CONFIG_MP1FLOAT_DECODER 0 -#define CONFIG_MP2_DECODER 0 -#define CONFIG_MP2FLOAT_DECODER 0 -#define CONFIG_MP3_DECODER 0 -#define CONFIG_MP3FLOAT_DECODER 0 -#define CONFIG_MP3ADU_DECODER 0 -#define CONFIG_MP3ADUFLOAT_DECODER 0 -#define CONFIG_MP3ON4_DECODER 0 -#define CONFIG_MP3ON4FLOAT_DECODER 0 -#define CONFIG_MPC7_DECODER 0 -#define CONFIG_MPC8_DECODER 0 -#define CONFIG_NELLYMOSER_DECODER 0 -#define CONFIG_ON2AVC_DECODER 0 -#define CONFIG_OPUS_DECODER 0 -#define CONFIG_PAF_AUDIO_DECODER 0 -#define CONFIG_QCELP_DECODER 0 -#define CONFIG_QDM2_DECODER 0 -#define CONFIG_RA_144_DECODER 0 -#define CONFIG_RA_288_DECODER 0 -#define CONFIG_RALF_DECODER 0 -#define CONFIG_SHORTEN_DECODER 0 -#define CONFIG_SIPR_DECODER 0 -#define CONFIG_SMACKAUD_DECODER 0 -#define CONFIG_SONIC_DECODER 0 -#define CONFIG_TAK_DECODER 0 -#define CONFIG_TRUEHD_DECODER 0 -#define CONFIG_TRUESPEECH_DECODER 0 -#define CONFIG_TTA_DECODER 0 -#define CONFIG_TWINVQ_DECODER 0 -#define CONFIG_VMDAUDIO_DECODER 0 -#define CONFIG_VORBIS_DECODER 0 -#define CONFIG_WAVPACK_DECODER 0 -#define CONFIG_WMALOSSLESS_DECODER 0 -#define CONFIG_WMAPRO_DECODER 0 -#define CONFIG_WMAV1_DECODER 0 -#define CONFIG_WMAV2_DECODER 0 -#define CONFIG_WMAVOICE_DECODER 0 -#define CONFIG_WS_SND1_DECODER 0 -#define CONFIG_XMA1_DECODER 0 -#define CONFIG_XMA2_DECODER 0 -#define CONFIG_PCM_ALAW_DECODER 0 -#define CONFIG_PCM_BLURAY_DECODER 0 -#define CONFIG_PCM_DVD_DECODER 0 -#define CONFIG_PCM_F32BE_DECODER 0 -#define CONFIG_PCM_F32LE_DECODER 0 -#define CONFIG_PCM_F64BE_DECODER 0 -#define CONFIG_PCM_F64LE_DECODER 0 -#define CONFIG_PCM_LXF_DECODER 0 -#define CONFIG_PCM_MULAW_DECODER 0 -#define CONFIG_PCM_S8_DECODER 0 -#define CONFIG_PCM_S8_PLANAR_DECODER 0 -#define CONFIG_PCM_S16BE_DECODER 0 -#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -#define CONFIG_PCM_S16LE_DECODER 0 -#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S24BE_DECODER 0 -#define CONFIG_PCM_S24DAUD_DECODER 0 -#define CONFIG_PCM_S24LE_DECODER 0 -#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S32BE_DECODER 0 -#define CONFIG_PCM_S32LE_DECODER 0 -#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S64BE_DECODER 0 -#define CONFIG_PCM_S64LE_DECODER 0 -#define CONFIG_PCM_U8_DECODER 0 -#define CONFIG_PCM_U16BE_DECODER 0 -#define CONFIG_PCM_U16LE_DECODER 0 -#define CONFIG_PCM_U24BE_DECODER 0 -#define CONFIG_PCM_U24LE_DECODER 0 -#define CONFIG_PCM_U32BE_DECODER 0 -#define CONFIG_PCM_U32LE_DECODER 0 -#define CONFIG_PCM_ZORK_DECODER 0 -#define CONFIG_INTERPLAY_DPCM_DECODER 0 -#define CONFIG_ROQ_DPCM_DECODER 0 -#define CONFIG_SOL_DPCM_DECODER 0 -#define CONFIG_XAN_DPCM_DECODER 0 -#define CONFIG_ADPCM_4XM_DECODER 0 -#define CONFIG_ADPCM_ADX_DECODER 0 -#define CONFIG_ADPCM_AFC_DECODER 0 -#define CONFIG_ADPCM_AICA_DECODER 0 -#define CONFIG_ADPCM_CT_DECODER 0 -#define CONFIG_ADPCM_DTK_DECODER 0 -#define CONFIG_ADPCM_EA_DECODER 0 -#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -#define CONFIG_ADPCM_EA_R1_DECODER 0 -#define CONFIG_ADPCM_EA_R2_DECODER 0 -#define CONFIG_ADPCM_EA_R3_DECODER 0 -#define CONFIG_ADPCM_EA_XAS_DECODER 0 -#define CONFIG_ADPCM_G722_DECODER 0 -#define CONFIG_ADPCM_G726_DECODER 0 -#define CONFIG_ADPCM_G726LE_DECODER 0 -#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -#define CONFIG_ADPCM_IMA_APC_DECODER 0 -#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_DECODER 0 -#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -#define CONFIG_ADPCM_IMA_WS_DECODER 0 -#define CONFIG_ADPCM_MS_DECODER 0 -#define CONFIG_ADPCM_MTAF_DECODER 0 -#define CONFIG_ADPCM_PSX_DECODER 0 -#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -#define CONFIG_ADPCM_SWF_DECODER 0 -#define CONFIG_ADPCM_THP_DECODER 0 -#define CONFIG_ADPCM_THP_LE_DECODER 0 -#define CONFIG_ADPCM_VIMA_DECODER 0 -#define CONFIG_ADPCM_XA_DECODER 0 -#define CONFIG_ADPCM_YAMAHA_DECODER 0 -#define CONFIG_SSA_DECODER 0 -#define CONFIG_ASS_DECODER 0 -#define CONFIG_CCAPTION_DECODER 0 -#define CONFIG_DVBSUB_DECODER 0 -#define CONFIG_DVDSUB_DECODER 0 -#define CONFIG_JACOSUB_DECODER 0 -#define CONFIG_MICRODVD_DECODER 0 -#define CONFIG_MOVTEXT_DECODER 0 -#define CONFIG_MPL2_DECODER 0 -#define CONFIG_PGSSUB_DECODER 0 -#define CONFIG_PJS_DECODER 0 -#define CONFIG_REALTEXT_DECODER 0 -#define CONFIG_SAMI_DECODER 0 -#define CONFIG_SRT_DECODER 0 -#define CONFIG_STL_DECODER 0 -#define CONFIG_SUBRIP_DECODER 0 -#define CONFIG_SUBVIEWER_DECODER 0 -#define CONFIG_SUBVIEWER1_DECODER 0 -#define CONFIG_TEXT_DECODER 0 -#define CONFIG_VPLAYER_DECODER 0 -#define CONFIG_WEBVTT_DECODER 0 -#define CONFIG_XSUB_DECODER 0 -#define CONFIG_AAC_AT_DECODER 0 -#define CONFIG_AC3_AT_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -#define CONFIG_ALAC_AT_DECODER 0 -#define CONFIG_AMR_NB_AT_DECODER 0 -#define CONFIG_EAC3_AT_DECODER 0 -#define CONFIG_GSM_MS_AT_DECODER 0 -#define CONFIG_ILBC_AT_DECODER 0 -#define CONFIG_MP1_AT_DECODER 0 -#define CONFIG_MP2_AT_DECODER 0 -#define CONFIG_MP3_AT_DECODER 0 -#define CONFIG_PCM_ALAW_AT_DECODER 0 -#define CONFIG_PCM_MULAW_AT_DECODER 0 -#define CONFIG_QDMC_AT_DECODER 0 -#define CONFIG_QDM2_AT_DECODER 0 -#define CONFIG_LIBCELT_DECODER 0 -#define CONFIG_LIBFDK_AAC_DECODER 0 -#define CONFIG_LIBGSM_DECODER 0 -#define CONFIG_LIBGSM_MS_DECODER 0 -#define CONFIG_LIBILBC_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -#define CONFIG_LIBOPENJPEG_DECODER 0 -#define CONFIG_LIBOPUS_DECODER 0 -#define CONFIG_LIBSCHROEDINGER_DECODER 0 -#define CONFIG_LIBSPEEX_DECODER 0 -#define CONFIG_LIBVORBIS_DECODER 0 -#define CONFIG_LIBVPX_VP8_DECODER 0 -#define CONFIG_LIBVPX_VP9_DECODER 0 -#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -#define CONFIG_BINTEXT_DECODER 0 -#define CONFIG_XBIN_DECODER 0 -#define CONFIG_IDF_DECODER 0 -#define CONFIG_LIBOPENH264_DECODER 0 -#define CONFIG_H263_CUVID_DECODER 0 -#define CONFIG_H264_CUVID_DECODER 0 -#define CONFIG_HEVC_CUVID_DECODER 0 -#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -#define CONFIG_MJPEG_CUVID_DECODER 0 -#define CONFIG_MPEG1_CUVID_DECODER 0 -#define CONFIG_MPEG2_CUVID_DECODER 0 -#define CONFIG_MPEG4_CUVID_DECODER 0 -#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -#define CONFIG_VC1_CUVID_DECODER 0 -#define CONFIG_VP8_CUVID_DECODER 0 -#define CONFIG_VP8_MEDIACODEC_DECODER 0 -#define CONFIG_VP9_CUVID_DECODER 0 -#define CONFIG_VP9_MEDIACODEC_DECODER 0 -#define CONFIG_AA_DEMUXER 0 -#define CONFIG_AAC_DEMUXER 0 -#define CONFIG_AC3_DEMUXER 0 -#define CONFIG_ACM_DEMUXER 0 -#define CONFIG_ACT_DEMUXER 0 -#define CONFIG_ADF_DEMUXER 0 -#define CONFIG_ADP_DEMUXER 0 -#define CONFIG_ADS_DEMUXER 0 -#define CONFIG_ADX_DEMUXER 0 -#define CONFIG_AEA_DEMUXER 0 -#define CONFIG_AFC_DEMUXER 0 -#define CONFIG_AIFF_DEMUXER 0 -#define CONFIG_AIX_DEMUXER 0 -#define CONFIG_AMR_DEMUXER 0 -#define CONFIG_ANM_DEMUXER 0 -#define CONFIG_APC_DEMUXER 0 -#define CONFIG_APE_DEMUXER 0 -#define CONFIG_APNG_DEMUXER 0 -#define CONFIG_AQTITLE_DEMUXER 0 -#define CONFIG_ASF_DEMUXER 0 -#define CONFIG_ASF_O_DEMUXER 0 -#define CONFIG_ASS_DEMUXER 0 -#define CONFIG_AST_DEMUXER 0 -#define CONFIG_AU_DEMUXER 0 -#define CONFIG_AVI_DEMUXER 0 -#define CONFIG_AVISYNTH_DEMUXER 0 -#define CONFIG_AVR_DEMUXER 0 -#define CONFIG_AVS_DEMUXER 0 -#define CONFIG_BETHSOFTVID_DEMUXER 0 -#define CONFIG_BFI_DEMUXER 0 -#define CONFIG_BINTEXT_DEMUXER 0 -#define CONFIG_BINK_DEMUXER 0 -#define CONFIG_BIT_DEMUXER 0 -#define CONFIG_BMV_DEMUXER 0 -#define CONFIG_BFSTM_DEMUXER 0 -#define CONFIG_BRSTM_DEMUXER 0 -#define CONFIG_BOA_DEMUXER 0 -#define CONFIG_C93_DEMUXER 0 -#define CONFIG_CAF_DEMUXER 0 -#define CONFIG_CAVSVIDEO_DEMUXER 0 -#define CONFIG_CDG_DEMUXER 0 -#define CONFIG_CDXL_DEMUXER 0 -#define CONFIG_CINE_DEMUXER 0 -#define CONFIG_CONCAT_DEMUXER 0 -#define CONFIG_DATA_DEMUXER 0 -#define CONFIG_DAUD_DEMUXER 0 -#define CONFIG_DCSTR_DEMUXER 0 -#define CONFIG_DFA_DEMUXER 0 -#define CONFIG_DIRAC_DEMUXER 0 -#define CONFIG_DNXHD_DEMUXER 0 -#define CONFIG_DSF_DEMUXER 0 -#define CONFIG_DSICIN_DEMUXER 0 -#define CONFIG_DSS_DEMUXER 0 -#define CONFIG_DTS_DEMUXER 0 -#define CONFIG_DTSHD_DEMUXER 0 -#define CONFIG_DV_DEMUXER 0 -#define CONFIG_DVBSUB_DEMUXER 0 -#define CONFIG_DVBTXT_DEMUXER 0 -#define CONFIG_DXA_DEMUXER 0 -#define CONFIG_EA_DEMUXER 0 -#define CONFIG_EA_CDATA_DEMUXER 0 -#define CONFIG_EAC3_DEMUXER 0 -#define CONFIG_EPAF_DEMUXER 0 -#define CONFIG_FFM_DEMUXER 0 -#define CONFIG_FFMETADATA_DEMUXER 0 -#define CONFIG_FILMSTRIP_DEMUXER 0 -#define CONFIG_FLAC_DEMUXER 0 -#define CONFIG_FLIC_DEMUXER 0 -#define CONFIG_FLV_DEMUXER 0 -#define CONFIG_LIVE_FLV_DEMUXER 0 -#define CONFIG_FOURXM_DEMUXER 0 -#define CONFIG_FRM_DEMUXER 0 -#define CONFIG_FSB_DEMUXER 0 -#define CONFIG_G722_DEMUXER 0 -#define CONFIG_G723_1_DEMUXER 0 -#define CONFIG_G729_DEMUXER 0 -#define CONFIG_GENH_DEMUXER 0 -#define CONFIG_GIF_DEMUXER 0 -#define CONFIG_GSM_DEMUXER 0 -#define CONFIG_GXF_DEMUXER 0 -#define CONFIG_H261_DEMUXER 0 -#define CONFIG_H263_DEMUXER 0 -#define CONFIG_H264_DEMUXER 0 -#define CONFIG_HEVC_DEMUXER 0 -#define CONFIG_HLS_DEMUXER 0 -#define CONFIG_HNM_DEMUXER 0 -#define CONFIG_ICO_DEMUXER 0 -#define CONFIG_IDCIN_DEMUXER 0 -#define CONFIG_IDF_DEMUXER 0 -#define CONFIG_IFF_DEMUXER 0 -#define CONFIG_ILBC_DEMUXER 0 -#define CONFIG_IMAGE2_DEMUXER 0 -#define CONFIG_IMAGE2PIPE_DEMUXER 0 -#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -#define CONFIG_INGENIENT_DEMUXER 0 -#define CONFIG_IPMOVIE_DEMUXER 0 -#define CONFIG_IRCAM_DEMUXER 0 -#define CONFIG_ISS_DEMUXER 0 -#define CONFIG_IV8_DEMUXER 0 -#define CONFIG_IVF_DEMUXER 0 -#define CONFIG_IVR_DEMUXER 0 -#define CONFIG_JACOSUB_DEMUXER 0 -#define CONFIG_JV_DEMUXER 0 -#define CONFIG_LMLM4_DEMUXER 0 -#define CONFIG_LOAS_DEMUXER 0 -#define CONFIG_LRC_DEMUXER 0 -#define CONFIG_LVF_DEMUXER 0 -#define CONFIG_LXF_DEMUXER 0 -#define CONFIG_M4V_DEMUXER 0 -#define CONFIG_MATROSKA_DEMUXER 0 -#define CONFIG_MGSTS_DEMUXER 0 -#define CONFIG_MICRODVD_DEMUXER 0 -#define CONFIG_MJPEG_DEMUXER 0 -#define CONFIG_MLP_DEMUXER 0 -#define CONFIG_MLV_DEMUXER 0 -#define CONFIG_MM_DEMUXER 0 -#define CONFIG_MMF_DEMUXER 0 -#define CONFIG_MOV_DEMUXER 0 -#define CONFIG_MP3_DEMUXER 0 -#define CONFIG_MPC_DEMUXER 0 -#define CONFIG_MPC8_DEMUXER 0 -#define CONFIG_MPEGPS_DEMUXER 0 -#define CONFIG_MPEGTS_DEMUXER 0 -#define CONFIG_MPEGTSRAW_DEMUXER 0 -#define CONFIG_MPEGVIDEO_DEMUXER 0 -#define CONFIG_MPJPEG_DEMUXER 0 -#define CONFIG_MPL2_DEMUXER 0 -#define CONFIG_MPSUB_DEMUXER 0 -#define CONFIG_MSF_DEMUXER 0 -#define CONFIG_MSNWC_TCP_DEMUXER 0 -#define CONFIG_MTAF_DEMUXER 0 -#define CONFIG_MTV_DEMUXER 0 -#define CONFIG_MUSX_DEMUXER 0 -#define CONFIG_MV_DEMUXER 0 -#define CONFIG_MVI_DEMUXER 0 -#define CONFIG_MXF_DEMUXER 0 -#define CONFIG_MXG_DEMUXER 0 -#define CONFIG_NC_DEMUXER 0 -#define CONFIG_NISTSPHERE_DEMUXER 0 -#define CONFIG_NSV_DEMUXER 0 -#define CONFIG_NUT_DEMUXER 0 -#define CONFIG_NUV_DEMUXER 0 -#define CONFIG_OGG_DEMUXER 0 -#define CONFIG_OMA_DEMUXER 0 -#define CONFIG_PAF_DEMUXER 0 -#define CONFIG_PCM_ALAW_DEMUXER 0 -#define CONFIG_PCM_MULAW_DEMUXER 0 -#define CONFIG_PCM_F64BE_DEMUXER 0 -#define CONFIG_PCM_F64LE_DEMUXER 0 -#define CONFIG_PCM_F32BE_DEMUXER 0 -#define CONFIG_PCM_F32LE_DEMUXER 0 -#define CONFIG_PCM_S32BE_DEMUXER 0 -#define CONFIG_PCM_S32LE_DEMUXER 0 -#define CONFIG_PCM_S24BE_DEMUXER 0 -#define CONFIG_PCM_S24LE_DEMUXER 0 -#define CONFIG_PCM_S16BE_DEMUXER 0 -#define CONFIG_PCM_S16LE_DEMUXER 0 -#define CONFIG_PCM_S8_DEMUXER 0 -#define CONFIG_PCM_U32BE_DEMUXER 0 -#define CONFIG_PCM_U32LE_DEMUXER 0 -#define CONFIG_PCM_U24BE_DEMUXER 0 -#define CONFIG_PCM_U24LE_DEMUXER 0 -#define CONFIG_PCM_U16BE_DEMUXER 0 -#define CONFIG_PCM_U16LE_DEMUXER 0 -#define CONFIG_PCM_U8_DEMUXER 0 -#define CONFIG_PJS_DEMUXER 0 -#define CONFIG_PMP_DEMUXER 0 -#define CONFIG_PVA_DEMUXER 0 -#define CONFIG_PVF_DEMUXER 0 -#define CONFIG_QCP_DEMUXER 0 -#define CONFIG_R3D_DEMUXER 0 -#define CONFIG_RAWVIDEO_DEMUXER 0 -#define CONFIG_REALTEXT_DEMUXER 0 -#define CONFIG_REDSPARK_DEMUXER 0 -#define CONFIG_RL2_DEMUXER 0 -#define CONFIG_RM_DEMUXER 0 -#define CONFIG_ROQ_DEMUXER 0 -#define CONFIG_RPL_DEMUXER 0 -#define CONFIG_RSD_DEMUXER 0 -#define CONFIG_RSO_DEMUXER 0 -#define CONFIG_RTP_DEMUXER 0 -#define CONFIG_RTSP_DEMUXER 0 -#define CONFIG_SAMI_DEMUXER 0 -#define CONFIG_SAP_DEMUXER 0 -#define CONFIG_SBG_DEMUXER 0 -#define CONFIG_SDP_DEMUXER 0 -#define CONFIG_SDR2_DEMUXER 0 -#define CONFIG_SEGAFILM_DEMUXER 0 -#define CONFIG_SHORTEN_DEMUXER 0 -#define CONFIG_SIFF_DEMUXER 0 -#define CONFIG_SLN_DEMUXER 0 -#define CONFIG_SMACKER_DEMUXER 0 -#define CONFIG_SMJPEG_DEMUXER 0 -#define CONFIG_SMUSH_DEMUXER 0 -#define CONFIG_SOL_DEMUXER 0 -#define CONFIG_SOX_DEMUXER 0 -#define CONFIG_SPDIF_DEMUXER 0 -#define CONFIG_SRT_DEMUXER 0 -#define CONFIG_STR_DEMUXER 0 -#define CONFIG_STL_DEMUXER 0 -#define CONFIG_SUBVIEWER1_DEMUXER 0 -#define CONFIG_SUBVIEWER_DEMUXER 0 -#define CONFIG_SUP_DEMUXER 0 -#define CONFIG_SVAG_DEMUXER 0 -#define CONFIG_SWF_DEMUXER 0 -#define CONFIG_TAK_DEMUXER 0 -#define CONFIG_TEDCAPTIONS_DEMUXER 0 -#define CONFIG_THP_DEMUXER 0 -#define CONFIG_THREEDOSTR_DEMUXER 0 -#define CONFIG_TIERTEXSEQ_DEMUXER 0 -#define CONFIG_TMV_DEMUXER 0 -#define CONFIG_TRUEHD_DEMUXER 0 -#define CONFIG_TTA_DEMUXER 0 -#define CONFIG_TXD_DEMUXER 0 -#define CONFIG_TTY_DEMUXER 0 -#define CONFIG_V210_DEMUXER 0 -#define CONFIG_V210X_DEMUXER 0 -#define CONFIG_VAG_DEMUXER 0 -#define CONFIG_VC1_DEMUXER 0 -#define CONFIG_VC1T_DEMUXER 0 -#define CONFIG_VIVO_DEMUXER 0 -#define CONFIG_VMD_DEMUXER 0 -#define CONFIG_VOBSUB_DEMUXER 0 -#define CONFIG_VOC_DEMUXER 0 -#define CONFIG_VPK_DEMUXER 0 -#define CONFIG_VPLAYER_DEMUXER 0 -#define CONFIG_VQF_DEMUXER 0 -#define CONFIG_W64_DEMUXER 0 -#define CONFIG_WAV_DEMUXER 0 -#define CONFIG_WC3_DEMUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -#define CONFIG_WEBVTT_DEMUXER 0 -#define CONFIG_WSAUD_DEMUXER 0 -#define CONFIG_WSD_DEMUXER 0 -#define CONFIG_WSVQA_DEMUXER 0 -#define CONFIG_WTV_DEMUXER 0 -#define CONFIG_WVE_DEMUXER 0 -#define CONFIG_WV_DEMUXER 0 -#define CONFIG_XA_DEMUXER 0 -#define CONFIG_XBIN_DEMUXER 0 -#define CONFIG_XMV_DEMUXER 0 -#define CONFIG_XVAG_DEMUXER 0 -#define CONFIG_XWMA_DEMUXER 0 -#define CONFIG_YOP_DEMUXER 0 -#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -#define CONFIG_LIBGME_DEMUXER 0 -#define CONFIG_LIBMODPLUG_DEMUXER 0 -#define CONFIG_LIBNUT_DEMUXER 0 -#define CONFIG_LIBOPENMPT_DEMUXER 0 -#define CONFIG_A64MULTI_ENCODER 0 -#define CONFIG_A64MULTI5_ENCODER 0 -#define CONFIG_ALIAS_PIX_ENCODER 0 -#define CONFIG_AMV_ENCODER 0 -#define CONFIG_APNG_ENCODER 0 -#define CONFIG_ASV1_ENCODER 0 -#define CONFIG_ASV2_ENCODER 0 -#define CONFIG_AVRP_ENCODER 0 -#define CONFIG_AVUI_ENCODER 0 -#define CONFIG_AYUV_ENCODER 0 -#define CONFIG_BMP_ENCODER 0 -#define CONFIG_CINEPAK_ENCODER 0 -#define CONFIG_CLJR_ENCODER 0 -#define CONFIG_COMFORTNOISE_ENCODER 0 -#define CONFIG_DNXHD_ENCODER 0 -#define CONFIG_DPX_ENCODER 0 -#define CONFIG_DVVIDEO_ENCODER 0 -#define CONFIG_FFV1_ENCODER 0 -#define CONFIG_FFVHUFF_ENCODER 0 -#define CONFIG_FLASHSV_ENCODER 0 -#define CONFIG_FLASHSV2_ENCODER 0 -#define CONFIG_FLV_ENCODER 0 -#define CONFIG_GIF_ENCODER 0 -#define CONFIG_H261_ENCODER 0 -#define CONFIG_H263_ENCODER 0 -#define CONFIG_H263P_ENCODER 0 -#define CONFIG_HAP_ENCODER 0 -#define CONFIG_HUFFYUV_ENCODER 0 -#define CONFIG_JPEG2000_ENCODER 0 -#define CONFIG_JPEGLS_ENCODER 0 -#define CONFIG_LJPEG_ENCODER 0 -#define CONFIG_MJPEG_ENCODER 0 -#define CONFIG_MPEG1VIDEO_ENCODER 0 -#define CONFIG_MPEG2VIDEO_ENCODER 0 -#define CONFIG_MPEG4_ENCODER 0 -#define CONFIG_MSMPEG4V2_ENCODER 0 -#define CONFIG_MSMPEG4V3_ENCODER 0 -#define CONFIG_MSVIDEO1_ENCODER 0 -#define CONFIG_PAM_ENCODER 0 -#define CONFIG_PBM_ENCODER 0 -#define CONFIG_PCX_ENCODER 0 -#define CONFIG_PGM_ENCODER 0 -#define CONFIG_PGMYUV_ENCODER 0 -#define CONFIG_PNG_ENCODER 0 -#define CONFIG_PPM_ENCODER 0 -#define CONFIG_PRORES_ENCODER 0 -#define CONFIG_PRORES_AW_ENCODER 0 -#define CONFIG_PRORES_KS_ENCODER 0 -#define CONFIG_QTRLE_ENCODER 0 -#define CONFIG_R10K_ENCODER 0 -#define CONFIG_R210_ENCODER 0 -#define CONFIG_RAWVIDEO_ENCODER 0 -#define CONFIG_ROQ_ENCODER 0 -#define CONFIG_RV10_ENCODER 0 -#define CONFIG_RV20_ENCODER 0 -#define CONFIG_S302M_ENCODER 0 -#define CONFIG_SGI_ENCODER 0 -#define CONFIG_SNOW_ENCODER 0 -#define CONFIG_SUNRAST_ENCODER 0 -#define CONFIG_SVQ1_ENCODER 0 -#define CONFIG_TARGA_ENCODER 0 -#define CONFIG_TIFF_ENCODER 0 -#define CONFIG_UTVIDEO_ENCODER 0 -#define CONFIG_V210_ENCODER 0 -#define CONFIG_V308_ENCODER 0 -#define CONFIG_V408_ENCODER 0 -#define CONFIG_V410_ENCODER 0 -#define CONFIG_VC2_ENCODER 0 -#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -#define CONFIG_WMV1_ENCODER 0 -#define CONFIG_WMV2_ENCODER 0 -#define CONFIG_XBM_ENCODER 0 -#define CONFIG_XFACE_ENCODER 0 -#define CONFIG_XWD_ENCODER 0 -#define CONFIG_Y41P_ENCODER 0 -#define CONFIG_YUV4_ENCODER 0 -#define CONFIG_ZLIB_ENCODER 0 -#define CONFIG_ZMBV_ENCODER 0 -#define CONFIG_AAC_ENCODER 0 -#define CONFIG_AC3_ENCODER 0 -#define CONFIG_AC3_FIXED_ENCODER 0 -#define CONFIG_ALAC_ENCODER 0 -#define CONFIG_DCA_ENCODER 0 -#define CONFIG_EAC3_ENCODER 0 -#define CONFIG_FLAC_ENCODER 0 -#define CONFIG_G723_1_ENCODER 0 -#define CONFIG_MLP_ENCODER 0 -#define CONFIG_MP2_ENCODER 0 -#define CONFIG_MP2FIXED_ENCODER 0 -#define CONFIG_NELLYMOSER_ENCODER 0 -#define CONFIG_RA_144_ENCODER 0 -#define CONFIG_SONIC_ENCODER 0 -#define CONFIG_SONIC_LS_ENCODER 0 -#define CONFIG_TRUEHD_ENCODER 0 -#define CONFIG_TTA_ENCODER 0 -#define CONFIG_VORBIS_ENCODER 0 -#define CONFIG_WAVPACK_ENCODER 0 -#define CONFIG_WMAV1_ENCODER 0 -#define CONFIG_WMAV2_ENCODER 0 -#define CONFIG_PCM_ALAW_ENCODER 0 -#define CONFIG_PCM_F32BE_ENCODER 0 -#define CONFIG_PCM_F32LE_ENCODER 0 -#define CONFIG_PCM_F64BE_ENCODER 0 -#define CONFIG_PCM_F64LE_ENCODER 0 -#define CONFIG_PCM_MULAW_ENCODER 0 -#define CONFIG_PCM_S8_ENCODER 0 -#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16BE_ENCODER 0 -#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16LE_ENCODER 0 -#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S24BE_ENCODER 0 -#define CONFIG_PCM_S24DAUD_ENCODER 0 -#define CONFIG_PCM_S24LE_ENCODER 0 -#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S32BE_ENCODER 0 -#define CONFIG_PCM_S32LE_ENCODER 0 -#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S64BE_ENCODER 0 -#define CONFIG_PCM_S64LE_ENCODER 0 -#define CONFIG_PCM_U8_ENCODER 0 -#define CONFIG_PCM_U16BE_ENCODER 0 -#define CONFIG_PCM_U16LE_ENCODER 0 -#define CONFIG_PCM_U24BE_ENCODER 0 -#define CONFIG_PCM_U24LE_ENCODER 0 -#define CONFIG_PCM_U32BE_ENCODER 0 -#define CONFIG_PCM_U32LE_ENCODER 0 -#define CONFIG_ROQ_DPCM_ENCODER 0 -#define CONFIG_ADPCM_ADX_ENCODER 0 -#define CONFIG_ADPCM_G722_ENCODER 0 -#define CONFIG_ADPCM_G726_ENCODER 0 -#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -#define CONFIG_ADPCM_MS_ENCODER 0 -#define CONFIG_ADPCM_SWF_ENCODER 0 -#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -#define CONFIG_SSA_ENCODER 0 -#define CONFIG_ASS_ENCODER 0 -#define CONFIG_DVBSUB_ENCODER 0 -#define CONFIG_DVDSUB_ENCODER 0 -#define CONFIG_MOVTEXT_ENCODER 0 -#define CONFIG_SRT_ENCODER 0 -#define CONFIG_SUBRIP_ENCODER 0 -#define CONFIG_TEXT_ENCODER 0 -#define CONFIG_WEBVTT_ENCODER 0 -#define CONFIG_XSUB_ENCODER 0 -#define CONFIG_AAC_AT_ENCODER 0 -#define CONFIG_ALAC_AT_ENCODER 0 -#define CONFIG_ILBC_AT_ENCODER 0 -#define CONFIG_PCM_ALAW_AT_ENCODER 0 -#define CONFIG_PCM_MULAW_AT_ENCODER 0 -#define CONFIG_LIBFDK_AAC_ENCODER 0 -#define CONFIG_LIBGSM_ENCODER 0 -#define CONFIG_LIBGSM_MS_ENCODER 0 -#define CONFIG_LIBILBC_ENCODER 0 -#define CONFIG_LIBMP3LAME_ENCODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -#define CONFIG_LIBOPENJPEG_ENCODER 0 -#define CONFIG_LIBOPUS_ENCODER 0 -#define CONFIG_LIBSCHROEDINGER_ENCODER 0 -#define CONFIG_LIBSHINE_ENCODER 0 -#define CONFIG_LIBSPEEX_ENCODER 0 -#define CONFIG_LIBTHEORA_ENCODER 0 -#define CONFIG_LIBTWOLAME_ENCODER 0 -#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -#define CONFIG_LIBVORBIS_ENCODER 0 -#define CONFIG_LIBVPX_VP8_ENCODER 0 -#define CONFIG_LIBVPX_VP9_ENCODER 0 -#define CONFIG_LIBWAVPACK_ENCODER 0 -#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -#define CONFIG_LIBWEBP_ENCODER 0 -#define CONFIG_LIBX262_ENCODER 0 -#define CONFIG_LIBX264_ENCODER 0 -#define CONFIG_LIBX264RGB_ENCODER 0 -#define CONFIG_LIBX265_ENCODER 0 -#define CONFIG_LIBXAVS_ENCODER 0 -#define CONFIG_LIBXVID_ENCODER 0 -#define CONFIG_LIBOPENH264_ENCODER 0 -#define CONFIG_H264_NVENC_ENCODER 0 -#define CONFIG_H264_OMX_ENCODER 0 -#define CONFIG_H264_QSV_ENCODER 0 -#define CONFIG_H264_VAAPI_ENCODER 0 -#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -#define CONFIG_NVENC_ENCODER 0 -#define CONFIG_NVENC_H264_ENCODER 0 -#define CONFIG_NVENC_HEVC_ENCODER 0 -#define CONFIG_HEVC_NVENC_ENCODER 0 -#define CONFIG_HEVC_QSV_ENCODER 0 -#define CONFIG_HEVC_VAAPI_ENCODER 0 -#define CONFIG_LIBKVAZAAR_ENCODER 0 -#define CONFIG_MJPEG_VAAPI_ENCODER 0 -#define CONFIG_MPEG2_QSV_ENCODER 0 -#define CONFIG_ABENCH_FILTER 0 -#define CONFIG_ACOMPRESSOR_FILTER 0 -#define CONFIG_ACROSSFADE_FILTER 0 -#define CONFIG_ACRUSHER_FILTER 0 -#define CONFIG_ADELAY_FILTER 0 -#define CONFIG_AECHO_FILTER 0 -#define CONFIG_AEMPHASIS_FILTER 0 -#define CONFIG_AEVAL_FILTER 0 -#define CONFIG_AFADE_FILTER 0 -#define CONFIG_AFFTFILT_FILTER 0 -#define CONFIG_AFORMAT_FILTER 0 -#define CONFIG_AGATE_FILTER 0 -#define CONFIG_AINTERLEAVE_FILTER 0 -#define CONFIG_ALIMITER_FILTER 0 -#define CONFIG_ALLPASS_FILTER 0 -#define CONFIG_ALOOP_FILTER 0 -#define CONFIG_AMERGE_FILTER 0 -#define CONFIG_AMETADATA_FILTER 0 -#define CONFIG_AMIX_FILTER 0 -#define CONFIG_ANEQUALIZER_FILTER 0 -#define CONFIG_ANULL_FILTER 0 -#define CONFIG_APAD_FILTER 0 -#define CONFIG_APERMS_FILTER 0 -#define CONFIG_APHASER_FILTER 0 -#define CONFIG_APULSATOR_FILTER 0 -#define CONFIG_AREALTIME_FILTER 0 -#define CONFIG_ARESAMPLE_FILTER 0 -#define CONFIG_AREVERSE_FILTER 0 -#define CONFIG_ASELECT_FILTER 0 -#define CONFIG_ASENDCMD_FILTER 0 -#define CONFIG_ASETNSAMPLES_FILTER 0 -#define CONFIG_ASETPTS_FILTER 0 -#define CONFIG_ASETRATE_FILTER 0 -#define CONFIG_ASETTB_FILTER 0 -#define CONFIG_ASHOWINFO_FILTER 0 -#define CONFIG_ASIDEDATA_FILTER 0 -#define CONFIG_ASPLIT_FILTER 0 -#define CONFIG_ASTATS_FILTER 0 -#define CONFIG_ASTREAMSELECT_FILTER 0 -#define CONFIG_ASYNCTS_FILTER 0 -#define CONFIG_ATEMPO_FILTER 0 -#define CONFIG_ATRIM_FILTER 0 -#define CONFIG_AZMQ_FILTER 0 -#define CONFIG_BANDPASS_FILTER 0 -#define CONFIG_BANDREJECT_FILTER 0 -#define CONFIG_BASS_FILTER 0 -#define CONFIG_BIQUAD_FILTER 0 -#define CONFIG_BS2B_FILTER 0 -#define CONFIG_CHANNELMAP_FILTER 0 -#define CONFIG_CHANNELSPLIT_FILTER 0 -#define CONFIG_CHORUS_FILTER 0 -#define CONFIG_COMPAND_FILTER 0 -#define CONFIG_COMPENSATIONDELAY_FILTER 0 -#define CONFIG_CRYSTALIZER_FILTER 0 -#define CONFIG_DCSHIFT_FILTER 0 -#define CONFIG_DYNAUDNORM_FILTER 0 -#define CONFIG_EARWAX_FILTER 0 -#define CONFIG_EBUR128_FILTER 0 -#define CONFIG_EQUALIZER_FILTER 0 -#define CONFIG_EXTRASTEREO_FILTER 0 -#define CONFIG_FIREQUALIZER_FILTER 0 -#define CONFIG_FLANGER_FILTER 0 -#define CONFIG_HDCD_FILTER 0 -#define CONFIG_HIGHPASS_FILTER 0 -#define CONFIG_JOIN_FILTER 0 -#define CONFIG_LADSPA_FILTER 0 -#define CONFIG_LOUDNORM_FILTER 0 -#define CONFIG_LOWPASS_FILTER 0 -#define CONFIG_PAN_FILTER 0 -#define CONFIG_REPLAYGAIN_FILTER 0 -#define CONFIG_RESAMPLE_FILTER 0 -#define CONFIG_RUBBERBAND_FILTER 0 -#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -#define CONFIG_SIDECHAINGATE_FILTER 0 -#define CONFIG_SILENCEDETECT_FILTER 0 -#define CONFIG_SILENCEREMOVE_FILTER 0 -#define CONFIG_SOFALIZER_FILTER 0 -#define CONFIG_STEREOTOOLS_FILTER 0 -#define CONFIG_STEREOWIDEN_FILTER 0 -#define CONFIG_TREBLE_FILTER 0 -#define CONFIG_TREMOLO_FILTER 0 -#define CONFIG_VIBRATO_FILTER 0 -#define CONFIG_VOLUME_FILTER 0 -#define CONFIG_VOLUMEDETECT_FILTER 0 -#define CONFIG_AEVALSRC_FILTER 0 -#define CONFIG_ANOISESRC_FILTER 0 -#define CONFIG_ANULLSRC_FILTER 0 -#define CONFIG_FLITE_FILTER 0 -#define CONFIG_SINE_FILTER 0 -#define CONFIG_ANULLSINK_FILTER 0 -#define CONFIG_ALPHAEXTRACT_FILTER 0 -#define CONFIG_ALPHAMERGE_FILTER 0 -#define CONFIG_ASS_FILTER 0 -#define CONFIG_ATADENOISE_FILTER 0 -#define CONFIG_AVGBLUR_FILTER 0 -#define CONFIG_BBOX_FILTER 0 -#define CONFIG_BENCH_FILTER 0 -#define CONFIG_BITPLANENOISE_FILTER 0 -#define CONFIG_BLACKDETECT_FILTER 0 -#define CONFIG_BLACKFRAME_FILTER 0 -#define CONFIG_BLEND_FILTER 0 -#define CONFIG_BOXBLUR_FILTER 0 -#define CONFIG_BWDIF_FILTER 0 -#define CONFIG_CHROMAKEY_FILTER 0 -#define CONFIG_CIESCOPE_FILTER 0 -#define CONFIG_CODECVIEW_FILTER 0 -#define CONFIG_COLORBALANCE_FILTER 0 -#define CONFIG_COLORCHANNELMIXER_FILTER 0 -#define CONFIG_COLORKEY_FILTER 0 -#define CONFIG_COLORLEVELS_FILTER 0 -#define CONFIG_COLORMATRIX_FILTER 0 -#define CONFIG_COLORSPACE_FILTER 0 -#define CONFIG_CONVOLUTION_FILTER 0 -#define CONFIG_COPY_FILTER 0 -#define CONFIG_COREIMAGE_FILTER 0 -#define CONFIG_COVER_RECT_FILTER 0 -#define CONFIG_CROP_FILTER 0 -#define CONFIG_CROPDETECT_FILTER 0 -#define CONFIG_CURVES_FILTER 0 -#define CONFIG_DATASCOPE_FILTER 0 -#define CONFIG_DCTDNOIZ_FILTER 0 -#define CONFIG_DEBAND_FILTER 0 -#define CONFIG_DECIMATE_FILTER 0 -#define CONFIG_DEFLATE_FILTER 0 -#define CONFIG_DEJUDDER_FILTER 0 -#define CONFIG_DELOGO_FILTER 0 -#define CONFIG_DESHAKE_FILTER 0 -#define CONFIG_DETELECINE_FILTER 0 -#define CONFIG_DILATION_FILTER 0 -#define CONFIG_DISPLACE_FILTER 0 -#define CONFIG_DRAWBOX_FILTER 0 -#define CONFIG_DRAWGRAPH_FILTER 0 -#define CONFIG_DRAWGRID_FILTER 0 -#define CONFIG_DRAWTEXT_FILTER 0 -#define CONFIG_EDGEDETECT_FILTER 0 -#define CONFIG_ELBG_FILTER 0 -#define CONFIG_EQ_FILTER 0 -#define CONFIG_EROSION_FILTER 0 -#define CONFIG_EXTRACTPLANES_FILTER 0 -#define CONFIG_FADE_FILTER 0 -#define CONFIG_FFTFILT_FILTER 0 -#define CONFIG_FIELD_FILTER 0 -#define CONFIG_FIELDHINT_FILTER 0 -#define CONFIG_FIELDMATCH_FILTER 0 -#define CONFIG_FIELDORDER_FILTER 0 -#define CONFIG_FIND_RECT_FILTER 0 -#define CONFIG_FORMAT_FILTER 0 -#define CONFIG_FPS_FILTER 0 -#define CONFIG_FRAMEPACK_FILTER 0 -#define CONFIG_FRAMERATE_FILTER 0 -#define CONFIG_FRAMESTEP_FILTER 0 -#define CONFIG_FREI0R_FILTER 0 -#define CONFIG_FSPP_FILTER 0 -#define CONFIG_GBLUR_FILTER 0 -#define CONFIG_GEQ_FILTER 0 -#define CONFIG_GRADFUN_FILTER 0 -#define CONFIG_HALDCLUT_FILTER 0 -#define CONFIG_HFLIP_FILTER 0 -#define CONFIG_HISTEQ_FILTER 0 -#define CONFIG_HISTOGRAM_FILTER 0 -#define CONFIG_HQDN3D_FILTER 0 -#define CONFIG_HQX_FILTER 0 -#define CONFIG_HSTACK_FILTER 0 -#define CONFIG_HUE_FILTER 0 -#define CONFIG_HWDOWNLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -#define CONFIG_HYSTERESIS_FILTER 0 -#define CONFIG_IDET_FILTER 0 -#define CONFIG_IL_FILTER 0 -#define CONFIG_INFLATE_FILTER 0 -#define CONFIG_INTERLACE_FILTER 0 -#define CONFIG_INTERLEAVE_FILTER 0 -#define CONFIG_KERNDEINT_FILTER 0 -#define CONFIG_LENSCORRECTION_FILTER 0 -#define CONFIG_LOOP_FILTER 0 -#define CONFIG_LUT_FILTER 0 -#define CONFIG_LUT2_FILTER 0 -#define CONFIG_LUT3D_FILTER 0 -#define CONFIG_LUTRGB_FILTER 0 -#define CONFIG_LUTYUV_FILTER 0 -#define CONFIG_MASKEDCLAMP_FILTER 0 -#define CONFIG_MASKEDMERGE_FILTER 0 -#define CONFIG_MCDEINT_FILTER 0 -#define CONFIG_MERGEPLANES_FILTER 0 -#define CONFIG_MESTIMATE_FILTER 0 -#define CONFIG_METADATA_FILTER 0 -#define CONFIG_MINTERPOLATE_FILTER 0 -#define CONFIG_MPDECIMATE_FILTER 0 -#define CONFIG_NEGATE_FILTER 0 -#define CONFIG_NLMEANS_FILTER 0 -#define CONFIG_NNEDI_FILTER 0 -#define CONFIG_NOFORMAT_FILTER 0 -#define CONFIG_NOISE_FILTER 0 -#define CONFIG_NULL_FILTER 0 -#define CONFIG_OCR_FILTER 0 -#define CONFIG_OCV_FILTER 0 -#define CONFIG_OVERLAY_FILTER 0 -#define CONFIG_OWDENOISE_FILTER 0 -#define CONFIG_PAD_FILTER 0 -#define CONFIG_PALETTEGEN_FILTER 0 -#define CONFIG_PALETTEUSE_FILTER 0 -#define CONFIG_PERMS_FILTER 0 -#define CONFIG_PERSPECTIVE_FILTER 0 -#define CONFIG_PHASE_FILTER 0 -#define CONFIG_PIXDESCTEST_FILTER 0 -#define CONFIG_PP_FILTER 0 -#define CONFIG_PP7_FILTER 0 -#define CONFIG_PREWITT_FILTER 0 -#define CONFIG_PSNR_FILTER 0 -#define CONFIG_PULLUP_FILTER 0 -#define CONFIG_QP_FILTER 0 -#define CONFIG_RANDOM_FILTER 0 -#define CONFIG_READVITC_FILTER 0 -#define CONFIG_REALTIME_FILTER 0 -#define CONFIG_REMAP_FILTER 0 -#define CONFIG_REMOVEGRAIN_FILTER 0 -#define CONFIG_REMOVELOGO_FILTER 0 -#define CONFIG_REPEATFIELDS_FILTER 0 -#define CONFIG_REVERSE_FILTER 0 -#define CONFIG_ROTATE_FILTER 0 -#define CONFIG_SAB_FILTER 0 -#define CONFIG_SCALE_FILTER 0 -#define CONFIG_SCALE_NPP_FILTER 0 -#define CONFIG_SCALE_VAAPI_FILTER 0 -#define CONFIG_SCALE2REF_FILTER 0 -#define CONFIG_SELECT_FILTER 0 -#define CONFIG_SELECTIVECOLOR_FILTER 0 -#define CONFIG_SENDCMD_FILTER 0 -#define CONFIG_SEPARATEFIELDS_FILTER 0 -#define CONFIG_SETDAR_FILTER 0 -#define CONFIG_SETFIELD_FILTER 0 -#define CONFIG_SETPTS_FILTER 0 -#define CONFIG_SETSAR_FILTER 0 -#define CONFIG_SETTB_FILTER 0 -#define CONFIG_SHOWINFO_FILTER 0 -#define CONFIG_SHOWPALETTE_FILTER 0 -#define CONFIG_SHUFFLEFRAMES_FILTER 0 -#define CONFIG_SHUFFLEPLANES_FILTER 0 -#define CONFIG_SIDEDATA_FILTER 0 -#define CONFIG_SIGNALSTATS_FILTER 0 -#define CONFIG_SMARTBLUR_FILTER 0 -#define CONFIG_SOBEL_FILTER 0 -#define CONFIG_SPLIT_FILTER 0 -#define CONFIG_SPP_FILTER 0 -#define CONFIG_SSIM_FILTER 0 -#define CONFIG_STEREO3D_FILTER 0 -#define CONFIG_STREAMSELECT_FILTER 0 -#define CONFIG_SUBTITLES_FILTER 0 -#define CONFIG_SUPER2XSAI_FILTER 0 -#define CONFIG_SWAPRECT_FILTER 0 -#define CONFIG_SWAPUV_FILTER 0 -#define CONFIG_TBLEND_FILTER 0 -#define CONFIG_TELECINE_FILTER 0 -#define CONFIG_THUMBNAIL_FILTER 0 -#define CONFIG_TILE_FILTER 0 -#define CONFIG_TINTERLACE_FILTER 0 -#define CONFIG_TRANSPOSE_FILTER 0 -#define CONFIG_TRIM_FILTER 0 -#define CONFIG_UNSHARP_FILTER 0 -#define CONFIG_USPP_FILTER 0 -#define CONFIG_VAGUEDENOISER_FILTER 0 -#define CONFIG_VECTORSCOPE_FILTER 0 -#define CONFIG_VFLIP_FILTER 0 -#define CONFIG_VIDSTABDETECT_FILTER 0 -#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -#define CONFIG_VIGNETTE_FILTER 0 -#define CONFIG_VSTACK_FILTER 0 -#define CONFIG_W3FDIF_FILTER 0 -#define CONFIG_WAVEFORM_FILTER 0 -#define CONFIG_WEAVE_FILTER 0 -#define CONFIG_XBR_FILTER 0 -#define CONFIG_YADIF_FILTER 0 -#define CONFIG_ZMQ_FILTER 0 -#define CONFIG_ZOOMPAN_FILTER 0 -#define CONFIG_ZSCALE_FILTER 0 -#define CONFIG_ALLRGB_FILTER 0 -#define CONFIG_ALLYUV_FILTER 0 -#define CONFIG_CELLAUTO_FILTER 0 -#define CONFIG_COLOR_FILTER 0 -#define CONFIG_COREIMAGESRC_FILTER 0 -#define CONFIG_FREI0R_SRC_FILTER 0 -#define CONFIG_HALDCLUTSRC_FILTER 0 -#define CONFIG_LIFE_FILTER 0 -#define CONFIG_MANDELBROT_FILTER 0 -#define CONFIG_MPTESTSRC_FILTER 0 -#define CONFIG_NULLSRC_FILTER 0 -#define CONFIG_RGBTESTSRC_FILTER 0 -#define CONFIG_SMPTEBARS_FILTER 0 -#define CONFIG_SMPTEHDBARS_FILTER 0 -#define CONFIG_TESTSRC_FILTER 0 -#define CONFIG_TESTSRC2_FILTER 0 -#define CONFIG_YUVTESTSRC_FILTER 0 -#define CONFIG_NULLSINK_FILTER 0 -#define CONFIG_ADRAWGRAPH_FILTER 0 -#define CONFIG_AHISTOGRAM_FILTER 0 -#define CONFIG_APHASEMETER_FILTER 0 -#define CONFIG_AVECTORSCOPE_FILTER 0 -#define CONFIG_CONCAT_FILTER 0 -#define CONFIG_SHOWCQT_FILTER 0 -#define CONFIG_SHOWFREQS_FILTER 0 -#define CONFIG_SHOWSPECTRUM_FILTER 0 -#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -#define CONFIG_SHOWVOLUME_FILTER 0 -#define CONFIG_SHOWWAVES_FILTER 0 -#define CONFIG_SHOWWAVESPIC_FILTER 0 -#define CONFIG_SPECTRUMSYNTH_FILTER 0 -#define CONFIG_AMOVIE_FILTER 0 -#define CONFIG_MOVIE_FILTER 0 -#define CONFIG_H263_CUVID_HWACCEL 0 -#define CONFIG_H263_VAAPI_HWACCEL 0 -#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_H264_CUVID_HWACCEL 0 -#define CONFIG_H264_D3D11VA_HWACCEL 0 -#define CONFIG_H264_DXVA2_HWACCEL 0 -#define CONFIG_H264_MEDIACODEC_HWACCEL 0 -#define CONFIG_H264_MMAL_HWACCEL 0 -#define CONFIG_H264_QSV_HWACCEL 0 -#define CONFIG_H264_VAAPI_HWACCEL 0 -#define CONFIG_H264_VDA_HWACCEL 0 -#define CONFIG_H264_VDA_OLD_HWACCEL 0 -#define CONFIG_H264_VDPAU_HWACCEL 0 -#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_HEVC_CUVID_HWACCEL 0 -#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -#define CONFIG_HEVC_DXVA2_HWACCEL 0 -#define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -#define CONFIG_HEVC_QSV_HWACCEL 0 -#define CONFIG_HEVC_VAAPI_HWACCEL 0 -#define CONFIG_HEVC_VDPAU_HWACCEL 0 -#define CONFIG_MJPEG_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_XVMC_HWACCEL 0 -#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG2_CUVID_HWACCEL 0 -#define CONFIG_MPEG2_XVMC_HWACCEL 0 -#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -#define CONFIG_MPEG2_MMAL_HWACCEL 0 -#define CONFIG_MPEG2_QSV_HWACCEL 0 -#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG4_CUVID_HWACCEL 0 -#define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -#define CONFIG_MPEG4_MMAL_HWACCEL 0 -#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_VC1_CUVID_HWACCEL 0 -#define CONFIG_VC1_D3D11VA_HWACCEL 0 -#define CONFIG_VC1_DXVA2_HWACCEL 0 -#define CONFIG_VC1_VAAPI_HWACCEL 0 -#define CONFIG_VC1_VDPAU_HWACCEL 0 -#define CONFIG_VC1_MMAL_HWACCEL 0 -#define CONFIG_VC1_QSV_HWACCEL 0 -#define CONFIG_VP8_CUVID_HWACCEL 0 -#define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_CUVID_HWACCEL 0 -#define CONFIG_VP9_D3D11VA_HWACCEL 0 -#define CONFIG_VP9_DXVA2_HWACCEL 0 -#define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -#define CONFIG_WMV3_DXVA2_HWACCEL 0 -#define CONFIG_WMV3_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_VDPAU_HWACCEL 0 -#define CONFIG_ALSA_INDEV 0 -#define CONFIG_AVFOUNDATION_INDEV 0 -#define CONFIG_BKTR_INDEV 0 -#define CONFIG_DECKLINK_INDEV 0 -#define CONFIG_DSHOW_INDEV 0 -#define CONFIG_DV1394_INDEV 0 -#define CONFIG_FBDEV_INDEV 0 -#define CONFIG_GDIGRAB_INDEV 0 -#define CONFIG_IEC61883_INDEV 0 -#define CONFIG_JACK_INDEV 0 -#define CONFIG_LAVFI_INDEV 0 -#define CONFIG_OPENAL_INDEV 0 -#define CONFIG_OSS_INDEV 0 -#define CONFIG_PULSE_INDEV 0 -#define CONFIG_QTKIT_INDEV 0 -#define CONFIG_SNDIO_INDEV 0 -#define CONFIG_V4L2_INDEV 0 -#define CONFIG_VFWCAP_INDEV 0 -#define CONFIG_X11GRAB_INDEV 0 -#define CONFIG_X11GRAB_XCB_INDEV 0 -#define CONFIG_LIBCDIO_INDEV 0 -#define CONFIG_LIBDC1394_INDEV 0 -#define CONFIG_A64_MUXER 0 -#define CONFIG_AC3_MUXER 0 -#define CONFIG_ADTS_MUXER 0 -#define CONFIG_ADX_MUXER 0 -#define CONFIG_AIFF_MUXER 0 -#define CONFIG_AMR_MUXER 0 -#define CONFIG_APNG_MUXER 0 -#define CONFIG_ASF_MUXER 0 -#define CONFIG_ASS_MUXER 0 -#define CONFIG_AST_MUXER 0 -#define CONFIG_ASF_STREAM_MUXER 0 -#define CONFIG_AU_MUXER 0 -#define CONFIG_AVI_MUXER 0 -#define CONFIG_AVM2_MUXER 0 -#define CONFIG_BIT_MUXER 0 -#define CONFIG_CAF_MUXER 0 -#define CONFIG_CAVSVIDEO_MUXER 0 -#define CONFIG_CRC_MUXER 0 -#define CONFIG_DASH_MUXER 0 -#define CONFIG_DATA_MUXER 0 -#define CONFIG_DAUD_MUXER 0 -#define CONFIG_DIRAC_MUXER 0 -#define CONFIG_DNXHD_MUXER 0 -#define CONFIG_DTS_MUXER 0 -#define CONFIG_DV_MUXER 0 -#define CONFIG_EAC3_MUXER 0 -#define CONFIG_F4V_MUXER 0 -#define CONFIG_FFM_MUXER 0 -#define CONFIG_FFMETADATA_MUXER 0 -#define CONFIG_FIFO_MUXER 0 -#define CONFIG_FILMSTRIP_MUXER 0 -#define CONFIG_FLAC_MUXER 0 -#define CONFIG_FLV_MUXER 0 -#define CONFIG_FRAMECRC_MUXER 0 -#define CONFIG_FRAMEHASH_MUXER 0 -#define CONFIG_FRAMEMD5_MUXER 0 -#define CONFIG_G722_MUXER 0 -#define CONFIG_G723_1_MUXER 0 -#define CONFIG_GIF_MUXER 0 -#define CONFIG_GSM_MUXER 0 -#define CONFIG_GXF_MUXER 0 -#define CONFIG_H261_MUXER 0 -#define CONFIG_H263_MUXER 0 -#define CONFIG_H264_MUXER 0 -#define CONFIG_HASH_MUXER 0 -#define CONFIG_HDS_MUXER 0 -#define CONFIG_HEVC_MUXER 0 -#define CONFIG_HLS_MUXER 0 -#define CONFIG_ICO_MUXER 0 -#define CONFIG_ILBC_MUXER 0 -#define CONFIG_IMAGE2_MUXER 0 -#define CONFIG_IMAGE2PIPE_MUXER 0 -#define CONFIG_IPOD_MUXER 0 -#define CONFIG_IRCAM_MUXER 0 -#define CONFIG_ISMV_MUXER 0 -#define CONFIG_IVF_MUXER 0 -#define CONFIG_JACOSUB_MUXER 0 -#define CONFIG_LATM_MUXER 0 -#define CONFIG_LRC_MUXER 0 -#define CONFIG_M4V_MUXER 0 -#define CONFIG_MD5_MUXER 0 -#define CONFIG_MATROSKA_MUXER 0 -#define CONFIG_MATROSKA_AUDIO_MUXER 0 -#define CONFIG_MICRODVD_MUXER 0 -#define CONFIG_MJPEG_MUXER 0 -#define CONFIG_MLP_MUXER 0 -#define CONFIG_MMF_MUXER 0 -#define CONFIG_MOV_MUXER 0 -#define CONFIG_MP2_MUXER 0 -#define CONFIG_MP3_MUXER 0 -#define CONFIG_MP4_MUXER 0 -#define CONFIG_MPEG1SYSTEM_MUXER 0 -#define CONFIG_MPEG1VCD_MUXER 0 -#define CONFIG_MPEG1VIDEO_MUXER 0 -#define CONFIG_MPEG2DVD_MUXER 0 -#define CONFIG_MPEG2SVCD_MUXER 0 -#define CONFIG_MPEG2VIDEO_MUXER 0 -#define CONFIG_MPEG2VOB_MUXER 0 -#define CONFIG_MPEGTS_MUXER 0 -#define CONFIG_MPJPEG_MUXER 0 -#define CONFIG_MXF_MUXER 0 -#define CONFIG_MXF_D10_MUXER 0 -#define CONFIG_MXF_OPATOM_MUXER 0 -#define CONFIG_NULL_MUXER 0 -#define CONFIG_NUT_MUXER 0 -#define CONFIG_OGA_MUXER 0 -#define CONFIG_OGG_MUXER 0 -#define CONFIG_OGV_MUXER 0 -#define CONFIG_OMA_MUXER 0 -#define CONFIG_OPUS_MUXER 0 -#define CONFIG_PCM_ALAW_MUXER 0 -#define CONFIG_PCM_MULAW_MUXER 0 -#define CONFIG_PCM_F64BE_MUXER 0 -#define CONFIG_PCM_F64LE_MUXER 0 -#define CONFIG_PCM_F32BE_MUXER 0 -#define CONFIG_PCM_F32LE_MUXER 0 -#define CONFIG_PCM_S32BE_MUXER 0 -#define CONFIG_PCM_S32LE_MUXER 0 -#define CONFIG_PCM_S24BE_MUXER 0 -#define CONFIG_PCM_S24LE_MUXER 0 -#define CONFIG_PCM_S16BE_MUXER 0 -#define CONFIG_PCM_S16LE_MUXER 0 -#define CONFIG_PCM_S8_MUXER 0 -#define CONFIG_PCM_U32BE_MUXER 0 -#define CONFIG_PCM_U32LE_MUXER 0 -#define CONFIG_PCM_U24BE_MUXER 0 -#define CONFIG_PCM_U24LE_MUXER 0 -#define CONFIG_PCM_U16BE_MUXER 0 -#define CONFIG_PCM_U16LE_MUXER 0 -#define CONFIG_PCM_U8_MUXER 0 -#define CONFIG_PSP_MUXER 0 -#define CONFIG_RAWVIDEO_MUXER 0 -#define CONFIG_RM_MUXER 0 -#define CONFIG_ROQ_MUXER 0 -#define CONFIG_RSO_MUXER 0 -#define CONFIG_RTP_MUXER 0 -#define CONFIG_RTP_MPEGTS_MUXER 0 -#define CONFIG_RTSP_MUXER 0 -#define CONFIG_SAP_MUXER 0 -#define CONFIG_SEGMENT_MUXER 0 -#define CONFIG_STREAM_SEGMENT_MUXER 0 -#define CONFIG_SINGLEJPEG_MUXER 0 -#define CONFIG_SMJPEG_MUXER 0 -#define CONFIG_SMOOTHSTREAMING_MUXER 0 -#define CONFIG_SOX_MUXER 0 -#define CONFIG_SPX_MUXER 0 -#define CONFIG_SPDIF_MUXER 0 -#define CONFIG_SRT_MUXER 0 -#define CONFIG_SWF_MUXER 0 -#define CONFIG_TEE_MUXER 0 -#define CONFIG_TG2_MUXER 0 -#define CONFIG_TGP_MUXER 0 -#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -#define CONFIG_TRUEHD_MUXER 0 -#define CONFIG_TTA_MUXER 0 -#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -#define CONFIG_VC1_MUXER 0 -#define CONFIG_VC1T_MUXER 0 -#define CONFIG_VOC_MUXER 0 -#define CONFIG_W64_MUXER 0 -#define CONFIG_WAV_MUXER 0 -#define CONFIG_WEBM_MUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -#define CONFIG_WEBM_CHUNK_MUXER 0 -#define CONFIG_WEBP_MUXER 0 -#define CONFIG_WEBVTT_MUXER 0 -#define CONFIG_WTV_MUXER 0 -#define CONFIG_WV_MUXER 0 -#define CONFIG_YUV4MPEGPIPE_MUXER 0 -#define CONFIG_CHROMAPRINT_MUXER 0 -#define CONFIG_LIBNUT_MUXER 0 -#define CONFIG_ALSA_OUTDEV 0 -#define CONFIG_CACA_OUTDEV 0 -#define CONFIG_DECKLINK_OUTDEV 0 -#define CONFIG_FBDEV_OUTDEV 0 -#define CONFIG_OPENGL_OUTDEV 0 -#define CONFIG_OSS_OUTDEV 0 -#define CONFIG_PULSE_OUTDEV 0 -#define CONFIG_SDL2_OUTDEV 0 -#define CONFIG_SNDIO_OUTDEV 0 -#define CONFIG_V4L2_OUTDEV 0 -#define CONFIG_XV_OUTDEV 0 -#define CONFIG_AAC_PARSER 0 -#define CONFIG_AAC_LATM_PARSER 0 -#define CONFIG_AC3_PARSER 0 -#define CONFIG_ADX_PARSER 0 -#define CONFIG_BMP_PARSER 0 -#define CONFIG_CAVSVIDEO_PARSER 0 -#define CONFIG_COOK_PARSER 0 -#define CONFIG_DCA_PARSER 0 -#define CONFIG_DIRAC_PARSER 0 -#define CONFIG_DNXHD_PARSER 0 -#define CONFIG_DPX_PARSER 0 -#define CONFIG_DVAUDIO_PARSER 0 -#define CONFIG_DVBSUB_PARSER 0 -#define CONFIG_DVDSUB_PARSER 0 -#define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 1 -#define CONFIG_G729_PARSER 0 -#define CONFIG_GSM_PARSER 0 -#define CONFIG_H261_PARSER 0 -#define CONFIG_H263_PARSER 0 -#define CONFIG_H264_PARSER 0 -#define CONFIG_HEVC_PARSER 0 -#define CONFIG_MJPEG_PARSER 0 -#define CONFIG_MLP_PARSER 0 -#define CONFIG_MPEG4VIDEO_PARSER 0 -#define CONFIG_MPEGAUDIO_PARSER 0 -#define CONFIG_MPEGVIDEO_PARSER 0 -#define CONFIG_OPUS_PARSER 0 -#define CONFIG_PNG_PARSER 0 -#define CONFIG_PNM_PARSER 0 -#define CONFIG_RV30_PARSER 0 -#define CONFIG_RV40_PARSER 0 -#define CONFIG_TAK_PARSER 0 -#define CONFIG_VC1_PARSER 0 -#define CONFIG_VORBIS_PARSER 0 -#define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 1 #define CONFIG_VP9_PARSER 1 -#define CONFIG_ASYNC_PROTOCOL 0 -#define CONFIG_BLURAY_PROTOCOL 0 -#define CONFIG_CACHE_PROTOCOL 0 -#define CONFIG_CONCAT_PROTOCOL 0 -#define CONFIG_CRYPTO_PROTOCOL 0 -#define CONFIG_DATA_PROTOCOL 0 -#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -#define CONFIG_FILE_PROTOCOL 0 -#define CONFIG_FTP_PROTOCOL 0 -#define CONFIG_GOPHER_PROTOCOL 0 -#define CONFIG_HLS_PROTOCOL 0 -#define CONFIG_HTTP_PROTOCOL 0 -#define CONFIG_HTTPPROXY_PROTOCOL 0 -#define CONFIG_HTTPS_PROTOCOL 0 -#define CONFIG_ICECAST_PROTOCOL 0 -#define CONFIG_MMSH_PROTOCOL 0 -#define CONFIG_MMST_PROTOCOL 0 -#define CONFIG_MD5_PROTOCOL 0 -#define CONFIG_PIPE_PROTOCOL 0 -#define CONFIG_RTMP_PROTOCOL 0 -#define CONFIG_RTMPE_PROTOCOL 0 -#define CONFIG_RTMPS_PROTOCOL 0 -#define CONFIG_RTMPT_PROTOCOL 0 -#define CONFIG_RTMPTE_PROTOCOL 0 -#define CONFIG_RTMPTS_PROTOCOL 0 -#define CONFIG_RTP_PROTOCOL 0 -#define CONFIG_SCTP_PROTOCOL 0 -#define CONFIG_SRTP_PROTOCOL 0 -#define CONFIG_SUBFILE_PROTOCOL 0 -#define CONFIG_TEE_PROTOCOL 0 -#define CONFIG_TCP_PROTOCOL 0 -#define CONFIG_TLS_GNUTLS_PROTOCOL 0 -#define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -#define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -#define CONFIG_TLS_OPENSSL_PROTOCOL 0 -#define CONFIG_UDP_PROTOCOL 0 -#define CONFIG_UDPLITE_PROTOCOL 0 -#define CONFIG_UNIX_PROTOCOL 0 -#define CONFIG_LIBRTMP_PROTOCOL 0 -#define CONFIG_LIBRTMPE_PROTOCOL 0 -#define CONFIG_LIBRTMPS_PROTOCOL 0 -#define CONFIG_LIBRTMPT_PROTOCOL 0 -#define CONFIG_LIBRTMPTE_PROTOCOL 0 -#define CONFIG_LIBSSH_PROTOCOL 0 -#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ diff --git a/media/ffvpx/config_win64.asm b/media/ffvpx/config_win64.asm index d2ff064862d0..e492246b43ef 100644 --- a/media/ffvpx/config_win64.asm +++ b/media/ffvpx/config_win64.asm @@ -369,15 +369,7 @@ %define HAVE_XLIB 0 %define CONFIG_BSFS 0 %define CONFIG_DECODERS 1 -%define CONFIG_ENCODERS 0 -%define CONFIG_HWACCELS 0 %define CONFIG_PARSERS 1 -%define CONFIG_INDEVS 0 -%define CONFIG_OUTDEVS 0 -%define CONFIG_FILTERS 0 -%define CONFIG_DEMUXERS 0 -%define CONFIG_MUXERS 0 -%define CONFIG_PROTOCOLS 0 %define CONFIG_DOC 0 %define CONFIG_HTMLPAGES 0 %define CONFIG_MANPAGES 1 @@ -499,7 +491,6 @@ %define CONFIG_VAAPI 0 %define CONFIG_VDA 0 %define CONFIG_VDPAU 0 -%define CONFIG_VIDEOTOOLBOX_HWACCEL 0 %define CONFIG_XVMC 0 %define CONFIG_FTRAPV 0 %define CONFIG_GRAY 0 @@ -564,7 +555,6 @@ %define CONFIG_FDCTDSP 0 %define CONFIG_FLACDSP 1 %define CONFIG_FMTCONVERT 0 -%define CONFIG_FRAME_THREAD_ENCODER 0 %define CONFIG_G722DSP 0 %define CONFIG_GOLOMB 1 %define CONFIG_GPLV3 0 @@ -640,1569 +630,9 @@ %define CONFIG_REMOVE_EXTRADATA_BSF 0 %define CONFIG_TEXT2MOVSUB_BSF 0 %define CONFIG_VP9_SUPERFRAME_BSF 0 -%define CONFIG_AASC_DECODER 0 -%define CONFIG_AIC_DECODER 0 -%define CONFIG_ALIAS_PIX_DECODER 0 -%define CONFIG_AMV_DECODER 0 -%define CONFIG_ANM_DECODER 0 -%define CONFIG_ANSI_DECODER 0 -%define CONFIG_APNG_DECODER 0 -%define CONFIG_ASV1_DECODER 0 -%define CONFIG_ASV2_DECODER 0 -%define CONFIG_AURA_DECODER 0 -%define CONFIG_AURA2_DECODER 0 -%define CONFIG_AVRP_DECODER 0 -%define CONFIG_AVRN_DECODER 0 -%define CONFIG_AVS_DECODER 0 -%define CONFIG_AVUI_DECODER 0 -%define CONFIG_AYUV_DECODER 0 -%define CONFIG_BETHSOFTVID_DECODER 0 -%define CONFIG_BFI_DECODER 0 -%define CONFIG_BINK_DECODER 0 -%define CONFIG_BMP_DECODER 0 -%define CONFIG_BMV_VIDEO_DECODER 0 -%define CONFIG_BRENDER_PIX_DECODER 0 -%define CONFIG_C93_DECODER 0 -%define CONFIG_CAVS_DECODER 0 -%define CONFIG_CDGRAPHICS_DECODER 0 -%define CONFIG_CDXL_DECODER 0 -%define CONFIG_CFHD_DECODER 0 -%define CONFIG_CINEPAK_DECODER 0 -%define CONFIG_CLJR_DECODER 0 -%define CONFIG_CLLC_DECODER 0 -%define CONFIG_COMFORTNOISE_DECODER 0 -%define CONFIG_CPIA_DECODER 0 -%define CONFIG_CSCD_DECODER 0 -%define CONFIG_CYUV_DECODER 0 -%define CONFIG_DDS_DECODER 0 -%define CONFIG_DFA_DECODER 0 -%define CONFIG_DIRAC_DECODER 0 -%define CONFIG_DNXHD_DECODER 0 -%define CONFIG_DPX_DECODER 0 -%define CONFIG_DSICINVIDEO_DECODER 0 -%define CONFIG_DVAUDIO_DECODER 0 -%define CONFIG_DVVIDEO_DECODER 0 -%define CONFIG_DXA_DECODER 0 -%define CONFIG_DXTORY_DECODER 0 -%define CONFIG_DXV_DECODER 0 -%define CONFIG_EACMV_DECODER 0 -%define CONFIG_EAMAD_DECODER 0 -%define CONFIG_EATGQ_DECODER 0 -%define CONFIG_EATGV_DECODER 0 -%define CONFIG_EATQI_DECODER 0 -%define CONFIG_EIGHTBPS_DECODER 0 -%define CONFIG_EIGHTSVX_EXP_DECODER 0 -%define CONFIG_EIGHTSVX_FIB_DECODER 0 -%define CONFIG_ESCAPE124_DECODER 0 -%define CONFIG_ESCAPE130_DECODER 0 -%define CONFIG_EXR_DECODER 0 -%define CONFIG_FFV1_DECODER 0 -%define CONFIG_FFVHUFF_DECODER 0 -%define CONFIG_FIC_DECODER 0 -%define CONFIG_FLASHSV_DECODER 0 -%define CONFIG_FLASHSV2_DECODER 0 -%define CONFIG_FLIC_DECODER 0 -%define CONFIG_FLV_DECODER 0 -%define CONFIG_FOURXM_DECODER 0 -%define CONFIG_FRAPS_DECODER 0 -%define CONFIG_FRWU_DECODER 0 -%define CONFIG_G2M_DECODER 0 -%define CONFIG_GIF_DECODER 0 -%define CONFIG_H261_DECODER 0 -%define CONFIG_H263_DECODER 0 -%define CONFIG_H263I_DECODER 0 -%define CONFIG_H263P_DECODER 0 -%define CONFIG_H264_DECODER 0 -%define CONFIG_H264_CRYSTALHD_DECODER 0 -%define CONFIG_H264_MEDIACODEC_DECODER 0 -%define CONFIG_H264_MMAL_DECODER 0 -%define CONFIG_H264_QSV_DECODER 0 -%define CONFIG_H264_VDA_DECODER 0 -%define CONFIG_H264_VDPAU_DECODER 0 -%define CONFIG_HAP_DECODER 0 -%define CONFIG_HEVC_DECODER 0 -%define CONFIG_HEVC_QSV_DECODER 0 -%define CONFIG_HNM4_VIDEO_DECODER 0 -%define CONFIG_HQ_HQA_DECODER 0 -%define CONFIG_HQX_DECODER 0 -%define CONFIG_HUFFYUV_DECODER 0 -%define CONFIG_IDCIN_DECODER 0 -%define CONFIG_IFF_ILBM_DECODER 0 -%define CONFIG_INDEO2_DECODER 0 -%define CONFIG_INDEO3_DECODER 0 -%define CONFIG_INDEO4_DECODER 0 -%define CONFIG_INDEO5_DECODER 0 -%define CONFIG_INTERPLAY_VIDEO_DECODER 0 -%define CONFIG_JPEG2000_DECODER 0 -%define CONFIG_JPEGLS_DECODER 0 -%define CONFIG_JV_DECODER 0 -%define CONFIG_KGV1_DECODER 0 -%define CONFIG_KMVC_DECODER 0 -%define CONFIG_LAGARITH_DECODER 0 -%define CONFIG_LOCO_DECODER 0 -%define CONFIG_M101_DECODER 0 -%define CONFIG_MAGICYUV_DECODER 0 -%define CONFIG_MDEC_DECODER 0 -%define CONFIG_MIMIC_DECODER 0 -%define CONFIG_MJPEG_DECODER 0 -%define CONFIG_MJPEGB_DECODER 0 -%define CONFIG_MMVIDEO_DECODER 0 -%define CONFIG_MOTIONPIXELS_DECODER 0 -%define CONFIG_MPEG_XVMC_DECODER 0 -%define CONFIG_MPEG1VIDEO_DECODER 0 -%define CONFIG_MPEG2VIDEO_DECODER 0 -%define CONFIG_MPEG4_DECODER 0 -%define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG4_MMAL_DECODER 0 -%define CONFIG_MPEG4_VDPAU_DECODER 0 -%define CONFIG_MPEGVIDEO_DECODER 0 -%define CONFIG_MPEG_VDPAU_DECODER 0 -%define CONFIG_MPEG1_VDPAU_DECODER 0 -%define CONFIG_MPEG2_MMAL_DECODER 0 -%define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -%define CONFIG_MPEG2_QSV_DECODER 0 -%define CONFIG_MSA1_DECODER 0 -%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -%define CONFIG_MSMPEG4V1_DECODER 0 -%define CONFIG_MSMPEG4V2_DECODER 0 -%define CONFIG_MSMPEG4V3_DECODER 0 -%define CONFIG_MSRLE_DECODER 0 -%define CONFIG_MSS1_DECODER 0 -%define CONFIG_MSS2_DECODER 0 -%define CONFIG_MSVIDEO1_DECODER 0 -%define CONFIG_MSZH_DECODER 0 -%define CONFIG_MTS2_DECODER 0 -%define CONFIG_MVC1_DECODER 0 -%define CONFIG_MVC2_DECODER 0 -%define CONFIG_MXPEG_DECODER 0 -%define CONFIG_NUV_DECODER 0 -%define CONFIG_PAF_VIDEO_DECODER 0 -%define CONFIG_PAM_DECODER 0 -%define CONFIG_PBM_DECODER 0 -%define CONFIG_PCX_DECODER 0 -%define CONFIG_PGM_DECODER 0 -%define CONFIG_PGMYUV_DECODER 0 -%define CONFIG_PICTOR_DECODER 0 -%define CONFIG_PNG_DECODER 0 -%define CONFIG_PPM_DECODER 0 -%define CONFIG_PRORES_DECODER 0 -%define CONFIG_PRORES_LGPL_DECODER 0 -%define CONFIG_PTX_DECODER 0 -%define CONFIG_QDRAW_DECODER 0 -%define CONFIG_QPEG_DECODER 0 -%define CONFIG_QTRLE_DECODER 0 -%define CONFIG_R10K_DECODER 0 -%define CONFIG_R210_DECODER 0 -%define CONFIG_RAWVIDEO_DECODER 0 -%define CONFIG_RL2_DECODER 0 -%define CONFIG_ROQ_DECODER 0 -%define CONFIG_RPZA_DECODER 0 -%define CONFIG_RSCC_DECODER 0 -%define CONFIG_RV10_DECODER 0 -%define CONFIG_RV20_DECODER 0 -%define CONFIG_RV30_DECODER 0 -%define CONFIG_RV40_DECODER 0 -%define CONFIG_S302M_DECODER 0 -%define CONFIG_SANM_DECODER 0 -%define CONFIG_SCREENPRESSO_DECODER 0 -%define CONFIG_SDX2_DPCM_DECODER 0 -%define CONFIG_SGI_DECODER 0 -%define CONFIG_SGIRLE_DECODER 0 -%define CONFIG_SHEERVIDEO_DECODER 0 -%define CONFIG_SMACKER_DECODER 0 -%define CONFIG_SMC_DECODER 0 -%define CONFIG_SMVJPEG_DECODER 0 -%define CONFIG_SNOW_DECODER 0 -%define CONFIG_SP5X_DECODER 0 -%define CONFIG_SUNRAST_DECODER 0 -%define CONFIG_SVQ1_DECODER 0 -%define CONFIG_SVQ3_DECODER 0 -%define CONFIG_TARGA_DECODER 0 -%define CONFIG_TARGA_Y216_DECODER 0 -%define CONFIG_TDSC_DECODER 0 -%define CONFIG_THEORA_DECODER 0 -%define CONFIG_THP_DECODER 0 -%define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -%define CONFIG_TIFF_DECODER 0 -%define CONFIG_TMV_DECODER 0 -%define CONFIG_TRUEMOTION1_DECODER 0 -%define CONFIG_TRUEMOTION2_DECODER 0 -%define CONFIG_TRUEMOTION2RT_DECODER 0 -%define CONFIG_TSCC_DECODER 0 -%define CONFIG_TSCC2_DECODER 0 -%define CONFIG_TXD_DECODER 0 -%define CONFIG_ULTI_DECODER 0 -%define CONFIG_UTVIDEO_DECODER 0 -%define CONFIG_V210_DECODER 0 -%define CONFIG_V210X_DECODER 0 -%define CONFIG_V308_DECODER 0 -%define CONFIG_V408_DECODER 0 -%define CONFIG_V410_DECODER 0 -%define CONFIG_VB_DECODER 0 -%define CONFIG_VBLE_DECODER 0 -%define CONFIG_VC1_DECODER 0 -%define CONFIG_VC1_CRYSTALHD_DECODER 0 -%define CONFIG_VC1_VDPAU_DECODER 0 -%define CONFIG_VC1IMAGE_DECODER 0 -%define CONFIG_VC1_MMAL_DECODER 0 -%define CONFIG_VC1_QSV_DECODER 0 -%define CONFIG_VCR1_DECODER 0 -%define CONFIG_VMDVIDEO_DECODER 0 -%define CONFIG_VMNC_DECODER 0 -%define CONFIG_VP3_DECODER 0 -%define CONFIG_VP5_DECODER 0 -%define CONFIG_VP6_DECODER 0 -%define CONFIG_VP6A_DECODER 0 -%define CONFIG_VP6F_DECODER 0 -%define CONFIG_VP7_DECODER 0 %define CONFIG_VP8_DECODER 1 %define CONFIG_VP9_DECODER 1 -%define CONFIG_VQA_DECODER 0 -%define CONFIG_WEBP_DECODER 0 -%define CONFIG_WMV1_DECODER 0 -%define CONFIG_WMV2_DECODER 0 -%define CONFIG_WMV3_DECODER 0 -%define CONFIG_WMV3_CRYSTALHD_DECODER 0 -%define CONFIG_WMV3_VDPAU_DECODER 0 -%define CONFIG_WMV3IMAGE_DECODER 0 -%define CONFIG_WNV1_DECODER 0 -%define CONFIG_XAN_WC3_DECODER 0 -%define CONFIG_XAN_WC4_DECODER 0 -%define CONFIG_XBM_DECODER 0 -%define CONFIG_XFACE_DECODER 0 -%define CONFIG_XL_DECODER 0 -%define CONFIG_XWD_DECODER 0 -%define CONFIG_Y41P_DECODER 0 -%define CONFIG_YLC_DECODER 0 -%define CONFIG_YOP_DECODER 0 -%define CONFIG_YUV4_DECODER 0 -%define CONFIG_ZERO12V_DECODER 0 -%define CONFIG_ZEROCODEC_DECODER 0 -%define CONFIG_ZLIB_DECODER 0 -%define CONFIG_ZMBV_DECODER 0 -%define CONFIG_AAC_DECODER 0 -%define CONFIG_AAC_FIXED_DECODER 0 -%define CONFIG_AAC_LATM_DECODER 0 -%define CONFIG_AC3_DECODER 0 -%define CONFIG_AC3_FIXED_DECODER 0 -%define CONFIG_ALAC_DECODER 0 -%define CONFIG_ALS_DECODER 0 -%define CONFIG_AMRNB_DECODER 0 -%define CONFIG_AMRWB_DECODER 0 -%define CONFIG_APE_DECODER 0 -%define CONFIG_ATRAC1_DECODER 0 -%define CONFIG_ATRAC3_DECODER 0 -%define CONFIG_ATRAC3P_DECODER 0 -%define CONFIG_BINKAUDIO_DCT_DECODER 0 -%define CONFIG_BINKAUDIO_RDFT_DECODER 0 -%define CONFIG_BMV_AUDIO_DECODER 0 -%define CONFIG_COOK_DECODER 0 -%define CONFIG_DCA_DECODER 0 -%define CONFIG_DSD_LSBF_DECODER 0 -%define CONFIG_DSD_MSBF_DECODER 0 -%define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -%define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -%define CONFIG_DSICINAUDIO_DECODER 0 -%define CONFIG_DSS_SP_DECODER 0 -%define CONFIG_DST_DECODER 0 -%define CONFIG_EAC3_DECODER 0 -%define CONFIG_EVRC_DECODER 0 -%define CONFIG_FFWAVESYNTH_DECODER 0 %define CONFIG_FLAC_DECODER 1 -%define CONFIG_G723_1_DECODER 0 -%define CONFIG_G729_DECODER 0 -%define CONFIG_GSM_DECODER 0 -%define CONFIG_GSM_MS_DECODER 0 -%define CONFIG_IAC_DECODER 0 -%define CONFIG_IMC_DECODER 0 -%define CONFIG_INTERPLAY_ACM_DECODER 0 -%define CONFIG_MACE3_DECODER 0 -%define CONFIG_MACE6_DECODER 0 -%define CONFIG_METASOUND_DECODER 0 -%define CONFIG_MLP_DECODER 0 -%define CONFIG_MP1_DECODER 0 -%define CONFIG_MP1FLOAT_DECODER 0 -%define CONFIG_MP2_DECODER 0 -%define CONFIG_MP2FLOAT_DECODER 0 -%define CONFIG_MP3_DECODER 0 -%define CONFIG_MP3FLOAT_DECODER 0 -%define CONFIG_MP3ADU_DECODER 0 -%define CONFIG_MP3ADUFLOAT_DECODER 0 -%define CONFIG_MP3ON4_DECODER 0 -%define CONFIG_MP3ON4FLOAT_DECODER 0 -%define CONFIG_MPC7_DECODER 0 -%define CONFIG_MPC8_DECODER 0 -%define CONFIG_NELLYMOSER_DECODER 0 -%define CONFIG_ON2AVC_DECODER 0 -%define CONFIG_OPUS_DECODER 0 -%define CONFIG_PAF_AUDIO_DECODER 0 -%define CONFIG_QCELP_DECODER 0 -%define CONFIG_QDM2_DECODER 0 -%define CONFIG_RA_144_DECODER 0 -%define CONFIG_RA_288_DECODER 0 -%define CONFIG_RALF_DECODER 0 -%define CONFIG_SHORTEN_DECODER 0 -%define CONFIG_SIPR_DECODER 0 -%define CONFIG_SMACKAUD_DECODER 0 -%define CONFIG_SONIC_DECODER 0 -%define CONFIG_TAK_DECODER 0 -%define CONFIG_TRUEHD_DECODER 0 -%define CONFIG_TRUESPEECH_DECODER 0 -%define CONFIG_TTA_DECODER 0 -%define CONFIG_TWINVQ_DECODER 0 -%define CONFIG_VMDAUDIO_DECODER 0 -%define CONFIG_VORBIS_DECODER 0 -%define CONFIG_WAVPACK_DECODER 0 -%define CONFIG_WMALOSSLESS_DECODER 0 -%define CONFIG_WMAPRO_DECODER 0 -%define CONFIG_WMAV1_DECODER 0 -%define CONFIG_WMAV2_DECODER 0 -%define CONFIG_WMAVOICE_DECODER 0 -%define CONFIG_WS_SND1_DECODER 0 -%define CONFIG_XMA1_DECODER 0 -%define CONFIG_XMA2_DECODER 0 -%define CONFIG_PCM_ALAW_DECODER 0 -%define CONFIG_PCM_BLURAY_DECODER 0 -%define CONFIG_PCM_DVD_DECODER 0 -%define CONFIG_PCM_F32BE_DECODER 0 -%define CONFIG_PCM_F32LE_DECODER 0 -%define CONFIG_PCM_F64BE_DECODER 0 -%define CONFIG_PCM_F64LE_DECODER 0 -%define CONFIG_PCM_LXF_DECODER 0 -%define CONFIG_PCM_MULAW_DECODER 0 -%define CONFIG_PCM_S8_DECODER 0 -%define CONFIG_PCM_S8_PLANAR_DECODER 0 -%define CONFIG_PCM_S16BE_DECODER 0 -%define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -%define CONFIG_PCM_S16LE_DECODER 0 -%define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S24BE_DECODER 0 -%define CONFIG_PCM_S24DAUD_DECODER 0 -%define CONFIG_PCM_S24LE_DECODER 0 -%define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S32BE_DECODER 0 -%define CONFIG_PCM_S32LE_DECODER 0 -%define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -%define CONFIG_PCM_S64BE_DECODER 0 -%define CONFIG_PCM_S64LE_DECODER 0 -%define CONFIG_PCM_U8_DECODER 0 -%define CONFIG_PCM_U16BE_DECODER 0 -%define CONFIG_PCM_U16LE_DECODER 0 -%define CONFIG_PCM_U24BE_DECODER 0 -%define CONFIG_PCM_U24LE_DECODER 0 -%define CONFIG_PCM_U32BE_DECODER 0 -%define CONFIG_PCM_U32LE_DECODER 0 -%define CONFIG_PCM_ZORK_DECODER 0 -%define CONFIG_INTERPLAY_DPCM_DECODER 0 -%define CONFIG_ROQ_DPCM_DECODER 0 -%define CONFIG_SOL_DPCM_DECODER 0 -%define CONFIG_XAN_DPCM_DECODER 0 -%define CONFIG_ADPCM_4XM_DECODER 0 -%define CONFIG_ADPCM_ADX_DECODER 0 -%define CONFIG_ADPCM_AFC_DECODER 0 -%define CONFIG_ADPCM_AICA_DECODER 0 -%define CONFIG_ADPCM_CT_DECODER 0 -%define CONFIG_ADPCM_DTK_DECODER 0 -%define CONFIG_ADPCM_EA_DECODER 0 -%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -%define CONFIG_ADPCM_EA_R1_DECODER 0 -%define CONFIG_ADPCM_EA_R2_DECODER 0 -%define CONFIG_ADPCM_EA_R3_DECODER 0 -%define CONFIG_ADPCM_EA_XAS_DECODER 0 -%define CONFIG_ADPCM_G722_DECODER 0 -%define CONFIG_ADPCM_G726_DECODER 0 -%define CONFIG_ADPCM_G726LE_DECODER 0 -%define CONFIG_ADPCM_IMA_AMV_DECODER 0 -%define CONFIG_ADPCM_IMA_APC_DECODER 0 -%define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -%define CONFIG_ADPCM_IMA_DK3_DECODER 0 -%define CONFIG_ADPCM_IMA_DK4_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -%define CONFIG_ADPCM_IMA_ISS_DECODER 0 -%define CONFIG_ADPCM_IMA_OKI_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_DECODER 0 -%define CONFIG_ADPCM_IMA_RAD_DECODER 0 -%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -%define CONFIG_ADPCM_IMA_WAV_DECODER 0 -%define CONFIG_ADPCM_IMA_WS_DECODER 0 -%define CONFIG_ADPCM_MS_DECODER 0 -%define CONFIG_ADPCM_MTAF_DECODER 0 -%define CONFIG_ADPCM_PSX_DECODER 0 -%define CONFIG_ADPCM_SBPRO_2_DECODER 0 -%define CONFIG_ADPCM_SBPRO_3_DECODER 0 -%define CONFIG_ADPCM_SBPRO_4_DECODER 0 -%define CONFIG_ADPCM_SWF_DECODER 0 -%define CONFIG_ADPCM_THP_DECODER 0 -%define CONFIG_ADPCM_THP_LE_DECODER 0 -%define CONFIG_ADPCM_VIMA_DECODER 0 -%define CONFIG_ADPCM_XA_DECODER 0 -%define CONFIG_ADPCM_YAMAHA_DECODER 0 -%define CONFIG_SSA_DECODER 0 -%define CONFIG_ASS_DECODER 0 -%define CONFIG_CCAPTION_DECODER 0 -%define CONFIG_DVBSUB_DECODER 0 -%define CONFIG_DVDSUB_DECODER 0 -%define CONFIG_JACOSUB_DECODER 0 -%define CONFIG_MICRODVD_DECODER 0 -%define CONFIG_MOVTEXT_DECODER 0 -%define CONFIG_MPL2_DECODER 0 -%define CONFIG_PGSSUB_DECODER 0 -%define CONFIG_PJS_DECODER 0 -%define CONFIG_REALTEXT_DECODER 0 -%define CONFIG_SAMI_DECODER 0 -%define CONFIG_SRT_DECODER 0 -%define CONFIG_STL_DECODER 0 -%define CONFIG_SUBRIP_DECODER 0 -%define CONFIG_SUBVIEWER_DECODER 0 -%define CONFIG_SUBVIEWER1_DECODER 0 -%define CONFIG_TEXT_DECODER 0 -%define CONFIG_VPLAYER_DECODER 0 -%define CONFIG_WEBVTT_DECODER 0 -%define CONFIG_XSUB_DECODER 0 -%define CONFIG_AAC_AT_DECODER 0 -%define CONFIG_AC3_AT_DECODER 0 -%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -%define CONFIG_ALAC_AT_DECODER 0 -%define CONFIG_AMR_NB_AT_DECODER 0 -%define CONFIG_EAC3_AT_DECODER 0 -%define CONFIG_GSM_MS_AT_DECODER 0 -%define CONFIG_ILBC_AT_DECODER 0 -%define CONFIG_MP1_AT_DECODER 0 -%define CONFIG_MP2_AT_DECODER 0 -%define CONFIG_MP3_AT_DECODER 0 -%define CONFIG_PCM_ALAW_AT_DECODER 0 -%define CONFIG_PCM_MULAW_AT_DECODER 0 -%define CONFIG_QDMC_AT_DECODER 0 -%define CONFIG_QDM2_AT_DECODER 0 -%define CONFIG_LIBCELT_DECODER 0 -%define CONFIG_LIBFDK_AAC_DECODER 0 -%define CONFIG_LIBGSM_DECODER 0 -%define CONFIG_LIBGSM_MS_DECODER 0 -%define CONFIG_LIBILBC_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -%define CONFIG_LIBOPENJPEG_DECODER 0 -%define CONFIG_LIBOPUS_DECODER 0 -%define CONFIG_LIBSCHROEDINGER_DECODER 0 -%define CONFIG_LIBSPEEX_DECODER 0 -%define CONFIG_LIBVORBIS_DECODER 0 -%define CONFIG_LIBVPX_VP8_DECODER 0 -%define CONFIG_LIBVPX_VP9_DECODER 0 -%define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -%define CONFIG_BINTEXT_DECODER 0 -%define CONFIG_XBIN_DECODER 0 -%define CONFIG_IDF_DECODER 0 -%define CONFIG_LIBOPENH264_DECODER 0 -%define CONFIG_H263_CUVID_DECODER 0 -%define CONFIG_H264_CUVID_DECODER 0 -%define CONFIG_HEVC_CUVID_DECODER 0 -%define CONFIG_HEVC_MEDIACODEC_DECODER 0 -%define CONFIG_MJPEG_CUVID_DECODER 0 -%define CONFIG_MPEG1_CUVID_DECODER 0 -%define CONFIG_MPEG2_CUVID_DECODER 0 -%define CONFIG_MPEG4_CUVID_DECODER 0 -%define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -%define CONFIG_VC1_CUVID_DECODER 0 -%define CONFIG_VP8_CUVID_DECODER 0 -%define CONFIG_VP8_MEDIACODEC_DECODER 0 -%define CONFIG_VP9_CUVID_DECODER 0 -%define CONFIG_VP9_MEDIACODEC_DECODER 0 -%define CONFIG_AA_DEMUXER 0 -%define CONFIG_AAC_DEMUXER 0 -%define CONFIG_AC3_DEMUXER 0 -%define CONFIG_ACM_DEMUXER 0 -%define CONFIG_ACT_DEMUXER 0 -%define CONFIG_ADF_DEMUXER 0 -%define CONFIG_ADP_DEMUXER 0 -%define CONFIG_ADS_DEMUXER 0 -%define CONFIG_ADX_DEMUXER 0 -%define CONFIG_AEA_DEMUXER 0 -%define CONFIG_AFC_DEMUXER 0 -%define CONFIG_AIFF_DEMUXER 0 -%define CONFIG_AIX_DEMUXER 0 -%define CONFIG_AMR_DEMUXER 0 -%define CONFIG_ANM_DEMUXER 0 -%define CONFIG_APC_DEMUXER 0 -%define CONFIG_APE_DEMUXER 0 -%define CONFIG_APNG_DEMUXER 0 -%define CONFIG_AQTITLE_DEMUXER 0 -%define CONFIG_ASF_DEMUXER 0 -%define CONFIG_ASF_O_DEMUXER 0 -%define CONFIG_ASS_DEMUXER 0 -%define CONFIG_AST_DEMUXER 0 -%define CONFIG_AU_DEMUXER 0 -%define CONFIG_AVI_DEMUXER 0 -%define CONFIG_AVISYNTH_DEMUXER 0 -%define CONFIG_AVR_DEMUXER 0 -%define CONFIG_AVS_DEMUXER 0 -%define CONFIG_BETHSOFTVID_DEMUXER 0 -%define CONFIG_BFI_DEMUXER 0 -%define CONFIG_BINTEXT_DEMUXER 0 -%define CONFIG_BINK_DEMUXER 0 -%define CONFIG_BIT_DEMUXER 0 -%define CONFIG_BMV_DEMUXER 0 -%define CONFIG_BFSTM_DEMUXER 0 -%define CONFIG_BRSTM_DEMUXER 0 -%define CONFIG_BOA_DEMUXER 0 -%define CONFIG_C93_DEMUXER 0 -%define CONFIG_CAF_DEMUXER 0 -%define CONFIG_CAVSVIDEO_DEMUXER 0 -%define CONFIG_CDG_DEMUXER 0 -%define CONFIG_CDXL_DEMUXER 0 -%define CONFIG_CINE_DEMUXER 0 -%define CONFIG_CONCAT_DEMUXER 0 -%define CONFIG_DATA_DEMUXER 0 -%define CONFIG_DAUD_DEMUXER 0 -%define CONFIG_DCSTR_DEMUXER 0 -%define CONFIG_DFA_DEMUXER 0 -%define CONFIG_DIRAC_DEMUXER 0 -%define CONFIG_DNXHD_DEMUXER 0 -%define CONFIG_DSF_DEMUXER 0 -%define CONFIG_DSICIN_DEMUXER 0 -%define CONFIG_DSS_DEMUXER 0 -%define CONFIG_DTS_DEMUXER 0 -%define CONFIG_DTSHD_DEMUXER 0 -%define CONFIG_DV_DEMUXER 0 -%define CONFIG_DVBSUB_DEMUXER 0 -%define CONFIG_DVBTXT_DEMUXER 0 -%define CONFIG_DXA_DEMUXER 0 -%define CONFIG_EA_DEMUXER 0 -%define CONFIG_EA_CDATA_DEMUXER 0 -%define CONFIG_EAC3_DEMUXER 0 -%define CONFIG_EPAF_DEMUXER 0 -%define CONFIG_FFM_DEMUXER 0 -%define CONFIG_FFMETADATA_DEMUXER 0 -%define CONFIG_FILMSTRIP_DEMUXER 0 -%define CONFIG_FLAC_DEMUXER 0 -%define CONFIG_FLIC_DEMUXER 0 -%define CONFIG_FLV_DEMUXER 0 -%define CONFIG_LIVE_FLV_DEMUXER 0 -%define CONFIG_FOURXM_DEMUXER 0 -%define CONFIG_FRM_DEMUXER 0 -%define CONFIG_FSB_DEMUXER 0 -%define CONFIG_G722_DEMUXER 0 -%define CONFIG_G723_1_DEMUXER 0 -%define CONFIG_G729_DEMUXER 0 -%define CONFIG_GENH_DEMUXER 0 -%define CONFIG_GIF_DEMUXER 0 -%define CONFIG_GSM_DEMUXER 0 -%define CONFIG_GXF_DEMUXER 0 -%define CONFIG_H261_DEMUXER 0 -%define CONFIG_H263_DEMUXER 0 -%define CONFIG_H264_DEMUXER 0 -%define CONFIG_HEVC_DEMUXER 0 -%define CONFIG_HLS_DEMUXER 0 -%define CONFIG_HNM_DEMUXER 0 -%define CONFIG_ICO_DEMUXER 0 -%define CONFIG_IDCIN_DEMUXER 0 -%define CONFIG_IDF_DEMUXER 0 -%define CONFIG_IFF_DEMUXER 0 -%define CONFIG_ILBC_DEMUXER 0 -%define CONFIG_IMAGE2_DEMUXER 0 -%define CONFIG_IMAGE2PIPE_DEMUXER 0 -%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -%define CONFIG_INGENIENT_DEMUXER 0 -%define CONFIG_IPMOVIE_DEMUXER 0 -%define CONFIG_IRCAM_DEMUXER 0 -%define CONFIG_ISS_DEMUXER 0 -%define CONFIG_IV8_DEMUXER 0 -%define CONFIG_IVF_DEMUXER 0 -%define CONFIG_IVR_DEMUXER 0 -%define CONFIG_JACOSUB_DEMUXER 0 -%define CONFIG_JV_DEMUXER 0 -%define CONFIG_LMLM4_DEMUXER 0 -%define CONFIG_LOAS_DEMUXER 0 -%define CONFIG_LRC_DEMUXER 0 -%define CONFIG_LVF_DEMUXER 0 -%define CONFIG_LXF_DEMUXER 0 -%define CONFIG_M4V_DEMUXER 0 -%define CONFIG_MATROSKA_DEMUXER 0 -%define CONFIG_MGSTS_DEMUXER 0 -%define CONFIG_MICRODVD_DEMUXER 0 -%define CONFIG_MJPEG_DEMUXER 0 -%define CONFIG_MLP_DEMUXER 0 -%define CONFIG_MLV_DEMUXER 0 -%define CONFIG_MM_DEMUXER 0 -%define CONFIG_MMF_DEMUXER 0 -%define CONFIG_MOV_DEMUXER 0 -%define CONFIG_MP3_DEMUXER 0 -%define CONFIG_MPC_DEMUXER 0 -%define CONFIG_MPC8_DEMUXER 0 -%define CONFIG_MPEGPS_DEMUXER 0 -%define CONFIG_MPEGTS_DEMUXER 0 -%define CONFIG_MPEGTSRAW_DEMUXER 0 -%define CONFIG_MPEGVIDEO_DEMUXER 0 -%define CONFIG_MPJPEG_DEMUXER 0 -%define CONFIG_MPL2_DEMUXER 0 -%define CONFIG_MPSUB_DEMUXER 0 -%define CONFIG_MSF_DEMUXER 0 -%define CONFIG_MSNWC_TCP_DEMUXER 0 -%define CONFIG_MTAF_DEMUXER 0 -%define CONFIG_MTV_DEMUXER 0 -%define CONFIG_MUSX_DEMUXER 0 -%define CONFIG_MV_DEMUXER 0 -%define CONFIG_MVI_DEMUXER 0 -%define CONFIG_MXF_DEMUXER 0 -%define CONFIG_MXG_DEMUXER 0 -%define CONFIG_NC_DEMUXER 0 -%define CONFIG_NISTSPHERE_DEMUXER 0 -%define CONFIG_NSV_DEMUXER 0 -%define CONFIG_NUT_DEMUXER 0 -%define CONFIG_NUV_DEMUXER 0 -%define CONFIG_OGG_DEMUXER 0 -%define CONFIG_OMA_DEMUXER 0 -%define CONFIG_PAF_DEMUXER 0 -%define CONFIG_PCM_ALAW_DEMUXER 0 -%define CONFIG_PCM_MULAW_DEMUXER 0 -%define CONFIG_PCM_F64BE_DEMUXER 0 -%define CONFIG_PCM_F64LE_DEMUXER 0 -%define CONFIG_PCM_F32BE_DEMUXER 0 -%define CONFIG_PCM_F32LE_DEMUXER 0 -%define CONFIG_PCM_S32BE_DEMUXER 0 -%define CONFIG_PCM_S32LE_DEMUXER 0 -%define CONFIG_PCM_S24BE_DEMUXER 0 -%define CONFIG_PCM_S24LE_DEMUXER 0 -%define CONFIG_PCM_S16BE_DEMUXER 0 -%define CONFIG_PCM_S16LE_DEMUXER 0 -%define CONFIG_PCM_S8_DEMUXER 0 -%define CONFIG_PCM_U32BE_DEMUXER 0 -%define CONFIG_PCM_U32LE_DEMUXER 0 -%define CONFIG_PCM_U24BE_DEMUXER 0 -%define CONFIG_PCM_U24LE_DEMUXER 0 -%define CONFIG_PCM_U16BE_DEMUXER 0 -%define CONFIG_PCM_U16LE_DEMUXER 0 -%define CONFIG_PCM_U8_DEMUXER 0 -%define CONFIG_PJS_DEMUXER 0 -%define CONFIG_PMP_DEMUXER 0 -%define CONFIG_PVA_DEMUXER 0 -%define CONFIG_PVF_DEMUXER 0 -%define CONFIG_QCP_DEMUXER 0 -%define CONFIG_R3D_DEMUXER 0 -%define CONFIG_RAWVIDEO_DEMUXER 0 -%define CONFIG_REALTEXT_DEMUXER 0 -%define CONFIG_REDSPARK_DEMUXER 0 -%define CONFIG_RL2_DEMUXER 0 -%define CONFIG_RM_DEMUXER 0 -%define CONFIG_ROQ_DEMUXER 0 -%define CONFIG_RPL_DEMUXER 0 -%define CONFIG_RSD_DEMUXER 0 -%define CONFIG_RSO_DEMUXER 0 -%define CONFIG_RTP_DEMUXER 0 -%define CONFIG_RTSP_DEMUXER 0 -%define CONFIG_SAMI_DEMUXER 0 -%define CONFIG_SAP_DEMUXER 0 -%define CONFIG_SBG_DEMUXER 0 -%define CONFIG_SDP_DEMUXER 0 -%define CONFIG_SDR2_DEMUXER 0 -%define CONFIG_SEGAFILM_DEMUXER 0 -%define CONFIG_SHORTEN_DEMUXER 0 -%define CONFIG_SIFF_DEMUXER 0 -%define CONFIG_SLN_DEMUXER 0 -%define CONFIG_SMACKER_DEMUXER 0 -%define CONFIG_SMJPEG_DEMUXER 0 -%define CONFIG_SMUSH_DEMUXER 0 -%define CONFIG_SOL_DEMUXER 0 -%define CONFIG_SOX_DEMUXER 0 -%define CONFIG_SPDIF_DEMUXER 0 -%define CONFIG_SRT_DEMUXER 0 -%define CONFIG_STR_DEMUXER 0 -%define CONFIG_STL_DEMUXER 0 -%define CONFIG_SUBVIEWER1_DEMUXER 0 -%define CONFIG_SUBVIEWER_DEMUXER 0 -%define CONFIG_SUP_DEMUXER 0 -%define CONFIG_SVAG_DEMUXER 0 -%define CONFIG_SWF_DEMUXER 0 -%define CONFIG_TAK_DEMUXER 0 -%define CONFIG_TEDCAPTIONS_DEMUXER 0 -%define CONFIG_THP_DEMUXER 0 -%define CONFIG_THREEDOSTR_DEMUXER 0 -%define CONFIG_TIERTEXSEQ_DEMUXER 0 -%define CONFIG_TMV_DEMUXER 0 -%define CONFIG_TRUEHD_DEMUXER 0 -%define CONFIG_TTA_DEMUXER 0 -%define CONFIG_TXD_DEMUXER 0 -%define CONFIG_TTY_DEMUXER 0 -%define CONFIG_V210_DEMUXER 0 -%define CONFIG_V210X_DEMUXER 0 -%define CONFIG_VAG_DEMUXER 0 -%define CONFIG_VC1_DEMUXER 0 -%define CONFIG_VC1T_DEMUXER 0 -%define CONFIG_VIVO_DEMUXER 0 -%define CONFIG_VMD_DEMUXER 0 -%define CONFIG_VOBSUB_DEMUXER 0 -%define CONFIG_VOC_DEMUXER 0 -%define CONFIG_VPK_DEMUXER 0 -%define CONFIG_VPLAYER_DEMUXER 0 -%define CONFIG_VQF_DEMUXER 0 -%define CONFIG_W64_DEMUXER 0 -%define CONFIG_WAV_DEMUXER 0 -%define CONFIG_WC3_DEMUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -%define CONFIG_WEBVTT_DEMUXER 0 -%define CONFIG_WSAUD_DEMUXER 0 -%define CONFIG_WSD_DEMUXER 0 -%define CONFIG_WSVQA_DEMUXER 0 -%define CONFIG_WTV_DEMUXER 0 -%define CONFIG_WVE_DEMUXER 0 -%define CONFIG_WV_DEMUXER 0 -%define CONFIG_XA_DEMUXER 0 -%define CONFIG_XBIN_DEMUXER 0 -%define CONFIG_XMV_DEMUXER 0 -%define CONFIG_XVAG_DEMUXER 0 -%define CONFIG_XWMA_DEMUXER 0 -%define CONFIG_YOP_DEMUXER 0 -%define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -%define CONFIG_LIBGME_DEMUXER 0 -%define CONFIG_LIBMODPLUG_DEMUXER 0 -%define CONFIG_LIBNUT_DEMUXER 0 -%define CONFIG_LIBOPENMPT_DEMUXER 0 -%define CONFIG_A64MULTI_ENCODER 0 -%define CONFIG_A64MULTI5_ENCODER 0 -%define CONFIG_ALIAS_PIX_ENCODER 0 -%define CONFIG_AMV_ENCODER 0 -%define CONFIG_APNG_ENCODER 0 -%define CONFIG_ASV1_ENCODER 0 -%define CONFIG_ASV2_ENCODER 0 -%define CONFIG_AVRP_ENCODER 0 -%define CONFIG_AVUI_ENCODER 0 -%define CONFIG_AYUV_ENCODER 0 -%define CONFIG_BMP_ENCODER 0 -%define CONFIG_CINEPAK_ENCODER 0 -%define CONFIG_CLJR_ENCODER 0 -%define CONFIG_COMFORTNOISE_ENCODER 0 -%define CONFIG_DNXHD_ENCODER 0 -%define CONFIG_DPX_ENCODER 0 -%define CONFIG_DVVIDEO_ENCODER 0 -%define CONFIG_FFV1_ENCODER 0 -%define CONFIG_FFVHUFF_ENCODER 0 -%define CONFIG_FLASHSV_ENCODER 0 -%define CONFIG_FLASHSV2_ENCODER 0 -%define CONFIG_FLV_ENCODER 0 -%define CONFIG_GIF_ENCODER 0 -%define CONFIG_H261_ENCODER 0 -%define CONFIG_H263_ENCODER 0 -%define CONFIG_H263P_ENCODER 0 -%define CONFIG_HAP_ENCODER 0 -%define CONFIG_HUFFYUV_ENCODER 0 -%define CONFIG_JPEG2000_ENCODER 0 -%define CONFIG_JPEGLS_ENCODER 0 -%define CONFIG_LJPEG_ENCODER 0 -%define CONFIG_MJPEG_ENCODER 0 -%define CONFIG_MPEG1VIDEO_ENCODER 0 -%define CONFIG_MPEG2VIDEO_ENCODER 0 -%define CONFIG_MPEG4_ENCODER 0 -%define CONFIG_MSMPEG4V2_ENCODER 0 -%define CONFIG_MSMPEG4V3_ENCODER 0 -%define CONFIG_MSVIDEO1_ENCODER 0 -%define CONFIG_PAM_ENCODER 0 -%define CONFIG_PBM_ENCODER 0 -%define CONFIG_PCX_ENCODER 0 -%define CONFIG_PGM_ENCODER 0 -%define CONFIG_PGMYUV_ENCODER 0 -%define CONFIG_PNG_ENCODER 0 -%define CONFIG_PPM_ENCODER 0 -%define CONFIG_PRORES_ENCODER 0 -%define CONFIG_PRORES_AW_ENCODER 0 -%define CONFIG_PRORES_KS_ENCODER 0 -%define CONFIG_QTRLE_ENCODER 0 -%define CONFIG_R10K_ENCODER 0 -%define CONFIG_R210_ENCODER 0 -%define CONFIG_RAWVIDEO_ENCODER 0 -%define CONFIG_ROQ_ENCODER 0 -%define CONFIG_RV10_ENCODER 0 -%define CONFIG_RV20_ENCODER 0 -%define CONFIG_S302M_ENCODER 0 -%define CONFIG_SGI_ENCODER 0 -%define CONFIG_SNOW_ENCODER 0 -%define CONFIG_SUNRAST_ENCODER 0 -%define CONFIG_SVQ1_ENCODER 0 -%define CONFIG_TARGA_ENCODER 0 -%define CONFIG_TIFF_ENCODER 0 -%define CONFIG_UTVIDEO_ENCODER 0 -%define CONFIG_V210_ENCODER 0 -%define CONFIG_V308_ENCODER 0 -%define CONFIG_V408_ENCODER 0 -%define CONFIG_V410_ENCODER 0 -%define CONFIG_VC2_ENCODER 0 -%define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -%define CONFIG_WMV1_ENCODER 0 -%define CONFIG_WMV2_ENCODER 0 -%define CONFIG_XBM_ENCODER 0 -%define CONFIG_XFACE_ENCODER 0 -%define CONFIG_XWD_ENCODER 0 -%define CONFIG_Y41P_ENCODER 0 -%define CONFIG_YUV4_ENCODER 0 -%define CONFIG_ZLIB_ENCODER 0 -%define CONFIG_ZMBV_ENCODER 0 -%define CONFIG_AAC_ENCODER 0 -%define CONFIG_AC3_ENCODER 0 -%define CONFIG_AC3_FIXED_ENCODER 0 -%define CONFIG_ALAC_ENCODER 0 -%define CONFIG_DCA_ENCODER 0 -%define CONFIG_EAC3_ENCODER 0 -%define CONFIG_FLAC_ENCODER 0 -%define CONFIG_G723_1_ENCODER 0 -%define CONFIG_MLP_ENCODER 0 -%define CONFIG_MP2_ENCODER 0 -%define CONFIG_MP2FIXED_ENCODER 0 -%define CONFIG_NELLYMOSER_ENCODER 0 -%define CONFIG_RA_144_ENCODER 0 -%define CONFIG_SONIC_ENCODER 0 -%define CONFIG_SONIC_LS_ENCODER 0 -%define CONFIG_TRUEHD_ENCODER 0 -%define CONFIG_TTA_ENCODER 0 -%define CONFIG_VORBIS_ENCODER 0 -%define CONFIG_WAVPACK_ENCODER 0 -%define CONFIG_WMAV1_ENCODER 0 -%define CONFIG_WMAV2_ENCODER 0 -%define CONFIG_PCM_ALAW_ENCODER 0 -%define CONFIG_PCM_F32BE_ENCODER 0 -%define CONFIG_PCM_F32LE_ENCODER 0 -%define CONFIG_PCM_F64BE_ENCODER 0 -%define CONFIG_PCM_F64LE_ENCODER 0 -%define CONFIG_PCM_MULAW_ENCODER 0 -%define CONFIG_PCM_S8_ENCODER 0 -%define CONFIG_PCM_S8_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16BE_ENCODER 0 -%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S16LE_ENCODER 0 -%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S24BE_ENCODER 0 -%define CONFIG_PCM_S24DAUD_ENCODER 0 -%define CONFIG_PCM_S24LE_ENCODER 0 -%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S32BE_ENCODER 0 -%define CONFIG_PCM_S32LE_ENCODER 0 -%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -%define CONFIG_PCM_S64BE_ENCODER 0 -%define CONFIG_PCM_S64LE_ENCODER 0 -%define CONFIG_PCM_U8_ENCODER 0 -%define CONFIG_PCM_U16BE_ENCODER 0 -%define CONFIG_PCM_U16LE_ENCODER 0 -%define CONFIG_PCM_U24BE_ENCODER 0 -%define CONFIG_PCM_U24LE_ENCODER 0 -%define CONFIG_PCM_U32BE_ENCODER 0 -%define CONFIG_PCM_U32LE_ENCODER 0 -%define CONFIG_ROQ_DPCM_ENCODER 0 -%define CONFIG_ADPCM_ADX_ENCODER 0 -%define CONFIG_ADPCM_G722_ENCODER 0 -%define CONFIG_ADPCM_G726_ENCODER 0 -%define CONFIG_ADPCM_IMA_QT_ENCODER 0 -%define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -%define CONFIG_ADPCM_MS_ENCODER 0 -%define CONFIG_ADPCM_SWF_ENCODER 0 -%define CONFIG_ADPCM_YAMAHA_ENCODER 0 -%define CONFIG_SSA_ENCODER 0 -%define CONFIG_ASS_ENCODER 0 -%define CONFIG_DVBSUB_ENCODER 0 -%define CONFIG_DVDSUB_ENCODER 0 -%define CONFIG_MOVTEXT_ENCODER 0 -%define CONFIG_SRT_ENCODER 0 -%define CONFIG_SUBRIP_ENCODER 0 -%define CONFIG_TEXT_ENCODER 0 -%define CONFIG_WEBVTT_ENCODER 0 -%define CONFIG_XSUB_ENCODER 0 -%define CONFIG_AAC_AT_ENCODER 0 -%define CONFIG_ALAC_AT_ENCODER 0 -%define CONFIG_ILBC_AT_ENCODER 0 -%define CONFIG_PCM_ALAW_AT_ENCODER 0 -%define CONFIG_PCM_MULAW_AT_ENCODER 0 -%define CONFIG_LIBFDK_AAC_ENCODER 0 -%define CONFIG_LIBGSM_ENCODER 0 -%define CONFIG_LIBGSM_MS_ENCODER 0 -%define CONFIG_LIBILBC_ENCODER 0 -%define CONFIG_LIBMP3LAME_ENCODER 0 -%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -%define CONFIG_LIBOPENJPEG_ENCODER 0 -%define CONFIG_LIBOPUS_ENCODER 0 -%define CONFIG_LIBSCHROEDINGER_ENCODER 0 -%define CONFIG_LIBSHINE_ENCODER 0 -%define CONFIG_LIBSPEEX_ENCODER 0 -%define CONFIG_LIBTHEORA_ENCODER 0 -%define CONFIG_LIBTWOLAME_ENCODER 0 -%define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -%define CONFIG_LIBVORBIS_ENCODER 0 -%define CONFIG_LIBVPX_VP8_ENCODER 0 -%define CONFIG_LIBVPX_VP9_ENCODER 0 -%define CONFIG_LIBWAVPACK_ENCODER 0 -%define CONFIG_LIBWEBP_ANIM_ENCODER 0 -%define CONFIG_LIBWEBP_ENCODER 0 -%define CONFIG_LIBX262_ENCODER 0 -%define CONFIG_LIBX264_ENCODER 0 -%define CONFIG_LIBX264RGB_ENCODER 0 -%define CONFIG_LIBX265_ENCODER 0 -%define CONFIG_LIBXAVS_ENCODER 0 -%define CONFIG_LIBXVID_ENCODER 0 -%define CONFIG_LIBOPENH264_ENCODER 0 -%define CONFIG_H264_NVENC_ENCODER 0 -%define CONFIG_H264_OMX_ENCODER 0 -%define CONFIG_H264_QSV_ENCODER 0 -%define CONFIG_H264_VAAPI_ENCODER 0 -%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -%define CONFIG_NVENC_ENCODER 0 -%define CONFIG_NVENC_H264_ENCODER 0 -%define CONFIG_NVENC_HEVC_ENCODER 0 -%define CONFIG_HEVC_NVENC_ENCODER 0 -%define CONFIG_HEVC_QSV_ENCODER 0 -%define CONFIG_HEVC_VAAPI_ENCODER 0 -%define CONFIG_LIBKVAZAAR_ENCODER 0 -%define CONFIG_MJPEG_VAAPI_ENCODER 0 -%define CONFIG_MPEG2_QSV_ENCODER 0 -%define CONFIG_ABENCH_FILTER 0 -%define CONFIG_ACOMPRESSOR_FILTER 0 -%define CONFIG_ACROSSFADE_FILTER 0 -%define CONFIG_ACRUSHER_FILTER 0 -%define CONFIG_ADELAY_FILTER 0 -%define CONFIG_AECHO_FILTER 0 -%define CONFIG_AEMPHASIS_FILTER 0 -%define CONFIG_AEVAL_FILTER 0 -%define CONFIG_AFADE_FILTER 0 -%define CONFIG_AFFTFILT_FILTER 0 -%define CONFIG_AFORMAT_FILTER 0 -%define CONFIG_AGATE_FILTER 0 -%define CONFIG_AINTERLEAVE_FILTER 0 -%define CONFIG_ALIMITER_FILTER 0 -%define CONFIG_ALLPASS_FILTER 0 -%define CONFIG_ALOOP_FILTER 0 -%define CONFIG_AMERGE_FILTER 0 -%define CONFIG_AMETADATA_FILTER 0 -%define CONFIG_AMIX_FILTER 0 -%define CONFIG_ANEQUALIZER_FILTER 0 -%define CONFIG_ANULL_FILTER 0 -%define CONFIG_APAD_FILTER 0 -%define CONFIG_APERMS_FILTER 0 -%define CONFIG_APHASER_FILTER 0 -%define CONFIG_APULSATOR_FILTER 0 -%define CONFIG_AREALTIME_FILTER 0 -%define CONFIG_ARESAMPLE_FILTER 0 -%define CONFIG_AREVERSE_FILTER 0 -%define CONFIG_ASELECT_FILTER 0 -%define CONFIG_ASENDCMD_FILTER 0 -%define CONFIG_ASETNSAMPLES_FILTER 0 -%define CONFIG_ASETPTS_FILTER 0 -%define CONFIG_ASETRATE_FILTER 0 -%define CONFIG_ASETTB_FILTER 0 -%define CONFIG_ASHOWINFO_FILTER 0 -%define CONFIG_ASIDEDATA_FILTER 0 -%define CONFIG_ASPLIT_FILTER 0 -%define CONFIG_ASTATS_FILTER 0 -%define CONFIG_ASTREAMSELECT_FILTER 0 -%define CONFIG_ASYNCTS_FILTER 0 -%define CONFIG_ATEMPO_FILTER 0 -%define CONFIG_ATRIM_FILTER 0 -%define CONFIG_AZMQ_FILTER 0 -%define CONFIG_BANDPASS_FILTER 0 -%define CONFIG_BANDREJECT_FILTER 0 -%define CONFIG_BASS_FILTER 0 -%define CONFIG_BIQUAD_FILTER 0 -%define CONFIG_BS2B_FILTER 0 -%define CONFIG_CHANNELMAP_FILTER 0 -%define CONFIG_CHANNELSPLIT_FILTER 0 -%define CONFIG_CHORUS_FILTER 0 -%define CONFIG_COMPAND_FILTER 0 -%define CONFIG_COMPENSATIONDELAY_FILTER 0 -%define CONFIG_CRYSTALIZER_FILTER 0 -%define CONFIG_DCSHIFT_FILTER 0 -%define CONFIG_DYNAUDNORM_FILTER 0 -%define CONFIG_EARWAX_FILTER 0 -%define CONFIG_EBUR128_FILTER 0 -%define CONFIG_EQUALIZER_FILTER 0 -%define CONFIG_EXTRASTEREO_FILTER 0 -%define CONFIG_FIREQUALIZER_FILTER 0 -%define CONFIG_FLANGER_FILTER 0 -%define CONFIG_HDCD_FILTER 0 -%define CONFIG_HIGHPASS_FILTER 0 -%define CONFIG_JOIN_FILTER 0 -%define CONFIG_LADSPA_FILTER 0 -%define CONFIG_LOUDNORM_FILTER 0 -%define CONFIG_LOWPASS_FILTER 0 -%define CONFIG_PAN_FILTER 0 -%define CONFIG_REPLAYGAIN_FILTER 0 -%define CONFIG_RESAMPLE_FILTER 0 -%define CONFIG_RUBBERBAND_FILTER 0 -%define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -%define CONFIG_SIDECHAINGATE_FILTER 0 -%define CONFIG_SILENCEDETECT_FILTER 0 -%define CONFIG_SILENCEREMOVE_FILTER 0 -%define CONFIG_SOFALIZER_FILTER 0 -%define CONFIG_STEREOTOOLS_FILTER 0 -%define CONFIG_STEREOWIDEN_FILTER 0 -%define CONFIG_TREBLE_FILTER 0 -%define CONFIG_TREMOLO_FILTER 0 -%define CONFIG_VIBRATO_FILTER 0 -%define CONFIG_VOLUME_FILTER 0 -%define CONFIG_VOLUMEDETECT_FILTER 0 -%define CONFIG_AEVALSRC_FILTER 0 -%define CONFIG_ANOISESRC_FILTER 0 -%define CONFIG_ANULLSRC_FILTER 0 -%define CONFIG_FLITE_FILTER 0 -%define CONFIG_SINE_FILTER 0 -%define CONFIG_ANULLSINK_FILTER 0 -%define CONFIG_ALPHAEXTRACT_FILTER 0 -%define CONFIG_ALPHAMERGE_FILTER 0 -%define CONFIG_ASS_FILTER 0 -%define CONFIG_ATADENOISE_FILTER 0 -%define CONFIG_AVGBLUR_FILTER 0 -%define CONFIG_BBOX_FILTER 0 -%define CONFIG_BENCH_FILTER 0 -%define CONFIG_BITPLANENOISE_FILTER 0 -%define CONFIG_BLACKDETECT_FILTER 0 -%define CONFIG_BLACKFRAME_FILTER 0 -%define CONFIG_BLEND_FILTER 0 -%define CONFIG_BOXBLUR_FILTER 0 -%define CONFIG_BWDIF_FILTER 0 -%define CONFIG_CHROMAKEY_FILTER 0 -%define CONFIG_CIESCOPE_FILTER 0 -%define CONFIG_CODECVIEW_FILTER 0 -%define CONFIG_COLORBALANCE_FILTER 0 -%define CONFIG_COLORCHANNELMIXER_FILTER 0 -%define CONFIG_COLORKEY_FILTER 0 -%define CONFIG_COLORLEVELS_FILTER 0 -%define CONFIG_COLORMATRIX_FILTER 0 -%define CONFIG_COLORSPACE_FILTER 0 -%define CONFIG_CONVOLUTION_FILTER 0 -%define CONFIG_COPY_FILTER 0 -%define CONFIG_COREIMAGE_FILTER 0 -%define CONFIG_COVER_RECT_FILTER 0 -%define CONFIG_CROP_FILTER 0 -%define CONFIG_CROPDETECT_FILTER 0 -%define CONFIG_CURVES_FILTER 0 -%define CONFIG_DATASCOPE_FILTER 0 -%define CONFIG_DCTDNOIZ_FILTER 0 -%define CONFIG_DEBAND_FILTER 0 -%define CONFIG_DECIMATE_FILTER 0 -%define CONFIG_DEFLATE_FILTER 0 -%define CONFIG_DEJUDDER_FILTER 0 -%define CONFIG_DELOGO_FILTER 0 -%define CONFIG_DESHAKE_FILTER 0 -%define CONFIG_DETELECINE_FILTER 0 -%define CONFIG_DILATION_FILTER 0 -%define CONFIG_DISPLACE_FILTER 0 -%define CONFIG_DRAWBOX_FILTER 0 -%define CONFIG_DRAWGRAPH_FILTER 0 -%define CONFIG_DRAWGRID_FILTER 0 -%define CONFIG_DRAWTEXT_FILTER 0 -%define CONFIG_EDGEDETECT_FILTER 0 -%define CONFIG_ELBG_FILTER 0 -%define CONFIG_EQ_FILTER 0 -%define CONFIG_EROSION_FILTER 0 -%define CONFIG_EXTRACTPLANES_FILTER 0 -%define CONFIG_FADE_FILTER 0 -%define CONFIG_FFTFILT_FILTER 0 -%define CONFIG_FIELD_FILTER 0 -%define CONFIG_FIELDHINT_FILTER 0 -%define CONFIG_FIELDMATCH_FILTER 0 -%define CONFIG_FIELDORDER_FILTER 0 -%define CONFIG_FIND_RECT_FILTER 0 -%define CONFIG_FORMAT_FILTER 0 -%define CONFIG_FPS_FILTER 0 -%define CONFIG_FRAMEPACK_FILTER 0 -%define CONFIG_FRAMERATE_FILTER 0 -%define CONFIG_FRAMESTEP_FILTER 0 -%define CONFIG_FREI0R_FILTER 0 -%define CONFIG_FSPP_FILTER 0 -%define CONFIG_GBLUR_FILTER 0 -%define CONFIG_GEQ_FILTER 0 -%define CONFIG_GRADFUN_FILTER 0 -%define CONFIG_HALDCLUT_FILTER 0 -%define CONFIG_HFLIP_FILTER 0 -%define CONFIG_HISTEQ_FILTER 0 -%define CONFIG_HISTOGRAM_FILTER 0 -%define CONFIG_HQDN3D_FILTER 0 -%define CONFIG_HQX_FILTER 0 -%define CONFIG_HSTACK_FILTER 0 -%define CONFIG_HUE_FILTER 0 -%define CONFIG_HWDOWNLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_FILTER 0 -%define CONFIG_HWUPLOAD_CUDA_FILTER 0 -%define CONFIG_HYSTERESIS_FILTER 0 -%define CONFIG_IDET_FILTER 0 -%define CONFIG_IL_FILTER 0 -%define CONFIG_INFLATE_FILTER 0 -%define CONFIG_INTERLACE_FILTER 0 -%define CONFIG_INTERLEAVE_FILTER 0 -%define CONFIG_KERNDEINT_FILTER 0 -%define CONFIG_LENSCORRECTION_FILTER 0 -%define CONFIG_LOOP_FILTER 0 -%define CONFIG_LUT_FILTER 0 -%define CONFIG_LUT2_FILTER 0 -%define CONFIG_LUT3D_FILTER 0 -%define CONFIG_LUTRGB_FILTER 0 -%define CONFIG_LUTYUV_FILTER 0 -%define CONFIG_MASKEDCLAMP_FILTER 0 -%define CONFIG_MASKEDMERGE_FILTER 0 -%define CONFIG_MCDEINT_FILTER 0 -%define CONFIG_MERGEPLANES_FILTER 0 -%define CONFIG_MESTIMATE_FILTER 0 -%define CONFIG_METADATA_FILTER 0 -%define CONFIG_MINTERPOLATE_FILTER 0 -%define CONFIG_MPDECIMATE_FILTER 0 -%define CONFIG_NEGATE_FILTER 0 -%define CONFIG_NLMEANS_FILTER 0 -%define CONFIG_NNEDI_FILTER 0 -%define CONFIG_NOFORMAT_FILTER 0 -%define CONFIG_NOISE_FILTER 0 -%define CONFIG_NULL_FILTER 0 -%define CONFIG_OCR_FILTER 0 -%define CONFIG_OCV_FILTER 0 -%define CONFIG_OVERLAY_FILTER 0 -%define CONFIG_OWDENOISE_FILTER 0 -%define CONFIG_PAD_FILTER 0 -%define CONFIG_PALETTEGEN_FILTER 0 -%define CONFIG_PALETTEUSE_FILTER 0 -%define CONFIG_PERMS_FILTER 0 -%define CONFIG_PERSPECTIVE_FILTER 0 -%define CONFIG_PHASE_FILTER 0 -%define CONFIG_PIXDESCTEST_FILTER 0 -%define CONFIG_PP_FILTER 0 -%define CONFIG_PP7_FILTER 0 -%define CONFIG_PREWITT_FILTER 0 -%define CONFIG_PSNR_FILTER 0 -%define CONFIG_PULLUP_FILTER 0 -%define CONFIG_QP_FILTER 0 -%define CONFIG_RANDOM_FILTER 0 -%define CONFIG_READVITC_FILTER 0 -%define CONFIG_REALTIME_FILTER 0 -%define CONFIG_REMAP_FILTER 0 -%define CONFIG_REMOVEGRAIN_FILTER 0 -%define CONFIG_REMOVELOGO_FILTER 0 -%define CONFIG_REPEATFIELDS_FILTER 0 -%define CONFIG_REVERSE_FILTER 0 -%define CONFIG_ROTATE_FILTER 0 -%define CONFIG_SAB_FILTER 0 -%define CONFIG_SCALE_FILTER 0 -%define CONFIG_SCALE_NPP_FILTER 0 -%define CONFIG_SCALE_VAAPI_FILTER 0 -%define CONFIG_SCALE2REF_FILTER 0 -%define CONFIG_SELECT_FILTER 0 -%define CONFIG_SELECTIVECOLOR_FILTER 0 -%define CONFIG_SENDCMD_FILTER 0 -%define CONFIG_SEPARATEFIELDS_FILTER 0 -%define CONFIG_SETDAR_FILTER 0 -%define CONFIG_SETFIELD_FILTER 0 -%define CONFIG_SETPTS_FILTER 0 -%define CONFIG_SETSAR_FILTER 0 -%define CONFIG_SETTB_FILTER 0 -%define CONFIG_SHOWINFO_FILTER 0 -%define CONFIG_SHOWPALETTE_FILTER 0 -%define CONFIG_SHUFFLEFRAMES_FILTER 0 -%define CONFIG_SHUFFLEPLANES_FILTER 0 -%define CONFIG_SIDEDATA_FILTER 0 -%define CONFIG_SIGNALSTATS_FILTER 0 -%define CONFIG_SMARTBLUR_FILTER 0 -%define CONFIG_SOBEL_FILTER 0 -%define CONFIG_SPLIT_FILTER 0 -%define CONFIG_SPP_FILTER 0 -%define CONFIG_SSIM_FILTER 0 -%define CONFIG_STEREO3D_FILTER 0 -%define CONFIG_STREAMSELECT_FILTER 0 -%define CONFIG_SUBTITLES_FILTER 0 -%define CONFIG_SUPER2XSAI_FILTER 0 -%define CONFIG_SWAPRECT_FILTER 0 -%define CONFIG_SWAPUV_FILTER 0 -%define CONFIG_TBLEND_FILTER 0 -%define CONFIG_TELECINE_FILTER 0 -%define CONFIG_THUMBNAIL_FILTER 0 -%define CONFIG_TILE_FILTER 0 -%define CONFIG_TINTERLACE_FILTER 0 -%define CONFIG_TRANSPOSE_FILTER 0 -%define CONFIG_TRIM_FILTER 0 -%define CONFIG_UNSHARP_FILTER 0 -%define CONFIG_USPP_FILTER 0 -%define CONFIG_VAGUEDENOISER_FILTER 0 -%define CONFIG_VECTORSCOPE_FILTER 0 -%define CONFIG_VFLIP_FILTER 0 -%define CONFIG_VIDSTABDETECT_FILTER 0 -%define CONFIG_VIDSTABTRANSFORM_FILTER 0 -%define CONFIG_VIGNETTE_FILTER 0 -%define CONFIG_VSTACK_FILTER 0 -%define CONFIG_W3FDIF_FILTER 0 -%define CONFIG_WAVEFORM_FILTER 0 -%define CONFIG_WEAVE_FILTER 0 -%define CONFIG_XBR_FILTER 0 -%define CONFIG_YADIF_FILTER 0 -%define CONFIG_ZMQ_FILTER 0 -%define CONFIG_ZOOMPAN_FILTER 0 -%define CONFIG_ZSCALE_FILTER 0 -%define CONFIG_ALLRGB_FILTER 0 -%define CONFIG_ALLYUV_FILTER 0 -%define CONFIG_CELLAUTO_FILTER 0 -%define CONFIG_COLOR_FILTER 0 -%define CONFIG_COREIMAGESRC_FILTER 0 -%define CONFIG_FREI0R_SRC_FILTER 0 -%define CONFIG_HALDCLUTSRC_FILTER 0 -%define CONFIG_LIFE_FILTER 0 -%define CONFIG_MANDELBROT_FILTER 0 -%define CONFIG_MPTESTSRC_FILTER 0 -%define CONFIG_NULLSRC_FILTER 0 -%define CONFIG_RGBTESTSRC_FILTER 0 -%define CONFIG_SMPTEBARS_FILTER 0 -%define CONFIG_SMPTEHDBARS_FILTER 0 -%define CONFIG_TESTSRC_FILTER 0 -%define CONFIG_TESTSRC2_FILTER 0 -%define CONFIG_YUVTESTSRC_FILTER 0 -%define CONFIG_NULLSINK_FILTER 0 -%define CONFIG_ADRAWGRAPH_FILTER 0 -%define CONFIG_AHISTOGRAM_FILTER 0 -%define CONFIG_APHASEMETER_FILTER 0 -%define CONFIG_AVECTORSCOPE_FILTER 0 -%define CONFIG_CONCAT_FILTER 0 -%define CONFIG_SHOWCQT_FILTER 0 -%define CONFIG_SHOWFREQS_FILTER 0 -%define CONFIG_SHOWSPECTRUM_FILTER 0 -%define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -%define CONFIG_SHOWVOLUME_FILTER 0 -%define CONFIG_SHOWWAVES_FILTER 0 -%define CONFIG_SHOWWAVESPIC_FILTER 0 -%define CONFIG_SPECTRUMSYNTH_FILTER 0 -%define CONFIG_AMOVIE_FILTER 0 -%define CONFIG_MOVIE_FILTER 0 -%define CONFIG_H263_CUVID_HWACCEL 0 -%define CONFIG_H263_VAAPI_HWACCEL 0 -%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_H264_CUVID_HWACCEL 0 -%define CONFIG_H264_D3D11VA_HWACCEL 0 -%define CONFIG_H264_DXVA2_HWACCEL 0 -%define CONFIG_H264_MEDIACODEC_HWACCEL 0 -%define CONFIG_H264_MMAL_HWACCEL 0 -%define CONFIG_H264_QSV_HWACCEL 0 -%define CONFIG_H264_VAAPI_HWACCEL 0 -%define CONFIG_H264_VDA_HWACCEL 0 -%define CONFIG_H264_VDA_OLD_HWACCEL 0 -%define CONFIG_H264_VDPAU_HWACCEL 0 -%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_HEVC_CUVID_HWACCEL 0 -%define CONFIG_HEVC_D3D11VA_HWACCEL 0 -%define CONFIG_HEVC_DXVA2_HWACCEL 0 -%define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -%define CONFIG_HEVC_QSV_HWACCEL 0 -%define CONFIG_HEVC_VAAPI_HWACCEL 0 -%define CONFIG_HEVC_VDPAU_HWACCEL 0 -%define CONFIG_MJPEG_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_CUVID_HWACCEL 0 -%define CONFIG_MPEG1_XVMC_HWACCEL 0 -%define CONFIG_MPEG1_VDPAU_HWACCEL 0 -%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG2_CUVID_HWACCEL 0 -%define CONFIG_MPEG2_XVMC_HWACCEL 0 -%define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -%define CONFIG_MPEG2_DXVA2_HWACCEL 0 -%define CONFIG_MPEG2_MMAL_HWACCEL 0 -%define CONFIG_MPEG2_QSV_HWACCEL 0 -%define CONFIG_MPEG2_VAAPI_HWACCEL 0 -%define CONFIG_MPEG2_VDPAU_HWACCEL 0 -%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_MPEG4_CUVID_HWACCEL 0 -%define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -%define CONFIG_MPEG4_MMAL_HWACCEL 0 -%define CONFIG_MPEG4_VAAPI_HWACCEL 0 -%define CONFIG_MPEG4_VDPAU_HWACCEL 0 -%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -%define CONFIG_VC1_CUVID_HWACCEL 0 -%define CONFIG_VC1_D3D11VA_HWACCEL 0 -%define CONFIG_VC1_DXVA2_HWACCEL 0 -%define CONFIG_VC1_VAAPI_HWACCEL 0 -%define CONFIG_VC1_VDPAU_HWACCEL 0 -%define CONFIG_VC1_MMAL_HWACCEL 0 -%define CONFIG_VC1_QSV_HWACCEL 0 -%define CONFIG_VP8_CUVID_HWACCEL 0 -%define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_CUVID_HWACCEL 0 -%define CONFIG_VP9_D3D11VA_HWACCEL 0 -%define CONFIG_VP9_DXVA2_HWACCEL 0 -%define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -%define CONFIG_VP9_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_D3D11VA_HWACCEL 0 -%define CONFIG_WMV3_DXVA2_HWACCEL 0 -%define CONFIG_WMV3_VAAPI_HWACCEL 0 -%define CONFIG_WMV3_VDPAU_HWACCEL 0 -%define CONFIG_ALSA_INDEV 0 -%define CONFIG_AVFOUNDATION_INDEV 0 -%define CONFIG_BKTR_INDEV 0 -%define CONFIG_DECKLINK_INDEV 0 -%define CONFIG_DSHOW_INDEV 0 -%define CONFIG_DV1394_INDEV 0 -%define CONFIG_FBDEV_INDEV 0 -%define CONFIG_GDIGRAB_INDEV 0 -%define CONFIG_IEC61883_INDEV 0 -%define CONFIG_JACK_INDEV 0 -%define CONFIG_LAVFI_INDEV 0 -%define CONFIG_OPENAL_INDEV 0 -%define CONFIG_OSS_INDEV 0 -%define CONFIG_PULSE_INDEV 0 -%define CONFIG_QTKIT_INDEV 0 -%define CONFIG_SNDIO_INDEV 0 -%define CONFIG_V4L2_INDEV 0 -%define CONFIG_VFWCAP_INDEV 0 -%define CONFIG_X11GRAB_INDEV 0 -%define CONFIG_X11GRAB_XCB_INDEV 0 -%define CONFIG_LIBCDIO_INDEV 0 -%define CONFIG_LIBDC1394_INDEV 0 -%define CONFIG_A64_MUXER 0 -%define CONFIG_AC3_MUXER 0 -%define CONFIG_ADTS_MUXER 0 -%define CONFIG_ADX_MUXER 0 -%define CONFIG_AIFF_MUXER 0 -%define CONFIG_AMR_MUXER 0 -%define CONFIG_APNG_MUXER 0 -%define CONFIG_ASF_MUXER 0 -%define CONFIG_ASS_MUXER 0 -%define CONFIG_AST_MUXER 0 -%define CONFIG_ASF_STREAM_MUXER 0 -%define CONFIG_AU_MUXER 0 -%define CONFIG_AVI_MUXER 0 -%define CONFIG_AVM2_MUXER 0 -%define CONFIG_BIT_MUXER 0 -%define CONFIG_CAF_MUXER 0 -%define CONFIG_CAVSVIDEO_MUXER 0 -%define CONFIG_CRC_MUXER 0 -%define CONFIG_DASH_MUXER 0 -%define CONFIG_DATA_MUXER 0 -%define CONFIG_DAUD_MUXER 0 -%define CONFIG_DIRAC_MUXER 0 -%define CONFIG_DNXHD_MUXER 0 -%define CONFIG_DTS_MUXER 0 -%define CONFIG_DV_MUXER 0 -%define CONFIG_EAC3_MUXER 0 -%define CONFIG_F4V_MUXER 0 -%define CONFIG_FFM_MUXER 0 -%define CONFIG_FFMETADATA_MUXER 0 -%define CONFIG_FIFO_MUXER 0 -%define CONFIG_FILMSTRIP_MUXER 0 -%define CONFIG_FLAC_MUXER 0 -%define CONFIG_FLV_MUXER 0 -%define CONFIG_FRAMECRC_MUXER 0 -%define CONFIG_FRAMEHASH_MUXER 0 -%define CONFIG_FRAMEMD5_MUXER 0 -%define CONFIG_G722_MUXER 0 -%define CONFIG_G723_1_MUXER 0 -%define CONFIG_GIF_MUXER 0 -%define CONFIG_GSM_MUXER 0 -%define CONFIG_GXF_MUXER 0 -%define CONFIG_H261_MUXER 0 -%define CONFIG_H263_MUXER 0 -%define CONFIG_H264_MUXER 0 -%define CONFIG_HASH_MUXER 0 -%define CONFIG_HDS_MUXER 0 -%define CONFIG_HEVC_MUXER 0 -%define CONFIG_HLS_MUXER 0 -%define CONFIG_ICO_MUXER 0 -%define CONFIG_ILBC_MUXER 0 -%define CONFIG_IMAGE2_MUXER 0 -%define CONFIG_IMAGE2PIPE_MUXER 0 -%define CONFIG_IPOD_MUXER 0 -%define CONFIG_IRCAM_MUXER 0 -%define CONFIG_ISMV_MUXER 0 -%define CONFIG_IVF_MUXER 0 -%define CONFIG_JACOSUB_MUXER 0 -%define CONFIG_LATM_MUXER 0 -%define CONFIG_LRC_MUXER 0 -%define CONFIG_M4V_MUXER 0 -%define CONFIG_MD5_MUXER 0 -%define CONFIG_MATROSKA_MUXER 0 -%define CONFIG_MATROSKA_AUDIO_MUXER 0 -%define CONFIG_MICRODVD_MUXER 0 -%define CONFIG_MJPEG_MUXER 0 -%define CONFIG_MLP_MUXER 0 -%define CONFIG_MMF_MUXER 0 -%define CONFIG_MOV_MUXER 0 -%define CONFIG_MP2_MUXER 0 -%define CONFIG_MP3_MUXER 0 -%define CONFIG_MP4_MUXER 0 -%define CONFIG_MPEG1SYSTEM_MUXER 0 -%define CONFIG_MPEG1VCD_MUXER 0 -%define CONFIG_MPEG1VIDEO_MUXER 0 -%define CONFIG_MPEG2DVD_MUXER 0 -%define CONFIG_MPEG2SVCD_MUXER 0 -%define CONFIG_MPEG2VIDEO_MUXER 0 -%define CONFIG_MPEG2VOB_MUXER 0 -%define CONFIG_MPEGTS_MUXER 0 -%define CONFIG_MPJPEG_MUXER 0 -%define CONFIG_MXF_MUXER 0 -%define CONFIG_MXF_D10_MUXER 0 -%define CONFIG_MXF_OPATOM_MUXER 0 -%define CONFIG_NULL_MUXER 0 -%define CONFIG_NUT_MUXER 0 -%define CONFIG_OGA_MUXER 0 -%define CONFIG_OGG_MUXER 0 -%define CONFIG_OGV_MUXER 0 -%define CONFIG_OMA_MUXER 0 -%define CONFIG_OPUS_MUXER 0 -%define CONFIG_PCM_ALAW_MUXER 0 -%define CONFIG_PCM_MULAW_MUXER 0 -%define CONFIG_PCM_F64BE_MUXER 0 -%define CONFIG_PCM_F64LE_MUXER 0 -%define CONFIG_PCM_F32BE_MUXER 0 -%define CONFIG_PCM_F32LE_MUXER 0 -%define CONFIG_PCM_S32BE_MUXER 0 -%define CONFIG_PCM_S32LE_MUXER 0 -%define CONFIG_PCM_S24BE_MUXER 0 -%define CONFIG_PCM_S24LE_MUXER 0 -%define CONFIG_PCM_S16BE_MUXER 0 -%define CONFIG_PCM_S16LE_MUXER 0 -%define CONFIG_PCM_S8_MUXER 0 -%define CONFIG_PCM_U32BE_MUXER 0 -%define CONFIG_PCM_U32LE_MUXER 0 -%define CONFIG_PCM_U24BE_MUXER 0 -%define CONFIG_PCM_U24LE_MUXER 0 -%define CONFIG_PCM_U16BE_MUXER 0 -%define CONFIG_PCM_U16LE_MUXER 0 -%define CONFIG_PCM_U8_MUXER 0 -%define CONFIG_PSP_MUXER 0 -%define CONFIG_RAWVIDEO_MUXER 0 -%define CONFIG_RM_MUXER 0 -%define CONFIG_ROQ_MUXER 0 -%define CONFIG_RSO_MUXER 0 -%define CONFIG_RTP_MUXER 0 -%define CONFIG_RTP_MPEGTS_MUXER 0 -%define CONFIG_RTSP_MUXER 0 -%define CONFIG_SAP_MUXER 0 -%define CONFIG_SEGMENT_MUXER 0 -%define CONFIG_STREAM_SEGMENT_MUXER 0 -%define CONFIG_SINGLEJPEG_MUXER 0 -%define CONFIG_SMJPEG_MUXER 0 -%define CONFIG_SMOOTHSTREAMING_MUXER 0 -%define CONFIG_SOX_MUXER 0 -%define CONFIG_SPX_MUXER 0 -%define CONFIG_SPDIF_MUXER 0 -%define CONFIG_SRT_MUXER 0 -%define CONFIG_SWF_MUXER 0 -%define CONFIG_TEE_MUXER 0 -%define CONFIG_TG2_MUXER 0 -%define CONFIG_TGP_MUXER 0 -%define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -%define CONFIG_TRUEHD_MUXER 0 -%define CONFIG_TTA_MUXER 0 -%define CONFIG_UNCODEDFRAMECRC_MUXER 0 -%define CONFIG_VC1_MUXER 0 -%define CONFIG_VC1T_MUXER 0 -%define CONFIG_VOC_MUXER 0 -%define CONFIG_W64_MUXER 0 -%define CONFIG_WAV_MUXER 0 -%define CONFIG_WEBM_MUXER 0 -%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -%define CONFIG_WEBM_CHUNK_MUXER 0 -%define CONFIG_WEBP_MUXER 0 -%define CONFIG_WEBVTT_MUXER 0 -%define CONFIG_WTV_MUXER 0 -%define CONFIG_WV_MUXER 0 -%define CONFIG_YUV4MPEGPIPE_MUXER 0 -%define CONFIG_CHROMAPRINT_MUXER 0 -%define CONFIG_LIBNUT_MUXER 0 -%define CONFIG_ALSA_OUTDEV 0 -%define CONFIG_CACA_OUTDEV 0 -%define CONFIG_DECKLINK_OUTDEV 0 -%define CONFIG_FBDEV_OUTDEV 0 -%define CONFIG_OPENGL_OUTDEV 0 -%define CONFIG_OSS_OUTDEV 0 -%define CONFIG_PULSE_OUTDEV 0 -%define CONFIG_SDL2_OUTDEV 0 -%define CONFIG_SNDIO_OUTDEV 0 -%define CONFIG_V4L2_OUTDEV 0 -%define CONFIG_XV_OUTDEV 0 -%define CONFIG_AAC_PARSER 0 -%define CONFIG_AAC_LATM_PARSER 0 -%define CONFIG_AC3_PARSER 0 -%define CONFIG_ADX_PARSER 0 -%define CONFIG_BMP_PARSER 0 -%define CONFIG_CAVSVIDEO_PARSER 0 -%define CONFIG_COOK_PARSER 0 -%define CONFIG_DCA_PARSER 0 -%define CONFIG_DIRAC_PARSER 0 -%define CONFIG_DNXHD_PARSER 0 -%define CONFIG_DPX_PARSER 0 -%define CONFIG_DVAUDIO_PARSER 0 -%define CONFIG_DVBSUB_PARSER 0 -%define CONFIG_DVDSUB_PARSER 0 -%define CONFIG_DVD_NAV_PARSER 0 %define CONFIG_FLAC_PARSER 1 -%define CONFIG_G729_PARSER 0 -%define CONFIG_GSM_PARSER 0 -%define CONFIG_H261_PARSER 0 -%define CONFIG_H263_PARSER 0 -%define CONFIG_H264_PARSER 0 -%define CONFIG_HEVC_PARSER 0 -%define CONFIG_MJPEG_PARSER 0 -%define CONFIG_MLP_PARSER 0 -%define CONFIG_MPEG4VIDEO_PARSER 0 -%define CONFIG_MPEGAUDIO_PARSER 0 -%define CONFIG_MPEGVIDEO_PARSER 0 -%define CONFIG_OPUS_PARSER 0 -%define CONFIG_PNG_PARSER 0 -%define CONFIG_PNM_PARSER 0 -%define CONFIG_RV30_PARSER 0 -%define CONFIG_RV40_PARSER 0 -%define CONFIG_TAK_PARSER 0 -%define CONFIG_VC1_PARSER 0 -%define CONFIG_VORBIS_PARSER 0 -%define CONFIG_VP3_PARSER 0 %define CONFIG_VP8_PARSER 1 %define CONFIG_VP9_PARSER 1 -%define CONFIG_ASYNC_PROTOCOL 0 -%define CONFIG_BLURAY_PROTOCOL 0 -%define CONFIG_CACHE_PROTOCOL 0 -%define CONFIG_CONCAT_PROTOCOL 0 -%define CONFIG_CRYPTO_PROTOCOL 0 -%define CONFIG_DATA_PROTOCOL 0 -%define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -%define CONFIG_FFRTMPHTTP_PROTOCOL 0 -%define CONFIG_FILE_PROTOCOL 0 -%define CONFIG_FTP_PROTOCOL 0 -%define CONFIG_GOPHER_PROTOCOL 0 -%define CONFIG_HLS_PROTOCOL 0 -%define CONFIG_HTTP_PROTOCOL 0 -%define CONFIG_HTTPPROXY_PROTOCOL 0 -%define CONFIG_HTTPS_PROTOCOL 0 -%define CONFIG_ICECAST_PROTOCOL 0 -%define CONFIG_MMSH_PROTOCOL 0 -%define CONFIG_MMST_PROTOCOL 0 -%define CONFIG_MD5_PROTOCOL 0 -%define CONFIG_PIPE_PROTOCOL 0 -%define CONFIG_RTMP_PROTOCOL 0 -%define CONFIG_RTMPE_PROTOCOL 0 -%define CONFIG_RTMPS_PROTOCOL 0 -%define CONFIG_RTMPT_PROTOCOL 0 -%define CONFIG_RTMPTE_PROTOCOL 0 -%define CONFIG_RTMPTS_PROTOCOL 0 -%define CONFIG_RTP_PROTOCOL 0 -%define CONFIG_SCTP_PROTOCOL 0 -%define CONFIG_SRTP_PROTOCOL 0 -%define CONFIG_SUBFILE_PROTOCOL 0 -%define CONFIG_TEE_PROTOCOL 0 -%define CONFIG_TCP_PROTOCOL 0 -%define CONFIG_TLS_GNUTLS_PROTOCOL 0 -%define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -%define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -%define CONFIG_TLS_OPENSSL_PROTOCOL 0 -%define CONFIG_UDP_PROTOCOL 0 -%define CONFIG_UDPLITE_PROTOCOL 0 -%define CONFIG_UNIX_PROTOCOL 0 -%define CONFIG_LIBRTMP_PROTOCOL 0 -%define CONFIG_LIBRTMPE_PROTOCOL 0 -%define CONFIG_LIBRTMPS_PROTOCOL 0 -%define CONFIG_LIBRTMPT_PROTOCOL 0 -%define CONFIG_LIBRTMPTE_PROTOCOL 0 -%define CONFIG_LIBSSH_PROTOCOL 0 -%define CONFIG_LIBSMBCLIENT_PROTOCOL 0 diff --git a/media/ffvpx/config_win64.h b/media/ffvpx/config_win64.h index 64d09d2265cc..a24f1c5232ae 100644 --- a/media/ffvpx/config_win64.h +++ b/media/ffvpx/config_win64.h @@ -384,15 +384,7 @@ #define HAVE_XLIB 0 #define CONFIG_BSFS 0 #define CONFIG_DECODERS 1 -#define CONFIG_ENCODERS 0 -#define CONFIG_HWACCELS 0 #define CONFIG_PARSERS 1 -#define CONFIG_INDEVS 0 -#define CONFIG_OUTDEVS 0 -#define CONFIG_FILTERS 0 -#define CONFIG_DEMUXERS 0 -#define CONFIG_MUXERS 0 -#define CONFIG_PROTOCOLS 0 #define CONFIG_DOC 0 #define CONFIG_HTMLPAGES 0 #define CONFIG_MANPAGES 1 @@ -514,7 +506,6 @@ #define CONFIG_VAAPI 0 #define CONFIG_VDA 0 #define CONFIG_VDPAU 0 -#define CONFIG_VIDEOTOOLBOX_HWACCEL 0 #define CONFIG_XVMC 0 #define CONFIG_FTRAPV 0 #define CONFIG_GRAY 0 @@ -579,7 +570,6 @@ #define CONFIG_FDCTDSP 0 #define CONFIG_FLACDSP 1 #define CONFIG_FMTCONVERT 0 -#define CONFIG_FRAME_THREAD_ENCODER 0 #define CONFIG_G722DSP 0 #define CONFIG_GOLOMB 1 #define CONFIG_GPLV3 0 @@ -655,1570 +645,10 @@ #define CONFIG_REMOVE_EXTRADATA_BSF 0 #define CONFIG_TEXT2MOVSUB_BSF 0 #define CONFIG_VP9_SUPERFRAME_BSF 0 -#define CONFIG_AASC_DECODER 0 -#define CONFIG_AIC_DECODER 0 -#define CONFIG_ALIAS_PIX_DECODER 0 -#define CONFIG_AMV_DECODER 0 -#define CONFIG_ANM_DECODER 0 -#define CONFIG_ANSI_DECODER 0 -#define CONFIG_APNG_DECODER 0 -#define CONFIG_ASV1_DECODER 0 -#define CONFIG_ASV2_DECODER 0 -#define CONFIG_AURA_DECODER 0 -#define CONFIG_AURA2_DECODER 0 -#define CONFIG_AVRP_DECODER 0 -#define CONFIG_AVRN_DECODER 0 -#define CONFIG_AVS_DECODER 0 -#define CONFIG_AVUI_DECODER 0 -#define CONFIG_AYUV_DECODER 0 -#define CONFIG_BETHSOFTVID_DECODER 0 -#define CONFIG_BFI_DECODER 0 -#define CONFIG_BINK_DECODER 0 -#define CONFIG_BMP_DECODER 0 -#define CONFIG_BMV_VIDEO_DECODER 0 -#define CONFIG_BRENDER_PIX_DECODER 0 -#define CONFIG_C93_DECODER 0 -#define CONFIG_CAVS_DECODER 0 -#define CONFIG_CDGRAPHICS_DECODER 0 -#define CONFIG_CDXL_DECODER 0 -#define CONFIG_CFHD_DECODER 0 -#define CONFIG_CINEPAK_DECODER 0 -#define CONFIG_CLJR_DECODER 0 -#define CONFIG_CLLC_DECODER 0 -#define CONFIG_COMFORTNOISE_DECODER 0 -#define CONFIG_CPIA_DECODER 0 -#define CONFIG_CSCD_DECODER 0 -#define CONFIG_CYUV_DECODER 0 -#define CONFIG_DDS_DECODER 0 -#define CONFIG_DFA_DECODER 0 -#define CONFIG_DIRAC_DECODER 0 -#define CONFIG_DNXHD_DECODER 0 -#define CONFIG_DPX_DECODER 0 -#define CONFIG_DSICINVIDEO_DECODER 0 -#define CONFIG_DVAUDIO_DECODER 0 -#define CONFIG_DVVIDEO_DECODER 0 -#define CONFIG_DXA_DECODER 0 -#define CONFIG_DXTORY_DECODER 0 -#define CONFIG_DXV_DECODER 0 -#define CONFIG_EACMV_DECODER 0 -#define CONFIG_EAMAD_DECODER 0 -#define CONFIG_EATGQ_DECODER 0 -#define CONFIG_EATGV_DECODER 0 -#define CONFIG_EATQI_DECODER 0 -#define CONFIG_EIGHTBPS_DECODER 0 -#define CONFIG_EIGHTSVX_EXP_DECODER 0 -#define CONFIG_EIGHTSVX_FIB_DECODER 0 -#define CONFIG_ESCAPE124_DECODER 0 -#define CONFIG_ESCAPE130_DECODER 0 -#define CONFIG_EXR_DECODER 0 -#define CONFIG_FFV1_DECODER 0 -#define CONFIG_FFVHUFF_DECODER 0 -#define CONFIG_FIC_DECODER 0 -#define CONFIG_FLASHSV_DECODER 0 -#define CONFIG_FLASHSV2_DECODER 0 -#define CONFIG_FLIC_DECODER 0 -#define CONFIG_FLV_DECODER 0 -#define CONFIG_FOURXM_DECODER 0 -#define CONFIG_FRAPS_DECODER 0 -#define CONFIG_FRWU_DECODER 0 -#define CONFIG_G2M_DECODER 0 -#define CONFIG_GIF_DECODER 0 -#define CONFIG_H261_DECODER 0 -#define CONFIG_H263_DECODER 0 -#define CONFIG_H263I_DECODER 0 -#define CONFIG_H263P_DECODER 0 -#define CONFIG_H264_DECODER 0 -#define CONFIG_H264_CRYSTALHD_DECODER 0 -#define CONFIG_H264_MEDIACODEC_DECODER 0 -#define CONFIG_H264_MMAL_DECODER 0 -#define CONFIG_H264_QSV_DECODER 0 -#define CONFIG_H264_VDA_DECODER 0 -#define CONFIG_H264_VDPAU_DECODER 0 -#define CONFIG_HAP_DECODER 0 -#define CONFIG_HEVC_DECODER 0 -#define CONFIG_HEVC_QSV_DECODER 0 -#define CONFIG_HNM4_VIDEO_DECODER 0 -#define CONFIG_HQ_HQA_DECODER 0 -#define CONFIG_HQX_DECODER 0 -#define CONFIG_HUFFYUV_DECODER 0 -#define CONFIG_IDCIN_DECODER 0 -#define CONFIG_IFF_ILBM_DECODER 0 -#define CONFIG_INDEO2_DECODER 0 -#define CONFIG_INDEO3_DECODER 0 -#define CONFIG_INDEO4_DECODER 0 -#define CONFIG_INDEO5_DECODER 0 -#define CONFIG_INTERPLAY_VIDEO_DECODER 0 -#define CONFIG_JPEG2000_DECODER 0 -#define CONFIG_JPEGLS_DECODER 0 -#define CONFIG_JV_DECODER 0 -#define CONFIG_KGV1_DECODER 0 -#define CONFIG_KMVC_DECODER 0 -#define CONFIG_LAGARITH_DECODER 0 -#define CONFIG_LOCO_DECODER 0 -#define CONFIG_M101_DECODER 0 -#define CONFIG_MAGICYUV_DECODER 0 -#define CONFIG_MDEC_DECODER 0 -#define CONFIG_MIMIC_DECODER 0 -#define CONFIG_MJPEG_DECODER 0 -#define CONFIG_MJPEGB_DECODER 0 -#define CONFIG_MMVIDEO_DECODER 0 -#define CONFIG_MOTIONPIXELS_DECODER 0 -#define CONFIG_MPEG_XVMC_DECODER 0 -#define CONFIG_MPEG1VIDEO_DECODER 0 -#define CONFIG_MPEG2VIDEO_DECODER 0 -#define CONFIG_MPEG4_DECODER 0 -#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG4_MMAL_DECODER 0 -#define CONFIG_MPEG4_VDPAU_DECODER 0 -#define CONFIG_MPEGVIDEO_DECODER 0 -#define CONFIG_MPEG_VDPAU_DECODER 0 -#define CONFIG_MPEG1_VDPAU_DECODER 0 -#define CONFIG_MPEG2_MMAL_DECODER 0 -#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 -#define CONFIG_MPEG2_QSV_DECODER 0 -#define CONFIG_MSA1_DECODER 0 -#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 -#define CONFIG_MSMPEG4V1_DECODER 0 -#define CONFIG_MSMPEG4V2_DECODER 0 -#define CONFIG_MSMPEG4V3_DECODER 0 -#define CONFIG_MSRLE_DECODER 0 -#define CONFIG_MSS1_DECODER 0 -#define CONFIG_MSS2_DECODER 0 -#define CONFIG_MSVIDEO1_DECODER 0 -#define CONFIG_MSZH_DECODER 0 -#define CONFIG_MTS2_DECODER 0 -#define CONFIG_MVC1_DECODER 0 -#define CONFIG_MVC2_DECODER 0 -#define CONFIG_MXPEG_DECODER 0 -#define CONFIG_NUV_DECODER 0 -#define CONFIG_PAF_VIDEO_DECODER 0 -#define CONFIG_PAM_DECODER 0 -#define CONFIG_PBM_DECODER 0 -#define CONFIG_PCX_DECODER 0 -#define CONFIG_PGM_DECODER 0 -#define CONFIG_PGMYUV_DECODER 0 -#define CONFIG_PICTOR_DECODER 0 -#define CONFIG_PNG_DECODER 0 -#define CONFIG_PPM_DECODER 0 -#define CONFIG_PRORES_DECODER 0 -#define CONFIG_PRORES_LGPL_DECODER 0 -#define CONFIG_PTX_DECODER 0 -#define CONFIG_QDRAW_DECODER 0 -#define CONFIG_QPEG_DECODER 0 -#define CONFIG_QTRLE_DECODER 0 -#define CONFIG_R10K_DECODER 0 -#define CONFIG_R210_DECODER 0 -#define CONFIG_RAWVIDEO_DECODER 0 -#define CONFIG_RL2_DECODER 0 -#define CONFIG_ROQ_DECODER 0 -#define CONFIG_RPZA_DECODER 0 -#define CONFIG_RSCC_DECODER 0 -#define CONFIG_RV10_DECODER 0 -#define CONFIG_RV20_DECODER 0 -#define CONFIG_RV30_DECODER 0 -#define CONFIG_RV40_DECODER 0 -#define CONFIG_S302M_DECODER 0 -#define CONFIG_SANM_DECODER 0 -#define CONFIG_SCREENPRESSO_DECODER 0 -#define CONFIG_SDX2_DPCM_DECODER 0 -#define CONFIG_SGI_DECODER 0 -#define CONFIG_SGIRLE_DECODER 0 -#define CONFIG_SHEERVIDEO_DECODER 0 -#define CONFIG_SMACKER_DECODER 0 -#define CONFIG_SMC_DECODER 0 -#define CONFIG_SMVJPEG_DECODER 0 -#define CONFIG_SNOW_DECODER 0 -#define CONFIG_SP5X_DECODER 0 -#define CONFIG_SUNRAST_DECODER 0 -#define CONFIG_SVQ1_DECODER 0 -#define CONFIG_SVQ3_DECODER 0 -#define CONFIG_TARGA_DECODER 0 -#define CONFIG_TARGA_Y216_DECODER 0 -#define CONFIG_TDSC_DECODER 0 -#define CONFIG_THEORA_DECODER 0 -#define CONFIG_THP_DECODER 0 -#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 -#define CONFIG_TIFF_DECODER 0 -#define CONFIG_TMV_DECODER 0 -#define CONFIG_TRUEMOTION1_DECODER 0 -#define CONFIG_TRUEMOTION2_DECODER 0 -#define CONFIG_TRUEMOTION2RT_DECODER 0 -#define CONFIG_TSCC_DECODER 0 -#define CONFIG_TSCC2_DECODER 0 -#define CONFIG_TXD_DECODER 0 -#define CONFIG_ULTI_DECODER 0 -#define CONFIG_UTVIDEO_DECODER 0 -#define CONFIG_V210_DECODER 0 -#define CONFIG_V210X_DECODER 0 -#define CONFIG_V308_DECODER 0 -#define CONFIG_V408_DECODER 0 -#define CONFIG_V410_DECODER 0 -#define CONFIG_VB_DECODER 0 -#define CONFIG_VBLE_DECODER 0 -#define CONFIG_VC1_DECODER 0 -#define CONFIG_VC1_CRYSTALHD_DECODER 0 -#define CONFIG_VC1_VDPAU_DECODER 0 -#define CONFIG_VC1IMAGE_DECODER 0 -#define CONFIG_VC1_MMAL_DECODER 0 -#define CONFIG_VC1_QSV_DECODER 0 -#define CONFIG_VCR1_DECODER 0 -#define CONFIG_VMDVIDEO_DECODER 0 -#define CONFIG_VMNC_DECODER 0 -#define CONFIG_VP3_DECODER 0 -#define CONFIG_VP5_DECODER 0 -#define CONFIG_VP6_DECODER 0 -#define CONFIG_VP6A_DECODER 0 -#define CONFIG_VP6F_DECODER 0 -#define CONFIG_VP7_DECODER 0 #define CONFIG_VP8_DECODER 1 #define CONFIG_VP9_DECODER 1 -#define CONFIG_VQA_DECODER 0 -#define CONFIG_WEBP_DECODER 0 -#define CONFIG_WMV1_DECODER 0 -#define CONFIG_WMV2_DECODER 0 -#define CONFIG_WMV3_DECODER 0 -#define CONFIG_WMV3_CRYSTALHD_DECODER 0 -#define CONFIG_WMV3_VDPAU_DECODER 0 -#define CONFIG_WMV3IMAGE_DECODER 0 -#define CONFIG_WNV1_DECODER 0 -#define CONFIG_XAN_WC3_DECODER 0 -#define CONFIG_XAN_WC4_DECODER 0 -#define CONFIG_XBM_DECODER 0 -#define CONFIG_XFACE_DECODER 0 -#define CONFIG_XL_DECODER 0 -#define CONFIG_XWD_DECODER 0 -#define CONFIG_Y41P_DECODER 0 -#define CONFIG_YLC_DECODER 0 -#define CONFIG_YOP_DECODER 0 -#define CONFIG_YUV4_DECODER 0 -#define CONFIG_ZERO12V_DECODER 0 -#define CONFIG_ZEROCODEC_DECODER 0 -#define CONFIG_ZLIB_DECODER 0 -#define CONFIG_ZMBV_DECODER 0 -#define CONFIG_AAC_DECODER 0 -#define CONFIG_AAC_FIXED_DECODER 0 -#define CONFIG_AAC_LATM_DECODER 0 -#define CONFIG_AC3_DECODER 0 -#define CONFIG_AC3_FIXED_DECODER 0 -#define CONFIG_ALAC_DECODER 0 -#define CONFIG_ALS_DECODER 0 -#define CONFIG_AMRNB_DECODER 0 -#define CONFIG_AMRWB_DECODER 0 -#define CONFIG_APE_DECODER 0 -#define CONFIG_ATRAC1_DECODER 0 -#define CONFIG_ATRAC3_DECODER 0 -#define CONFIG_ATRAC3P_DECODER 0 -#define CONFIG_BINKAUDIO_DCT_DECODER 0 -#define CONFIG_BINKAUDIO_RDFT_DECODER 0 -#define CONFIG_BMV_AUDIO_DECODER 0 -#define CONFIG_COOK_DECODER 0 -#define CONFIG_DCA_DECODER 0 -#define CONFIG_DSD_LSBF_DECODER 0 -#define CONFIG_DSD_MSBF_DECODER 0 -#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 -#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 -#define CONFIG_DSICINAUDIO_DECODER 0 -#define CONFIG_DSS_SP_DECODER 0 -#define CONFIG_DST_DECODER 0 -#define CONFIG_EAC3_DECODER 0 -#define CONFIG_EVRC_DECODER 0 -#define CONFIG_FFWAVESYNTH_DECODER 0 #define CONFIG_FLAC_DECODER 1 -#define CONFIG_G723_1_DECODER 0 -#define CONFIG_G729_DECODER 0 -#define CONFIG_GSM_DECODER 0 -#define CONFIG_GSM_MS_DECODER 0 -#define CONFIG_IAC_DECODER 0 -#define CONFIG_IMC_DECODER 0 -#define CONFIG_INTERPLAY_ACM_DECODER 0 -#define CONFIG_MACE3_DECODER 0 -#define CONFIG_MACE6_DECODER 0 -#define CONFIG_METASOUND_DECODER 0 -#define CONFIG_MLP_DECODER 0 -#define CONFIG_MP1_DECODER 0 -#define CONFIG_MP1FLOAT_DECODER 0 -#define CONFIG_MP2_DECODER 0 -#define CONFIG_MP2FLOAT_DECODER 0 -#define CONFIG_MP3_DECODER 0 -#define CONFIG_MP3FLOAT_DECODER 0 -#define CONFIG_MP3ADU_DECODER 0 -#define CONFIG_MP3ADUFLOAT_DECODER 0 -#define CONFIG_MP3ON4_DECODER 0 -#define CONFIG_MP3ON4FLOAT_DECODER 0 -#define CONFIG_MPC7_DECODER 0 -#define CONFIG_MPC8_DECODER 0 -#define CONFIG_NELLYMOSER_DECODER 0 -#define CONFIG_ON2AVC_DECODER 0 -#define CONFIG_OPUS_DECODER 0 -#define CONFIG_PAF_AUDIO_DECODER 0 -#define CONFIG_QCELP_DECODER 0 -#define CONFIG_QDM2_DECODER 0 -#define CONFIG_RA_144_DECODER 0 -#define CONFIG_RA_288_DECODER 0 -#define CONFIG_RALF_DECODER 0 -#define CONFIG_SHORTEN_DECODER 0 -#define CONFIG_SIPR_DECODER 0 -#define CONFIG_SMACKAUD_DECODER 0 -#define CONFIG_SONIC_DECODER 0 -#define CONFIG_TAK_DECODER 0 -#define CONFIG_TRUEHD_DECODER 0 -#define CONFIG_TRUESPEECH_DECODER 0 -#define CONFIG_TTA_DECODER 0 -#define CONFIG_TWINVQ_DECODER 0 -#define CONFIG_VMDAUDIO_DECODER 0 -#define CONFIG_VORBIS_DECODER 0 -#define CONFIG_WAVPACK_DECODER 0 -#define CONFIG_WMALOSSLESS_DECODER 0 -#define CONFIG_WMAPRO_DECODER 0 -#define CONFIG_WMAV1_DECODER 0 -#define CONFIG_WMAV2_DECODER 0 -#define CONFIG_WMAVOICE_DECODER 0 -#define CONFIG_WS_SND1_DECODER 0 -#define CONFIG_XMA1_DECODER 0 -#define CONFIG_XMA2_DECODER 0 -#define CONFIG_PCM_ALAW_DECODER 0 -#define CONFIG_PCM_BLURAY_DECODER 0 -#define CONFIG_PCM_DVD_DECODER 0 -#define CONFIG_PCM_F32BE_DECODER 0 -#define CONFIG_PCM_F32LE_DECODER 0 -#define CONFIG_PCM_F64BE_DECODER 0 -#define CONFIG_PCM_F64LE_DECODER 0 -#define CONFIG_PCM_LXF_DECODER 0 -#define CONFIG_PCM_MULAW_DECODER 0 -#define CONFIG_PCM_S8_DECODER 0 -#define CONFIG_PCM_S8_PLANAR_DECODER 0 -#define CONFIG_PCM_S16BE_DECODER 0 -#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 -#define CONFIG_PCM_S16LE_DECODER 0 -#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S24BE_DECODER 0 -#define CONFIG_PCM_S24DAUD_DECODER 0 -#define CONFIG_PCM_S24LE_DECODER 0 -#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S32BE_DECODER 0 -#define CONFIG_PCM_S32LE_DECODER 0 -#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 -#define CONFIG_PCM_S64BE_DECODER 0 -#define CONFIG_PCM_S64LE_DECODER 0 -#define CONFIG_PCM_U8_DECODER 0 -#define CONFIG_PCM_U16BE_DECODER 0 -#define CONFIG_PCM_U16LE_DECODER 0 -#define CONFIG_PCM_U24BE_DECODER 0 -#define CONFIG_PCM_U24LE_DECODER 0 -#define CONFIG_PCM_U32BE_DECODER 0 -#define CONFIG_PCM_U32LE_DECODER 0 -#define CONFIG_PCM_ZORK_DECODER 0 -#define CONFIG_INTERPLAY_DPCM_DECODER 0 -#define CONFIG_ROQ_DPCM_DECODER 0 -#define CONFIG_SOL_DPCM_DECODER 0 -#define CONFIG_XAN_DPCM_DECODER 0 -#define CONFIG_ADPCM_4XM_DECODER 0 -#define CONFIG_ADPCM_ADX_DECODER 0 -#define CONFIG_ADPCM_AFC_DECODER 0 -#define CONFIG_ADPCM_AICA_DECODER 0 -#define CONFIG_ADPCM_CT_DECODER 0 -#define CONFIG_ADPCM_DTK_DECODER 0 -#define CONFIG_ADPCM_EA_DECODER 0 -#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 -#define CONFIG_ADPCM_EA_R1_DECODER 0 -#define CONFIG_ADPCM_EA_R2_DECODER 0 -#define CONFIG_ADPCM_EA_R3_DECODER 0 -#define CONFIG_ADPCM_EA_XAS_DECODER 0 -#define CONFIG_ADPCM_G722_DECODER 0 -#define CONFIG_ADPCM_G726_DECODER 0 -#define CONFIG_ADPCM_G726LE_DECODER 0 -#define CONFIG_ADPCM_IMA_AMV_DECODER 0 -#define CONFIG_ADPCM_IMA_APC_DECODER 0 -#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 -#define CONFIG_ADPCM_IMA_DK3_DECODER 0 -#define CONFIG_ADPCM_IMA_DK4_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 -#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 -#define CONFIG_ADPCM_IMA_ISS_DECODER 0 -#define CONFIG_ADPCM_IMA_OKI_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_DECODER 0 -#define CONFIG_ADPCM_IMA_RAD_DECODER 0 -#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 -#define CONFIG_ADPCM_IMA_WAV_DECODER 0 -#define CONFIG_ADPCM_IMA_WS_DECODER 0 -#define CONFIG_ADPCM_MS_DECODER 0 -#define CONFIG_ADPCM_MTAF_DECODER 0 -#define CONFIG_ADPCM_PSX_DECODER 0 -#define CONFIG_ADPCM_SBPRO_2_DECODER 0 -#define CONFIG_ADPCM_SBPRO_3_DECODER 0 -#define CONFIG_ADPCM_SBPRO_4_DECODER 0 -#define CONFIG_ADPCM_SWF_DECODER 0 -#define CONFIG_ADPCM_THP_DECODER 0 -#define CONFIG_ADPCM_THP_LE_DECODER 0 -#define CONFIG_ADPCM_VIMA_DECODER 0 -#define CONFIG_ADPCM_XA_DECODER 0 -#define CONFIG_ADPCM_YAMAHA_DECODER 0 -#define CONFIG_SSA_DECODER 0 -#define CONFIG_ASS_DECODER 0 -#define CONFIG_CCAPTION_DECODER 0 -#define CONFIG_DVBSUB_DECODER 0 -#define CONFIG_DVDSUB_DECODER 0 -#define CONFIG_JACOSUB_DECODER 0 -#define CONFIG_MICRODVD_DECODER 0 -#define CONFIG_MOVTEXT_DECODER 0 -#define CONFIG_MPL2_DECODER 0 -#define CONFIG_PGSSUB_DECODER 0 -#define CONFIG_PJS_DECODER 0 -#define CONFIG_REALTEXT_DECODER 0 -#define CONFIG_SAMI_DECODER 0 -#define CONFIG_SRT_DECODER 0 -#define CONFIG_STL_DECODER 0 -#define CONFIG_SUBRIP_DECODER 0 -#define CONFIG_SUBVIEWER_DECODER 0 -#define CONFIG_SUBVIEWER1_DECODER 0 -#define CONFIG_TEXT_DECODER 0 -#define CONFIG_VPLAYER_DECODER 0 -#define CONFIG_WEBVTT_DECODER 0 -#define CONFIG_XSUB_DECODER 0 -#define CONFIG_AAC_AT_DECODER 0 -#define CONFIG_AC3_AT_DECODER 0 -#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 -#define CONFIG_ALAC_AT_DECODER 0 -#define CONFIG_AMR_NB_AT_DECODER 0 -#define CONFIG_EAC3_AT_DECODER 0 -#define CONFIG_GSM_MS_AT_DECODER 0 -#define CONFIG_ILBC_AT_DECODER 0 -#define CONFIG_MP1_AT_DECODER 0 -#define CONFIG_MP2_AT_DECODER 0 -#define CONFIG_MP3_AT_DECODER 0 -#define CONFIG_PCM_ALAW_AT_DECODER 0 -#define CONFIG_PCM_MULAW_AT_DECODER 0 -#define CONFIG_QDMC_AT_DECODER 0 -#define CONFIG_QDM2_AT_DECODER 0 -#define CONFIG_LIBCELT_DECODER 0 -#define CONFIG_LIBFDK_AAC_DECODER 0 -#define CONFIG_LIBGSM_DECODER 0 -#define CONFIG_LIBGSM_MS_DECODER 0 -#define CONFIG_LIBILBC_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 -#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 -#define CONFIG_LIBOPENJPEG_DECODER 0 -#define CONFIG_LIBOPUS_DECODER 0 -#define CONFIG_LIBSCHROEDINGER_DECODER 0 -#define CONFIG_LIBSPEEX_DECODER 0 -#define CONFIG_LIBVORBIS_DECODER 0 -#define CONFIG_LIBVPX_VP8_DECODER 0 -#define CONFIG_LIBVPX_VP9_DECODER 0 -#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 -#define CONFIG_BINTEXT_DECODER 0 -#define CONFIG_XBIN_DECODER 0 -#define CONFIG_IDF_DECODER 0 -#define CONFIG_LIBOPENH264_DECODER 0 -#define CONFIG_H263_CUVID_DECODER 0 -#define CONFIG_H264_CUVID_DECODER 0 -#define CONFIG_HEVC_CUVID_DECODER 0 -#define CONFIG_HEVC_MEDIACODEC_DECODER 0 -#define CONFIG_MJPEG_CUVID_DECODER 0 -#define CONFIG_MPEG1_CUVID_DECODER 0 -#define CONFIG_MPEG2_CUVID_DECODER 0 -#define CONFIG_MPEG4_CUVID_DECODER 0 -#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 -#define CONFIG_VC1_CUVID_DECODER 0 -#define CONFIG_VP8_CUVID_DECODER 0 -#define CONFIG_VP8_MEDIACODEC_DECODER 0 -#define CONFIG_VP9_CUVID_DECODER 0 -#define CONFIG_VP9_MEDIACODEC_DECODER 0 -#define CONFIG_AA_DEMUXER 0 -#define CONFIG_AAC_DEMUXER 0 -#define CONFIG_AC3_DEMUXER 0 -#define CONFIG_ACM_DEMUXER 0 -#define CONFIG_ACT_DEMUXER 0 -#define CONFIG_ADF_DEMUXER 0 -#define CONFIG_ADP_DEMUXER 0 -#define CONFIG_ADS_DEMUXER 0 -#define CONFIG_ADX_DEMUXER 0 -#define CONFIG_AEA_DEMUXER 0 -#define CONFIG_AFC_DEMUXER 0 -#define CONFIG_AIFF_DEMUXER 0 -#define CONFIG_AIX_DEMUXER 0 -#define CONFIG_AMR_DEMUXER 0 -#define CONFIG_ANM_DEMUXER 0 -#define CONFIG_APC_DEMUXER 0 -#define CONFIG_APE_DEMUXER 0 -#define CONFIG_APNG_DEMUXER 0 -#define CONFIG_AQTITLE_DEMUXER 0 -#define CONFIG_ASF_DEMUXER 0 -#define CONFIG_ASF_O_DEMUXER 0 -#define CONFIG_ASS_DEMUXER 0 -#define CONFIG_AST_DEMUXER 0 -#define CONFIG_AU_DEMUXER 0 -#define CONFIG_AVI_DEMUXER 0 -#define CONFIG_AVISYNTH_DEMUXER 0 -#define CONFIG_AVR_DEMUXER 0 -#define CONFIG_AVS_DEMUXER 0 -#define CONFIG_BETHSOFTVID_DEMUXER 0 -#define CONFIG_BFI_DEMUXER 0 -#define CONFIG_BINTEXT_DEMUXER 0 -#define CONFIG_BINK_DEMUXER 0 -#define CONFIG_BIT_DEMUXER 0 -#define CONFIG_BMV_DEMUXER 0 -#define CONFIG_BFSTM_DEMUXER 0 -#define CONFIG_BRSTM_DEMUXER 0 -#define CONFIG_BOA_DEMUXER 0 -#define CONFIG_C93_DEMUXER 0 -#define CONFIG_CAF_DEMUXER 0 -#define CONFIG_CAVSVIDEO_DEMUXER 0 -#define CONFIG_CDG_DEMUXER 0 -#define CONFIG_CDXL_DEMUXER 0 -#define CONFIG_CINE_DEMUXER 0 -#define CONFIG_CONCAT_DEMUXER 0 -#define CONFIG_DATA_DEMUXER 0 -#define CONFIG_DAUD_DEMUXER 0 -#define CONFIG_DCSTR_DEMUXER 0 -#define CONFIG_DFA_DEMUXER 0 -#define CONFIG_DIRAC_DEMUXER 0 -#define CONFIG_DNXHD_DEMUXER 0 -#define CONFIG_DSF_DEMUXER 0 -#define CONFIG_DSICIN_DEMUXER 0 -#define CONFIG_DSS_DEMUXER 0 -#define CONFIG_DTS_DEMUXER 0 -#define CONFIG_DTSHD_DEMUXER 0 -#define CONFIG_DV_DEMUXER 0 -#define CONFIG_DVBSUB_DEMUXER 0 -#define CONFIG_DVBTXT_DEMUXER 0 -#define CONFIG_DXA_DEMUXER 0 -#define CONFIG_EA_DEMUXER 0 -#define CONFIG_EA_CDATA_DEMUXER 0 -#define CONFIG_EAC3_DEMUXER 0 -#define CONFIG_EPAF_DEMUXER 0 -#define CONFIG_FFM_DEMUXER 0 -#define CONFIG_FFMETADATA_DEMUXER 0 -#define CONFIG_FILMSTRIP_DEMUXER 0 -#define CONFIG_FLAC_DEMUXER 0 -#define CONFIG_FLIC_DEMUXER 0 -#define CONFIG_FLV_DEMUXER 0 -#define CONFIG_LIVE_FLV_DEMUXER 0 -#define CONFIG_FOURXM_DEMUXER 0 -#define CONFIG_FRM_DEMUXER 0 -#define CONFIG_FSB_DEMUXER 0 -#define CONFIG_G722_DEMUXER 0 -#define CONFIG_G723_1_DEMUXER 0 -#define CONFIG_G729_DEMUXER 0 -#define CONFIG_GENH_DEMUXER 0 -#define CONFIG_GIF_DEMUXER 0 -#define CONFIG_GSM_DEMUXER 0 -#define CONFIG_GXF_DEMUXER 0 -#define CONFIG_H261_DEMUXER 0 -#define CONFIG_H263_DEMUXER 0 -#define CONFIG_H264_DEMUXER 0 -#define CONFIG_HEVC_DEMUXER 0 -#define CONFIG_HLS_DEMUXER 0 -#define CONFIG_HNM_DEMUXER 0 -#define CONFIG_ICO_DEMUXER 0 -#define CONFIG_IDCIN_DEMUXER 0 -#define CONFIG_IDF_DEMUXER 0 -#define CONFIG_IFF_DEMUXER 0 -#define CONFIG_ILBC_DEMUXER 0 -#define CONFIG_IMAGE2_DEMUXER 0 -#define CONFIG_IMAGE2PIPE_DEMUXER 0 -#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 -#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 -#define CONFIG_INGENIENT_DEMUXER 0 -#define CONFIG_IPMOVIE_DEMUXER 0 -#define CONFIG_IRCAM_DEMUXER 0 -#define CONFIG_ISS_DEMUXER 0 -#define CONFIG_IV8_DEMUXER 0 -#define CONFIG_IVF_DEMUXER 0 -#define CONFIG_IVR_DEMUXER 0 -#define CONFIG_JACOSUB_DEMUXER 0 -#define CONFIG_JV_DEMUXER 0 -#define CONFIG_LMLM4_DEMUXER 0 -#define CONFIG_LOAS_DEMUXER 0 -#define CONFIG_LRC_DEMUXER 0 -#define CONFIG_LVF_DEMUXER 0 -#define CONFIG_LXF_DEMUXER 0 -#define CONFIG_M4V_DEMUXER 0 -#define CONFIG_MATROSKA_DEMUXER 0 -#define CONFIG_MGSTS_DEMUXER 0 -#define CONFIG_MICRODVD_DEMUXER 0 -#define CONFIG_MJPEG_DEMUXER 0 -#define CONFIG_MLP_DEMUXER 0 -#define CONFIG_MLV_DEMUXER 0 -#define CONFIG_MM_DEMUXER 0 -#define CONFIG_MMF_DEMUXER 0 -#define CONFIG_MOV_DEMUXER 0 -#define CONFIG_MP3_DEMUXER 0 -#define CONFIG_MPC_DEMUXER 0 -#define CONFIG_MPC8_DEMUXER 0 -#define CONFIG_MPEGPS_DEMUXER 0 -#define CONFIG_MPEGTS_DEMUXER 0 -#define CONFIG_MPEGTSRAW_DEMUXER 0 -#define CONFIG_MPEGVIDEO_DEMUXER 0 -#define CONFIG_MPJPEG_DEMUXER 0 -#define CONFIG_MPL2_DEMUXER 0 -#define CONFIG_MPSUB_DEMUXER 0 -#define CONFIG_MSF_DEMUXER 0 -#define CONFIG_MSNWC_TCP_DEMUXER 0 -#define CONFIG_MTAF_DEMUXER 0 -#define CONFIG_MTV_DEMUXER 0 -#define CONFIG_MUSX_DEMUXER 0 -#define CONFIG_MV_DEMUXER 0 -#define CONFIG_MVI_DEMUXER 0 -#define CONFIG_MXF_DEMUXER 0 -#define CONFIG_MXG_DEMUXER 0 -#define CONFIG_NC_DEMUXER 0 -#define CONFIG_NISTSPHERE_DEMUXER 0 -#define CONFIG_NSV_DEMUXER 0 -#define CONFIG_NUT_DEMUXER 0 -#define CONFIG_NUV_DEMUXER 0 -#define CONFIG_OGG_DEMUXER 0 -#define CONFIG_OMA_DEMUXER 0 -#define CONFIG_PAF_DEMUXER 0 -#define CONFIG_PCM_ALAW_DEMUXER 0 -#define CONFIG_PCM_MULAW_DEMUXER 0 -#define CONFIG_PCM_F64BE_DEMUXER 0 -#define CONFIG_PCM_F64LE_DEMUXER 0 -#define CONFIG_PCM_F32BE_DEMUXER 0 -#define CONFIG_PCM_F32LE_DEMUXER 0 -#define CONFIG_PCM_S32BE_DEMUXER 0 -#define CONFIG_PCM_S32LE_DEMUXER 0 -#define CONFIG_PCM_S24BE_DEMUXER 0 -#define CONFIG_PCM_S24LE_DEMUXER 0 -#define CONFIG_PCM_S16BE_DEMUXER 0 -#define CONFIG_PCM_S16LE_DEMUXER 0 -#define CONFIG_PCM_S8_DEMUXER 0 -#define CONFIG_PCM_U32BE_DEMUXER 0 -#define CONFIG_PCM_U32LE_DEMUXER 0 -#define CONFIG_PCM_U24BE_DEMUXER 0 -#define CONFIG_PCM_U24LE_DEMUXER 0 -#define CONFIG_PCM_U16BE_DEMUXER 0 -#define CONFIG_PCM_U16LE_DEMUXER 0 -#define CONFIG_PCM_U8_DEMUXER 0 -#define CONFIG_PJS_DEMUXER 0 -#define CONFIG_PMP_DEMUXER 0 -#define CONFIG_PVA_DEMUXER 0 -#define CONFIG_PVF_DEMUXER 0 -#define CONFIG_QCP_DEMUXER 0 -#define CONFIG_R3D_DEMUXER 0 -#define CONFIG_RAWVIDEO_DEMUXER 0 -#define CONFIG_REALTEXT_DEMUXER 0 -#define CONFIG_REDSPARK_DEMUXER 0 -#define CONFIG_RL2_DEMUXER 0 -#define CONFIG_RM_DEMUXER 0 -#define CONFIG_ROQ_DEMUXER 0 -#define CONFIG_RPL_DEMUXER 0 -#define CONFIG_RSD_DEMUXER 0 -#define CONFIG_RSO_DEMUXER 0 -#define CONFIG_RTP_DEMUXER 0 -#define CONFIG_RTSP_DEMUXER 0 -#define CONFIG_SAMI_DEMUXER 0 -#define CONFIG_SAP_DEMUXER 0 -#define CONFIG_SBG_DEMUXER 0 -#define CONFIG_SDP_DEMUXER 0 -#define CONFIG_SDR2_DEMUXER 0 -#define CONFIG_SEGAFILM_DEMUXER 0 -#define CONFIG_SHORTEN_DEMUXER 0 -#define CONFIG_SIFF_DEMUXER 0 -#define CONFIG_SLN_DEMUXER 0 -#define CONFIG_SMACKER_DEMUXER 0 -#define CONFIG_SMJPEG_DEMUXER 0 -#define CONFIG_SMUSH_DEMUXER 0 -#define CONFIG_SOL_DEMUXER 0 -#define CONFIG_SOX_DEMUXER 0 -#define CONFIG_SPDIF_DEMUXER 0 -#define CONFIG_SRT_DEMUXER 0 -#define CONFIG_STR_DEMUXER 0 -#define CONFIG_STL_DEMUXER 0 -#define CONFIG_SUBVIEWER1_DEMUXER 0 -#define CONFIG_SUBVIEWER_DEMUXER 0 -#define CONFIG_SUP_DEMUXER 0 -#define CONFIG_SVAG_DEMUXER 0 -#define CONFIG_SWF_DEMUXER 0 -#define CONFIG_TAK_DEMUXER 0 -#define CONFIG_TEDCAPTIONS_DEMUXER 0 -#define CONFIG_THP_DEMUXER 0 -#define CONFIG_THREEDOSTR_DEMUXER 0 -#define CONFIG_TIERTEXSEQ_DEMUXER 0 -#define CONFIG_TMV_DEMUXER 0 -#define CONFIG_TRUEHD_DEMUXER 0 -#define CONFIG_TTA_DEMUXER 0 -#define CONFIG_TXD_DEMUXER 0 -#define CONFIG_TTY_DEMUXER 0 -#define CONFIG_V210_DEMUXER 0 -#define CONFIG_V210X_DEMUXER 0 -#define CONFIG_VAG_DEMUXER 0 -#define CONFIG_VC1_DEMUXER 0 -#define CONFIG_VC1T_DEMUXER 0 -#define CONFIG_VIVO_DEMUXER 0 -#define CONFIG_VMD_DEMUXER 0 -#define CONFIG_VOBSUB_DEMUXER 0 -#define CONFIG_VOC_DEMUXER 0 -#define CONFIG_VPK_DEMUXER 0 -#define CONFIG_VPLAYER_DEMUXER 0 -#define CONFIG_VQF_DEMUXER 0 -#define CONFIG_W64_DEMUXER 0 -#define CONFIG_WAV_DEMUXER 0 -#define CONFIG_WC3_DEMUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 -#define CONFIG_WEBVTT_DEMUXER 0 -#define CONFIG_WSAUD_DEMUXER 0 -#define CONFIG_WSD_DEMUXER 0 -#define CONFIG_WSVQA_DEMUXER 0 -#define CONFIG_WTV_DEMUXER 0 -#define CONFIG_WVE_DEMUXER 0 -#define CONFIG_WV_DEMUXER 0 -#define CONFIG_XA_DEMUXER 0 -#define CONFIG_XBIN_DEMUXER 0 -#define CONFIG_XMV_DEMUXER 0 -#define CONFIG_XVAG_DEMUXER 0 -#define CONFIG_XWMA_DEMUXER 0 -#define CONFIG_YOP_DEMUXER 0 -#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 -#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 -#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 -#define CONFIG_LIBGME_DEMUXER 0 -#define CONFIG_LIBMODPLUG_DEMUXER 0 -#define CONFIG_LIBNUT_DEMUXER 0 -#define CONFIG_LIBOPENMPT_DEMUXER 0 -#define CONFIG_A64MULTI_ENCODER 0 -#define CONFIG_A64MULTI5_ENCODER 0 -#define CONFIG_ALIAS_PIX_ENCODER 0 -#define CONFIG_AMV_ENCODER 0 -#define CONFIG_APNG_ENCODER 0 -#define CONFIG_ASV1_ENCODER 0 -#define CONFIG_ASV2_ENCODER 0 -#define CONFIG_AVRP_ENCODER 0 -#define CONFIG_AVUI_ENCODER 0 -#define CONFIG_AYUV_ENCODER 0 -#define CONFIG_BMP_ENCODER 0 -#define CONFIG_CINEPAK_ENCODER 0 -#define CONFIG_CLJR_ENCODER 0 -#define CONFIG_COMFORTNOISE_ENCODER 0 -#define CONFIG_DNXHD_ENCODER 0 -#define CONFIG_DPX_ENCODER 0 -#define CONFIG_DVVIDEO_ENCODER 0 -#define CONFIG_FFV1_ENCODER 0 -#define CONFIG_FFVHUFF_ENCODER 0 -#define CONFIG_FLASHSV_ENCODER 0 -#define CONFIG_FLASHSV2_ENCODER 0 -#define CONFIG_FLV_ENCODER 0 -#define CONFIG_GIF_ENCODER 0 -#define CONFIG_H261_ENCODER 0 -#define CONFIG_H263_ENCODER 0 -#define CONFIG_H263P_ENCODER 0 -#define CONFIG_HAP_ENCODER 0 -#define CONFIG_HUFFYUV_ENCODER 0 -#define CONFIG_JPEG2000_ENCODER 0 -#define CONFIG_JPEGLS_ENCODER 0 -#define CONFIG_LJPEG_ENCODER 0 -#define CONFIG_MJPEG_ENCODER 0 -#define CONFIG_MPEG1VIDEO_ENCODER 0 -#define CONFIG_MPEG2VIDEO_ENCODER 0 -#define CONFIG_MPEG4_ENCODER 0 -#define CONFIG_MSMPEG4V2_ENCODER 0 -#define CONFIG_MSMPEG4V3_ENCODER 0 -#define CONFIG_MSVIDEO1_ENCODER 0 -#define CONFIG_PAM_ENCODER 0 -#define CONFIG_PBM_ENCODER 0 -#define CONFIG_PCX_ENCODER 0 -#define CONFIG_PGM_ENCODER 0 -#define CONFIG_PGMYUV_ENCODER 0 -#define CONFIG_PNG_ENCODER 0 -#define CONFIG_PPM_ENCODER 0 -#define CONFIG_PRORES_ENCODER 0 -#define CONFIG_PRORES_AW_ENCODER 0 -#define CONFIG_PRORES_KS_ENCODER 0 -#define CONFIG_QTRLE_ENCODER 0 -#define CONFIG_R10K_ENCODER 0 -#define CONFIG_R210_ENCODER 0 -#define CONFIG_RAWVIDEO_ENCODER 0 -#define CONFIG_ROQ_ENCODER 0 -#define CONFIG_RV10_ENCODER 0 -#define CONFIG_RV20_ENCODER 0 -#define CONFIG_S302M_ENCODER 0 -#define CONFIG_SGI_ENCODER 0 -#define CONFIG_SNOW_ENCODER 0 -#define CONFIG_SUNRAST_ENCODER 0 -#define CONFIG_SVQ1_ENCODER 0 -#define CONFIG_TARGA_ENCODER 0 -#define CONFIG_TIFF_ENCODER 0 -#define CONFIG_UTVIDEO_ENCODER 0 -#define CONFIG_V210_ENCODER 0 -#define CONFIG_V308_ENCODER 0 -#define CONFIG_V408_ENCODER 0 -#define CONFIG_V410_ENCODER 0 -#define CONFIG_VC2_ENCODER 0 -#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 -#define CONFIG_WMV1_ENCODER 0 -#define CONFIG_WMV2_ENCODER 0 -#define CONFIG_XBM_ENCODER 0 -#define CONFIG_XFACE_ENCODER 0 -#define CONFIG_XWD_ENCODER 0 -#define CONFIG_Y41P_ENCODER 0 -#define CONFIG_YUV4_ENCODER 0 -#define CONFIG_ZLIB_ENCODER 0 -#define CONFIG_ZMBV_ENCODER 0 -#define CONFIG_AAC_ENCODER 0 -#define CONFIG_AC3_ENCODER 0 -#define CONFIG_AC3_FIXED_ENCODER 0 -#define CONFIG_ALAC_ENCODER 0 -#define CONFIG_DCA_ENCODER 0 -#define CONFIG_EAC3_ENCODER 0 -#define CONFIG_FLAC_ENCODER 0 -#define CONFIG_G723_1_ENCODER 0 -#define CONFIG_MLP_ENCODER 0 -#define CONFIG_MP2_ENCODER 0 -#define CONFIG_MP2FIXED_ENCODER 0 -#define CONFIG_NELLYMOSER_ENCODER 0 -#define CONFIG_RA_144_ENCODER 0 -#define CONFIG_SONIC_ENCODER 0 -#define CONFIG_SONIC_LS_ENCODER 0 -#define CONFIG_TRUEHD_ENCODER 0 -#define CONFIG_TTA_ENCODER 0 -#define CONFIG_VORBIS_ENCODER 0 -#define CONFIG_WAVPACK_ENCODER 0 -#define CONFIG_WMAV1_ENCODER 0 -#define CONFIG_WMAV2_ENCODER 0 -#define CONFIG_PCM_ALAW_ENCODER 0 -#define CONFIG_PCM_F32BE_ENCODER 0 -#define CONFIG_PCM_F32LE_ENCODER 0 -#define CONFIG_PCM_F64BE_ENCODER 0 -#define CONFIG_PCM_F64LE_ENCODER 0 -#define CONFIG_PCM_MULAW_ENCODER 0 -#define CONFIG_PCM_S8_ENCODER 0 -#define CONFIG_PCM_S8_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16BE_ENCODER 0 -#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S16LE_ENCODER 0 -#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S24BE_ENCODER 0 -#define CONFIG_PCM_S24DAUD_ENCODER 0 -#define CONFIG_PCM_S24LE_ENCODER 0 -#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S32BE_ENCODER 0 -#define CONFIG_PCM_S32LE_ENCODER 0 -#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 -#define CONFIG_PCM_S64BE_ENCODER 0 -#define CONFIG_PCM_S64LE_ENCODER 0 -#define CONFIG_PCM_U8_ENCODER 0 -#define CONFIG_PCM_U16BE_ENCODER 0 -#define CONFIG_PCM_U16LE_ENCODER 0 -#define CONFIG_PCM_U24BE_ENCODER 0 -#define CONFIG_PCM_U24LE_ENCODER 0 -#define CONFIG_PCM_U32BE_ENCODER 0 -#define CONFIG_PCM_U32LE_ENCODER 0 -#define CONFIG_ROQ_DPCM_ENCODER 0 -#define CONFIG_ADPCM_ADX_ENCODER 0 -#define CONFIG_ADPCM_G722_ENCODER 0 -#define CONFIG_ADPCM_G726_ENCODER 0 -#define CONFIG_ADPCM_IMA_QT_ENCODER 0 -#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 -#define CONFIG_ADPCM_MS_ENCODER 0 -#define CONFIG_ADPCM_SWF_ENCODER 0 -#define CONFIG_ADPCM_YAMAHA_ENCODER 0 -#define CONFIG_SSA_ENCODER 0 -#define CONFIG_ASS_ENCODER 0 -#define CONFIG_DVBSUB_ENCODER 0 -#define CONFIG_DVDSUB_ENCODER 0 -#define CONFIG_MOVTEXT_ENCODER 0 -#define CONFIG_SRT_ENCODER 0 -#define CONFIG_SUBRIP_ENCODER 0 -#define CONFIG_TEXT_ENCODER 0 -#define CONFIG_WEBVTT_ENCODER 0 -#define CONFIG_XSUB_ENCODER 0 -#define CONFIG_AAC_AT_ENCODER 0 -#define CONFIG_ALAC_AT_ENCODER 0 -#define CONFIG_ILBC_AT_ENCODER 0 -#define CONFIG_PCM_ALAW_AT_ENCODER 0 -#define CONFIG_PCM_MULAW_AT_ENCODER 0 -#define CONFIG_LIBFDK_AAC_ENCODER 0 -#define CONFIG_LIBGSM_ENCODER 0 -#define CONFIG_LIBGSM_MS_ENCODER 0 -#define CONFIG_LIBILBC_ENCODER 0 -#define CONFIG_LIBMP3LAME_ENCODER 0 -#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 -#define CONFIG_LIBOPENJPEG_ENCODER 0 -#define CONFIG_LIBOPUS_ENCODER 0 -#define CONFIG_LIBSCHROEDINGER_ENCODER 0 -#define CONFIG_LIBSHINE_ENCODER 0 -#define CONFIG_LIBSPEEX_ENCODER 0 -#define CONFIG_LIBTHEORA_ENCODER 0 -#define CONFIG_LIBTWOLAME_ENCODER 0 -#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 -#define CONFIG_LIBVORBIS_ENCODER 0 -#define CONFIG_LIBVPX_VP8_ENCODER 0 -#define CONFIG_LIBVPX_VP9_ENCODER 0 -#define CONFIG_LIBWAVPACK_ENCODER 0 -#define CONFIG_LIBWEBP_ANIM_ENCODER 0 -#define CONFIG_LIBWEBP_ENCODER 0 -#define CONFIG_LIBX262_ENCODER 0 -#define CONFIG_LIBX264_ENCODER 0 -#define CONFIG_LIBX264RGB_ENCODER 0 -#define CONFIG_LIBX265_ENCODER 0 -#define CONFIG_LIBXAVS_ENCODER 0 -#define CONFIG_LIBXVID_ENCODER 0 -#define CONFIG_LIBOPENH264_ENCODER 0 -#define CONFIG_H264_NVENC_ENCODER 0 -#define CONFIG_H264_OMX_ENCODER 0 -#define CONFIG_H264_QSV_ENCODER 0 -#define CONFIG_H264_VAAPI_ENCODER 0 -#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 -#define CONFIG_NVENC_ENCODER 0 -#define CONFIG_NVENC_H264_ENCODER 0 -#define CONFIG_NVENC_HEVC_ENCODER 0 -#define CONFIG_HEVC_NVENC_ENCODER 0 -#define CONFIG_HEVC_QSV_ENCODER 0 -#define CONFIG_HEVC_VAAPI_ENCODER 0 -#define CONFIG_LIBKVAZAAR_ENCODER 0 -#define CONFIG_MJPEG_VAAPI_ENCODER 0 -#define CONFIG_MPEG2_QSV_ENCODER 0 -#define CONFIG_ABENCH_FILTER 0 -#define CONFIG_ACOMPRESSOR_FILTER 0 -#define CONFIG_ACROSSFADE_FILTER 0 -#define CONFIG_ACRUSHER_FILTER 0 -#define CONFIG_ADELAY_FILTER 0 -#define CONFIG_AECHO_FILTER 0 -#define CONFIG_AEMPHASIS_FILTER 0 -#define CONFIG_AEVAL_FILTER 0 -#define CONFIG_AFADE_FILTER 0 -#define CONFIG_AFFTFILT_FILTER 0 -#define CONFIG_AFORMAT_FILTER 0 -#define CONFIG_AGATE_FILTER 0 -#define CONFIG_AINTERLEAVE_FILTER 0 -#define CONFIG_ALIMITER_FILTER 0 -#define CONFIG_ALLPASS_FILTER 0 -#define CONFIG_ALOOP_FILTER 0 -#define CONFIG_AMERGE_FILTER 0 -#define CONFIG_AMETADATA_FILTER 0 -#define CONFIG_AMIX_FILTER 0 -#define CONFIG_ANEQUALIZER_FILTER 0 -#define CONFIG_ANULL_FILTER 0 -#define CONFIG_APAD_FILTER 0 -#define CONFIG_APERMS_FILTER 0 -#define CONFIG_APHASER_FILTER 0 -#define CONFIG_APULSATOR_FILTER 0 -#define CONFIG_AREALTIME_FILTER 0 -#define CONFIG_ARESAMPLE_FILTER 0 -#define CONFIG_AREVERSE_FILTER 0 -#define CONFIG_ASELECT_FILTER 0 -#define CONFIG_ASENDCMD_FILTER 0 -#define CONFIG_ASETNSAMPLES_FILTER 0 -#define CONFIG_ASETPTS_FILTER 0 -#define CONFIG_ASETRATE_FILTER 0 -#define CONFIG_ASETTB_FILTER 0 -#define CONFIG_ASHOWINFO_FILTER 0 -#define CONFIG_ASIDEDATA_FILTER 0 -#define CONFIG_ASPLIT_FILTER 0 -#define CONFIG_ASTATS_FILTER 0 -#define CONFIG_ASTREAMSELECT_FILTER 0 -#define CONFIG_ASYNCTS_FILTER 0 -#define CONFIG_ATEMPO_FILTER 0 -#define CONFIG_ATRIM_FILTER 0 -#define CONFIG_AZMQ_FILTER 0 -#define CONFIG_BANDPASS_FILTER 0 -#define CONFIG_BANDREJECT_FILTER 0 -#define CONFIG_BASS_FILTER 0 -#define CONFIG_BIQUAD_FILTER 0 -#define CONFIG_BS2B_FILTER 0 -#define CONFIG_CHANNELMAP_FILTER 0 -#define CONFIG_CHANNELSPLIT_FILTER 0 -#define CONFIG_CHORUS_FILTER 0 -#define CONFIG_COMPAND_FILTER 0 -#define CONFIG_COMPENSATIONDELAY_FILTER 0 -#define CONFIG_CRYSTALIZER_FILTER 0 -#define CONFIG_DCSHIFT_FILTER 0 -#define CONFIG_DYNAUDNORM_FILTER 0 -#define CONFIG_EARWAX_FILTER 0 -#define CONFIG_EBUR128_FILTER 0 -#define CONFIG_EQUALIZER_FILTER 0 -#define CONFIG_EXTRASTEREO_FILTER 0 -#define CONFIG_FIREQUALIZER_FILTER 0 -#define CONFIG_FLANGER_FILTER 0 -#define CONFIG_HDCD_FILTER 0 -#define CONFIG_HIGHPASS_FILTER 0 -#define CONFIG_JOIN_FILTER 0 -#define CONFIG_LADSPA_FILTER 0 -#define CONFIG_LOUDNORM_FILTER 0 -#define CONFIG_LOWPASS_FILTER 0 -#define CONFIG_PAN_FILTER 0 -#define CONFIG_REPLAYGAIN_FILTER 0 -#define CONFIG_RESAMPLE_FILTER 0 -#define CONFIG_RUBBERBAND_FILTER 0 -#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 -#define CONFIG_SIDECHAINGATE_FILTER 0 -#define CONFIG_SILENCEDETECT_FILTER 0 -#define CONFIG_SILENCEREMOVE_FILTER 0 -#define CONFIG_SOFALIZER_FILTER 0 -#define CONFIG_STEREOTOOLS_FILTER 0 -#define CONFIG_STEREOWIDEN_FILTER 0 -#define CONFIG_TREBLE_FILTER 0 -#define CONFIG_TREMOLO_FILTER 0 -#define CONFIG_VIBRATO_FILTER 0 -#define CONFIG_VOLUME_FILTER 0 -#define CONFIG_VOLUMEDETECT_FILTER 0 -#define CONFIG_AEVALSRC_FILTER 0 -#define CONFIG_ANOISESRC_FILTER 0 -#define CONFIG_ANULLSRC_FILTER 0 -#define CONFIG_FLITE_FILTER 0 -#define CONFIG_SINE_FILTER 0 -#define CONFIG_ANULLSINK_FILTER 0 -#define CONFIG_ALPHAEXTRACT_FILTER 0 -#define CONFIG_ALPHAMERGE_FILTER 0 -#define CONFIG_ASS_FILTER 0 -#define CONFIG_ATADENOISE_FILTER 0 -#define CONFIG_AVGBLUR_FILTER 0 -#define CONFIG_BBOX_FILTER 0 -#define CONFIG_BENCH_FILTER 0 -#define CONFIG_BITPLANENOISE_FILTER 0 -#define CONFIG_BLACKDETECT_FILTER 0 -#define CONFIG_BLACKFRAME_FILTER 0 -#define CONFIG_BLEND_FILTER 0 -#define CONFIG_BOXBLUR_FILTER 0 -#define CONFIG_BWDIF_FILTER 0 -#define CONFIG_CHROMAKEY_FILTER 0 -#define CONFIG_CIESCOPE_FILTER 0 -#define CONFIG_CODECVIEW_FILTER 0 -#define CONFIG_COLORBALANCE_FILTER 0 -#define CONFIG_COLORCHANNELMIXER_FILTER 0 -#define CONFIG_COLORKEY_FILTER 0 -#define CONFIG_COLORLEVELS_FILTER 0 -#define CONFIG_COLORMATRIX_FILTER 0 -#define CONFIG_COLORSPACE_FILTER 0 -#define CONFIG_CONVOLUTION_FILTER 0 -#define CONFIG_COPY_FILTER 0 -#define CONFIG_COREIMAGE_FILTER 0 -#define CONFIG_COVER_RECT_FILTER 0 -#define CONFIG_CROP_FILTER 0 -#define CONFIG_CROPDETECT_FILTER 0 -#define CONFIG_CURVES_FILTER 0 -#define CONFIG_DATASCOPE_FILTER 0 -#define CONFIG_DCTDNOIZ_FILTER 0 -#define CONFIG_DEBAND_FILTER 0 -#define CONFIG_DECIMATE_FILTER 0 -#define CONFIG_DEFLATE_FILTER 0 -#define CONFIG_DEJUDDER_FILTER 0 -#define CONFIG_DELOGO_FILTER 0 -#define CONFIG_DESHAKE_FILTER 0 -#define CONFIG_DETELECINE_FILTER 0 -#define CONFIG_DILATION_FILTER 0 -#define CONFIG_DISPLACE_FILTER 0 -#define CONFIG_DRAWBOX_FILTER 0 -#define CONFIG_DRAWGRAPH_FILTER 0 -#define CONFIG_DRAWGRID_FILTER 0 -#define CONFIG_DRAWTEXT_FILTER 0 -#define CONFIG_EDGEDETECT_FILTER 0 -#define CONFIG_ELBG_FILTER 0 -#define CONFIG_EQ_FILTER 0 -#define CONFIG_EROSION_FILTER 0 -#define CONFIG_EXTRACTPLANES_FILTER 0 -#define CONFIG_FADE_FILTER 0 -#define CONFIG_FFTFILT_FILTER 0 -#define CONFIG_FIELD_FILTER 0 -#define CONFIG_FIELDHINT_FILTER 0 -#define CONFIG_FIELDMATCH_FILTER 0 -#define CONFIG_FIELDORDER_FILTER 0 -#define CONFIG_FIND_RECT_FILTER 0 -#define CONFIG_FORMAT_FILTER 0 -#define CONFIG_FPS_FILTER 0 -#define CONFIG_FRAMEPACK_FILTER 0 -#define CONFIG_FRAMERATE_FILTER 0 -#define CONFIG_FRAMESTEP_FILTER 0 -#define CONFIG_FREI0R_FILTER 0 -#define CONFIG_FSPP_FILTER 0 -#define CONFIG_GBLUR_FILTER 0 -#define CONFIG_GEQ_FILTER 0 -#define CONFIG_GRADFUN_FILTER 0 -#define CONFIG_HALDCLUT_FILTER 0 -#define CONFIG_HFLIP_FILTER 0 -#define CONFIG_HISTEQ_FILTER 0 -#define CONFIG_HISTOGRAM_FILTER 0 -#define CONFIG_HQDN3D_FILTER 0 -#define CONFIG_HQX_FILTER 0 -#define CONFIG_HSTACK_FILTER 0 -#define CONFIG_HUE_FILTER 0 -#define CONFIG_HWDOWNLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_FILTER 0 -#define CONFIG_HWUPLOAD_CUDA_FILTER 0 -#define CONFIG_HYSTERESIS_FILTER 0 -#define CONFIG_IDET_FILTER 0 -#define CONFIG_IL_FILTER 0 -#define CONFIG_INFLATE_FILTER 0 -#define CONFIG_INTERLACE_FILTER 0 -#define CONFIG_INTERLEAVE_FILTER 0 -#define CONFIG_KERNDEINT_FILTER 0 -#define CONFIG_LENSCORRECTION_FILTER 0 -#define CONFIG_LOOP_FILTER 0 -#define CONFIG_LUT_FILTER 0 -#define CONFIG_LUT2_FILTER 0 -#define CONFIG_LUT3D_FILTER 0 -#define CONFIG_LUTRGB_FILTER 0 -#define CONFIG_LUTYUV_FILTER 0 -#define CONFIG_MASKEDCLAMP_FILTER 0 -#define CONFIG_MASKEDMERGE_FILTER 0 -#define CONFIG_MCDEINT_FILTER 0 -#define CONFIG_MERGEPLANES_FILTER 0 -#define CONFIG_MESTIMATE_FILTER 0 -#define CONFIG_METADATA_FILTER 0 -#define CONFIG_MINTERPOLATE_FILTER 0 -#define CONFIG_MPDECIMATE_FILTER 0 -#define CONFIG_NEGATE_FILTER 0 -#define CONFIG_NLMEANS_FILTER 0 -#define CONFIG_NNEDI_FILTER 0 -#define CONFIG_NOFORMAT_FILTER 0 -#define CONFIG_NOISE_FILTER 0 -#define CONFIG_NULL_FILTER 0 -#define CONFIG_OCR_FILTER 0 -#define CONFIG_OCV_FILTER 0 -#define CONFIG_OVERLAY_FILTER 0 -#define CONFIG_OWDENOISE_FILTER 0 -#define CONFIG_PAD_FILTER 0 -#define CONFIG_PALETTEGEN_FILTER 0 -#define CONFIG_PALETTEUSE_FILTER 0 -#define CONFIG_PERMS_FILTER 0 -#define CONFIG_PERSPECTIVE_FILTER 0 -#define CONFIG_PHASE_FILTER 0 -#define CONFIG_PIXDESCTEST_FILTER 0 -#define CONFIG_PP_FILTER 0 -#define CONFIG_PP7_FILTER 0 -#define CONFIG_PREWITT_FILTER 0 -#define CONFIG_PSNR_FILTER 0 -#define CONFIG_PULLUP_FILTER 0 -#define CONFIG_QP_FILTER 0 -#define CONFIG_RANDOM_FILTER 0 -#define CONFIG_READVITC_FILTER 0 -#define CONFIG_REALTIME_FILTER 0 -#define CONFIG_REMAP_FILTER 0 -#define CONFIG_REMOVEGRAIN_FILTER 0 -#define CONFIG_REMOVELOGO_FILTER 0 -#define CONFIG_REPEATFIELDS_FILTER 0 -#define CONFIG_REVERSE_FILTER 0 -#define CONFIG_ROTATE_FILTER 0 -#define CONFIG_SAB_FILTER 0 -#define CONFIG_SCALE_FILTER 0 -#define CONFIG_SCALE_NPP_FILTER 0 -#define CONFIG_SCALE_VAAPI_FILTER 0 -#define CONFIG_SCALE2REF_FILTER 0 -#define CONFIG_SELECT_FILTER 0 -#define CONFIG_SELECTIVECOLOR_FILTER 0 -#define CONFIG_SENDCMD_FILTER 0 -#define CONFIG_SEPARATEFIELDS_FILTER 0 -#define CONFIG_SETDAR_FILTER 0 -#define CONFIG_SETFIELD_FILTER 0 -#define CONFIG_SETPTS_FILTER 0 -#define CONFIG_SETSAR_FILTER 0 -#define CONFIG_SETTB_FILTER 0 -#define CONFIG_SHOWINFO_FILTER 0 -#define CONFIG_SHOWPALETTE_FILTER 0 -#define CONFIG_SHUFFLEFRAMES_FILTER 0 -#define CONFIG_SHUFFLEPLANES_FILTER 0 -#define CONFIG_SIDEDATA_FILTER 0 -#define CONFIG_SIGNALSTATS_FILTER 0 -#define CONFIG_SMARTBLUR_FILTER 0 -#define CONFIG_SOBEL_FILTER 0 -#define CONFIG_SPLIT_FILTER 0 -#define CONFIG_SPP_FILTER 0 -#define CONFIG_SSIM_FILTER 0 -#define CONFIG_STEREO3D_FILTER 0 -#define CONFIG_STREAMSELECT_FILTER 0 -#define CONFIG_SUBTITLES_FILTER 0 -#define CONFIG_SUPER2XSAI_FILTER 0 -#define CONFIG_SWAPRECT_FILTER 0 -#define CONFIG_SWAPUV_FILTER 0 -#define CONFIG_TBLEND_FILTER 0 -#define CONFIG_TELECINE_FILTER 0 -#define CONFIG_THUMBNAIL_FILTER 0 -#define CONFIG_TILE_FILTER 0 -#define CONFIG_TINTERLACE_FILTER 0 -#define CONFIG_TRANSPOSE_FILTER 0 -#define CONFIG_TRIM_FILTER 0 -#define CONFIG_UNSHARP_FILTER 0 -#define CONFIG_USPP_FILTER 0 -#define CONFIG_VAGUEDENOISER_FILTER 0 -#define CONFIG_VECTORSCOPE_FILTER 0 -#define CONFIG_VFLIP_FILTER 0 -#define CONFIG_VIDSTABDETECT_FILTER 0 -#define CONFIG_VIDSTABTRANSFORM_FILTER 0 -#define CONFIG_VIGNETTE_FILTER 0 -#define CONFIG_VSTACK_FILTER 0 -#define CONFIG_W3FDIF_FILTER 0 -#define CONFIG_WAVEFORM_FILTER 0 -#define CONFIG_WEAVE_FILTER 0 -#define CONFIG_XBR_FILTER 0 -#define CONFIG_YADIF_FILTER 0 -#define CONFIG_ZMQ_FILTER 0 -#define CONFIG_ZOOMPAN_FILTER 0 -#define CONFIG_ZSCALE_FILTER 0 -#define CONFIG_ALLRGB_FILTER 0 -#define CONFIG_ALLYUV_FILTER 0 -#define CONFIG_CELLAUTO_FILTER 0 -#define CONFIG_COLOR_FILTER 0 -#define CONFIG_COREIMAGESRC_FILTER 0 -#define CONFIG_FREI0R_SRC_FILTER 0 -#define CONFIG_HALDCLUTSRC_FILTER 0 -#define CONFIG_LIFE_FILTER 0 -#define CONFIG_MANDELBROT_FILTER 0 -#define CONFIG_MPTESTSRC_FILTER 0 -#define CONFIG_NULLSRC_FILTER 0 -#define CONFIG_RGBTESTSRC_FILTER 0 -#define CONFIG_SMPTEBARS_FILTER 0 -#define CONFIG_SMPTEHDBARS_FILTER 0 -#define CONFIG_TESTSRC_FILTER 0 -#define CONFIG_TESTSRC2_FILTER 0 -#define CONFIG_YUVTESTSRC_FILTER 0 -#define CONFIG_NULLSINK_FILTER 0 -#define CONFIG_ADRAWGRAPH_FILTER 0 -#define CONFIG_AHISTOGRAM_FILTER 0 -#define CONFIG_APHASEMETER_FILTER 0 -#define CONFIG_AVECTORSCOPE_FILTER 0 -#define CONFIG_CONCAT_FILTER 0 -#define CONFIG_SHOWCQT_FILTER 0 -#define CONFIG_SHOWFREQS_FILTER 0 -#define CONFIG_SHOWSPECTRUM_FILTER 0 -#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 -#define CONFIG_SHOWVOLUME_FILTER 0 -#define CONFIG_SHOWWAVES_FILTER 0 -#define CONFIG_SHOWWAVESPIC_FILTER 0 -#define CONFIG_SPECTRUMSYNTH_FILTER 0 -#define CONFIG_AMOVIE_FILTER 0 -#define CONFIG_MOVIE_FILTER 0 -#define CONFIG_H263_CUVID_HWACCEL 0 -#define CONFIG_H263_VAAPI_HWACCEL 0 -#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_H264_CUVID_HWACCEL 0 -#define CONFIG_H264_D3D11VA_HWACCEL 0 -#define CONFIG_H264_DXVA2_HWACCEL 0 -#define CONFIG_H264_MEDIACODEC_HWACCEL 0 -#define CONFIG_H264_MMAL_HWACCEL 0 -#define CONFIG_H264_QSV_HWACCEL 0 -#define CONFIG_H264_VAAPI_HWACCEL 0 -#define CONFIG_H264_VDA_HWACCEL 0 -#define CONFIG_H264_VDA_OLD_HWACCEL 0 -#define CONFIG_H264_VDPAU_HWACCEL 0 -#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_HEVC_CUVID_HWACCEL 0 -#define CONFIG_HEVC_D3D11VA_HWACCEL 0 -#define CONFIG_HEVC_DXVA2_HWACCEL 0 -#define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 -#define CONFIG_HEVC_QSV_HWACCEL 0 -#define CONFIG_HEVC_VAAPI_HWACCEL 0 -#define CONFIG_HEVC_VDPAU_HWACCEL 0 -#define CONFIG_MJPEG_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_CUVID_HWACCEL 0 -#define CONFIG_MPEG1_XVMC_HWACCEL 0 -#define CONFIG_MPEG1_VDPAU_HWACCEL 0 -#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG2_CUVID_HWACCEL 0 -#define CONFIG_MPEG2_XVMC_HWACCEL 0 -#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 -#define CONFIG_MPEG2_DXVA2_HWACCEL 0 -#define CONFIG_MPEG2_MMAL_HWACCEL 0 -#define CONFIG_MPEG2_QSV_HWACCEL 0 -#define CONFIG_MPEG2_VAAPI_HWACCEL 0 -#define CONFIG_MPEG2_VDPAU_HWACCEL 0 -#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_MPEG4_CUVID_HWACCEL 0 -#define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 -#define CONFIG_MPEG4_MMAL_HWACCEL 0 -#define CONFIG_MPEG4_VAAPI_HWACCEL 0 -#define CONFIG_MPEG4_VDPAU_HWACCEL 0 -#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 -#define CONFIG_VC1_CUVID_HWACCEL 0 -#define CONFIG_VC1_D3D11VA_HWACCEL 0 -#define CONFIG_VC1_DXVA2_HWACCEL 0 -#define CONFIG_VC1_VAAPI_HWACCEL 0 -#define CONFIG_VC1_VDPAU_HWACCEL 0 -#define CONFIG_VC1_MMAL_HWACCEL 0 -#define CONFIG_VC1_QSV_HWACCEL 0 -#define CONFIG_VP8_CUVID_HWACCEL 0 -#define CONFIG_VP8_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_CUVID_HWACCEL 0 -#define CONFIG_VP9_D3D11VA_HWACCEL 0 -#define CONFIG_VP9_DXVA2_HWACCEL 0 -#define CONFIG_VP9_MEDIACODEC_HWACCEL 0 -#define CONFIG_VP9_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_D3D11VA_HWACCEL 0 -#define CONFIG_WMV3_DXVA2_HWACCEL 0 -#define CONFIG_WMV3_VAAPI_HWACCEL 0 -#define CONFIG_WMV3_VDPAU_HWACCEL 0 -#define CONFIG_ALSA_INDEV 0 -#define CONFIG_AVFOUNDATION_INDEV 0 -#define CONFIG_BKTR_INDEV 0 -#define CONFIG_DECKLINK_INDEV 0 -#define CONFIG_DSHOW_INDEV 0 -#define CONFIG_DV1394_INDEV 0 -#define CONFIG_FBDEV_INDEV 0 -#define CONFIG_GDIGRAB_INDEV 0 -#define CONFIG_IEC61883_INDEV 0 -#define CONFIG_JACK_INDEV 0 -#define CONFIG_LAVFI_INDEV 0 -#define CONFIG_OPENAL_INDEV 0 -#define CONFIG_OSS_INDEV 0 -#define CONFIG_PULSE_INDEV 0 -#define CONFIG_QTKIT_INDEV 0 -#define CONFIG_SNDIO_INDEV 0 -#define CONFIG_V4L2_INDEV 0 -#define CONFIG_VFWCAP_INDEV 0 -#define CONFIG_X11GRAB_INDEV 0 -#define CONFIG_X11GRAB_XCB_INDEV 0 -#define CONFIG_LIBCDIO_INDEV 0 -#define CONFIG_LIBDC1394_INDEV 0 -#define CONFIG_A64_MUXER 0 -#define CONFIG_AC3_MUXER 0 -#define CONFIG_ADTS_MUXER 0 -#define CONFIG_ADX_MUXER 0 -#define CONFIG_AIFF_MUXER 0 -#define CONFIG_AMR_MUXER 0 -#define CONFIG_APNG_MUXER 0 -#define CONFIG_ASF_MUXER 0 -#define CONFIG_ASS_MUXER 0 -#define CONFIG_AST_MUXER 0 -#define CONFIG_ASF_STREAM_MUXER 0 -#define CONFIG_AU_MUXER 0 -#define CONFIG_AVI_MUXER 0 -#define CONFIG_AVM2_MUXER 0 -#define CONFIG_BIT_MUXER 0 -#define CONFIG_CAF_MUXER 0 -#define CONFIG_CAVSVIDEO_MUXER 0 -#define CONFIG_CRC_MUXER 0 -#define CONFIG_DASH_MUXER 0 -#define CONFIG_DATA_MUXER 0 -#define CONFIG_DAUD_MUXER 0 -#define CONFIG_DIRAC_MUXER 0 -#define CONFIG_DNXHD_MUXER 0 -#define CONFIG_DTS_MUXER 0 -#define CONFIG_DV_MUXER 0 -#define CONFIG_EAC3_MUXER 0 -#define CONFIG_F4V_MUXER 0 -#define CONFIG_FFM_MUXER 0 -#define CONFIG_FFMETADATA_MUXER 0 -#define CONFIG_FIFO_MUXER 0 -#define CONFIG_FILMSTRIP_MUXER 0 -#define CONFIG_FLAC_MUXER 0 -#define CONFIG_FLV_MUXER 0 -#define CONFIG_FRAMECRC_MUXER 0 -#define CONFIG_FRAMEHASH_MUXER 0 -#define CONFIG_FRAMEMD5_MUXER 0 -#define CONFIG_G722_MUXER 0 -#define CONFIG_G723_1_MUXER 0 -#define CONFIG_GIF_MUXER 0 -#define CONFIG_GSM_MUXER 0 -#define CONFIG_GXF_MUXER 0 -#define CONFIG_H261_MUXER 0 -#define CONFIG_H263_MUXER 0 -#define CONFIG_H264_MUXER 0 -#define CONFIG_HASH_MUXER 0 -#define CONFIG_HDS_MUXER 0 -#define CONFIG_HEVC_MUXER 0 -#define CONFIG_HLS_MUXER 0 -#define CONFIG_ICO_MUXER 0 -#define CONFIG_ILBC_MUXER 0 -#define CONFIG_IMAGE2_MUXER 0 -#define CONFIG_IMAGE2PIPE_MUXER 0 -#define CONFIG_IPOD_MUXER 0 -#define CONFIG_IRCAM_MUXER 0 -#define CONFIG_ISMV_MUXER 0 -#define CONFIG_IVF_MUXER 0 -#define CONFIG_JACOSUB_MUXER 0 -#define CONFIG_LATM_MUXER 0 -#define CONFIG_LRC_MUXER 0 -#define CONFIG_M4V_MUXER 0 -#define CONFIG_MD5_MUXER 0 -#define CONFIG_MATROSKA_MUXER 0 -#define CONFIG_MATROSKA_AUDIO_MUXER 0 -#define CONFIG_MICRODVD_MUXER 0 -#define CONFIG_MJPEG_MUXER 0 -#define CONFIG_MLP_MUXER 0 -#define CONFIG_MMF_MUXER 0 -#define CONFIG_MOV_MUXER 0 -#define CONFIG_MP2_MUXER 0 -#define CONFIG_MP3_MUXER 0 -#define CONFIG_MP4_MUXER 0 -#define CONFIG_MPEG1SYSTEM_MUXER 0 -#define CONFIG_MPEG1VCD_MUXER 0 -#define CONFIG_MPEG1VIDEO_MUXER 0 -#define CONFIG_MPEG2DVD_MUXER 0 -#define CONFIG_MPEG2SVCD_MUXER 0 -#define CONFIG_MPEG2VIDEO_MUXER 0 -#define CONFIG_MPEG2VOB_MUXER 0 -#define CONFIG_MPEGTS_MUXER 0 -#define CONFIG_MPJPEG_MUXER 0 -#define CONFIG_MXF_MUXER 0 -#define CONFIG_MXF_D10_MUXER 0 -#define CONFIG_MXF_OPATOM_MUXER 0 -#define CONFIG_NULL_MUXER 0 -#define CONFIG_NUT_MUXER 0 -#define CONFIG_OGA_MUXER 0 -#define CONFIG_OGG_MUXER 0 -#define CONFIG_OGV_MUXER 0 -#define CONFIG_OMA_MUXER 0 -#define CONFIG_OPUS_MUXER 0 -#define CONFIG_PCM_ALAW_MUXER 0 -#define CONFIG_PCM_MULAW_MUXER 0 -#define CONFIG_PCM_F64BE_MUXER 0 -#define CONFIG_PCM_F64LE_MUXER 0 -#define CONFIG_PCM_F32BE_MUXER 0 -#define CONFIG_PCM_F32LE_MUXER 0 -#define CONFIG_PCM_S32BE_MUXER 0 -#define CONFIG_PCM_S32LE_MUXER 0 -#define CONFIG_PCM_S24BE_MUXER 0 -#define CONFIG_PCM_S24LE_MUXER 0 -#define CONFIG_PCM_S16BE_MUXER 0 -#define CONFIG_PCM_S16LE_MUXER 0 -#define CONFIG_PCM_S8_MUXER 0 -#define CONFIG_PCM_U32BE_MUXER 0 -#define CONFIG_PCM_U32LE_MUXER 0 -#define CONFIG_PCM_U24BE_MUXER 0 -#define CONFIG_PCM_U24LE_MUXER 0 -#define CONFIG_PCM_U16BE_MUXER 0 -#define CONFIG_PCM_U16LE_MUXER 0 -#define CONFIG_PCM_U8_MUXER 0 -#define CONFIG_PSP_MUXER 0 -#define CONFIG_RAWVIDEO_MUXER 0 -#define CONFIG_RM_MUXER 0 -#define CONFIG_ROQ_MUXER 0 -#define CONFIG_RSO_MUXER 0 -#define CONFIG_RTP_MUXER 0 -#define CONFIG_RTP_MPEGTS_MUXER 0 -#define CONFIG_RTSP_MUXER 0 -#define CONFIG_SAP_MUXER 0 -#define CONFIG_SEGMENT_MUXER 0 -#define CONFIG_STREAM_SEGMENT_MUXER 0 -#define CONFIG_SINGLEJPEG_MUXER 0 -#define CONFIG_SMJPEG_MUXER 0 -#define CONFIG_SMOOTHSTREAMING_MUXER 0 -#define CONFIG_SOX_MUXER 0 -#define CONFIG_SPX_MUXER 0 -#define CONFIG_SPDIF_MUXER 0 -#define CONFIG_SRT_MUXER 0 -#define CONFIG_SWF_MUXER 0 -#define CONFIG_TEE_MUXER 0 -#define CONFIG_TG2_MUXER 0 -#define CONFIG_TGP_MUXER 0 -#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 -#define CONFIG_TRUEHD_MUXER 0 -#define CONFIG_TTA_MUXER 0 -#define CONFIG_UNCODEDFRAMECRC_MUXER 0 -#define CONFIG_VC1_MUXER 0 -#define CONFIG_VC1T_MUXER 0 -#define CONFIG_VOC_MUXER 0 -#define CONFIG_W64_MUXER 0 -#define CONFIG_WAV_MUXER 0 -#define CONFIG_WEBM_MUXER 0 -#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 -#define CONFIG_WEBM_CHUNK_MUXER 0 -#define CONFIG_WEBP_MUXER 0 -#define CONFIG_WEBVTT_MUXER 0 -#define CONFIG_WTV_MUXER 0 -#define CONFIG_WV_MUXER 0 -#define CONFIG_YUV4MPEGPIPE_MUXER 0 -#define CONFIG_CHROMAPRINT_MUXER 0 -#define CONFIG_LIBNUT_MUXER 0 -#define CONFIG_ALSA_OUTDEV 0 -#define CONFIG_CACA_OUTDEV 0 -#define CONFIG_DECKLINK_OUTDEV 0 -#define CONFIG_FBDEV_OUTDEV 0 -#define CONFIG_OPENGL_OUTDEV 0 -#define CONFIG_OSS_OUTDEV 0 -#define CONFIG_PULSE_OUTDEV 0 -#define CONFIG_SDL2_OUTDEV 0 -#define CONFIG_SNDIO_OUTDEV 0 -#define CONFIG_V4L2_OUTDEV 0 -#define CONFIG_XV_OUTDEV 0 -#define CONFIG_AAC_PARSER 0 -#define CONFIG_AAC_LATM_PARSER 0 -#define CONFIG_AC3_PARSER 0 -#define CONFIG_ADX_PARSER 0 -#define CONFIG_BMP_PARSER 0 -#define CONFIG_CAVSVIDEO_PARSER 0 -#define CONFIG_COOK_PARSER 0 -#define CONFIG_DCA_PARSER 0 -#define CONFIG_DIRAC_PARSER 0 -#define CONFIG_DNXHD_PARSER 0 -#define CONFIG_DPX_PARSER 0 -#define CONFIG_DVAUDIO_PARSER 0 -#define CONFIG_DVBSUB_PARSER 0 -#define CONFIG_DVDSUB_PARSER 0 -#define CONFIG_DVD_NAV_PARSER 0 #define CONFIG_FLAC_PARSER 1 -#define CONFIG_G729_PARSER 0 -#define CONFIG_GSM_PARSER 0 -#define CONFIG_H261_PARSER 0 -#define CONFIG_H263_PARSER 0 -#define CONFIG_H264_PARSER 0 -#define CONFIG_HEVC_PARSER 0 -#define CONFIG_MJPEG_PARSER 0 -#define CONFIG_MLP_PARSER 0 -#define CONFIG_MPEG4VIDEO_PARSER 0 -#define CONFIG_MPEGAUDIO_PARSER 0 -#define CONFIG_MPEGVIDEO_PARSER 0 -#define CONFIG_OPUS_PARSER 0 -#define CONFIG_PNG_PARSER 0 -#define CONFIG_PNM_PARSER 0 -#define CONFIG_RV30_PARSER 0 -#define CONFIG_RV40_PARSER 0 -#define CONFIG_TAK_PARSER 0 -#define CONFIG_VC1_PARSER 0 -#define CONFIG_VORBIS_PARSER 0 -#define CONFIG_VP3_PARSER 0 #define CONFIG_VP8_PARSER 1 #define CONFIG_VP9_PARSER 1 -#define CONFIG_ASYNC_PROTOCOL 0 -#define CONFIG_BLURAY_PROTOCOL 0 -#define CONFIG_CACHE_PROTOCOL 0 -#define CONFIG_CONCAT_PROTOCOL 0 -#define CONFIG_CRYPTO_PROTOCOL 0 -#define CONFIG_DATA_PROTOCOL 0 -#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 -#define CONFIG_FFRTMPHTTP_PROTOCOL 0 -#define CONFIG_FILE_PROTOCOL 0 -#define CONFIG_FTP_PROTOCOL 0 -#define CONFIG_GOPHER_PROTOCOL 0 -#define CONFIG_HLS_PROTOCOL 0 -#define CONFIG_HTTP_PROTOCOL 0 -#define CONFIG_HTTPPROXY_PROTOCOL 0 -#define CONFIG_HTTPS_PROTOCOL 0 -#define CONFIG_ICECAST_PROTOCOL 0 -#define CONFIG_MMSH_PROTOCOL 0 -#define CONFIG_MMST_PROTOCOL 0 -#define CONFIG_MD5_PROTOCOL 0 -#define CONFIG_PIPE_PROTOCOL 0 -#define CONFIG_RTMP_PROTOCOL 0 -#define CONFIG_RTMPE_PROTOCOL 0 -#define CONFIG_RTMPS_PROTOCOL 0 -#define CONFIG_RTMPT_PROTOCOL 0 -#define CONFIG_RTMPTE_PROTOCOL 0 -#define CONFIG_RTMPTS_PROTOCOL 0 -#define CONFIG_RTP_PROTOCOL 0 -#define CONFIG_SCTP_PROTOCOL 0 -#define CONFIG_SRTP_PROTOCOL 0 -#define CONFIG_SUBFILE_PROTOCOL 0 -#define CONFIG_TEE_PROTOCOL 0 -#define CONFIG_TCP_PROTOCOL 0 -#define CONFIG_TLS_GNUTLS_PROTOCOL 0 -#define CONFIG_TLS_SCHANNEL_PROTOCOL 0 -#define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 -#define CONFIG_TLS_OPENSSL_PROTOCOL 0 -#define CONFIG_UDP_PROTOCOL 0 -#define CONFIG_UDPLITE_PROTOCOL 0 -#define CONFIG_UNIX_PROTOCOL 0 -#define CONFIG_LIBRTMP_PROTOCOL 0 -#define CONFIG_LIBRTMPE_PROTOCOL 0 -#define CONFIG_LIBRTMPS_PROTOCOL 0 -#define CONFIG_LIBRTMPT_PROTOCOL 0 -#define CONFIG_LIBRTMPTE_PROTOCOL 0 -#define CONFIG_LIBSSH_PROTOCOL 0 -#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 #endif /* FFMPEG_CONFIG_H */ diff --git a/media/ffvpx/defaults_disabled.asm b/media/ffvpx/defaults_disabled.asm new file mode 100644 index 000000000000..a9fde4c527b7 --- /dev/null +++ b/media/ffvpx/defaults_disabled.asm @@ -0,0 +1,1674 @@ +%define CONFIG_ENCODERS 0 +%define CONFIG_HWACCELS 0 +%define CONFIG_INDEVS 0 +%define CONFIG_OUTDEVS 0 +%define CONFIG_FILTERS 0 +%define CONFIG_DEMUXERS 0 +%define CONFIG_MUXERS 0 +%define CONFIG_PROTOCOLS 0 +%define CONFIG_FRAME_THREAD_ENCODER 0 +%define CONFIG_AASC_DECODER 0 +%define CONFIG_AIC_DECODER 0 +%define CONFIG_ALIAS_PIX_DECODER 0 +%define CONFIG_AMV_DECODER 0 +%define CONFIG_ANM_DECODER 0 +%define CONFIG_ANSI_DECODER 0 +%define CONFIG_APNG_DECODER 0 +%define CONFIG_ASV1_DECODER 0 +%define CONFIG_ASV2_DECODER 0 +%define CONFIG_AURA_DECODER 0 +%define CONFIG_AURA2_DECODER 0 +%define CONFIG_AVRP_DECODER 0 +%define CONFIG_AVRN_DECODER 0 +%define CONFIG_AVS_DECODER 0 +%define CONFIG_AVUI_DECODER 0 +%define CONFIG_AYUV_DECODER 0 +%define CONFIG_BETHSOFTVID_DECODER 0 +%define CONFIG_BFI_DECODER 0 +%define CONFIG_BINK_DECODER 0 +%define CONFIG_BMP_DECODER 0 +%define CONFIG_BMV_VIDEO_DECODER 0 +%define CONFIG_BRENDER_PIX_DECODER 0 +%define CONFIG_C93_DECODER 0 +%define CONFIG_CAVS_DECODER 0 +%define CONFIG_CDGRAPHICS_DECODER 0 +%define CONFIG_CDXL_DECODER 0 +%define CONFIG_CFHD_DECODER 0 +%define CONFIG_CINEPAK_DECODER 0 +%define CONFIG_CLEARVIDEO_DECODER 0 +%define CONFIG_CLJR_DECODER 0 +%define CONFIG_CLLC_DECODER 0 +%define CONFIG_COMFORTNOISE_DECODER 0 +%define CONFIG_CPIA_DECODER 0 +%define CONFIG_CSCD_DECODER 0 +%define CONFIG_CYUV_DECODER 0 +%define CONFIG_DDS_DECODER 0 +%define CONFIG_DFA_DECODER 0 +%define CONFIG_DIRAC_DECODER 0 +%define CONFIG_DNXHD_DECODER 0 +%define CONFIG_DPX_DECODER 0 +%define CONFIG_DSICINVIDEO_DECODER 0 +%define CONFIG_DVAUDIO_DECODER 0 +%define CONFIG_DVVIDEO_DECODER 0 +%define CONFIG_DXA_DECODER 0 +%define CONFIG_DXTORY_DECODER 0 +%define CONFIG_DXV_DECODER 0 +%define CONFIG_EACMV_DECODER 0 +%define CONFIG_EAMAD_DECODER 0 +%define CONFIG_EATGQ_DECODER 0 +%define CONFIG_EATGV_DECODER 0 +%define CONFIG_EATQI_DECODER 0 +%define CONFIG_EIGHTBPS_DECODER 0 +%define CONFIG_EIGHTSVX_EXP_DECODER 0 +%define CONFIG_EIGHTSVX_FIB_DECODER 0 +%define CONFIG_ESCAPE124_DECODER 0 +%define CONFIG_ESCAPE130_DECODER 0 +%define CONFIG_EXR_DECODER 0 +%define CONFIG_FFV1_DECODER 0 +%define CONFIG_FFVHUFF_DECODER 0 +%define CONFIG_FIC_DECODER 0 +%define CONFIG_FITS_DECODER 0 +%define CONFIG_FLASHSV_DECODER 0 +%define CONFIG_FLASHSV2_DECODER 0 +%define CONFIG_FLIC_DECODER 0 +%define CONFIG_FLV_DECODER 0 +%define CONFIG_FMVC_DECODER 0 +%define CONFIG_FOURXM_DECODER 0 +%define CONFIG_FRAPS_DECODER 0 +%define CONFIG_FRWU_DECODER 0 +%define CONFIG_G2M_DECODER 0 +%define CONFIG_GDV_DECODER 0 +%define CONFIG_GIF_DECODER 0 +%define CONFIG_H261_DECODER 0 +%define CONFIG_H263_DECODER 0 +%define CONFIG_H263I_DECODER 0 +%define CONFIG_H263P_DECODER 0 +%define CONFIG_H263_V4L2M2M_DECODER 0 +%define CONFIG_H264_DECODER 0 +%define CONFIG_H264_CRYSTALHD_DECODER 0 +%define CONFIG_H264_V4L2M2M_DECODER 0 +%define CONFIG_H264_MEDIACODEC_DECODER 0 +%define CONFIG_H264_MMAL_DECODER 0 +%define CONFIG_H264_QSV_DECODER 0 +%define CONFIG_H264_RKMPP_DECODER 0 +%define CONFIG_H264_VDA_DECODER 0 +%define CONFIG_H264_VDPAU_DECODER 0 +%define CONFIG_HAP_DECODER 0 +%define CONFIG_HEVC_DECODER 0 +%define CONFIG_HEVC_QSV_DECODER 0 +%define CONFIG_HEVC_RKMPP_DECODER 0 +%define CONFIG_HEVC_V4L2M2M_DECODER 0 +%define CONFIG_HNM4_VIDEO_DECODER 0 +%define CONFIG_HQ_HQA_DECODER 0 +%define CONFIG_HQX_DECODER 0 +%define CONFIG_HUFFYUV_DECODER 0 +%define CONFIG_IDCIN_DECODER 0 +%define CONFIG_IFF_ILBM_DECODER 0 +%define CONFIG_INDEO2_DECODER 0 +%define CONFIG_INDEO3_DECODER 0 +%define CONFIG_INDEO4_DECODER 0 +%define CONFIG_INDEO5_DECODER 0 +%define CONFIG_INTERPLAY_VIDEO_DECODER 0 +%define CONFIG_JPEG2000_DECODER 0 +%define CONFIG_JPEGLS_DECODER 0 +%define CONFIG_JV_DECODER 0 +%define CONFIG_KGV1_DECODER 0 +%define CONFIG_KMVC_DECODER 0 +%define CONFIG_LAGARITH_DECODER 0 +%define CONFIG_LOCO_DECODER 0 +%define CONFIG_M101_DECODER 0 +%define CONFIG_MAGICYUV_DECODER 0 +%define CONFIG_MDEC_DECODER 0 +%define CONFIG_MIMIC_DECODER 0 +%define CONFIG_MJPEG_DECODER 0 +%define CONFIG_MJPEGB_DECODER 0 +%define CONFIG_MMVIDEO_DECODER 0 +%define CONFIG_MOTIONPIXELS_DECODER 0 +%define CONFIG_MPEG_XVMC_DECODER 0 +%define CONFIG_MPEG1VIDEO_DECODER 0 +%define CONFIG_MPEG2VIDEO_DECODER 0 +%define CONFIG_MPEG4_DECODER 0 +%define CONFIG_MPEG4_CRYSTALHD_DECODER 0 +%define CONFIG_MPEG4_V4L2M2M_DECODER 0 +%define CONFIG_MPEG4_MMAL_DECODER 0 +%define CONFIG_MPEG4_VDPAU_DECODER 0 +%define CONFIG_MPEGVIDEO_DECODER 0 +%define CONFIG_MPEG_VDPAU_DECODER 0 +%define CONFIG_MPEG1_VDPAU_DECODER 0 +%define CONFIG_MPEG1_V4L2M2M_DECODER 0 +%define CONFIG_MPEG2_MMAL_DECODER 0 +%define CONFIG_MPEG2_CRYSTALHD_DECODER 0 +%define CONFIG_MPEG2_V4L2M2M_DECODER 0 +%define CONFIG_MPEG2_QSV_DECODER 0 +%define CONFIG_MPEG2_MEDIACODEC_DECODER 0 +%define CONFIG_MSA1_DECODER 0 +%define CONFIG_MSCC_DECODER 0 +%define CONFIG_MSMPEG4V1_DECODER 0 +%define CONFIG_MSMPEG4V2_DECODER 0 +%define CONFIG_MSMPEG4V3_DECODER 0 +%define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 +%define CONFIG_MSRLE_DECODER 0 +%define CONFIG_MSS1_DECODER 0 +%define CONFIG_MSS2_DECODER 0 +%define CONFIG_MSVIDEO1_DECODER 0 +%define CONFIG_MSZH_DECODER 0 +%define CONFIG_MTS2_DECODER 0 +%define CONFIG_MVC1_DECODER 0 +%define CONFIG_MVC2_DECODER 0 +%define CONFIG_MXPEG_DECODER 0 +%define CONFIG_NUV_DECODER 0 +%define CONFIG_PAF_VIDEO_DECODER 0 +%define CONFIG_PAM_DECODER 0 +%define CONFIG_PBM_DECODER 0 +%define CONFIG_PCX_DECODER 0 +%define CONFIG_PGM_DECODER 0 +%define CONFIG_PGMYUV_DECODER 0 +%define CONFIG_PICTOR_DECODER 0 +%define CONFIG_PIXLET_DECODER 0 +%define CONFIG_PNG_DECODER 0 +%define CONFIG_PPM_DECODER 0 +%define CONFIG_PRORES_DECODER 0 +%define CONFIG_PRORES_LGPL_DECODER 0 +%define CONFIG_PSD_DECODER 0 +%define CONFIG_PTX_DECODER 0 +%define CONFIG_QDRAW_DECODER 0 +%define CONFIG_QPEG_DECODER 0 +%define CONFIG_QTRLE_DECODER 0 +%define CONFIG_R10K_DECODER 0 +%define CONFIG_R210_DECODER 0 +%define CONFIG_RAWVIDEO_DECODER 0 +%define CONFIG_RL2_DECODER 0 +%define CONFIG_ROQ_DECODER 0 +%define CONFIG_RPZA_DECODER 0 +%define CONFIG_RSCC_DECODER 0 +%define CONFIG_RV10_DECODER 0 +%define CONFIG_RV20_DECODER 0 +%define CONFIG_RV30_DECODER 0 +%define CONFIG_RV40_DECODER 0 +%define CONFIG_S302M_DECODER 0 +%define CONFIG_SANM_DECODER 0 +%define CONFIG_SCPR_DECODER 0 +%define CONFIG_SCREENPRESSO_DECODER 0 +%define CONFIG_SDX2_DPCM_DECODER 0 +%define CONFIG_SGI_DECODER 0 +%define CONFIG_SGIRLE_DECODER 0 +%define CONFIG_SHEERVIDEO_DECODER 0 +%define CONFIG_SMACKER_DECODER 0 +%define CONFIG_SMC_DECODER 0 +%define CONFIG_SMVJPEG_DECODER 0 +%define CONFIG_SNOW_DECODER 0 +%define CONFIG_SP5X_DECODER 0 +%define CONFIG_SPEEDHQ_DECODER 0 +%define CONFIG_SRGC_DECODER 0 +%define CONFIG_SUNRAST_DECODER 0 +%define CONFIG_SVQ1_DECODER 0 +%define CONFIG_SVQ3_DECODER 0 +%define CONFIG_TARGA_DECODER 0 +%define CONFIG_TARGA_Y216_DECODER 0 +%define CONFIG_TDSC_DECODER 0 +%define CONFIG_THEORA_DECODER 0 +%define CONFIG_THP_DECODER 0 +%define CONFIG_TIERTEXSEQVIDEO_DECODER 0 +%define CONFIG_TIFF_DECODER 0 +%define CONFIG_TMV_DECODER 0 +%define CONFIG_TRUEMOTION1_DECODER 0 +%define CONFIG_TRUEMOTION2_DECODER 0 +%define CONFIG_TRUEMOTION2RT_DECODER 0 +%define CONFIG_TSCC_DECODER 0 +%define CONFIG_TSCC2_DECODER 0 +%define CONFIG_TXD_DECODER 0 +%define CONFIG_ULTI_DECODER 0 +%define CONFIG_UTVIDEO_DECODER 0 +%define CONFIG_V210_DECODER 0 +%define CONFIG_V210X_DECODER 0 +%define CONFIG_V308_DECODER 0 +%define CONFIG_V408_DECODER 0 +%define CONFIG_V410_DECODER 0 +%define CONFIG_VB_DECODER 0 +%define CONFIG_VBLE_DECODER 0 +%define CONFIG_VC1_DECODER 0 +%define CONFIG_VC1_CRYSTALHD_DECODER 0 +%define CONFIG_VC1_VDPAU_DECODER 0 +%define CONFIG_VC1IMAGE_DECODER 0 +%define CONFIG_VC1_MMAL_DECODER 0 +%define CONFIG_VC1_QSV_DECODER 0 +%define CONFIG_VC1_V4L2M2M_DECODER 0 +%define CONFIG_VCR1_DECODER 0 +%define CONFIG_VMDVIDEO_DECODER 0 +%define CONFIG_VMNC_DECODER 0 +%define CONFIG_VP3_DECODER 0 +%define CONFIG_VP5_DECODER 0 +%define CONFIG_VP6_DECODER 0 +%define CONFIG_VP6A_DECODER 0 +%define CONFIG_VP6F_DECODER 0 +%define CONFIG_VP7_DECODER 0 +%define CONFIG_VP8_RKMPP_DECODER 0 +%define CONFIG_VP8_V4L2M2M_DECODER 0 +%define CONFIG_VP9_RKMPP_DECODER 0 +%define CONFIG_VP9_V4L2M2M_DECODER 0 +%define CONFIG_VQA_DECODER 0 +%define CONFIG_BITPACKED_DECODER 0 +%define CONFIG_WEBP_DECODER 0 +%define CONFIG_WRAPPED_AVFRAME_DECODER 0 +%define CONFIG_WMV1_DECODER 0 +%define CONFIG_WMV2_DECODER 0 +%define CONFIG_WMV3_DECODER 0 +%define CONFIG_WMV3_CRYSTALHD_DECODER 0 +%define CONFIG_WMV3_VDPAU_DECODER 0 +%define CONFIG_WMV3IMAGE_DECODER 0 +%define CONFIG_WNV1_DECODER 0 +%define CONFIG_XAN_WC3_DECODER 0 +%define CONFIG_XAN_WC4_DECODER 0 +%define CONFIG_XBM_DECODER 0 +%define CONFIG_XFACE_DECODER 0 +%define CONFIG_XL_DECODER 0 +%define CONFIG_XPM_DECODER 0 +%define CONFIG_XWD_DECODER 0 +%define CONFIG_Y41P_DECODER 0 +%define CONFIG_YLC_DECODER 0 +%define CONFIG_YOP_DECODER 0 +%define CONFIG_YUV4_DECODER 0 +%define CONFIG_ZERO12V_DECODER 0 +%define CONFIG_ZEROCODEC_DECODER 0 +%define CONFIG_ZLIB_DECODER 0 +%define CONFIG_ZMBV_DECODER 0 +%define CONFIG_AAC_DECODER 0 +%define CONFIG_AAC_FIXED_DECODER 0 +%define CONFIG_AAC_LATM_DECODER 0 +%define CONFIG_AC3_DECODER 0 +%define CONFIG_AC3_FIXED_DECODER 0 +%define CONFIG_ALAC_DECODER 0 +%define CONFIG_ALS_DECODER 0 +%define CONFIG_AMRNB_DECODER 0 +%define CONFIG_AMRWB_DECODER 0 +%define CONFIG_APE_DECODER 0 +%define CONFIG_ATRAC1_DECODER 0 +%define CONFIG_ATRAC3_DECODER 0 +%define CONFIG_ATRAC3AL_DECODER 0 +%define CONFIG_ATRAC3P_DECODER 0 +%define CONFIG_ATRAC3PAL_DECODER 0 +%define CONFIG_BINKAUDIO_DCT_DECODER 0 +%define CONFIG_BINKAUDIO_RDFT_DECODER 0 +%define CONFIG_BMV_AUDIO_DECODER 0 +%define CONFIG_COOK_DECODER 0 +%define CONFIG_DCA_DECODER 0 +%define CONFIG_DOLBY_E_DECODER 0 +%define CONFIG_DSD_LSBF_DECODER 0 +%define CONFIG_DSD_MSBF_DECODER 0 +%define CONFIG_DSD_LSBF_PLANAR_DECODER 0 +%define CONFIG_DSD_MSBF_PLANAR_DECODER 0 +%define CONFIG_DSICINAUDIO_DECODER 0 +%define CONFIG_DSS_SP_DECODER 0 +%define CONFIG_DST_DECODER 0 +%define CONFIG_EAC3_DECODER 0 +%define CONFIG_EVRC_DECODER 0 +%define CONFIG_FFWAVESYNTH_DECODER 0 +%define CONFIG_G723_1_DECODER 0 +%define CONFIG_G729_DECODER 0 +%define CONFIG_GSM_DECODER 0 +%define CONFIG_GSM_MS_DECODER 0 +%define CONFIG_IAC_DECODER 0 +%define CONFIG_IMC_DECODER 0 +%define CONFIG_INTERPLAY_ACM_DECODER 0 +%define CONFIG_MACE3_DECODER 0 +%define CONFIG_MACE6_DECODER 0 +%define CONFIG_METASOUND_DECODER 0 +%define CONFIG_MLP_DECODER 0 +%define CONFIG_MP1_DECODER 0 +%define CONFIG_MP1FLOAT_DECODER 0 +%define CONFIG_MP2_DECODER 0 +%define CONFIG_MP2FLOAT_DECODER 0 +%define CONFIG_MP3_DECODER 0 +%define CONFIG_MP3FLOAT_DECODER 0 +%define CONFIG_MP3ADU_DECODER 0 +%define CONFIG_MP3ADUFLOAT_DECODER 0 +%define CONFIG_MP3ON4_DECODER 0 +%define CONFIG_MP3ON4FLOAT_DECODER 0 +%define CONFIG_MPC7_DECODER 0 +%define CONFIG_MPC8_DECODER 0 +%define CONFIG_NELLYMOSER_DECODER 0 +%define CONFIG_ON2AVC_DECODER 0 +%define CONFIG_OPUS_DECODER 0 +%define CONFIG_PAF_AUDIO_DECODER 0 +%define CONFIG_QCELP_DECODER 0 +%define CONFIG_QDM2_DECODER 0 +%define CONFIG_QDMC_DECODER 0 +%define CONFIG_RA_144_DECODER 0 +%define CONFIG_RA_288_DECODER 0 +%define CONFIG_RALF_DECODER 0 +%define CONFIG_SHORTEN_DECODER 0 +%define CONFIG_SIPR_DECODER 0 +%define CONFIG_SMACKAUD_DECODER 0 +%define CONFIG_SONIC_DECODER 0 +%define CONFIG_TAK_DECODER 0 +%define CONFIG_TRUEHD_DECODER 0 +%define CONFIG_TRUESPEECH_DECODER 0 +%define CONFIG_TTA_DECODER 0 +%define CONFIG_TWINVQ_DECODER 0 +%define CONFIG_VMDAUDIO_DECODER 0 +%define CONFIG_VORBIS_DECODER 0 +%define CONFIG_WAVPACK_DECODER 0 +%define CONFIG_WMALOSSLESS_DECODER 0 +%define CONFIG_WMAPRO_DECODER 0 +%define CONFIG_WMAV1_DECODER 0 +%define CONFIG_WMAV2_DECODER 0 +%define CONFIG_WMAVOICE_DECODER 0 +%define CONFIG_WS_SND1_DECODER 0 +%define CONFIG_XMA1_DECODER 0 +%define CONFIG_XMA2_DECODER 0 +%define CONFIG_PCM_ALAW_DECODER 0 +%define CONFIG_PCM_BLURAY_DECODER 0 +%define CONFIG_PCM_DVD_DECODER 0 +%define CONFIG_PCM_F16LE_DECODER 0 +%define CONFIG_PCM_F24LE_DECODER 0 +%define CONFIG_PCM_F32BE_DECODER 0 +%define CONFIG_PCM_F32LE_DECODER 0 +%define CONFIG_PCM_F64BE_DECODER 0 +%define CONFIG_PCM_F64LE_DECODER 0 +%define CONFIG_PCM_LXF_DECODER 0 +%define CONFIG_PCM_MULAW_DECODER 0 +%define CONFIG_PCM_S8_DECODER 0 +%define CONFIG_PCM_S8_PLANAR_DECODER 0 +%define CONFIG_PCM_S16BE_DECODER 0 +%define CONFIG_PCM_S16BE_PLANAR_DECODER 0 +%define CONFIG_PCM_S16LE_DECODER 0 +%define CONFIG_PCM_S16LE_PLANAR_DECODER 0 +%define CONFIG_PCM_S24BE_DECODER 0 +%define CONFIG_PCM_S24DAUD_DECODER 0 +%define CONFIG_PCM_S24LE_DECODER 0 +%define CONFIG_PCM_S24LE_PLANAR_DECODER 0 +%define CONFIG_PCM_S32BE_DECODER 0 +%define CONFIG_PCM_S32LE_DECODER 0 +%define CONFIG_PCM_S32LE_PLANAR_DECODER 0 +%define CONFIG_PCM_S64BE_DECODER 0 +%define CONFIG_PCM_S64LE_DECODER 0 +%define CONFIG_PCM_U8_DECODER 0 +%define CONFIG_PCM_U16BE_DECODER 0 +%define CONFIG_PCM_U16LE_DECODER 0 +%define CONFIG_PCM_U24BE_DECODER 0 +%define CONFIG_PCM_U24LE_DECODER 0 +%define CONFIG_PCM_U32BE_DECODER 0 +%define CONFIG_PCM_U32LE_DECODER 0 +%define CONFIG_PCM_ZORK_DECODER 0 +%define CONFIG_GREMLIN_DPCM_DECODER 0 +%define CONFIG_INTERPLAY_DPCM_DECODER 0 +%define CONFIG_ROQ_DPCM_DECODER 0 +%define CONFIG_SOL_DPCM_DECODER 0 +%define CONFIG_XAN_DPCM_DECODER 0 +%define CONFIG_ADPCM_4XM_DECODER 0 +%define CONFIG_ADPCM_ADX_DECODER 0 +%define CONFIG_ADPCM_AFC_DECODER 0 +%define CONFIG_ADPCM_AICA_DECODER 0 +%define CONFIG_ADPCM_CT_DECODER 0 +%define CONFIG_ADPCM_DTK_DECODER 0 +%define CONFIG_ADPCM_EA_DECODER 0 +%define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 +%define CONFIG_ADPCM_EA_R1_DECODER 0 +%define CONFIG_ADPCM_EA_R2_DECODER 0 +%define CONFIG_ADPCM_EA_R3_DECODER 0 +%define CONFIG_ADPCM_EA_XAS_DECODER 0 +%define CONFIG_ADPCM_G722_DECODER 0 +%define CONFIG_ADPCM_G726_DECODER 0 +%define CONFIG_ADPCM_G726LE_DECODER 0 +%define CONFIG_ADPCM_IMA_AMV_DECODER 0 +%define CONFIG_ADPCM_IMA_APC_DECODER 0 +%define CONFIG_ADPCM_IMA_DAT4_DECODER 0 +%define CONFIG_ADPCM_IMA_DK3_DECODER 0 +%define CONFIG_ADPCM_IMA_DK4_DECODER 0 +%define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 +%define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 +%define CONFIG_ADPCM_IMA_ISS_DECODER 0 +%define CONFIG_ADPCM_IMA_OKI_DECODER 0 +%define CONFIG_ADPCM_IMA_QT_DECODER 0 +%define CONFIG_ADPCM_IMA_RAD_DECODER 0 +%define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 +%define CONFIG_ADPCM_IMA_WAV_DECODER 0 +%define CONFIG_ADPCM_IMA_WS_DECODER 0 +%define CONFIG_ADPCM_MS_DECODER 0 +%define CONFIG_ADPCM_MTAF_DECODER 0 +%define CONFIG_ADPCM_PSX_DECODER 0 +%define CONFIG_ADPCM_SBPRO_2_DECODER 0 +%define CONFIG_ADPCM_SBPRO_3_DECODER 0 +%define CONFIG_ADPCM_SBPRO_4_DECODER 0 +%define CONFIG_ADPCM_SWF_DECODER 0 +%define CONFIG_ADPCM_THP_DECODER 0 +%define CONFIG_ADPCM_THP_LE_DECODER 0 +%define CONFIG_ADPCM_VIMA_DECODER 0 +%define CONFIG_ADPCM_XA_DECODER 0 +%define CONFIG_ADPCM_YAMAHA_DECODER 0 +%define CONFIG_SSA_DECODER 0 +%define CONFIG_ASS_DECODER 0 +%define CONFIG_CCAPTION_DECODER 0 +%define CONFIG_DVBSUB_DECODER 0 +%define CONFIG_DVDSUB_DECODER 0 +%define CONFIG_JACOSUB_DECODER 0 +%define CONFIG_MICRODVD_DECODER 0 +%define CONFIG_MOVTEXT_DECODER 0 +%define CONFIG_MPL2_DECODER 0 +%define CONFIG_PGSSUB_DECODER 0 +%define CONFIG_PJS_DECODER 0 +%define CONFIG_REALTEXT_DECODER 0 +%define CONFIG_SAMI_DECODER 0 +%define CONFIG_SRT_DECODER 0 +%define CONFIG_STL_DECODER 0 +%define CONFIG_SUBRIP_DECODER 0 +%define CONFIG_SUBVIEWER_DECODER 0 +%define CONFIG_SUBVIEWER1_DECODER 0 +%define CONFIG_TEXT_DECODER 0 +%define CONFIG_VPLAYER_DECODER 0 +%define CONFIG_WEBVTT_DECODER 0 +%define CONFIG_XSUB_DECODER 0 +%define CONFIG_AAC_AT_DECODER 0 +%define CONFIG_AC3_AT_DECODER 0 +%define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 +%define CONFIG_ALAC_AT_DECODER 0 +%define CONFIG_AMR_NB_AT_DECODER 0 +%define CONFIG_EAC3_AT_DECODER 0 +%define CONFIG_GSM_MS_AT_DECODER 0 +%define CONFIG_ILBC_AT_DECODER 0 +%define CONFIG_MP1_AT_DECODER 0 +%define CONFIG_MP2_AT_DECODER 0 +%define CONFIG_MP3_AT_DECODER 0 +%define CONFIG_PCM_ALAW_AT_DECODER 0 +%define CONFIG_PCM_MULAW_AT_DECODER 0 +%define CONFIG_QDMC_AT_DECODER 0 +%define CONFIG_QDM2_AT_DECODER 0 +%define CONFIG_LIBCELT_DECODER 0 +%define CONFIG_LIBFDK_AAC_DECODER 0 +%define CONFIG_LIBGSM_DECODER 0 +%define CONFIG_LIBGSM_MS_DECODER 0 +%define CONFIG_LIBILBC_DECODER 0 +%define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 +%define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 +%define CONFIG_LIBOPENJPEG_DECODER 0 +%define CONFIG_LIBOPUS_DECODER 0 +%define CONFIG_LIBRSVG_DECODER 0 +%define CONFIG_LIBSPEEX_DECODER 0 +%define CONFIG_LIBVORBIS_DECODER 0 +%define CONFIG_LIBVPX_VP8_DECODER 0 +%define CONFIG_LIBVPX_VP9_DECODER 0 +%define CONFIG_LIBZVBI_TELETEXT_DECODER 0 +%define CONFIG_BINTEXT_DECODER 0 +%define CONFIG_XBIN_DECODER 0 +%define CONFIG_IDF_DECODER 0 +%define CONFIG_LIBOPENH264_DECODER 0 +%define CONFIG_H264_CUVID_DECODER 0 +%define CONFIG_HEVC_CUVID_DECODER 0 +%define CONFIG_HEVC_MEDIACODEC_DECODER 0 +%define CONFIG_MJPEG_CUVID_DECODER 0 +%define CONFIG_MPEG1_CUVID_DECODER 0 +%define CONFIG_MPEG2_CUVID_DECODER 0 +%define CONFIG_MPEG4_CUVID_DECODER 0 +%define CONFIG_MPEG4_MEDIACODEC_DECODER 0 +%define CONFIG_VC1_CUVID_DECODER 0 +%define CONFIG_VP8_CUVID_DECODER 0 +%define CONFIG_VP8_MEDIACODEC_DECODER 0 +%define CONFIG_VP8_QSV_DECODER 0 +%define CONFIG_VP9_CUVID_DECODER 0 +%define CONFIG_VP9_MEDIACODEC_DECODER 0 +%define CONFIG_AA_DEMUXER 0 +%define CONFIG_AAC_DEMUXER 0 +%define CONFIG_AC3_DEMUXER 0 +%define CONFIG_ACM_DEMUXER 0 +%define CONFIG_ACT_DEMUXER 0 +%define CONFIG_ADF_DEMUXER 0 +%define CONFIG_ADP_DEMUXER 0 +%define CONFIG_ADS_DEMUXER 0 +%define CONFIG_ADX_DEMUXER 0 +%define CONFIG_AEA_DEMUXER 0 +%define CONFIG_AFC_DEMUXER 0 +%define CONFIG_AIFF_DEMUXER 0 +%define CONFIG_AIX_DEMUXER 0 +%define CONFIG_AMR_DEMUXER 0 +%define CONFIG_ANM_DEMUXER 0 +%define CONFIG_APC_DEMUXER 0 +%define CONFIG_APE_DEMUXER 0 +%define CONFIG_APNG_DEMUXER 0 +%define CONFIG_AQTITLE_DEMUXER 0 +%define CONFIG_ASF_DEMUXER 0 +%define CONFIG_ASF_O_DEMUXER 0 +%define CONFIG_ASS_DEMUXER 0 +%define CONFIG_AST_DEMUXER 0 +%define CONFIG_AU_DEMUXER 0 +%define CONFIG_AVI_DEMUXER 0 +%define CONFIG_AVISYNTH_DEMUXER 0 +%define CONFIG_AVR_DEMUXER 0 +%define CONFIG_AVS_DEMUXER 0 +%define CONFIG_BETHSOFTVID_DEMUXER 0 +%define CONFIG_BFI_DEMUXER 0 +%define CONFIG_BINTEXT_DEMUXER 0 +%define CONFIG_BINK_DEMUXER 0 +%define CONFIG_BIT_DEMUXER 0 +%define CONFIG_BMV_DEMUXER 0 +%define CONFIG_BFSTM_DEMUXER 0 +%define CONFIG_BRSTM_DEMUXER 0 +%define CONFIG_BOA_DEMUXER 0 +%define CONFIG_C93_DEMUXER 0 +%define CONFIG_CAF_DEMUXER 0 +%define CONFIG_CAVSVIDEO_DEMUXER 0 +%define CONFIG_CDG_DEMUXER 0 +%define CONFIG_CDXL_DEMUXER 0 +%define CONFIG_CINE_DEMUXER 0 +%define CONFIG_CONCAT_DEMUXER 0 +%define CONFIG_DASH_DEMUXER 0 +%define CONFIG_DATA_DEMUXER 0 +%define CONFIG_DAUD_DEMUXER 0 +%define CONFIG_DCSTR_DEMUXER 0 +%define CONFIG_DFA_DEMUXER 0 +%define CONFIG_DIRAC_DEMUXER 0 +%define CONFIG_DNXHD_DEMUXER 0 +%define CONFIG_DSF_DEMUXER 0 +%define CONFIG_DSICIN_DEMUXER 0 +%define CONFIG_DSS_DEMUXER 0 +%define CONFIG_DTS_DEMUXER 0 +%define CONFIG_DTSHD_DEMUXER 0 +%define CONFIG_DV_DEMUXER 0 +%define CONFIG_DVBSUB_DEMUXER 0 +%define CONFIG_DVBTXT_DEMUXER 0 +%define CONFIG_DXA_DEMUXER 0 +%define CONFIG_EA_DEMUXER 0 +%define CONFIG_EA_CDATA_DEMUXER 0 +%define CONFIG_EAC3_DEMUXER 0 +%define CONFIG_EPAF_DEMUXER 0 +%define CONFIG_FFM_DEMUXER 0 +%define CONFIG_FFMETADATA_DEMUXER 0 +%define CONFIG_FILMSTRIP_DEMUXER 0 +%define CONFIG_FITS_DEMUXER 0 +%define CONFIG_FLAC_DEMUXER 0 +%define CONFIG_FLIC_DEMUXER 0 +%define CONFIG_FLV_DEMUXER 0 +%define CONFIG_LIVE_FLV_DEMUXER 0 +%define CONFIG_FOURXM_DEMUXER 0 +%define CONFIG_FRM_DEMUXER 0 +%define CONFIG_FSB_DEMUXER 0 +%define CONFIG_G722_DEMUXER 0 +%define CONFIG_G723_1_DEMUXER 0 +%define CONFIG_G726_DEMUXER 0 +%define CONFIG_G726LE_DEMUXER 0 +%define CONFIG_G729_DEMUXER 0 +%define CONFIG_GDV_DEMUXER 0 +%define CONFIG_GENH_DEMUXER 0 +%define CONFIG_GIF_DEMUXER 0 +%define CONFIG_GSM_DEMUXER 0 +%define CONFIG_GXF_DEMUXER 0 +%define CONFIG_H261_DEMUXER 0 +%define CONFIG_H263_DEMUXER 0 +%define CONFIG_H264_DEMUXER 0 +%define CONFIG_HEVC_DEMUXER 0 +%define CONFIG_HLS_DEMUXER 0 +%define CONFIG_HNM_DEMUXER 0 +%define CONFIG_ICO_DEMUXER 0 +%define CONFIG_IDCIN_DEMUXER 0 +%define CONFIG_IDF_DEMUXER 0 +%define CONFIG_IFF_DEMUXER 0 +%define CONFIG_ILBC_DEMUXER 0 +%define CONFIG_IMAGE2_DEMUXER 0 +%define CONFIG_IMAGE2PIPE_DEMUXER 0 +%define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 +%define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 +%define CONFIG_INGENIENT_DEMUXER 0 +%define CONFIG_IPMOVIE_DEMUXER 0 +%define CONFIG_IRCAM_DEMUXER 0 +%define CONFIG_ISS_DEMUXER 0 +%define CONFIG_IV8_DEMUXER 0 +%define CONFIG_IVF_DEMUXER 0 +%define CONFIG_IVR_DEMUXER 0 +%define CONFIG_JACOSUB_DEMUXER 0 +%define CONFIG_JV_DEMUXER 0 +%define CONFIG_LMLM4_DEMUXER 0 +%define CONFIG_LOAS_DEMUXER 0 +%define CONFIG_LRC_DEMUXER 0 +%define CONFIG_LVF_DEMUXER 0 +%define CONFIG_LXF_DEMUXER 0 +%define CONFIG_M4V_DEMUXER 0 +%define CONFIG_MATROSKA_DEMUXER 0 +%define CONFIG_MGSTS_DEMUXER 0 +%define CONFIG_MICRODVD_DEMUXER 0 +%define CONFIG_MJPEG_DEMUXER 0 +%define CONFIG_MJPEG_2000_DEMUXER 0 +%define CONFIG_MLP_DEMUXER 0 +%define CONFIG_MLV_DEMUXER 0 +%define CONFIG_MM_DEMUXER 0 +%define CONFIG_MMF_DEMUXER 0 +%define CONFIG_MOV_DEMUXER 0 +%define CONFIG_MP3_DEMUXER 0 +%define CONFIG_MPC_DEMUXER 0 +%define CONFIG_MPC8_DEMUXER 0 +%define CONFIG_MPEGPS_DEMUXER 0 +%define CONFIG_MPEGTS_DEMUXER 0 +%define CONFIG_MPEGTSRAW_DEMUXER 0 +%define CONFIG_MPEGVIDEO_DEMUXER 0 +%define CONFIG_MPJPEG_DEMUXER 0 +%define CONFIG_MPL2_DEMUXER 0 +%define CONFIG_MPSUB_DEMUXER 0 +%define CONFIG_MSF_DEMUXER 0 +%define CONFIG_MSNWC_TCP_DEMUXER 0 +%define CONFIG_MTAF_DEMUXER 0 +%define CONFIG_MTV_DEMUXER 0 +%define CONFIG_MUSX_DEMUXER 0 +%define CONFIG_MV_DEMUXER 0 +%define CONFIG_MVI_DEMUXER 0 +%define CONFIG_MXF_DEMUXER 0 +%define CONFIG_MXG_DEMUXER 0 +%define CONFIG_NC_DEMUXER 0 +%define CONFIG_NISTSPHERE_DEMUXER 0 +%define CONFIG_NSV_DEMUXER 0 +%define CONFIG_NUT_DEMUXER 0 +%define CONFIG_NUV_DEMUXER 0 +%define CONFIG_OGG_DEMUXER 0 +%define CONFIG_OMA_DEMUXER 0 +%define CONFIG_PAF_DEMUXER 0 +%define CONFIG_PCM_ALAW_DEMUXER 0 +%define CONFIG_PCM_MULAW_DEMUXER 0 +%define CONFIG_PCM_F64BE_DEMUXER 0 +%define CONFIG_PCM_F64LE_DEMUXER 0 +%define CONFIG_PCM_F32BE_DEMUXER 0 +%define CONFIG_PCM_F32LE_DEMUXER 0 +%define CONFIG_PCM_S32BE_DEMUXER 0 +%define CONFIG_PCM_S32LE_DEMUXER 0 +%define CONFIG_PCM_S24BE_DEMUXER 0 +%define CONFIG_PCM_S24LE_DEMUXER 0 +%define CONFIG_PCM_S16BE_DEMUXER 0 +%define CONFIG_PCM_S16LE_DEMUXER 0 +%define CONFIG_PCM_S8_DEMUXER 0 +%define CONFIG_PCM_U32BE_DEMUXER 0 +%define CONFIG_PCM_U32LE_DEMUXER 0 +%define CONFIG_PCM_U24BE_DEMUXER 0 +%define CONFIG_PCM_U24LE_DEMUXER 0 +%define CONFIG_PCM_U16BE_DEMUXER 0 +%define CONFIG_PCM_U16LE_DEMUXER 0 +%define CONFIG_PCM_U8_DEMUXER 0 +%define CONFIG_PJS_DEMUXER 0 +%define CONFIG_PMP_DEMUXER 0 +%define CONFIG_PVA_DEMUXER 0 +%define CONFIG_PVF_DEMUXER 0 +%define CONFIG_QCP_DEMUXER 0 +%define CONFIG_R3D_DEMUXER 0 +%define CONFIG_RAWVIDEO_DEMUXER 0 +%define CONFIG_REALTEXT_DEMUXER 0 +%define CONFIG_REDSPARK_DEMUXER 0 +%define CONFIG_RL2_DEMUXER 0 +%define CONFIG_RM_DEMUXER 0 +%define CONFIG_ROQ_DEMUXER 0 +%define CONFIG_RPL_DEMUXER 0 +%define CONFIG_RSD_DEMUXER 0 +%define CONFIG_RSO_DEMUXER 0 +%define CONFIG_RTP_DEMUXER 0 +%define CONFIG_RTSP_DEMUXER 0 +%define CONFIG_S337M_DEMUXER 0 +%define CONFIG_SAMI_DEMUXER 0 +%define CONFIG_SAP_DEMUXER 0 +%define CONFIG_SBG_DEMUXER 0 +%define CONFIG_SCC_DEMUXER 0 +%define CONFIG_SDP_DEMUXER 0 +%define CONFIG_SDR2_DEMUXER 0 +%define CONFIG_SDS_DEMUXER 0 +%define CONFIG_SDX_DEMUXER 0 +%define CONFIG_SEGAFILM_DEMUXER 0 +%define CONFIG_SHORTEN_DEMUXER 0 +%define CONFIG_SIFF_DEMUXER 0 +%define CONFIG_SLN_DEMUXER 0 +%define CONFIG_SMACKER_DEMUXER 0 +%define CONFIG_SMJPEG_DEMUXER 0 +%define CONFIG_SMUSH_DEMUXER 0 +%define CONFIG_SOL_DEMUXER 0 +%define CONFIG_SOX_DEMUXER 0 +%define CONFIG_SPDIF_DEMUXER 0 +%define CONFIG_SRT_DEMUXER 0 +%define CONFIG_STR_DEMUXER 0 +%define CONFIG_STL_DEMUXER 0 +%define CONFIG_SUBVIEWER1_DEMUXER 0 +%define CONFIG_SUBVIEWER_DEMUXER 0 +%define CONFIG_SUP_DEMUXER 0 +%define CONFIG_SVAG_DEMUXER 0 +%define CONFIG_SWF_DEMUXER 0 +%define CONFIG_TAK_DEMUXER 0 +%define CONFIG_TEDCAPTIONS_DEMUXER 0 +%define CONFIG_THP_DEMUXER 0 +%define CONFIG_THREEDOSTR_DEMUXER 0 +%define CONFIG_TIERTEXSEQ_DEMUXER 0 +%define CONFIG_TMV_DEMUXER 0 +%define CONFIG_TRUEHD_DEMUXER 0 +%define CONFIG_TTA_DEMUXER 0 +%define CONFIG_TXD_DEMUXER 0 +%define CONFIG_TTY_DEMUXER 0 +%define CONFIG_V210_DEMUXER 0 +%define CONFIG_V210X_DEMUXER 0 +%define CONFIG_VAG_DEMUXER 0 +%define CONFIG_VC1_DEMUXER 0 +%define CONFIG_VC1T_DEMUXER 0 +%define CONFIG_VIVO_DEMUXER 0 +%define CONFIG_VMD_DEMUXER 0 +%define CONFIG_VOBSUB_DEMUXER 0 +%define CONFIG_VOC_DEMUXER 0 +%define CONFIG_VPK_DEMUXER 0 +%define CONFIG_VPLAYER_DEMUXER 0 +%define CONFIG_VQF_DEMUXER 0 +%define CONFIG_W64_DEMUXER 0 +%define CONFIG_WAV_DEMUXER 0 +%define CONFIG_WC3_DEMUXER 0 +%define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 +%define CONFIG_WEBVTT_DEMUXER 0 +%define CONFIG_WSAUD_DEMUXER 0 +%define CONFIG_WSD_DEMUXER 0 +%define CONFIG_WSVQA_DEMUXER 0 +%define CONFIG_WTV_DEMUXER 0 +%define CONFIG_WVE_DEMUXER 0 +%define CONFIG_WV_DEMUXER 0 +%define CONFIG_XA_DEMUXER 0 +%define CONFIG_XBIN_DEMUXER 0 +%define CONFIG_XMV_DEMUXER 0 +%define CONFIG_XVAG_DEMUXER 0 +%define CONFIG_XWMA_DEMUXER 0 +%define CONFIG_YOP_DEMUXER 0 +%define CONFIG_YUV4MPEGPIPE_DEMUXER 0 +%define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 +%define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 +%define CONFIG_LIBGME_DEMUXER 0 +%define CONFIG_LIBMODPLUG_DEMUXER 0 +%define CONFIG_LIBOPENMPT_DEMUXER 0 +%define CONFIG_A64MULTI_ENCODER 0 +%define CONFIG_A64MULTI5_ENCODER 0 +%define CONFIG_ALIAS_PIX_ENCODER 0 +%define CONFIG_AMV_ENCODER 0 +%define CONFIG_APNG_ENCODER 0 +%define CONFIG_ASV1_ENCODER 0 +%define CONFIG_ASV2_ENCODER 0 +%define CONFIG_AVRP_ENCODER 0 +%define CONFIG_AVUI_ENCODER 0 +%define CONFIG_AYUV_ENCODER 0 +%define CONFIG_BMP_ENCODER 0 +%define CONFIG_CINEPAK_ENCODER 0 +%define CONFIG_CLJR_ENCODER 0 +%define CONFIG_COMFORTNOISE_ENCODER 0 +%define CONFIG_DNXHD_ENCODER 0 +%define CONFIG_DPX_ENCODER 0 +%define CONFIG_DVVIDEO_ENCODER 0 +%define CONFIG_FFV1_ENCODER 0 +%define CONFIG_FFVHUFF_ENCODER 0 +%define CONFIG_FITS_ENCODER 0 +%define CONFIG_FLASHSV_ENCODER 0 +%define CONFIG_FLASHSV2_ENCODER 0 +%define CONFIG_FLV_ENCODER 0 +%define CONFIG_GIF_ENCODER 0 +%define CONFIG_H261_ENCODER 0 +%define CONFIG_H263_ENCODER 0 +%define CONFIG_H263P_ENCODER 0 +%define CONFIG_HAP_ENCODER 0 +%define CONFIG_HUFFYUV_ENCODER 0 +%define CONFIG_JPEG2000_ENCODER 0 +%define CONFIG_JPEGLS_ENCODER 0 +%define CONFIG_LJPEG_ENCODER 0 +%define CONFIG_MJPEG_ENCODER 0 +%define CONFIG_MPEG1VIDEO_ENCODER 0 +%define CONFIG_MPEG2VIDEO_ENCODER 0 +%define CONFIG_MPEG4_ENCODER 0 +%define CONFIG_MSMPEG4V2_ENCODER 0 +%define CONFIG_MSMPEG4V3_ENCODER 0 +%define CONFIG_MSVIDEO1_ENCODER 0 +%define CONFIG_PAM_ENCODER 0 +%define CONFIG_PBM_ENCODER 0 +%define CONFIG_PCX_ENCODER 0 +%define CONFIG_PGM_ENCODER 0 +%define CONFIG_PGMYUV_ENCODER 0 +%define CONFIG_PNG_ENCODER 0 +%define CONFIG_PPM_ENCODER 0 +%define CONFIG_PRORES_ENCODER 0 +%define CONFIG_PRORES_AW_ENCODER 0 +%define CONFIG_PRORES_KS_ENCODER 0 +%define CONFIG_QTRLE_ENCODER 0 +%define CONFIG_R10K_ENCODER 0 +%define CONFIG_R210_ENCODER 0 +%define CONFIG_RAWVIDEO_ENCODER 0 +%define CONFIG_ROQ_ENCODER 0 +%define CONFIG_RV10_ENCODER 0 +%define CONFIG_RV20_ENCODER 0 +%define CONFIG_S302M_ENCODER 0 +%define CONFIG_SGI_ENCODER 0 +%define CONFIG_SNOW_ENCODER 0 +%define CONFIG_SUNRAST_ENCODER 0 +%define CONFIG_SVQ1_ENCODER 0 +%define CONFIG_TARGA_ENCODER 0 +%define CONFIG_TIFF_ENCODER 0 +%define CONFIG_UTVIDEO_ENCODER 0 +%define CONFIG_V210_ENCODER 0 +%define CONFIG_V308_ENCODER 0 +%define CONFIG_V408_ENCODER 0 +%define CONFIG_V410_ENCODER 0 +%define CONFIG_VC2_ENCODER 0 +%define CONFIG_WRAPPED_AVFRAME_ENCODER 0 +%define CONFIG_WMV1_ENCODER 0 +%define CONFIG_WMV2_ENCODER 0 +%define CONFIG_XBM_ENCODER 0 +%define CONFIG_XFACE_ENCODER 0 +%define CONFIG_XWD_ENCODER 0 +%define CONFIG_Y41P_ENCODER 0 +%define CONFIG_YUV4_ENCODER 0 +%define CONFIG_ZLIB_ENCODER 0 +%define CONFIG_ZMBV_ENCODER 0 +%define CONFIG_AAC_ENCODER 0 +%define CONFIG_AC3_ENCODER 0 +%define CONFIG_AC3_FIXED_ENCODER 0 +%define CONFIG_ALAC_ENCODER 0 +%define CONFIG_DCA_ENCODER 0 +%define CONFIG_EAC3_ENCODER 0 +%define CONFIG_FLAC_ENCODER 0 +%define CONFIG_G723_1_ENCODER 0 +%define CONFIG_MLP_ENCODER 0 +%define CONFIG_MP2_ENCODER 0 +%define CONFIG_MP2FIXED_ENCODER 0 +%define CONFIG_NELLYMOSER_ENCODER 0 +%define CONFIG_OPUS_ENCODER 0 +%define CONFIG_RA_144_ENCODER 0 +%define CONFIG_SONIC_ENCODER 0 +%define CONFIG_SONIC_LS_ENCODER 0 +%define CONFIG_TRUEHD_ENCODER 0 +%define CONFIG_TTA_ENCODER 0 +%define CONFIG_VORBIS_ENCODER 0 +%define CONFIG_WAVPACK_ENCODER 0 +%define CONFIG_WMAV1_ENCODER 0 +%define CONFIG_WMAV2_ENCODER 0 +%define CONFIG_PCM_ALAW_ENCODER 0 +%define CONFIG_PCM_F32BE_ENCODER 0 +%define CONFIG_PCM_F32LE_ENCODER 0 +%define CONFIG_PCM_F64BE_ENCODER 0 +%define CONFIG_PCM_F64LE_ENCODER 0 +%define CONFIG_PCM_MULAW_ENCODER 0 +%define CONFIG_PCM_S8_ENCODER 0 +%define CONFIG_PCM_S8_PLANAR_ENCODER 0 +%define CONFIG_PCM_S16BE_ENCODER 0 +%define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 +%define CONFIG_PCM_S16LE_ENCODER 0 +%define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 +%define CONFIG_PCM_S24BE_ENCODER 0 +%define CONFIG_PCM_S24DAUD_ENCODER 0 +%define CONFIG_PCM_S24LE_ENCODER 0 +%define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 +%define CONFIG_PCM_S32BE_ENCODER 0 +%define CONFIG_PCM_S32LE_ENCODER 0 +%define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 +%define CONFIG_PCM_S64BE_ENCODER 0 +%define CONFIG_PCM_S64LE_ENCODER 0 +%define CONFIG_PCM_U8_ENCODER 0 +%define CONFIG_PCM_U16BE_ENCODER 0 +%define CONFIG_PCM_U16LE_ENCODER 0 +%define CONFIG_PCM_U24BE_ENCODER 0 +%define CONFIG_PCM_U24LE_ENCODER 0 +%define CONFIG_PCM_U32BE_ENCODER 0 +%define CONFIG_PCM_U32LE_ENCODER 0 +%define CONFIG_ROQ_DPCM_ENCODER 0 +%define CONFIG_ADPCM_ADX_ENCODER 0 +%define CONFIG_ADPCM_G722_ENCODER 0 +%define CONFIG_ADPCM_G726_ENCODER 0 +%define CONFIG_ADPCM_G726LE_ENCODER 0 +%define CONFIG_ADPCM_IMA_QT_ENCODER 0 +%define CONFIG_ADPCM_IMA_WAV_ENCODER 0 +%define CONFIG_ADPCM_MS_ENCODER 0 +%define CONFIG_ADPCM_SWF_ENCODER 0 +%define CONFIG_ADPCM_YAMAHA_ENCODER 0 +%define CONFIG_SSA_ENCODER 0 +%define CONFIG_ASS_ENCODER 0 +%define CONFIG_DVBSUB_ENCODER 0 +%define CONFIG_DVDSUB_ENCODER 0 +%define CONFIG_MOVTEXT_ENCODER 0 +%define CONFIG_SRT_ENCODER 0 +%define CONFIG_SUBRIP_ENCODER 0 +%define CONFIG_TEXT_ENCODER 0 +%define CONFIG_WEBVTT_ENCODER 0 +%define CONFIG_XSUB_ENCODER 0 +%define CONFIG_AAC_AT_ENCODER 0 +%define CONFIG_ALAC_AT_ENCODER 0 +%define CONFIG_ILBC_AT_ENCODER 0 +%define CONFIG_PCM_ALAW_AT_ENCODER 0 +%define CONFIG_PCM_MULAW_AT_ENCODER 0 +%define CONFIG_LIBFDK_AAC_ENCODER 0 +%define CONFIG_LIBGSM_ENCODER 0 +%define CONFIG_LIBGSM_MS_ENCODER 0 +%define CONFIG_LIBILBC_ENCODER 0 +%define CONFIG_LIBMP3LAME_ENCODER 0 +%define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 +%define CONFIG_LIBOPENJPEG_ENCODER 0 +%define CONFIG_LIBOPUS_ENCODER 0 +%define CONFIG_LIBSHINE_ENCODER 0 +%define CONFIG_LIBSPEEX_ENCODER 0 +%define CONFIG_LIBTHEORA_ENCODER 0 +%define CONFIG_LIBTWOLAME_ENCODER 0 +%define CONFIG_LIBVO_AMRWBENC_ENCODER 0 +%define CONFIG_LIBVORBIS_ENCODER 0 +%define CONFIG_LIBVPX_VP8_ENCODER 0 +%define CONFIG_LIBVPX_VP9_ENCODER 0 +%define CONFIG_LIBWAVPACK_ENCODER 0 +%define CONFIG_LIBWEBP_ANIM_ENCODER 0 +%define CONFIG_LIBWEBP_ENCODER 0 +%define CONFIG_LIBX262_ENCODER 0 +%define CONFIG_LIBX264_ENCODER 0 +%define CONFIG_LIBX264RGB_ENCODER 0 +%define CONFIG_LIBX265_ENCODER 0 +%define CONFIG_LIBXAVS_ENCODER 0 +%define CONFIG_LIBXVID_ENCODER 0 +%define CONFIG_H263_V4L2M2M_ENCODER 0 +%define CONFIG_LIBOPENH264_ENCODER 0 +%define CONFIG_H264_NVENC_ENCODER 0 +%define CONFIG_H264_OMX_ENCODER 0 +%define CONFIG_H264_QSV_ENCODER 0 +%define CONFIG_H264_V4L2M2M_ENCODER 0 +%define CONFIG_H264_VAAPI_ENCODER 0 +%define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 +%define CONFIG_NVENC_ENCODER 0 +%define CONFIG_NVENC_H264_ENCODER 0 +%define CONFIG_NVENC_HEVC_ENCODER 0 +%define CONFIG_HEVC_NVENC_ENCODER 0 +%define CONFIG_HEVC_QSV_ENCODER 0 +%define CONFIG_HEVC_V4L2M2M_ENCODER 0 +%define CONFIG_HEVC_VAAPI_ENCODER 0 +%define CONFIG_LIBKVAZAAR_ENCODER 0 +%define CONFIG_MJPEG_VAAPI_ENCODER 0 +%define CONFIG_MPEG2_QSV_ENCODER 0 +%define CONFIG_MPEG2_VAAPI_ENCODER 0 +%define CONFIG_MPEG4_V4L2M2M_ENCODER 0 +%define CONFIG_VP8_V4L2M2M_ENCODER 0 +%define CONFIG_VP8_VAAPI_ENCODER 0 +%define CONFIG_VP9_VAAPI_ENCODER 0 +%define CONFIG_ABENCH_FILTER 0 +%define CONFIG_ACOMPRESSOR_FILTER 0 +%define CONFIG_ACOPY_FILTER 0 +%define CONFIG_ACROSSFADE_FILTER 0 +%define CONFIG_ACRUSHER_FILTER 0 +%define CONFIG_ADELAY_FILTER 0 +%define CONFIG_AECHO_FILTER 0 +%define CONFIG_AEMPHASIS_FILTER 0 +%define CONFIG_AEVAL_FILTER 0 +%define CONFIG_AFADE_FILTER 0 +%define CONFIG_AFFTFILT_FILTER 0 +%define CONFIG_AFIR_FILTER 0 +%define CONFIG_AFORMAT_FILTER 0 +%define CONFIG_AGATE_FILTER 0 +%define CONFIG_AINTERLEAVE_FILTER 0 +%define CONFIG_ALIMITER_FILTER 0 +%define CONFIG_ALLPASS_FILTER 0 +%define CONFIG_ALOOP_FILTER 0 +%define CONFIG_AMERGE_FILTER 0 +%define CONFIG_AMETADATA_FILTER 0 +%define CONFIG_AMIX_FILTER 0 +%define CONFIG_ANEQUALIZER_FILTER 0 +%define CONFIG_ANULL_FILTER 0 +%define CONFIG_APAD_FILTER 0 +%define CONFIG_APERMS_FILTER 0 +%define CONFIG_APHASER_FILTER 0 +%define CONFIG_APULSATOR_FILTER 0 +%define CONFIG_AREALTIME_FILTER 0 +%define CONFIG_ARESAMPLE_FILTER 0 +%define CONFIG_AREVERSE_FILTER 0 +%define CONFIG_ASELECT_FILTER 0 +%define CONFIG_ASENDCMD_FILTER 0 +%define CONFIG_ASETNSAMPLES_FILTER 0 +%define CONFIG_ASETPTS_FILTER 0 +%define CONFIG_ASETRATE_FILTER 0 +%define CONFIG_ASETTB_FILTER 0 +%define CONFIG_ASHOWINFO_FILTER 0 +%define CONFIG_ASIDEDATA_FILTER 0 +%define CONFIG_ASPLIT_FILTER 0 +%define CONFIG_ASTATS_FILTER 0 +%define CONFIG_ASTREAMSELECT_FILTER 0 +%define CONFIG_ATEMPO_FILTER 0 +%define CONFIG_ATRIM_FILTER 0 +%define CONFIG_AZMQ_FILTER 0 +%define CONFIG_BANDPASS_FILTER 0 +%define CONFIG_BANDREJECT_FILTER 0 +%define CONFIG_BASS_FILTER 0 +%define CONFIG_BIQUAD_FILTER 0 +%define CONFIG_BS2B_FILTER 0 +%define CONFIG_CHANNELMAP_FILTER 0 +%define CONFIG_CHANNELSPLIT_FILTER 0 +%define CONFIG_CHORUS_FILTER 0 +%define CONFIG_COMPAND_FILTER 0 +%define CONFIG_COMPENSATIONDELAY_FILTER 0 +%define CONFIG_CROSSFEED_FILTER 0 +%define CONFIG_CRYSTALIZER_FILTER 0 +%define CONFIG_DCSHIFT_FILTER 0 +%define CONFIG_DYNAUDNORM_FILTER 0 +%define CONFIG_EARWAX_FILTER 0 +%define CONFIG_EBUR128_FILTER 0 +%define CONFIG_EQUALIZER_FILTER 0 +%define CONFIG_EXTRASTEREO_FILTER 0 +%define CONFIG_FIREQUALIZER_FILTER 0 +%define CONFIG_FLANGER_FILTER 0 +%define CONFIG_HAAS_FILTER 0 +%define CONFIG_HDCD_FILTER 0 +%define CONFIG_HEADPHONE_FILTER 0 +%define CONFIG_HIGHPASS_FILTER 0 +%define CONFIG_JOIN_FILTER 0 +%define CONFIG_LADSPA_FILTER 0 +%define CONFIG_LOUDNORM_FILTER 0 +%define CONFIG_LOWPASS_FILTER 0 +%define CONFIG_PAN_FILTER 0 +%define CONFIG_REPLAYGAIN_FILTER 0 +%define CONFIG_RESAMPLE_FILTER 0 +%define CONFIG_RUBBERBAND_FILTER 0 +%define CONFIG_SIDECHAINCOMPRESS_FILTER 0 +%define CONFIG_SIDECHAINGATE_FILTER 0 +%define CONFIG_SILENCEDETECT_FILTER 0 +%define CONFIG_SILENCEREMOVE_FILTER 0 +%define CONFIG_SOFALIZER_FILTER 0 +%define CONFIG_STEREOTOOLS_FILTER 0 +%define CONFIG_STEREOWIDEN_FILTER 0 +%define CONFIG_SUPEREQUALIZER_FILTER 0 +%define CONFIG_SURROUND_FILTER 0 +%define CONFIG_TREBLE_FILTER 0 +%define CONFIG_TREMOLO_FILTER 0 +%define CONFIG_VIBRATO_FILTER 0 +%define CONFIG_VOLUME_FILTER 0 +%define CONFIG_VOLUMEDETECT_FILTER 0 +%define CONFIG_AEVALSRC_FILTER 0 +%define CONFIG_ANOISESRC_FILTER 0 +%define CONFIG_ANULLSRC_FILTER 0 +%define CONFIG_FLITE_FILTER 0 +%define CONFIG_SINE_FILTER 0 +%define CONFIG_ANULLSINK_FILTER 0 +%define CONFIG_ALPHAEXTRACT_FILTER 0 +%define CONFIG_ALPHAMERGE_FILTER 0 +%define CONFIG_ASS_FILTER 0 +%define CONFIG_ATADENOISE_FILTER 0 +%define CONFIG_AVGBLUR_FILTER 0 +%define CONFIG_BBOX_FILTER 0 +%define CONFIG_BENCH_FILTER 0 +%define CONFIG_BITPLANENOISE_FILTER 0 +%define CONFIG_BLACKDETECT_FILTER 0 +%define CONFIG_BLACKFRAME_FILTER 0 +%define CONFIG_BLEND_FILTER 0 +%define CONFIG_BOXBLUR_FILTER 0 +%define CONFIG_BWDIF_FILTER 0 +%define CONFIG_CHROMAKEY_FILTER 0 +%define CONFIG_CIESCOPE_FILTER 0 +%define CONFIG_CODECVIEW_FILTER 0 +%define CONFIG_COLORBALANCE_FILTER 0 +%define CONFIG_COLORCHANNELMIXER_FILTER 0 +%define CONFIG_COLORKEY_FILTER 0 +%define CONFIG_COLORLEVELS_FILTER 0 +%define CONFIG_COLORMATRIX_FILTER 0 +%define CONFIG_COLORSPACE_FILTER 0 +%define CONFIG_CONVOLUTION_FILTER 0 +%define CONFIG_CONVOLVE_FILTER 0 +%define CONFIG_COPY_FILTER 0 +%define CONFIG_COREIMAGE_FILTER 0 +%define CONFIG_COVER_RECT_FILTER 0 +%define CONFIG_CROP_FILTER 0 +%define CONFIG_CROPDETECT_FILTER 0 +%define CONFIG_CURVES_FILTER 0 +%define CONFIG_DATASCOPE_FILTER 0 +%define CONFIG_DCTDNOIZ_FILTER 0 +%define CONFIG_DEBAND_FILTER 0 +%define CONFIG_DECIMATE_FILTER 0 +%define CONFIG_DEFLATE_FILTER 0 +%define CONFIG_DEFLICKER_FILTER 0 +%define CONFIG_DEINTERLACE_QSV_FILTER 0 +%define CONFIG_DEINTERLACE_VAAPI_FILTER 0 +%define CONFIG_DEJUDDER_FILTER 0 +%define CONFIG_DELOGO_FILTER 0 +%define CONFIG_DESHAKE_FILTER 0 +%define CONFIG_DESPILL_FILTER 0 +%define CONFIG_DETELECINE_FILTER 0 +%define CONFIG_DILATION_FILTER 0 +%define CONFIG_DISPLACE_FILTER 0 +%define CONFIG_DOUBLEWEAVE_FILTER 0 +%define CONFIG_DRAWBOX_FILTER 0 +%define CONFIG_DRAWGRAPH_FILTER 0 +%define CONFIG_DRAWGRID_FILTER 0 +%define CONFIG_DRAWTEXT_FILTER 0 +%define CONFIG_EDGEDETECT_FILTER 0 +%define CONFIG_ELBG_FILTER 0 +%define CONFIG_EQ_FILTER 0 +%define CONFIG_EROSION_FILTER 0 +%define CONFIG_EXTRACTPLANES_FILTER 0 +%define CONFIG_FADE_FILTER 0 +%define CONFIG_FFTFILT_FILTER 0 +%define CONFIG_FIELD_FILTER 0 +%define CONFIG_FIELDHINT_FILTER 0 +%define CONFIG_FIELDMATCH_FILTER 0 +%define CONFIG_FIELDORDER_FILTER 0 +%define CONFIG_FIND_RECT_FILTER 0 +%define CONFIG_FLOODFILL_FILTER 0 +%define CONFIG_FORMAT_FILTER 0 +%define CONFIG_FPS_FILTER 0 +%define CONFIG_FRAMEPACK_FILTER 0 +%define CONFIG_FRAMERATE_FILTER 0 +%define CONFIG_FRAMESTEP_FILTER 0 +%define CONFIG_FREI0R_FILTER 0 +%define CONFIG_FSPP_FILTER 0 +%define CONFIG_GBLUR_FILTER 0 +%define CONFIG_GEQ_FILTER 0 +%define CONFIG_GRADFUN_FILTER 0 +%define CONFIG_HALDCLUT_FILTER 0 +%define CONFIG_HFLIP_FILTER 0 +%define CONFIG_HISTEQ_FILTER 0 +%define CONFIG_HISTOGRAM_FILTER 0 +%define CONFIG_HQDN3D_FILTER 0 +%define CONFIG_HQX_FILTER 0 +%define CONFIG_HSTACK_FILTER 0 +%define CONFIG_HUE_FILTER 0 +%define CONFIG_HWDOWNLOAD_FILTER 0 +%define CONFIG_HWMAP_FILTER 0 +%define CONFIG_HWUPLOAD_FILTER 0 +%define CONFIG_HWUPLOAD_CUDA_FILTER 0 +%define CONFIG_HYSTERESIS_FILTER 0 +%define CONFIG_IDET_FILTER 0 +%define CONFIG_IL_FILTER 0 +%define CONFIG_INFLATE_FILTER 0 +%define CONFIG_INTERLACE_FILTER 0 +%define CONFIG_INTERLEAVE_FILTER 0 +%define CONFIG_KERNDEINT_FILTER 0 +%define CONFIG_LENSCORRECTION_FILTER 0 +%define CONFIG_LIBVMAF_FILTER 0 +%define CONFIG_LIMITER_FILTER 0 +%define CONFIG_LOOP_FILTER 0 +%define CONFIG_LUMAKEY_FILTER 0 +%define CONFIG_LUT_FILTER 0 +%define CONFIG_LUT2_FILTER 0 +%define CONFIG_LUT3D_FILTER 0 +%define CONFIG_LUTRGB_FILTER 0 +%define CONFIG_LUTYUV_FILTER 0 +%define CONFIG_MASKEDCLAMP_FILTER 0 +%define CONFIG_MASKEDMERGE_FILTER 0 +%define CONFIG_MCDEINT_FILTER 0 +%define CONFIG_MERGEPLANES_FILTER 0 +%define CONFIG_MESTIMATE_FILTER 0 +%define CONFIG_METADATA_FILTER 0 +%define CONFIG_MIDEQUALIZER_FILTER 0 +%define CONFIG_MINTERPOLATE_FILTER 0 +%define CONFIG_MPDECIMATE_FILTER 0 +%define CONFIG_NEGATE_FILTER 0 +%define CONFIG_NLMEANS_FILTER 0 +%define CONFIG_NNEDI_FILTER 0 +%define CONFIG_NOFORMAT_FILTER 0 +%define CONFIG_NOISE_FILTER 0 +%define CONFIG_NULL_FILTER 0 +%define CONFIG_OCR_FILTER 0 +%define CONFIG_OCV_FILTER 0 +%define CONFIG_OSCILLOSCOPE_FILTER 0 +%define CONFIG_OVERLAY_FILTER 0 +%define CONFIG_OWDENOISE_FILTER 0 +%define CONFIG_PAD_FILTER 0 +%define CONFIG_PALETTEGEN_FILTER 0 +%define CONFIG_PALETTEUSE_FILTER 0 +%define CONFIG_PERMS_FILTER 0 +%define CONFIG_PERSPECTIVE_FILTER 0 +%define CONFIG_PHASE_FILTER 0 +%define CONFIG_PIXDESCTEST_FILTER 0 +%define CONFIG_PIXSCOPE_FILTER 0 +%define CONFIG_PP_FILTER 0 +%define CONFIG_PP7_FILTER 0 +%define CONFIG_PREMULTIPLY_FILTER 0 +%define CONFIG_PREWITT_FILTER 0 +%define CONFIG_PSEUDOCOLOR_FILTER 0 +%define CONFIG_PSNR_FILTER 0 +%define CONFIG_PULLUP_FILTER 0 +%define CONFIG_QP_FILTER 0 +%define CONFIG_RANDOM_FILTER 0 +%define CONFIG_READEIA608_FILTER 0 +%define CONFIG_READVITC_FILTER 0 +%define CONFIG_REALTIME_FILTER 0 +%define CONFIG_REMAP_FILTER 0 +%define CONFIG_REMOVEGRAIN_FILTER 0 +%define CONFIG_REMOVELOGO_FILTER 0 +%define CONFIG_REPEATFIELDS_FILTER 0 +%define CONFIG_REVERSE_FILTER 0 +%define CONFIG_ROBERTS_FILTER 0 +%define CONFIG_ROTATE_FILTER 0 +%define CONFIG_SAB_FILTER 0 +%define CONFIG_SCALE_FILTER 0 +%define CONFIG_SCALE_CUDA_FILTER 0 +%define CONFIG_SCALE_NPP_FILTER 0 +%define CONFIG_SCALE_QSV_FILTER 0 +%define CONFIG_SCALE_VAAPI_FILTER 0 +%define CONFIG_SCALE2REF_FILTER 0 +%define CONFIG_SELECT_FILTER 0 +%define CONFIG_SELECTIVECOLOR_FILTER 0 +%define CONFIG_SENDCMD_FILTER 0 +%define CONFIG_SEPARATEFIELDS_FILTER 0 +%define CONFIG_SETDAR_FILTER 0 +%define CONFIG_SETFIELD_FILTER 0 +%define CONFIG_SETPTS_FILTER 0 +%define CONFIG_SETSAR_FILTER 0 +%define CONFIG_SETTB_FILTER 0 +%define CONFIG_SHOWINFO_FILTER 0 +%define CONFIG_SHOWPALETTE_FILTER 0 +%define CONFIG_SHUFFLEFRAMES_FILTER 0 +%define CONFIG_SHUFFLEPLANES_FILTER 0 +%define CONFIG_SIDEDATA_FILTER 0 +%define CONFIG_SIGNALSTATS_FILTER 0 +%define CONFIG_SIGNATURE_FILTER 0 +%define CONFIG_SMARTBLUR_FILTER 0 +%define CONFIG_SOBEL_FILTER 0 +%define CONFIG_SPLIT_FILTER 0 +%define CONFIG_SPP_FILTER 0 +%define CONFIG_SSIM_FILTER 0 +%define CONFIG_STEREO3D_FILTER 0 +%define CONFIG_STREAMSELECT_FILTER 0 +%define CONFIG_SUBTITLES_FILTER 0 +%define CONFIG_SUPER2XSAI_FILTER 0 +%define CONFIG_SWAPRECT_FILTER 0 +%define CONFIG_SWAPUV_FILTER 0 +%define CONFIG_TBLEND_FILTER 0 +%define CONFIG_TELECINE_FILTER 0 +%define CONFIG_THRESHOLD_FILTER 0 +%define CONFIG_THUMBNAIL_FILTER 0 +%define CONFIG_THUMBNAIL_CUDA_FILTER 0 +%define CONFIG_TILE_FILTER 0 +%define CONFIG_TINTERLACE_FILTER 0 +%define CONFIG_TLUT2_FILTER 0 +%define CONFIG_TONEMAP_FILTER 0 +%define CONFIG_TRANSPOSE_FILTER 0 +%define CONFIG_TRIM_FILTER 0 +%define CONFIG_UNPREMULTIPLY_FILTER 0 +%define CONFIG_UNSHARP_FILTER 0 +%define CONFIG_USPP_FILTER 0 +%define CONFIG_VAGUEDENOISER_FILTER 0 +%define CONFIG_VECTORSCOPE_FILTER 0 +%define CONFIG_VFLIP_FILTER 0 +%define CONFIG_VIDSTABDETECT_FILTER 0 +%define CONFIG_VIDSTABTRANSFORM_FILTER 0 +%define CONFIG_VIGNETTE_FILTER 0 +%define CONFIG_VMAFMOTION_FILTER 0 +%define CONFIG_VSTACK_FILTER 0 +%define CONFIG_W3FDIF_FILTER 0 +%define CONFIG_WAVEFORM_FILTER 0 +%define CONFIG_WEAVE_FILTER 0 +%define CONFIG_XBR_FILTER 0 +%define CONFIG_YADIF_FILTER 0 +%define CONFIG_ZMQ_FILTER 0 +%define CONFIG_ZOOMPAN_FILTER 0 +%define CONFIG_ZSCALE_FILTER 0 +%define CONFIG_ALLRGB_FILTER 0 +%define CONFIG_ALLYUV_FILTER 0 +%define CONFIG_CELLAUTO_FILTER 0 +%define CONFIG_COLOR_FILTER 0 +%define CONFIG_COREIMAGESRC_FILTER 0 +%define CONFIG_FREI0R_SRC_FILTER 0 +%define CONFIG_HALDCLUTSRC_FILTER 0 +%define CONFIG_LIFE_FILTER 0 +%define CONFIG_MANDELBROT_FILTER 0 +%define CONFIG_MPTESTSRC_FILTER 0 +%define CONFIG_NULLSRC_FILTER 0 +%define CONFIG_RGBTESTSRC_FILTER 0 +%define CONFIG_SMPTEBARS_FILTER 0 +%define CONFIG_SMPTEHDBARS_FILTER 0 +%define CONFIG_TESTSRC_FILTER 0 +%define CONFIG_TESTSRC2_FILTER 0 +%define CONFIG_YUVTESTSRC_FILTER 0 +%define CONFIG_NULLSINK_FILTER 0 +%define CONFIG_ABITSCOPE_FILTER 0 +%define CONFIG_ADRAWGRAPH_FILTER 0 +%define CONFIG_AHISTOGRAM_FILTER 0 +%define CONFIG_APHASEMETER_FILTER 0 +%define CONFIG_AVECTORSCOPE_FILTER 0 +%define CONFIG_CONCAT_FILTER 0 +%define CONFIG_SHOWCQT_FILTER 0 +%define CONFIG_SHOWFREQS_FILTER 0 +%define CONFIG_SHOWSPECTRUM_FILTER 0 +%define CONFIG_SHOWSPECTRUMPIC_FILTER 0 +%define CONFIG_SHOWVOLUME_FILTER 0 +%define CONFIG_SHOWWAVES_FILTER 0 +%define CONFIG_SHOWWAVESPIC_FILTER 0 +%define CONFIG_SPECTRUMSYNTH_FILTER 0 +%define CONFIG_AMOVIE_FILTER 0 +%define CONFIG_MOVIE_FILTER 0 +%define CONFIG_H263_VAAPI_HWACCEL 0 +%define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 +%define CONFIG_H264_CUVID_HWACCEL 0 +%define CONFIG_H264_D3D11VA_HWACCEL 0 +%define CONFIG_H264_D3D11VA2_HWACCEL 0 +%define CONFIG_H264_DXVA2_HWACCEL 0 +%define CONFIG_H264_MEDIACODEC_HWACCEL 0 +%define CONFIG_H264_MMAL_HWACCEL 0 +%define CONFIG_H264_QSV_HWACCEL 0 +%define CONFIG_H264_VAAPI_HWACCEL 0 +%define CONFIG_H264_VDA_HWACCEL 0 +%define CONFIG_H264_VDA_OLD_HWACCEL 0 +%define CONFIG_H264_VDPAU_HWACCEL 0 +%define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 +%define CONFIG_HEVC_CUVID_HWACCEL 0 +%define CONFIG_HEVC_D3D11VA_HWACCEL 0 +%define CONFIG_HEVC_D3D11VA2_HWACCEL 0 +%define CONFIG_HEVC_DXVA2_HWACCEL 0 +%define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 +%define CONFIG_HEVC_QSV_HWACCEL 0 +%define CONFIG_HEVC_VAAPI_HWACCEL 0 +%define CONFIG_HEVC_VDPAU_HWACCEL 0 +%define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 +%define CONFIG_MJPEG_CUVID_HWACCEL 0 +%define CONFIG_MPEG1_CUVID_HWACCEL 0 +%define CONFIG_MPEG1_XVMC_HWACCEL 0 +%define CONFIG_MPEG1_VDPAU_HWACCEL 0 +%define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 +%define CONFIG_MPEG2_CUVID_HWACCEL 0 +%define CONFIG_MPEG2_XVMC_HWACCEL 0 +%define CONFIG_MPEG2_D3D11VA_HWACCEL 0 +%define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 +%define CONFIG_MPEG2_DXVA2_HWACCEL 0 +%define CONFIG_MPEG2_MMAL_HWACCEL 0 +%define CONFIG_MPEG2_QSV_HWACCEL 0 +%define CONFIG_MPEG2_VAAPI_HWACCEL 0 +%define CONFIG_MPEG2_VDPAU_HWACCEL 0 +%define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 +%define CONFIG_MPEG2_MEDIACODEC_HWACCEL 0 +%define CONFIG_MPEG4_CUVID_HWACCEL 0 +%define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 +%define CONFIG_MPEG4_MMAL_HWACCEL 0 +%define CONFIG_MPEG4_VAAPI_HWACCEL 0 +%define CONFIG_MPEG4_VDPAU_HWACCEL 0 +%define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 +%define CONFIG_VC1_CUVID_HWACCEL 0 +%define CONFIG_VC1_D3D11VA_HWACCEL 0 +%define CONFIG_VC1_D3D11VA2_HWACCEL 0 +%define CONFIG_VC1_DXVA2_HWACCEL 0 +%define CONFIG_VC1_VAAPI_HWACCEL 0 +%define CONFIG_VC1_VDPAU_HWACCEL 0 +%define CONFIG_VC1_MMAL_HWACCEL 0 +%define CONFIG_VC1_QSV_HWACCEL 0 +%define CONFIG_VP8_CUVID_HWACCEL 0 +%define CONFIG_VP8_MEDIACODEC_HWACCEL 0 +%define CONFIG_VP8_QSV_HWACCEL 0 +%define CONFIG_VP9_CUVID_HWACCEL 0 +%define CONFIG_VP9_D3D11VA_HWACCEL 0 +%define CONFIG_VP9_D3D11VA2_HWACCEL 0 +%define CONFIG_VP9_DXVA2_HWACCEL 0 +%define CONFIG_VP9_MEDIACODEC_HWACCEL 0 +%define CONFIG_VP9_VAAPI_HWACCEL 0 +%define CONFIG_WMV3_D3D11VA_HWACCEL 0 +%define CONFIG_WMV3_D3D11VA2_HWACCEL 0 +%define CONFIG_WMV3_DXVA2_HWACCEL 0 +%define CONFIG_WMV3_VAAPI_HWACCEL 0 +%define CONFIG_WMV3_VDPAU_HWACCEL 0 +%define CONFIG_ALSA_INDEV 0 +%define CONFIG_AVFOUNDATION_INDEV 0 +%define CONFIG_BKTR_INDEV 0 +%define CONFIG_DECKLINK_INDEV 0 +%define CONFIG_LIBNDI_NEWTEK_INDEV 0 +%define CONFIG_DSHOW_INDEV 0 +%define CONFIG_FBDEV_INDEV 0 +%define CONFIG_GDIGRAB_INDEV 0 +%define CONFIG_IEC61883_INDEV 0 +%define CONFIG_JACK_INDEV 0 +%define CONFIG_KMSGRAB_INDEV 0 +%define CONFIG_LAVFI_INDEV 0 +%define CONFIG_OPENAL_INDEV 0 +%define CONFIG_OSS_INDEV 0 +%define CONFIG_PULSE_INDEV 0 +%define CONFIG_SNDIO_INDEV 0 +%define CONFIG_V4L2_INDEV 0 +%define CONFIG_VFWCAP_INDEV 0 +%define CONFIG_XCBGRAB_INDEV 0 +%define CONFIG_LIBCDIO_INDEV 0 +%define CONFIG_LIBDC1394_INDEV 0 +%define CONFIG_A64_MUXER 0 +%define CONFIG_AC3_MUXER 0 +%define CONFIG_ADTS_MUXER 0 +%define CONFIG_ADX_MUXER 0 +%define CONFIG_AIFF_MUXER 0 +%define CONFIG_AMR_MUXER 0 +%define CONFIG_APNG_MUXER 0 +%define CONFIG_ASF_MUXER 0 +%define CONFIG_ASS_MUXER 0 +%define CONFIG_AST_MUXER 0 +%define CONFIG_ASF_STREAM_MUXER 0 +%define CONFIG_AU_MUXER 0 +%define CONFIG_AVI_MUXER 0 +%define CONFIG_AVM2_MUXER 0 +%define CONFIG_BIT_MUXER 0 +%define CONFIG_CAF_MUXER 0 +%define CONFIG_CAVSVIDEO_MUXER 0 +%define CONFIG_CRC_MUXER 0 +%define CONFIG_DASH_MUXER 0 +%define CONFIG_DATA_MUXER 0 +%define CONFIG_DAUD_MUXER 0 +%define CONFIG_DIRAC_MUXER 0 +%define CONFIG_DNXHD_MUXER 0 +%define CONFIG_DTS_MUXER 0 +%define CONFIG_DV_MUXER 0 +%define CONFIG_EAC3_MUXER 0 +%define CONFIG_F4V_MUXER 0 +%define CONFIG_FFM_MUXER 0 +%define CONFIG_FFMETADATA_MUXER 0 +%define CONFIG_FIFO_MUXER 0 +%define CONFIG_FILMSTRIP_MUXER 0 +%define CONFIG_FITS_MUXER 0 +%define CONFIG_FLAC_MUXER 0 +%define CONFIG_FLV_MUXER 0 +%define CONFIG_FRAMECRC_MUXER 0 +%define CONFIG_FRAMEHASH_MUXER 0 +%define CONFIG_FRAMEMD5_MUXER 0 +%define CONFIG_G722_MUXER 0 +%define CONFIG_G723_1_MUXER 0 +%define CONFIG_G726_MUXER 0 +%define CONFIG_G726LE_MUXER 0 +%define CONFIG_GIF_MUXER 0 +%define CONFIG_GSM_MUXER 0 +%define CONFIG_GXF_MUXER 0 +%define CONFIG_H261_MUXER 0 +%define CONFIG_H263_MUXER 0 +%define CONFIG_H264_MUXER 0 +%define CONFIG_HASH_MUXER 0 +%define CONFIG_HDS_MUXER 0 +%define CONFIG_HEVC_MUXER 0 +%define CONFIG_HLS_MUXER 0 +%define CONFIG_ICO_MUXER 0 +%define CONFIG_ILBC_MUXER 0 +%define CONFIG_IMAGE2_MUXER 0 +%define CONFIG_IMAGE2PIPE_MUXER 0 +%define CONFIG_IPOD_MUXER 0 +%define CONFIG_IRCAM_MUXER 0 +%define CONFIG_ISMV_MUXER 0 +%define CONFIG_IVF_MUXER 0 +%define CONFIG_JACOSUB_MUXER 0 +%define CONFIG_LATM_MUXER 0 +%define CONFIG_LRC_MUXER 0 +%define CONFIG_M4V_MUXER 0 +%define CONFIG_MD5_MUXER 0 +%define CONFIG_MATROSKA_MUXER 0 +%define CONFIG_MATROSKA_AUDIO_MUXER 0 +%define CONFIG_MICRODVD_MUXER 0 +%define CONFIG_MJPEG_MUXER 0 +%define CONFIG_MLP_MUXER 0 +%define CONFIG_MMF_MUXER 0 +%define CONFIG_MOV_MUXER 0 +%define CONFIG_MP2_MUXER 0 +%define CONFIG_MP3_MUXER 0 +%define CONFIG_MP4_MUXER 0 +%define CONFIG_MPEG1SYSTEM_MUXER 0 +%define CONFIG_MPEG1VCD_MUXER 0 +%define CONFIG_MPEG1VIDEO_MUXER 0 +%define CONFIG_MPEG2DVD_MUXER 0 +%define CONFIG_MPEG2SVCD_MUXER 0 +%define CONFIG_MPEG2VIDEO_MUXER 0 +%define CONFIG_MPEG2VOB_MUXER 0 +%define CONFIG_MPEGTS_MUXER 0 +%define CONFIG_MPJPEG_MUXER 0 +%define CONFIG_MXF_MUXER 0 +%define CONFIG_MXF_D10_MUXER 0 +%define CONFIG_MXF_OPATOM_MUXER 0 +%define CONFIG_NULL_MUXER 0 +%define CONFIG_NUT_MUXER 0 +%define CONFIG_OGA_MUXER 0 +%define CONFIG_OGG_MUXER 0 +%define CONFIG_OGV_MUXER 0 +%define CONFIG_OMA_MUXER 0 +%define CONFIG_OPUS_MUXER 0 +%define CONFIG_PCM_ALAW_MUXER 0 +%define CONFIG_PCM_MULAW_MUXER 0 +%define CONFIG_PCM_F64BE_MUXER 0 +%define CONFIG_PCM_F64LE_MUXER 0 +%define CONFIG_PCM_F32BE_MUXER 0 +%define CONFIG_PCM_F32LE_MUXER 0 +%define CONFIG_PCM_S32BE_MUXER 0 +%define CONFIG_PCM_S32LE_MUXER 0 +%define CONFIG_PCM_S24BE_MUXER 0 +%define CONFIG_PCM_S24LE_MUXER 0 +%define CONFIG_PCM_S16BE_MUXER 0 +%define CONFIG_PCM_S16LE_MUXER 0 +%define CONFIG_PCM_S8_MUXER 0 +%define CONFIG_PCM_U32BE_MUXER 0 +%define CONFIG_PCM_U32LE_MUXER 0 +%define CONFIG_PCM_U24BE_MUXER 0 +%define CONFIG_PCM_U24LE_MUXER 0 +%define CONFIG_PCM_U16BE_MUXER 0 +%define CONFIG_PCM_U16LE_MUXER 0 +%define CONFIG_PCM_U8_MUXER 0 +%define CONFIG_PSP_MUXER 0 +%define CONFIG_RAWVIDEO_MUXER 0 +%define CONFIG_RM_MUXER 0 +%define CONFIG_ROQ_MUXER 0 +%define CONFIG_RSO_MUXER 0 +%define CONFIG_RTP_MUXER 0 +%define CONFIG_RTP_MPEGTS_MUXER 0 +%define CONFIG_RTSP_MUXER 0 +%define CONFIG_SAP_MUXER 0 +%define CONFIG_SCC_MUXER 0 +%define CONFIG_SEGMENT_MUXER 0 +%define CONFIG_STREAM_SEGMENT_MUXER 0 +%define CONFIG_SINGLEJPEG_MUXER 0 +%define CONFIG_SMJPEG_MUXER 0 +%define CONFIG_SMOOTHSTREAMING_MUXER 0 +%define CONFIG_SOX_MUXER 0 +%define CONFIG_SPX_MUXER 0 +%define CONFIG_SPDIF_MUXER 0 +%define CONFIG_SRT_MUXER 0 +%define CONFIG_SUP_MUXER 0 +%define CONFIG_SWF_MUXER 0 +%define CONFIG_TEE_MUXER 0 +%define CONFIG_TG2_MUXER 0 +%define CONFIG_TGP_MUXER 0 +%define CONFIG_MKVTIMESTAMP_V2_MUXER 0 +%define CONFIG_TRUEHD_MUXER 0 +%define CONFIG_TTA_MUXER 0 +%define CONFIG_UNCODEDFRAMECRC_MUXER 0 +%define CONFIG_VC1_MUXER 0 +%define CONFIG_VC1T_MUXER 0 +%define CONFIG_VOC_MUXER 0 +%define CONFIG_W64_MUXER 0 +%define CONFIG_WAV_MUXER 0 +%define CONFIG_WEBM_MUXER 0 +%define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 +%define CONFIG_WEBM_CHUNK_MUXER 0 +%define CONFIG_WEBP_MUXER 0 +%define CONFIG_WEBVTT_MUXER 0 +%define CONFIG_WTV_MUXER 0 +%define CONFIG_WV_MUXER 0 +%define CONFIG_YUV4MPEGPIPE_MUXER 0 +%define CONFIG_CHROMAPRINT_MUXER 0 +%define CONFIG_ALSA_OUTDEV 0 +%define CONFIG_CACA_OUTDEV 0 +%define CONFIG_DECKLINK_OUTDEV 0 +%define CONFIG_LIBNDI_NEWTEK_OUTDEV 0 +%define CONFIG_FBDEV_OUTDEV 0 +%define CONFIG_OPENGL_OUTDEV 0 +%define CONFIG_OSS_OUTDEV 0 +%define CONFIG_PULSE_OUTDEV 0 +%define CONFIG_SDL2_OUTDEV 0 +%define CONFIG_SNDIO_OUTDEV 0 +%define CONFIG_V4L2_OUTDEV 0 +%define CONFIG_XV_OUTDEV 0 +%define CONFIG_AAC_PARSER 0 +%define CONFIG_AAC_LATM_PARSER 0 +%define CONFIG_AC3_PARSER 0 +%define CONFIG_ADX_PARSER 0 +%define CONFIG_BMP_PARSER 0 +%define CONFIG_CAVSVIDEO_PARSER 0 +%define CONFIG_COOK_PARSER 0 +%define CONFIG_DCA_PARSER 0 +%define CONFIG_DIRAC_PARSER 0 +%define CONFIG_DNXHD_PARSER 0 +%define CONFIG_DPX_PARSER 0 +%define CONFIG_DVAUDIO_PARSER 0 +%define CONFIG_DVBSUB_PARSER 0 +%define CONFIG_DVDSUB_PARSER 0 +%define CONFIG_DVD_NAV_PARSER 0 +%define CONFIG_G729_PARSER 0 +%define CONFIG_GSM_PARSER 0 +%define CONFIG_H261_PARSER 0 +%define CONFIG_H263_PARSER 0 +%define CONFIG_H264_PARSER 0 +%define CONFIG_HEVC_PARSER 0 +%define CONFIG_MJPEG_PARSER 0 +%define CONFIG_MLP_PARSER 0 +%define CONFIG_MPEG4VIDEO_PARSER 0 +%define CONFIG_MPEGAUDIO_PARSER 0 +%define CONFIG_MPEGVIDEO_PARSER 0 +%define CONFIG_OPUS_PARSER 0 +%define CONFIG_PNG_PARSER 0 +%define CONFIG_PNM_PARSER 0 +%define CONFIG_RV30_PARSER 0 +%define CONFIG_RV40_PARSER 0 +%define CONFIG_SIPR_PARSER 0 +%define CONFIG_TAK_PARSER 0 +%define CONFIG_VC1_PARSER 0 +%define CONFIG_VORBIS_PARSER 0 +%define CONFIG_VP3_PARSER 0 +%define CONFIG_XMA_PARSER 0 +%define CONFIG_ASYNC_PROTOCOL 0 +%define CONFIG_BLURAY_PROTOCOL 0 +%define CONFIG_CACHE_PROTOCOL 0 +%define CONFIG_CONCAT_PROTOCOL 0 +%define CONFIG_CRYPTO_PROTOCOL 0 +%define CONFIG_DATA_PROTOCOL 0 +%define CONFIG_FFRTMPCRYPT_PROTOCOL 0 +%define CONFIG_FFRTMPHTTP_PROTOCOL 0 +%define CONFIG_FILE_PROTOCOL 0 +%define CONFIG_FTP_PROTOCOL 0 +%define CONFIG_GOPHER_PROTOCOL 0 +%define CONFIG_HLS_PROTOCOL 0 +%define CONFIG_HTTP_PROTOCOL 0 +%define CONFIG_HTTPPROXY_PROTOCOL 0 +%define CONFIG_HTTPS_PROTOCOL 0 +%define CONFIG_ICECAST_PROTOCOL 0 +%define CONFIG_MMSH_PROTOCOL 0 +%define CONFIG_MMST_PROTOCOL 0 +%define CONFIG_MD5_PROTOCOL 0 +%define CONFIG_PIPE_PROTOCOL 0 +%define CONFIG_PROMPEG_PROTOCOL 0 +%define CONFIG_RTMP_PROTOCOL 0 +%define CONFIG_RTMPE_PROTOCOL 0 +%define CONFIG_RTMPS_PROTOCOL 0 +%define CONFIG_RTMPT_PROTOCOL 0 +%define CONFIG_RTMPTE_PROTOCOL 0 +%define CONFIG_RTMPTS_PROTOCOL 0 +%define CONFIG_RTP_PROTOCOL 0 +%define CONFIG_SCTP_PROTOCOL 0 +%define CONFIG_SRTP_PROTOCOL 0 +%define CONFIG_SUBFILE_PROTOCOL 0 +%define CONFIG_TEE_PROTOCOL 0 +%define CONFIG_TCP_PROTOCOL 0 +%define CONFIG_TLS_GNUTLS_PROTOCOL 0 +%define CONFIG_TLS_SCHANNEL_PROTOCOL 0 +%define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 +%define CONFIG_TLS_OPENSSL_PROTOCOL 0 +%define CONFIG_UDP_PROTOCOL 0 +%define CONFIG_UDPLITE_PROTOCOL 0 +%define CONFIG_UNIX_PROTOCOL 0 +%define CONFIG_LIBRTMP_PROTOCOL 0 +%define CONFIG_LIBRTMPE_PROTOCOL 0 +%define CONFIG_LIBRTMPS_PROTOCOL 0 +%define CONFIG_LIBRTMPT_PROTOCOL 0 +%define CONFIG_LIBRTMPTE_PROTOCOL 0 +%define CONFIG_LIBSSH_PROTOCOL 0 +%define CONFIG_LIBSMBCLIENT_PROTOCOL 0 diff --git a/media/ffvpx/defaults_disabled.h b/media/ffvpx/defaults_disabled.h new file mode 100644 index 000000000000..e526aa9e7522 --- /dev/null +++ b/media/ffvpx/defaults_disabled.h @@ -0,0 +1,1674 @@ +#define CONFIG_ENCODERS 0 +#define CONFIG_HWACCELS 0 +#define CONFIG_INDEVS 0 +#define CONFIG_OUTDEVS 0 +#define CONFIG_FILTERS 0 +#define CONFIG_DEMUXERS 0 +#define CONFIG_MUXERS 0 +#define CONFIG_PROTOCOLS 0 +#define CONFIG_FRAME_THREAD_ENCODER 0 +#define CONFIG_AASC_DECODER 0 +#define CONFIG_AIC_DECODER 0 +#define CONFIG_ALIAS_PIX_DECODER 0 +#define CONFIG_AMV_DECODER 0 +#define CONFIG_ANM_DECODER 0 +#define CONFIG_ANSI_DECODER 0 +#define CONFIG_APNG_DECODER 0 +#define CONFIG_ASV1_DECODER 0 +#define CONFIG_ASV2_DECODER 0 +#define CONFIG_AURA_DECODER 0 +#define CONFIG_AURA2_DECODER 0 +#define CONFIG_AVRP_DECODER 0 +#define CONFIG_AVRN_DECODER 0 +#define CONFIG_AVS_DECODER 0 +#define CONFIG_AVUI_DECODER 0 +#define CONFIG_AYUV_DECODER 0 +#define CONFIG_BETHSOFTVID_DECODER 0 +#define CONFIG_BFI_DECODER 0 +#define CONFIG_BINK_DECODER 0 +#define CONFIG_BMP_DECODER 0 +#define CONFIG_BMV_VIDEO_DECODER 0 +#define CONFIG_BRENDER_PIX_DECODER 0 +#define CONFIG_C93_DECODER 0 +#define CONFIG_CAVS_DECODER 0 +#define CONFIG_CDGRAPHICS_DECODER 0 +#define CONFIG_CDXL_DECODER 0 +#define CONFIG_CFHD_DECODER 0 +#define CONFIG_CINEPAK_DECODER 0 +#define CONFIG_CLEARVIDEO_DECODER 0 +#define CONFIG_CLJR_DECODER 0 +#define CONFIG_CLLC_DECODER 0 +#define CONFIG_COMFORTNOISE_DECODER 0 +#define CONFIG_CPIA_DECODER 0 +#define CONFIG_CSCD_DECODER 0 +#define CONFIG_CYUV_DECODER 0 +#define CONFIG_DDS_DECODER 0 +#define CONFIG_DFA_DECODER 0 +#define CONFIG_DIRAC_DECODER 0 +#define CONFIG_DNXHD_DECODER 0 +#define CONFIG_DPX_DECODER 0 +#define CONFIG_DSICINVIDEO_DECODER 0 +#define CONFIG_DVAUDIO_DECODER 0 +#define CONFIG_DVVIDEO_DECODER 0 +#define CONFIG_DXA_DECODER 0 +#define CONFIG_DXTORY_DECODER 0 +#define CONFIG_DXV_DECODER 0 +#define CONFIG_EACMV_DECODER 0 +#define CONFIG_EAMAD_DECODER 0 +#define CONFIG_EATGQ_DECODER 0 +#define CONFIG_EATGV_DECODER 0 +#define CONFIG_EATQI_DECODER 0 +#define CONFIG_EIGHTBPS_DECODER 0 +#define CONFIG_EIGHTSVX_EXP_DECODER 0 +#define CONFIG_EIGHTSVX_FIB_DECODER 0 +#define CONFIG_ESCAPE124_DECODER 0 +#define CONFIG_ESCAPE130_DECODER 0 +#define CONFIG_EXR_DECODER 0 +#define CONFIG_FFV1_DECODER 0 +#define CONFIG_FFVHUFF_DECODER 0 +#define CONFIG_FIC_DECODER 0 +#define CONFIG_FITS_DECODER 0 +#define CONFIG_FLASHSV_DECODER 0 +#define CONFIG_FLASHSV2_DECODER 0 +#define CONFIG_FLIC_DECODER 0 +#define CONFIG_FLV_DECODER 0 +#define CONFIG_FMVC_DECODER 0 +#define CONFIG_FOURXM_DECODER 0 +#define CONFIG_FRAPS_DECODER 0 +#define CONFIG_FRWU_DECODER 0 +#define CONFIG_G2M_DECODER 0 +#define CONFIG_GDV_DECODER 0 +#define CONFIG_GIF_DECODER 0 +#define CONFIG_H261_DECODER 0 +#define CONFIG_H263_DECODER 0 +#define CONFIG_H263I_DECODER 0 +#define CONFIG_H263P_DECODER 0 +#define CONFIG_H263_V4L2M2M_DECODER 0 +#define CONFIG_H264_DECODER 0 +#define CONFIG_H264_CRYSTALHD_DECODER 0 +#define CONFIG_H264_V4L2M2M_DECODER 0 +#define CONFIG_H264_MEDIACODEC_DECODER 0 +#define CONFIG_H264_MMAL_DECODER 0 +#define CONFIG_H264_QSV_DECODER 0 +#define CONFIG_H264_RKMPP_DECODER 0 +#define CONFIG_H264_VDA_DECODER 0 +#define CONFIG_H264_VDPAU_DECODER 0 +#define CONFIG_HAP_DECODER 0 +#define CONFIG_HEVC_DECODER 0 +#define CONFIG_HEVC_QSV_DECODER 0 +#define CONFIG_HEVC_RKMPP_DECODER 0 +#define CONFIG_HEVC_V4L2M2M_DECODER 0 +#define CONFIG_HNM4_VIDEO_DECODER 0 +#define CONFIG_HQ_HQA_DECODER 0 +#define CONFIG_HQX_DECODER 0 +#define CONFIG_HUFFYUV_DECODER 0 +#define CONFIG_IDCIN_DECODER 0 +#define CONFIG_IFF_ILBM_DECODER 0 +#define CONFIG_INDEO2_DECODER 0 +#define CONFIG_INDEO3_DECODER 0 +#define CONFIG_INDEO4_DECODER 0 +#define CONFIG_INDEO5_DECODER 0 +#define CONFIG_INTERPLAY_VIDEO_DECODER 0 +#define CONFIG_JPEG2000_DECODER 0 +#define CONFIG_JPEGLS_DECODER 0 +#define CONFIG_JV_DECODER 0 +#define CONFIG_KGV1_DECODER 0 +#define CONFIG_KMVC_DECODER 0 +#define CONFIG_LAGARITH_DECODER 0 +#define CONFIG_LOCO_DECODER 0 +#define CONFIG_M101_DECODER 0 +#define CONFIG_MAGICYUV_DECODER 0 +#define CONFIG_MDEC_DECODER 0 +#define CONFIG_MIMIC_DECODER 0 +#define CONFIG_MJPEG_DECODER 0 +#define CONFIG_MJPEGB_DECODER 0 +#define CONFIG_MMVIDEO_DECODER 0 +#define CONFIG_MOTIONPIXELS_DECODER 0 +#define CONFIG_MPEG_XVMC_DECODER 0 +#define CONFIG_MPEG1VIDEO_DECODER 0 +#define CONFIG_MPEG2VIDEO_DECODER 0 +#define CONFIG_MPEG4_DECODER 0 +#define CONFIG_MPEG4_CRYSTALHD_DECODER 0 +#define CONFIG_MPEG4_V4L2M2M_DECODER 0 +#define CONFIG_MPEG4_MMAL_DECODER 0 +#define CONFIG_MPEG4_VDPAU_DECODER 0 +#define CONFIG_MPEGVIDEO_DECODER 0 +#define CONFIG_MPEG_VDPAU_DECODER 0 +#define CONFIG_MPEG1_VDPAU_DECODER 0 +#define CONFIG_MPEG1_V4L2M2M_DECODER 0 +#define CONFIG_MPEG2_MMAL_DECODER 0 +#define CONFIG_MPEG2_CRYSTALHD_DECODER 0 +#define CONFIG_MPEG2_V4L2M2M_DECODER 0 +#define CONFIG_MPEG2_QSV_DECODER 0 +#define CONFIG_MPEG2_MEDIACODEC_DECODER 0 +#define CONFIG_MSA1_DECODER 0 +#define CONFIG_MSCC_DECODER 0 +#define CONFIG_MSMPEG4V1_DECODER 0 +#define CONFIG_MSMPEG4V2_DECODER 0 +#define CONFIG_MSMPEG4V3_DECODER 0 +#define CONFIG_MSMPEG4_CRYSTALHD_DECODER 0 +#define CONFIG_MSRLE_DECODER 0 +#define CONFIG_MSS1_DECODER 0 +#define CONFIG_MSS2_DECODER 0 +#define CONFIG_MSVIDEO1_DECODER 0 +#define CONFIG_MSZH_DECODER 0 +#define CONFIG_MTS2_DECODER 0 +#define CONFIG_MVC1_DECODER 0 +#define CONFIG_MVC2_DECODER 0 +#define CONFIG_MXPEG_DECODER 0 +#define CONFIG_NUV_DECODER 0 +#define CONFIG_PAF_VIDEO_DECODER 0 +#define CONFIG_PAM_DECODER 0 +#define CONFIG_PBM_DECODER 0 +#define CONFIG_PCX_DECODER 0 +#define CONFIG_PGM_DECODER 0 +#define CONFIG_PGMYUV_DECODER 0 +#define CONFIG_PICTOR_DECODER 0 +#define CONFIG_PIXLET_DECODER 0 +#define CONFIG_PNG_DECODER 0 +#define CONFIG_PPM_DECODER 0 +#define CONFIG_PRORES_DECODER 0 +#define CONFIG_PRORES_LGPL_DECODER 0 +#define CONFIG_PSD_DECODER 0 +#define CONFIG_PTX_DECODER 0 +#define CONFIG_QDRAW_DECODER 0 +#define CONFIG_QPEG_DECODER 0 +#define CONFIG_QTRLE_DECODER 0 +#define CONFIG_R10K_DECODER 0 +#define CONFIG_R210_DECODER 0 +#define CONFIG_RAWVIDEO_DECODER 0 +#define CONFIG_RL2_DECODER 0 +#define CONFIG_ROQ_DECODER 0 +#define CONFIG_RPZA_DECODER 0 +#define CONFIG_RSCC_DECODER 0 +#define CONFIG_RV10_DECODER 0 +#define CONFIG_RV20_DECODER 0 +#define CONFIG_RV30_DECODER 0 +#define CONFIG_RV40_DECODER 0 +#define CONFIG_S302M_DECODER 0 +#define CONFIG_SANM_DECODER 0 +#define CONFIG_SCPR_DECODER 0 +#define CONFIG_SCREENPRESSO_DECODER 0 +#define CONFIG_SDX2_DPCM_DECODER 0 +#define CONFIG_SGI_DECODER 0 +#define CONFIG_SGIRLE_DECODER 0 +#define CONFIG_SHEERVIDEO_DECODER 0 +#define CONFIG_SMACKER_DECODER 0 +#define CONFIG_SMC_DECODER 0 +#define CONFIG_SMVJPEG_DECODER 0 +#define CONFIG_SNOW_DECODER 0 +#define CONFIG_SP5X_DECODER 0 +#define CONFIG_SPEEDHQ_DECODER 0 +#define CONFIG_SRGC_DECODER 0 +#define CONFIG_SUNRAST_DECODER 0 +#define CONFIG_SVQ1_DECODER 0 +#define CONFIG_SVQ3_DECODER 0 +#define CONFIG_TARGA_DECODER 0 +#define CONFIG_TARGA_Y216_DECODER 0 +#define CONFIG_TDSC_DECODER 0 +#define CONFIG_THEORA_DECODER 0 +#define CONFIG_THP_DECODER 0 +#define CONFIG_TIERTEXSEQVIDEO_DECODER 0 +#define CONFIG_TIFF_DECODER 0 +#define CONFIG_TMV_DECODER 0 +#define CONFIG_TRUEMOTION1_DECODER 0 +#define CONFIG_TRUEMOTION2_DECODER 0 +#define CONFIG_TRUEMOTION2RT_DECODER 0 +#define CONFIG_TSCC_DECODER 0 +#define CONFIG_TSCC2_DECODER 0 +#define CONFIG_TXD_DECODER 0 +#define CONFIG_ULTI_DECODER 0 +#define CONFIG_UTVIDEO_DECODER 0 +#define CONFIG_V210_DECODER 0 +#define CONFIG_V210X_DECODER 0 +#define CONFIG_V308_DECODER 0 +#define CONFIG_V408_DECODER 0 +#define CONFIG_V410_DECODER 0 +#define CONFIG_VB_DECODER 0 +#define CONFIG_VBLE_DECODER 0 +#define CONFIG_VC1_DECODER 0 +#define CONFIG_VC1_CRYSTALHD_DECODER 0 +#define CONFIG_VC1_VDPAU_DECODER 0 +#define CONFIG_VC1IMAGE_DECODER 0 +#define CONFIG_VC1_MMAL_DECODER 0 +#define CONFIG_VC1_QSV_DECODER 0 +#define CONFIG_VC1_V4L2M2M_DECODER 0 +#define CONFIG_VCR1_DECODER 0 +#define CONFIG_VMDVIDEO_DECODER 0 +#define CONFIG_VMNC_DECODER 0 +#define CONFIG_VP3_DECODER 0 +#define CONFIG_VP5_DECODER 0 +#define CONFIG_VP6_DECODER 0 +#define CONFIG_VP6A_DECODER 0 +#define CONFIG_VP6F_DECODER 0 +#define CONFIG_VP7_DECODER 0 +#define CONFIG_VP8_RKMPP_DECODER 0 +#define CONFIG_VP8_V4L2M2M_DECODER 0 +#define CONFIG_VP9_RKMPP_DECODER 0 +#define CONFIG_VP9_V4L2M2M_DECODER 0 +#define CONFIG_VQA_DECODER 0 +#define CONFIG_BITPACKED_DECODER 0 +#define CONFIG_WEBP_DECODER 0 +#define CONFIG_WRAPPED_AVFRAME_DECODER 0 +#define CONFIG_WMV1_DECODER 0 +#define CONFIG_WMV2_DECODER 0 +#define CONFIG_WMV3_DECODER 0 +#define CONFIG_WMV3_CRYSTALHD_DECODER 0 +#define CONFIG_WMV3_VDPAU_DECODER 0 +#define CONFIG_WMV3IMAGE_DECODER 0 +#define CONFIG_WNV1_DECODER 0 +#define CONFIG_XAN_WC3_DECODER 0 +#define CONFIG_XAN_WC4_DECODER 0 +#define CONFIG_XBM_DECODER 0 +#define CONFIG_XFACE_DECODER 0 +#define CONFIG_XL_DECODER 0 +#define CONFIG_XPM_DECODER 0 +#define CONFIG_XWD_DECODER 0 +#define CONFIG_Y41P_DECODER 0 +#define CONFIG_YLC_DECODER 0 +#define CONFIG_YOP_DECODER 0 +#define CONFIG_YUV4_DECODER 0 +#define CONFIG_ZERO12V_DECODER 0 +#define CONFIG_ZEROCODEC_DECODER 0 +#define CONFIG_ZLIB_DECODER 0 +#define CONFIG_ZMBV_DECODER 0 +#define CONFIG_AAC_DECODER 0 +#define CONFIG_AAC_FIXED_DECODER 0 +#define CONFIG_AAC_LATM_DECODER 0 +#define CONFIG_AC3_DECODER 0 +#define CONFIG_AC3_FIXED_DECODER 0 +#define CONFIG_ALAC_DECODER 0 +#define CONFIG_ALS_DECODER 0 +#define CONFIG_AMRNB_DECODER 0 +#define CONFIG_AMRWB_DECODER 0 +#define CONFIG_APE_DECODER 0 +#define CONFIG_ATRAC1_DECODER 0 +#define CONFIG_ATRAC3_DECODER 0 +#define CONFIG_ATRAC3AL_DECODER 0 +#define CONFIG_ATRAC3P_DECODER 0 +#define CONFIG_ATRAC3PAL_DECODER 0 +#define CONFIG_BINKAUDIO_DCT_DECODER 0 +#define CONFIG_BINKAUDIO_RDFT_DECODER 0 +#define CONFIG_BMV_AUDIO_DECODER 0 +#define CONFIG_COOK_DECODER 0 +#define CONFIG_DCA_DECODER 0 +#define CONFIG_DOLBY_E_DECODER 0 +#define CONFIG_DSD_LSBF_DECODER 0 +#define CONFIG_DSD_MSBF_DECODER 0 +#define CONFIG_DSD_LSBF_PLANAR_DECODER 0 +#define CONFIG_DSD_MSBF_PLANAR_DECODER 0 +#define CONFIG_DSICINAUDIO_DECODER 0 +#define CONFIG_DSS_SP_DECODER 0 +#define CONFIG_DST_DECODER 0 +#define CONFIG_EAC3_DECODER 0 +#define CONFIG_EVRC_DECODER 0 +#define CONFIG_FFWAVESYNTH_DECODER 0 +#define CONFIG_G723_1_DECODER 0 +#define CONFIG_G729_DECODER 0 +#define CONFIG_GSM_DECODER 0 +#define CONFIG_GSM_MS_DECODER 0 +#define CONFIG_IAC_DECODER 0 +#define CONFIG_IMC_DECODER 0 +#define CONFIG_INTERPLAY_ACM_DECODER 0 +#define CONFIG_MACE3_DECODER 0 +#define CONFIG_MACE6_DECODER 0 +#define CONFIG_METASOUND_DECODER 0 +#define CONFIG_MLP_DECODER 0 +#define CONFIG_MP1_DECODER 0 +#define CONFIG_MP1FLOAT_DECODER 0 +#define CONFIG_MP2_DECODER 0 +#define CONFIG_MP2FLOAT_DECODER 0 +#define CONFIG_MP3_DECODER 0 +#define CONFIG_MP3FLOAT_DECODER 0 +#define CONFIG_MP3ADU_DECODER 0 +#define CONFIG_MP3ADUFLOAT_DECODER 0 +#define CONFIG_MP3ON4_DECODER 0 +#define CONFIG_MP3ON4FLOAT_DECODER 0 +#define CONFIG_MPC7_DECODER 0 +#define CONFIG_MPC8_DECODER 0 +#define CONFIG_NELLYMOSER_DECODER 0 +#define CONFIG_ON2AVC_DECODER 0 +#define CONFIG_OPUS_DECODER 0 +#define CONFIG_PAF_AUDIO_DECODER 0 +#define CONFIG_QCELP_DECODER 0 +#define CONFIG_QDM2_DECODER 0 +#define CONFIG_QDMC_DECODER 0 +#define CONFIG_RA_144_DECODER 0 +#define CONFIG_RA_288_DECODER 0 +#define CONFIG_RALF_DECODER 0 +#define CONFIG_SHORTEN_DECODER 0 +#define CONFIG_SIPR_DECODER 0 +#define CONFIG_SMACKAUD_DECODER 0 +#define CONFIG_SONIC_DECODER 0 +#define CONFIG_TAK_DECODER 0 +#define CONFIG_TRUEHD_DECODER 0 +#define CONFIG_TRUESPEECH_DECODER 0 +#define CONFIG_TTA_DECODER 0 +#define CONFIG_TWINVQ_DECODER 0 +#define CONFIG_VMDAUDIO_DECODER 0 +#define CONFIG_VORBIS_DECODER 0 +#define CONFIG_WAVPACK_DECODER 0 +#define CONFIG_WMALOSSLESS_DECODER 0 +#define CONFIG_WMAPRO_DECODER 0 +#define CONFIG_WMAV1_DECODER 0 +#define CONFIG_WMAV2_DECODER 0 +#define CONFIG_WMAVOICE_DECODER 0 +#define CONFIG_WS_SND1_DECODER 0 +#define CONFIG_XMA1_DECODER 0 +#define CONFIG_XMA2_DECODER 0 +#define CONFIG_PCM_ALAW_DECODER 0 +#define CONFIG_PCM_BLURAY_DECODER 0 +#define CONFIG_PCM_DVD_DECODER 0 +#define CONFIG_PCM_F16LE_DECODER 0 +#define CONFIG_PCM_F24LE_DECODER 0 +#define CONFIG_PCM_F32BE_DECODER 0 +#define CONFIG_PCM_F32LE_DECODER 0 +#define CONFIG_PCM_F64BE_DECODER 0 +#define CONFIG_PCM_F64LE_DECODER 0 +#define CONFIG_PCM_LXF_DECODER 0 +#define CONFIG_PCM_MULAW_DECODER 0 +#define CONFIG_PCM_S8_DECODER 0 +#define CONFIG_PCM_S8_PLANAR_DECODER 0 +#define CONFIG_PCM_S16BE_DECODER 0 +#define CONFIG_PCM_S16BE_PLANAR_DECODER 0 +#define CONFIG_PCM_S16LE_DECODER 0 +#define CONFIG_PCM_S16LE_PLANAR_DECODER 0 +#define CONFIG_PCM_S24BE_DECODER 0 +#define CONFIG_PCM_S24DAUD_DECODER 0 +#define CONFIG_PCM_S24LE_DECODER 0 +#define CONFIG_PCM_S24LE_PLANAR_DECODER 0 +#define CONFIG_PCM_S32BE_DECODER 0 +#define CONFIG_PCM_S32LE_DECODER 0 +#define CONFIG_PCM_S32LE_PLANAR_DECODER 0 +#define CONFIG_PCM_S64BE_DECODER 0 +#define CONFIG_PCM_S64LE_DECODER 0 +#define CONFIG_PCM_U8_DECODER 0 +#define CONFIG_PCM_U16BE_DECODER 0 +#define CONFIG_PCM_U16LE_DECODER 0 +#define CONFIG_PCM_U24BE_DECODER 0 +#define CONFIG_PCM_U24LE_DECODER 0 +#define CONFIG_PCM_U32BE_DECODER 0 +#define CONFIG_PCM_U32LE_DECODER 0 +#define CONFIG_PCM_ZORK_DECODER 0 +#define CONFIG_GREMLIN_DPCM_DECODER 0 +#define CONFIG_INTERPLAY_DPCM_DECODER 0 +#define CONFIG_ROQ_DPCM_DECODER 0 +#define CONFIG_SOL_DPCM_DECODER 0 +#define CONFIG_XAN_DPCM_DECODER 0 +#define CONFIG_ADPCM_4XM_DECODER 0 +#define CONFIG_ADPCM_ADX_DECODER 0 +#define CONFIG_ADPCM_AFC_DECODER 0 +#define CONFIG_ADPCM_AICA_DECODER 0 +#define CONFIG_ADPCM_CT_DECODER 0 +#define CONFIG_ADPCM_DTK_DECODER 0 +#define CONFIG_ADPCM_EA_DECODER 0 +#define CONFIG_ADPCM_EA_MAXIS_XA_DECODER 0 +#define CONFIG_ADPCM_EA_R1_DECODER 0 +#define CONFIG_ADPCM_EA_R2_DECODER 0 +#define CONFIG_ADPCM_EA_R3_DECODER 0 +#define CONFIG_ADPCM_EA_XAS_DECODER 0 +#define CONFIG_ADPCM_G722_DECODER 0 +#define CONFIG_ADPCM_G726_DECODER 0 +#define CONFIG_ADPCM_G726LE_DECODER 0 +#define CONFIG_ADPCM_IMA_AMV_DECODER 0 +#define CONFIG_ADPCM_IMA_APC_DECODER 0 +#define CONFIG_ADPCM_IMA_DAT4_DECODER 0 +#define CONFIG_ADPCM_IMA_DK3_DECODER 0 +#define CONFIG_ADPCM_IMA_DK4_DECODER 0 +#define CONFIG_ADPCM_IMA_EA_EACS_DECODER 0 +#define CONFIG_ADPCM_IMA_EA_SEAD_DECODER 0 +#define CONFIG_ADPCM_IMA_ISS_DECODER 0 +#define CONFIG_ADPCM_IMA_OKI_DECODER 0 +#define CONFIG_ADPCM_IMA_QT_DECODER 0 +#define CONFIG_ADPCM_IMA_RAD_DECODER 0 +#define CONFIG_ADPCM_IMA_SMJPEG_DECODER 0 +#define CONFIG_ADPCM_IMA_WAV_DECODER 0 +#define CONFIG_ADPCM_IMA_WS_DECODER 0 +#define CONFIG_ADPCM_MS_DECODER 0 +#define CONFIG_ADPCM_MTAF_DECODER 0 +#define CONFIG_ADPCM_PSX_DECODER 0 +#define CONFIG_ADPCM_SBPRO_2_DECODER 0 +#define CONFIG_ADPCM_SBPRO_3_DECODER 0 +#define CONFIG_ADPCM_SBPRO_4_DECODER 0 +#define CONFIG_ADPCM_SWF_DECODER 0 +#define CONFIG_ADPCM_THP_DECODER 0 +#define CONFIG_ADPCM_THP_LE_DECODER 0 +#define CONFIG_ADPCM_VIMA_DECODER 0 +#define CONFIG_ADPCM_XA_DECODER 0 +#define CONFIG_ADPCM_YAMAHA_DECODER 0 +#define CONFIG_SSA_DECODER 0 +#define CONFIG_ASS_DECODER 0 +#define CONFIG_CCAPTION_DECODER 0 +#define CONFIG_DVBSUB_DECODER 0 +#define CONFIG_DVDSUB_DECODER 0 +#define CONFIG_JACOSUB_DECODER 0 +#define CONFIG_MICRODVD_DECODER 0 +#define CONFIG_MOVTEXT_DECODER 0 +#define CONFIG_MPL2_DECODER 0 +#define CONFIG_PGSSUB_DECODER 0 +#define CONFIG_PJS_DECODER 0 +#define CONFIG_REALTEXT_DECODER 0 +#define CONFIG_SAMI_DECODER 0 +#define CONFIG_SRT_DECODER 0 +#define CONFIG_STL_DECODER 0 +#define CONFIG_SUBRIP_DECODER 0 +#define CONFIG_SUBVIEWER_DECODER 0 +#define CONFIG_SUBVIEWER1_DECODER 0 +#define CONFIG_TEXT_DECODER 0 +#define CONFIG_VPLAYER_DECODER 0 +#define CONFIG_WEBVTT_DECODER 0 +#define CONFIG_XSUB_DECODER 0 +#define CONFIG_AAC_AT_DECODER 0 +#define CONFIG_AC3_AT_DECODER 0 +#define CONFIG_ADPCM_IMA_QT_AT_DECODER 0 +#define CONFIG_ALAC_AT_DECODER 0 +#define CONFIG_AMR_NB_AT_DECODER 0 +#define CONFIG_EAC3_AT_DECODER 0 +#define CONFIG_GSM_MS_AT_DECODER 0 +#define CONFIG_ILBC_AT_DECODER 0 +#define CONFIG_MP1_AT_DECODER 0 +#define CONFIG_MP2_AT_DECODER 0 +#define CONFIG_MP3_AT_DECODER 0 +#define CONFIG_PCM_ALAW_AT_DECODER 0 +#define CONFIG_PCM_MULAW_AT_DECODER 0 +#define CONFIG_QDMC_AT_DECODER 0 +#define CONFIG_QDM2_AT_DECODER 0 +#define CONFIG_LIBCELT_DECODER 0 +#define CONFIG_LIBFDK_AAC_DECODER 0 +#define CONFIG_LIBGSM_DECODER 0 +#define CONFIG_LIBGSM_MS_DECODER 0 +#define CONFIG_LIBILBC_DECODER 0 +#define CONFIG_LIBOPENCORE_AMRNB_DECODER 0 +#define CONFIG_LIBOPENCORE_AMRWB_DECODER 0 +#define CONFIG_LIBOPENJPEG_DECODER 0 +#define CONFIG_LIBOPUS_DECODER 0 +#define CONFIG_LIBRSVG_DECODER 0 +#define CONFIG_LIBSPEEX_DECODER 0 +#define CONFIG_LIBVORBIS_DECODER 0 +#define CONFIG_LIBVPX_VP8_DECODER 0 +#define CONFIG_LIBVPX_VP9_DECODER 0 +#define CONFIG_LIBZVBI_TELETEXT_DECODER 0 +#define CONFIG_BINTEXT_DECODER 0 +#define CONFIG_XBIN_DECODER 0 +#define CONFIG_IDF_DECODER 0 +#define CONFIG_LIBOPENH264_DECODER 0 +#define CONFIG_H264_CUVID_DECODER 0 +#define CONFIG_HEVC_CUVID_DECODER 0 +#define CONFIG_HEVC_MEDIACODEC_DECODER 0 +#define CONFIG_MJPEG_CUVID_DECODER 0 +#define CONFIG_MPEG1_CUVID_DECODER 0 +#define CONFIG_MPEG2_CUVID_DECODER 0 +#define CONFIG_MPEG4_CUVID_DECODER 0 +#define CONFIG_MPEG4_MEDIACODEC_DECODER 0 +#define CONFIG_VC1_CUVID_DECODER 0 +#define CONFIG_VP8_CUVID_DECODER 0 +#define CONFIG_VP8_MEDIACODEC_DECODER 0 +#define CONFIG_VP8_QSV_DECODER 0 +#define CONFIG_VP9_CUVID_DECODER 0 +#define CONFIG_VP9_MEDIACODEC_DECODER 0 +#define CONFIG_AA_DEMUXER 0 +#define CONFIG_AAC_DEMUXER 0 +#define CONFIG_AC3_DEMUXER 0 +#define CONFIG_ACM_DEMUXER 0 +#define CONFIG_ACT_DEMUXER 0 +#define CONFIG_ADF_DEMUXER 0 +#define CONFIG_ADP_DEMUXER 0 +#define CONFIG_ADS_DEMUXER 0 +#define CONFIG_ADX_DEMUXER 0 +#define CONFIG_AEA_DEMUXER 0 +#define CONFIG_AFC_DEMUXER 0 +#define CONFIG_AIFF_DEMUXER 0 +#define CONFIG_AIX_DEMUXER 0 +#define CONFIG_AMR_DEMUXER 0 +#define CONFIG_ANM_DEMUXER 0 +#define CONFIG_APC_DEMUXER 0 +#define CONFIG_APE_DEMUXER 0 +#define CONFIG_APNG_DEMUXER 0 +#define CONFIG_AQTITLE_DEMUXER 0 +#define CONFIG_ASF_DEMUXER 0 +#define CONFIG_ASF_O_DEMUXER 0 +#define CONFIG_ASS_DEMUXER 0 +#define CONFIG_AST_DEMUXER 0 +#define CONFIG_AU_DEMUXER 0 +#define CONFIG_AVI_DEMUXER 0 +#define CONFIG_AVISYNTH_DEMUXER 0 +#define CONFIG_AVR_DEMUXER 0 +#define CONFIG_AVS_DEMUXER 0 +#define CONFIG_BETHSOFTVID_DEMUXER 0 +#define CONFIG_BFI_DEMUXER 0 +#define CONFIG_BINTEXT_DEMUXER 0 +#define CONFIG_BINK_DEMUXER 0 +#define CONFIG_BIT_DEMUXER 0 +#define CONFIG_BMV_DEMUXER 0 +#define CONFIG_BFSTM_DEMUXER 0 +#define CONFIG_BRSTM_DEMUXER 0 +#define CONFIG_BOA_DEMUXER 0 +#define CONFIG_C93_DEMUXER 0 +#define CONFIG_CAF_DEMUXER 0 +#define CONFIG_CAVSVIDEO_DEMUXER 0 +#define CONFIG_CDG_DEMUXER 0 +#define CONFIG_CDXL_DEMUXER 0 +#define CONFIG_CINE_DEMUXER 0 +#define CONFIG_CONCAT_DEMUXER 0 +#define CONFIG_DASH_DEMUXER 0 +#define CONFIG_DATA_DEMUXER 0 +#define CONFIG_DAUD_DEMUXER 0 +#define CONFIG_DCSTR_DEMUXER 0 +#define CONFIG_DFA_DEMUXER 0 +#define CONFIG_DIRAC_DEMUXER 0 +#define CONFIG_DNXHD_DEMUXER 0 +#define CONFIG_DSF_DEMUXER 0 +#define CONFIG_DSICIN_DEMUXER 0 +#define CONFIG_DSS_DEMUXER 0 +#define CONFIG_DTS_DEMUXER 0 +#define CONFIG_DTSHD_DEMUXER 0 +#define CONFIG_DV_DEMUXER 0 +#define CONFIG_DVBSUB_DEMUXER 0 +#define CONFIG_DVBTXT_DEMUXER 0 +#define CONFIG_DXA_DEMUXER 0 +#define CONFIG_EA_DEMUXER 0 +#define CONFIG_EA_CDATA_DEMUXER 0 +#define CONFIG_EAC3_DEMUXER 0 +#define CONFIG_EPAF_DEMUXER 0 +#define CONFIG_FFM_DEMUXER 0 +#define CONFIG_FFMETADATA_DEMUXER 0 +#define CONFIG_FILMSTRIP_DEMUXER 0 +#define CONFIG_FITS_DEMUXER 0 +#define CONFIG_FLAC_DEMUXER 0 +#define CONFIG_FLIC_DEMUXER 0 +#define CONFIG_FLV_DEMUXER 0 +#define CONFIG_LIVE_FLV_DEMUXER 0 +#define CONFIG_FOURXM_DEMUXER 0 +#define CONFIG_FRM_DEMUXER 0 +#define CONFIG_FSB_DEMUXER 0 +#define CONFIG_G722_DEMUXER 0 +#define CONFIG_G723_1_DEMUXER 0 +#define CONFIG_G726_DEMUXER 0 +#define CONFIG_G726LE_DEMUXER 0 +#define CONFIG_G729_DEMUXER 0 +#define CONFIG_GDV_DEMUXER 0 +#define CONFIG_GENH_DEMUXER 0 +#define CONFIG_GIF_DEMUXER 0 +#define CONFIG_GSM_DEMUXER 0 +#define CONFIG_GXF_DEMUXER 0 +#define CONFIG_H261_DEMUXER 0 +#define CONFIG_H263_DEMUXER 0 +#define CONFIG_H264_DEMUXER 0 +#define CONFIG_HEVC_DEMUXER 0 +#define CONFIG_HLS_DEMUXER 0 +#define CONFIG_HNM_DEMUXER 0 +#define CONFIG_ICO_DEMUXER 0 +#define CONFIG_IDCIN_DEMUXER 0 +#define CONFIG_IDF_DEMUXER 0 +#define CONFIG_IFF_DEMUXER 0 +#define CONFIG_ILBC_DEMUXER 0 +#define CONFIG_IMAGE2_DEMUXER 0 +#define CONFIG_IMAGE2PIPE_DEMUXER 0 +#define CONFIG_IMAGE2_ALIAS_PIX_DEMUXER 0 +#define CONFIG_IMAGE2_BRENDER_PIX_DEMUXER 0 +#define CONFIG_INGENIENT_DEMUXER 0 +#define CONFIG_IPMOVIE_DEMUXER 0 +#define CONFIG_IRCAM_DEMUXER 0 +#define CONFIG_ISS_DEMUXER 0 +#define CONFIG_IV8_DEMUXER 0 +#define CONFIG_IVF_DEMUXER 0 +#define CONFIG_IVR_DEMUXER 0 +#define CONFIG_JACOSUB_DEMUXER 0 +#define CONFIG_JV_DEMUXER 0 +#define CONFIG_LMLM4_DEMUXER 0 +#define CONFIG_LOAS_DEMUXER 0 +#define CONFIG_LRC_DEMUXER 0 +#define CONFIG_LVF_DEMUXER 0 +#define CONFIG_LXF_DEMUXER 0 +#define CONFIG_M4V_DEMUXER 0 +#define CONFIG_MATROSKA_DEMUXER 0 +#define CONFIG_MGSTS_DEMUXER 0 +#define CONFIG_MICRODVD_DEMUXER 0 +#define CONFIG_MJPEG_DEMUXER 0 +#define CONFIG_MJPEG_2000_DEMUXER 0 +#define CONFIG_MLP_DEMUXER 0 +#define CONFIG_MLV_DEMUXER 0 +#define CONFIG_MM_DEMUXER 0 +#define CONFIG_MMF_DEMUXER 0 +#define CONFIG_MOV_DEMUXER 0 +#define CONFIG_MP3_DEMUXER 0 +#define CONFIG_MPC_DEMUXER 0 +#define CONFIG_MPC8_DEMUXER 0 +#define CONFIG_MPEGPS_DEMUXER 0 +#define CONFIG_MPEGTS_DEMUXER 0 +#define CONFIG_MPEGTSRAW_DEMUXER 0 +#define CONFIG_MPEGVIDEO_DEMUXER 0 +#define CONFIG_MPJPEG_DEMUXER 0 +#define CONFIG_MPL2_DEMUXER 0 +#define CONFIG_MPSUB_DEMUXER 0 +#define CONFIG_MSF_DEMUXER 0 +#define CONFIG_MSNWC_TCP_DEMUXER 0 +#define CONFIG_MTAF_DEMUXER 0 +#define CONFIG_MTV_DEMUXER 0 +#define CONFIG_MUSX_DEMUXER 0 +#define CONFIG_MV_DEMUXER 0 +#define CONFIG_MVI_DEMUXER 0 +#define CONFIG_MXF_DEMUXER 0 +#define CONFIG_MXG_DEMUXER 0 +#define CONFIG_NC_DEMUXER 0 +#define CONFIG_NISTSPHERE_DEMUXER 0 +#define CONFIG_NSV_DEMUXER 0 +#define CONFIG_NUT_DEMUXER 0 +#define CONFIG_NUV_DEMUXER 0 +#define CONFIG_OGG_DEMUXER 0 +#define CONFIG_OMA_DEMUXER 0 +#define CONFIG_PAF_DEMUXER 0 +#define CONFIG_PCM_ALAW_DEMUXER 0 +#define CONFIG_PCM_MULAW_DEMUXER 0 +#define CONFIG_PCM_F64BE_DEMUXER 0 +#define CONFIG_PCM_F64LE_DEMUXER 0 +#define CONFIG_PCM_F32BE_DEMUXER 0 +#define CONFIG_PCM_F32LE_DEMUXER 0 +#define CONFIG_PCM_S32BE_DEMUXER 0 +#define CONFIG_PCM_S32LE_DEMUXER 0 +#define CONFIG_PCM_S24BE_DEMUXER 0 +#define CONFIG_PCM_S24LE_DEMUXER 0 +#define CONFIG_PCM_S16BE_DEMUXER 0 +#define CONFIG_PCM_S16LE_DEMUXER 0 +#define CONFIG_PCM_S8_DEMUXER 0 +#define CONFIG_PCM_U32BE_DEMUXER 0 +#define CONFIG_PCM_U32LE_DEMUXER 0 +#define CONFIG_PCM_U24BE_DEMUXER 0 +#define CONFIG_PCM_U24LE_DEMUXER 0 +#define CONFIG_PCM_U16BE_DEMUXER 0 +#define CONFIG_PCM_U16LE_DEMUXER 0 +#define CONFIG_PCM_U8_DEMUXER 0 +#define CONFIG_PJS_DEMUXER 0 +#define CONFIG_PMP_DEMUXER 0 +#define CONFIG_PVA_DEMUXER 0 +#define CONFIG_PVF_DEMUXER 0 +#define CONFIG_QCP_DEMUXER 0 +#define CONFIG_R3D_DEMUXER 0 +#define CONFIG_RAWVIDEO_DEMUXER 0 +#define CONFIG_REALTEXT_DEMUXER 0 +#define CONFIG_REDSPARK_DEMUXER 0 +#define CONFIG_RL2_DEMUXER 0 +#define CONFIG_RM_DEMUXER 0 +#define CONFIG_ROQ_DEMUXER 0 +#define CONFIG_RPL_DEMUXER 0 +#define CONFIG_RSD_DEMUXER 0 +#define CONFIG_RSO_DEMUXER 0 +#define CONFIG_RTP_DEMUXER 0 +#define CONFIG_RTSP_DEMUXER 0 +#define CONFIG_S337M_DEMUXER 0 +#define CONFIG_SAMI_DEMUXER 0 +#define CONFIG_SAP_DEMUXER 0 +#define CONFIG_SBG_DEMUXER 0 +#define CONFIG_SCC_DEMUXER 0 +#define CONFIG_SDP_DEMUXER 0 +#define CONFIG_SDR2_DEMUXER 0 +#define CONFIG_SDS_DEMUXER 0 +#define CONFIG_SDX_DEMUXER 0 +#define CONFIG_SEGAFILM_DEMUXER 0 +#define CONFIG_SHORTEN_DEMUXER 0 +#define CONFIG_SIFF_DEMUXER 0 +#define CONFIG_SLN_DEMUXER 0 +#define CONFIG_SMACKER_DEMUXER 0 +#define CONFIG_SMJPEG_DEMUXER 0 +#define CONFIG_SMUSH_DEMUXER 0 +#define CONFIG_SOL_DEMUXER 0 +#define CONFIG_SOX_DEMUXER 0 +#define CONFIG_SPDIF_DEMUXER 0 +#define CONFIG_SRT_DEMUXER 0 +#define CONFIG_STR_DEMUXER 0 +#define CONFIG_STL_DEMUXER 0 +#define CONFIG_SUBVIEWER1_DEMUXER 0 +#define CONFIG_SUBVIEWER_DEMUXER 0 +#define CONFIG_SUP_DEMUXER 0 +#define CONFIG_SVAG_DEMUXER 0 +#define CONFIG_SWF_DEMUXER 0 +#define CONFIG_TAK_DEMUXER 0 +#define CONFIG_TEDCAPTIONS_DEMUXER 0 +#define CONFIG_THP_DEMUXER 0 +#define CONFIG_THREEDOSTR_DEMUXER 0 +#define CONFIG_TIERTEXSEQ_DEMUXER 0 +#define CONFIG_TMV_DEMUXER 0 +#define CONFIG_TRUEHD_DEMUXER 0 +#define CONFIG_TTA_DEMUXER 0 +#define CONFIG_TXD_DEMUXER 0 +#define CONFIG_TTY_DEMUXER 0 +#define CONFIG_V210_DEMUXER 0 +#define CONFIG_V210X_DEMUXER 0 +#define CONFIG_VAG_DEMUXER 0 +#define CONFIG_VC1_DEMUXER 0 +#define CONFIG_VC1T_DEMUXER 0 +#define CONFIG_VIVO_DEMUXER 0 +#define CONFIG_VMD_DEMUXER 0 +#define CONFIG_VOBSUB_DEMUXER 0 +#define CONFIG_VOC_DEMUXER 0 +#define CONFIG_VPK_DEMUXER 0 +#define CONFIG_VPLAYER_DEMUXER 0 +#define CONFIG_VQF_DEMUXER 0 +#define CONFIG_W64_DEMUXER 0 +#define CONFIG_WAV_DEMUXER 0 +#define CONFIG_WC3_DEMUXER 0 +#define CONFIG_WEBM_DASH_MANIFEST_DEMUXER 0 +#define CONFIG_WEBVTT_DEMUXER 0 +#define CONFIG_WSAUD_DEMUXER 0 +#define CONFIG_WSD_DEMUXER 0 +#define CONFIG_WSVQA_DEMUXER 0 +#define CONFIG_WTV_DEMUXER 0 +#define CONFIG_WVE_DEMUXER 0 +#define CONFIG_WV_DEMUXER 0 +#define CONFIG_XA_DEMUXER 0 +#define CONFIG_XBIN_DEMUXER 0 +#define CONFIG_XMV_DEMUXER 0 +#define CONFIG_XVAG_DEMUXER 0 +#define CONFIG_XWMA_DEMUXER 0 +#define CONFIG_YOP_DEMUXER 0 +#define CONFIG_YUV4MPEGPIPE_DEMUXER 0 +#define CONFIG_IMAGE_BMP_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_DDS_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_DPX_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_EXR_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_J2K_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_JPEG_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_JPEGLS_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PAM_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PBM_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PCX_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PGMYUV_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PGM_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PICTOR_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PNG_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PPM_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_PSD_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_QDRAW_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_SGI_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_SVG_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_SUNRAST_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_TIFF_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_WEBP_PIPE_DEMUXER 0 +#define CONFIG_IMAGE_XPM_PIPE_DEMUXER 0 +#define CONFIG_LIBGME_DEMUXER 0 +#define CONFIG_LIBMODPLUG_DEMUXER 0 +#define CONFIG_LIBOPENMPT_DEMUXER 0 +#define CONFIG_A64MULTI_ENCODER 0 +#define CONFIG_A64MULTI5_ENCODER 0 +#define CONFIG_ALIAS_PIX_ENCODER 0 +#define CONFIG_AMV_ENCODER 0 +#define CONFIG_APNG_ENCODER 0 +#define CONFIG_ASV1_ENCODER 0 +#define CONFIG_ASV2_ENCODER 0 +#define CONFIG_AVRP_ENCODER 0 +#define CONFIG_AVUI_ENCODER 0 +#define CONFIG_AYUV_ENCODER 0 +#define CONFIG_BMP_ENCODER 0 +#define CONFIG_CINEPAK_ENCODER 0 +#define CONFIG_CLJR_ENCODER 0 +#define CONFIG_COMFORTNOISE_ENCODER 0 +#define CONFIG_DNXHD_ENCODER 0 +#define CONFIG_DPX_ENCODER 0 +#define CONFIG_DVVIDEO_ENCODER 0 +#define CONFIG_FFV1_ENCODER 0 +#define CONFIG_FFVHUFF_ENCODER 0 +#define CONFIG_FITS_ENCODER 0 +#define CONFIG_FLASHSV_ENCODER 0 +#define CONFIG_FLASHSV2_ENCODER 0 +#define CONFIG_FLV_ENCODER 0 +#define CONFIG_GIF_ENCODER 0 +#define CONFIG_H261_ENCODER 0 +#define CONFIG_H263_ENCODER 0 +#define CONFIG_H263P_ENCODER 0 +#define CONFIG_HAP_ENCODER 0 +#define CONFIG_HUFFYUV_ENCODER 0 +#define CONFIG_JPEG2000_ENCODER 0 +#define CONFIG_JPEGLS_ENCODER 0 +#define CONFIG_LJPEG_ENCODER 0 +#define CONFIG_MJPEG_ENCODER 0 +#define CONFIG_MPEG1VIDEO_ENCODER 0 +#define CONFIG_MPEG2VIDEO_ENCODER 0 +#define CONFIG_MPEG4_ENCODER 0 +#define CONFIG_MSMPEG4V2_ENCODER 0 +#define CONFIG_MSMPEG4V3_ENCODER 0 +#define CONFIG_MSVIDEO1_ENCODER 0 +#define CONFIG_PAM_ENCODER 0 +#define CONFIG_PBM_ENCODER 0 +#define CONFIG_PCX_ENCODER 0 +#define CONFIG_PGM_ENCODER 0 +#define CONFIG_PGMYUV_ENCODER 0 +#define CONFIG_PNG_ENCODER 0 +#define CONFIG_PPM_ENCODER 0 +#define CONFIG_PRORES_ENCODER 0 +#define CONFIG_PRORES_AW_ENCODER 0 +#define CONFIG_PRORES_KS_ENCODER 0 +#define CONFIG_QTRLE_ENCODER 0 +#define CONFIG_R10K_ENCODER 0 +#define CONFIG_R210_ENCODER 0 +#define CONFIG_RAWVIDEO_ENCODER 0 +#define CONFIG_ROQ_ENCODER 0 +#define CONFIG_RV10_ENCODER 0 +#define CONFIG_RV20_ENCODER 0 +#define CONFIG_S302M_ENCODER 0 +#define CONFIG_SGI_ENCODER 0 +#define CONFIG_SNOW_ENCODER 0 +#define CONFIG_SUNRAST_ENCODER 0 +#define CONFIG_SVQ1_ENCODER 0 +#define CONFIG_TARGA_ENCODER 0 +#define CONFIG_TIFF_ENCODER 0 +#define CONFIG_UTVIDEO_ENCODER 0 +#define CONFIG_V210_ENCODER 0 +#define CONFIG_V308_ENCODER 0 +#define CONFIG_V408_ENCODER 0 +#define CONFIG_V410_ENCODER 0 +#define CONFIG_VC2_ENCODER 0 +#define CONFIG_WRAPPED_AVFRAME_ENCODER 0 +#define CONFIG_WMV1_ENCODER 0 +#define CONFIG_WMV2_ENCODER 0 +#define CONFIG_XBM_ENCODER 0 +#define CONFIG_XFACE_ENCODER 0 +#define CONFIG_XWD_ENCODER 0 +#define CONFIG_Y41P_ENCODER 0 +#define CONFIG_YUV4_ENCODER 0 +#define CONFIG_ZLIB_ENCODER 0 +#define CONFIG_ZMBV_ENCODER 0 +#define CONFIG_AAC_ENCODER 0 +#define CONFIG_AC3_ENCODER 0 +#define CONFIG_AC3_FIXED_ENCODER 0 +#define CONFIG_ALAC_ENCODER 0 +#define CONFIG_DCA_ENCODER 0 +#define CONFIG_EAC3_ENCODER 0 +#define CONFIG_FLAC_ENCODER 0 +#define CONFIG_G723_1_ENCODER 0 +#define CONFIG_MLP_ENCODER 0 +#define CONFIG_MP2_ENCODER 0 +#define CONFIG_MP2FIXED_ENCODER 0 +#define CONFIG_NELLYMOSER_ENCODER 0 +#define CONFIG_OPUS_ENCODER 0 +#define CONFIG_RA_144_ENCODER 0 +#define CONFIG_SONIC_ENCODER 0 +#define CONFIG_SONIC_LS_ENCODER 0 +#define CONFIG_TRUEHD_ENCODER 0 +#define CONFIG_TTA_ENCODER 0 +#define CONFIG_VORBIS_ENCODER 0 +#define CONFIG_WAVPACK_ENCODER 0 +#define CONFIG_WMAV1_ENCODER 0 +#define CONFIG_WMAV2_ENCODER 0 +#define CONFIG_PCM_ALAW_ENCODER 0 +#define CONFIG_PCM_F32BE_ENCODER 0 +#define CONFIG_PCM_F32LE_ENCODER 0 +#define CONFIG_PCM_F64BE_ENCODER 0 +#define CONFIG_PCM_F64LE_ENCODER 0 +#define CONFIG_PCM_MULAW_ENCODER 0 +#define CONFIG_PCM_S8_ENCODER 0 +#define CONFIG_PCM_S8_PLANAR_ENCODER 0 +#define CONFIG_PCM_S16BE_ENCODER 0 +#define CONFIG_PCM_S16BE_PLANAR_ENCODER 0 +#define CONFIG_PCM_S16LE_ENCODER 0 +#define CONFIG_PCM_S16LE_PLANAR_ENCODER 0 +#define CONFIG_PCM_S24BE_ENCODER 0 +#define CONFIG_PCM_S24DAUD_ENCODER 0 +#define CONFIG_PCM_S24LE_ENCODER 0 +#define CONFIG_PCM_S24LE_PLANAR_ENCODER 0 +#define CONFIG_PCM_S32BE_ENCODER 0 +#define CONFIG_PCM_S32LE_ENCODER 0 +#define CONFIG_PCM_S32LE_PLANAR_ENCODER 0 +#define CONFIG_PCM_S64BE_ENCODER 0 +#define CONFIG_PCM_S64LE_ENCODER 0 +#define CONFIG_PCM_U8_ENCODER 0 +#define CONFIG_PCM_U16BE_ENCODER 0 +#define CONFIG_PCM_U16LE_ENCODER 0 +#define CONFIG_PCM_U24BE_ENCODER 0 +#define CONFIG_PCM_U24LE_ENCODER 0 +#define CONFIG_PCM_U32BE_ENCODER 0 +#define CONFIG_PCM_U32LE_ENCODER 0 +#define CONFIG_ROQ_DPCM_ENCODER 0 +#define CONFIG_ADPCM_ADX_ENCODER 0 +#define CONFIG_ADPCM_G722_ENCODER 0 +#define CONFIG_ADPCM_G726_ENCODER 0 +#define CONFIG_ADPCM_G726LE_ENCODER 0 +#define CONFIG_ADPCM_IMA_QT_ENCODER 0 +#define CONFIG_ADPCM_IMA_WAV_ENCODER 0 +#define CONFIG_ADPCM_MS_ENCODER 0 +#define CONFIG_ADPCM_SWF_ENCODER 0 +#define CONFIG_ADPCM_YAMAHA_ENCODER 0 +#define CONFIG_SSA_ENCODER 0 +#define CONFIG_ASS_ENCODER 0 +#define CONFIG_DVBSUB_ENCODER 0 +#define CONFIG_DVDSUB_ENCODER 0 +#define CONFIG_MOVTEXT_ENCODER 0 +#define CONFIG_SRT_ENCODER 0 +#define CONFIG_SUBRIP_ENCODER 0 +#define CONFIG_TEXT_ENCODER 0 +#define CONFIG_WEBVTT_ENCODER 0 +#define CONFIG_XSUB_ENCODER 0 +#define CONFIG_AAC_AT_ENCODER 0 +#define CONFIG_ALAC_AT_ENCODER 0 +#define CONFIG_ILBC_AT_ENCODER 0 +#define CONFIG_PCM_ALAW_AT_ENCODER 0 +#define CONFIG_PCM_MULAW_AT_ENCODER 0 +#define CONFIG_LIBFDK_AAC_ENCODER 0 +#define CONFIG_LIBGSM_ENCODER 0 +#define CONFIG_LIBGSM_MS_ENCODER 0 +#define CONFIG_LIBILBC_ENCODER 0 +#define CONFIG_LIBMP3LAME_ENCODER 0 +#define CONFIG_LIBOPENCORE_AMRNB_ENCODER 0 +#define CONFIG_LIBOPENJPEG_ENCODER 0 +#define CONFIG_LIBOPUS_ENCODER 0 +#define CONFIG_LIBSHINE_ENCODER 0 +#define CONFIG_LIBSPEEX_ENCODER 0 +#define CONFIG_LIBTHEORA_ENCODER 0 +#define CONFIG_LIBTWOLAME_ENCODER 0 +#define CONFIG_LIBVO_AMRWBENC_ENCODER 0 +#define CONFIG_LIBVORBIS_ENCODER 0 +#define CONFIG_LIBVPX_VP8_ENCODER 0 +#define CONFIG_LIBVPX_VP9_ENCODER 0 +#define CONFIG_LIBWAVPACK_ENCODER 0 +#define CONFIG_LIBWEBP_ANIM_ENCODER 0 +#define CONFIG_LIBWEBP_ENCODER 0 +#define CONFIG_LIBX262_ENCODER 0 +#define CONFIG_LIBX264_ENCODER 0 +#define CONFIG_LIBX264RGB_ENCODER 0 +#define CONFIG_LIBX265_ENCODER 0 +#define CONFIG_LIBXAVS_ENCODER 0 +#define CONFIG_LIBXVID_ENCODER 0 +#define CONFIG_H263_V4L2M2M_ENCODER 0 +#define CONFIG_LIBOPENH264_ENCODER 0 +#define CONFIG_H264_NVENC_ENCODER 0 +#define CONFIG_H264_OMX_ENCODER 0 +#define CONFIG_H264_QSV_ENCODER 0 +#define CONFIG_H264_V4L2M2M_ENCODER 0 +#define CONFIG_H264_VAAPI_ENCODER 0 +#define CONFIG_H264_VIDEOTOOLBOX_ENCODER 0 +#define CONFIG_NVENC_ENCODER 0 +#define CONFIG_NVENC_H264_ENCODER 0 +#define CONFIG_NVENC_HEVC_ENCODER 0 +#define CONFIG_HEVC_NVENC_ENCODER 0 +#define CONFIG_HEVC_QSV_ENCODER 0 +#define CONFIG_HEVC_V4L2M2M_ENCODER 0 +#define CONFIG_HEVC_VAAPI_ENCODER 0 +#define CONFIG_LIBKVAZAAR_ENCODER 0 +#define CONFIG_MJPEG_VAAPI_ENCODER 0 +#define CONFIG_MPEG2_QSV_ENCODER 0 +#define CONFIG_MPEG2_VAAPI_ENCODER 0 +#define CONFIG_MPEG4_V4L2M2M_ENCODER 0 +#define CONFIG_VP8_V4L2M2M_ENCODER 0 +#define CONFIG_VP8_VAAPI_ENCODER 0 +#define CONFIG_VP9_VAAPI_ENCODER 0 +#define CONFIG_ABENCH_FILTER 0 +#define CONFIG_ACOMPRESSOR_FILTER 0 +#define CONFIG_ACOPY_FILTER 0 +#define CONFIG_ACROSSFADE_FILTER 0 +#define CONFIG_ACRUSHER_FILTER 0 +#define CONFIG_ADELAY_FILTER 0 +#define CONFIG_AECHO_FILTER 0 +#define CONFIG_AEMPHASIS_FILTER 0 +#define CONFIG_AEVAL_FILTER 0 +#define CONFIG_AFADE_FILTER 0 +#define CONFIG_AFFTFILT_FILTER 0 +#define CONFIG_AFIR_FILTER 0 +#define CONFIG_AFORMAT_FILTER 0 +#define CONFIG_AGATE_FILTER 0 +#define CONFIG_AINTERLEAVE_FILTER 0 +#define CONFIG_ALIMITER_FILTER 0 +#define CONFIG_ALLPASS_FILTER 0 +#define CONFIG_ALOOP_FILTER 0 +#define CONFIG_AMERGE_FILTER 0 +#define CONFIG_AMETADATA_FILTER 0 +#define CONFIG_AMIX_FILTER 0 +#define CONFIG_ANEQUALIZER_FILTER 0 +#define CONFIG_ANULL_FILTER 0 +#define CONFIG_APAD_FILTER 0 +#define CONFIG_APERMS_FILTER 0 +#define CONFIG_APHASER_FILTER 0 +#define CONFIG_APULSATOR_FILTER 0 +#define CONFIG_AREALTIME_FILTER 0 +#define CONFIG_ARESAMPLE_FILTER 0 +#define CONFIG_AREVERSE_FILTER 0 +#define CONFIG_ASELECT_FILTER 0 +#define CONFIG_ASENDCMD_FILTER 0 +#define CONFIG_ASETNSAMPLES_FILTER 0 +#define CONFIG_ASETPTS_FILTER 0 +#define CONFIG_ASETRATE_FILTER 0 +#define CONFIG_ASETTB_FILTER 0 +#define CONFIG_ASHOWINFO_FILTER 0 +#define CONFIG_ASIDEDATA_FILTER 0 +#define CONFIG_ASPLIT_FILTER 0 +#define CONFIG_ASTATS_FILTER 0 +#define CONFIG_ASTREAMSELECT_FILTER 0 +#define CONFIG_ATEMPO_FILTER 0 +#define CONFIG_ATRIM_FILTER 0 +#define CONFIG_AZMQ_FILTER 0 +#define CONFIG_BANDPASS_FILTER 0 +#define CONFIG_BANDREJECT_FILTER 0 +#define CONFIG_BASS_FILTER 0 +#define CONFIG_BIQUAD_FILTER 0 +#define CONFIG_BS2B_FILTER 0 +#define CONFIG_CHANNELMAP_FILTER 0 +#define CONFIG_CHANNELSPLIT_FILTER 0 +#define CONFIG_CHORUS_FILTER 0 +#define CONFIG_COMPAND_FILTER 0 +#define CONFIG_COMPENSATIONDELAY_FILTER 0 +#define CONFIG_CROSSFEED_FILTER 0 +#define CONFIG_CRYSTALIZER_FILTER 0 +#define CONFIG_DCSHIFT_FILTER 0 +#define CONFIG_DYNAUDNORM_FILTER 0 +#define CONFIG_EARWAX_FILTER 0 +#define CONFIG_EBUR128_FILTER 0 +#define CONFIG_EQUALIZER_FILTER 0 +#define CONFIG_EXTRASTEREO_FILTER 0 +#define CONFIG_FIREQUALIZER_FILTER 0 +#define CONFIG_FLANGER_FILTER 0 +#define CONFIG_HAAS_FILTER 0 +#define CONFIG_HDCD_FILTER 0 +#define CONFIG_HEADPHONE_FILTER 0 +#define CONFIG_HIGHPASS_FILTER 0 +#define CONFIG_JOIN_FILTER 0 +#define CONFIG_LADSPA_FILTER 0 +#define CONFIG_LOUDNORM_FILTER 0 +#define CONFIG_LOWPASS_FILTER 0 +#define CONFIG_PAN_FILTER 0 +#define CONFIG_REPLAYGAIN_FILTER 0 +#define CONFIG_RESAMPLE_FILTER 0 +#define CONFIG_RUBBERBAND_FILTER 0 +#define CONFIG_SIDECHAINCOMPRESS_FILTER 0 +#define CONFIG_SIDECHAINGATE_FILTER 0 +#define CONFIG_SILENCEDETECT_FILTER 0 +#define CONFIG_SILENCEREMOVE_FILTER 0 +#define CONFIG_SOFALIZER_FILTER 0 +#define CONFIG_STEREOTOOLS_FILTER 0 +#define CONFIG_STEREOWIDEN_FILTER 0 +#define CONFIG_SUPEREQUALIZER_FILTER 0 +#define CONFIG_SURROUND_FILTER 0 +#define CONFIG_TREBLE_FILTER 0 +#define CONFIG_TREMOLO_FILTER 0 +#define CONFIG_VIBRATO_FILTER 0 +#define CONFIG_VOLUME_FILTER 0 +#define CONFIG_VOLUMEDETECT_FILTER 0 +#define CONFIG_AEVALSRC_FILTER 0 +#define CONFIG_ANOISESRC_FILTER 0 +#define CONFIG_ANULLSRC_FILTER 0 +#define CONFIG_FLITE_FILTER 0 +#define CONFIG_SINE_FILTER 0 +#define CONFIG_ANULLSINK_FILTER 0 +#define CONFIG_ALPHAEXTRACT_FILTER 0 +#define CONFIG_ALPHAMERGE_FILTER 0 +#define CONFIG_ASS_FILTER 0 +#define CONFIG_ATADENOISE_FILTER 0 +#define CONFIG_AVGBLUR_FILTER 0 +#define CONFIG_BBOX_FILTER 0 +#define CONFIG_BENCH_FILTER 0 +#define CONFIG_BITPLANENOISE_FILTER 0 +#define CONFIG_BLACKDETECT_FILTER 0 +#define CONFIG_BLACKFRAME_FILTER 0 +#define CONFIG_BLEND_FILTER 0 +#define CONFIG_BOXBLUR_FILTER 0 +#define CONFIG_BWDIF_FILTER 0 +#define CONFIG_CHROMAKEY_FILTER 0 +#define CONFIG_CIESCOPE_FILTER 0 +#define CONFIG_CODECVIEW_FILTER 0 +#define CONFIG_COLORBALANCE_FILTER 0 +#define CONFIG_COLORCHANNELMIXER_FILTER 0 +#define CONFIG_COLORKEY_FILTER 0 +#define CONFIG_COLORLEVELS_FILTER 0 +#define CONFIG_COLORMATRIX_FILTER 0 +#define CONFIG_COLORSPACE_FILTER 0 +#define CONFIG_CONVOLUTION_FILTER 0 +#define CONFIG_CONVOLVE_FILTER 0 +#define CONFIG_COPY_FILTER 0 +#define CONFIG_COREIMAGE_FILTER 0 +#define CONFIG_COVER_RECT_FILTER 0 +#define CONFIG_CROP_FILTER 0 +#define CONFIG_CROPDETECT_FILTER 0 +#define CONFIG_CURVES_FILTER 0 +#define CONFIG_DATASCOPE_FILTER 0 +#define CONFIG_DCTDNOIZ_FILTER 0 +#define CONFIG_DEBAND_FILTER 0 +#define CONFIG_DECIMATE_FILTER 0 +#define CONFIG_DEFLATE_FILTER 0 +#define CONFIG_DEFLICKER_FILTER 0 +#define CONFIG_DEINTERLACE_QSV_FILTER 0 +#define CONFIG_DEINTERLACE_VAAPI_FILTER 0 +#define CONFIG_DEJUDDER_FILTER 0 +#define CONFIG_DELOGO_FILTER 0 +#define CONFIG_DESHAKE_FILTER 0 +#define CONFIG_DESPILL_FILTER 0 +#define CONFIG_DETELECINE_FILTER 0 +#define CONFIG_DILATION_FILTER 0 +#define CONFIG_DISPLACE_FILTER 0 +#define CONFIG_DOUBLEWEAVE_FILTER 0 +#define CONFIG_DRAWBOX_FILTER 0 +#define CONFIG_DRAWGRAPH_FILTER 0 +#define CONFIG_DRAWGRID_FILTER 0 +#define CONFIG_DRAWTEXT_FILTER 0 +#define CONFIG_EDGEDETECT_FILTER 0 +#define CONFIG_ELBG_FILTER 0 +#define CONFIG_EQ_FILTER 0 +#define CONFIG_EROSION_FILTER 0 +#define CONFIG_EXTRACTPLANES_FILTER 0 +#define CONFIG_FADE_FILTER 0 +#define CONFIG_FFTFILT_FILTER 0 +#define CONFIG_FIELD_FILTER 0 +#define CONFIG_FIELDHINT_FILTER 0 +#define CONFIG_FIELDMATCH_FILTER 0 +#define CONFIG_FIELDORDER_FILTER 0 +#define CONFIG_FIND_RECT_FILTER 0 +#define CONFIG_FLOODFILL_FILTER 0 +#define CONFIG_FORMAT_FILTER 0 +#define CONFIG_FPS_FILTER 0 +#define CONFIG_FRAMEPACK_FILTER 0 +#define CONFIG_FRAMERATE_FILTER 0 +#define CONFIG_FRAMESTEP_FILTER 0 +#define CONFIG_FREI0R_FILTER 0 +#define CONFIG_FSPP_FILTER 0 +#define CONFIG_GBLUR_FILTER 0 +#define CONFIG_GEQ_FILTER 0 +#define CONFIG_GRADFUN_FILTER 0 +#define CONFIG_HALDCLUT_FILTER 0 +#define CONFIG_HFLIP_FILTER 0 +#define CONFIG_HISTEQ_FILTER 0 +#define CONFIG_HISTOGRAM_FILTER 0 +#define CONFIG_HQDN3D_FILTER 0 +#define CONFIG_HQX_FILTER 0 +#define CONFIG_HSTACK_FILTER 0 +#define CONFIG_HUE_FILTER 0 +#define CONFIG_HWDOWNLOAD_FILTER 0 +#define CONFIG_HWMAP_FILTER 0 +#define CONFIG_HWUPLOAD_FILTER 0 +#define CONFIG_HWUPLOAD_CUDA_FILTER 0 +#define CONFIG_HYSTERESIS_FILTER 0 +#define CONFIG_IDET_FILTER 0 +#define CONFIG_IL_FILTER 0 +#define CONFIG_INFLATE_FILTER 0 +#define CONFIG_INTERLACE_FILTER 0 +#define CONFIG_INTERLEAVE_FILTER 0 +#define CONFIG_KERNDEINT_FILTER 0 +#define CONFIG_LENSCORRECTION_FILTER 0 +#define CONFIG_LIBVMAF_FILTER 0 +#define CONFIG_LIMITER_FILTER 0 +#define CONFIG_LOOP_FILTER 0 +#define CONFIG_LUMAKEY_FILTER 0 +#define CONFIG_LUT_FILTER 0 +#define CONFIG_LUT2_FILTER 0 +#define CONFIG_LUT3D_FILTER 0 +#define CONFIG_LUTRGB_FILTER 0 +#define CONFIG_LUTYUV_FILTER 0 +#define CONFIG_MASKEDCLAMP_FILTER 0 +#define CONFIG_MASKEDMERGE_FILTER 0 +#define CONFIG_MCDEINT_FILTER 0 +#define CONFIG_MERGEPLANES_FILTER 0 +#define CONFIG_MESTIMATE_FILTER 0 +#define CONFIG_METADATA_FILTER 0 +#define CONFIG_MIDEQUALIZER_FILTER 0 +#define CONFIG_MINTERPOLATE_FILTER 0 +#define CONFIG_MPDECIMATE_FILTER 0 +#define CONFIG_NEGATE_FILTER 0 +#define CONFIG_NLMEANS_FILTER 0 +#define CONFIG_NNEDI_FILTER 0 +#define CONFIG_NOFORMAT_FILTER 0 +#define CONFIG_NOISE_FILTER 0 +#define CONFIG_NULL_FILTER 0 +#define CONFIG_OCR_FILTER 0 +#define CONFIG_OCV_FILTER 0 +#define CONFIG_OSCILLOSCOPE_FILTER 0 +#define CONFIG_OVERLAY_FILTER 0 +#define CONFIG_OWDENOISE_FILTER 0 +#define CONFIG_PAD_FILTER 0 +#define CONFIG_PALETTEGEN_FILTER 0 +#define CONFIG_PALETTEUSE_FILTER 0 +#define CONFIG_PERMS_FILTER 0 +#define CONFIG_PERSPECTIVE_FILTER 0 +#define CONFIG_PHASE_FILTER 0 +#define CONFIG_PIXDESCTEST_FILTER 0 +#define CONFIG_PIXSCOPE_FILTER 0 +#define CONFIG_PP_FILTER 0 +#define CONFIG_PP7_FILTER 0 +#define CONFIG_PREMULTIPLY_FILTER 0 +#define CONFIG_PREWITT_FILTER 0 +#define CONFIG_PSEUDOCOLOR_FILTER 0 +#define CONFIG_PSNR_FILTER 0 +#define CONFIG_PULLUP_FILTER 0 +#define CONFIG_QP_FILTER 0 +#define CONFIG_RANDOM_FILTER 0 +#define CONFIG_READEIA608_FILTER 0 +#define CONFIG_READVITC_FILTER 0 +#define CONFIG_REALTIME_FILTER 0 +#define CONFIG_REMAP_FILTER 0 +#define CONFIG_REMOVEGRAIN_FILTER 0 +#define CONFIG_REMOVELOGO_FILTER 0 +#define CONFIG_REPEATFIELDS_FILTER 0 +#define CONFIG_REVERSE_FILTER 0 +#define CONFIG_ROBERTS_FILTER 0 +#define CONFIG_ROTATE_FILTER 0 +#define CONFIG_SAB_FILTER 0 +#define CONFIG_SCALE_FILTER 0 +#define CONFIG_SCALE_CUDA_FILTER 0 +#define CONFIG_SCALE_NPP_FILTER 0 +#define CONFIG_SCALE_QSV_FILTER 0 +#define CONFIG_SCALE_VAAPI_FILTER 0 +#define CONFIG_SCALE2REF_FILTER 0 +#define CONFIG_SELECT_FILTER 0 +#define CONFIG_SELECTIVECOLOR_FILTER 0 +#define CONFIG_SENDCMD_FILTER 0 +#define CONFIG_SEPARATEFIELDS_FILTER 0 +#define CONFIG_SETDAR_FILTER 0 +#define CONFIG_SETFIELD_FILTER 0 +#define CONFIG_SETPTS_FILTER 0 +#define CONFIG_SETSAR_FILTER 0 +#define CONFIG_SETTB_FILTER 0 +#define CONFIG_SHOWINFO_FILTER 0 +#define CONFIG_SHOWPALETTE_FILTER 0 +#define CONFIG_SHUFFLEFRAMES_FILTER 0 +#define CONFIG_SHUFFLEPLANES_FILTER 0 +#define CONFIG_SIDEDATA_FILTER 0 +#define CONFIG_SIGNALSTATS_FILTER 0 +#define CONFIG_SIGNATURE_FILTER 0 +#define CONFIG_SMARTBLUR_FILTER 0 +#define CONFIG_SOBEL_FILTER 0 +#define CONFIG_SPLIT_FILTER 0 +#define CONFIG_SPP_FILTER 0 +#define CONFIG_SSIM_FILTER 0 +#define CONFIG_STEREO3D_FILTER 0 +#define CONFIG_STREAMSELECT_FILTER 0 +#define CONFIG_SUBTITLES_FILTER 0 +#define CONFIG_SUPER2XSAI_FILTER 0 +#define CONFIG_SWAPRECT_FILTER 0 +#define CONFIG_SWAPUV_FILTER 0 +#define CONFIG_TBLEND_FILTER 0 +#define CONFIG_TELECINE_FILTER 0 +#define CONFIG_THRESHOLD_FILTER 0 +#define CONFIG_THUMBNAIL_FILTER 0 +#define CONFIG_THUMBNAIL_CUDA_FILTER 0 +#define CONFIG_TILE_FILTER 0 +#define CONFIG_TINTERLACE_FILTER 0 +#define CONFIG_TLUT2_FILTER 0 +#define CONFIG_TONEMAP_FILTER 0 +#define CONFIG_TRANSPOSE_FILTER 0 +#define CONFIG_TRIM_FILTER 0 +#define CONFIG_UNPREMULTIPLY_FILTER 0 +#define CONFIG_UNSHARP_FILTER 0 +#define CONFIG_USPP_FILTER 0 +#define CONFIG_VAGUEDENOISER_FILTER 0 +#define CONFIG_VECTORSCOPE_FILTER 0 +#define CONFIG_VFLIP_FILTER 0 +#define CONFIG_VIDSTABDETECT_FILTER 0 +#define CONFIG_VIDSTABTRANSFORM_FILTER 0 +#define CONFIG_VIGNETTE_FILTER 0 +#define CONFIG_VMAFMOTION_FILTER 0 +#define CONFIG_VSTACK_FILTER 0 +#define CONFIG_W3FDIF_FILTER 0 +#define CONFIG_WAVEFORM_FILTER 0 +#define CONFIG_WEAVE_FILTER 0 +#define CONFIG_XBR_FILTER 0 +#define CONFIG_YADIF_FILTER 0 +#define CONFIG_ZMQ_FILTER 0 +#define CONFIG_ZOOMPAN_FILTER 0 +#define CONFIG_ZSCALE_FILTER 0 +#define CONFIG_ALLRGB_FILTER 0 +#define CONFIG_ALLYUV_FILTER 0 +#define CONFIG_CELLAUTO_FILTER 0 +#define CONFIG_COLOR_FILTER 0 +#define CONFIG_COREIMAGESRC_FILTER 0 +#define CONFIG_FREI0R_SRC_FILTER 0 +#define CONFIG_HALDCLUTSRC_FILTER 0 +#define CONFIG_LIFE_FILTER 0 +#define CONFIG_MANDELBROT_FILTER 0 +#define CONFIG_MPTESTSRC_FILTER 0 +#define CONFIG_NULLSRC_FILTER 0 +#define CONFIG_RGBTESTSRC_FILTER 0 +#define CONFIG_SMPTEBARS_FILTER 0 +#define CONFIG_SMPTEHDBARS_FILTER 0 +#define CONFIG_TESTSRC_FILTER 0 +#define CONFIG_TESTSRC2_FILTER 0 +#define CONFIG_YUVTESTSRC_FILTER 0 +#define CONFIG_NULLSINK_FILTER 0 +#define CONFIG_ABITSCOPE_FILTER 0 +#define CONFIG_ADRAWGRAPH_FILTER 0 +#define CONFIG_AHISTOGRAM_FILTER 0 +#define CONFIG_APHASEMETER_FILTER 0 +#define CONFIG_AVECTORSCOPE_FILTER 0 +#define CONFIG_CONCAT_FILTER 0 +#define CONFIG_SHOWCQT_FILTER 0 +#define CONFIG_SHOWFREQS_FILTER 0 +#define CONFIG_SHOWSPECTRUM_FILTER 0 +#define CONFIG_SHOWSPECTRUMPIC_FILTER 0 +#define CONFIG_SHOWVOLUME_FILTER 0 +#define CONFIG_SHOWWAVES_FILTER 0 +#define CONFIG_SHOWWAVESPIC_FILTER 0 +#define CONFIG_SPECTRUMSYNTH_FILTER 0 +#define CONFIG_AMOVIE_FILTER 0 +#define CONFIG_MOVIE_FILTER 0 +#define CONFIG_H263_VAAPI_HWACCEL 0 +#define CONFIG_H263_VIDEOTOOLBOX_HWACCEL 0 +#define CONFIG_H264_CUVID_HWACCEL 0 +#define CONFIG_H264_D3D11VA_HWACCEL 0 +#define CONFIG_H264_D3D11VA2_HWACCEL 0 +#define CONFIG_H264_DXVA2_HWACCEL 0 +#define CONFIG_H264_MEDIACODEC_HWACCEL 0 +#define CONFIG_H264_MMAL_HWACCEL 0 +#define CONFIG_H264_QSV_HWACCEL 0 +#define CONFIG_H264_VAAPI_HWACCEL 0 +#define CONFIG_H264_VDA_HWACCEL 0 +#define CONFIG_H264_VDA_OLD_HWACCEL 0 +#define CONFIG_H264_VDPAU_HWACCEL 0 +#define CONFIG_H264_VIDEOTOOLBOX_HWACCEL 0 +#define CONFIG_HEVC_CUVID_HWACCEL 0 +#define CONFIG_HEVC_D3D11VA_HWACCEL 0 +#define CONFIG_HEVC_D3D11VA2_HWACCEL 0 +#define CONFIG_HEVC_DXVA2_HWACCEL 0 +#define CONFIG_HEVC_MEDIACODEC_HWACCEL 0 +#define CONFIG_HEVC_QSV_HWACCEL 0 +#define CONFIG_HEVC_VAAPI_HWACCEL 0 +#define CONFIG_HEVC_VDPAU_HWACCEL 0 +#define CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL 0 +#define CONFIG_MJPEG_CUVID_HWACCEL 0 +#define CONFIG_MPEG1_CUVID_HWACCEL 0 +#define CONFIG_MPEG1_XVMC_HWACCEL 0 +#define CONFIG_MPEG1_VDPAU_HWACCEL 0 +#define CONFIG_MPEG1_VIDEOTOOLBOX_HWACCEL 0 +#define CONFIG_MPEG2_CUVID_HWACCEL 0 +#define CONFIG_MPEG2_XVMC_HWACCEL 0 +#define CONFIG_MPEG2_D3D11VA_HWACCEL 0 +#define CONFIG_MPEG2_D3D11VA2_HWACCEL 0 +#define CONFIG_MPEG2_DXVA2_HWACCEL 0 +#define CONFIG_MPEG2_MMAL_HWACCEL 0 +#define CONFIG_MPEG2_QSV_HWACCEL 0 +#define CONFIG_MPEG2_VAAPI_HWACCEL 0 +#define CONFIG_MPEG2_VDPAU_HWACCEL 0 +#define CONFIG_MPEG2_VIDEOTOOLBOX_HWACCEL 0 +#define CONFIG_MPEG2_MEDIACODEC_HWACCEL 0 +#define CONFIG_MPEG4_CUVID_HWACCEL 0 +#define CONFIG_MPEG4_MEDIACODEC_HWACCEL 0 +#define CONFIG_MPEG4_MMAL_HWACCEL 0 +#define CONFIG_MPEG4_VAAPI_HWACCEL 0 +#define CONFIG_MPEG4_VDPAU_HWACCEL 0 +#define CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL 0 +#define CONFIG_VC1_CUVID_HWACCEL 0 +#define CONFIG_VC1_D3D11VA_HWACCEL 0 +#define CONFIG_VC1_D3D11VA2_HWACCEL 0 +#define CONFIG_VC1_DXVA2_HWACCEL 0 +#define CONFIG_VC1_VAAPI_HWACCEL 0 +#define CONFIG_VC1_VDPAU_HWACCEL 0 +#define CONFIG_VC1_MMAL_HWACCEL 0 +#define CONFIG_VC1_QSV_HWACCEL 0 +#define CONFIG_VP8_CUVID_HWACCEL 0 +#define CONFIG_VP8_MEDIACODEC_HWACCEL 0 +#define CONFIG_VP8_QSV_HWACCEL 0 +#define CONFIG_VP9_CUVID_HWACCEL 0 +#define CONFIG_VP9_D3D11VA_HWACCEL 0 +#define CONFIG_VP9_D3D11VA2_HWACCEL 0 +#define CONFIG_VP9_DXVA2_HWACCEL 0 +#define CONFIG_VP9_MEDIACODEC_HWACCEL 0 +#define CONFIG_VP9_VAAPI_HWACCEL 0 +#define CONFIG_WMV3_D3D11VA_HWACCEL 0 +#define CONFIG_WMV3_D3D11VA2_HWACCEL 0 +#define CONFIG_WMV3_DXVA2_HWACCEL 0 +#define CONFIG_WMV3_VAAPI_HWACCEL 0 +#define CONFIG_WMV3_VDPAU_HWACCEL 0 +#define CONFIG_ALSA_INDEV 0 +#define CONFIG_AVFOUNDATION_INDEV 0 +#define CONFIG_BKTR_INDEV 0 +#define CONFIG_DECKLINK_INDEV 0 +#define CONFIG_LIBNDI_NEWTEK_INDEV 0 +#define CONFIG_DSHOW_INDEV 0 +#define CONFIG_FBDEV_INDEV 0 +#define CONFIG_GDIGRAB_INDEV 0 +#define CONFIG_IEC61883_INDEV 0 +#define CONFIG_JACK_INDEV 0 +#define CONFIG_KMSGRAB_INDEV 0 +#define CONFIG_LAVFI_INDEV 0 +#define CONFIG_OPENAL_INDEV 0 +#define CONFIG_OSS_INDEV 0 +#define CONFIG_PULSE_INDEV 0 +#define CONFIG_SNDIO_INDEV 0 +#define CONFIG_V4L2_INDEV 0 +#define CONFIG_VFWCAP_INDEV 0 +#define CONFIG_XCBGRAB_INDEV 0 +#define CONFIG_LIBCDIO_INDEV 0 +#define CONFIG_LIBDC1394_INDEV 0 +#define CONFIG_A64_MUXER 0 +#define CONFIG_AC3_MUXER 0 +#define CONFIG_ADTS_MUXER 0 +#define CONFIG_ADX_MUXER 0 +#define CONFIG_AIFF_MUXER 0 +#define CONFIG_AMR_MUXER 0 +#define CONFIG_APNG_MUXER 0 +#define CONFIG_ASF_MUXER 0 +#define CONFIG_ASS_MUXER 0 +#define CONFIG_AST_MUXER 0 +#define CONFIG_ASF_STREAM_MUXER 0 +#define CONFIG_AU_MUXER 0 +#define CONFIG_AVI_MUXER 0 +#define CONFIG_AVM2_MUXER 0 +#define CONFIG_BIT_MUXER 0 +#define CONFIG_CAF_MUXER 0 +#define CONFIG_CAVSVIDEO_MUXER 0 +#define CONFIG_CRC_MUXER 0 +#define CONFIG_DASH_MUXER 0 +#define CONFIG_DATA_MUXER 0 +#define CONFIG_DAUD_MUXER 0 +#define CONFIG_DIRAC_MUXER 0 +#define CONFIG_DNXHD_MUXER 0 +#define CONFIG_DTS_MUXER 0 +#define CONFIG_DV_MUXER 0 +#define CONFIG_EAC3_MUXER 0 +#define CONFIG_F4V_MUXER 0 +#define CONFIG_FFM_MUXER 0 +#define CONFIG_FFMETADATA_MUXER 0 +#define CONFIG_FIFO_MUXER 0 +#define CONFIG_FILMSTRIP_MUXER 0 +#define CONFIG_FITS_MUXER 0 +#define CONFIG_FLAC_MUXER 0 +#define CONFIG_FLV_MUXER 0 +#define CONFIG_FRAMECRC_MUXER 0 +#define CONFIG_FRAMEHASH_MUXER 0 +#define CONFIG_FRAMEMD5_MUXER 0 +#define CONFIG_G722_MUXER 0 +#define CONFIG_G723_1_MUXER 0 +#define CONFIG_G726_MUXER 0 +#define CONFIG_G726LE_MUXER 0 +#define CONFIG_GIF_MUXER 0 +#define CONFIG_GSM_MUXER 0 +#define CONFIG_GXF_MUXER 0 +#define CONFIG_H261_MUXER 0 +#define CONFIG_H263_MUXER 0 +#define CONFIG_H264_MUXER 0 +#define CONFIG_HASH_MUXER 0 +#define CONFIG_HDS_MUXER 0 +#define CONFIG_HEVC_MUXER 0 +#define CONFIG_HLS_MUXER 0 +#define CONFIG_ICO_MUXER 0 +#define CONFIG_ILBC_MUXER 0 +#define CONFIG_IMAGE2_MUXER 0 +#define CONFIG_IMAGE2PIPE_MUXER 0 +#define CONFIG_IPOD_MUXER 0 +#define CONFIG_IRCAM_MUXER 0 +#define CONFIG_ISMV_MUXER 0 +#define CONFIG_IVF_MUXER 0 +#define CONFIG_JACOSUB_MUXER 0 +#define CONFIG_LATM_MUXER 0 +#define CONFIG_LRC_MUXER 0 +#define CONFIG_M4V_MUXER 0 +#define CONFIG_MD5_MUXER 0 +#define CONFIG_MATROSKA_MUXER 0 +#define CONFIG_MATROSKA_AUDIO_MUXER 0 +#define CONFIG_MICRODVD_MUXER 0 +#define CONFIG_MJPEG_MUXER 0 +#define CONFIG_MLP_MUXER 0 +#define CONFIG_MMF_MUXER 0 +#define CONFIG_MOV_MUXER 0 +#define CONFIG_MP2_MUXER 0 +#define CONFIG_MP3_MUXER 0 +#define CONFIG_MP4_MUXER 0 +#define CONFIG_MPEG1SYSTEM_MUXER 0 +#define CONFIG_MPEG1VCD_MUXER 0 +#define CONFIG_MPEG1VIDEO_MUXER 0 +#define CONFIG_MPEG2DVD_MUXER 0 +#define CONFIG_MPEG2SVCD_MUXER 0 +#define CONFIG_MPEG2VIDEO_MUXER 0 +#define CONFIG_MPEG2VOB_MUXER 0 +#define CONFIG_MPEGTS_MUXER 0 +#define CONFIG_MPJPEG_MUXER 0 +#define CONFIG_MXF_MUXER 0 +#define CONFIG_MXF_D10_MUXER 0 +#define CONFIG_MXF_OPATOM_MUXER 0 +#define CONFIG_NULL_MUXER 0 +#define CONFIG_NUT_MUXER 0 +#define CONFIG_OGA_MUXER 0 +#define CONFIG_OGG_MUXER 0 +#define CONFIG_OGV_MUXER 0 +#define CONFIG_OMA_MUXER 0 +#define CONFIG_OPUS_MUXER 0 +#define CONFIG_PCM_ALAW_MUXER 0 +#define CONFIG_PCM_MULAW_MUXER 0 +#define CONFIG_PCM_F64BE_MUXER 0 +#define CONFIG_PCM_F64LE_MUXER 0 +#define CONFIG_PCM_F32BE_MUXER 0 +#define CONFIG_PCM_F32LE_MUXER 0 +#define CONFIG_PCM_S32BE_MUXER 0 +#define CONFIG_PCM_S32LE_MUXER 0 +#define CONFIG_PCM_S24BE_MUXER 0 +#define CONFIG_PCM_S24LE_MUXER 0 +#define CONFIG_PCM_S16BE_MUXER 0 +#define CONFIG_PCM_S16LE_MUXER 0 +#define CONFIG_PCM_S8_MUXER 0 +#define CONFIG_PCM_U32BE_MUXER 0 +#define CONFIG_PCM_U32LE_MUXER 0 +#define CONFIG_PCM_U24BE_MUXER 0 +#define CONFIG_PCM_U24LE_MUXER 0 +#define CONFIG_PCM_U16BE_MUXER 0 +#define CONFIG_PCM_U16LE_MUXER 0 +#define CONFIG_PCM_U8_MUXER 0 +#define CONFIG_PSP_MUXER 0 +#define CONFIG_RAWVIDEO_MUXER 0 +#define CONFIG_RM_MUXER 0 +#define CONFIG_ROQ_MUXER 0 +#define CONFIG_RSO_MUXER 0 +#define CONFIG_RTP_MUXER 0 +#define CONFIG_RTP_MPEGTS_MUXER 0 +#define CONFIG_RTSP_MUXER 0 +#define CONFIG_SAP_MUXER 0 +#define CONFIG_SCC_MUXER 0 +#define CONFIG_SEGMENT_MUXER 0 +#define CONFIG_STREAM_SEGMENT_MUXER 0 +#define CONFIG_SINGLEJPEG_MUXER 0 +#define CONFIG_SMJPEG_MUXER 0 +#define CONFIG_SMOOTHSTREAMING_MUXER 0 +#define CONFIG_SOX_MUXER 0 +#define CONFIG_SPX_MUXER 0 +#define CONFIG_SPDIF_MUXER 0 +#define CONFIG_SRT_MUXER 0 +#define CONFIG_SUP_MUXER 0 +#define CONFIG_SWF_MUXER 0 +#define CONFIG_TEE_MUXER 0 +#define CONFIG_TG2_MUXER 0 +#define CONFIG_TGP_MUXER 0 +#define CONFIG_MKVTIMESTAMP_V2_MUXER 0 +#define CONFIG_TRUEHD_MUXER 0 +#define CONFIG_TTA_MUXER 0 +#define CONFIG_UNCODEDFRAMECRC_MUXER 0 +#define CONFIG_VC1_MUXER 0 +#define CONFIG_VC1T_MUXER 0 +#define CONFIG_VOC_MUXER 0 +#define CONFIG_W64_MUXER 0 +#define CONFIG_WAV_MUXER 0 +#define CONFIG_WEBM_MUXER 0 +#define CONFIG_WEBM_DASH_MANIFEST_MUXER 0 +#define CONFIG_WEBM_CHUNK_MUXER 0 +#define CONFIG_WEBP_MUXER 0 +#define CONFIG_WEBVTT_MUXER 0 +#define CONFIG_WTV_MUXER 0 +#define CONFIG_WV_MUXER 0 +#define CONFIG_YUV4MPEGPIPE_MUXER 0 +#define CONFIG_CHROMAPRINT_MUXER 0 +#define CONFIG_ALSA_OUTDEV 0 +#define CONFIG_CACA_OUTDEV 0 +#define CONFIG_DECKLINK_OUTDEV 0 +#define CONFIG_LIBNDI_NEWTEK_OUTDEV 0 +#define CONFIG_FBDEV_OUTDEV 0 +#define CONFIG_OPENGL_OUTDEV 0 +#define CONFIG_OSS_OUTDEV 0 +#define CONFIG_PULSE_OUTDEV 0 +#define CONFIG_SDL2_OUTDEV 0 +#define CONFIG_SNDIO_OUTDEV 0 +#define CONFIG_V4L2_OUTDEV 0 +#define CONFIG_XV_OUTDEV 0 +#define CONFIG_AAC_PARSER 0 +#define CONFIG_AAC_LATM_PARSER 0 +#define CONFIG_AC3_PARSER 0 +#define CONFIG_ADX_PARSER 0 +#define CONFIG_BMP_PARSER 0 +#define CONFIG_CAVSVIDEO_PARSER 0 +#define CONFIG_COOK_PARSER 0 +#define CONFIG_DCA_PARSER 0 +#define CONFIG_DIRAC_PARSER 0 +#define CONFIG_DNXHD_PARSER 0 +#define CONFIG_DPX_PARSER 0 +#define CONFIG_DVAUDIO_PARSER 0 +#define CONFIG_DVBSUB_PARSER 0 +#define CONFIG_DVDSUB_PARSER 0 +#define CONFIG_DVD_NAV_PARSER 0 +#define CONFIG_G729_PARSER 0 +#define CONFIG_GSM_PARSER 0 +#define CONFIG_H261_PARSER 0 +#define CONFIG_H263_PARSER 0 +#define CONFIG_H264_PARSER 0 +#define CONFIG_HEVC_PARSER 0 +#define CONFIG_MJPEG_PARSER 0 +#define CONFIG_MLP_PARSER 0 +#define CONFIG_MPEG4VIDEO_PARSER 0 +#define CONFIG_MPEGAUDIO_PARSER 0 +#define CONFIG_MPEGVIDEO_PARSER 0 +#define CONFIG_OPUS_PARSER 0 +#define CONFIG_PNG_PARSER 0 +#define CONFIG_PNM_PARSER 0 +#define CONFIG_RV30_PARSER 0 +#define CONFIG_RV40_PARSER 0 +#define CONFIG_SIPR_PARSER 0 +#define CONFIG_TAK_PARSER 0 +#define CONFIG_VC1_PARSER 0 +#define CONFIG_VORBIS_PARSER 0 +#define CONFIG_VP3_PARSER 0 +#define CONFIG_XMA_PARSER 0 +#define CONFIG_ASYNC_PROTOCOL 0 +#define CONFIG_BLURAY_PROTOCOL 0 +#define CONFIG_CACHE_PROTOCOL 0 +#define CONFIG_CONCAT_PROTOCOL 0 +#define CONFIG_CRYPTO_PROTOCOL 0 +#define CONFIG_DATA_PROTOCOL 0 +#define CONFIG_FFRTMPCRYPT_PROTOCOL 0 +#define CONFIG_FFRTMPHTTP_PROTOCOL 0 +#define CONFIG_FILE_PROTOCOL 0 +#define CONFIG_FTP_PROTOCOL 0 +#define CONFIG_GOPHER_PROTOCOL 0 +#define CONFIG_HLS_PROTOCOL 0 +#define CONFIG_HTTP_PROTOCOL 0 +#define CONFIG_HTTPPROXY_PROTOCOL 0 +#define CONFIG_HTTPS_PROTOCOL 0 +#define CONFIG_ICECAST_PROTOCOL 0 +#define CONFIG_MMSH_PROTOCOL 0 +#define CONFIG_MMST_PROTOCOL 0 +#define CONFIG_MD5_PROTOCOL 0 +#define CONFIG_PIPE_PROTOCOL 0 +#define CONFIG_PROMPEG_PROTOCOL 0 +#define CONFIG_RTMP_PROTOCOL 0 +#define CONFIG_RTMPE_PROTOCOL 0 +#define CONFIG_RTMPS_PROTOCOL 0 +#define CONFIG_RTMPT_PROTOCOL 0 +#define CONFIG_RTMPTE_PROTOCOL 0 +#define CONFIG_RTMPTS_PROTOCOL 0 +#define CONFIG_RTP_PROTOCOL 0 +#define CONFIG_SCTP_PROTOCOL 0 +#define CONFIG_SRTP_PROTOCOL 0 +#define CONFIG_SUBFILE_PROTOCOL 0 +#define CONFIG_TEE_PROTOCOL 0 +#define CONFIG_TCP_PROTOCOL 0 +#define CONFIG_TLS_GNUTLS_PROTOCOL 0 +#define CONFIG_TLS_SCHANNEL_PROTOCOL 0 +#define CONFIG_TLS_SECURETRANSPORT_PROTOCOL 0 +#define CONFIG_TLS_OPENSSL_PROTOCOL 0 +#define CONFIG_UDP_PROTOCOL 0 +#define CONFIG_UDPLITE_PROTOCOL 0 +#define CONFIG_UNIX_PROTOCOL 0 +#define CONFIG_LIBRTMP_PROTOCOL 0 +#define CONFIG_LIBRTMPE_PROTOCOL 0 +#define CONFIG_LIBRTMPS_PROTOCOL 0 +#define CONFIG_LIBRTMPT_PROTOCOL 0 +#define CONFIG_LIBRTMPTE_PROTOCOL 0 +#define CONFIG_LIBSSH_PROTOCOL 0 +#define CONFIG_LIBSMBCLIENT_PROTOCOL 0 diff --git a/media/ffvpx/ffvpxcommon.mozbuild b/media/ffvpx/ffvpxcommon.mozbuild index 740eb34dd86a..918a229e270b 100644 --- a/media/ffvpx/ffvpxcommon.mozbuild +++ b/media/ffvpx/ffvpxcommon.mozbuild @@ -29,6 +29,8 @@ if CONFIG['FFVPX_ASFLAGS']: else: # Default to unix, similar to how ASFLAGS setup works in configure.in ASFLAGS += ['-Pconfig_unix64.asm'] + # default disabled components + ASFLAGS += ['-Pdefaults_disabled.asm'] LOCAL_INCLUDES += ['/media/ffvpx'] @@ -88,7 +90,7 @@ elif CONFIG['_MSC_VER']: '-wd4057', '-wd4204', '-wd4706', '-wd4305', '-wd4152', '-wd4324', '-we4013', '-wd4100', '-wd4214', '-wd4307', '-wd4273', '-wd4554', ] - + LOCAL_INCLUDES += ['/media/ffvpx/compat/atomics/win32'] DEFINES['HAVE_AV_CONFIG_H'] = True if CONFIG['MOZ_DEBUG']: diff --git a/media/ffvpx/libavcodec/allcodecs.c b/media/ffvpx/libavcodec/allcodecs.c index b592aa3b2684..4f34312e6735 100644 --- a/media/ffvpx/libavcodec/allcodecs.c +++ b/media/ffvpx/libavcodec/allcodecs.c @@ -25,6 +25,7 @@ */ #include "config.h" +#include "libavutil/thread.h" #include "avcodec.h" #include "version.h" @@ -58,20 +59,14 @@ av_register_codec_parser(&ff_##x##_parser); \ } -void avcodec_register_all(void) +static void register_all(void) { - static int initialized; - - if (initialized) - return; - initialized = 1; - /* hardware accelerators */ - REGISTER_HWACCEL(H263_CUVID, h263_cuvid); REGISTER_HWACCEL(H263_VAAPI, h263_vaapi); REGISTER_HWACCEL(H263_VIDEOTOOLBOX, h263_videotoolbox); REGISTER_HWACCEL(H264_CUVID, h264_cuvid); REGISTER_HWACCEL(H264_D3D11VA, h264_d3d11va); + REGISTER_HWACCEL(H264_D3D11VA2, h264_d3d11va2); REGISTER_HWACCEL(H264_DXVA2, h264_dxva2); REGISTER_HWACCEL(H264_MEDIACODEC, h264_mediacodec); REGISTER_HWACCEL(H264_MMAL, h264_mmal); @@ -83,11 +78,13 @@ void avcodec_register_all(void) REGISTER_HWACCEL(H264_VIDEOTOOLBOX, h264_videotoolbox); REGISTER_HWACCEL(HEVC_CUVID, hevc_cuvid); REGISTER_HWACCEL(HEVC_D3D11VA, hevc_d3d11va); + REGISTER_HWACCEL(HEVC_D3D11VA2, hevc_d3d11va2); REGISTER_HWACCEL(HEVC_DXVA2, hevc_dxva2); REGISTER_HWACCEL(HEVC_MEDIACODEC, hevc_mediacodec); REGISTER_HWACCEL(HEVC_QSV, hevc_qsv); REGISTER_HWACCEL(HEVC_VAAPI, hevc_vaapi); REGISTER_HWACCEL(HEVC_VDPAU, hevc_vdpau); + REGISTER_HWACCEL(HEVC_VIDEOTOOLBOX, hevc_videotoolbox); REGISTER_HWACCEL(MJPEG_CUVID, mjpeg_cuvid); REGISTER_HWACCEL(MPEG1_CUVID, mpeg1_cuvid); REGISTER_HWACCEL(MPEG1_XVMC, mpeg1_xvmc); @@ -96,12 +93,14 @@ void avcodec_register_all(void) REGISTER_HWACCEL(MPEG2_CUVID, mpeg2_cuvid); REGISTER_HWACCEL(MPEG2_XVMC, mpeg2_xvmc); REGISTER_HWACCEL(MPEG2_D3D11VA, mpeg2_d3d11va); + REGISTER_HWACCEL(MPEG2_D3D11VA2, mpeg2_d3d11va2); REGISTER_HWACCEL(MPEG2_DXVA2, mpeg2_dxva2); REGISTER_HWACCEL(MPEG2_MMAL, mpeg2_mmal); REGISTER_HWACCEL(MPEG2_QSV, mpeg2_qsv); REGISTER_HWACCEL(MPEG2_VAAPI, mpeg2_vaapi); REGISTER_HWACCEL(MPEG2_VDPAU, mpeg2_vdpau); REGISTER_HWACCEL(MPEG2_VIDEOTOOLBOX, mpeg2_videotoolbox); + REGISTER_HWACCEL(MPEG2_MEDIACODEC, mpeg2_mediacodec); REGISTER_HWACCEL(MPEG4_CUVID, mpeg4_cuvid); REGISTER_HWACCEL(MPEG4_MEDIACODEC, mpeg4_mediacodec); REGISTER_HWACCEL(MPEG4_MMAL, mpeg4_mmal); @@ -110,6 +109,7 @@ void avcodec_register_all(void) REGISTER_HWACCEL(MPEG4_VIDEOTOOLBOX, mpeg4_videotoolbox); REGISTER_HWACCEL(VC1_CUVID, vc1_cuvid); REGISTER_HWACCEL(VC1_D3D11VA, vc1_d3d11va); + REGISTER_HWACCEL(VC1_D3D11VA2, vc1_d3d11va2); REGISTER_HWACCEL(VC1_DXVA2, vc1_dxva2); REGISTER_HWACCEL(VC1_VAAPI, vc1_vaapi); REGISTER_HWACCEL(VC1_VDPAU, vc1_vdpau); @@ -117,12 +117,15 @@ void avcodec_register_all(void) REGISTER_HWACCEL(VC1_QSV, vc1_qsv); REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid); REGISTER_HWACCEL(VP8_MEDIACODEC, vp8_mediacodec); + REGISTER_HWACCEL(VP8_QSV, vp8_qsv); REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid); REGISTER_HWACCEL(VP9_D3D11VA, vp9_d3d11va); + REGISTER_HWACCEL(VP9_D3D11VA2, vp9_d3d11va2); REGISTER_HWACCEL(VP9_DXVA2, vp9_dxva2); REGISTER_HWACCEL(VP9_MEDIACODEC, vp9_mediacodec); REGISTER_HWACCEL(VP9_VAAPI, vp9_vaapi); REGISTER_HWACCEL(WMV3_D3D11VA, wmv3_d3d11va); + REGISTER_HWACCEL(WMV3_D3D11VA2, wmv3_d3d11va2); REGISTER_HWACCEL(WMV3_DXVA2, wmv3_dxva2); REGISTER_HWACCEL(WMV3_VAAPI, wmv3_vaapi); REGISTER_HWACCEL(WMV3_VDPAU, wmv3_vdpau); @@ -158,6 +161,7 @@ void avcodec_register_all(void) REGISTER_DECODER(CDXL, cdxl); REGISTER_DECODER(CFHD, cfhd); REGISTER_ENCDEC (CINEPAK, cinepak); + REGISTER_DECODER(CLEARVIDEO, clearvideo); REGISTER_ENCDEC (CLJR, cljr); REGISTER_DECODER(CLLC, cllc); REGISTER_ENCDEC (COMFORTNOISE, comfortnoise); @@ -189,24 +193,30 @@ void avcodec_register_all(void) REGISTER_ENCDEC (FFV1, ffv1); REGISTER_ENCDEC (FFVHUFF, ffvhuff); REGISTER_DECODER(FIC, fic); + REGISTER_ENCDEC (FITS, fits); REGISTER_ENCDEC (FLASHSV, flashsv); REGISTER_ENCDEC (FLASHSV2, flashsv2); REGISTER_DECODER(FLIC, flic); REGISTER_ENCDEC (FLV, flv); + REGISTER_DECODER(FMVC, fmvc); REGISTER_DECODER(FOURXM, fourxm); REGISTER_DECODER(FRAPS, fraps); REGISTER_DECODER(FRWU, frwu); REGISTER_DECODER(G2M, g2m); + REGISTER_DECODER(GDV, gdv); REGISTER_ENCDEC (GIF, gif); REGISTER_ENCDEC (H261, h261); REGISTER_ENCDEC (H263, h263); REGISTER_DECODER(H263I, h263i); REGISTER_ENCDEC (H263P, h263p); + REGISTER_DECODER(H263_V4L2M2M, h263_v4l2m2m); REGISTER_DECODER(H264, h264); REGISTER_DECODER(H264_CRYSTALHD, h264_crystalhd); + REGISTER_DECODER(H264_V4L2M2M, h264_v4l2m2m); REGISTER_DECODER(H264_MEDIACODEC, h264_mediacodec); REGISTER_DECODER(H264_MMAL, h264_mmal); REGISTER_DECODER(H264_QSV, h264_qsv); + REGISTER_DECODER(H264_RKMPP, h264_rkmpp); REGISTER_DECODER(H264_VDA, h264_vda); #if FF_API_VDPAU REGISTER_DECODER(H264_VDPAU, h264_vdpau); @@ -214,6 +224,8 @@ void avcodec_register_all(void) REGISTER_ENCDEC (HAP, hap); REGISTER_DECODER(HEVC, hevc); REGISTER_DECODER(HEVC_QSV, hevc_qsv); + REGISTER_DECODER(HEVC_RKMPP, hevc_rkmpp); + REGISTER_DECODER(HEVC_V4L2M2M, hevc_v4l2m2m); REGISTER_DECODER(HNM4_VIDEO, hnm4_video); REGISTER_DECODER(HQ_HQA, hq_hqa); REGISTER_DECODER(HQX, hqx); @@ -248,6 +260,7 @@ void avcodec_register_all(void) REGISTER_ENCDEC (MPEG2VIDEO, mpeg2video); REGISTER_ENCDEC (MPEG4, mpeg4); REGISTER_DECODER(MPEG4_CRYSTALHD, mpeg4_crystalhd); + REGISTER_DECODER(MPEG4_V4L2M2M, mpeg4_v4l2m2m); REGISTER_DECODER(MPEG4_MMAL, mpeg4_mmal); #if FF_API_VDPAU REGISTER_DECODER(MPEG4_VDPAU, mpeg4_vdpau); @@ -257,14 +270,18 @@ void avcodec_register_all(void) REGISTER_DECODER(MPEG_VDPAU, mpeg_vdpau); REGISTER_DECODER(MPEG1_VDPAU, mpeg1_vdpau); #endif + REGISTER_DECODER(MPEG1_V4L2M2M, mpeg1_v4l2m2m); REGISTER_DECODER(MPEG2_MMAL, mpeg2_mmal); REGISTER_DECODER(MPEG2_CRYSTALHD, mpeg2_crystalhd); + REGISTER_DECODER(MPEG2_V4L2M2M, mpeg2_v4l2m2m); REGISTER_DECODER(MPEG2_QSV, mpeg2_qsv); + REGISTER_DECODER(MPEG2_MEDIACODEC, mpeg2_mediacodec); REGISTER_DECODER(MSA1, msa1); - REGISTER_DECODER(MSMPEG4_CRYSTALHD, msmpeg4_crystalhd); + REGISTER_DECODER(MSCC, mscc); REGISTER_DECODER(MSMPEG4V1, msmpeg4v1); REGISTER_ENCDEC (MSMPEG4V2, msmpeg4v2); REGISTER_ENCDEC (MSMPEG4V3, msmpeg4v3); + REGISTER_DECODER(MSMPEG4_CRYSTALHD, msmpeg4_crystalhd); REGISTER_DECODER(MSRLE, msrle); REGISTER_DECODER(MSS1, mss1); REGISTER_DECODER(MSS2, mss2); @@ -282,12 +299,14 @@ void avcodec_register_all(void) REGISTER_ENCDEC (PGM, pgm); REGISTER_ENCDEC (PGMYUV, pgmyuv); REGISTER_DECODER(PICTOR, pictor); + REGISTER_DECODER(PIXLET, pixlet); REGISTER_ENCDEC (PNG, png); REGISTER_ENCDEC (PPM, ppm); REGISTER_ENCDEC (PRORES, prores); REGISTER_ENCODER(PRORES_AW, prores_aw); REGISTER_ENCODER(PRORES_KS, prores_ks); REGISTER_DECODER(PRORES_LGPL, prores_lgpl); + REGISTER_DECODER(PSD, psd); REGISTER_DECODER(PTX, ptx); REGISTER_DECODER(QDRAW, qdraw); REGISTER_DECODER(QPEG, qpeg); @@ -305,6 +324,7 @@ void avcodec_register_all(void) REGISTER_DECODER(RV40, rv40); REGISTER_ENCDEC (S302M, s302m); REGISTER_DECODER(SANM, sanm); + REGISTER_DECODER(SCPR, scpr); REGISTER_DECODER(SCREENPRESSO, screenpresso); REGISTER_DECODER(SDX2_DPCM, sdx2_dpcm); REGISTER_ENCDEC (SGI, sgi); @@ -315,6 +335,8 @@ void avcodec_register_all(void) REGISTER_DECODER(SMVJPEG, smvjpeg); REGISTER_ENCDEC (SNOW, snow); REGISTER_DECODER(SP5X, sp5x); + REGISTER_DECODER(SPEEDHQ, speedhq); + REGISTER_DECODER(SRGC, srgc); REGISTER_ENCDEC (SUNRAST, sunrast); REGISTER_ENCDEC (SVQ1, svq1); REGISTER_DECODER(SVQ3, svq3); @@ -349,6 +371,7 @@ void avcodec_register_all(void) REGISTER_DECODER(VC1IMAGE, vc1image); REGISTER_DECODER(VC1_MMAL, vc1_mmal); REGISTER_DECODER(VC1_QSV, vc1_qsv); + REGISTER_DECODER(VC1_V4L2M2M, vc1_v4l2m2m); REGISTER_ENCODER(VC2, vc2); REGISTER_DECODER(VCR1, vcr1); REGISTER_DECODER(VMDVIDEO, vmdvideo); @@ -360,10 +383,15 @@ void avcodec_register_all(void) REGISTER_DECODER(VP6F, vp6f); REGISTER_DECODER(VP7, vp7); REGISTER_DECODER(VP8, vp8); + REGISTER_DECODER(VP8_RKMPP, vp8_rkmpp); + REGISTER_DECODER(VP8_V4L2M2M, vp8_v4l2m2m); REGISTER_DECODER(VP9, vp9); + REGISTER_DECODER(VP9_RKMPP, vp9_rkmpp); + REGISTER_DECODER(VP9_V4L2M2M, vp9_v4l2m2m); REGISTER_DECODER(VQA, vqa); + REGISTER_DECODER(BITPACKED, bitpacked); REGISTER_DECODER(WEBP, webp); - REGISTER_ENCODER(WRAPPED_AVFRAME, wrapped_avframe); + REGISTER_ENCDEC (WRAPPED_AVFRAME, wrapped_avframe); REGISTER_ENCDEC (WMV1, wmv1); REGISTER_ENCDEC (WMV2, wmv2); REGISTER_DECODER(WMV3, wmv3); @@ -378,6 +406,7 @@ void avcodec_register_all(void) REGISTER_ENCDEC (XBM, xbm); REGISTER_ENCDEC (XFACE, xface); REGISTER_DECODER(XL, xl); + REGISTER_DECODER(XPM, xpm); REGISTER_ENCDEC (XWD, xwd); REGISTER_ENCDEC (Y41P, y41p); REGISTER_DECODER(YLC, ylc); @@ -401,12 +430,15 @@ void avcodec_register_all(void) REGISTER_DECODER(APE, ape); REGISTER_DECODER(ATRAC1, atrac1); REGISTER_DECODER(ATRAC3, atrac3); + REGISTER_DECODER(ATRAC3AL, atrac3al); REGISTER_DECODER(ATRAC3P, atrac3p); + REGISTER_DECODER(ATRAC3PAL, atrac3pal); REGISTER_DECODER(BINKAUDIO_DCT, binkaudio_dct); REGISTER_DECODER(BINKAUDIO_RDFT, binkaudio_rdft); REGISTER_DECODER(BMV_AUDIO, bmv_audio); REGISTER_DECODER(COOK, cook); REGISTER_ENCDEC (DCA, dca); + REGISTER_DECODER(DOLBY_E, dolby_e); REGISTER_DECODER(DSD_LSBF, dsd_lsbf); REGISTER_DECODER(DSD_MSBF, dsd_msbf); REGISTER_DECODER(DSD_LSBF_PLANAR, dsd_lsbf_planar); @@ -444,10 +476,11 @@ void avcodec_register_all(void) REGISTER_DECODER(MPC8, mpc8); REGISTER_ENCDEC (NELLYMOSER, nellymoser); REGISTER_DECODER(ON2AVC, on2avc); - REGISTER_DECODER(OPUS, opus); + REGISTER_ENCDEC (OPUS, opus); REGISTER_DECODER(PAF_AUDIO, paf_audio); REGISTER_DECODER(QCELP, qcelp); REGISTER_DECODER(QDM2, qdm2); + REGISTER_DECODER(QDMC, qdmc); REGISTER_ENCDEC (RA_144, ra_144); REGISTER_DECODER(RA_288, ra_288); REGISTER_DECODER(RALF, ralf); @@ -477,6 +510,8 @@ void avcodec_register_all(void) REGISTER_ENCDEC (PCM_ALAW, pcm_alaw); REGISTER_DECODER(PCM_BLURAY, pcm_bluray); REGISTER_DECODER(PCM_DVD, pcm_dvd); + REGISTER_DECODER(PCM_F16LE, pcm_f16le); + REGISTER_DECODER(PCM_F24LE, pcm_f24le); REGISTER_ENCDEC (PCM_F32BE, pcm_f32be); REGISTER_ENCDEC (PCM_F32LE, pcm_f32le); REGISTER_ENCDEC (PCM_F64BE, pcm_f64be); @@ -508,6 +543,7 @@ void avcodec_register_all(void) REGISTER_DECODER(PCM_ZORK, pcm_zork); /* DPCM codecs */ + REGISTER_DECODER(GREMLIN_DPCM, gremlin_dpcm); REGISTER_DECODER(INTERPLAY_DPCM, interplay_dpcm); REGISTER_ENCDEC (ROQ_DPCM, roq_dpcm); REGISTER_DECODER(SOL_DPCM, sol_dpcm); @@ -528,7 +564,7 @@ void avcodec_register_all(void) REGISTER_DECODER(ADPCM_EA_XAS, adpcm_ea_xas); REGISTER_ENCDEC (ADPCM_G722, adpcm_g722); REGISTER_ENCDEC (ADPCM_G726, adpcm_g726); - REGISTER_DECODER(ADPCM_G726LE, adpcm_g726le); + REGISTER_ENCDEC (ADPCM_G726LE, adpcm_g726le); REGISTER_DECODER(ADPCM_IMA_AMV, adpcm_ima_amv); REGISTER_DECODER(ADPCM_IMA_APC, adpcm_ima_apc); REGISTER_DECODER(ADPCM_IMA_DAT4, adpcm_ima_dat4); @@ -606,7 +642,7 @@ void avcodec_register_all(void) REGISTER_DECODER(LIBOPENCORE_AMRWB, libopencore_amrwb); REGISTER_ENCDEC (LIBOPENJPEG, libopenjpeg); REGISTER_ENCDEC (LIBOPUS, libopus); - REGISTER_ENCDEC (LIBSCHROEDINGER, libschroedinger); + REGISTER_DECODER(LIBRSVG, librsvg); REGISTER_ENCODER(LIBSHINE, libshine); REGISTER_ENCDEC (LIBSPEEX, libspeex); REGISTER_ENCODER(LIBTHEORA, libtheora); @@ -633,12 +669,13 @@ void avcodec_register_all(void) /* external libraries, that shouldn't be used by default if one of the * above is available */ + REGISTER_ENCODER(H263_V4L2M2M, h263_v4l2m2m); REGISTER_ENCDEC (LIBOPENH264, libopenh264); - REGISTER_DECODER(H263_CUVID, h263_cuvid); REGISTER_DECODER(H264_CUVID, h264_cuvid); REGISTER_ENCODER(H264_NVENC, h264_nvenc); REGISTER_ENCODER(H264_OMX, h264_omx); REGISTER_ENCODER(H264_QSV, h264_qsv); + REGISTER_ENCODER(H264_V4L2M2M, h264_v4l2m2m); REGISTER_ENCODER(H264_VAAPI, h264_vaapi); REGISTER_ENCODER(H264_VIDEOTOOLBOX, h264_videotoolbox); #if FF_API_NVENC_OLD_NAME @@ -650,6 +687,7 @@ void avcodec_register_all(void) REGISTER_DECODER(HEVC_MEDIACODEC, hevc_mediacodec); REGISTER_ENCODER(HEVC_NVENC, hevc_nvenc); REGISTER_ENCODER(HEVC_QSV, hevc_qsv); + REGISTER_ENCODER(HEVC_V4L2M2M, hevc_v4l2m2m); REGISTER_ENCODER(HEVC_VAAPI, hevc_vaapi); REGISTER_ENCODER(LIBKVAZAAR, libkvazaar); REGISTER_DECODER(MJPEG_CUVID, mjpeg_cuvid); @@ -657,13 +695,19 @@ void avcodec_register_all(void) REGISTER_DECODER(MPEG1_CUVID, mpeg1_cuvid); REGISTER_DECODER(MPEG2_CUVID, mpeg2_cuvid); REGISTER_ENCODER(MPEG2_QSV, mpeg2_qsv); + REGISTER_ENCODER(MPEG2_VAAPI, mpeg2_vaapi); REGISTER_DECODER(MPEG4_CUVID, mpeg4_cuvid); REGISTER_DECODER(MPEG4_MEDIACODEC, mpeg4_mediacodec); + REGISTER_ENCODER(MPEG4_V4L2M2M, mpeg4_v4l2m2m); REGISTER_DECODER(VC1_CUVID, vc1_cuvid); REGISTER_DECODER(VP8_CUVID, vp8_cuvid); REGISTER_DECODER(VP8_MEDIACODEC, vp8_mediacodec); + REGISTER_DECODER(VP8_QSV, vp8_qsv); + REGISTER_ENCODER(VP8_V4L2M2M, vp8_v4l2m2m); + REGISTER_ENCODER(VP8_VAAPI, vp8_vaapi); REGISTER_DECODER(VP9_CUVID, vp9_cuvid); REGISTER_DECODER(VP9_MEDIACODEC, vp9_mediacodec); + REGISTER_ENCODER(VP9_VAAPI, vp9_vaapi); /* parsers */ REGISTER_PARSER(AAC, aac); @@ -698,10 +742,19 @@ void avcodec_register_all(void) REGISTER_PARSER(PNM, pnm); REGISTER_PARSER(RV30, rv30); REGISTER_PARSER(RV40, rv40); + REGISTER_PARSER(SIPR, sipr); REGISTER_PARSER(TAK, tak); REGISTER_PARSER(VC1, vc1); REGISTER_PARSER(VORBIS, vorbis); REGISTER_PARSER(VP3, vp3); REGISTER_PARSER(VP8, vp8); REGISTER_PARSER(VP9, vp9); + REGISTER_PARSER(XMA, xma); +} + +void avcodec_register_all(void) +{ + static AVOnce control = AV_ONCE_INIT; + + ff_thread_once(&control, register_all); } diff --git a/media/ffvpx/libavcodec/avcodec.h b/media/ffvpx/libavcodec/avcodec.h index e5e7f4225d44..18c3e3ea1ee9 100644 --- a/media/ffvpx/libavcodec/avcodec.h +++ b/media/ffvpx/libavcodec/avcodec.h @@ -89,7 +89,7 @@ * - Send valid input: * - For decoding, call avcodec_send_packet() to give the decoder raw * compressed data in an AVPacket. - * - For encoding, call avcodec_send_frame() to give the decoder an AVFrame + * - For encoding, call avcodec_send_frame() to give the encoder an AVFrame * containing uncompressed audio or video. * In both cases, it is recommended that AVPackets and AVFrames are * refcounted, or libavcodec might have to copy the input data. (libavformat @@ -112,6 +112,12 @@ * are filled. This situation is handled transparently if you follow the steps * outlined above. * + * In theory, sending input can result in EAGAIN - this should happen only if + * not all output was received. You can use this to structure alternative decode + * or encode loops other than the one suggested above. For example, you could + * try sending new input on each iteration, and try to receive output if that + * returns EAGAIN. + * * End of stream situations. These require "flushing" (aka draining) the codec, * as the codec might buffer multiple frames or packets internally for * performance or out of necessity (consider B-frames). @@ -136,8 +142,9 @@ * * Not all codecs will follow a rigid and predictable dataflow; the only * guarantee is that an AVERROR(EAGAIN) return value on a send/receive call on - * one end implies that a receive/send call on the other end will succeed. In - * general, no codec will permit unlimited buffering of input or output. + * one end implies that a receive/send call on the other end will succeed, or + * at least will not fail with AVERROR(EAGAIN). In general, no codec will + * permit unlimited buffering of input or output. * * This API replaces the following legacy functions: * - avcodec_decode_video2() and avcodec_decode_audio4(): @@ -146,7 +153,8 @@ * Unlike with the old video decoding API, multiple frames might result from * a packet. For audio, splitting the input packet into frames by partially * decoding packets becomes transparent to the API user. You never need to - * feed an AVPacket to the API twice. + * feed an AVPacket to the API twice (unless it is rejected with AVERROR(EAGAIN) - then + * no data was read from the packet). * Additionally, sending a flush/draining packet is required only once. * - avcodec_encode_video2()/avcodec_encode_audio2(): * Use avcodec_send_frame() to feed input to the encoder, then use @@ -159,7 +167,22 @@ * and will result in undefined behavior. * * Some codecs might require using the new API; using the old API will return - * an error when calling it. + * an error when calling it. All codecs support the new API. + * + * A codec is not allowed to return AVERROR(EAGAIN) for both sending and receiving. This + * would be an invalid state, which could put the codec user into an endless + * loop. The API has no concept of time either: it cannot happen that trying to + * do avcodec_send_packet() results in AVERROR(EAGAIN), but a repeated call 1 second + * later accepts the packet (with no other receive/flush API calls involved). + * The API is a strict state machine, and the passage of time is not supposed + * to influence it. Some timing-dependent behavior might still be deemed + * acceptable in certain cases. But it must never result in both send/receive + * returning EAGAIN at the same time at any point. It must also absolutely be + * avoided that the current state is "unstable" and can "flip-flop" between + * the send/receive APIs allowing progress. For example, it's not allowed that + * the codec randomly decides that it actually wants to consume a packet now + * instead of returning a frame, after it just returned AVERROR(EAGAIN) on an + * avcodec_send_packet() call. * @} */ @@ -411,6 +434,20 @@ enum AVCodecID { AV_CODEC_ID_MAGICYUV, AV_CODEC_ID_SHEERVIDEO, AV_CODEC_ID_YLC, + AV_CODEC_ID_PSD, + AV_CODEC_ID_PIXLET, + AV_CODEC_ID_SPEEDHQ, + AV_CODEC_ID_FMVC, + AV_CODEC_ID_SCPR, + AV_CODEC_ID_CLEARVIDEO, + AV_CODEC_ID_XPM, + AV_CODEC_ID_AV1, + AV_CODEC_ID_BITPACKED, + AV_CODEC_ID_MSCC, + AV_CODEC_ID_SRGC, + AV_CODEC_ID_SVG, + AV_CODEC_ID_GDV, + AV_CODEC_ID_FITS, /* various PCM "codecs" */ AV_CODEC_ID_FIRST_AUDIO = 0x10000, ///< A dummy id pointing at the start of audio codecs @@ -448,6 +485,8 @@ enum AVCodecID { AV_CODEC_ID_PCM_S64LE = 0x10800, AV_CODEC_ID_PCM_S64BE, + AV_CODEC_ID_PCM_F16LE, + AV_CODEC_ID_PCM_F24LE, /* various ADPCM codecs */ AV_CODEC_ID_ADPCM_IMA_QT = 0x11000, @@ -511,6 +550,7 @@ enum AVCodecID { AV_CODEC_ID_SOL_DPCM, AV_CODEC_ID_SDX2_DPCM = 0x14800, + AV_CODEC_ID_GREMLIN_DPCM, /* audio codecs */ AV_CODEC_ID_MP2 = 0x15000, @@ -598,6 +638,9 @@ enum AVCodecID { AV_CODEC_ID_XMA1, AV_CODEC_ID_XMA2, AV_CODEC_ID_DST, + AV_CODEC_ID_ATRAC3AL, + AV_CODEC_ID_ATRAC3PAL, + AV_CODEC_ID_DOLBY_E, /* subtitle codecs */ AV_CODEC_ID_FIRST_SUBTITLE = 0x17000, ///< A dummy ID pointing at the start of subtitle codecs. @@ -689,7 +732,7 @@ typedef struct AVCodecDescriptor { /** * Codec uses only intra compression. - * Video codecs only. + * Video and audio codecs only. */ #define AV_CODEC_PROP_INTRA_ONLY (1 << 0) /** @@ -1360,6 +1403,11 @@ typedef struct AVCPBProperties { * @{ */ enum AVPacketSideDataType { + /** + * An AV_PKT_DATA_PALETTE side data packet contains exactly AVPALETTE_SIZE + * bytes worth of palette. This side data signals that a new palette is + * present. + */ AV_PKT_DATA_PALETTE, /** @@ -1533,10 +1581,40 @@ enum AVPacketSideDataType { /** * Mastering display metadata (based on SMPTE-2086:2014). This metadata - * should be associated with a video stream and containts data in the form + * should be associated with a video stream and contains data in the form * of the AVMasteringDisplayMetadata struct. */ - AV_PKT_DATA_MASTERING_DISPLAY_METADATA + AV_PKT_DATA_MASTERING_DISPLAY_METADATA, + + /** + * This side data should be associated with a video stream and corresponds + * to the AVSphericalMapping structure. + */ + AV_PKT_DATA_SPHERICAL, + + /** + * Content light level (based on CTA-861.3). This metadata should be + * associated with a video stream and contains data in the form of the + * AVContentLightMetadata struct. + */ + AV_PKT_DATA_CONTENT_LIGHT_LEVEL, + + /** + * ATSC A53 Part 4 Closed Captions. This metadata should be associated with + * a video stream. A53 CC bitstream is stored as uint8_t in AVPacketSideData.data. + * The number of bytes of CC data is AVPacketSideData.size. + */ + AV_PKT_DATA_A53_CC, + + /** + * The number of side data elements (in fact a bit more than it). + * This is not part of the public API/ABI in the sense that it may + * change when new side data types are added. + * This must stay the last enum value. + * If its value becomes huge, some code using it + * needs to be updated as it assumes it to be smaller than other limits. + */ + AV_PKT_DATA_NB }; #define AV_PKT_DATA_QUALITY_FACTOR AV_PKT_DATA_QUALITY_STATS //DEPRECATED @@ -1638,6 +1716,13 @@ typedef struct AVPacket { * after decoding. **/ #define AV_PKT_FLAG_DISCARD 0x0004 +/** + * The packet comes from a trusted source. + * + * Otherwise-unsafe constructs such as arbitrary pointers to data + * outside the packet may be followed. + */ +#define AV_PKT_FLAG_TRUSTED 0x0008 enum AVSideDataParamChangeFlags { AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_COUNT = 0x0001, @@ -1665,7 +1750,7 @@ enum AVFieldOrder { * New fields can be added to the end with minor version bumps. * Removal, reordering and changes to existing fields require a major * version bump. - * Please use AVOptions (av_opt* / av_set/get*()) to access these fields from user + * You can use AVOptions (av_opt* / av_set/get*()) to access these fields from user * applications. * The name string for AVOptions options matches the associated command line * parameter name and can be found in libavcodec/options_table.h @@ -2605,6 +2690,7 @@ typedef struct AVCodecContext { * - encoding: unused * - decoding: set by the caller before avcodec_open2(). */ + attribute_deprecated int refcounted_frames; /* - encoding parameters */ @@ -2936,8 +3022,8 @@ typedef struct AVCodecContext { #define FF_DEBUG_MMCO 0x00000800 #define FF_DEBUG_BUGS 0x00001000 #if FF_API_DEBUG_MV -#define FF_DEBUG_VIS_QP 0x00002000 ///< only access through AVOptions from outside libavcodec -#define FF_DEBUG_VIS_MB_TYPE 0x00004000 ///< only access through AVOptions from outside libavcodec +#define FF_DEBUG_VIS_QP 0x00002000 +#define FF_DEBUG_VIS_MB_TYPE 0x00004000 #endif #define FF_DEBUG_BUFFERS 0x00008000 #define FF_DEBUG_THREADS 0x00010000 @@ -2947,7 +3033,6 @@ typedef struct AVCodecContext { #if FF_API_DEBUG_MV /** * debug - * Code outside libavcodec should access this field using AVOptions * - encoding: Set by user. * - decoding: Set by user. */ @@ -3061,6 +3146,7 @@ typedef struct AVCodecContext { #if FF_API_ARCH_ALPHA #define FF_IDCT_SIMPLEALPHA 23 #endif +#define FF_IDCT_NONE 24 /* Used by XvMC to extract IDCT coefficients with FF_IDCT_PERM_NONE */ #define FF_IDCT_SIMPLEAUTO 128 /** @@ -3082,8 +3168,6 @@ typedef struct AVCodecContext { * low resolution decoding, 1-> 1/2 size, 2->1/4 size * - encoding: unused * - decoding: Set by user. - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_lowres(avctx) */ int lowres; #endif @@ -3384,8 +3468,6 @@ typedef struct AVCodecContext { /** * Timebase in which pkt_dts/pts and AVPacket.dts/pts are. - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_pkt_timebase(avctx) * - encoding unused. * - decoding set by user. */ @@ -3393,8 +3475,6 @@ typedef struct AVCodecContext { /** * AVCodecDescriptor - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_codec_descriptor(avctx) * - encoding: unused. * - decoding: set by libavcodec. */ @@ -3405,8 +3485,6 @@ typedef struct AVCodecContext { * low resolution decoding, 1-> 1/2 size, 2->1/4 size * - encoding: unused * - decoding: Set by user. - * Code outside libavcodec should access this field using: - * av_codec_{get,set}_lowres(avctx) */ int lowres; #endif @@ -3447,7 +3525,6 @@ typedef struct AVCodecContext { * However for formats that do not use pre-multiplied alpha * there might be serious artefacts (though e.g. libswscale currently * assumes pre-multiplied alpha anyway). - * Code outside libavcodec should access this field using AVOptions * * - decoding: set by user * - encoding: unused @@ -3464,7 +3541,6 @@ typedef struct AVCodecContext { #if !FF_API_DEBUG_MV /** * debug motion vectors - * Code outside libavcodec should access this field using AVOptions * - encoding: Set by user. * - decoding: Set by user. */ @@ -3476,7 +3552,6 @@ typedef struct AVCodecContext { /** * custom intra quantization matrix - * Code outside libavcodec should access this field using av_codec_g/set_chroma_intra_matrix() * - encoding: Set by user, can be NULL. * - decoding: unused. */ @@ -3485,8 +3560,6 @@ typedef struct AVCodecContext { /** * dump format separator. * can be ", " or "\n " or anything else - * Code outside libavcodec should access this field using AVOptions - * (NO direct access). * - encoding: Set by user. * - decoding: Set by user. */ @@ -3496,13 +3569,12 @@ typedef struct AVCodecContext { * ',' separated list of allowed decoders. * If NULL then all are allowed * - encoding: unused - * - decoding: set by user through AVOPtions (NO direct access) + * - decoding: set by user */ char *codec_whitelist; - /* + /** * Properties of the stream that gets decoded - * To be accessed through av_codec_get_properties() (NO direct access) * - encoding: unused * - decoding: set by libavcodec */ @@ -3522,7 +3594,8 @@ typedef struct AVCodecContext { /** * A reference to the AVHWFramesContext describing the input (for encoding) * or output (decoding) frames. The reference is set by the caller and - * afterwards owned (and freed) by libavcodec. + * afterwards owned (and freed) by libavcodec - it should never be read by + * the caller after being set. * * - decoding: This field should be set by the caller from the get_format() * callback. The previous reference (if any) will always be @@ -3564,6 +3637,71 @@ typedef struct AVCodecContext { */ int trailing_padding; + /** + * The number of pixels per image to maximally accept. + * + * - decoding: set by user + * - encoding: set by user + */ + int64_t max_pixels; + + /** + * A reference to the AVHWDeviceContext describing the device which will + * be used by a hardware encoder/decoder. The reference is set by the + * caller and afterwards owned (and freed) by libavcodec. + * + * This should be used if either the codec device does not require + * hardware frames or any that are used are to be allocated internally by + * libavcodec. If the user wishes to supply any of the frames used as + * encoder input or decoder output then hw_frames_ctx should be used + * instead. When hw_frames_ctx is set in get_format() for a decoder, this + * field will be ignored while decoding the associated stream segment, but + * may again be used on a following one after another get_format() call. + * + * For both encoders and decoders this field should be set before + * avcodec_open2() is called and must not be written to thereafter. + * + * Note that some decoders may require this field to be set initially in + * order to support hw_frames_ctx at all - in that case, all frames + * contexts used must be created on the same device. + */ + AVBufferRef *hw_device_ctx; + + /** + * Bit set of AV_HWACCEL_FLAG_* flags, which affect hardware accelerated + * decoding (if active). + * - encoding: unused + * - decoding: Set by user (either before avcodec_open2(), or in the + * AVCodecContext.get_format callback) + */ + int hwaccel_flags; + + /** + * Video decoding only. Certain video codecs support cropping, meaning that + * only a sub-rectangle of the decoded frame is intended for display. This + * option controls how cropping is handled by libavcodec. + * + * When set to 1 (the default), libavcodec will apply cropping internally. + * I.e. it will modify the output frame width/height fields and offset the + * data pointers (only by as much as possible while preserving alignment, or + * by the full amount if the AV_CODEC_FLAG_UNALIGNED flag is set) so that + * the frames output by the decoder refer only to the cropped area. The + * crop_* fields of the output frames will be zero. + * + * When set to 0, the width/height fields of the output frames will be set + * to the coded dimensions and the crop_* fields will describe the cropping + * rectangle. Applying the cropping is left to the caller. + * + * @warning When hardware acceleration with opaque output frames is used, + * libavcodec is unable to apply cropping from the top/left border. + * + * @note when this option is set to zero, the width/height fields of the + * AVCodecContext and output AVFrames have different meanings. The codec + * context fields store display dimensions (with the coded dimensions in + * coded_width/height), while the frame fields store the coded dimensions + * (with the display dimensions being determined by the crop_* fields). + */ + int apply_cropping; } AVCodecContext; AVRational av_codec_get_pkt_timebase (const AVCodecContext *avctx); @@ -3623,7 +3761,7 @@ typedef struct AVCodec { const int *supported_samplerates; ///< array of supported audio samplerates, or NULL if unknown, array is terminated by 0 const enum AVSampleFormat *sample_fmts; ///< array of supported sample formats, or NULL if unknown, array is terminated by -1 const uint64_t *channel_layouts; ///< array of support channel layouts, or NULL if unknown. array is terminated by 0 - uint8_t max_lowres; ///< maximum value for lowres supported by the decoder, no direct access, use av_codec_get_max_lowres() + uint8_t max_lowres; ///< maximum value for lowres supported by the decoder const AVClass *priv_class; ///< AVClass for the private context const AVProfile *profiles; ///< array of recognized profiles, or NULL if unknown, array is terminated by {FF_PROFILE_UNKNOWN} @@ -3684,20 +3822,22 @@ typedef struct AVCodec { int (*decode)(AVCodecContext *, void *outdata, int *outdata_size, AVPacket *avpkt); int (*close)(AVCodecContext *); /** - * Decode/encode API with decoupled packet/frame dataflow. The API is the + * Encode API with decoupled packet/frame dataflow. The API is the * same as the avcodec_ prefixed APIs (avcodec_send_frame() etc.), except * that: * - never called if the codec is closed or the wrong type, - * - AVPacket parameter change side data is applied right before calling - * AVCodec->send_packet, - * - if AV_CODEC_CAP_DELAY is not set, drain packets or frames are never sent, - * - only one drain packet is ever passed down (until the next flush()), - * - a drain AVPacket is always NULL (no need to check for avpkt->size). + * - if AV_CODEC_CAP_DELAY is not set, drain frames are never sent, + * - only one drain frame is ever passed down, */ int (*send_frame)(AVCodecContext *avctx, const AVFrame *frame); - int (*send_packet)(AVCodecContext *avctx, const AVPacket *avpkt); - int (*receive_frame)(AVCodecContext *avctx, AVFrame *frame); int (*receive_packet)(AVCodecContext *avctx, AVPacket *avpkt); + + /** + * Decode API with decoupled packet/frame dataflow. This function is called + * to get one output frame. It should call ff_decode_get_packet() to obtain + * input data. + */ + int (*receive_frame)(AVCodecContext *avctx, AVFrame *frame); /** * Flush buffers. * Will be called when seeking @@ -3708,6 +3848,12 @@ typedef struct AVCodec { * See FF_CODEC_CAP_* in internal.h */ int caps_internal; + + /** + * Decoding only, a comma-separated list of bitstream filters to apply to + * packets before decoding. + */ + const char *bsfs; } AVCodec; int av_codec_get_max_lowres(const AVCodec *codec); @@ -3749,7 +3895,7 @@ typedef struct AVHWAccel { /** * Hardware accelerated codec capabilities. - * see HWACCEL_CODEC_CAP_* + * see AV_HWACCEL_CODEC_CAP_* */ int capabilities; @@ -3820,7 +3966,7 @@ typedef struct AVHWAccel { /** * Called for every Macroblock in a slice. * - * XvMC uses it to replace the ff_mpv_decode_mb(). + * XvMC uses it to replace the ff_mpv_reconstruct_mb(). * Instead of decoding to raw picture, MB parameters are * stored in an array provided by the video driver. * @@ -3850,8 +3996,19 @@ typedef struct AVHWAccel { * AVCodecInternal.hwaccel_priv_data. */ int priv_data_size; + + /** + * Internal hwaccel capabilities. + */ + int caps_internal; } AVHWAccel; +/** + * HWAccel is experimental and is thus avoided in favor of non experimental + * codecs + */ +#define AV_HWACCEL_CODEC_CAP_EXPERIMENTAL 0x0200 + /** * Hardware acceleration should be used for decoding even if the codec level * used is unknown or higher than the maximum supported level reported by the @@ -3868,6 +4025,20 @@ typedef struct AVHWAccel { */ #define AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH (1 << 1) +/** + * Hardware acceleration should still be attempted for decoding when the + * codec profile does not match the reported capabilities of the hardware. + * + * For example, this can be used to try to decode baseline profile H.264 + * streams in hardware - it will often succeed, because many streams marked + * as baseline profile actually conform to constrained baseline profile. + * + * @warning If the stream is actually not supported then the behaviour is + * undefined, and may include returning entirely incorrect output + * while indicating success. + */ +#define AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH (1 << 2) + /** * @} */ @@ -4377,13 +4548,13 @@ AVPacket *av_packet_alloc(void); * @see av_packet_alloc * @see av_packet_ref */ -AVPacket *av_packet_clone(AVPacket *src); +AVPacket *av_packet_clone(const AVPacket *src); /** * Free the packet, if the packet is reference counted, it will be * unreferenced first. * - * @param packet packet to be freed. The pointer will be set to NULL. + * @param pkt packet to be freed. The pointer will be set to NULL. * @note passing NULL is a no-op. */ void av_packet_free(AVPacket **pkt); @@ -4452,14 +4623,20 @@ int av_dup_packet(AVPacket *pkt); * Copy packet, including contents * * @return 0 on success, negative AVERROR on fail + * + * @deprecated Use av_packet_ref */ +attribute_deprecated int av_copy_packet(AVPacket *dst, const AVPacket *src); /** * Copy packet side data * * @return 0 on success, negative AVERROR on fail + * + * @deprecated Use av_packet_copy_props */ +attribute_deprecated int av_copy_packet_side_data(AVPacket *dst, const AVPacket *src); /** @@ -4518,12 +4695,16 @@ int av_packet_shrink_side_data(AVPacket *pkt, enum AVPacketSideDataType type, * @param size pointer for side information size to store (optional) * @return pointer to data if present or NULL otherwise */ -uint8_t* av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +uint8_t* av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size); +#if FF_API_MERGE_SD_API +attribute_deprecated int av_packet_merge_side_data(AVPacket *pkt); +attribute_deprecated int av_packet_split_side_data(AVPacket *pkt); +#endif const char *av_packet_side_data_name(enum AVPacketSideDataType type); @@ -4823,13 +5004,13 @@ int avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, * and reusing a get_buffer written for video codecs would probably perform badly * due to a potentially very different allocation pattern. * - * Some decoders (those marked with CODEC_CAP_DELAY) have a delay between input + * Some decoders (those marked with AV_CODEC_CAP_DELAY) have a delay between input * and output. This means that for some packets they will not immediately * produce decoded output and need to be flushed at the end of decoding to get * all the decoded data. Flushing is done by calling this function with packets * with avpkt->data set to NULL and avpkt->size set to 0 until it stops * returning subtitles. It is safe to flush even those decoders that are not - * marked with CODEC_CAP_DELAY, then no subtitles will be returned. + * marked with AV_CODEC_CAP_DELAY, then no subtitles will be returned. * * @note The AVCodecContext MUST have been opened with @ref avcodec_open2() * before packets may be fed to the decoder. @@ -4883,8 +5064,10 @@ int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, * a flush packet. * * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted right now - the packet must be - * resent after trying to read output + * AVERROR(EAGAIN): input is not accepted in the current state - user + * must read output with avcodec_receive_frame() (once + * all output is read, the packet should be resent, and + * the call will not fail with EAGAIN). * AVERROR_EOF: the decoder has been flushed, and no new packets can * be sent to it (also returned if more than 1 flush * packet is sent) @@ -4905,7 +5088,7 @@ int avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt); * * @return * 0: success, a frame was returned - * AVERROR(EAGAIN): output is not available right now - user must try + * AVERROR(EAGAIN): output is not available in this state - user must try * to send new input * AVERROR_EOF: the decoder has been fully flushed, and there will be * no more output frames @@ -4938,8 +5121,10 @@ int avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame); * avctx->frame_size for all frames except the last. * The final frame may be smaller than avctx->frame_size. * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): input is not accepted right now - the frame must be - * resent after trying to read output packets + * AVERROR(EAGAIN): input is not accepted in the current state - user + * must read output with avcodec_receive_packet() (once + * all output is read, the packet should be resent, and + * the call will not fail with EAGAIN). * AVERROR_EOF: the encoder has been flushed, and no new frames can * be sent to it * AVERROR(EINVAL): codec not opened, refcounted_frames not set, it is a @@ -4957,8 +5142,8 @@ int avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame); * encoder. Note that the function will always call * av_frame_unref(frame) before doing anything else. * @return 0 on success, otherwise negative error code: - * AVERROR(EAGAIN): output is not available right now - user must try - * to send input + * AVERROR(EAGAIN): output is not available in the current state - user + * must try to send input * AVERROR_EOF: the encoder has been fully flushed, and there will be * no more output packets * AVERROR(EINVAL): codec not opened, or it is an encoder @@ -5509,22 +5694,14 @@ int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width, * @{ */ +#if FF_API_GETCHROMA /** - * Utility function to access log2_chroma_w log2_chroma_h from - * the pixel format AVPixFmtDescriptor. - * - * This function asserts that pix_fmt is valid. See av_pix_fmt_get_chroma_sub_sample - * for one that returns a failure code and continues in case of invalid - * pix_fmts. - * - * @param[in] pix_fmt the pixel format - * @param[out] h_shift store log2_chroma_w - * @param[out] v_shift store log2_chroma_h - * - * @see av_pix_fmt_get_chroma_sub_sample + * @deprecated Use av_pix_fmt_get_chroma_sub_sample */ +attribute_deprecated void avcodec_get_chroma_sub_sample(enum AVPixelFormat pix_fmt, int *h_shift, int *v_shift); +#endif /** * Return a value representing the fourCC code associated to the @@ -5584,6 +5761,7 @@ attribute_deprecated void avcodec_set_dimensions(AVCodecContext *s, int width, int height); #endif +#if FF_API_TAG_STRING /** * Put a string representing the codec tag codec_tag in buf. * @@ -5592,8 +5770,12 @@ void avcodec_set_dimensions(AVCodecContext *s, int width, int height); * @param codec_tag codec tag to assign * @return the length of the string that would have been generated if * enough space had been available, excluding the trailing null + * + * @deprecated see av_fourcc_make_string() and av_fourcc2str(). */ +attribute_deprecated size_t av_get_codec_tag_string(char *buf, size_t buf_size, unsigned int codec_tag); +#endif void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode); @@ -5706,7 +5888,7 @@ int av_get_audio_frame_duration2(AVCodecParameters *par, int frame_bytes); #if FF_API_OLD_BSF typedef struct AVBitStreamFilterContext { void *priv_data; - struct AVBitStreamFilter *filter; + const struct AVBitStreamFilter *filter; AVCodecParserContext *parser; struct AVBitStreamFilterContext *next; /** @@ -5753,12 +5935,15 @@ typedef struct AVBSFContext { void *priv_data; /** - * Parameters of the input stream. Set by the caller before av_bsf_init(). + * Parameters of the input stream. This field is allocated in + * av_bsf_alloc(), it needs to be filled by the caller before + * av_bsf_init(). */ AVCodecParameters *par_in; /** - * Parameters of the output stream. Set by the filter in av_bsf_init(). + * Parameters of the output stream. This field is allocated in + * av_bsf_alloc(), it is set by the filter in av_bsf_init(). */ AVCodecParameters *par_out; @@ -5936,8 +6121,7 @@ int av_bsf_init(AVBSFContext *ctx); * av_bsf_receive_packet() repeatedly until it returns AVERROR(EAGAIN) or * AVERROR_EOF. * - * @param pkt the packet to filter. pkt must contain some payload (i.e data or - * side data must be present in pkt). The bitstream filter will take ownership of + * @param pkt the packet to filter. The bitstream filter will take ownership of * the packet and reset the contents of pkt. pkt is not touched if an error occurs. * This parameter may be NULL, which signals the end of the stream (i.e. no more * packets will be sent). That will cause the filter to output any packets it diff --git a/media/ffvpx/libavcodec/avdct.h b/media/ffvpx/libavcodec/avdct.h deleted file mode 100644 index 272422e44c91..000000000000 --- a/media/ffvpx/libavcodec/avdct.h +++ /dev/null @@ -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_AVDCT_H -#define AVCODEC_AVDCT_H - -#include "libavutil/opt.h" - -/** - * AVDCT context. - * @note function pointers can be NULL if the specific features have been - * disabled at build time. - */ -typedef struct AVDCT { - const AVClass *av_class; - - void (*idct)(int16_t *block /* align 16 */); - - /** - * IDCT input permutation. - * Several optimized IDCTs need a permutated input (relative to the - * normal order of the reference IDCT). - * This permutation must be performed before the idct_put/add. - * Note, normally this can be merged with the zigzag/alternate scan
- * An example to avoid confusion: - * - (->decode coeffs -> zigzag reorder -> dequant -> reference IDCT -> ...) - * - (x -> reference DCT -> reference IDCT -> x) - * - (x -> reference DCT -> simple_mmx_perm = idct_permutation - * -> simple_idct_mmx -> x) - * - (-> decode coeffs -> zigzag reorder -> simple_mmx_perm -> dequant - * -> simple_idct_mmx -> ...) - */ - uint8_t idct_permutation[64]; - - void (*fdct)(int16_t *block /* align 16 */); - - - /** - * DCT algorithm. - * must use AVOptions to set this field. - */ - int dct_algo; - - /** - * IDCT algorithm. - * must use AVOptions to set this field. - */ - int idct_algo; - - void (*get_pixels)(int16_t *block /* align 16 */, - const uint8_t *pixels /* align 8 */, - ptrdiff_t line_size); - - int bits_per_sample; -} AVDCT; - -/** - * Allocates a AVDCT context. - * This needs to be initialized with avcodec_dct_init() after optionally - * configuring it with AVOptions. - * - * To free it use av_free() - */ -AVDCT *avcodec_dct_alloc(void); -int avcodec_dct_init(AVDCT *); - -const AVClass *avcodec_dct_get_class(void); - -#endif /* AVCODEC_AVDCT_H */ diff --git a/media/ffvpx/libavcodec/avpacket.c b/media/ffvpx/libavcodec/avpacket.c index e5a8bdbe42a6..d1f4ea9eb3fe 100644 --- a/media/ffvpx/libavcodec/avpacket.c +++ b/media/ffvpx/libavcodec/avpacket.c @@ -247,8 +247,6 @@ failed_alloc: av_packet_unref(pkt); return AVERROR(ENOMEM); } -FF_ENABLE_DEPRECATION_WARNINGS -#endif int av_dup_packet(AVPacket *pkt) { @@ -266,6 +264,8 @@ int av_copy_packet(AVPacket *dst, const AVPacket *src) *dst = *src; return copy_packet_data(dst, src, 0); } +FF_ENABLE_DEPRECATION_WARNINGS +#endif void av_packet_free_side_data(AVPacket *pkt) { @@ -296,9 +296,20 @@ int av_packet_add_side_data(AVPacket *pkt, enum AVPacketSideDataType type, uint8_t *data, size_t size) { AVPacketSideData *tmp; - int elems = pkt->side_data_elems; + int i, elems = pkt->side_data_elems; - if ((unsigned)elems + 1 > INT_MAX / sizeof(*pkt->side_data)) + for (i = 0; i < elems; i++) { + AVPacketSideData *sd = &pkt->side_data[i]; + + if (sd->type == type) { + av_free(sd->data); + sd->data = data; + sd->size = size; + return 0; + } + } + + if ((unsigned)elems + 1 > AV_PKT_DATA_NB) return AVERROR(ERANGE); tmp = av_realloc(pkt->side_data, (elems + 1) * sizeof(*tmp)); @@ -336,7 +347,7 @@ uint8_t *av_packet_new_side_data(AVPacket *pkt, enum AVPacketSideDataType type, return data; } -uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, +uint8_t *av_packet_get_side_data(const AVPacket *pkt, enum AVPacketSideDataType type, int *size) { int i; @@ -348,6 +359,8 @@ uint8_t *av_packet_get_side_data(AVPacket *pkt, enum AVPacketSideDataType type, return pkt->side_data[i].data; } } + if (size) + *size = 0; return NULL; } @@ -372,10 +385,15 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type) case AV_PKT_DATA_METADATA_UPDATE: return "Metadata Update"; case AV_PKT_DATA_MPEGTS_STREAM_ID: return "MPEGTS Stream ID"; case AV_PKT_DATA_MASTERING_DISPLAY_METADATA: return "Mastering display metadata"; + case AV_PKT_DATA_CONTENT_LIGHT_LEVEL: return "Content light level metadata"; + case AV_PKT_DATA_SPHERICAL: return "Spherical Mapping"; + case AV_PKT_DATA_A53_CC: return "A53 Closed Captions"; } return NULL; } +#if FF_API_MERGE_SD_API + #define FF_MERGE_MARKER 0x8c4d9d108e25e9feULL int av_packet_merge_side_data(AVPacket *pkt){ @@ -431,6 +449,9 @@ int av_packet_split_side_data(AVPacket *pkt){ p-= size+5; } + if (i > AV_PKT_DATA_NB) + return AVERROR(ERANGE); + pkt->side_data = av_malloc_array(i, sizeof(*pkt->side_data)); if (!pkt->side_data) return AVERROR(ENOMEM); @@ -456,6 +477,35 @@ int av_packet_split_side_data(AVPacket *pkt){ } return 0; } +#endif + +#if FF_API_MERGE_SD +int ff_packet_split_and_drop_side_data(AVPacket *pkt){ + if (!pkt->side_data_elems && pkt->size >12 && AV_RB64(pkt->data + pkt->size - 8) == FF_MERGE_MARKER){ + int i; + unsigned int size; + uint8_t *p; + + p = pkt->data + pkt->size - 8 - 5; + for (i=1; ; i++){ + size = AV_RB32(p); + if (size>INT_MAX - 5 || p - pkt->data < size) + return 0; + if (p[4]&128) + break; + if (p - pkt->data < size + 5) + return 0; + p-= size+5; + if (i > AV_PKT_DATA_NB) + return 0; + } + pkt->size = p - pkt->data - size; + av_assert0(pkt->size >= 0); + return 1; + } + return 0; +} +#endif uint8_t *av_packet_pack_dictionary(AVDictionary *dict, int *size) { @@ -505,7 +555,7 @@ int av_packet_unpack_dictionary(const uint8_t *data, int size, AVDictionary **di const uint8_t *key = data; const uint8_t *val = data + strlen(key) + 1; - if (val >= end) + if (val >= end || !*key) return AVERROR_INVALIDDATA; ret = av_dict_set(dict, key, val, 0); @@ -607,7 +657,7 @@ fail: return ret; } -AVPacket *av_packet_clone(AVPacket *src) +AVPacket *av_packet_clone(const AVPacket *src) { AVPacket *ret = av_packet_alloc(); diff --git a/media/ffvpx/libavcodec/bitstream.c b/media/ffvpx/libavcodec/bitstream.c index 562ca1cb823d..ed528fe4af7d 100644 --- a/media/ffvpx/libavcodec/bitstream.c +++ b/media/ffvpx/libavcodec/bitstream.c @@ -28,7 +28,6 @@ * bitstream api. */ -#include "libavutil/atomic.h" #include "libavutil/avassert.h" #include "libavutil/qsort.h" #include "avcodec.h" @@ -99,9 +98,11 @@ void avpriv_copy_bits(PutBitContext *pb, const uint8_t *src, int length) case 2: \ v = *(const uint16_t *)ptr; \ break; \ - default: \ + case 4: \ v = *(const uint32_t *)ptr; \ break; \ + default: \ + av_assert1(0); \ } \ } @@ -126,14 +127,6 @@ static int alloc_table(VLC *vlc, int size, int use_static) return index; } -static av_always_inline uint32_t bitswap_32(uint32_t x) -{ - return (uint32_t)ff_reverse[ x & 0xFF] << 24 | - (uint32_t)ff_reverse[(x >> 8) & 0xFF] << 16 | - (uint32_t)ff_reverse[(x >> 16) & 0xFF] << 8 | - (uint32_t)ff_reverse[ x >> 24]; -} - typedef struct VLCcode { uint8_t bits; uint16_t symbol; @@ -183,7 +176,7 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, n = codes[i].bits; code = codes[i].code; symbol = codes[i].symbol; - ff_dlog(NULL, "i=%d n=%d code=0x%x\n", i, n, code); + ff_dlog(NULL, "i=%d n=%d code=0x%"PRIx32"\n", i, n, code); if (n <= table_nb_bits) { /* no need to add another table */ j = code >> (32 - table_nb_bits); @@ -264,7 +257,7 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes, 'bits' or 'codes' tables. 'xxx_size' : gives the number of bytes of each entry of the 'bits' - or 'codes' tables. + or 'codes' tables. Currently 1,2 and 4 are supported. 'wrap' and 'size' make it possible to use any memory configuration and types (byte/word/long) to store the 'bits', 'codes', and 'symbols' tables. @@ -317,7 +310,8 @@ int ff_init_vlc_sparse(VLC *vlc_arg, int nb_bits, int nb_codes, } \ GET_DATA(buf[j].code, codes, i, codes_wrap, codes_size); \ if (buf[j].code >= (1LL< + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include + +#include "avcodec.h" +#include "libavutil/internal.h" +#include "libavutil/mem.h" +#include "libavutil/opt.h" + +#if FF_API_OLD_BSF +FF_DISABLE_DEPRECATION_WARNINGS + +AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f) +{ + const AVBitStreamFilter *filter = NULL; + void *opaque = NULL; + + while (filter != f) + filter = av_bsf_next(&opaque); + + return av_bsf_next(&opaque); +} + +void av_register_bitstream_filter(AVBitStreamFilter *bsf) +{ +} + +typedef struct BSFCompatContext { + AVBSFContext *ctx; + int extradata_updated; +} BSFCompatContext; + +AVBitStreamFilterContext *av_bitstream_filter_init(const char *name) +{ + AVBitStreamFilterContext *ctx = NULL; + BSFCompatContext *priv = NULL; + const AVBitStreamFilter *bsf; + + bsf = av_bsf_get_by_name(name); + if (!bsf) + return NULL; + + ctx = av_mallocz(sizeof(*ctx)); + if (!ctx) + return NULL; + + priv = av_mallocz(sizeof(*priv)); + if (!priv) + goto fail; + + + ctx->filter = bsf; + ctx->priv_data = priv; + + return ctx; + +fail: + if (priv) + av_bsf_free(&priv->ctx); + av_freep(&priv); + av_freep(&ctx); + return NULL; +} + +void av_bitstream_filter_close(AVBitStreamFilterContext *bsfc) +{ + BSFCompatContext *priv; + + if (!bsfc) + return; + + priv = bsfc->priv_data; + + av_bsf_free(&priv->ctx); + av_freep(&bsfc->priv_data); + av_free(bsfc); +} + +int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, + AVCodecContext *avctx, const char *args, + uint8_t **poutbuf, int *poutbuf_size, + const uint8_t *buf, int buf_size, int keyframe) +{ + BSFCompatContext *priv = bsfc->priv_data; + AVPacket pkt = { 0 }; + int ret; + + if (!priv->ctx) { + ret = av_bsf_alloc(bsfc->filter, &priv->ctx); + if (ret < 0) + return ret; + + ret = avcodec_parameters_from_context(priv->ctx->par_in, avctx); + if (ret < 0) + return ret; + + priv->ctx->time_base_in = avctx->time_base; + + if (bsfc->args && bsfc->filter->priv_class) { + const AVOption *opt = av_opt_next(priv->ctx->priv_data, NULL); + const char * shorthand[2] = {NULL}; + + if (opt) + shorthand[0] = opt->name; + + ret = av_opt_set_from_string(priv->ctx->priv_data, bsfc->args, shorthand, "=", ":"); + if (ret < 0) + return ret; + } + + ret = av_bsf_init(priv->ctx); + if (ret < 0) + return ret; + } + + pkt.data = buf; + pkt.size = buf_size; + + ret = av_bsf_send_packet(priv->ctx, &pkt); + if (ret < 0) + return ret; + + *poutbuf = NULL; + *poutbuf_size = 0; + + ret = av_bsf_receive_packet(priv->ctx, &pkt); + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) + return 0; + else if (ret < 0) + return ret; + + *poutbuf = av_malloc(pkt.size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!*poutbuf) { + av_packet_unref(&pkt); + return AVERROR(ENOMEM); + } + + *poutbuf_size = pkt.size; + memcpy(*poutbuf, pkt.data, pkt.size); + + av_packet_unref(&pkt); + + /* drain all the remaining packets we cannot return */ + while (ret >= 0) { + ret = av_bsf_receive_packet(priv->ctx, &pkt); + av_packet_unref(&pkt); + } + + if (!priv->extradata_updated) { + /* update extradata in avctx from the output codec parameters */ + if (priv->ctx->par_out->extradata_size && (!args || !strstr(args, "private_spspps_buf"))) { + av_freep(&avctx->extradata); + avctx->extradata_size = 0; + avctx->extradata = av_mallocz(priv->ctx->par_out->extradata_size + AV_INPUT_BUFFER_PADDING_SIZE); + if (!avctx->extradata) + return AVERROR(ENOMEM); + memcpy(avctx->extradata, priv->ctx->par_out->extradata, priv->ctx->par_out->extradata_size); + avctx->extradata_size = priv->ctx->par_out->extradata_size; + } + + priv->extradata_updated = 1; + } + + return 1; +} +FF_ENABLE_DEPRECATION_WARNINGS +#endif diff --git a/media/ffvpx/libavcodec/bitstream_filters.c b/media/ffvpx/libavcodec/bitstream_filters.c new file mode 100644 index 000000000000..ce34de640d30 --- /dev/null +++ b/media/ffvpx/libavcodec/bitstream_filters.c @@ -0,0 +1,91 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#include "libavutil/common.h" +#include "libavutil/log.h" + +#include "avcodec.h" +#include "bsf.h" + +extern const AVBitStreamFilter ff_aac_adtstoasc_bsf; +extern const AVBitStreamFilter ff_chomp_bsf; +extern const AVBitStreamFilter ff_dump_extradata_bsf; +extern const AVBitStreamFilter ff_dca_core_bsf; +extern const AVBitStreamFilter ff_extract_extradata_bsf; +extern const AVBitStreamFilter ff_h264_mp4toannexb_bsf; +extern const AVBitStreamFilter ff_hevc_mp4toannexb_bsf; +extern const AVBitStreamFilter ff_imx_dump_header_bsf; +extern const AVBitStreamFilter ff_mjpeg2jpeg_bsf; +extern const AVBitStreamFilter ff_mjpega_dump_header_bsf; +extern const AVBitStreamFilter ff_mp3_header_decompress_bsf; +extern const AVBitStreamFilter ff_mpeg4_unpack_bframes_bsf; +extern const AVBitStreamFilter ff_mov2textsub_bsf; +extern const AVBitStreamFilter ff_noise_bsf; +extern const AVBitStreamFilter ff_null_bsf; +extern const AVBitStreamFilter ff_remove_extradata_bsf; +extern const AVBitStreamFilter ff_text2movsub_bsf; +extern const AVBitStreamFilter ff_vp9_raw_reorder_bsf; +extern const AVBitStreamFilter ff_vp9_superframe_bsf; +extern const AVBitStreamFilter ff_vp9_superframe_split_bsf; + +#include "libavcodec/bsf_list.c" + +const AVBitStreamFilter *av_bsf_next(void **opaque) +{ + uintptr_t i = (uintptr_t)*opaque; + const AVBitStreamFilter *f = bitstream_filters[i]; + + if (f) + *opaque = (void*)(i + 1); + + return f; +} + +const AVBitStreamFilter *av_bsf_get_by_name(const char *name) +{ + int i; + + for (i = 0; bitstream_filters[i]; i++) { + const AVBitStreamFilter *f = bitstream_filters[i]; + if (!strcmp(f->name, name)) + return f; + } + + return NULL; +} + +const AVClass *ff_bsf_child_class_next(const AVClass *prev) +{ + int i; + + /* find the filter that corresponds to prev */ + for (i = 0; prev && bitstream_filters[i]; i++) { + if (bitstream_filters[i]->priv_class == prev) { + i++; + break; + } + } + + /* find next filter with priv options */ + for (; bitstream_filters[i]; i++) + if (bitstream_filters[i]->priv_class) + return bitstream_filters[i]->priv_class; + return NULL; +} diff --git a/media/ffvpx/libavcodec/blockdsp.h b/media/ffvpx/libavcodec/blockdsp.h index 95e1d0f32e11..6e27a02ba52d 100644 --- a/media/ffvpx/libavcodec/blockdsp.h +++ b/media/ffvpx/libavcodec/blockdsp.h @@ -19,6 +19,7 @@ #ifndef AVCODEC_BLOCKDSP_H #define AVCODEC_BLOCKDSP_H +#include #include #include "avcodec.h" @@ -29,7 +30,7 @@ * h for op_pixels_func is limited to { width / 2, width }, * but never larger than 16 and never smaller than 4. */ typedef void (*op_fill_func)(uint8_t *block /* align width (8 or 16) */, - uint8_t value, int line_size, int h); + uint8_t value, ptrdiff_t line_size, int h); typedef struct BlockDSPContext { void (*clear_block)(int16_t *block /* align 16 */); diff --git a/media/ffvpx/libavcodec/bsf_list.c b/media/ffvpx/libavcodec/bsf_list.c new file mode 100644 index 000000000000..d31ece942a70 --- /dev/null +++ b/media/ffvpx/libavcodec/bsf_list.c @@ -0,0 +1,3 @@ +static const AVBitStreamFilter * const bitstream_filters[] = { + &ff_null_bsf, + NULL }; diff --git a/media/ffvpx/libavcodec/bytestream.h b/media/ffvpx/libavcodec/bytestream.h index 7c05ea6cf541..7be7fc22fc8e 100644 --- a/media/ffvpx/libavcodec/bytestream.h +++ b/media/ffvpx/libavcodec/bytestream.h @@ -94,7 +94,7 @@ DEF(unsigned int, be24, 3, AV_RB24, AV_WB24) DEF(unsigned int, be16, 2, AV_RB16, AV_WB16) DEF(unsigned int, byte, 1, AV_RB8 , AV_WB8) -#if HAVE_BIGENDIAN +#if AV_HAVE_BIGENDIAN # define bytestream2_get_ne16 bytestream2_get_be16 # define bytestream2_get_ne24 bytestream2_get_be24 # define bytestream2_get_ne32 bytestream2_get_be32 diff --git a/media/ffvpx/libavcodec/codec_desc.c b/media/ffvpx/libavcodec/codec_desc.c index 9d94b72ed278..660df7cd256f 100644 --- a/media/ffvpx/libavcodec/codec_desc.c +++ b/media/ffvpx/libavcodec/codec_desc.c @@ -169,6 +169,14 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("FLV / Sorenson Spark / Sorenson H.263 (Flash Video)"), .props = AV_CODEC_PROP_LOSSY, }, + { + .id = AV_CODEC_ID_SVG, + .type = AVMEDIA_TYPE_VIDEO, + .name = "svg", + .long_name = NULL_IF_CONFIG_SMALL("Scalable Vector Graphics"), + .props = AV_CODEC_PROP_LOSSLESS, + .mime_types= MT("image/svg+xml"), + }, { .id = AV_CODEC_ID_SVQ1, .type = AVMEDIA_TYPE_VIDEO, @@ -520,7 +528,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_VIDEO, .name = "fraps", .long_name = NULL_IF_CONFIG_SMALL("Fraps"), - .props = AV_CODEC_PROP_LOSSLESS, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_TRUEMOTION2, @@ -1106,7 +1114,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_VIDEO, .name = "y41p", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed YUV 4:1:1 12-bit"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_ESCAPE130, @@ -1120,56 +1128,56 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_VIDEO, .name = "avrp", .long_name = NULL_IF_CONFIG_SMALL("Avid 1:1 10-bit RGB Packer"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_012V, .type = AVMEDIA_TYPE_VIDEO, .name = "012v", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed 4:2:2 10-bit"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_AVUI, .type = AVMEDIA_TYPE_VIDEO, .name = "avui", .long_name = NULL_IF_CONFIG_SMALL("Avid Meridien Uncompressed"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .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, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_TARGA_Y216, .type = AVMEDIA_TYPE_VIDEO, .name = "targa_y216", .long_name = NULL_IF_CONFIG_SMALL("Pinnacle TARGA CineWave YUV16"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_V308, .type = AVMEDIA_TYPE_VIDEO, .name = "v308", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed 4:4:4"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_V408, .type = AVMEDIA_TYPE_VIDEO, .name = "v408", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed QT 4:4:4:4"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_YUV4, .type = AVMEDIA_TYPE_VIDEO, .name = "yuv4", .long_name = NULL_IF_CONFIG_SMALL("Uncompressed packed 4:2:0"), - .props = AV_CODEC_PROP_INTRA_ONLY, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_AVRN, @@ -1272,7 +1280,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .id = AV_CODEC_ID_HAP, .type = AVMEDIA_TYPE_VIDEO, .name = "hap", - .long_name = NULL_IF_CONFIG_SMALL("Vidvox Hap decoder"), + .long_name = NULL_IF_CONFIG_SMALL("Vidvox Hap"), .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, }, { @@ -1289,6 +1297,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("Screenpresso"), .props = AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_SPEEDHQ, + .type = AVMEDIA_TYPE_VIDEO, + .name = "speedhq", + .long_name = NULL_IF_CONFIG_SMALL("NewTek SpeedHQ"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + }, { .id = AV_CODEC_ID_WRAPPED_AVFRAME, .type = AVMEDIA_TYPE_VIDEO, @@ -1303,6 +1318,69 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("innoHeim/Rsupport Screen Capture Codec"), .props = AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_PIXLET, + .type = AVMEDIA_TYPE_VIDEO, + .name = "pixlet", + .long_name = NULL_IF_CONFIG_SMALL("Apple Pixlet"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + }, + { + .id = AV_CODEC_ID_FMVC, + .type = AVMEDIA_TYPE_VIDEO, + .name = "fmvc", + .long_name = NULL_IF_CONFIG_SMALL("FM Screen Capture Codec"), + .props = AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_SCPR, + .type = AVMEDIA_TYPE_VIDEO, + .name = "scpr", + .long_name = NULL_IF_CONFIG_SMALL("ScreenPressor"), + .props = AV_CODEC_PROP_LOSSLESS | AV_CODEC_PROP_LOSSY, + }, + { + .id = AV_CODEC_ID_CLEARVIDEO, + .type = AVMEDIA_TYPE_VIDEO, + .name = "clearvideo", + .long_name = NULL_IF_CONFIG_SMALL("Iterated Systems ClearVideo"), + .props = AV_CODEC_PROP_LOSSY, + }, + { + .id = AV_CODEC_ID_AV1, + .type = AVMEDIA_TYPE_VIDEO, + .name = "av1", + .long_name = NULL_IF_CONFIG_SMALL("Alliance for Open Media AV1"), + .props = AV_CODEC_PROP_LOSSY, + }, + { + .id = AV_CODEC_ID_BITPACKED, + .type = AVMEDIA_TYPE_VIDEO, + .name = "bitpacked", + .long_name = NULL_IF_CONFIG_SMALL("Bitpacked"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_MSCC, + .type = AVMEDIA_TYPE_VIDEO, + .name = "mscc", + .long_name = NULL_IF_CONFIG_SMALL("Mandsoft Screen Capture Codec"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_SRGC, + .type = AVMEDIA_TYPE_VIDEO, + .name = "srgc", + .long_name = NULL_IF_CONFIG_SMALL("Screen Recorder Gold Codec"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_GDV, + .type = AVMEDIA_TYPE_VIDEO, + .name = "gdv", + .long_name = NULL_IF_CONFIG_SMALL("Gremlin Digital Video"), + .props = AV_CODEC_PROP_LOSSY, + }, /* image codecs */ { @@ -1349,6 +1427,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_FITS, + .type = AVMEDIA_TYPE_VIDEO, + .name = "fits", + .long_name = NULL_IF_CONFIG_SMALL("FITS (Flexible Image Transport System)"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, { .id = AV_CODEC_ID_GIF, .type = AVMEDIA_TYPE_VIDEO, @@ -1424,6 +1509,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("PPM (Portable PixelMap) image"), .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_PSD, + .type = AVMEDIA_TYPE_VIDEO, + .name = "psd", + .long_name = NULL_IF_CONFIG_SMALL("Photoshop PSD file"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, { .id = AV_CODEC_ID_PTX, .type = AVMEDIA_TYPE_VIDEO, @@ -1511,6 +1603,15 @@ static const AVCodecDescriptor codec_descriptors[] = { .name = "xbm", .long_name = NULL_IF_CONFIG_SMALL("XBM (X BitMap) image"), .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + .mime_types= MT("image/x-xbitmap"), + }, + { + .id = AV_CODEC_ID_XPM, + .type = AVMEDIA_TYPE_VIDEO, + .name = "xpm", + .long_name = NULL_IF_CONFIG_SMALL("XPM (X PixMap) image"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + .mime_types= MT("image/x-xpixmap"), }, { .id = AV_CODEC_ID_XWD, @@ -1726,6 +1827,20 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("PCM signed 20|24-bit big-endian"), .props = AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_PCM_F16LE, + .type = AVMEDIA_TYPE_AUDIO, + .name = "pcm_f16le", + .long_name = NULL_IF_CONFIG_SMALL("PCM 16.8 floating point little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_PCM_F24LE, + .type = AVMEDIA_TYPE_AUDIO, + .name = "pcm_f24le", + .long_name = NULL_IF_CONFIG_SMALL("PCM 24.0 floating point little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, + }, { .id = AV_CODEC_ID_PCM_F32BE, .type = AVMEDIA_TYPE_AUDIO, @@ -2133,6 +2248,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("DPCM Squareroot-Delta-Exact"), .props = AV_CODEC_PROP_LOSSY, }, + { + .id = AV_CODEC_ID_GREMLIN_DPCM, + .type = AVMEDIA_TYPE_AUDIO, + .name = "gremlin_dpcm", + .long_name = NULL_IF_CONFIG_SMALL("DPCM Gremlin"), + .props = AV_CODEC_PROP_LOSSY, + }, /* audio codecs */ { @@ -2226,7 +2348,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "flac", .long_name = NULL_IF_CONFIG_SMALL("FLAC (Free Lossless Audio Codec)"), - .props = AV_CODEC_PROP_LOSSLESS, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_MP3ADU, @@ -2254,7 +2376,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "alac", .long_name = NULL_IF_CONFIG_SMALL("ALAC (Apple Lossless Audio Codec)"), - .props = AV_CODEC_PROP_LOSSLESS, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_WESTWOOD_SND1, @@ -2296,7 +2418,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "tta", .long_name = NULL_IF_CONFIG_SMALL("TTA (True Audio)"), - .props = AV_CODEC_PROP_LOSSLESS, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_SMACKAUDIO, @@ -2317,7 +2439,8 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "wavpack", .long_name = NULL_IF_CONFIG_SMALL("WavPack"), - .props = AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, + .props = AV_CODEC_PROP_INTRA_ONLY | + AV_CODEC_PROP_LOSSY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_DSICINAUDIO, @@ -2426,6 +2549,20 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("ATRAC3+ (Adaptive TRansform Acoustic Coding 3+)"), .props = AV_CODEC_PROP_LOSSY, }, + { + .id = AV_CODEC_ID_ATRAC3PAL, + .type = AVMEDIA_TYPE_AUDIO, + .name = "atrac3pal", + .long_name = NULL_IF_CONFIG_SMALL("ATRAC3+ AL (Adaptive TRansform Acoustic Coding 3+ Advanced Lossless)"), + .props = AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_ATRAC3AL, + .type = AVMEDIA_TYPE_AUDIO, + .name = "atrac3al", + .long_name = NULL_IF_CONFIG_SMALL("ATRAC3 AL (Adaptive TRansform Acoustic Coding 3 Advanced Lossless)"), + .props = AV_CODEC_PROP_LOSSLESS, + }, { .id = AV_CODEC_ID_EAC3, .type = AVMEDIA_TYPE_AUDIO, @@ -2525,6 +2662,13 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("Digital Speech Standard - Standard Play mode (DSS SP)"), .props = AV_CODEC_PROP_LOSSY, }, + { + .id = AV_CODEC_ID_DOLBY_E, + .type = AVMEDIA_TYPE_AUDIO, + .name = "dolby_e", + .long_name = NULL_IF_CONFIG_SMALL("Dolby E"), + .props = AV_CODEC_PROP_LOSSY, + }, { .id = AV_CODEC_ID_G729, .type = AVMEDIA_TYPE_AUDIO, @@ -2611,7 +2755,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .type = AVMEDIA_TYPE_AUDIO, .name = "tak", .long_name = NULL_IF_CONFIG_SMALL("TAK (Tom's lossless Audio Kompressor)"), - .props = AV_CODEC_PROP_LOSSLESS, + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, }, { .id = AV_CODEC_ID_METASOUND, diff --git a/media/ffvpx/libavcodec/dct.h b/media/ffvpx/libavcodec/dct.h index 05297ba9dbfe..0a03e256d136 100644 --- a/media/ffvpx/libavcodec/dct.h +++ b/media/ffvpx/libavcodec/dct.h @@ -24,6 +24,7 @@ #if !defined(AVCODEC_DCT_H) && (!defined(FFT_FLOAT) || FFT_FLOAT) #define AVCODEC_DCT_H +#include #include #include "rdft.h" @@ -62,7 +63,7 @@ void ff_j_rev_dct(int16_t *data); void ff_j_rev_dct4(int16_t *data); void ff_j_rev_dct2(int16_t *data); void ff_j_rev_dct1(int16_t *data); -void ff_jref_idct_put(uint8_t *dest, int line_size, int16_t *block); -void ff_jref_idct_add(uint8_t *dest, int line_size, int16_t *block); +void ff_jref_idct_put(uint8_t *dest, ptrdiff_t line_size, int16_t *block); +void ff_jref_idct_add(uint8_t *dest, ptrdiff_t line_size, int16_t *block); #endif /* AVCODEC_DCT_H */ diff --git a/media/ffvpx/libavcodec/decode.c b/media/ffvpx/libavcodec/decode.c new file mode 100644 index 000000000000..1337ffb5271b --- /dev/null +++ b/media/ffvpx/libavcodec/decode.c @@ -0,0 +1,1756 @@ +/* + * generic decoding-related code + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +#include "config.h" + +#if CONFIG_ICONV +# include +#endif + +#include "libavutil/avassert.h" +#include "libavutil/avstring.h" +#include "libavutil/bprint.h" +#include "libavutil/common.h" +#include "libavutil/frame.h" +#include "libavutil/hwcontext.h" +#include "libavutil/imgutils.h" +#include "libavutil/internal.h" +#include "libavutil/intmath.h" + +#include "avcodec.h" +#include "bytestream.h" +#include "decode.h" +#include "internal.h" +#include "thread.h" + +static int apply_param_change(AVCodecContext *avctx, const AVPacket *avpkt) +{ + int size = 0, ret; + const uint8_t *data; + uint32_t flags; + int64_t val; + + data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size); + if (!data) + return 0; + + if (!(avctx->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE)) { + av_log(avctx, AV_LOG_ERROR, "This decoder does not support parameter " + "changes, but PARAM_CHANGE side data was sent to it.\n"); + ret = AVERROR(EINVAL); + goto fail2; + } + + if (size < 4) + goto fail; + + flags = bytestream_get_le32(&data); + size -= 4; + + 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; + } + avctx->channels = val; + size -= 4; + } + if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) { + if (size < 8) + goto fail; + avctx->channel_layout = bytestream_get_le64(&data); + size -= 8; + } + if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) { + if (size < 4) + goto fail; + val = bytestream_get_le32(&data); + if (val <= 0 || val > INT_MAX) { + av_log(avctx, AV_LOG_ERROR, "Invalid sample rate"); + ret = AVERROR_INVALIDDATA; + goto fail2; + } + avctx->sample_rate = val; + size -= 4; + } + if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) { + if (size < 8) + goto fail; + avctx->width = bytestream_get_le32(&data); + avctx->height = bytestream_get_le32(&data); + size -= 8; + ret = ff_set_dimensions(avctx, avctx->width, avctx->height); + if (ret < 0) + goto fail2; + } + + return 0; +fail: + av_log(avctx, AV_LOG_ERROR, "PARAM_CHANGE side data too small.\n"); + ret = AVERROR_INVALIDDATA; +fail2: + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n"); + if (avctx->err_recognition & AV_EF_EXPLODE) + return ret; + } + return 0; +} + +static int extract_packet_props(AVCodecInternal *avci, const AVPacket *pkt) +{ + int ret = 0; + + av_packet_unref(avci->last_pkt_props); + if (pkt) { + ret = av_packet_copy_props(avci->last_pkt_props, pkt); + if (!ret) + avci->last_pkt_props->size = pkt->size; // HACK: Needed for ff_init_buffer_info(). + } + return ret; +} + +static int unrefcount_frame(AVCodecInternal *avci, AVFrame *frame) +{ + int ret; + + /* move the original frame to our backup */ + av_frame_unref(avci->to_free); + av_frame_move_ref(avci->to_free, frame); + + /* now copy everything except the AVBufferRefs back + * note that we make a COPY of the side data, so calling av_frame_free() on + * the caller's frame will work properly */ + ret = av_frame_copy_props(frame, avci->to_free); + if (ret < 0) + return ret; + + memcpy(frame->data, avci->to_free->data, sizeof(frame->data)); + memcpy(frame->linesize, avci->to_free->linesize, sizeof(frame->linesize)); + if (avci->to_free->extended_data != avci->to_free->data) { + int planes = avci->to_free->channels; + int size = planes * sizeof(*frame->extended_data); + + if (!size) { + av_frame_unref(frame); + return AVERROR_BUG; + } + + frame->extended_data = av_malloc(size); + if (!frame->extended_data) { + av_frame_unref(frame); + return AVERROR(ENOMEM); + } + memcpy(frame->extended_data, avci->to_free->extended_data, + size); + } else + frame->extended_data = frame->data; + + frame->format = avci->to_free->format; + frame->width = avci->to_free->width; + frame->height = avci->to_free->height; + frame->channel_layout = avci->to_free->channel_layout; + frame->nb_samples = avci->to_free->nb_samples; + frame->channels = avci->to_free->channels; + + return 0; +} + +static int bsfs_init(AVCodecContext *avctx) +{ + AVCodecInternal *avci = avctx->internal; + DecodeFilterContext *s = &avci->filter; + const char *bsfs_str; + int ret; + + if (s->nb_bsfs) + return 0; + + bsfs_str = avctx->codec->bsfs ? avctx->codec->bsfs : "null"; + while (bsfs_str && *bsfs_str) { + AVBSFContext **tmp; + const AVBitStreamFilter *filter; + char *bsf; + + bsf = av_get_token(&bsfs_str, ","); + if (!bsf) { + ret = AVERROR(ENOMEM); + goto fail; + } + + filter = av_bsf_get_by_name(bsf); + if (!filter) { + av_log(avctx, AV_LOG_ERROR, "A non-existing bitstream filter %s " + "requested by a decoder. This is a bug, please report it.\n", + bsf); + ret = AVERROR_BUG; + av_freep(&bsf); + goto fail; + } + av_freep(&bsf); + + tmp = av_realloc_array(s->bsfs, s->nb_bsfs + 1, sizeof(*s->bsfs)); + if (!tmp) { + ret = AVERROR(ENOMEM); + goto fail; + } + s->bsfs = tmp; + s->nb_bsfs++; + + ret = av_bsf_alloc(filter, &s->bsfs[s->nb_bsfs - 1]); + if (ret < 0) + goto fail; + + if (s->nb_bsfs == 1) { + /* We do not currently have an API for passing the input timebase into decoders, + * but no filters used here should actually need it. + * So we make up some plausible-looking number (the MPEG 90kHz timebase) */ + s->bsfs[s->nb_bsfs - 1]->time_base_in = (AVRational){ 1, 90000 }; + ret = avcodec_parameters_from_context(s->bsfs[s->nb_bsfs - 1]->par_in, + avctx); + } else { + s->bsfs[s->nb_bsfs - 1]->time_base_in = s->bsfs[s->nb_bsfs - 2]->time_base_out; + ret = avcodec_parameters_copy(s->bsfs[s->nb_bsfs - 1]->par_in, + s->bsfs[s->nb_bsfs - 2]->par_out); + } + if (ret < 0) + goto fail; + + ret = av_bsf_init(s->bsfs[s->nb_bsfs - 1]); + if (ret < 0) + goto fail; + } + + return 0; +fail: + ff_decode_bsfs_uninit(avctx); + return ret; +} + +/* try to get one output packet from the filter chain */ +static int bsfs_poll(AVCodecContext *avctx, AVPacket *pkt) +{ + DecodeFilterContext *s = &avctx->internal->filter; + int idx, ret; + + /* start with the last filter in the chain */ + idx = s->nb_bsfs - 1; + while (idx >= 0) { + /* request a packet from the currently selected filter */ + ret = av_bsf_receive_packet(s->bsfs[idx], pkt); + if (ret == AVERROR(EAGAIN)) { + /* no packets available, try the next filter up the chain */ + ret = 0; + idx--; + continue; + } else if (ret < 0 && ret != AVERROR_EOF) { + return ret; + } + + /* got a packet or EOF -- pass it to the caller or to the next filter + * down the chain */ + if (idx == s->nb_bsfs - 1) { + return ret; + } else { + idx++; + ret = av_bsf_send_packet(s->bsfs[idx], ret < 0 ? NULL : pkt); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, + "Error pre-processing a packet before decoding\n"); + av_packet_unref(pkt); + return ret; + } + } + } + + return AVERROR(EAGAIN); +} + +int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt) +{ + AVCodecInternal *avci = avctx->internal; + int ret; + + if (avci->draining) + return AVERROR_EOF; + + ret = bsfs_poll(avctx, pkt); + if (ret == AVERROR_EOF) + avci->draining = 1; + if (ret < 0) + return ret; + + ret = extract_packet_props(avctx->internal, pkt); + if (ret < 0) + goto finish; + + ret = apply_param_change(avctx, pkt); + if (ret < 0) + goto finish; + + if (avctx->codec->receive_frame) + avci->compat_decode_consumed += pkt->size; + + return 0; +finish: + av_packet_unref(pkt); + return ret; +} + +/** + * Attempt to guess proper monotonic timestamps for decoded video frames + * which might have incorrect times. Input timestamps may wrap around, in + * which case the output will as well. + * + * @param pts the pts field of the decoded AVPacket, as passed through + * AVFrame.pts + * @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, + 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; + } else if (reordered_pts != AV_NOPTS_VALUE) + ctx->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; + } else if(dts != AV_NOPTS_VALUE) + ctx->pts_correction_last_pts = dts; + + if ((ctx->pts_correction_num_faulty_pts<=ctx->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE) + && reordered_pts != AV_NOPTS_VALUE) + pts = reordered_pts; + else + pts = dts; + + return pts; +} + +/* + * The core of the receive_frame_wrapper for the decoders implementing + * the simple API. Certain decoders might consume partial packets without + * returning any output, so this function needs to be called in a loop until it + * returns EAGAIN. + **/ +static int decode_simple_internal(AVCodecContext *avctx, AVFrame *frame) +{ + AVCodecInternal *avci = avctx->internal; + DecodeSimpleContext *ds = &avci->ds; + AVPacket *pkt = ds->in_pkt; + // copy to ensure we do not change pkt + AVPacket tmp; + int got_frame, actual_got_frame, did_split; + int ret; + + if (!pkt->data && !avci->draining) { + av_packet_unref(pkt); + ret = ff_decode_get_packet(avctx, pkt); + if (ret < 0 && ret != AVERROR_EOF) + return ret; + } + + // Some codecs (at least wma lossless) will crash when feeding drain packets + // after EOF was signaled. + if (avci->draining_done) + return AVERROR_EOF; + + if (!pkt->data && + !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY || + avctx->active_thread_type & FF_THREAD_FRAME)) + return AVERROR_EOF; + + tmp = *pkt; +#if FF_API_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS + did_split = avci->compat_decode_partial_size ? + ff_packet_split_and_drop_side_data(&tmp) : + av_packet_split_side_data(&tmp); + + if (did_split) { + ret = extract_packet_props(avctx->internal, &tmp); + if (ret < 0) + return ret; + + ret = apply_param_change(avctx, &tmp); + if (ret < 0) + return ret; + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif + + got_frame = 0; + + if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) { + ret = ff_thread_decode_frame(avctx, frame, &got_frame, &tmp); + } else { + ret = avctx->codec->decode(avctx, frame, &got_frame, &tmp); + + if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) + frame->pkt_dts = pkt->dts; + if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) { + if(!avctx->has_b_frames) + frame->pkt_pos = pkt->pos; + //FIXME these should be under if(!avctx->has_b_frames) + /* get_buffer is supposed to set frame parameters */ + if (!(avctx->codec->capabilities & AV_CODEC_CAP_DR1)) { + if (!frame->sample_aspect_ratio.num) frame->sample_aspect_ratio = avctx->sample_aspect_ratio; + if (!frame->width) frame->width = avctx->width; + if (!frame->height) frame->height = avctx->height; + if (frame->format == AV_PIX_FMT_NONE) frame->format = avctx->pix_fmt; + } + } + } + emms_c(); + actual_got_frame = got_frame; + + if (avctx->codec->type == AVMEDIA_TYPE_VIDEO) { + if (frame->flags & AV_FRAME_FLAG_DISCARD) + got_frame = 0; + if (got_frame) + frame->best_effort_timestamp = guess_correct_pts(avctx, + frame->pts, + frame->pkt_dts); + } else if (avctx->codec->type == AVMEDIA_TYPE_AUDIO) { + uint8_t *side; + int side_size; + uint32_t discard_padding = 0; + uint8_t skip_reason = 0; + uint8_t discard_reason = 0; + + if (ret >= 0 && got_frame) { + frame->best_effort_timestamp = guess_correct_pts(avctx, + frame->pts, + frame->pkt_dts); + if (frame->format == AV_SAMPLE_FMT_NONE) + frame->format = avctx->sample_fmt; + if (!frame->channel_layout) + frame->channel_layout = avctx->channel_layout; + if (!frame->channels) + frame->channels = avctx->channels; + if (!frame->sample_rate) + frame->sample_rate = avctx->sample_rate; + } + + side= av_packet_get_side_data(avci->last_pkt_props, AV_PKT_DATA_SKIP_SAMPLES, &side_size); + if(side && side_size>=10) { + avctx->internal->skip_samples = AV_RL32(side) * avctx->internal->skip_samples_multiplier; + discard_padding = AV_RL32(side + 4); + av_log(avctx, AV_LOG_DEBUG, "skip %d / discard %d samples due to side data\n", + avctx->internal->skip_samples, (int)discard_padding); + skip_reason = AV_RL8(side + 8); + discard_reason = AV_RL8(side + 9); + } + + if ((frame->flags & AV_FRAME_FLAG_DISCARD) && got_frame && + !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { + avctx->internal->skip_samples = FFMAX(0, avctx->internal->skip_samples - frame->nb_samples); + got_frame = 0; + } + + if (avctx->internal->skip_samples > 0 && got_frame && + !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { + if(frame->nb_samples <= avctx->internal->skip_samples){ + got_frame = 0; + avctx->internal->skip_samples -= frame->nb_samples; + av_log(avctx, AV_LOG_DEBUG, "skip whole frame, skip left: %d\n", + avctx->internal->skip_samples); + } else { + av_samples_copy(frame->extended_data, frame->extended_data, 0, avctx->internal->skip_samples, + frame->nb_samples - avctx->internal->skip_samples, avctx->channels, frame->format); + if(avctx->pkt_timebase.num && avctx->sample_rate) { + int64_t diff_ts = av_rescale_q(avctx->internal->skip_samples, + (AVRational){1, avctx->sample_rate}, + avctx->pkt_timebase); + if(frame->pts!=AV_NOPTS_VALUE) + frame->pts += diff_ts; +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS + if(frame->pkt_pts!=AV_NOPTS_VALUE) + frame->pkt_pts += diff_ts; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + if(frame->pkt_dts!=AV_NOPTS_VALUE) + frame->pkt_dts += diff_ts; + if (frame->pkt_duration >= diff_ts) + frame->pkt_duration -= diff_ts; + } else { + av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n"); + } + av_log(avctx, AV_LOG_DEBUG, "skip %d/%d samples\n", + avctx->internal->skip_samples, frame->nb_samples); + frame->nb_samples -= avctx->internal->skip_samples; + avctx->internal->skip_samples = 0; + } + } + + if (discard_padding > 0 && discard_padding <= frame->nb_samples && got_frame && + !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { + if (discard_padding == frame->nb_samples) { + got_frame = 0; + } else { + if(avctx->pkt_timebase.num && avctx->sample_rate) { + int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding, + (AVRational){1, avctx->sample_rate}, + avctx->pkt_timebase); + frame->pkt_duration = diff_ts; + } else { + av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for discarded samples.\n"); + } + av_log(avctx, AV_LOG_DEBUG, "discard %d/%d samples\n", + (int)discard_padding, frame->nb_samples); + frame->nb_samples -= discard_padding; + } + } + + if ((avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL) && got_frame) { + AVFrameSideData *fside = av_frame_new_side_data(frame, AV_FRAME_DATA_SKIP_SAMPLES, 10); + if (fside) { + AV_WL32(fside->data, avctx->internal->skip_samples); + AV_WL32(fside->data + 4, discard_padding); + AV_WL8(fside->data + 8, skip_reason); + AV_WL8(fside->data + 9, discard_reason); + avctx->internal->skip_samples = 0; + } + } + } +#if FF_API_MERGE_SD + if (did_split) { + av_packet_free_side_data(&tmp); + if(ret == tmp.size) + ret = pkt->size; + } +#endif + + if (avctx->codec->type == AVMEDIA_TYPE_AUDIO && + !avci->showed_multi_packet_warning && + ret >= 0 && ret != pkt->size && !(avctx->codec->capabilities & AV_CODEC_CAP_SUBFRAMES)) { + av_log(avctx, AV_LOG_WARNING, "Multiple frames in a packet.\n"); + avci->showed_multi_packet_warning = 1; + } + + if (!got_frame) + av_frame_unref(frame); + + if (ret >= 0 && avctx->codec->type == AVMEDIA_TYPE_VIDEO && !(avctx->flags & AV_CODEC_FLAG_TRUNCATED)) + ret = pkt->size; + +#if FF_API_AVCTX_TIMEBASE + if (avctx->framerate.num > 0 && avctx->framerate.den > 0) + avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); +#endif + + /* do not stop draining when actual_got_frame != 0 or ret < 0 */ + /* got_frame == 0 but actual_got_frame != 0 when frame is discarded */ + if (avctx->internal->draining && !actual_got_frame) { + if (ret < 0) { + /* prevent infinite loop if a decoder wrongly always return error on draining */ + /* reasonable nb_errors_max = maximum b frames + thread count */ + int nb_errors_max = 20 + (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME ? + avctx->thread_count : 1); + + if (avci->nb_draining_errors++ >= nb_errors_max) { + av_log(avctx, AV_LOG_ERROR, "Too many errors when draining, this is a bug. " + "Stop draining and force EOF.\n"); + avci->draining_done = 1; + ret = AVERROR_BUG; + } + } else { + avci->draining_done = 1; + } + } + + avci->compat_decode_consumed += ret; + + if (ret >= pkt->size || ret < 0) { + av_packet_unref(pkt); + } else { + int consumed = ret; + + pkt->data += consumed; + pkt->size -= consumed; + avci->last_pkt_props->size -= consumed; // See extract_packet_props() comment. + pkt->pts = AV_NOPTS_VALUE; + pkt->dts = AV_NOPTS_VALUE; + avci->last_pkt_props->pts = AV_NOPTS_VALUE; + avci->last_pkt_props->dts = AV_NOPTS_VALUE; + } + + if (got_frame) + av_assert0(frame->buf[0]); + + return ret < 0 ? ret : 0; +} + +static int decode_simple_receive_frame(AVCodecContext *avctx, AVFrame *frame) +{ + int ret; + + while (!frame->buf[0]) { + ret = decode_simple_internal(avctx, frame); + if (ret < 0) + return ret; + } + + return 0; +} + +static int decode_receive_frame_internal(AVCodecContext *avctx, AVFrame *frame) +{ + AVCodecInternal *avci = avctx->internal; + int ret; + + av_assert0(!frame->buf[0]); + + if (avctx->codec->receive_frame) + ret = avctx->codec->receive_frame(avctx, frame); + else + ret = decode_simple_receive_frame(avctx, frame); + + if (ret == AVERROR_EOF) + avci->draining_done = 1; + + return ret; +} + +int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt) +{ + AVCodecInternal *avci = avctx->internal; + int ret; + + if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec)) + return AVERROR(EINVAL); + + if (avctx->internal->draining) + return AVERROR_EOF; + + if (avpkt && !avpkt->size && avpkt->data) + return AVERROR(EINVAL); + + ret = bsfs_init(avctx); + if (ret < 0) + return ret; + + av_packet_unref(avci->buffer_pkt); + if (avpkt && (avpkt->data || avpkt->side_data_elems)) { + ret = av_packet_ref(avci->buffer_pkt, avpkt); + if (ret < 0) + return ret; + } + + ret = av_bsf_send_packet(avci->filter.bsfs[0], avci->buffer_pkt); + if (ret < 0) { + av_packet_unref(avci->buffer_pkt); + return ret; + } + + if (!avci->buffer_frame->buf[0]) { + ret = decode_receive_frame_internal(avctx, avci->buffer_frame); + if (ret < 0 && ret != AVERROR(EAGAIN) && ret != AVERROR_EOF) + return ret; + } + + return 0; +} + +static int apply_cropping(AVCodecContext *avctx, AVFrame *frame) +{ + /* make sure we are noisy about decoders returning invalid cropping data */ + if (frame->crop_left >= INT_MAX - frame->crop_right || + frame->crop_top >= INT_MAX - frame->crop_bottom || + (frame->crop_left + frame->crop_right) >= frame->width || + (frame->crop_top + frame->crop_bottom) >= frame->height) { + av_log(avctx, AV_LOG_WARNING, + "Invalid cropping information set by a decoder: " + "%"SIZE_SPECIFIER"/%"SIZE_SPECIFIER"/%"SIZE_SPECIFIER"/%"SIZE_SPECIFIER" " + "(frame size %dx%d). This is a bug, please report it\n", + frame->crop_left, frame->crop_right, frame->crop_top, frame->crop_bottom, + frame->width, frame->height); + frame->crop_left = 0; + frame->crop_right = 0; + frame->crop_top = 0; + frame->crop_bottom = 0; + return 0; + } + + if (!avctx->apply_cropping) + return 0; + + return av_frame_apply_cropping(frame, avctx->flags & AV_CODEC_FLAG_UNALIGNED ? + AV_FRAME_CROP_UNALIGNED : 0); +} + +int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame) +{ + AVCodecInternal *avci = avctx->internal; + int ret; + + av_frame_unref(frame); + + if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec)) + return AVERROR(EINVAL); + + ret = bsfs_init(avctx); + if (ret < 0) + return ret; + + if (avci->buffer_frame->buf[0]) { + av_frame_move_ref(frame, avci->buffer_frame); + } else { + ret = decode_receive_frame_internal(avctx, frame); + if (ret < 0) + return ret; + } + + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + ret = apply_cropping(avctx, frame); + if (ret < 0) { + av_frame_unref(frame); + return ret; + } + } + + avctx->frame_number++; + + return 0; +} + +static int compat_decode(AVCodecContext *avctx, AVFrame *frame, + int *got_frame, const AVPacket *pkt) +{ + AVCodecInternal *avci = avctx->internal; + int ret = 0; + + av_assert0(avci->compat_decode_consumed == 0); + + *got_frame = 0; + avci->compat_decode = 1; + + if (avci->compat_decode_partial_size > 0 && + avci->compat_decode_partial_size != pkt->size) { + av_log(avctx, AV_LOG_ERROR, + "Got unexpected packet size after a partial decode\n"); + ret = AVERROR(EINVAL); + goto finish; + } + + if (!avci->compat_decode_partial_size) { + ret = avcodec_send_packet(avctx, pkt); + if (ret == AVERROR_EOF) + ret = 0; + else if (ret == AVERROR(EAGAIN)) { + /* we fully drain all the output in each decode call, so this should not + * ever happen */ + ret = AVERROR_BUG; + goto finish; + } else if (ret < 0) + goto finish; + } + + while (ret >= 0) { + ret = avcodec_receive_frame(avctx, frame); + if (ret < 0) { + if (ret == AVERROR(EAGAIN) || ret == AVERROR_EOF) + ret = 0; + goto finish; + } + + if (frame != avci->compat_decode_frame) { + if (!avctx->refcounted_frames) { + ret = unrefcount_frame(avci, frame); + if (ret < 0) + goto finish; + } + + *got_frame = 1; + frame = avci->compat_decode_frame; + } else { + if (!avci->compat_decode_warned) { + av_log(avctx, AV_LOG_WARNING, "The deprecated avcodec_decode_* " + "API cannot return all the frames for this decoder. " + "Some frames will be dropped. Update your code to the " + "new decoding API to fix this.\n"); + avci->compat_decode_warned = 1; + } + } + + if (avci->draining || (!avctx->codec->bsfs && avci->compat_decode_consumed < pkt->size)) + break; + } + +finish: + if (ret == 0) { + /* if there are any bsfs then assume full packet is always consumed */ + if (avctx->codec->bsfs) + ret = pkt->size; + else + ret = FFMIN(avci->compat_decode_consumed, pkt->size); + } + avci->compat_decode_consumed = 0; + avci->compat_decode_partial_size = (ret >= 0) ? pkt->size - ret : 0; + + return ret; +} + +int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, + int *got_picture_ptr, + const AVPacket *avpkt) +{ + return compat_decode(avctx, picture, got_picture_ptr, avpkt); +} + +int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, + AVFrame *frame, + int *got_frame_ptr, + const AVPacket *avpkt) +{ + return compat_decode(avctx, frame, got_frame_ptr, avpkt); +} + +static void get_subtitle_defaults(AVSubtitle *sub) +{ + memset(sub, 0, sizeof(*sub)); + sub->pts = AV_NOPTS_VALUE; +} + +#define UTF8_MAX_BYTES 4 /* 5 and 6 bytes sequences should not be used */ +static int recode_subtitle(AVCodecContext *avctx, + AVPacket *outpkt, const AVPacket *inpkt) +{ +#if CONFIG_ICONV + iconv_t cd = (iconv_t)-1; + int ret = 0; + char *inb, *outb; + size_t inl, outl; + AVPacket tmp; +#endif + + if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_PRE_DECODER || inpkt->size == 0) + return 0; + +#if CONFIG_ICONV + cd = iconv_open("UTF-8", avctx->sub_charenc); + av_assert0(cd != (iconv_t)-1); + + inb = inpkt->data; + inl = inpkt->size; + + if (inl >= INT_MAX / UTF8_MAX_BYTES - AV_INPUT_BUFFER_PADDING_SIZE) { + av_log(avctx, AV_LOG_ERROR, "Subtitles packet is too big for recoding\n"); + ret = AVERROR(ENOMEM); + goto end; + } + + ret = av_new_packet(&tmp, inl * UTF8_MAX_BYTES); + if (ret < 0) + goto end; + outpkt->buf = tmp.buf; + outpkt->data = tmp.data; + outpkt->size = tmp.size; + outb = outpkt->data; + outl = outpkt->size; + + if (iconv(cd, &inb, &inl, &outb, &outl) == (size_t)-1 || + iconv(cd, NULL, NULL, &outb, &outl) == (size_t)-1 || + outl >= outpkt->size || inl != 0) { + ret = FFMIN(AVERROR(errno), -1); + av_log(avctx, AV_LOG_ERROR, "Unable to recode subtitle event \"%s\" " + "from %s to UTF-8\n", inpkt->data, avctx->sub_charenc); + av_packet_unref(&tmp); + goto end; + } + outpkt->size -= outl; + memset(outpkt->data + outpkt->size, 0, outl); + +end: + if (cd != (iconv_t)-1) + iconv_close(cd); + return ret; +#else + av_log(avctx, AV_LOG_ERROR, "requesting subtitles recoding without iconv"); + return AVERROR(EINVAL); +#endif +} + +static int utf8_check(const uint8_t *str) +{ + const uint8_t *byte; + uint32_t codepoint, min; + + while (*str) { + byte = str; + GET_UTF8(codepoint, *(byte++), return 0;); + min = byte - str == 1 ? 0 : byte - str == 2 ? 0x80 : + 1 << (5 * (byte - str) - 4); + if (codepoint < min || codepoint >= 0x110000 || + codepoint == 0xFFFE /* BOM */ || + codepoint >= 0xD800 && codepoint <= 0xDFFF /* surrogates */) + return 0; + str = byte; + } + return 1; +} + +#if FF_API_ASS_TIMING +static void insert_ts(AVBPrint *buf, int ts) +{ + if (ts == -1) { + av_bprintf(buf, "9:59:59.99,"); + } else { + int h, m, s; + + h = ts/360000; ts -= 360000*h; + m = ts/ 6000; ts -= 6000*m; + s = ts/ 100; ts -= 100*s; + av_bprintf(buf, "%d:%02d:%02d.%02d,", h, m, s, ts); + } +} + +static int convert_sub_to_old_ass_form(AVSubtitle *sub, const AVPacket *pkt, AVRational tb) +{ + int i; + AVBPrint buf; + + av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED); + + for (i = 0; i < sub->num_rects; i++) { + char *final_dialog; + const char *dialog; + AVSubtitleRect *rect = sub->rects[i]; + int ts_start, ts_duration = -1; + long int layer; + + if (rect->type != SUBTITLE_ASS || !strncmp(rect->ass, "Dialogue: ", 10)) + continue; + + av_bprint_clear(&buf); + + /* skip ReadOrder */ + dialog = strchr(rect->ass, ','); + if (!dialog) + continue; + dialog++; + + /* extract Layer or Marked */ + layer = strtol(dialog, (char**)&dialog, 10); + if (*dialog != ',') + continue; + dialog++; + + /* rescale timing to ASS time base (ms) */ + ts_start = av_rescale_q(pkt->pts, tb, av_make_q(1, 100)); + if (pkt->duration != -1) + ts_duration = av_rescale_q(pkt->duration, tb, av_make_q(1, 100)); + sub->end_display_time = FFMAX(sub->end_display_time, 10 * ts_duration); + + /* construct ASS (standalone file form with timestamps) string */ + av_bprintf(&buf, "Dialogue: %ld,", layer); + insert_ts(&buf, ts_start); + insert_ts(&buf, ts_duration == -1 ? -1 : ts_start + ts_duration); + av_bprintf(&buf, "%s\r\n", dialog); + + final_dialog = av_strdup(buf.str); + if (!av_bprint_is_complete(&buf) || !final_dialog) { + av_freep(&final_dialog); + av_bprint_finalize(&buf, NULL); + return AVERROR(ENOMEM); + } + av_freep(&rect->ass); + rect->ass = final_dialog; + } + + av_bprint_finalize(&buf, NULL); + return 0; +} +#endif + +int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, + int *got_sub_ptr, + AVPacket *avpkt) +{ + int i, ret = 0; + AVCodecInternal *avci = avctx->internal; + + if (!avpkt->data && avpkt->size) { + av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n"); + return AVERROR(EINVAL); + } + 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"); + return AVERROR(EINVAL); + } + + *got_sub_ptr = 0; + get_subtitle_defaults(sub); + + if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) { + AVPacket pkt_recoded; + AVPacket tmp = *avpkt; +#if FF_API_MERGE_SD +FF_DISABLE_DEPRECATION_WARNINGS + int did_split = avci->compat_decode_partial_size ? + ff_packet_split_and_drop_side_data(&tmp) : + av_packet_split_side_data(&tmp); + //apply_param_change(avctx, &tmp); + + if (did_split) { + /* FFMIN() prevents overflow in case the packet wasn't allocated with + * proper padding. + * If the side data is smaller than the buffer padding size, the + * remaining bytes should have already been filled with zeros by the + * original packet allocation anyway. */ + memset(tmp.data + tmp.size, 0, + FFMIN(avpkt->size - tmp.size, AV_INPUT_BUFFER_PADDING_SIZE)); + } +FF_ENABLE_DEPRECATION_WARNINGS +#endif + + pkt_recoded = tmp; + ret = recode_subtitle(avctx, &pkt_recoded, &tmp); + if (ret < 0) { + *got_sub_ptr = 0; + } else { + ret = extract_packet_props(avctx->internal, &pkt_recoded); + if (ret < 0) + return ret; + + if (avctx->pkt_timebase.num && avpkt->pts != AV_NOPTS_VALUE) + sub->pts = av_rescale_q(avpkt->pts, + avctx->pkt_timebase, AV_TIME_BASE_Q); + ret = avctx->codec->decode(avctx, sub, got_sub_ptr, &pkt_recoded); + av_assert1((ret >= 0) >= !!*got_sub_ptr && + !!*got_sub_ptr >= !!sub->num_rects); + +#if FF_API_ASS_TIMING + if (avctx->sub_text_format == FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS + && *got_sub_ptr && sub->num_rects) { + const AVRational tb = avctx->pkt_timebase.num ? avctx->pkt_timebase + : avctx->time_base; + int err = convert_sub_to_old_ass_form(sub, avpkt, tb); + if (err < 0) + ret = err; + } +#endif + + if (sub->num_rects && !sub->end_display_time && avpkt->duration && + avctx->pkt_timebase.num) { + AVRational ms = { 1, 1000 }; + sub->end_display_time = av_rescale_q(avpkt->duration, + avctx->pkt_timebase, ms); + } + + if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) + sub->format = 0; + else if (avctx->codec_descriptor->props & AV_CODEC_PROP_TEXT_SUB) + sub->format = 1; + + for (i = 0; i < sub->num_rects; i++) { + if (sub->rects[i]->ass && !utf8_check(sub->rects[i]->ass)) { + av_log(avctx, AV_LOG_ERROR, + "Invalid UTF-8 in decoded subtitles text; " + "maybe missing -sub_charenc option\n"); + avsubtitle_free(sub); + ret = AVERROR_INVALIDDATA; + break; + } + } + + if (tmp.data != pkt_recoded.data) { // did we recode? + /* prevent from destroying side data from original packet */ + pkt_recoded.side_data = NULL; + pkt_recoded.side_data_elems = 0; + + av_packet_unref(&pkt_recoded); + } + } + +#if FF_API_MERGE_SD + if (did_split) { + av_packet_free_side_data(&tmp); + if(ret == tmp.size) + ret = avpkt->size; + } +#endif + + if (*got_sub_ptr) + avctx->frame_number++; + } + + return ret; +} + +static int is_hwaccel_pix_fmt(enum AVPixelFormat pix_fmt) +{ + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); + return desc->flags & AV_PIX_FMT_FLAG_HWACCEL; +} + +enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat *fmt) +{ + while (*fmt != AV_PIX_FMT_NONE && is_hwaccel_pix_fmt(*fmt)) + ++fmt; + return fmt[0]; +} + +static AVHWAccel *find_hwaccel(enum AVCodecID codec_id, + enum AVPixelFormat pix_fmt) +{ + AVHWAccel *hwaccel = NULL; + + while ((hwaccel = av_hwaccel_next(hwaccel))) + if (hwaccel->id == codec_id + && hwaccel->pix_fmt == pix_fmt) + return hwaccel; + return NULL; +} + +static int setup_hwaccel(AVCodecContext *avctx, + const enum AVPixelFormat fmt, + const char *name) +{ + AVHWAccel *hwa = find_hwaccel(avctx->codec_id, fmt); + int ret = 0; + + if (!hwa) { + av_log(avctx, AV_LOG_ERROR, + "Could not find an AVHWAccel for the pixel format: %s", + name); + return AVERROR(ENOENT); + } + + if (hwa->capabilities & AV_HWACCEL_CODEC_CAP_EXPERIMENTAL && + avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) { + av_log(avctx, AV_LOG_WARNING, "Ignoring experimental hwaccel: %s\n", + hwa->name); + return AVERROR_PATCHWELCOME; + } + + if (hwa->priv_data_size) { + avctx->internal->hwaccel_priv_data = av_mallocz(hwa->priv_data_size); + if (!avctx->internal->hwaccel_priv_data) + return AVERROR(ENOMEM); + } + + avctx->hwaccel = hwa; + if (hwa->init) { + ret = hwa->init(avctx); + if (ret < 0) { + av_freep(&avctx->internal->hwaccel_priv_data); + avctx->hwaccel = NULL; + return ret; + } + } + + return 0; +} + +int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) +{ + const AVPixFmtDescriptor *desc; + enum AVPixelFormat *choices; + enum AVPixelFormat ret; + unsigned n = 0; + + while (fmt[n] != AV_PIX_FMT_NONE) + ++n; + + av_assert0(n >= 1); + avctx->sw_pix_fmt = fmt[n - 1]; + av_assert2(!is_hwaccel_pix_fmt(avctx->sw_pix_fmt)); + + choices = av_malloc_array(n + 1, sizeof(*choices)); + if (!choices) + return AV_PIX_FMT_NONE; + + memcpy(choices, fmt, (n + 1) * sizeof(*choices)); + + for (;;) { + if (avctx->hwaccel && avctx->hwaccel->uninit) + avctx->hwaccel->uninit(avctx); + av_freep(&avctx->internal->hwaccel_priv_data); + avctx->hwaccel = NULL; + + av_buffer_unref(&avctx->hw_frames_ctx); + + ret = avctx->get_format(avctx, choices); + + desc = av_pix_fmt_desc_get(ret); + if (!desc) { + ret = AV_PIX_FMT_NONE; + break; + } + + if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) + break; +#if FF_API_CAP_VDPAU + if (avctx->codec->capabilities&AV_CODEC_CAP_HWACCEL_VDPAU) + break; +#endif + + if (avctx->hw_frames_ctx) { + AVHWFramesContext *hw_frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; + if (hw_frames_ctx->format != ret) { + av_log(avctx, AV_LOG_ERROR, "Format returned from get_buffer() " + "does not match the format of provided AVHWFramesContext\n"); + ret = AV_PIX_FMT_NONE; + break; + } + } + + if (!setup_hwaccel(avctx, ret, desc->name)) + break; + + /* Remove failed hwaccel from choices */ + for (n = 0; choices[n] != ret; n++) + av_assert0(choices[n] != AV_PIX_FMT_NONE); + + do + choices[n] = choices[n + 1]; + while (choices[n++] != AV_PIX_FMT_NONE); + } + + av_freep(&choices); + return ret; +} + +static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) +{ + FramePool *pool = avctx->internal->pool; + int i, ret; + + switch (avctx->codec_type) { + case AVMEDIA_TYPE_VIDEO: { + uint8_t *data[4]; + int linesize[4]; + int size[4] = { 0 }; + int w = frame->width; + int h = frame->height; + int tmpsize, unaligned; + + if (pool->format == frame->format && + pool->width == frame->width && pool->height == frame->height) + return 0; + + avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); + + do { + // NOTE: do not align linesizes individually, this breaks e.g. assumptions + // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 + ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w); + if (ret < 0) + return ret; + // increase alignment of w for next try (rhs gives the lowest bit set in w) + w += w & ~(w - 1); + + unaligned = 0; + for (i = 0; i < 4; i++) + unaligned |= linesize[i] % pool->stride_align[i]; + } while (unaligned); + + tmpsize = av_image_fill_pointers(data, avctx->pix_fmt, h, + NULL, linesize); + if (tmpsize < 0) + return -1; + + for (i = 0; i < 3 && data[i + 1]; i++) + size[i] = data[i + 1] - data[i]; + size[i] = tmpsize - (data[i] - data[0]); + + for (i = 0; i < 4; i++) { + av_buffer_pool_uninit(&pool->pools[i]); + pool->linesize[i] = linesize[i]; + if (size[i]) { + pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1, + CONFIG_MEMORY_POISONING ? + NULL : + av_buffer_allocz); + if (!pool->pools[i]) { + ret = AVERROR(ENOMEM); + goto fail; + } + } + } + pool->format = frame->format; + pool->width = frame->width; + pool->height = frame->height; + + break; + } + case AVMEDIA_TYPE_AUDIO: { + int ch = frame->channels; //av_get_channel_layout_nb_channels(frame->channel_layout); + int planar = av_sample_fmt_is_planar(frame->format); + int planes = planar ? ch : 1; + + if (pool->format == frame->format && pool->planes == planes && + pool->channels == ch && frame->nb_samples == pool->samples) + return 0; + + av_buffer_pool_uninit(&pool->pools[0]); + ret = av_samples_get_buffer_size(&pool->linesize[0], ch, + frame->nb_samples, frame->format, 0); + if (ret < 0) + goto fail; + + pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL); + if (!pool->pools[0]) { + ret = AVERROR(ENOMEM); + goto fail; + } + + pool->format = frame->format; + pool->planes = planes; + pool->channels = ch; + pool->samples = frame->nb_samples; + break; + } + default: av_assert0(0); + } + return 0; +fail: + for (i = 0; i < 4; i++) + av_buffer_pool_uninit(&pool->pools[i]); + pool->format = -1; + pool->planes = pool->channels = pool->samples = 0; + pool->width = pool->height = 0; + return ret; +} + +static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) +{ + FramePool *pool = avctx->internal->pool; + int planes = pool->planes; + int i; + + frame->linesize[0] = pool->linesize[0]; + + if (planes > AV_NUM_DATA_POINTERS) { + frame->extended_data = av_mallocz_array(planes, sizeof(*frame->extended_data)); + frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS; + frame->extended_buf = av_mallocz_array(frame->nb_extended_buf, + sizeof(*frame->extended_buf)); + if (!frame->extended_data || !frame->extended_buf) { + av_freep(&frame->extended_data); + av_freep(&frame->extended_buf); + return AVERROR(ENOMEM); + } + } else { + frame->extended_data = frame->data; + av_assert0(frame->nb_extended_buf == 0); + } + + for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) { + frame->buf[i] = av_buffer_pool_get(pool->pools[0]); + if (!frame->buf[i]) + goto fail; + frame->extended_data[i] = frame->data[i] = frame->buf[i]->data; + } + for (i = 0; i < frame->nb_extended_buf; i++) { + frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]); + if (!frame->extended_buf[i]) + goto fail; + frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data; + } + + if (avctx->debug & FF_DEBUG_BUFFERS) + av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame); + + return 0; +fail: + av_frame_unref(frame); + return AVERROR(ENOMEM); +} + +static int video_get_buffer(AVCodecContext *s, AVFrame *pic) +{ + FramePool *pool = s->internal->pool; + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format); + int i; + + if (pic->data[0] || pic->data[1] || pic->data[2] || pic->data[3]) { + av_log(s, AV_LOG_ERROR, "pic->data[*]!=NULL in avcodec_default_get_buffer\n"); + return -1; + } + + if (!desc) { + av_log(s, AV_LOG_ERROR, + "Unable to get pixel format descriptor for format %s\n", + av_get_pix_fmt_name(pic->format)); + return AVERROR(EINVAL); + } + + memset(pic->data, 0, sizeof(pic->data)); + pic->extended_data = pic->data; + + for (i = 0; i < 4 && pool->pools[i]; i++) { + pic->linesize[i] = pool->linesize[i]; + + pic->buf[i] = av_buffer_pool_get(pool->pools[i]); + if (!pic->buf[i]) + goto fail; + + pic->data[i] = pic->buf[i]->data; + } + for (; i < AV_NUM_DATA_POINTERS; i++) { + pic->data[i] = NULL; + pic->linesize[i] = 0; + } + if (desc->flags & AV_PIX_FMT_FLAG_PAL || + desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) + avpriv_set_systematic_pal2((uint32_t *)pic->data[1], pic->format); + + if (s->debug & FF_DEBUG_BUFFERS) + av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic); + + return 0; +fail: + av_frame_unref(pic); + return AVERROR(ENOMEM); +} + +int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags) +{ + int ret; + + if (avctx->hw_frames_ctx) { + ret = av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0); + frame->width = avctx->coded_width; + frame->height = avctx->coded_height; + return ret; + } + + if ((ret = update_frame_pool(avctx, frame)) < 0) + return ret; + + switch (avctx->codec_type) { + case AVMEDIA_TYPE_VIDEO: + return video_get_buffer(avctx, frame); + case AVMEDIA_TYPE_AUDIO: + return audio_get_buffer(avctx, frame); + default: + return -1; + } +} + +static int add_metadata_from_side_data(const AVPacket *avpkt, AVFrame *frame) +{ + int size; + const uint8_t *side_metadata; + + AVDictionary **frame_md = &frame->metadata; + + side_metadata = av_packet_get_side_data(avpkt, + AV_PKT_DATA_STRINGS_METADATA, &size); + return av_packet_unpack_dictionary(side_metadata, size, frame_md); +} + +int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame) +{ + const AVPacket *pkt = avctx->internal->last_pkt_props; + int i; + static const struct { + enum AVPacketSideDataType packet; + enum AVFrameSideDataType frame; + } sd[] = { + { 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_A53_CC, AV_FRAME_DATA_A53_CC }, + }; + + if (pkt) { + frame->pts = pkt->pts; +#if FF_API_PKT_PTS +FF_DISABLE_DEPRECATION_WARNINGS + frame->pkt_pts = pkt->pts; +FF_ENABLE_DEPRECATION_WARNINGS +#endif + frame->pkt_pos = pkt->pos; + frame->pkt_duration = pkt->duration; + frame->pkt_size = pkt->size; + + for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) { + int size; + uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); + if (packet_sd) { + AVFrameSideData *frame_sd = av_frame_new_side_data(frame, + sd[i].frame, + size); + if (!frame_sd) + return AVERROR(ENOMEM); + + memcpy(frame_sd->data, packet_sd, size); + } + } + add_metadata_from_side_data(pkt, frame); + + if (pkt->flags & AV_PKT_FLAG_DISCARD) { + frame->flags |= AV_FRAME_FLAG_DISCARD; + } else { + frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); + } + } + frame->reordered_opaque = avctx->reordered_opaque; + + if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED) + frame->color_primaries = avctx->color_primaries; + if (frame->color_trc == AVCOL_TRC_UNSPECIFIED) + frame->color_trc = avctx->color_trc; + if (frame->colorspace == AVCOL_SPC_UNSPECIFIED) + frame->colorspace = avctx->colorspace; + if (frame->color_range == AVCOL_RANGE_UNSPECIFIED) + frame->color_range = avctx->color_range; + if (frame->chroma_location == AVCHROMA_LOC_UNSPECIFIED) + frame->chroma_location = avctx->chroma_sample_location; + + switch (avctx->codec->type) { + case AVMEDIA_TYPE_VIDEO: + frame->format = avctx->pix_fmt; + if (!frame->sample_aspect_ratio.num) + frame->sample_aspect_ratio = avctx->sample_aspect_ratio; + + if (frame->width && frame->height && + av_image_check_sar(frame->width, frame->height, + frame->sample_aspect_ratio) < 0) { + av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n", + frame->sample_aspect_ratio.num, + frame->sample_aspect_ratio.den); + frame->sample_aspect_ratio = (AVRational){ 0, 1 }; + } + + break; + case AVMEDIA_TYPE_AUDIO: + if (!frame->sample_rate) + frame->sample_rate = avctx->sample_rate; + if (frame->format < 0) + frame->format = avctx->sample_fmt; + if (!frame->channel_layout) { + if (avctx->channel_layout) { + if (av_get_channel_layout_nb_channels(avctx->channel_layout) != + avctx->channels) { + av_log(avctx, AV_LOG_ERROR, "Inconsistent channel " + "configuration.\n"); + return AVERROR(EINVAL); + } + + frame->channel_layout = avctx->channel_layout; + } else { + if (avctx->channels > FF_SANE_NB_CHANNELS) { + av_log(avctx, AV_LOG_ERROR, "Too many channels: %d.\n", + avctx->channels); + return AVERROR(ENOSYS); + } + } + } + frame->channels = avctx->channels; + break; + } + return 0; +} + +int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) +{ + return ff_init_buffer_info(avctx, frame); +} + +static void validate_avframe_allocation(AVCodecContext *avctx, AVFrame *frame) +{ + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + int i; + int num_planes = av_pix_fmt_count_planes(frame->format); + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); + int flags = desc ? desc->flags : 0; + if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PAL)) + num_planes = 2; + for (i = 0; i < num_planes; i++) { + av_assert0(frame->data[i]); + } + // For now do not enforce anything for palette of pseudopal formats + if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PSEUDOPAL)) + num_planes = 2; + // For formats without data like hwaccel allow unused pointers to be non-NULL. + for (i = num_planes; num_planes > 0 && i < FF_ARRAY_ELEMS(frame->data); i++) { + if (frame->data[i]) + av_log(avctx, AV_LOG_ERROR, "Buffer returned by get_buffer2() did not zero unused plane pointers\n"); + frame->data[i] = NULL; + } + } +} + +static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags) +{ + const AVHWAccel *hwaccel = avctx->hwaccel; + int override_dimensions = 1; + int ret; + + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { + if ((ret = av_image_check_size2(avctx->width, avctx->height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx)) < 0 || avctx->pix_fmt<0) { + av_log(avctx, AV_LOG_ERROR, "video_get_buffer: image parameters invalid\n"); + return AVERROR(EINVAL); + } + + if (frame->width <= 0 || frame->height <= 0) { + frame->width = FFMAX(avctx->width, AV_CEIL_RSHIFT(avctx->coded_width, avctx->lowres)); + frame->height = FFMAX(avctx->height, AV_CEIL_RSHIFT(avctx->coded_height, avctx->lowres)); + override_dimensions = 0; + } + + if (frame->data[0] || frame->data[1] || frame->data[2] || frame->data[3]) { + av_log(avctx, AV_LOG_ERROR, "pic->data[*]!=NULL in get_buffer_internal\n"); + return AVERROR(EINVAL); + } + } + ret = ff_decode_frame_props(avctx, frame); + if (ret < 0) + return ret; + + if (hwaccel) { + if (hwaccel->alloc_frame) { + ret = hwaccel->alloc_frame(avctx, frame); + goto end; + } + } else + avctx->sw_pix_fmt = avctx->pix_fmt; + + ret = avctx->get_buffer2(avctx, frame, flags); + if (ret >= 0) + validate_avframe_allocation(avctx, frame); + +end: + if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions && + !(avctx->codec->caps_internal & FF_CODEC_CAP_EXPORTS_CROPPING)) { + frame->width = avctx->width; + frame->height = avctx->height; + } + + return ret; +} + +int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags) +{ + int ret = get_buffer_internal(avctx, frame, flags); + if (ret < 0) { + av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); + frame->width = frame->height = 0; + } + return ret; +} + +static int reget_buffer_internal(AVCodecContext *avctx, AVFrame *frame) +{ + AVFrame *tmp; + int ret; + + av_assert0(avctx->codec_type == AVMEDIA_TYPE_VIDEO); + + if (frame->data[0] && (frame->width != avctx->width || frame->height != avctx->height || frame->format != avctx->pix_fmt)) { + av_log(avctx, AV_LOG_WARNING, "Picture changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s in reget buffer()\n", + frame->width, frame->height, av_get_pix_fmt_name(frame->format), avctx->width, avctx->height, av_get_pix_fmt_name(avctx->pix_fmt)); + av_frame_unref(frame); + } + + ff_init_buffer_info(avctx, frame); + + if (!frame->data[0]) + return ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF); + + if (av_frame_is_writable(frame)) + return ff_decode_frame_props(avctx, frame); + + tmp = av_frame_alloc(); + if (!tmp) + return AVERROR(ENOMEM); + + av_frame_move_ref(tmp, frame); + + ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF); + if (ret < 0) { + av_frame_free(&tmp); + return ret; + } + + av_frame_copy(frame, tmp); + av_frame_free(&tmp); + + return 0; +} + +int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame) +{ + int ret = reget_buffer_internal(avctx, frame); + if (ret < 0) + av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n"); + return ret; +} + +void avcodec_flush_buffers(AVCodecContext *avctx) +{ + avctx->internal->draining = 0; + avctx->internal->draining_done = 0; + avctx->internal->nb_draining_errors = 0; + av_frame_unref(avctx->internal->buffer_frame); + av_frame_unref(avctx->internal->compat_decode_frame); + av_packet_unref(avctx->internal->buffer_pkt); + avctx->internal->buffer_pkt_valid = 0; + + av_packet_unref(avctx->internal->ds.in_pkt); + + if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) + ff_thread_flush(avctx); + else if (avctx->codec->flush) + avctx->codec->flush(avctx); + + avctx->pts_correction_last_pts = + avctx->pts_correction_last_dts = INT64_MIN; + + ff_decode_bsfs_uninit(avctx); + + if (!avctx->refcounted_frames) + av_frame_unref(avctx->internal->to_free); +} + +void ff_decode_bsfs_uninit(AVCodecContext *avctx) +{ + DecodeFilterContext *s = &avctx->internal->filter; + int i; + + for (i = 0; i < s->nb_bsfs; i++) + av_bsf_free(&s->bsfs[i]); + av_freep(&s->bsfs); + s->nb_bsfs = 0; +} diff --git a/media/ffvpx/libavcodec/decode.h b/media/ffvpx/libavcodec/decode.h new file mode 100644 index 000000000000..c9630228dc5f --- /dev/null +++ b/media/ffvpx/libavcodec/decode.h @@ -0,0 +1,39 @@ +/* + * generic decoding-related code + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * 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_DECODE_H +#define AVCODEC_DECODE_H + +#include "avcodec.h" + +/** + * Called by decoders to get the next packet for decoding. + * + * @param pkt An empty packet to be filled with data. + * @return 0 if a new reference has been successfully written to pkt + * AVERROR(EAGAIN) if no data is currently available + * AVERROR_EOF if and end of stream has been reached, so no more data + * will be available + */ +int ff_decode_get_packet(AVCodecContext *avctx, AVPacket *pkt); + +void ff_decode_bsfs_uninit(AVCodecContext *avctx); + +#endif /* AVCODEC_DECODE_H */ diff --git a/media/ffvpx/libavcodec/dummy_funcs.c b/media/ffvpx/libavcodec/dummy_funcs.c index 200e1d266dda..c7b686148621 100644 --- a/media/ffvpx/libavcodec/dummy_funcs.c +++ b/media/ffvpx/libavcodec/dummy_funcs.c @@ -73,6 +73,16 @@ AVHWAccel ff_hevc_mediacodec_hwaccel; AVHWAccel ff_mpeg4_mediacodec_hwaccel; AVHWAccel ff_vp8_mediacodec_hwaccel; AVHWAccel ff_vp9_mediacodec_hwaccel; +/* Added by FFmpeg 3.4 */ +AVHWAccel ff_h264_d3d11va2_hwaccel; +AVHWAccel ff_hevc_d3d11va2_hwaccel; +AVHWAccel ff_hevc_videotoolbox_hwaccel; +AVHWAccel ff_mpeg2_d3d11va2_hwaccel; +AVHWAccel ff_mpeg2_mediacodec_hwaccel; +AVHWAccel ff_vc1_d3d11va2_hwaccel; +AVHWAccel ff_vp8_qsv_hwaccel; +AVHWAccel ff_vp9_d3d11va2_hwaccel; +AVHWAccel ff_wmv3_d3d11va2_hwaccel; AVCodec ff_a64multi_encoder; AVCodec ff_a64multi5_encoder; @@ -741,6 +751,55 @@ AVCodec ff_pcm_s64be_decoder; AVCodec ff_pcm_s64be_encoder; AVCodec ff_truehd_encoder; AVCodec ff_mlp_encoder; +/* Added by FFmpeg 3.4 */ +AVCodec ff_clearvideo_decoder; +AVCodec ff_fits_encoder; +AVCodec ff_fits_decoder; +AVCodec ff_fmvc_decoder; +AVCodec ff_gdv_decoder; +AVCodec ff_h263_v4l2m2m_decoder; +AVCodec ff_h264_v4l2m2m_decoder; +AVCodec ff_h264_rkmpp_decoder; +AVCodec ff_hevc_rkmpp_decoder; +AVCodec ff_hevc_v4l2m2m_decoder; +AVCodec ff_mpeg4_v4l2m2m_decoder; +AVCodec ff_mpeg1_v4l2m2m_decoder; +AVCodec ff_mpeg2_v4l2m2m_decoder; +AVCodec ff_mpeg2_mediacodec_decoder; +AVCodec ff_mscc_decoder; +AVCodec ff_pixlet_decoder; +AVCodec ff_psd_decoder; +AVCodec ff_scpr_decoder; +AVCodec ff_speedhq_decoder; +AVCodec ff_srgc_decoder; +AVCodec ff_vc1_v4l2m2m_decoder; +AVCodec ff_vp8_rkmpp_decoder; +AVCodec ff_vp8_v4l2m2m_decoder; +AVCodec ff_vp9_rkmpp_decoder; +AVCodec ff_vp9_v4l2m2m_decoder; +AVCodec ff_bitpacked_decoder; +AVCodec ff_wrapped_avframe_decoder; +AVCodec ff_xpm_decoder; +AVCodec ff_atrac3al_decoder; +AVCodec ff_atrac3pal_decoder; +AVCodec ff_dolby_e_decoder; +AVCodec ff_opus_encoder; +AVCodec ff_qdmc_decoder; +AVCodec ff_pcm_f16le_decoder; +AVCodec ff_pcm_f24le_decoder; +AVCodec ff_gremlin_dpcm_decoder; +AVCodec ff_adpcm_g726le_encoder; +AVCodec ff_librsvg_decoder; +AVCodec ff_h263_v4l2m2m_encoder; +AVCodec ff_h264_v4l2m2m_encoder; +AVCodec ff_hevc_v4l2m2m_encoder; +AVCodec ff_mpeg2_vaapi_encoder; +AVCodec ff_mpeg4_v4l2m2m_encoder; +AVCodec ff_vp8_qsv_decoder; +AVCodec ff_vp8_v4l2m2m_encoder; +AVCodec ff_vp8_vaapi_encoder; +AVCodec ff_vp9_vaapi_encoder; + AVCodecParser ff_aac_parser; AVCodecParser ff_aac_latm_parser; @@ -777,6 +836,10 @@ AVCodecParser ff_tak_parser; AVCodecParser ff_vc1_parser; AVCodecParser ff_vorbis_parser; AVCodecParser ff_vp3_parser; +/* Added by FFmpeg 3.4 */ +AVCodecParser ff_sipr_parser; +AVCodecParser ff_xma_parser; + AVBitStreamFilter ff_aac_adtstoasc_bsf; AVBitStreamFilter ff_chomp_bsf; AVBitStreamFilter ff_dump_extradata_bsf; @@ -806,12 +869,15 @@ int ff_thread_video_encode_frame(AVCodecContext *avctx, AVPacket *pkt, const AVF void ff_videodsp_init_aarch64(VideoDSPContext *ctx, int bpc) {} void ff_videodsp_init_arm(VideoDSPContext *ctx, int bpc) {} void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc) {} +void ff_videodsp_init_mips(VideoDSPContext *ctx, int bpc) {} void ff_vp7dsp_init(VP8DSPContext *c) {} void ff_vp78dsp_init_arm(VP8DSPContext *c) {} void ff_vp78dsp_init_ppc(VP8DSPContext *c) {} void ff_vp8dsp_init_arm(VP8DSPContext *c) {} void ff_vp8dsp_init_mips(VP8DSPContext *c) {} void ff_vp9dsp_init_mips(VP9DSPContext *dsp, int bpp) {} +void ff_vp9dsp_init_aarch64(VP9DSPContext *dsp, int bpp) {} +void ff_vp9dsp_init_arm(VP9DSPContext *dsp, int bpp) {} void ff_flacdsp_init_arm(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps) {} #if !defined(HAVE_64BIT_BUILD) void ff_flac_decorrelate_indep8_16_sse2(uint8_t **out, int32_t **in, int channels, int len, int shift) {} @@ -819,11 +885,3 @@ void ff_flac_decorrelate_indep8_32_avx(uint8_t **out, int32_t **in, int channels void ff_flac_decorrelate_indep8_16_avx(uint8_t **out, int32_t **in, int channels, int len, int shift) {} void ff_flac_decorrelate_indep8_32_sse2(uint8_t **out, int32_t **in, int channels, int len, int shift) {} #endif -void av_bitstream_filter_close(AVBitStreamFilterContext *bsf) {} -int av_bitstream_filter_filter(AVBitStreamFilterContext *bsfc, - AVCodecContext *avctx, const char *args, - uint8_t **poutbuf, int *poutbuf_size, - const uint8_t *buf, int buf_size, int keyframe) { return 0; } -AVBitStreamFilterContext *av_bitstream_filter_init(const char *name) { return NULL;} -AVBitStreamFilter *av_bitstream_filter_next(const AVBitStreamFilter *f) { return NULL; } -void av_register_bitstream_filter(AVBitStreamFilter *bsf) {} diff --git a/media/ffvpx/libavcodec/error_resilience.h b/media/ffvpx/libavcodec/error_resilience.h index d444ec3a3cfb..27c20086948e 100644 --- a/media/ffvpx/libavcodec/error_resilience.h +++ b/media/ffvpx/libavcodec/error_resilience.h @@ -57,8 +57,8 @@ typedef struct ERContext { int *mb_index2xy; int mb_num; int mb_width, mb_height; - int mb_stride; - int b8_stride; + ptrdiff_t mb_stride; + ptrdiff_t b8_stride; volatile int error_count; int error_occurred; diff --git a/media/ffvpx/libavcodec/flac.c b/media/ffvpx/libavcodec/flac.c index f5154b9149dd..5ffbf93190e2 100644 --- a/media/ffvpx/libavcodec/flac.c +++ b/media/ffvpx/libavcodec/flac.c @@ -201,7 +201,7 @@ void ff_flac_set_channel_layout(AVCodecContext *avctx) avctx->channel_layout = 0; } -void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, +int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, const uint8_t *buffer) { GetBitContext gb; @@ -213,6 +213,7 @@ void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, av_log(avctx, AV_LOG_WARNING, "invalid max blocksize: %d\n", s->max_blocksize); s->max_blocksize = 16; + return AVERROR_INVALIDDATA; } skip_bits(&gb, 24); /* skip min frame size */ @@ -222,6 +223,12 @@ void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, s->channels = get_bits(&gb, 3) + 1; s->bps = get_bits(&gb, 5) + 1; + if (s->bps < 4) { + av_log(avctx, AV_LOG_ERROR, "invalid bps: %d\n", s->bps); + s->bps = 16; + return AVERROR_INVALIDDATA; + } + avctx->channels = s->channels; avctx->sample_rate = s->samplerate; avctx->bits_per_raw_sample = s->bps; @@ -234,4 +241,6 @@ void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, skip_bits_long(&gb, 64); /* md5 sum */ skip_bits_long(&gb, 64); /* md5 sum */ + + return 0; } diff --git a/media/ffvpx/libavcodec/flac.h b/media/ffvpx/libavcodec/flac.h index 96d971c9d7ef..991ab43f3cc3 100644 --- a/media/ffvpx/libavcodec/flac.h +++ b/media/ffvpx/libavcodec/flac.h @@ -95,8 +95,10 @@ typedef struct FLACFrameInfo { * @param[out] avctx codec context to set basic stream parameters * @param[out] s where parsed information is stored * @param[in] buffer pointer to start of 34-byte streaminfo data + * + * @return negative error code on faiure or >= 0 on success */ -void ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, +int ff_flac_parse_streaminfo(AVCodecContext *avctx, struct FLACStreaminfo *s, const uint8_t *buffer); /** diff --git a/media/ffvpx/libavcodec/flac_parser.c b/media/ffvpx/libavcodec/flac_parser.c index f5cc35a4f2d4..84da23f327e1 100644 --- a/media/ffvpx/libavcodec/flac_parser.c +++ b/media/ffvpx/libavcodec/flac_parser.c @@ -586,10 +586,12 @@ static int flac_parse(AVCodecParserContext *s, AVCodecContext *avctx, temp = curr->next; av_freep(&curr->link_penalty); av_free(curr); + fpc->nb_headers_buffered--; } fpc->headers = fpc->best_header->next; av_freep(&fpc->best_header->link_penalty); av_freep(&fpc->best_header); + fpc->nb_headers_buffered--; } /* Find and score new headers. */ @@ -638,7 +640,7 @@ static int flac_parse(AVCodecParserContext *s, AVCodecContext *avctx, read_end - read_start, NULL); } else { int8_t pad[MAX_FRAME_HEADER_SIZE] = { 0 }; - av_fifo_generic_write(fpc->fifo_buf, (void*) pad, sizeof(pad), NULL); + av_fifo_generic_write(fpc->fifo_buf, pad, sizeof(pad), NULL); } /* Tag headers and update sequences. */ diff --git a/media/ffvpx/libavcodec/flacdec.c b/media/ffvpx/libavcodec/flacdec.c index b7237e18f042..581c73efc806 100644 --- a/media/ffvpx/libavcodec/flacdec.c +++ b/media/ffvpx/libavcodec/flacdec.c @@ -109,7 +109,9 @@ static av_cold int flac_decode_init(AVCodecContext *avctx) return AVERROR_INVALIDDATA; /* initialize based on the demuxer-supplied streamdata header */ - ff_flac_parse_streaminfo(avctx, &s->flac_stream_info, streaminfo); + ret = ff_flac_parse_streaminfo(avctx, &s->flac_stream_info, streaminfo); + if (ret < 0) + return ret; ret = allocate_buffers(s); if (ret < 0) return ret; @@ -175,7 +177,9 @@ static int parse_streaminfo(FLACContext *s, const uint8_t *buf, int buf_size) metadata_size != FLAC_STREAMINFO_SIZE) { return AVERROR_INVALIDDATA; } - ff_flac_parse_streaminfo(s->avctx, &s->flac_stream_info, &buf[8]); + ret = ff_flac_parse_streaminfo(s->avctx, &s->flac_stream_info, &buf[8]); + if (ret < 0) + return ret; ret = allocate_buffers(s); if (ret < 0) return ret; @@ -201,12 +205,12 @@ static int get_metadata_size(const uint8_t *buf, int buf_size) buf += 4; do { if (buf_end - buf < 4) - return 0; + return AVERROR_INVALIDDATA; flac_parse_block_header(buf, &metadata_last, NULL, &metadata_size); buf += 4; if (buf_end - buf < metadata_size) { /* need more data in order to read the complete header */ - return 0; + return AVERROR_INVALIDDATA; } buf += metadata_size; } while (!metadata_last); @@ -254,8 +258,15 @@ static int decode_residuals(FLACContext *s, int32_t *decoded, int pred_order) for (; i < samples; i++) *decoded++ = get_sbits_long(&s->gb, tmp); } else { + int real_limit = tmp ? (INT_MAX >> tmp) + 2 : INT_MAX; for (; i < samples; i++) { - *decoded++ = get_sr_golomb_flac(&s->gb, tmp, INT_MAX, 0); + int v = get_sr_golomb_flac(&s->gb, tmp, real_limit, 0); + if (v == 0x80000000){ + av_log(s->avctx, AV_LOG_ERROR, "invalid residual\n"); + return AVERROR_INVALIDDATA; + } + + *decoded++ = v; } } i= 0; @@ -268,7 +279,8 @@ static int decode_subframe_fixed(FLACContext *s, int32_t *decoded, int pred_order, int bps) { const int blocksize = s->blocksize; - int av_uninit(a), av_uninit(b), av_uninit(c), av_uninit(d), i; + unsigned av_uninit(a), av_uninit(b), av_uninit(c), av_uninit(d); + int i; int ret; /* warm up samples */ @@ -315,7 +327,7 @@ static int decode_subframe_fixed(FLACContext *s, int32_t *decoded, return 0; } -static void lpc_analyze_remodulate(int32_t *decoded, const int coeffs[32], +static void lpc_analyze_remodulate(SUINT32 *decoded, const int coeffs[32], int order, int qlevel, int len, int bps) { int i, j; @@ -331,7 +343,7 @@ static void lpc_analyze_remodulate(int32_t *decoded, const int coeffs[32], for (i = len - 1; i >= order; i--) { int64_t p = 0; for (j = 0; j < order; j++) - p += coeffs[j] * (int64_t)decoded[i-order+j]; + p += coeffs[j] * (int64_t)(int32_t)decoded[i-order+j]; decoded[i] -= p >> qlevel; } for (i = order; i < len; i++, decoded++) { @@ -447,7 +459,7 @@ static inline int decode_subframe(FLACContext *s, int channel) if (wasted) { int i; for (i = 0; i < s->blocksize; i++) - decoded[i] <<= wasted; + decoded[i] = (unsigned)decoded[i] << wasted; } return 0; diff --git a/media/ffvpx/libavcodec/flacdsp.c b/media/ffvpx/libavcodec/flacdsp.c index 30b66484e874..bc9a5dbed916 100644 --- a/media/ffvpx/libavcodec/flacdsp.c +++ b/media/ffvpx/libavcodec/flacdsp.c @@ -49,8 +49,8 @@ static void flac_lpc_16_c(int32_t *decoded, const int coeffs[32], int i, j; for (i = pred_order; i < len - 1; i += 2, decoded += 2) { - int c = coeffs[0]; - int d = decoded[0]; + SUINT c = coeffs[0]; + SUINT d = decoded[0]; int s0 = 0, s1 = 0; for (j = 1; j < pred_order; j++) { s0 += c*d; @@ -59,15 +59,15 @@ static void flac_lpc_16_c(int32_t *decoded, const int coeffs[32], c = coeffs[j]; } s0 += c*d; - d = decoded[j] += s0 >> qlevel; + d = decoded[j] += (SUINT)(s0 >> qlevel); s1 += c*d; - decoded[j + 1] += s1 >> qlevel; + decoded[j + 1] += (SUINT)(s1 >> qlevel); } if (i < len) { int sum = 0; for (j = 0; j < pred_order; j++) - sum += coeffs[j] * decoded[j]; - decoded[j] += sum >> qlevel; + sum += coeffs[j] * (SUINT)decoded[j]; + decoded[j] = decoded[j] + (unsigned)(sum >> qlevel); } } diff --git a/media/ffvpx/libavcodec/flacdsp.h b/media/ffvpx/libavcodec/flacdsp.h index f5cbd9472468..7bb0dd0e9a2e 100644 --- a/media/ffvpx/libavcodec/flacdsp.h +++ b/media/ffvpx/libavcodec/flacdsp.h @@ -20,6 +20,7 @@ #define AVCODEC_FLACDSP_H #include +#include "libavutil/internal.h" #include "libavutil/samplefmt.h" typedef struct FLACDSPContext { diff --git a/media/ffvpx/libavcodec/flacdsp_template.c b/media/ffvpx/libavcodec/flacdsp_template.c index 62c0a15ff613..776c78da7195 100644 --- a/media/ffvpx/libavcodec/flacdsp_template.c +++ b/media/ffvpx/libavcodec/flacdsp_template.c @@ -56,7 +56,7 @@ static void FUNC(flac_decorrelate_indep_c)(uint8_t **out, int32_t **in, for (j = 0; j < len; j++) for (i = 0; i < channels; i++) - S(samples, i, j) = in[i][j] << shift; + S(samples, i, j) = (int)((unsigned)in[i][j] << shift); } static void FUNC(flac_decorrelate_ls_c)(uint8_t **out, int32_t **in, diff --git a/media/ffvpx/libavcodec/get_bits.h b/media/ffvpx/libavcodec/get_bits.h index 0f183e035835..c530015169e1 100644 --- a/media/ffvpx/libavcodec/get_bits.h +++ b/media/ffvpx/libavcodec/get_bits.h @@ -229,6 +229,20 @@ static inline int get_xbits(GetBitContext *s, int n) return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; } +static inline int get_xbits_le(GetBitContext *s, int n) +{ + register int sign; + register int32_t cache; + OPEN_READER(re, s); + av_assert2(n>0 && n<=25); + UPDATE_CACHE_LE(re, s); + cache = GET_CACHE(re, s); + sign = sign_extend(~cache, n) >> 31; + LAST_SKIP_BITS(re, s, n); + CLOSE_READER(re, s); + return (zero_extend(sign ^ cache, n) ^ sign) - sign; +} + static inline int get_sbits(GetBitContext *s, int n) { register int tmp; @@ -331,6 +345,7 @@ static inline void skip_bits1(GetBitContext *s) */ static inline unsigned int get_bits_long(GetBitContext *s, int n) { + av_assert2(n>=0 && n<=32); if (!n) { return 0; } else if (n <= MIN_CACHE_BITS) { @@ -369,6 +384,10 @@ static inline uint64_t get_bits64(GetBitContext *s, int n) */ static inline int get_sbits_long(GetBitContext *s, int n) { + // sign_extend(x, 0) is undefined + if (!n) + return 0; + return sign_extend(get_bits_long(s, n), n); } diff --git a/media/ffvpx/libavcodec/golomb.h b/media/ffvpx/libavcodec/golomb.h index 917ea54e1457..efb1eff8aa49 100644 --- a/media/ffvpx/libavcodec/golomb.h +++ b/media/ffvpx/libavcodec/golomb.h @@ -314,6 +314,8 @@ static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, log = av_log2(buf); + av_assert2(k <= 31); + if (log - k >= 32 - MIN_CACHE_BITS + (MIN_CACHE_BITS == 32) && 32 - log < limit) { buf >>= log - k; @@ -325,8 +327,10 @@ static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, } else { int i; for (i = 0; i < limit && SHOW_UBITS(re, gb, 1) == 0; i++) { - if (gb->size_in_bits <= re_index) + if (gb->size_in_bits <= re_index) { + CLOSE_READER(re, gb); return -1; + } LAST_SKIP_BITS(re, gb, 1); UPDATE_CACHE(re, gb); } @@ -348,16 +352,17 @@ static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, buf = 0; } - CLOSE_READER(re, gb); - return buf + (i << k); + buf += ((SUINT)i << k); } else if (i == limit - 1) { buf = SHOW_UBITS(re, gb, esc_len); LAST_SKIP_BITS(re, gb, esc_len); - CLOSE_READER(re, gb); - return buf + 1; - } else - return -1; + buf ++; + } else { + buf = -1; + } + CLOSE_READER(re, gb); + return buf; } } @@ -445,19 +450,20 @@ static inline int get_te(GetBitContext *s, int r, char *file, const char *func, return i; } -#define get_ue_golomb(a) get_ue(a, __FILE__, __PRETTY_FUNCTION__, __LINE__) -#define get_se_golomb(a) get_se(a, __FILE__, __PRETTY_FUNCTION__, __LINE__) -#define get_te_golomb(a, r) get_te(a, r, __FILE__, __PRETTY_FUNCTION__, __LINE__) -#define get_te0_golomb(a, r) get_te(a, r, __FILE__, __PRETTY_FUNCTION__, __LINE__) +#define get_ue_golomb(a) get_ue(a, __FILE__, __func__, __LINE__) +#define get_se_golomb(a) get_se(a, __FILE__, __func__, __LINE__) +#define get_te_golomb(a, r) get_te(a, r, __FILE__, __func__, __LINE__) +#define get_te0_golomb(a, r) get_te(a, r, __FILE__, __func__, __LINE__) #endif /* TRACE */ /** - * write unsigned exp golomb code. + * write unsigned exp golomb code. 2^16 - 2 at most */ static inline void set_ue_golomb(PutBitContext *pb, int i) { av_assert2(i >= 0); + av_assert2(i <= 0xFFFE); if (i < 256) put_bits(pb, ff_ue_golomb_len[i], i + 1); @@ -467,6 +473,21 @@ static inline void set_ue_golomb(PutBitContext *pb, int i) } } +/** + * write unsigned exp golomb code. 2^32-2 at most. + */ +static inline void set_ue_golomb_long(PutBitContext *pb, uint32_t i) +{ + av_assert2(i <= (UINT32_MAX - 1)); + + if (i < 256) + put_bits(pb, ff_ue_golomb_len[i], i + 1); + else { + int e = av_log2(i + 1); + put_bits64(pb, 2 * e + 1, i + 1); + } +} + /** * write truncated unsigned exp golomb code. */ @@ -486,19 +507,9 @@ static inline void set_te_golomb(PutBitContext *pb, int i, int range) */ static inline void set_se_golomb(PutBitContext *pb, int i) { -#if 0 - if (i <= 0) - i = -2 * i; - else - i = 2 * i - 1; -#elif 1 i = 2 * i - 1; if (i < 0) i ^= -1; //FIXME check if gcc does the right thing -#else - i = 2 * i - 1; - i ^= (i >> 31); -#endif set_ue_golomb(pb, i); } diff --git a/media/ffvpx/libavcodec/h264chroma.h b/media/ffvpx/libavcodec/h264chroma.h index e0f45ad13bdf..5c89fd12df61 100644 --- a/media/ffvpx/libavcodec/h264chroma.h +++ b/media/ffvpx/libavcodec/h264chroma.h @@ -19,9 +19,10 @@ #ifndef AVCODEC_H264CHROMA_H #define AVCODEC_H264CHROMA_H +#include #include -typedef void (*h264_chroma_mc_func)(uint8_t *dst/*align 8*/, uint8_t *src/*align 1*/, int srcStride, int h, int x, int y); +typedef void (*h264_chroma_mc_func)(uint8_t *dst /*align 8*/, uint8_t *src /*align 1*/, ptrdiff_t srcStride, int h, int x, int y); typedef struct H264ChromaContext { h264_chroma_mc_func put_h264_chroma_pixels_tab[4]; diff --git a/media/ffvpx/libavcodec/hpeldsp.h b/media/ffvpx/libavcodec/hpeldsp.h index 1a3cea54b885..768139bfc96e 100644 --- a/media/ffvpx/libavcodec/hpeldsp.h +++ b/media/ffvpx/libavcodec/hpeldsp.h @@ -76,6 +76,8 @@ typedef struct HpelDSPContext { * @param pixels source * @param line_size number of bytes in a horizontal line of block * @param h height + * @note The size is kept at [4][4] to match the above pixel_tabs and avoid + * out of bounds reads in the motion estimation code. */ op_pixels_func put_no_rnd_pixels_tab[4][4]; diff --git a/media/ffvpx/libavcodec/hwaccel.h b/media/ffvpx/libavcodec/hwaccel.h new file mode 100644 index 000000000000..124fbbf1fdf6 --- /dev/null +++ b/media/ffvpx/libavcodec/hwaccel.h @@ -0,0 +1,24 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * 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 + +#define HWACCEL_CAP_ASYNC_SAFE (1 << 0) + +#endif /* AVCODEC_HWACCEL_H */ diff --git a/media/ffvpx/libavcodec/idctdsp.h b/media/ffvpx/libavcodec/idctdsp.h index b180a6762a7e..26221f6a9dee 100644 --- a/media/ffvpx/libavcodec/idctdsp.h +++ b/media/ffvpx/libavcodec/idctdsp.h @@ -21,6 +21,8 @@ #include +#include "config.h" + #include "avcodec.h" /** @@ -51,13 +53,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 *pixels /* align 8 */, + uint8_t *av_restrict pixels /* align 8 */, ptrdiff_t line_size); void (*put_signed_pixels_clamped)(const int16_t *block /* align 16 */, - uint8_t *pixels /* align 8 */, + uint8_t *av_restrict pixels /* align 8 */, ptrdiff_t line_size); void (*add_pixels_clamped)(const int16_t *block /* align 16 */, - uint8_t *pixels /* align 8 */, + uint8_t *av_restrict pixels /* align 8 */, ptrdiff_t line_size); void (*idct)(int16_t *block /* align 16 */); @@ -68,14 +70,14 @@ typedef struct IDCTDSPContext { * @param line_size size in bytes of a horizontal line of dest */ void (*idct_put)(uint8_t *dest /* align 8 */, - int line_size, int16_t *block /* align 16 */); + ptrdiff_t line_size, int16_t *block /* align 16 */); /** * block -> idct -> add dest -> clip to unsigned 8 bit -> dest. * @param line_size size in bytes of a horizontal line of dest */ void (*idct_add)(uint8_t *dest /* align 8 */, - int line_size, int16_t *block /* align 16 */); + ptrdiff_t line_size, int16_t *block /* align 16 */); /** * IDCT input permutation. @@ -95,11 +97,15 @@ typedef struct IDCTDSPContext { enum idct_permutation_type perm_type; } IDCTDSPContext; -extern void (*ff_put_pixels_clamped)(const int16_t *block, uint8_t *pixels, ptrdiff_t line_size); -extern void (*ff_add_pixels_clamped)(const int16_t *block, uint8_t *pixels, ptrdiff_t line_size); +void ff_put_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, + ptrdiff_t line_size); +void ff_add_pixels_clamped_c(const int16_t *block, uint8_t *av_restrict pixels, + ptrdiff_t line_size); void ff_idctdsp_init(IDCTDSPContext *c, AVCodecContext *avctx); +void ff_idctdsp_init_aarch64(IDCTDSPContext *c, AVCodecContext *avctx, + unsigned high_bit_depth); void ff_idctdsp_init_alpha(IDCTDSPContext *c, AVCodecContext *avctx, unsigned high_bit_depth); void ff_idctdsp_init_arm(IDCTDSPContext *c, AVCodecContext *avctx, diff --git a/media/ffvpx/libavcodec/internal.h b/media/ffvpx/libavcodec/internal.h index 35b9630b52b7..faa923c11f27 100644 --- a/media/ffvpx/libavcodec/internal.h +++ b/media/ffvpx/libavcodec/internal.h @@ -48,8 +48,8 @@ #define FF_CODEC_CAP_INIT_CLEANUP (1 << 1) /** * Decoders marked with FF_CODEC_CAP_SETS_PKT_DTS want to set - * AVFrame.pkt_dts manually. If the flag is set, utils.c won't overwrite - * this field. If it's unset, utils.c tries to guess the pkt_dts field + * AVFrame.pkt_dts manually. If the flag is set, decode.c won't overwrite + * this field. If it's unset, decode.c tries to guess the pkt_dts field * from the input AVPacket. */ #define FF_CODEC_CAP_SETS_PKT_DTS (1 << 2) @@ -58,6 +58,16 @@ * skipped due to the skip_frame setting. */ #define FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM (1 << 3) +/** + * The decoder sets the cropping fields in the output frames manually. + * If this cap is set, the generic code will initialize output frame + * dimensions to coded rather than display values. + */ +#define FF_CODEC_CAP_EXPORTS_CROPPING (1 << 4) +/** + * Codec initializes slice-based threading with a main function + */ +#define FF_CODEC_CAP_SLICE_THREAD_HAS_MF (1 << 5) #ifdef TRACE # define ff_tlog(ctx, ...) av_log(ctx, AV_LOG_TRACE, __VA_ARGS__) @@ -70,11 +80,18 @@ #define FF_DEFAULT_QUANT_BIAS 999999 #endif +#if !FF_API_QSCALE_TYPE +#define FF_QSCALE_TYPE_MPEG1 0 +#define FF_QSCALE_TYPE_MPEG2 1 +#define FF_QSCALE_TYPE_H264 2 +#define FF_QSCALE_TYPE_VP56 3 +#endif + #define FF_SANE_NB_CHANNELS 64U #define FF_SIGNBIT(x) ((x) >> CHAR_BIT * sizeof(x) - 1) -#if HAVE_AVX +#if HAVE_SIMD_ALIGN_32 # define STRIDE_ALIGN 32 #elif HAVE_SIMD_ALIGN_16 # define STRIDE_ALIGN 16 @@ -101,6 +118,16 @@ typedef struct FramePool { int samples; } FramePool; +typedef struct DecodeSimpleContext { + AVPacket *in_pkt; + AVFrame *out_frame; +} DecodeSimpleContext; + +typedef struct DecodeFilterContext { + AVBSFContext **bsfs; + int nb_bsfs; +} DecodeFilterContext; + typedef struct AVCodecInternal { /** * Whether the parent AVCodecContext is a copy of the context which had @@ -137,11 +164,14 @@ typedef struct AVCodecInternal { void *thread_ctx; + DecodeSimpleContext ds; + DecodeFilterContext filter; + /** - * Current packet as passed into the decoder, to avoid having to pass the - * packet into every function. + * Properties (timestamps+side data) extracted from the last packet passed + * for decoding. */ - AVPacket *pkt; + AVPacket *last_pkt_props; /** * temporary buffer used for encoders to store their bitstream @@ -173,7 +203,23 @@ typedef struct AVCodecInternal { int buffer_pkt_valid; // encoding: packet without data can be valid AVFrame *buffer_frame; int draining_done; + /* set to 1 when the caller is using the old decoding API */ + int compat_decode; + int compat_decode_warned; + /* this variable is set by the decoder internals to signal to the old + * API compat wrappers the amount of data consumed from the last packet */ + size_t compat_decode_consumed; + /* when a partial packet has been consumed, this stores the remaining size + * of the packet (that should be submitted in the next decode call */ + size_t compat_decode_partial_size; + AVFrame *compat_decode_frame; + int showed_multi_packet_warning; + + int skip_samples_multiplier; + + /* to prevent infinite loop on errors when draining */ + int nb_draining_errors; } AVCodecInternal; struct AVCodecDefault { @@ -262,7 +308,7 @@ static av_always_inline int64_t ff_samples_to_time_base(AVCodecContext *avctx, static av_always_inline float ff_exp2fi(int x) { /* Normal range */ if (-126 <= x && x <= 128) - return av_int2float(x+127 << 23); + return av_int2float((x+127) << 23); /* Too large */ else if (x > 128) return INFINITY; @@ -327,6 +373,10 @@ int ff_set_sar(AVCodecContext *avctx, AVRational sar); int ff_side_data_update_matrix_encoding(AVFrame *frame, enum AVMatrixEncoding matrix_encoding); +#if FF_API_MERGE_SD +int ff_packet_split_and_drop_side_data(AVPacket *pkt); +#endif + /** * Select the (possibly hardware accelerated) pixel format. * This is a wrapper around AVCodecContext.get_format() and should be used @@ -361,4 +411,10 @@ int ff_side_data_set_encoder_stats(AVPacket *pkt, int quality, int64_t *error, i int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len, void **data, size_t *sei_size); +/** + * Get an estimated video bitrate based on frame size, frame rate and coded + * bits per pixel. + */ +int64_t ff_guess_coded_bitrate(AVCodecContext *avctx); + #endif /* AVCODEC_INTERNAL_H */ diff --git a/media/ffvpx/libavcodec/mathops.h b/media/ffvpx/libavcodec/mathops.h index 5168dc2ce00f..1c35664318f8 100644 --- a/media/ffvpx/libavcodec/mathops.h +++ b/media/ffvpx/libavcodec/mathops.h @@ -25,6 +25,7 @@ #include #include "libavutil/common.h" +#include "libavutil/reverse.h" #include "config.h" #define MAX_NEG_CROP 1024 @@ -96,15 +97,6 @@ static av_always_inline unsigned UMULH(unsigned a, unsigned b){ #define mid_pred mid_pred static inline av_const int mid_pred(int a, int b, int c) { -#if 0 - int t= (a-b)&((a-b)>>31); - a-=t; - b+=t; - b-= (b-c)&((b-c)>>31); - b+= (a-b)&((a-b)>>31); - - return b; -#else if(a>b){ if(c>b){ if(c>a) b=a; @@ -117,7 +109,6 @@ static inline av_const int mid_pred(int a, int b, int c) } } return b; -#endif } #endif @@ -249,4 +240,12 @@ static inline int8_t ff_u8_to_s8(uint8_t a) return b.s8; } +static av_always_inline uint32_t bitswap_32(uint32_t x) +{ + return (uint32_t)ff_reverse[ x & 0xFF] << 24 | + (uint32_t)ff_reverse[(x >> 8) & 0xFF] << 16 | + (uint32_t)ff_reverse[(x >> 16) & 0xFF] << 8 | + (uint32_t)ff_reverse[ x >> 24]; +} + #endif /* AVCODEC_MATHOPS_H */ diff --git a/media/ffvpx/libavcodec/me_cmp.h b/media/ffvpx/libavcodec/me_cmp.h index 5666f59adeba..0dbbcbb1d9a5 100644 --- a/media/ffvpx/libavcodec/me_cmp.h +++ b/media/ffvpx/libavcodec/me_cmp.h @@ -76,7 +76,7 @@ typedef struct MECmpContext { me_cmp_func frame_skip_cmp[6]; // only width 8 used me_cmp_func pix_abs[2][4]; - me_cmp_func median_sad[2]; + me_cmp_func median_sad[6]; } MECmpContext; void ff_me_cmp_init_static(void); diff --git a/media/ffvpx/libavcodec/moz.build b/media/ffvpx/libavcodec/moz.build index 993058cf1908..9b4c9a8d4795 100644 --- a/media/ffvpx/libavcodec/moz.build +++ b/media/ffvpx/libavcodec/moz.build @@ -16,7 +16,11 @@ SOURCES += [ 'avpacket.c', 'avpicture.c', 'bitstream.c', + 'bitstream_filter.c', + 'bitstream_filters.c', + 'bsf.c', 'codec_desc.c', + 'decode.c', 'dummy_funcs.c', 'flac.c', 'flac_parser.c', @@ -28,6 +32,7 @@ SOURCES += [ 'imgconvert.c', 'log2_tab.c', 'mathtables.c', + 'null_bsf.c', 'options.c', 'parser.c', 'profiles.c', @@ -48,10 +53,16 @@ SOURCES += [ 'vp8dsp.c', 'vp9.c', 'vp9_parser.c', + 'vp9block.c', + 'vp9data.c', 'vp9dsp.c', 'vp9dsp_10bpp.c', 'vp9dsp_12bpp.c', 'vp9dsp_8bpp.c', + 'vp9lpf.c', + 'vp9mvs.c', + 'vp9prob.c', + 'vp9recon.c', 'xiph.c' ] diff --git a/media/ffvpx/libavcodec/mpegvideo.h b/media/ffvpx/libavcodec/mpegvideo.h index c82fa3e1a16f..e9eb633d1b51 100644 --- a/media/ffvpx/libavcodec/mpegvideo.h +++ b/media/ffvpx/libavcodec/mpegvideo.h @@ -422,6 +422,7 @@ typedef struct MpegEncContext { struct MJpegContext *mjpeg_ctx; int esc_pos; int pred; + int huffman; /* MSMPEG4 specific */ int mv_table_index; @@ -679,7 +680,7 @@ void ff_mpv_common_end(MpegEncContext *s); void ff_mpv_decode_defaults(MpegEncContext *s); void ff_mpv_decode_init(MpegEncContext *s, AVCodecContext *avctx); -void ff_mpv_decode_mb(MpegEncContext *s, int16_t block[12][64]); +void ff_mpv_reconstruct_mb(MpegEncContext *s, int16_t block[12][64]); void ff_mpv_report_decode_progress(MpegEncContext *s); int ff_mpv_frame_start(MpegEncContext *s, AVCodecContext *avctx); diff --git a/media/ffvpx/libavcodec/null_bsf.c b/media/ffvpx/libavcodec/null_bsf.c new file mode 100644 index 000000000000..feb71248a970 --- /dev/null +++ b/media/ffvpx/libavcodec/null_bsf.c @@ -0,0 +1,43 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General 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 + * Null bitstream filter -- pass the input through unchanged. + */ + +#include "avcodec.h" +#include "bsf.h" + +static int null_filter(AVBSFContext *ctx, AVPacket *out) +{ + AVPacket *in; + int ret; + + ret = ff_bsf_get_packet(ctx, &in); + if (ret < 0) + return ret; + av_packet_move_ref(out, in); + av_packet_free(&in); + return 0; +} + +const AVBitStreamFilter ff_null_bsf = { + .name = "null", + .filter = null_filter, +}; diff --git a/media/ffvpx/libavcodec/options.c b/media/ffvpx/libavcodec/options.c index d8e3dbfa33c0..82e12179a6b5 100644 --- a/media/ffvpx/libavcodec/options.c +++ b/media/ffvpx/libavcodec/options.c @@ -119,6 +119,7 @@ static int init_context_defaults(AVCodecContext *s, const AVCodec *codec) s->execute2 = avcodec_default_execute2; s->sample_aspect_ratio = (AVRational){0,1}; s->pix_fmt = AV_PIX_FMT_NONE; + s->sw_pix_fmt = AV_PIX_FMT_NONE; s->sample_fmt = AV_SAMPLE_FMT_NONE; s->reordered_opaque = AV_NOPTS_VALUE; @@ -187,6 +188,31 @@ void avcodec_free_context(AVCodecContext **pavctx) } #if FF_API_COPY_CONTEXT +static void copy_context_reset(AVCodecContext *avctx) +{ + int i; + + av_opt_free(avctx); +#if FF_API_CODED_FRAME +FF_DISABLE_DEPRECATION_WARNINGS + av_frame_free(&avctx->coded_frame); +FF_ENABLE_DEPRECATION_WARNINGS +#endif + av_freep(&avctx->rc_override); + av_freep(&avctx->intra_matrix); + av_freep(&avctx->inter_matrix); + av_freep(&avctx->extradata); + av_freep(&avctx->subtitle_header); + av_buffer_unref(&avctx->hw_frames_ctx); + av_buffer_unref(&avctx->hw_device_ctx); + for (i = 0; i < avctx->nb_coded_side_data; i++) + av_freep(&avctx->coded_side_data[i].data); + av_freep(&avctx->coded_side_data); + avctx->subtitle_header_size = 0; + avctx->nb_coded_side_data = 0; + avctx->extradata_size = 0; +} + int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src) { const AVCodec *orig_codec = dest->codec; @@ -199,12 +225,7 @@ int avcodec_copy_context(AVCodecContext *dest, const AVCodecContext *src) return AVERROR(EINVAL); } - av_opt_free(dest); - av_freep(&dest->rc_override); - av_freep(&dest->intra_matrix); - av_freep(&dest->inter_matrix); - av_freep(&dest->extradata); - av_freep(&dest->subtitle_header); + copy_context_reset(dest); memcpy(dest, src, sizeof(*dest)); av_opt_copy(dest, src); @@ -229,11 +250,14 @@ FF_ENABLE_DEPRECATION_WARNINGS /* reallocate values that should be allocated separately */ dest->extradata = NULL; + dest->coded_side_data = NULL; dest->intra_matrix = NULL; dest->inter_matrix = NULL; dest->rc_override = NULL; dest->subtitle_header = NULL; dest->hw_frames_ctx = NULL; + dest->hw_device_ctx = NULL; + dest->nb_coded_side_data = 0; #define alloc_and_copy_or_fail(obj, size, pad) \ if (src->obj && size > 0) { \ @@ -263,15 +287,7 @@ FF_ENABLE_DEPRECATION_WARNINGS return 0; fail: - av_freep(&dest->subtitle_header); - av_freep(&dest->rc_override); - av_freep(&dest->intra_matrix); - av_freep(&dest->inter_matrix); - av_freep(&dest->extradata); - av_buffer_unref(&dest->hw_frames_ctx); - dest->subtitle_header_size = 0; - dest->extradata_size = 0; - av_opt_free(dest); + copy_context_reset(dest); return AVERROR(ENOMEM); } #endif diff --git a/media/ffvpx/libavcodec/options_table.h b/media/ffvpx/libavcodec/options_table.h index adfbe72bff77..607e4156614c 100644 --- a/media/ffvpx/libavcodec/options_table.h +++ b/media/ffvpx/libavcodec/options_table.h @@ -106,12 +106,12 @@ static const AVOption avcodec_options[] = { {"umh", "umh motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_UMH }, INT_MIN, INT_MAX, V|E, "me_method" }, {"iter", "iter motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = ME_ITER }, INT_MIN, INT_MAX, V|E, "me_method" }, #endif -{"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, INT_MIN, INT_MAX}, +{"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}, {"ac", "set number of audio channels", OFFSET(channels), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, {"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 }, 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_number), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, {"delay", NULL, OFFSET(delay), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, {"qcomp", "video quantizer scale compression (VBR). Constant of ratecontrol equation. " @@ -163,6 +163,7 @@ static const AVOption avcodec_options[] = { {"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"}, @@ -179,8 +180,8 @@ static const AVOption avcodec_options[] = { {"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|D, "err_detect"}, {"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_COMPLIANT }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, {"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE }, INT_MIN, INT_MAX, A|V|D, "err_detect"}, -{"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, -{"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"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}, #if FF_API_PRIVATE_OPT {"mpeg_quant", "use MPEG quantizers instead of H.263", OFFSET(mpeg_quant), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, #endif @@ -246,7 +247,7 @@ static const AVOption avcodec_options[] = { {"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"}, -{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, +{"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, #if FF_API_PRIVATE_OPT {"pred", "prediction method", OFFSET(prediction_method), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "pred"}, {"left", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PRED_LEFT }, INT_MIN, INT_MAX, V|E, "pred"}, @@ -312,6 +313,7 @@ static const AVOption avcodec_options[] = { #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"}, {"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}, {"subq", "sub-pel motion estimation quality", OFFSET(me_subpel_quality), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E}, #if FF_API_AFD @@ -393,6 +395,7 @@ static const AVOption avcodec_options[] = { {"mpeg4_core", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_CORE }, INT_MIN, INT_MAX, V|E, "profile"}, {"mpeg4_main", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_MAIN }, INT_MIN, INT_MAX, V|E, "profile"}, {"mpeg4_asp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_MPEG4_ADVANCED_SIMPLE }, INT_MIN, INT_MAX, V|E, "profile"}, +{"main10", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_PROFILE_HEVC_MAIN_10 }, INT_MIN, INT_MAX, V|E, "profile"}, {"level", NULL, OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "level"}, {"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "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}, @@ -443,30 +446,46 @@ static const AVOption avcodec_options[] = { {"max_prediction_order", NULL, OFFSET(max_prediction_order), AV_OPT_TYPE_INT, {.i64 = -1 }, INT_MIN, INT_MAX, A|E}, {"timecode_frame_start", "GOP timecode frame start number, in non-drop-frame format", OFFSET(timecode_frame_start), AV_OPT_TYPE_INT64, {.i64 = -1 }, -1, INT64_MAX, V|E}, #endif -{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, -{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|E|D, "channel_layout"}, -{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_INT64, {.i64 = DEFAULT }, 0, INT64_MAX, A|D, "request_channel_layout"}, +{"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, +{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"}, +{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_UINT64, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_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}, {"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D}, {"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, AVCOL_PRI_NB-1, 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"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, 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_1", "SMPTE ST 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTEST428_1 }, 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"}, +{"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, AVCOL_TRC_NB-1, 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"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, 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"}, @@ -474,31 +493,39 @@ static const AVOption avcodec_options[] = { {"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"}, -{"smpte2084", "SMPTE ST 2084", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTEST2084 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"smpte428_1", "SMPTE ST 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTEST428_1 }, 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, AVCOL_SPC_NB-1, 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"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, 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"}, -{"ycocg", "YCOCG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCOCG }, 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"}, +{"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, AVCOL_RANGE_NB-1, 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"}, {"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, AVCHROMA_LOC_NB-1, 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"}, +{"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"}, {"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"}, @@ -545,6 +572,7 @@ static const AVOption avcodec_options[] = { {"codec_whitelist", "List of decoders that are allowed to be used", OFFSET(codec_whitelist), AV_OPT_TYPE_STRING, { .str = NULL }, CHAR_MIN, CHAR_MAX, 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 }, {NULL}, }; diff --git a/media/ffvpx/libavcodec/parser.c b/media/ffvpx/libavcodec/parser.c index 30cfc55cbcb7..670680ea7c1d 100644 --- a/media/ffvpx/libavcodec/parser.c +++ b/media/ffvpx/libavcodec/parser.c @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include @@ -251,7 +252,7 @@ int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size) { if (pc->overread) { - ff_dlog(NULL, "overread %d, state:%X next:%d index:%d o_index:%d\n", + ff_dlog(NULL, "overread %d, state:%"PRIX32" next:%d index:%d o_index:%d\n", pc->overread, pc->state, next, pc->index, pc->overread_index); ff_dlog(NULL, "%X %X %X %X\n", (*buf)[0], (*buf)[1], (*buf)[2], (*buf)[3]); @@ -284,6 +285,8 @@ int ff_combine_frame(ParseContext *pc, int next, return -1; } + av_assert0(next >= 0 || pc->buffer); + *buf_size = pc->overread_index = pc->index + next; @@ -314,7 +317,7 @@ int ff_combine_frame(ParseContext *pc, int next, } if (pc->overread) { - ff_dlog(NULL, "overread %d, state:%X next:%d index:%d o_index:%d\n", + ff_dlog(NULL, "overread %d, state:%"PRIX32" next:%d index:%d o_index:%d\n", pc->overread, pc->state, next, pc->index, pc->overread_index); ff_dlog(NULL, "%X %X %X %X\n", (*buf)[0], (*buf)[1], (*buf)[2], (*buf)[3]); diff --git a/media/ffvpx/libavcodec/pixblockdsp.h b/media/ffvpx/libavcodec/pixblockdsp.h index 79ed86c3a6ca..e036700ff067 100644 --- a/media/ffvpx/libavcodec/pixblockdsp.h +++ b/media/ffvpx/libavcodec/pixblockdsp.h @@ -21,16 +21,23 @@ #include +#include "config.h" + #include "avcodec.h" typedef struct PixblockDSPContext { - void (*get_pixels)(int16_t *block /* align 16 */, + void (*get_pixels)(int16_t *av_restrict block /* align 16 */, const uint8_t *pixels /* align 8 */, - ptrdiff_t line_size); - void (*diff_pixels)(int16_t *block /* align 16 */, + ptrdiff_t stride); + void (*diff_pixels)(int16_t *av_restrict block /* align 16 */, const uint8_t *s1 /* align 8 */, const uint8_t *s2 /* align 8 */, - int stride); + ptrdiff_t stride); + void (*diff_pixels_unaligned)(int16_t *av_restrict block /* align 16 */, + const uint8_t *s1, + const uint8_t *s2, + ptrdiff_t stride); + } PixblockDSPContext; void ff_pixblockdsp_init(PixblockDSPContext *c, AVCodecContext *avctx); diff --git a/media/ffvpx/libavcodec/pthread_frame.c b/media/ffvpx/libavcodec/pthread_frame.c index 7ef5e9f6be92..2c702c737218 100644 --- a/media/ffvpx/libavcodec/pthread_frame.c +++ b/media/ffvpx/libavcodec/pthread_frame.c @@ -24,9 +24,11 @@ #include "config.h" +#include #include #include "avcodec.h" +#include "hwaccel.h" #include "internal.h" #include "pthread_internal.h" #include "thread.h" @@ -43,6 +45,25 @@ #include "libavutil/opt.h" #include "libavutil/thread.h" +enum { + ///< Set when the thread is awaiting a packet. + STATE_INPUT_READY, + ///< Set before the codec has called ff_thread_finish_setup(). + STATE_SETTING_UP, + /** + * Set when the codec calls get_buffer(). + * State is returned to STATE_SETTING_UP afterwards. + */ + STATE_GET_BUFFER, + /** + * Set when the codec calls get_format(). + * State is returned to STATE_SETTING_UP afterwards. + */ + STATE_GET_FORMAT, + ///< Set after the codec has called ff_thread_finish_setup(). + STATE_SETUP_FINISHED, +}; + /** * Context used by codec threads and stored in their AVCodecInternal thread_ctx. */ @@ -66,19 +87,7 @@ typedef struct PerThreadContext { int got_frame; ///< The output of got_picture_ptr from the last avcodec_decode_video() call. int result; ///< The result of the last codec decode/encode() call. - enum { - STATE_INPUT_READY, ///< Set when the thread is awaiting a packet. - STATE_SETTING_UP, ///< Set before the codec has called ff_thread_finish_setup(). - STATE_GET_BUFFER, /**< - * Set when the codec calls get_buffer(). - * State is returned to STATE_SETTING_UP afterwards. - */ - STATE_GET_FORMAT, /**< - * Set when the codec calls get_format(). - * State is returned to STATE_SETTING_UP afterwards. - */ - STATE_SETUP_FINISHED ///< Set after the codec has called ff_thread_finish_setup(). - } state; + atomic_int state; /** * Array of frames passed to ff_thread_release_buffer(). @@ -95,6 +104,11 @@ typedef struct PerThreadContext { enum AVPixelFormat result_format; ///< get_format() result int die; ///< Set when the thread should exit. + + int hwaccel_serializing; + int async_serializing; + + atomic_int debug_threads; ///< Set if the FF_DEBUG_THREADS option is set. } PerThreadContext; /** @@ -105,6 +119,14 @@ typedef struct FrameThreadContext { PerThreadContext *prev_thread; ///< The last thread submit_packet() was called on. pthread_mutex_t buffer_mutex; ///< Mutex used to protect get/release_buffer(). + /** + * This lock is used for ensuring threads run in serial when hwaccel + * is used. + */ + pthread_mutex_t hwaccel_mutex; + pthread_mutex_t async_mutex; + pthread_cond_t async_cond; + int async_lock; int next_decoding; ///< The next context to submit a packet to. int next_finished; ///< The next context to return output from. @@ -118,6 +140,24 @@ typedef struct FrameThreadContext { #define THREAD_SAFE_CALLBACKS(avctx) \ ((avctx)->thread_safe_callbacks || (avctx)->get_buffer2 == avcodec_default_get_buffer2) +static void async_lock(FrameThreadContext *fctx) +{ + pthread_mutex_lock(&fctx->async_mutex); + while (fctx->async_lock) + pthread_cond_wait(&fctx->async_cond, &fctx->async_mutex); + fctx->async_lock = 1; + pthread_mutex_unlock(&fctx->async_mutex); +} + +static void async_unlock(FrameThreadContext *fctx) +{ + pthread_mutex_lock(&fctx->async_mutex); + av_assert0(fctx->async_lock); + fctx->async_lock = 0; + pthread_cond_broadcast(&fctx->async_cond); + pthread_mutex_unlock(&fctx->async_mutex); +} + /** * Codec worker thread. * @@ -133,14 +173,29 @@ static attribute_align_arg void *frame_worker_thread(void *arg) pthread_mutex_lock(&p->mutex); while (1) { - while (p->state == STATE_INPUT_READY && !p->die) - pthread_cond_wait(&p->input_cond, &p->mutex); + while (atomic_load(&p->state) == STATE_INPUT_READY && !p->die) + pthread_cond_wait(&p->input_cond, &p->mutex); if (p->die) break; if (!codec->update_thread_context && THREAD_SAFE_CALLBACKS(avctx)) ff_thread_finish_setup(avctx); + /* If a decoder supports hwaccel, then it must call ff_get_format(). + * Since that call must happen before ff_thread_finish_setup(), the + * decoder is required to implement update_thread_context() and call + * ff_thread_finish_setup() manually. Therefore the above + * ff_thread_finish_setup() call did not happen and hwaccel_serializing + * cannot be true here. */ + av_assert0(!p->hwaccel_serializing); + + /* if the previous thread uses hwaccel then we take the lock to ensure + * the threads don't run concurrently */ + if (avctx->hwaccel) { + pthread_mutex_lock(&p->parent->hwaccel_mutex); + p->hwaccel_serializing = 1; + } + av_frame_unref(p->frame); p->got_frame = 0; p->result = codec->decode(avctx, p->frame, &p->got_frame, &p->avpkt); @@ -152,17 +207,23 @@ static attribute_align_arg void *frame_worker_thread(void *arg) av_frame_unref(p->frame); } - if (p->state == STATE_SETTING_UP) ff_thread_finish_setup(avctx); + if (atomic_load(&p->state) == STATE_SETTING_UP) + ff_thread_finish_setup(avctx); + + if (p->hwaccel_serializing) { + p->hwaccel_serializing = 0; + pthread_mutex_unlock(&p->parent->hwaccel_mutex); + } + + if (p->async_serializing) { + p->async_serializing = 0; + + async_unlock(p->parent); + } pthread_mutex_lock(&p->progress_mutex); -#if 0 //BUFREF-FIXME - for (i = 0; i < MAX_BUFFERS; i++) - if (p->progress_used[i] && (p->got_frame || p->result<0 || avctx->codec_id != AV_CODEC_ID_H264)) { - p->progress[i][0] = INT_MAX; - p->progress[i][1] = INT_MAX; - } -#endif - p->state = STATE_INPUT_READY; + + atomic_store(&p->state, STATE_INPUT_READY); pthread_cond_broadcast(&p->progress_cond); pthread_cond_signal(&p->output_cond); @@ -185,12 +246,13 @@ static int update_context_from_thread(AVCodecContext *dst, AVCodecContext *src, { int err = 0; - if (dst != src) { + if (dst != src && (for_user || !(av_codec_get_codec_descriptor(src)->props & AV_CODEC_PROP_INTRA_ONLY))) { dst->time_base = src->time_base; dst->framerate = src->framerate; dst->width = src->width; dst->height = src->height; dst->pix_fmt = src->pix_fmt; + dst->sw_pix_fmt = src->sw_pix_fmt; dst->coded_width = src->coded_width; dst->coded_height = src->coded_height; @@ -226,6 +288,19 @@ FF_ENABLE_DEPRECATION_WARNINGS dst->sample_fmt = src->sample_fmt; dst->channel_layout = src->channel_layout; dst->internal->hwaccel_priv_data = src->internal->hwaccel_priv_data; + + if (!!dst->hw_frames_ctx != !!src->hw_frames_ctx || + (dst->hw_frames_ctx && dst->hw_frames_ctx->data != src->hw_frames_ctx->data)) { + av_buffer_unref(&dst->hw_frames_ctx); + + if (src->hw_frames_ctx) { + dst->hw_frames_ctx = av_buffer_ref(src->hw_frames_ctx); + if (!dst->hw_frames_ctx) + return AVERROR(ENOMEM); + } + } + + dst->hwaccel_flags = src->hwaccel_flags; } if (for_user) { @@ -307,24 +382,35 @@ static void release_delayed_buffers(PerThreadContext *p) } } -static int submit_packet(PerThreadContext *p, AVPacket *avpkt) +static int submit_packet(PerThreadContext *p, AVCodecContext *user_avctx, + AVPacket *avpkt) { FrameThreadContext *fctx = p->parent; PerThreadContext *prev_thread = fctx->prev_thread; const AVCodec *codec = p->avctx->codec; + int ret; if (!avpkt->size && !(codec->capabilities & AV_CODEC_CAP_DELAY)) return 0; pthread_mutex_lock(&p->mutex); + ret = update_context_from_user(p->avctx, user_avctx); + if (ret) { + pthread_mutex_unlock(&p->mutex); + return ret; + } + atomic_store_explicit(&p->debug_threads, + (p->avctx->debug & FF_DEBUG_THREADS) != 0, + memory_order_relaxed); + release_delayed_buffers(p); if (prev_thread) { int err; - if (prev_thread->state == STATE_SETTING_UP) { + if (atomic_load(&prev_thread->state) == STATE_SETTING_UP) { pthread_mutex_lock(&prev_thread->progress_mutex); - while (prev_thread->state == STATE_SETTING_UP) + while (atomic_load(&prev_thread->state) == STATE_SETTING_UP) pthread_cond_wait(&prev_thread->progress_cond, &prev_thread->progress_mutex); pthread_mutex_unlock(&prev_thread->progress_mutex); } @@ -337,9 +423,14 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt) } av_packet_unref(&p->avpkt); - av_packet_ref(&p->avpkt, avpkt); + ret = av_packet_ref(&p->avpkt, avpkt); + if (ret < 0) { + pthread_mutex_unlock(&p->mutex); + av_log(p->avctx, AV_LOG_ERROR, "av_packet_ref() failed in submit_packet()\n"); + return ret; + } - p->state = STATE_SETTING_UP; + atomic_store(&p->state, STATE_SETTING_UP); pthread_cond_signal(&p->input_cond); pthread_mutex_unlock(&p->mutex); @@ -352,13 +443,13 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt) if (!p->avctx->thread_safe_callbacks && ( p->avctx->get_format != avcodec_default_get_format || p->avctx->get_buffer2 != avcodec_default_get_buffer2)) { - while (p->state != STATE_SETUP_FINISHED && p->state != STATE_INPUT_READY) { + while (atomic_load(&p->state) != STATE_SETUP_FINISHED && atomic_load(&p->state) != STATE_INPUT_READY) { int call_done = 1; pthread_mutex_lock(&p->progress_mutex); - while (p->state == STATE_SETTING_UP) + while (atomic_load(&p->state) == STATE_SETTING_UP) pthread_cond_wait(&p->progress_cond, &p->progress_mutex); - switch (p->state) { + switch (atomic_load_explicit(&p->state, memory_order_acquire)) { case STATE_GET_BUFFER: p->result = ff_get_buffer(p->avctx, p->requested_frame, p->requested_flags); break; @@ -370,7 +461,7 @@ static int submit_packet(PerThreadContext *p, AVPacket *avpkt) break; } if (call_done) { - p->state = STATE_SETTING_UP; + atomic_store(&p->state, STATE_SETTING_UP); pthread_cond_signal(&p->progress_cond); } pthread_mutex_unlock(&p->progress_mutex); @@ -392,15 +483,18 @@ int ff_thread_decode_frame(AVCodecContext *avctx, PerThreadContext *p; int err; + /* release the async lock, permitting blocked hwaccel threads to + * go forward while we are in this function */ + async_unlock(fctx); + /* * Submit a packet to the next decoding thread. */ p = &fctx->threads[fctx->next_decoding]; - err = update_context_from_user(p->avctx, avctx); - if (err) return err; - err = submit_packet(p, avpkt); - if (err) return err; + err = submit_packet(p, avctx, avpkt); + if (err) + goto finish; /* * If we're still receiving the initial packets, don't return a frame. @@ -411,23 +505,25 @@ int ff_thread_decode_frame(AVCodecContext *avctx, if (fctx->delaying) { *got_picture_ptr=0; - if (avpkt->size) - return avpkt->size; + if (avpkt->size) { + err = avpkt->size; + goto finish; + } } /* * Return the next available frame from the oldest thread. * If we're at the end of the stream, then we have to skip threads that - * didn't output a frame, because we don't want to accidentally signal - * EOF (avpkt->size == 0 && *got_picture_ptr == 0). + * didn't output a frame/error, because we don't want to accidentally signal + * EOF (avpkt->size == 0 && *got_picture_ptr == 0 && err >= 0). */ do { p = &fctx->threads[finished++]; - if (p->state != STATE_INPUT_READY) { + if (atomic_load(&p->state) != STATE_INPUT_READY) { pthread_mutex_lock(&p->progress_mutex); - while (p->state != STATE_INPUT_READY) + while (atomic_load_explicit(&p->state, memory_order_relaxed) != STATE_INPUT_READY) pthread_cond_wait(&p->output_cond, &p->progress_mutex); pthread_mutex_unlock(&p->progress_mutex); } @@ -435,20 +531,19 @@ int ff_thread_decode_frame(AVCodecContext *avctx, av_frame_move_ref(picture, p->frame); *got_picture_ptr = p->got_frame; picture->pkt_dts = p->avpkt.dts; - - if (p->result < 0) - err = p->result; + err = p->result; /* * A later call with avkpt->size == 0 may loop over all threads, - * including this one, searching for a frame to return before being + * including this one, searching for a frame/error to return before being * stopped by the "finished != fctx->next_finished" condition. - * Make sure we don't mistakenly return the same frame again. + * Make sure we don't mistakenly return the same frame/error again. */ p->got_frame = 0; + p->result = 0; if (finished >= avctx->thread_count) finished = 0; - } while (!avpkt->size && !*got_picture_ptr && finished != fctx->next_finished); + } while (!avpkt->size && !*got_picture_ptr && err >= 0 && finished != fctx->next_finished); update_context_from_thread(avctx, p->avctx, 1); @@ -456,32 +551,33 @@ int ff_thread_decode_frame(AVCodecContext *avctx, fctx->next_finished = finished; - /* - * When no frame was found while flushing, but an error occurred in - * any thread, return it instead of 0. - * Otherwise the error can get lost. - */ - if (!avpkt->size && !*got_picture_ptr) - return err; - /* return the size of the consumed packet if no error occurred */ - return (p->result >= 0) ? avpkt->size : p->result; + if (err >= 0) + err = avpkt->size; +finish: + async_lock(fctx); + return err; } void ff_thread_report_progress(ThreadFrame *f, int n, int field) { PerThreadContext *p; - volatile int *progress = f->progress ? (int*)f->progress->data : NULL; + atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : NULL; - if (!progress || progress[field] >= n) return; + if (!progress || + atomic_load_explicit(&progress[field], memory_order_relaxed) >= n) + return; - p = f->owner->internal->thread_ctx; + p = f->owner[field]->internal->thread_ctx; - if (f->owner->debug&FF_DEBUG_THREADS) - av_log(f->owner, AV_LOG_DEBUG, "%p finished %d field %d\n", progress, n, field); + if (atomic_load_explicit(&p->debug_threads, memory_order_relaxed)) + av_log(f->owner[field], AV_LOG_DEBUG, + "%p finished %d field %d\n", progress, n, field); pthread_mutex_lock(&p->progress_mutex); - progress[field] = n; + + atomic_store_explicit(&progress[field], n, memory_order_release); + pthread_cond_broadcast(&p->progress_cond); pthread_mutex_unlock(&p->progress_mutex); } @@ -489,17 +585,20 @@ void ff_thread_report_progress(ThreadFrame *f, int n, int field) void ff_thread_await_progress(ThreadFrame *f, int n, int field) { PerThreadContext *p; - volatile int *progress = f->progress ? (int*)f->progress->data : NULL; + atomic_int *progress = f->progress ? (atomic_int*)f->progress->data : NULL; - if (!progress || progress[field] >= n) return; + if (!progress || + atomic_load_explicit(&progress[field], memory_order_acquire) >= n) + return; - p = f->owner->internal->thread_ctx; + p = f->owner[field]->internal->thread_ctx; - if (f->owner->debug&FF_DEBUG_THREADS) - av_log(f->owner, AV_LOG_DEBUG, "thread awaiting %d field %d from %p\n", n, field, progress); + if (atomic_load_explicit(&p->debug_threads, memory_order_relaxed)) + av_log(f->owner[field], AV_LOG_DEBUG, + "thread awaiting %d field %d from %p\n", n, field, progress); pthread_mutex_lock(&p->progress_mutex); - while (progress[field] < n) + while (atomic_load_explicit(&progress[field], memory_order_relaxed) < n) pthread_cond_wait(&p->progress_cond, &p->progress_mutex); pthread_mutex_unlock(&p->progress_mutex); } @@ -509,12 +608,26 @@ void ff_thread_finish_setup(AVCodecContext *avctx) { if (!(avctx->active_thread_type&FF_THREAD_FRAME)) return; - if(p->state == STATE_SETUP_FINISHED){ - av_log(avctx, AV_LOG_WARNING, "Multiple ff_thread_finish_setup() calls\n"); + if (avctx->hwaccel && !p->hwaccel_serializing) { + pthread_mutex_lock(&p->parent->hwaccel_mutex); + p->hwaccel_serializing = 1; + } + + /* this assumes that no hwaccel calls happen before ff_thread_finish_setup() */ + if (avctx->hwaccel && + !(avctx->hwaccel->caps_internal & HWACCEL_CAP_ASYNC_SAFE)) { + p->async_serializing = 1; + + async_lock(p->parent); } pthread_mutex_lock(&p->progress_mutex); - p->state = STATE_SETUP_FINISHED; + if(atomic_load(&p->state) == STATE_SETUP_FINISHED){ + av_log(avctx, AV_LOG_WARNING, "Multiple ff_thread_finish_setup() calls\n"); + } + + atomic_store(&p->state, STATE_SETUP_FINISHED); + pthread_cond_broadcast(&p->progress_cond); pthread_mutex_unlock(&p->progress_mutex); } @@ -524,17 +637,21 @@ static void park_frame_worker_threads(FrameThreadContext *fctx, int thread_count { int i; + async_unlock(fctx); + for (i = 0; i < thread_count; i++) { PerThreadContext *p = &fctx->threads[i]; - if (p->state != STATE_INPUT_READY) { + if (atomic_load(&p->state) != STATE_INPUT_READY) { pthread_mutex_lock(&p->progress_mutex); - while (p->state != STATE_INPUT_READY) + while (atomic_load(&p->state) != STATE_INPUT_READY) pthread_cond_wait(&p->output_cond, &p->progress_mutex); pthread_mutex_unlock(&p->progress_mutex); } p->got_frame = 0; } + + async_lock(fctx); } void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) @@ -587,13 +704,20 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) av_freep(&p->avctx->slice_offset); } - if (p->avctx) + if (p->avctx) { av_freep(&p->avctx->internal); + av_buffer_unref(&p->avctx->hw_frames_ctx); + } + av_freep(&p->avctx); } av_freep(&fctx->threads); pthread_mutex_destroy(&fctx->buffer_mutex); + pthread_mutex_destroy(&fctx->hwaccel_mutex); + pthread_mutex_destroy(&fctx->async_mutex); + pthread_cond_destroy(&fctx->async_cond); + av_freep(&avctx->internal->thread_ctx); if (avctx->priv_data && avctx->codec && avctx->codec->priv_class) @@ -615,8 +739,10 @@ int ff_frame_thread_init(AVCodecContext *avctx) if (!thread_count) { int nb_cpus = av_cpu_count(); +#if FF_API_DEBUG_MV if ((avctx->debug & (FF_DEBUG_VIS_QP | FF_DEBUG_VIS_MB_TYPE)) || avctx->debug_mv) nb_cpus = 1; +#endif // use number of cores + 1 as thread count if there is more than one if (nb_cpus > 1) thread_count = avctx->thread_count = FFMIN(nb_cpus + 1, MAX_AUTO_THREADS); @@ -640,6 +766,11 @@ int ff_frame_thread_init(AVCodecContext *avctx) } pthread_mutex_init(&fctx->buffer_mutex, NULL); + pthread_mutex_init(&fctx->hwaccel_mutex, NULL); + pthread_mutex_init(&fctx->async_mutex, NULL); + pthread_cond_init(&fctx->async_cond, NULL); + + fctx->async_lock = 1; fctx->delaying = 1; for (i = 0; i < thread_count; i++) { @@ -677,7 +808,7 @@ int ff_frame_thread_init(AVCodecContext *avctx) } *copy->internal = *src->internal; copy->internal->thread_ctx = p; - copy->internal->pkt = &p->avpkt; + copy->internal->last_pkt_props = &p->avpkt; if (!i) { src = copy; @@ -701,6 +832,8 @@ int ff_frame_thread_init(AVCodecContext *avctx) if (err) goto error; + atomic_init(&p->debug_threads, (copy->debug & FF_DEBUG_THREADS) != 0); + err = AVERROR(pthread_create(&p->thread, NULL, frame_worker_thread, p)); p->thread_init= !err; if(!p->thread_init) @@ -736,6 +869,7 @@ void ff_thread_flush(AVCodecContext *avctx) // Make sure decode flush calls with size=0 won't return old frames p->got_frame = 0; av_frame_unref(p->frame); + p->result = 0; release_delayed_buffers(p); @@ -747,7 +881,7 @@ void ff_thread_flush(AVCodecContext *avctx) int ff_thread_can_start_frame(AVCodecContext *avctx) { PerThreadContext *p = avctx->internal->thread_ctx; - if ((avctx->active_thread_type&FF_THREAD_FRAME) && p->state != STATE_SETTING_UP && + if ((avctx->active_thread_type&FF_THREAD_FRAME) && atomic_load(&p->state) != STATE_SETTING_UP && (avctx->codec->update_thread_context || !THREAD_SAFE_CALLBACKS(avctx))) { return 0; } @@ -759,28 +893,29 @@ static int thread_get_buffer_internal(AVCodecContext *avctx, ThreadFrame *f, int PerThreadContext *p = avctx->internal->thread_ctx; int err; - f->owner = avctx; + f->owner[0] = f->owner[1] = avctx; ff_init_buffer_info(avctx, f->f); if (!(avctx->active_thread_type & FF_THREAD_FRAME)) return ff_get_buffer(avctx, f->f, flags); - if (p->state != STATE_SETTING_UP && + if (atomic_load(&p->state) != STATE_SETTING_UP && (avctx->codec->update_thread_context || !THREAD_SAFE_CALLBACKS(avctx))) { av_log(avctx, AV_LOG_ERROR, "get_buffer() cannot be called after ff_thread_finish_setup()\n"); return -1; } if (avctx->internal->allocate_progress) { - int *progress; - f->progress = av_buffer_alloc(2 * sizeof(int)); + atomic_int *progress; + f->progress = av_buffer_alloc(2 * sizeof(*progress)); if (!f->progress) { return AVERROR(ENOMEM); } - progress = (int*)f->progress->data; + progress = (atomic_int*)f->progress->data; - progress[0] = progress[1] = -1; + atomic_init(&progress[0], -1); + atomic_init(&progress[1], -1); } pthread_mutex_lock(&p->parent->buffer_mutex); @@ -791,10 +926,10 @@ static int thread_get_buffer_internal(AVCodecContext *avctx, ThreadFrame *f, int pthread_mutex_lock(&p->progress_mutex); p->requested_frame = f->f; p->requested_flags = flags; - p->state = STATE_GET_BUFFER; + atomic_store_explicit(&p->state, STATE_GET_BUFFER, memory_order_release); pthread_cond_broadcast(&p->progress_cond); - while (p->state != STATE_SETTING_UP) + while (atomic_load(&p->state) != STATE_SETTING_UP) pthread_cond_wait(&p->progress_cond, &p->progress_mutex); err = p->result; @@ -819,16 +954,16 @@ enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixe if (!(avctx->active_thread_type & FF_THREAD_FRAME) || avctx->thread_safe_callbacks || avctx->get_format == avcodec_default_get_format) return ff_get_format(avctx, fmt); - if (p->state != STATE_SETTING_UP) { + if (atomic_load(&p->state) != STATE_SETTING_UP) { av_log(avctx, AV_LOG_ERROR, "get_format() cannot be called after ff_thread_finish_setup()\n"); return -1; } pthread_mutex_lock(&p->progress_mutex); p->available_formats = fmt; - p->state = STATE_GET_FORMAT; + atomic_store(&p->state, STATE_GET_FORMAT); pthread_cond_broadcast(&p->progress_cond); - while (p->state != STATE_SETTING_UP) + while (atomic_load(&p->state) != STATE_SETTING_UP) pthread_cond_wait(&p->progress_cond, &p->progress_mutex); res = p->result_format; @@ -862,7 +997,7 @@ void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f) av_log(avctx, AV_LOG_DEBUG, "thread_release_buffer called on pic %p\n", f); av_buffer_unref(&f->progress); - f->owner = NULL; + f->owner[0] = f->owner[1] = NULL; if (can_direct_free) { av_frame_unref(f->f); diff --git a/media/ffvpx/libavcodec/pthread_slice.c b/media/ffvpx/libavcodec/pthread_slice.c index 96a7643f6a20..d659f9b0ba80 100644 --- a/media/ffvpx/libavcodec/pthread_slice.c +++ b/media/ffvpx/libavcodec/pthread_slice.c @@ -34,26 +34,21 @@ #include "libavutil/cpu.h" #include "libavutil/mem.h" #include "libavutil/thread.h" +#include "libavutil/slicethread.h" typedef int (action_func)(AVCodecContext *c, void *arg); typedef int (action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr); +typedef int (main_func)(AVCodecContext *c); typedef struct SliceThreadContext { - pthread_t *workers; + AVSliceThread *thread; action_func *func; action_func2 *func2; + main_func *mainfunc; void *args; int *rets; - int job_count; int job_size; - pthread_cond_t last_job_cond; - pthread_cond_t current_job_cond; - pthread_mutex_t current_job_lock; - unsigned current_execute; - int current_job; - int done; - int *entries; int entries_count; int thread_count; @@ -61,43 +56,22 @@ typedef struct SliceThreadContext { pthread_mutex_t *progress_mutex; } SliceThreadContext; -static void* attribute_align_arg worker(void *v) -{ - AVCodecContext *avctx = v; +static void main_function(void *priv) { + AVCodecContext *avctx = priv; SliceThreadContext *c = avctx->internal->thread_ctx; - unsigned last_execute = 0; - int our_job = c->job_count; - int thread_count = avctx->thread_count; - int self_id; + c->mainfunc(avctx); +} - pthread_mutex_lock(&c->current_job_lock); - self_id = c->current_job++; - for (;;){ - int ret; - while (our_job >= c->job_count) { - if (c->current_job == thread_count + c->job_count) - pthread_cond_signal(&c->last_job_cond); +static void worker_func(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads) +{ + AVCodecContext *avctx = priv; + SliceThreadContext *c = avctx->internal->thread_ctx; + int ret; - while (last_execute == c->current_execute && !c->done) - pthread_cond_wait(&c->current_job_cond, &c->current_job_lock); - last_execute = c->current_execute; - our_job = self_id; - - if (c->done) { - pthread_mutex_unlock(&c->current_job_lock); - return NULL; - } - } - pthread_mutex_unlock(&c->current_job_lock); - - ret = c->func ? c->func(avctx, (char*)c->args + our_job*c->job_size): - c->func2(avctx, c->args, our_job, self_id); - if (c->rets) - c->rets[our_job%c->job_count] = ret; - - pthread_mutex_lock(&c->current_job_lock); - our_job = c->current_job++; - } + ret = c->func ? c->func(avctx, (char *)c->args + c->job_size * jobnr) + : c->func2(avctx, c->args, jobnr, threadnr); + if (c->rets) + c->rets[jobnr] = ret; } void ff_slice_thread_free(AVCodecContext *avctx) @@ -105,40 +79,19 @@ void ff_slice_thread_free(AVCodecContext *avctx) SliceThreadContext *c = avctx->internal->thread_ctx; int i; - pthread_mutex_lock(&c->current_job_lock); - c->done = 1; - pthread_cond_broadcast(&c->current_job_cond); - for (i = 0; i < c->thread_count; i++) - pthread_cond_broadcast(&c->progress_cond[i]); - pthread_mutex_unlock(&c->current_job_lock); - - for (i=0; ithread_count; i++) - pthread_join(c->workers[i], NULL); + avpriv_slicethread_free(&c->thread); for (i = 0; i < c->thread_count; i++) { pthread_mutex_destroy(&c->progress_mutex[i]); pthread_cond_destroy(&c->progress_cond[i]); } - pthread_mutex_destroy(&c->current_job_lock); - pthread_cond_destroy(&c->current_job_cond); - pthread_cond_destroy(&c->last_job_cond); - av_freep(&c->entries); av_freep(&c->progress_mutex); av_freep(&c->progress_cond); - - av_freep(&c->workers); av_freep(&avctx->internal->thread_ctx); } -static av_always_inline void thread_park_workers(SliceThreadContext *c, int thread_count) -{ - while (c->current_job != thread_count + c->job_count) - pthread_cond_wait(&c->last_job_cond, &c->current_job_lock); - pthread_mutex_unlock(&c->current_job_lock); -} - static int thread_execute(AVCodecContext *avctx, action_func* func, void *arg, int *ret, int job_count, int job_size) { SliceThreadContext *c = avctx->internal->thread_ctx; @@ -149,23 +102,12 @@ static int thread_execute(AVCodecContext *avctx, action_func* func, void *arg, i if (job_count <= 0) return 0; - pthread_mutex_lock(&c->current_job_lock); - - c->current_job = avctx->thread_count; - c->job_count = job_count; c->job_size = job_size; c->args = arg; c->func = func; - if (ret) { - c->rets = ret; - } else { - c->rets = NULL; - } - c->current_execute++; - pthread_cond_broadcast(&c->current_job_cond); - - thread_park_workers(c, avctx->thread_count); + c->rets = ret; + avpriv_slicethread_execute(c->thread, job_count, !!c->mainfunc ); return 0; } @@ -176,11 +118,19 @@ static int thread_execute2(AVCodecContext *avctx, action_func2* func2, void *arg return thread_execute(avctx, NULL, arg, ret, job_count, 0); } +int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, action_func2* func2, main_func *mainfunc, void *arg, int *ret, int job_count) +{ + SliceThreadContext *c = avctx->internal->thread_ctx; + c->func2 = func2; + c->mainfunc = mainfunc; + return thread_execute(avctx, NULL, arg, ret, job_count, 0); +} + int ff_slice_thread_init(AVCodecContext *avctx) { - int i; SliceThreadContext *c; int thread_count = avctx->thread_count; + static void (*mainfunc)(void *); #if HAVE_W32THREADS w32thread_init(); @@ -208,35 +158,17 @@ int ff_slice_thread_init(AVCodecContext *avctx) return 0; } - c = av_mallocz(sizeof(SliceThreadContext)); - if (!c) - return -1; - - c->workers = av_mallocz_array(thread_count, sizeof(pthread_t)); - if (!c->workers) { - av_free(c); - return -1; + avctx->internal->thread_ctx = c = av_mallocz(sizeof(*c)); + mainfunc = avctx->codec->caps_internal & FF_CODEC_CAP_SLICE_THREAD_HAS_MF ? &main_function : NULL; + if (!c || (thread_count = avpriv_slicethread_create(&c->thread, avctx, worker_func, mainfunc, thread_count)) <= 1) { + if (c) + avpriv_slicethread_free(&c->thread); + av_freep(&avctx->internal->thread_ctx); + avctx->thread_count = 1; + avctx->active_thread_type = 0; + return 0; } - - avctx->internal->thread_ctx = c; - c->current_job = 0; - c->job_count = 0; - c->job_size = 0; - c->done = 0; - pthread_cond_init(&c->current_job_cond, NULL); - pthread_cond_init(&c->last_job_cond, NULL); - pthread_mutex_init(&c->current_job_lock, NULL); - pthread_mutex_lock(&c->current_job_lock); - for (i=0; iworkers[i], NULL, worker, avctx)) { - avctx->thread_count = i; - pthread_mutex_unlock(&c->current_job_lock); - ff_thread_free(avctx); - return -1; - } - } - - thread_park_workers(c, thread_count); + avctx->thread_count = thread_count; avctx->execute = thread_execute; avctx->execute2 = thread_execute2; diff --git a/media/ffvpx/libavcodec/put_bits.h b/media/ffvpx/libavcodec/put_bits.h index 68ed39119574..1ceb1cc76624 100644 --- a/media/ffvpx/libavcodec/put_bits.h +++ b/media/ffvpx/libavcodec/put_bits.h @@ -119,6 +119,18 @@ static inline void flush_put_bits(PutBitContext *s) s->bit_buf = 0; } +static inline void flush_put_bits_le(PutBitContext *s) +{ + while (s->bit_left < 32) { + av_assert0(s->buf_ptr < s->buf_end); + *s->buf_ptr++ = s->bit_buf; + s->bit_buf >>= 8; + s->bit_left += 8; + } + s->bit_left = 32; + s->bit_buf = 0; +} + #ifdef BITSTREAM_WRITER_LE #define avpriv_align_put_bits align_put_bits_unsupported_here #define avpriv_put_string ff_put_string_unsupported_here @@ -197,6 +209,34 @@ static inline void put_bits(PutBitContext *s, int n, unsigned int value) s->bit_left = bit_left; } +static inline void put_bits_le(PutBitContext *s, int n, unsigned int value) +{ + unsigned int bit_buf; + int bit_left; + + av_assert2(n <= 31 && value < (1U << n)); + + bit_buf = s->bit_buf; + bit_left = s->bit_left; + + bit_buf |= value << (32 - bit_left); + if (n >= bit_left) { + if (3 < s->buf_end - s->buf_ptr) { + AV_WL32(s->buf_ptr, bit_buf); + s->buf_ptr += 4; + } else { + av_log(NULL, AV_LOG_ERROR, "Internal error, put_bits buffer too small\n"); + av_assert2(0); + } + bit_buf = value >> bit_left; + bit_left += 32; + } + bit_left -= n; + + s->bit_buf = bit_buf; + s->bit_left = bit_left; +} + static inline void put_sbits(PutBitContext *pb, int n, int32_t value) { av_assert2(n >= 0 && n <= 31); @@ -209,15 +249,72 @@ static inline void put_sbits(PutBitContext *pb, int n, int32_t value) */ static void av_unused put_bits32(PutBitContext *s, uint32_t value) { - int lo = value & 0xffff; - int hi = value >> 16; + unsigned int bit_buf; + int bit_left; + + bit_buf = s->bit_buf; + bit_left = s->bit_left; + #ifdef BITSTREAM_WRITER_LE - put_bits(s, 16, lo); - put_bits(s, 16, hi); + bit_buf |= value << (32 - bit_left); + if (3 < s->buf_end - s->buf_ptr) { + AV_WL32(s->buf_ptr, bit_buf); + s->buf_ptr += 4; + } else { + av_log(NULL, AV_LOG_ERROR, "Internal error, put_bits buffer too small\n"); + av_assert2(0); + } + bit_buf = (uint64_t)value >> bit_left; #else - put_bits(s, 16, hi); - put_bits(s, 16, lo); + bit_buf = (uint64_t)bit_buf << bit_left; + bit_buf |= value >> (32 - bit_left); + if (3 < s->buf_end - s->buf_ptr) { + AV_WB32(s->buf_ptr, bit_buf); + s->buf_ptr += 4; + } else { + av_log(NULL, AV_LOG_ERROR, "Internal error, put_bits buffer too small\n"); + av_assert2(0); + } + bit_buf = value; #endif + + s->bit_buf = bit_buf; + s->bit_left = bit_left; +} + +/** + * Write up to 64 bits into a bitstream. + */ +static inline void put_bits64(PutBitContext *s, int n, uint64_t value) +{ + av_assert2((n == 64) || (n < 64 && value < (UINT64_C(1) << n))); + + if (n < 32) + put_bits(s, n, value); + else if (n == 32) + put_bits32(s, value); + else if (n < 64) { + uint32_t lo = value & 0xffffffff; + uint32_t hi = value >> 32; +#ifdef BITSTREAM_WRITER_LE + put_bits32(s, lo); + put_bits(s, n - 32, hi); +#else + put_bits(s, n - 32, hi); + put_bits32(s, lo); +#endif + } else { + uint32_t lo = value & 0xffffffff; + uint32_t hi = value >> 32; +#ifdef BITSTREAM_WRITER_LE + put_bits32(s, lo); + put_bits32(s, hi); +#else + put_bits32(s, hi); + put_bits32(s, lo); +#endif + + } } /** diff --git a/media/ffvpx/libavcodec/ratecontrol.h b/media/ffvpx/libavcodec/ratecontrol.h index c15f9e258edc..2a7aaec644c4 100644 --- a/media/ffvpx/libavcodec/ratecontrol.h +++ b/media/ffvpx/libavcodec/ratecontrol.h @@ -96,8 +96,4 @@ void ff_rate_control_uninit(struct MpegEncContext *s); int ff_vbv_update(struct MpegEncContext *s, int frame_size); void ff_get_2pass_fcode(struct MpegEncContext *s); -int ff_xvid_rate_control_init(struct MpegEncContext *s); -void ff_xvid_rate_control_uninit(struct MpegEncContext *s); -float ff_xvid_rate_estimate_qscale(struct MpegEncContext *s, int dry_run); - #endif /* AVCODEC_RATECONTROL_H */ diff --git a/media/ffvpx/libavcodec/raw.c b/media/ffvpx/libavcodec/raw.c index f73a134a992a..8da2a9735e80 100644 --- a/media/ffvpx/libavcodec/raw.c +++ b/media/ffvpx/libavcodec/raw.c @@ -119,6 +119,12 @@ const PixelFormatTag ff_raw_pix_fmt_tags[] = { { AV_PIX_FMT_RGB48BE, MKTAG( 48, 'R', 'G', 'B') }, { AV_PIX_FMT_BGR48LE, MKTAG('B', 'G', 'R', 48 ) }, { AV_PIX_FMT_BGR48BE, MKTAG( 48, 'B', 'G', 'R') }, + { AV_PIX_FMT_GRAY9LE, MKTAG('Y', '1', 0 , 9 ) }, + { AV_PIX_FMT_GRAY9BE, MKTAG( 9 , 0 , '1', 'Y') }, + { AV_PIX_FMT_GRAY10LE, MKTAG('Y', '1', 0 , 10 ) }, + { AV_PIX_FMT_GRAY10BE, MKTAG(10 , 0 , '1', 'Y') }, + { AV_PIX_FMT_GRAY12LE, MKTAG('Y', '1', 0 , 12 ) }, + { AV_PIX_FMT_GRAY12BE, MKTAG(12 , 0 , '1', 'Y') }, { AV_PIX_FMT_GRAY16LE, MKTAG('Y', '1', 0 , 16 ) }, { AV_PIX_FMT_GRAY16BE, MKTAG(16 , 0 , '1', 'Y') }, { AV_PIX_FMT_YUV420P9LE, MKTAG('Y', '3', 11 , 9 ) }, @@ -266,6 +272,14 @@ const PixelFormatTag ff_raw_pix_fmt_tags[] = { { AV_PIX_FMT_YUV422P10BE, MKTAG('I', '2', 'A', 'B') }, { AV_PIX_FMT_YUV444P10LE, MKTAG('I', '4', 'A', 'L') }, { AV_PIX_FMT_YUV444P10BE, MKTAG('I', '4', 'A', 'B') }, + { AV_PIX_FMT_YUV420P12LE, MKTAG('I', '0', 'C', 'L') }, + { AV_PIX_FMT_YUV420P12BE, MKTAG('I', '0', 'C', 'B') }, + { AV_PIX_FMT_YUV422P12LE, MKTAG('I', '2', 'C', 'L') }, + { AV_PIX_FMT_YUV422P12BE, MKTAG('I', '2', 'C', 'B') }, + { AV_PIX_FMT_YUV444P12LE, MKTAG('I', '4', 'C', 'L') }, + { AV_PIX_FMT_YUV444P12BE, MKTAG('I', '4', 'C', 'B') }, + { AV_PIX_FMT_YUV420P16LE, MKTAG('I', '0', 'F', 'L') }, + { AV_PIX_FMT_YUV420P16BE, MKTAG('I', '0', 'F', 'B') }, { AV_PIX_FMT_YUV444P16LE, MKTAG('I', '4', 'F', 'L') }, { AV_PIX_FMT_YUV444P16BE, MKTAG('I', '4', 'F', 'B') }, diff --git a/media/ffvpx/libavcodec/thread.h b/media/ffvpx/libavcodec/thread.h index c848d7ae8bd3..318619316c98 100644 --- a/media/ffvpx/libavcodec/thread.h +++ b/media/ffvpx/libavcodec/thread.h @@ -34,7 +34,7 @@ typedef struct ThreadFrame { AVFrame *f; - AVCodecContext *owner; + AVCodecContext *owner[2]; // progress->data is an array of 2 ints holding progress for top/bottom // fields AVBufferRef *progress; @@ -133,8 +133,10 @@ void ff_thread_release_buffer(AVCodecContext *avctx, ThreadFrame *f); int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src); int ff_thread_init(AVCodecContext *s); +int ff_slice_thread_execute_with_mainfunc(AVCodecContext *avctx, + int (*action_func2)(AVCodecContext *c, void *arg, int jobnr, int threadnr), + int (*main_func)(AVCodecContext *c), void *arg, int *ret, int job_count); void ff_thread_free(AVCodecContext *s); - int ff_alloc_entries(AVCodecContext *avctx, int count); void ff_reset_entries(AVCodecContext *avctx); void ff_thread_report_progress2(AVCodecContext *avctx, int field, int thread, int n); diff --git a/media/ffvpx/libavcodec/utils.c b/media/ffvpx/libavcodec/utils.c index 87de15fc620d..9551f312e722 100644 --- a/media/ffvpx/libavcodec/utils.c +++ b/media/ffvpx/libavcodec/utils.c @@ -44,6 +44,7 @@ #include "libavutil/dict.h" #include "libavutil/thread.h" #include "avcodec.h" +#include "decode.h" #include "libavutil/opt.h" #include "me_cmp.h" #include "mpegvideo.h" @@ -172,7 +173,7 @@ int av_codec_is_encoder(const AVCodec *codec) int av_codec_is_decoder(const AVCodec *codec) { - return codec && (codec->decode || codec->send_packet); + return codec && (codec->decode || codec->receive_frame); } av_cold void avcodec_register(AVCodec *codec) @@ -209,7 +210,7 @@ void avcodec_set_dimensions(AVCodecContext *s, int width, int height) int ff_set_dimensions(AVCodecContext *s, int width, int height) { - int ret = av_image_check_size(width, height, 0, s); + int ret = av_image_check_size2(width, height, s->max_pixels, AV_PIX_FMT_NONE, 0, s); if (ret < 0) width = height = 0; @@ -376,6 +377,10 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, w_align = 4; h_align = 4; } + if (s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) { + w_align = 8; + h_align = 8; + } break; case AV_PIX_FMT_PAL8: case AV_PIX_FMT_BGR8: @@ -385,7 +390,8 @@ void avcodec_align_dimensions2(AVCodecContext *s, int *width, int *height, w_align = 4; h_align = 4; } - if (s->codec_id == AV_CODEC_ID_JV) { + if (s->codec_id == AV_CODEC_ID_JV || + s->codec_id == AV_CODEC_ID_INTERPLAY_VIDEO) { w_align = 8; h_align = 8; } @@ -503,200 +509,6 @@ int avcodec_fill_audio_frame(AVFrame *frame, int nb_channels, return ret; } -static int update_frame_pool(AVCodecContext *avctx, AVFrame *frame) -{ - FramePool *pool = avctx->internal->pool; - int i, ret; - - switch (avctx->codec_type) { - case AVMEDIA_TYPE_VIDEO: { - uint8_t *data[4]; - int linesize[4]; - int size[4] = { 0 }; - int w = frame->width; - int h = frame->height; - int tmpsize, unaligned; - - if (pool->format == frame->format && - pool->width == frame->width && pool->height == frame->height) - return 0; - - avcodec_align_dimensions2(avctx, &w, &h, pool->stride_align); - - do { - // NOTE: do not align linesizes individually, this breaks e.g. assumptions - // that linesize[0] == 2*linesize[1] in the MPEG-encoder for 4:2:2 - ret = av_image_fill_linesizes(linesize, avctx->pix_fmt, w); - if (ret < 0) - return ret; - // increase alignment of w for next try (rhs gives the lowest bit set in w) - w += w & ~(w - 1); - - unaligned = 0; - for (i = 0; i < 4; i++) - unaligned |= linesize[i] % pool->stride_align[i]; - } while (unaligned); - - tmpsize = av_image_fill_pointers(data, avctx->pix_fmt, h, - NULL, linesize); - if (tmpsize < 0) - return -1; - - for (i = 0; i < 3 && data[i + 1]; i++) - size[i] = data[i + 1] - data[i]; - size[i] = tmpsize - (data[i] - data[0]); - - for (i = 0; i < 4; i++) { - av_buffer_pool_uninit(&pool->pools[i]); - pool->linesize[i] = linesize[i]; - if (size[i]) { - pool->pools[i] = av_buffer_pool_init(size[i] + 16 + STRIDE_ALIGN - 1, - CONFIG_MEMORY_POISONING ? - NULL : - av_buffer_allocz); - if (!pool->pools[i]) { - ret = AVERROR(ENOMEM); - goto fail; - } - } - } - pool->format = frame->format; - pool->width = frame->width; - pool->height = frame->height; - - break; - } - case AVMEDIA_TYPE_AUDIO: { - int ch = av_frame_get_channels(frame); //av_get_channel_layout_nb_channels(frame->channel_layout); - int planar = av_sample_fmt_is_planar(frame->format); - int planes = planar ? ch : 1; - - if (pool->format == frame->format && pool->planes == planes && - pool->channels == ch && frame->nb_samples == pool->samples) - return 0; - - av_buffer_pool_uninit(&pool->pools[0]); - ret = av_samples_get_buffer_size(&pool->linesize[0], ch, - frame->nb_samples, frame->format, 0); - if (ret < 0) - goto fail; - - pool->pools[0] = av_buffer_pool_init(pool->linesize[0], NULL); - if (!pool->pools[0]) { - ret = AVERROR(ENOMEM); - goto fail; - } - - pool->format = frame->format; - pool->planes = planes; - pool->channels = ch; - pool->samples = frame->nb_samples; - break; - } - default: av_assert0(0); - } - return 0; -fail: - for (i = 0; i < 4; i++) - av_buffer_pool_uninit(&pool->pools[i]); - pool->format = -1; - pool->planes = pool->channels = pool->samples = 0; - pool->width = pool->height = 0; - return ret; -} - -static int audio_get_buffer(AVCodecContext *avctx, AVFrame *frame) -{ - FramePool *pool = avctx->internal->pool; - int planes = pool->planes; - int i; - - frame->linesize[0] = pool->linesize[0]; - - if (planes > AV_NUM_DATA_POINTERS) { - frame->extended_data = av_mallocz_array(planes, sizeof(*frame->extended_data)); - frame->nb_extended_buf = planes - AV_NUM_DATA_POINTERS; - frame->extended_buf = av_mallocz_array(frame->nb_extended_buf, - sizeof(*frame->extended_buf)); - if (!frame->extended_data || !frame->extended_buf) { - av_freep(&frame->extended_data); - av_freep(&frame->extended_buf); - return AVERROR(ENOMEM); - } - } else { - frame->extended_data = frame->data; - av_assert0(frame->nb_extended_buf == 0); - } - - for (i = 0; i < FFMIN(planes, AV_NUM_DATA_POINTERS); i++) { - frame->buf[i] = av_buffer_pool_get(pool->pools[0]); - if (!frame->buf[i]) - goto fail; - frame->extended_data[i] = frame->data[i] = frame->buf[i]->data; - } - for (i = 0; i < frame->nb_extended_buf; i++) { - frame->extended_buf[i] = av_buffer_pool_get(pool->pools[0]); - if (!frame->extended_buf[i]) - goto fail; - frame->extended_data[i + AV_NUM_DATA_POINTERS] = frame->extended_buf[i]->data; - } - - if (avctx->debug & FF_DEBUG_BUFFERS) - av_log(avctx, AV_LOG_DEBUG, "default_get_buffer called on frame %p", frame); - - return 0; -fail: - av_frame_unref(frame); - return AVERROR(ENOMEM); -} - -static int video_get_buffer(AVCodecContext *s, AVFrame *pic) -{ - FramePool *pool = s->internal->pool; - const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pic->format); - int i; - - if (pic->data[0] || pic->data[1] || pic->data[2] || pic->data[3]) { - av_log(s, AV_LOG_ERROR, "pic->data[*]!=NULL in avcodec_default_get_buffer\n"); - return -1; - } - - if (!desc) { - av_log(s, AV_LOG_ERROR, - "Unable to get pixel format descriptor for format %s\n", - av_get_pix_fmt_name(pic->format)); - return AVERROR(EINVAL); - } - - memset(pic->data, 0, sizeof(pic->data)); - pic->extended_data = pic->data; - - for (i = 0; i < 4 && pool->pools[i]; i++) { - pic->linesize[i] = pool->linesize[i]; - - pic->buf[i] = av_buffer_pool_get(pool->pools[i]); - if (!pic->buf[i]) - goto fail; - - pic->data[i] = pic->buf[i]->data; - } - for (; i < AV_NUM_DATA_POINTERS; i++) { - pic->data[i] = NULL; - pic->linesize[i] = 0; - } - if (desc->flags & AV_PIX_FMT_FLAG_PAL || - desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) - avpriv_set_systematic_pal2((uint32_t *)pic->data[1], pic->format); - - if (s->debug & FF_DEBUG_BUFFERS) - av_log(s, AV_LOG_DEBUG, "default_get_buffer called on pic %p\n", pic); - - return 0; -fail: - av_frame_unref(pic); - return AVERROR(ENOMEM); -} - void ff_color_frame(AVFrame *frame, const int c[4]) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); @@ -720,287 +532,6 @@ void ff_color_frame(AVFrame *frame, const int c[4]) } } -int avcodec_default_get_buffer2(AVCodecContext *avctx, AVFrame *frame, int flags) -{ - int ret; - - if (avctx->hw_frames_ctx) - return av_hwframe_get_buffer(avctx->hw_frames_ctx, frame, 0); - - if ((ret = update_frame_pool(avctx, frame)) < 0) - return ret; - - switch (avctx->codec_type) { - case AVMEDIA_TYPE_VIDEO: - return video_get_buffer(avctx, frame); - case AVMEDIA_TYPE_AUDIO: - return audio_get_buffer(avctx, frame); - default: - return -1; - } -} - -static int add_metadata_from_side_data(AVPacket *avpkt, AVFrame *frame) -{ - int size; - const uint8_t *side_metadata; - - AVDictionary **frame_md = avpriv_frame_get_metadatap(frame); - - side_metadata = av_packet_get_side_data(avpkt, - AV_PKT_DATA_STRINGS_METADATA, &size); - return av_packet_unpack_dictionary(side_metadata, size, frame_md); -} - -int ff_init_buffer_info(AVCodecContext *avctx, AVFrame *frame) -{ - AVPacket *pkt = avctx->internal->pkt; - int i; - static const struct { - enum AVPacketSideDataType packet; - enum AVFrameSideDataType frame; - } sd[] = { - { AV_PKT_DATA_REPLAYGAIN , AV_FRAME_DATA_REPLAYGAIN }, - { AV_PKT_DATA_DISPLAYMATRIX, AV_FRAME_DATA_DISPLAYMATRIX }, - { 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 }, - }; - - if (pkt) { - frame->pts = pkt->pts; -#if FF_API_PKT_PTS -FF_DISABLE_DEPRECATION_WARNINGS - frame->pkt_pts = pkt->pts; -FF_ENABLE_DEPRECATION_WARNINGS -#endif - av_frame_set_pkt_pos (frame, pkt->pos); - av_frame_set_pkt_duration(frame, pkt->duration); - av_frame_set_pkt_size (frame, pkt->size); - - for (i = 0; i < FF_ARRAY_ELEMS(sd); i++) { - int size; - uint8_t *packet_sd = av_packet_get_side_data(pkt, sd[i].packet, &size); - if (packet_sd) { - AVFrameSideData *frame_sd = av_frame_new_side_data(frame, - sd[i].frame, - size); - if (!frame_sd) - return AVERROR(ENOMEM); - - memcpy(frame_sd->data, packet_sd, size); - } - } - add_metadata_from_side_data(pkt, frame); - - if (pkt->flags & AV_PKT_FLAG_DISCARD) { - frame->flags |= AV_FRAME_FLAG_DISCARD; - } else { - frame->flags = (frame->flags & ~AV_FRAME_FLAG_DISCARD); - } - } else { - frame->pts = AV_NOPTS_VALUE; -#if FF_API_PKT_PTS -FF_DISABLE_DEPRECATION_WARNINGS - frame->pkt_pts = AV_NOPTS_VALUE; -FF_ENABLE_DEPRECATION_WARNINGS -#endif - av_frame_set_pkt_pos (frame, -1); - av_frame_set_pkt_duration(frame, 0); - av_frame_set_pkt_size (frame, -1); - } - frame->reordered_opaque = avctx->reordered_opaque; - - if (frame->color_primaries == AVCOL_PRI_UNSPECIFIED) - frame->color_primaries = avctx->color_primaries; - if (frame->color_trc == AVCOL_TRC_UNSPECIFIED) - frame->color_trc = avctx->color_trc; - if (av_frame_get_colorspace(frame) == AVCOL_SPC_UNSPECIFIED) - av_frame_set_colorspace(frame, avctx->colorspace); - if (av_frame_get_color_range(frame) == AVCOL_RANGE_UNSPECIFIED) - av_frame_set_color_range(frame, avctx->color_range); - if (frame->chroma_location == AVCHROMA_LOC_UNSPECIFIED) - frame->chroma_location = avctx->chroma_sample_location; - - switch (avctx->codec->type) { - case AVMEDIA_TYPE_VIDEO: - frame->format = avctx->pix_fmt; - if (!frame->sample_aspect_ratio.num) - frame->sample_aspect_ratio = avctx->sample_aspect_ratio; - - if (frame->width && frame->height && - av_image_check_sar(frame->width, frame->height, - frame->sample_aspect_ratio) < 0) { - av_log(avctx, AV_LOG_WARNING, "ignoring invalid SAR: %u/%u\n", - frame->sample_aspect_ratio.num, - frame->sample_aspect_ratio.den); - frame->sample_aspect_ratio = (AVRational){ 0, 1 }; - } - - break; - case AVMEDIA_TYPE_AUDIO: - if (!frame->sample_rate) - frame->sample_rate = avctx->sample_rate; - if (frame->format < 0) - frame->format = avctx->sample_fmt; - if (!frame->channel_layout) { - if (avctx->channel_layout) { - if (av_get_channel_layout_nb_channels(avctx->channel_layout) != - avctx->channels) { - av_log(avctx, AV_LOG_ERROR, "Inconsistent channel " - "configuration.\n"); - return AVERROR(EINVAL); - } - - frame->channel_layout = avctx->channel_layout; - } else { - if (avctx->channels > FF_SANE_NB_CHANNELS) { - av_log(avctx, AV_LOG_ERROR, "Too many channels: %d.\n", - avctx->channels); - return AVERROR(ENOSYS); - } - } - } - av_frame_set_channels(frame, avctx->channels); - break; - } - return 0; -} - -int ff_decode_frame_props(AVCodecContext *avctx, AVFrame *frame) -{ - return ff_init_buffer_info(avctx, frame); -} - -static void validate_avframe_allocation(AVCodecContext *avctx, AVFrame *frame) -{ - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { - int i; - int num_planes = av_pix_fmt_count_planes(frame->format); - const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(frame->format); - int flags = desc ? desc->flags : 0; - if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PAL)) - num_planes = 2; - for (i = 0; i < num_planes; i++) { - av_assert0(frame->data[i]); - } - // For now do not enforce anything for palette of pseudopal formats - if (num_planes == 1 && (flags & AV_PIX_FMT_FLAG_PSEUDOPAL)) - num_planes = 2; - // For formats without data like hwaccel allow unused pointers to be non-NULL. - for (i = num_planes; num_planes > 0 && i < FF_ARRAY_ELEMS(frame->data); i++) { - if (frame->data[i]) - av_log(avctx, AV_LOG_ERROR, "Buffer returned by get_buffer2() did not zero unused plane pointers\n"); - frame->data[i] = NULL; - } - } -} - -static int get_buffer_internal(AVCodecContext *avctx, AVFrame *frame, int flags) -{ - const AVHWAccel *hwaccel = avctx->hwaccel; - int override_dimensions = 1; - int ret; - - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { - if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0 || avctx->pix_fmt<0) { - av_log(avctx, AV_LOG_ERROR, "video_get_buffer: image parameters invalid\n"); - return AVERROR(EINVAL); - } - - if (frame->width <= 0 || frame->height <= 0) { - frame->width = FFMAX(avctx->width, AV_CEIL_RSHIFT(avctx->coded_width, avctx->lowres)); - frame->height = FFMAX(avctx->height, AV_CEIL_RSHIFT(avctx->coded_height, avctx->lowres)); - override_dimensions = 0; - } - - if (frame->data[0] || frame->data[1] || frame->data[2] || frame->data[3]) { - av_log(avctx, AV_LOG_ERROR, "pic->data[*]!=NULL in get_buffer_internal\n"); - return AVERROR(EINVAL); - } - } - ret = ff_decode_frame_props(avctx, frame); - if (ret < 0) - return ret; - - if (hwaccel) { - if (hwaccel->alloc_frame) { - ret = hwaccel->alloc_frame(avctx, frame); - goto end; - } - } else - avctx->sw_pix_fmt = avctx->pix_fmt; - - ret = avctx->get_buffer2(avctx, frame, flags); - if (ret >= 0) - validate_avframe_allocation(avctx, frame); - -end: - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO && !override_dimensions) { - frame->width = avctx->width; - frame->height = avctx->height; - } - - return ret; -} - -int ff_get_buffer(AVCodecContext *avctx, AVFrame *frame, int flags) -{ - int ret = get_buffer_internal(avctx, frame, flags); - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n"); - frame->width = frame->height = 0; - } - return ret; -} - -static int reget_buffer_internal(AVCodecContext *avctx, AVFrame *frame) -{ - AVFrame *tmp; - int ret; - - av_assert0(avctx->codec_type == AVMEDIA_TYPE_VIDEO); - - if (frame->data[0] && (frame->width != avctx->width || frame->height != avctx->height || frame->format != avctx->pix_fmt)) { - av_log(avctx, AV_LOG_WARNING, "Picture changed from size:%dx%d fmt:%s to size:%dx%d fmt:%s in reget buffer()\n", - frame->width, frame->height, av_get_pix_fmt_name(frame->format), avctx->width, avctx->height, av_get_pix_fmt_name(avctx->pix_fmt)); - av_frame_unref(frame); - } - - ff_init_buffer_info(avctx, frame); - - if (!frame->data[0]) - return ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF); - - if (av_frame_is_writable(frame)) - return ff_decode_frame_props(avctx, frame); - - tmp = av_frame_alloc(); - if (!tmp) - return AVERROR(ENOMEM); - - av_frame_move_ref(tmp, frame); - - ret = ff_get_buffer(avctx, frame, AV_GET_BUFFER_FLAG_REF); - if (ret < 0) { - av_frame_free(&tmp); - return ret; - } - - av_frame_copy(frame, tmp); - av_frame_free(&tmp); - - return 0; -} - -int ff_reget_buffer(AVCodecContext *avctx, AVFrame *frame) -{ - int ret = reget_buffer_internal(avctx, frame); - if (ret < 0) - av_log(avctx, AV_LOG_ERROR, "reget_buffer() failed\n"); - return ret; -} - int avcodec_default_execute(AVCodecContext *c, int (*func)(AVCodecContext *c2, void *arg2), void *arg, int *ret, int count, int size) { int i; @@ -1038,145 +569,6 @@ enum AVPixelFormat avpriv_find_pix_fmt(const PixelFormatTag *tags, return AV_PIX_FMT_NONE; } -static int is_hwaccel_pix_fmt(enum AVPixelFormat pix_fmt) -{ - const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); - return desc->flags & AV_PIX_FMT_FLAG_HWACCEL; -} - -enum AVPixelFormat avcodec_default_get_format(struct AVCodecContext *s, const enum AVPixelFormat *fmt) -{ - while (*fmt != AV_PIX_FMT_NONE && is_hwaccel_pix_fmt(*fmt)) - ++fmt; - return fmt[0]; -} - -static AVHWAccel *find_hwaccel(enum AVCodecID codec_id, - enum AVPixelFormat pix_fmt) -{ - AVHWAccel *hwaccel = NULL; - - while ((hwaccel = av_hwaccel_next(hwaccel))) - if (hwaccel->id == codec_id - && hwaccel->pix_fmt == pix_fmt) - return hwaccel; - return NULL; -} - -static int setup_hwaccel(AVCodecContext *avctx, - const enum AVPixelFormat fmt, - const char *name) -{ - AVHWAccel *hwa = find_hwaccel(avctx->codec_id, fmt); - int ret = 0; - - if (avctx->active_thread_type & FF_THREAD_FRAME) { - av_log(avctx, AV_LOG_WARNING, - "Hardware accelerated decoding with frame threading is known to be unstable and its use is discouraged.\n"); - } - - if (!hwa) { - av_log(avctx, AV_LOG_ERROR, - "Could not find an AVHWAccel for the pixel format: %s", - name); - return AVERROR(ENOENT); - } - - if (hwa->capabilities & HWACCEL_CODEC_CAP_EXPERIMENTAL && - avctx->strict_std_compliance > FF_COMPLIANCE_EXPERIMENTAL) { - av_log(avctx, AV_LOG_WARNING, "Ignoring experimental hwaccel: %s\n", - hwa->name); - return AVERROR_PATCHWELCOME; - } - - if (hwa->priv_data_size) { - avctx->internal->hwaccel_priv_data = av_mallocz(hwa->priv_data_size); - if (!avctx->internal->hwaccel_priv_data) - return AVERROR(ENOMEM); - } - - if (hwa->init) { - ret = hwa->init(avctx); - if (ret < 0) { - av_freep(&avctx->internal->hwaccel_priv_data); - return ret; - } - } - - avctx->hwaccel = hwa; - - return 0; -} - -int ff_get_format(AVCodecContext *avctx, const enum AVPixelFormat *fmt) -{ - const AVPixFmtDescriptor *desc; - enum AVPixelFormat *choices; - enum AVPixelFormat ret; - unsigned n = 0; - - while (fmt[n] != AV_PIX_FMT_NONE) - ++n; - - av_assert0(n >= 1); - avctx->sw_pix_fmt = fmt[n - 1]; - av_assert2(!is_hwaccel_pix_fmt(avctx->sw_pix_fmt)); - - choices = av_malloc_array(n + 1, sizeof(*choices)); - if (!choices) - return AV_PIX_FMT_NONE; - - memcpy(choices, fmt, (n + 1) * sizeof(*choices)); - - for (;;) { - if (avctx->hwaccel && avctx->hwaccel->uninit) - avctx->hwaccel->uninit(avctx); - av_freep(&avctx->internal->hwaccel_priv_data); - avctx->hwaccel = NULL; - - av_buffer_unref(&avctx->hw_frames_ctx); - - ret = avctx->get_format(avctx, choices); - - desc = av_pix_fmt_desc_get(ret); - if (!desc) { - ret = AV_PIX_FMT_NONE; - break; - } - - if (!(desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) - break; -#if FF_API_CAP_VDPAU - if (avctx->codec->capabilities&AV_CODEC_CAP_HWACCEL_VDPAU) - break; -#endif - - if (avctx->hw_frames_ctx) { - AVHWFramesContext *hw_frames_ctx = (AVHWFramesContext*)avctx->hw_frames_ctx->data; - if (hw_frames_ctx->format != ret) { - av_log(avctx, AV_LOG_ERROR, "Format returned from get_buffer() " - "does not match the format of provided AVHWFramesContext\n"); - ret = AV_PIX_FMT_NONE; - break; - } - } - - if (!setup_hwaccel(avctx, ret, desc->name)) - break; - - /* Remove failed hwaccel from choices */ - for (n = 0; choices[n] != ret; n++) - av_assert0(choices[n] != AV_PIX_FMT_NONE); - - do - choices[n] = choices[n + 1]; - while (choices[n++] != AV_PIX_FMT_NONE); - } - - av_freep(&choices); - return ret; -} - MAKE_ACCESSORS(AVCodecContext, codec, AVRational, pkt_timebase) MAKE_ACCESSORS(AVCodecContext, codec, const AVCodecDescriptor *, codec_descriptor) MAKE_ACCESSORS(AVCodecContext, codec, int, lowres) @@ -1197,12 +589,6 @@ int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec){ return !!(codec->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM); } -static void get_subtitle_defaults(AVSubtitle *sub) -{ - memset(sub, 0, sizeof(*sub)); - sub->pts = AV_NOPTS_VALUE; -} - static int64_t get_bit_rate(AVCodecContext *ctx) { int64_t bit_rate; @@ -1287,6 +673,12 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code goto free_and_end; } + avctx->internal->compat_decode_frame = av_frame_alloc(); + if (!avctx->internal->compat_decode_frame) { + ret = AVERROR(ENOMEM); + goto free_and_end; + } + avctx->internal->buffer_frame = av_frame_alloc(); if (!avctx->internal->buffer_frame) { ret = AVERROR(ENOMEM); @@ -1299,6 +691,20 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code goto free_and_end; } + avctx->internal->ds.in_pkt = av_packet_alloc(); + if (!avctx->internal->ds.in_pkt) { + ret = AVERROR(ENOMEM); + goto free_and_end; + } + + avctx->internal->last_pkt_props = av_packet_alloc(); + if (!avctx->internal->last_pkt_props) { + ret = AVERROR(ENOMEM); + goto free_and_end; + } + + avctx->internal->skip_samples_multiplier = 1; + if (codec->priv_data_size > 0) { if (!avctx->priv_data) { avctx->priv_data = av_mallocz(codec->priv_data_size); @@ -1337,8 +743,8 @@ int attribute_align_arg avcodec_open2(AVCodecContext *avctx, const AVCodec *code } if ((avctx->coded_width || avctx->coded_height || avctx->width || avctx->height) - && ( av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx) < 0 - || av_image_check_size(avctx->width, avctx->height, 0, avctx) < 0)) { + && ( av_image_check_size2(avctx->coded_width, avctx->coded_height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0 + || av_image_check_size2(avctx->width, avctx->height, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0)) { av_log(avctx, AV_LOG_WARNING, "Ignoring invalid width/height values\n"); ff_set_dimensions(avctx, 0, 0); } @@ -1561,11 +967,11 @@ FF_ENABLE_DEPRECATION_WARNINGS } if ( (avctx->codec_type == AVMEDIA_TYPE_VIDEO || avctx->codec_type == AVMEDIA_TYPE_AUDIO) && avctx->bit_rate>0 && avctx->bit_rate<1000) { - av_log(avctx, AV_LOG_WARNING, "Bitrate %"PRId64" is extremely low, maybe you mean %"PRId64"k\n", (int64_t)avctx->bit_rate, (int64_t)avctx->bit_rate); + av_log(avctx, AV_LOG_WARNING, "Bitrate %"PRId64" is extremely low, maybe you mean %"PRId64"k\n", avctx->bit_rate, avctx->bit_rate); } if (!avctx->rc_initial_buffer_occupancy) - avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3 / 4; + avctx->rc_initial_buffer_occupancy = avctx->rc_buffer_size * 3LL / 4; if (avctx->ticks_per_frame && avctx->time_base.num && avctx->ticks_per_frame > INT_MAX / avctx->time_base.num) { @@ -1585,6 +991,17 @@ FF_ENABLE_DEPRECATION_WARNINGS ret = AVERROR(EINVAL); goto free_and_end; } + if (avctx->sw_pix_fmt != AV_PIX_FMT_NONE && + avctx->sw_pix_fmt != frames_ctx->sw_format) { + av_log(avctx, AV_LOG_ERROR, + "Mismatching AVCodecContext.sw_pix_fmt (%s) " + "and AVHWFramesContext.sw_format (%s)\n", + av_get_pix_fmt_name(avctx->sw_pix_fmt), + av_get_pix_fmt_name(frames_ctx->sw_format)); + ret = AVERROR(EINVAL); + goto free_and_end; + } + avctx->sw_pix_fmt = frames_ctx->sw_format; } } @@ -1709,9 +1126,14 @@ FF_ENABLE_DEPRECATION_WARNINGS av_dict_free(&tmp); av_freep(&avctx->priv_data); if (avctx->internal) { - av_packet_free(&avctx->internal->buffer_pkt); - av_frame_free(&avctx->internal->buffer_frame); av_frame_free(&avctx->internal->to_free); + av_frame_free(&avctx->internal->compat_decode_frame); + av_frame_free(&avctx->internal->buffer_frame); + av_packet_free(&avctx->internal->buffer_pkt); + av_packet_free(&avctx->internal->last_pkt_props); + + av_packet_free(&avctx->internal->ds.in_pkt); + av_freep(&avctx->internal->pool); } av_freep(&avctx->internal); @@ -1719,1032 +1141,6 @@ FF_ENABLE_DEPRECATION_WARNINGS goto end; } -int ff_alloc_packet2(AVCodecContext *avctx, AVPacket *avpkt, int64_t size, int64_t min_size) -{ - if (avpkt->size < 0) { - av_log(avctx, AV_LOG_ERROR, "Invalid negative user packet size %d\n", avpkt->size); - return AVERROR(EINVAL); - } - if (size < 0 || size > INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE) { - av_log(avctx, AV_LOG_ERROR, "Invalid minimum required packet size %"PRId64" (max allowed is %d)\n", - size, INT_MAX - AV_INPUT_BUFFER_PADDING_SIZE); - return AVERROR(EINVAL); - } - - if (avctx && 2*min_size < size) { // FIXME The factor needs to be finetuned - av_assert0(!avpkt->data || avpkt->data != avctx->internal->byte_buffer); - if (!avpkt->data || avpkt->size < size) { - av_fast_padded_malloc(&avctx->internal->byte_buffer, &avctx->internal->byte_buffer_size, size); - avpkt->data = avctx->internal->byte_buffer; - avpkt->size = avctx->internal->byte_buffer_size; - } - } - - if (avpkt->data) { - AVBufferRef *buf = avpkt->buf; - - if (avpkt->size < size) { - av_log(avctx, AV_LOG_ERROR, "User packet is too small (%d < %"PRId64")\n", avpkt->size, size); - return AVERROR(EINVAL); - } - - av_init_packet(avpkt); - avpkt->buf = buf; - avpkt->size = size; - return 0; - } else { - int ret = av_new_packet(avpkt, size); - if (ret < 0) - av_log(avctx, AV_LOG_ERROR, "Failed to allocate packet of size %"PRId64"\n", size); - return ret; - } -} - -int ff_alloc_packet(AVPacket *avpkt, int size) -{ - return ff_alloc_packet2(NULL, avpkt, size, 0); -} - -/** - * Pad last frame with silence. - */ -static int pad_last_frame(AVCodecContext *s, AVFrame **dst, const AVFrame *src) -{ - AVFrame *frame = NULL; - int ret; - - if (!(frame = av_frame_alloc())) - return AVERROR(ENOMEM); - - frame->format = src->format; - frame->channel_layout = src->channel_layout; - av_frame_set_channels(frame, av_frame_get_channels(src)); - frame->nb_samples = s->frame_size; - ret = av_frame_get_buffer(frame, 32); - if (ret < 0) - goto fail; - - ret = av_frame_copy_props(frame, src); - if (ret < 0) - goto fail; - - if ((ret = av_samples_copy(frame->extended_data, src->extended_data, 0, 0, - src->nb_samples, s->channels, s->sample_fmt)) < 0) - goto fail; - if ((ret = av_samples_set_silence(frame->extended_data, src->nb_samples, - frame->nb_samples - src->nb_samples, - s->channels, s->sample_fmt)) < 0) - goto fail; - - *dst = frame; - - return 0; - -fail: - av_frame_free(&frame); - return ret; -} - -int attribute_align_arg avcodec_encode_audio2(AVCodecContext *avctx, - AVPacket *avpkt, - const AVFrame *frame, - int *got_packet_ptr) -{ - AVFrame *extended_frame = NULL; - AVFrame *padded_frame = NULL; - int ret; - AVPacket user_pkt = *avpkt; - int needs_realloc = !user_pkt.data; - - *got_packet_ptr = 0; - - if (!avctx->codec->encode2) { - av_log(avctx, AV_LOG_ERROR, "This encoder requires using the avcodec_send_frame() API.\n"); - return AVERROR(ENOSYS); - } - - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) && !frame) { - av_packet_unref(avpkt); - av_init_packet(avpkt); - return 0; - } - - /* ensure that extended_data is properly set */ - if (frame && !frame->extended_data) { - if (av_sample_fmt_is_planar(avctx->sample_fmt) && - avctx->channels > AV_NUM_DATA_POINTERS) { - av_log(avctx, AV_LOG_ERROR, "Encoding to a planar sample format, " - "with more than %d channels, but extended_data is not set.\n", - AV_NUM_DATA_POINTERS); - return AVERROR(EINVAL); - } - av_log(avctx, AV_LOG_WARNING, "extended_data is not set.\n"); - - extended_frame = av_frame_alloc(); - if (!extended_frame) - return AVERROR(ENOMEM); - - memcpy(extended_frame, frame, sizeof(AVFrame)); - extended_frame->extended_data = extended_frame->data; - frame = extended_frame; - } - - /* extract audio service type metadata */ - if (frame) { - AVFrameSideData *sd = av_frame_get_side_data(frame, AV_FRAME_DATA_AUDIO_SERVICE_TYPE); - if (sd && sd->size >= sizeof(enum AVAudioServiceType)) - avctx->audio_service_type = *(enum AVAudioServiceType*)sd->data; - } - - /* check for valid frame size */ - if (frame) { - if (avctx->codec->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME) { - if (frame->nb_samples > avctx->frame_size) { - av_log(avctx, AV_LOG_ERROR, "more samples than frame size (avcodec_encode_audio2)\n"); - ret = AVERROR(EINVAL); - goto end; - } - } else if (!(avctx->codec->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE)) { - if (frame->nb_samples < avctx->frame_size && - !avctx->internal->last_audio_frame) { - ret = pad_last_frame(avctx, &padded_frame, frame); - if (ret < 0) - goto end; - - frame = padded_frame; - avctx->internal->last_audio_frame = 1; - } - - if (frame->nb_samples != avctx->frame_size) { - av_log(avctx, AV_LOG_ERROR, "nb_samples (%d) != frame_size (%d) (avcodec_encode_audio2)\n", frame->nb_samples, avctx->frame_size); - ret = AVERROR(EINVAL); - goto end; - } - } - } - - av_assert0(avctx->codec->encode2); - - ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr); - if (!ret) { - if (*got_packet_ptr) { - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) { - if (avpkt->pts == AV_NOPTS_VALUE) - avpkt->pts = frame->pts; - if (!avpkt->duration) - avpkt->duration = ff_samples_to_time_base(avctx, - frame->nb_samples); - } - avpkt->dts = avpkt->pts; - } else { - avpkt->size = 0; - } - } - if (avpkt->data && avpkt->data == avctx->internal->byte_buffer) { - needs_realloc = 0; - if (user_pkt.data) { - if (user_pkt.size >= avpkt->size) { - memcpy(user_pkt.data, avpkt->data, avpkt->size); - } else { - av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size); - avpkt->size = user_pkt.size; - ret = -1; - } - avpkt->buf = user_pkt.buf; - avpkt->data = user_pkt.data; - } else { - if (av_dup_packet(avpkt) < 0) { - ret = AVERROR(ENOMEM); - } - } - } - - if (!ret) { - if (needs_realloc && avpkt->data) { - ret = av_buffer_realloc(&avpkt->buf, avpkt->size + AV_INPUT_BUFFER_PADDING_SIZE); - if (ret >= 0) - avpkt->data = avpkt->buf->data; - } - - avctx->frame_number++; - } - - if (ret < 0 || !*got_packet_ptr) { - av_packet_unref(avpkt); - av_init_packet(avpkt); - goto end; - } - - /* NOTE: if we add any audio encoders which output non-keyframe packets, - * this needs to be moved to the encoders, but for now we can do it - * here to simplify things */ - avpkt->flags |= AV_PKT_FLAG_KEY; - -end: - av_frame_free(&padded_frame); - av_free(extended_frame); - -#if FF_API_AUDIOENC_DELAY - avctx->delay = avctx->initial_padding; -#endif - - return ret; -} - -int attribute_align_arg avcodec_encode_video2(AVCodecContext *avctx, - AVPacket *avpkt, - const AVFrame *frame, - int *got_packet_ptr) -{ - int ret; - AVPacket user_pkt = *avpkt; - int needs_realloc = !user_pkt.data; - - *got_packet_ptr = 0; - - if (!avctx->codec->encode2) { - av_log(avctx, AV_LOG_ERROR, "This encoder requires using the avcodec_send_frame() API.\n"); - return AVERROR(ENOSYS); - } - - if(CONFIG_FRAME_THREAD_ENCODER && - avctx->internal->frame_thread_encoder && (avctx->active_thread_type&FF_THREAD_FRAME)) - return ff_thread_video_encode_frame(avctx, avpkt, frame, got_packet_ptr); - - if ((avctx->flags&AV_CODEC_FLAG_PASS1) && avctx->stats_out) - avctx->stats_out[0] = '\0'; - - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY) && !frame) { - av_packet_unref(avpkt); - av_init_packet(avpkt); - avpkt->size = 0; - return 0; - } - - if (av_image_check_size(avctx->width, avctx->height, 0, avctx)) - return AVERROR(EINVAL); - - if (frame && frame->format == AV_PIX_FMT_NONE) - av_log(avctx, AV_LOG_WARNING, "AVFrame.format is not set\n"); - if (frame && (frame->width == 0 || frame->height == 0)) - av_log(avctx, AV_LOG_WARNING, "AVFrame.width or height is not set\n"); - - av_assert0(avctx->codec->encode2); - - ret = avctx->codec->encode2(avctx, avpkt, frame, got_packet_ptr); - av_assert0(ret <= 0); - - emms_c(); - - if (avpkt->data && avpkt->data == avctx->internal->byte_buffer) { - needs_realloc = 0; - if (user_pkt.data) { - if (user_pkt.size >= avpkt->size) { - memcpy(user_pkt.data, avpkt->data, avpkt->size); - } else { - av_log(avctx, AV_LOG_ERROR, "Provided packet is too small, needs to be %d\n", avpkt->size); - avpkt->size = user_pkt.size; - ret = -1; - } - avpkt->buf = user_pkt.buf; - avpkt->data = user_pkt.data; - } else { - if (av_dup_packet(avpkt) < 0) { - ret = AVERROR(ENOMEM); - } - } - } - - if (!ret) { - if (!*got_packet_ptr) - avpkt->size = 0; - else if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) - avpkt->pts = avpkt->dts = frame->pts; - - if (needs_realloc && avpkt->data) { - ret = av_buffer_realloc(&avpkt->buf, avpkt->size + AV_INPUT_BUFFER_PADDING_SIZE); - if (ret >= 0) - avpkt->data = avpkt->buf->data; - } - - avctx->frame_number++; - } - - if (ret < 0 || !*got_packet_ptr) - av_packet_unref(avpkt); - - return ret; -} - -int avcodec_encode_subtitle(AVCodecContext *avctx, uint8_t *buf, int buf_size, - const AVSubtitle *sub) -{ - int ret; - if (sub->start_display_time) { - av_log(avctx, AV_LOG_ERROR, "start_display_time must be 0.\n"); - return -1; - } - - ret = avctx->codec->encode_sub(avctx, buf, buf_size, sub); - avctx->frame_number++; - return ret; -} - -/** - * Attempt to guess proper monotonic timestamps for decoded video frames - * which might have incorrect times. Input timestamps may wrap around, in - * which case the output will as well. - * - * @param pts the pts field of the decoded AVPacket, as passed through - * AVFrame.pts - * @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, - 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; - } else if (reordered_pts != AV_NOPTS_VALUE) - ctx->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; - } else if(dts != AV_NOPTS_VALUE) - ctx->pts_correction_last_pts = dts; - - if ((ctx->pts_correction_num_faulty_pts<=ctx->pts_correction_num_faulty_dts || dts == AV_NOPTS_VALUE) - && reordered_pts != AV_NOPTS_VALUE) - pts = reordered_pts; - else - pts = dts; - - return pts; -} - -static int apply_param_change(AVCodecContext *avctx, AVPacket *avpkt) -{ - int size = 0, ret; - const uint8_t *data; - uint32_t flags; - int64_t val; - - data = av_packet_get_side_data(avpkt, AV_PKT_DATA_PARAM_CHANGE, &size); - if (!data) - return 0; - - if (!(avctx->codec->capabilities & AV_CODEC_CAP_PARAM_CHANGE)) { - av_log(avctx, AV_LOG_ERROR, "This decoder does not support parameter " - "changes, but PARAM_CHANGE side data was sent to it.\n"); - ret = AVERROR(EINVAL); - goto fail2; - } - - if (size < 4) - goto fail; - - flags = bytestream_get_le32(&data); - size -= 4; - - 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; - } - avctx->channels = val; - size -= 4; - } - if (flags & AV_SIDE_DATA_PARAM_CHANGE_CHANNEL_LAYOUT) { - if (size < 8) - goto fail; - avctx->channel_layout = bytestream_get_le64(&data); - size -= 8; - } - if (flags & AV_SIDE_DATA_PARAM_CHANGE_SAMPLE_RATE) { - if (size < 4) - goto fail; - val = bytestream_get_le32(&data); - if (val <= 0 || val > INT_MAX) { - av_log(avctx, AV_LOG_ERROR, "Invalid sample rate"); - ret = AVERROR_INVALIDDATA; - goto fail2; - } - avctx->sample_rate = val; - size -= 4; - } - if (flags & AV_SIDE_DATA_PARAM_CHANGE_DIMENSIONS) { - if (size < 8) - goto fail; - avctx->width = bytestream_get_le32(&data); - avctx->height = bytestream_get_le32(&data); - size -= 8; - ret = ff_set_dimensions(avctx, avctx->width, avctx->height); - if (ret < 0) - goto fail2; - } - - return 0; -fail: - av_log(avctx, AV_LOG_ERROR, "PARAM_CHANGE side data too small.\n"); - ret = AVERROR_INVALIDDATA; -fail2: - if (ret < 0) { - av_log(avctx, AV_LOG_ERROR, "Error applying parameter changes.\n"); - if (avctx->err_recognition & AV_EF_EXPLODE) - return ret; - } - return 0; -} - -static int unrefcount_frame(AVCodecInternal *avci, AVFrame *frame) -{ - int ret; - - /* move the original frame to our backup */ - av_frame_unref(avci->to_free); - av_frame_move_ref(avci->to_free, frame); - - /* now copy everything except the AVBufferRefs back - * note that we make a COPY of the side data, so calling av_frame_free() on - * the caller's frame will work properly */ - ret = av_frame_copy_props(frame, avci->to_free); - if (ret < 0) - return ret; - - memcpy(frame->data, avci->to_free->data, sizeof(frame->data)); - memcpy(frame->linesize, avci->to_free->linesize, sizeof(frame->linesize)); - if (avci->to_free->extended_data != avci->to_free->data) { - int planes = av_frame_get_channels(avci->to_free); - int size = planes * sizeof(*frame->extended_data); - - if (!size) { - av_frame_unref(frame); - return AVERROR_BUG; - } - - frame->extended_data = av_malloc(size); - if (!frame->extended_data) { - av_frame_unref(frame); - return AVERROR(ENOMEM); - } - memcpy(frame->extended_data, avci->to_free->extended_data, - size); - } else - frame->extended_data = frame->data; - - frame->format = avci->to_free->format; - frame->width = avci->to_free->width; - frame->height = avci->to_free->height; - frame->channel_layout = avci->to_free->channel_layout; - frame->nb_samples = avci->to_free->nb_samples; - av_frame_set_channels(frame, av_frame_get_channels(avci->to_free)); - - return 0; -} - -int attribute_align_arg avcodec_decode_video2(AVCodecContext *avctx, AVFrame *picture, - int *got_picture_ptr, - const AVPacket *avpkt) -{ - AVCodecInternal *avci = avctx->internal; - int ret; - // copy to ensure we do not change avpkt - AVPacket tmp = *avpkt; - - if (!avctx->codec) - return AVERROR(EINVAL); - if (avctx->codec->type != AVMEDIA_TYPE_VIDEO) { - av_log(avctx, AV_LOG_ERROR, "Invalid media type for video\n"); - return AVERROR(EINVAL); - } - - if (!avctx->codec->decode) { - av_log(avctx, AV_LOG_ERROR, "This decoder requires using the avcodec_send_packet() API.\n"); - return AVERROR(ENOSYS); - } - - *got_picture_ptr = 0; - if ((avctx->coded_width || avctx->coded_height) && av_image_check_size(avctx->coded_width, avctx->coded_height, 0, avctx)) - return AVERROR(EINVAL); - - avctx->internal->pkt = avpkt; - ret = apply_param_change(avctx, avpkt); - if (ret < 0) - return ret; - - av_frame_unref(picture); - - if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size || - (avctx->active_thread_type & FF_THREAD_FRAME)) { - int did_split = av_packet_split_side_data(&tmp); - ret = apply_param_change(avctx, &tmp); - if (ret < 0) - goto fail; - - avctx->internal->pkt = &tmp; - if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) - ret = ff_thread_decode_frame(avctx, picture, got_picture_ptr, - &tmp); - else { - ret = avctx->codec->decode(avctx, picture, got_picture_ptr, - &tmp); - if (!(avctx->codec->caps_internal & FF_CODEC_CAP_SETS_PKT_DTS)) - picture->pkt_dts = avpkt->dts; - - if(!avctx->has_b_frames){ - av_frame_set_pkt_pos(picture, avpkt->pos); - } - //FIXME these should be under if(!avctx->has_b_frames) - /* get_buffer is supposed to set frame parameters */ - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DR1)) { - if (!picture->sample_aspect_ratio.num) picture->sample_aspect_ratio = avctx->sample_aspect_ratio; - if (!picture->width) picture->width = avctx->width; - if (!picture->height) picture->height = avctx->height; - if (picture->format == AV_PIX_FMT_NONE) picture->format = avctx->pix_fmt; - } - } - -fail: - emms_c(); //needed to avoid an emms_c() call before every return; - - avctx->internal->pkt = NULL; - if (did_split) { - av_packet_free_side_data(&tmp); - if(ret == tmp.size) - ret = avpkt->size; - } - if (picture->flags & AV_FRAME_FLAG_DISCARD) { - *got_picture_ptr = 0; - } - if (*got_picture_ptr) { - if (!avctx->refcounted_frames) { - int err = unrefcount_frame(avci, picture); - if (err < 0) - return err; - } - - avctx->frame_number++; - av_frame_set_best_effort_timestamp(picture, - guess_correct_pts(avctx, - picture->pts, - picture->pkt_dts)); - } else - av_frame_unref(picture); - } else - ret = 0; - - /* many decoders assign whole AVFrames, thus overwriting extended_data; - * make sure it's set correctly */ - av_assert0(!picture->extended_data || picture->extended_data == picture->data); - -#if FF_API_AVCTX_TIMEBASE - if (avctx->framerate.num > 0 && avctx->framerate.den > 0) - avctx->time_base = av_inv_q(av_mul_q(avctx->framerate, (AVRational){avctx->ticks_per_frame, 1})); -#endif - - return ret; -} - -int attribute_align_arg avcodec_decode_audio4(AVCodecContext *avctx, - AVFrame *frame, - int *got_frame_ptr, - const AVPacket *avpkt) -{ - AVCodecInternal *avci = avctx->internal; - int ret = 0; - - *got_frame_ptr = 0; - - if (!avctx->codec) - return AVERROR(EINVAL); - - if (!avctx->codec->decode) { - av_log(avctx, AV_LOG_ERROR, "This decoder requires using the avcodec_send_packet() API.\n"); - return AVERROR(ENOSYS); - } - - if (!avpkt->data && avpkt->size) { - av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n"); - return AVERROR(EINVAL); - } - if (avctx->codec->type != AVMEDIA_TYPE_AUDIO) { - av_log(avctx, AV_LOG_ERROR, "Invalid media type for audio\n"); - return AVERROR(EINVAL); - } - - av_frame_unref(frame); - - if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size || (avctx->active_thread_type & FF_THREAD_FRAME)) { - uint8_t *side; - int side_size; - uint32_t discard_padding = 0; - uint8_t skip_reason = 0; - uint8_t discard_reason = 0; - // copy to ensure we do not change avpkt - AVPacket tmp = *avpkt; - int did_split = av_packet_split_side_data(&tmp); - ret = apply_param_change(avctx, &tmp); - if (ret < 0) - goto fail; - - avctx->internal->pkt = &tmp; - if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) - ret = ff_thread_decode_frame(avctx, frame, got_frame_ptr, &tmp); - else { - ret = avctx->codec->decode(avctx, frame, got_frame_ptr, &tmp); - av_assert0(ret <= tmp.size); - frame->pkt_dts = avpkt->dts; - } - if (ret >= 0 && *got_frame_ptr) { - avctx->frame_number++; - av_frame_set_best_effort_timestamp(frame, - guess_correct_pts(avctx, - frame->pts, - frame->pkt_dts)); - if (frame->format == AV_SAMPLE_FMT_NONE) - frame->format = avctx->sample_fmt; - if (!frame->channel_layout) - frame->channel_layout = avctx->channel_layout; - if (!av_frame_get_channels(frame)) - av_frame_set_channels(frame, avctx->channels); - if (!frame->sample_rate) - frame->sample_rate = avctx->sample_rate; - } - - side= av_packet_get_side_data(avctx->internal->pkt, AV_PKT_DATA_SKIP_SAMPLES, &side_size); - if(side && side_size>=10) { - avctx->internal->skip_samples = AV_RL32(side); - discard_padding = AV_RL32(side + 4); - av_log(avctx, AV_LOG_DEBUG, "skip %d / discard %d samples due to side data\n", - avctx->internal->skip_samples, (int)discard_padding); - skip_reason = AV_RL8(side + 8); - discard_reason = AV_RL8(side + 9); - } - - if ((frame->flags & AV_FRAME_FLAG_DISCARD) && *got_frame_ptr && - !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { - avctx->internal->skip_samples -= frame->nb_samples; - *got_frame_ptr = 0; - } - - if (avctx->internal->skip_samples > 0 && *got_frame_ptr && - !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { - if(frame->nb_samples <= avctx->internal->skip_samples){ - *got_frame_ptr = 0; - avctx->internal->skip_samples -= frame->nb_samples; - av_log(avctx, AV_LOG_DEBUG, "skip whole frame, skip left: %d\n", - avctx->internal->skip_samples); - } else { - av_samples_copy(frame->extended_data, frame->extended_data, 0, avctx->internal->skip_samples, - frame->nb_samples - avctx->internal->skip_samples, avctx->channels, frame->format); - if(avctx->pkt_timebase.num && avctx->sample_rate) { - int64_t diff_ts = av_rescale_q(avctx->internal->skip_samples, - (AVRational){1, avctx->sample_rate}, - avctx->pkt_timebase); - if(frame->pts!=AV_NOPTS_VALUE) - frame->pts += diff_ts; -#if FF_API_PKT_PTS -FF_DISABLE_DEPRECATION_WARNINGS - if(frame->pkt_pts!=AV_NOPTS_VALUE) - frame->pkt_pts += diff_ts; -FF_ENABLE_DEPRECATION_WARNINGS -#endif - if(frame->pkt_dts!=AV_NOPTS_VALUE) - frame->pkt_dts += diff_ts; - if (av_frame_get_pkt_duration(frame) >= diff_ts) - av_frame_set_pkt_duration(frame, av_frame_get_pkt_duration(frame) - diff_ts); - } else { - av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for skipped samples.\n"); - } - av_log(avctx, AV_LOG_DEBUG, "skip %d/%d samples\n", - avctx->internal->skip_samples, frame->nb_samples); - frame->nb_samples -= avctx->internal->skip_samples; - avctx->internal->skip_samples = 0; - } - } - - if (discard_padding > 0 && discard_padding <= frame->nb_samples && *got_frame_ptr && - !(avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL)) { - if (discard_padding == frame->nb_samples) { - *got_frame_ptr = 0; - } else { - if(avctx->pkt_timebase.num && avctx->sample_rate) { - int64_t diff_ts = av_rescale_q(frame->nb_samples - discard_padding, - (AVRational){1, avctx->sample_rate}, - avctx->pkt_timebase); - av_frame_set_pkt_duration(frame, diff_ts); - } else { - av_log(avctx, AV_LOG_WARNING, "Could not update timestamps for discarded samples.\n"); - } - av_log(avctx, AV_LOG_DEBUG, "discard %d/%d samples\n", - (int)discard_padding, frame->nb_samples); - frame->nb_samples -= discard_padding; - } - } - - if ((avctx->flags2 & AV_CODEC_FLAG2_SKIP_MANUAL) && *got_frame_ptr) { - AVFrameSideData *fside = av_frame_new_side_data(frame, AV_FRAME_DATA_SKIP_SAMPLES, 10); - if (fside) { - AV_WL32(fside->data, avctx->internal->skip_samples); - AV_WL32(fside->data + 4, discard_padding); - AV_WL8(fside->data + 8, skip_reason); - AV_WL8(fside->data + 9, discard_reason); - avctx->internal->skip_samples = 0; - } - } -fail: - avctx->internal->pkt = NULL; - if (did_split) { - av_packet_free_side_data(&tmp); - if(ret == tmp.size) - ret = avpkt->size; - } - - if (ret >= 0 && *got_frame_ptr) { - if (!avctx->refcounted_frames) { - int err = unrefcount_frame(avci, frame); - if (err < 0) - return err; - } - } else - av_frame_unref(frame); - } - - av_assert0(ret <= avpkt->size); - - if (!avci->showed_multi_packet_warning && - ret >= 0 && ret != avpkt->size && !(avctx->codec->capabilities & AV_CODEC_CAP_SUBFRAMES)) { - av_log(avctx, AV_LOG_WARNING, "Multiple frames in a packet.\n"); - avci->showed_multi_packet_warning = 1; - } - - return ret; -} - -#define UTF8_MAX_BYTES 4 /* 5 and 6 bytes sequences should not be used */ -static int recode_subtitle(AVCodecContext *avctx, - AVPacket *outpkt, const AVPacket *inpkt) -{ -#if CONFIG_ICONV - iconv_t cd = (iconv_t)-1; - int ret = 0; - char *inb, *outb; - size_t inl, outl; - AVPacket tmp; -#endif - - if (avctx->sub_charenc_mode != FF_SUB_CHARENC_MODE_PRE_DECODER || inpkt->size == 0) - return 0; - -#if CONFIG_ICONV - cd = iconv_open("UTF-8", avctx->sub_charenc); - av_assert0(cd != (iconv_t)-1); - - inb = inpkt->data; - inl = inpkt->size; - - if (inl >= INT_MAX / UTF8_MAX_BYTES - AV_INPUT_BUFFER_PADDING_SIZE) { - av_log(avctx, AV_LOG_ERROR, "Subtitles packet is too big for recoding\n"); - ret = AVERROR(ENOMEM); - goto end; - } - - ret = av_new_packet(&tmp, inl * UTF8_MAX_BYTES); - if (ret < 0) - goto end; - outpkt->buf = tmp.buf; - outpkt->data = tmp.data; - outpkt->size = tmp.size; - outb = outpkt->data; - outl = outpkt->size; - - if (iconv(cd, &inb, &inl, &outb, &outl) == (size_t)-1 || - iconv(cd, NULL, NULL, &outb, &outl) == (size_t)-1 || - outl >= outpkt->size || inl != 0) { - ret = FFMIN(AVERROR(errno), -1); - av_log(avctx, AV_LOG_ERROR, "Unable to recode subtitle event \"%s\" " - "from %s to UTF-8\n", inpkt->data, avctx->sub_charenc); - av_packet_unref(&tmp); - goto end; - } - outpkt->size -= outl; - memset(outpkt->data + outpkt->size, 0, outl); - -end: - if (cd != (iconv_t)-1) - iconv_close(cd); - return ret; -#else - av_log(avctx, AV_LOG_ERROR, "requesting subtitles recoding without iconv"); - return AVERROR(EINVAL); -#endif -} - -static int utf8_check(const uint8_t *str) -{ - const uint8_t *byte; - uint32_t codepoint, min; - - while (*str) { - byte = str; - GET_UTF8(codepoint, *(byte++), return 0;); - min = byte - str == 1 ? 0 : byte - str == 2 ? 0x80 : - 1 << (5 * (byte - str) - 4); - if (codepoint < min || codepoint >= 0x110000 || - codepoint == 0xFFFE /* BOM */ || - codepoint >= 0xD800 && codepoint <= 0xDFFF /* surrogates */) - return 0; - str = byte; - } - return 1; -} - -#if FF_API_ASS_TIMING -static void insert_ts(AVBPrint *buf, int ts) -{ - if (ts == -1) { - av_bprintf(buf, "9:59:59.99,"); - } else { - int h, m, s; - - h = ts/360000; ts -= 360000*h; - m = ts/ 6000; ts -= 6000*m; - s = ts/ 100; ts -= 100*s; - av_bprintf(buf, "%d:%02d:%02d.%02d,", h, m, s, ts); - } -} - -static int convert_sub_to_old_ass_form(AVSubtitle *sub, const AVPacket *pkt, AVRational tb) -{ - int i; - AVBPrint buf; - - av_bprint_init(&buf, 0, AV_BPRINT_SIZE_UNLIMITED); - - for (i = 0; i < sub->num_rects; i++) { - char *final_dialog; - const char *dialog; - AVSubtitleRect *rect = sub->rects[i]; - int ts_start, ts_duration = -1; - long int layer; - - if (rect->type != SUBTITLE_ASS || !strncmp(rect->ass, "Dialogue: ", 10)) - continue; - - av_bprint_clear(&buf); - - /* skip ReadOrder */ - dialog = strchr(rect->ass, ','); - if (!dialog) - continue; - dialog++; - - /* extract Layer or Marked */ - layer = strtol(dialog, (char**)&dialog, 10); - if (*dialog != ',') - continue; - dialog++; - - /* rescale timing to ASS time base (ms) */ - ts_start = av_rescale_q(pkt->pts, tb, av_make_q(1, 100)); - if (pkt->duration != -1) - ts_duration = av_rescale_q(pkt->duration, tb, av_make_q(1, 100)); - sub->end_display_time = FFMAX(sub->end_display_time, 10 * ts_duration); - - /* construct ASS (standalone file form with timestamps) string */ - av_bprintf(&buf, "Dialogue: %ld,", layer); - insert_ts(&buf, ts_start); - insert_ts(&buf, ts_duration == -1 ? -1 : ts_start + ts_duration); - av_bprintf(&buf, "%s\r\n", dialog); - - final_dialog = av_strdup(buf.str); - if (!av_bprint_is_complete(&buf) || !final_dialog) { - av_freep(&final_dialog); - av_bprint_finalize(&buf, NULL); - return AVERROR(ENOMEM); - } - av_freep(&rect->ass); - rect->ass = final_dialog; - } - - av_bprint_finalize(&buf, NULL); - return 0; -} -#endif - -int avcodec_decode_subtitle2(AVCodecContext *avctx, AVSubtitle *sub, - int *got_sub_ptr, - AVPacket *avpkt) -{ - int i, ret = 0; - - if (!avpkt->data && avpkt->size) { - av_log(avctx, AV_LOG_ERROR, "invalid packet: NULL data, size != 0\n"); - return AVERROR(EINVAL); - } - 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"); - return AVERROR(EINVAL); - } - - *got_sub_ptr = 0; - get_subtitle_defaults(sub); - - if ((avctx->codec->capabilities & AV_CODEC_CAP_DELAY) || avpkt->size) { - AVPacket pkt_recoded; - AVPacket tmp = *avpkt; - int did_split = av_packet_split_side_data(&tmp); - //apply_param_change(avctx, &tmp); - - if (did_split) { - /* FFMIN() prevents overflow in case the packet wasn't allocated with - * proper padding. - * If the side data is smaller than the buffer padding size, the - * remaining bytes should have already been filled with zeros by the - * original packet allocation anyway. */ - memset(tmp.data + tmp.size, 0, - FFMIN(avpkt->size - tmp.size, AV_INPUT_BUFFER_PADDING_SIZE)); - } - - pkt_recoded = tmp; - ret = recode_subtitle(avctx, &pkt_recoded, &tmp); - if (ret < 0) { - *got_sub_ptr = 0; - } else { - avctx->internal->pkt = &pkt_recoded; - - if (avctx->pkt_timebase.num && avpkt->pts != AV_NOPTS_VALUE) - sub->pts = av_rescale_q(avpkt->pts, - avctx->pkt_timebase, AV_TIME_BASE_Q); - ret = avctx->codec->decode(avctx, sub, got_sub_ptr, &pkt_recoded); - av_assert1((ret >= 0) >= !!*got_sub_ptr && - !!*got_sub_ptr >= !!sub->num_rects); - -#if FF_API_ASS_TIMING - if (avctx->sub_text_format == FF_SUB_TEXT_FMT_ASS_WITH_TIMINGS - && *got_sub_ptr && sub->num_rects) { - const AVRational tb = avctx->pkt_timebase.num ? avctx->pkt_timebase - : avctx->time_base; - int err = convert_sub_to_old_ass_form(sub, avpkt, tb); - if (err < 0) - ret = err; - } -#endif - - if (sub->num_rects && !sub->end_display_time && avpkt->duration && - avctx->pkt_timebase.num) { - AVRational ms = { 1, 1000 }; - sub->end_display_time = av_rescale_q(avpkt->duration, - avctx->pkt_timebase, ms); - } - - for (i = 0; i < sub->num_rects; i++) { - if (sub->rects[i]->ass && !utf8_check(sub->rects[i]->ass)) { - av_log(avctx, AV_LOG_ERROR, - "Invalid UTF-8 in decoded subtitles text; " - "maybe missing -sub_charenc option\n"); - avsubtitle_free(sub); - return AVERROR_INVALIDDATA; - } - } - - if (tmp.data != pkt_recoded.data) { // did we recode? - /* prevent from destroying side data from original packet */ - pkt_recoded.side_data = NULL; - pkt_recoded.side_data_elems = 0; - - av_packet_unref(&pkt_recoded); - } - if (avctx->codec_descriptor->props & AV_CODEC_PROP_BITMAP_SUB) - sub->format = 0; - else if (avctx->codec_descriptor->props & AV_CODEC_PROP_TEXT_SUB) - sub->format = 1; - avctx->internal->pkt = NULL; - } - - if (did_split) { - av_packet_free_side_data(&tmp); - if(ret == tmp.size) - ret = avpkt->size; - } - - if (*got_sub_ptr) - avctx->frame_number++; - } - - return ret; -} - void avsubtitle_free(AVSubtitle *sub) { int i; @@ -2764,262 +1160,6 @@ void avsubtitle_free(AVSubtitle *sub) memset(sub, 0, sizeof(AVSubtitle)); } -static int do_decode(AVCodecContext *avctx, AVPacket *pkt) -{ - int got_frame; - int ret; - - av_assert0(!avctx->internal->buffer_frame->buf[0]); - - if (!pkt) - pkt = avctx->internal->buffer_pkt; - - // This is the lesser evil. The field is for compatibility with legacy users - // of the legacy API, and users using the new API should not be forced to - // even know about this field. - avctx->refcounted_frames = 1; - - // Some codecs (at least wma lossless) will crash when feeding drain packets - // after EOF was signaled. - if (avctx->internal->draining_done) - return AVERROR_EOF; - - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { - ret = avcodec_decode_video2(avctx, avctx->internal->buffer_frame, - &got_frame, pkt); - if (ret >= 0) - ret = pkt->size; - } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { - ret = avcodec_decode_audio4(avctx, avctx->internal->buffer_frame, - &got_frame, pkt); - } else { - ret = AVERROR(EINVAL); - } - - if (ret == AVERROR(EAGAIN)) - ret = pkt->size; - - if (ret < 0) - return ret; - - if (avctx->internal->draining && !got_frame) - avctx->internal->draining_done = 1; - - if (ret >= pkt->size) { - av_packet_unref(avctx->internal->buffer_pkt); - } else { - int consumed = ret; - - if (pkt != avctx->internal->buffer_pkt) { - av_packet_unref(avctx->internal->buffer_pkt); - if ((ret = av_packet_ref(avctx->internal->buffer_pkt, pkt)) < 0) - return ret; - } - - avctx->internal->buffer_pkt->data += consumed; - avctx->internal->buffer_pkt->size -= consumed; - avctx->internal->buffer_pkt->pts = AV_NOPTS_VALUE; - avctx->internal->buffer_pkt->dts = AV_NOPTS_VALUE; - } - - if (got_frame) - av_assert0(avctx->internal->buffer_frame->buf[0]); - - return 0; -} - -int attribute_align_arg avcodec_send_packet(AVCodecContext *avctx, const AVPacket *avpkt) -{ - int ret; - - if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec)) - return AVERROR(EINVAL); - - if (avctx->internal->draining) - return AVERROR_EOF; - - if (avpkt && !avpkt->size && avpkt->data) - return AVERROR(EINVAL); - - if (!avpkt || !avpkt->size) { - avctx->internal->draining = 1; - avpkt = NULL; - - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) - return 0; - } - - if (avctx->codec->send_packet) { - if (avpkt) { - AVPacket tmp = *avpkt; - int did_split = av_packet_split_side_data(&tmp); - ret = apply_param_change(avctx, &tmp); - if (ret >= 0) - ret = avctx->codec->send_packet(avctx, &tmp); - if (did_split) - av_packet_free_side_data(&tmp); - return ret; - } else { - return avctx->codec->send_packet(avctx, NULL); - } - } - - // Emulation via old API. Assume avpkt is likely not refcounted, while - // decoder output is always refcounted, and avoid copying. - - if (avctx->internal->buffer_pkt->size || avctx->internal->buffer_frame->buf[0]) - return AVERROR(EAGAIN); - - // The goal is decoding the first frame of the packet without using memcpy, - // because the common case is having only 1 frame per packet (especially - // with video, but audio too). In other cases, it can't be avoided, unless - // the user is feeding refcounted packets. - return do_decode(avctx, (AVPacket *)avpkt); -} - -int attribute_align_arg avcodec_receive_frame(AVCodecContext *avctx, AVFrame *frame) -{ - int ret; - - av_frame_unref(frame); - - if (!avcodec_is_open(avctx) || !av_codec_is_decoder(avctx->codec)) - return AVERROR(EINVAL); - - if (avctx->codec->receive_frame) { - if (avctx->internal->draining && !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) - return AVERROR_EOF; - ret = avctx->codec->receive_frame(avctx, frame); - if (ret >= 0) { - if (av_frame_get_best_effort_timestamp(frame) == AV_NOPTS_VALUE) { - av_frame_set_best_effort_timestamp(frame, - guess_correct_pts(avctx, frame->pts, frame->pkt_dts)); - } - } - return ret; - } - - // Emulation via old API. - - if (!avctx->internal->buffer_frame->buf[0]) { - if (!avctx->internal->buffer_pkt->size && !avctx->internal->draining) - return AVERROR(EAGAIN); - - while (1) { - if ((ret = do_decode(avctx, avctx->internal->buffer_pkt)) < 0) { - av_packet_unref(avctx->internal->buffer_pkt); - return ret; - } - // Some audio decoders may consume partial data without returning - // a frame (fate-wmapro-2ch). There is no way to make the caller - // call avcodec_receive_frame() again without returning a frame, - // so try to decode more in these cases. - if (avctx->internal->buffer_frame->buf[0] || - !avctx->internal->buffer_pkt->size) - break; - } - } - - if (!avctx->internal->buffer_frame->buf[0]) - return avctx->internal->draining ? AVERROR_EOF : AVERROR(EAGAIN); - - av_frame_move_ref(frame, avctx->internal->buffer_frame); - return 0; -} - -static int do_encode(AVCodecContext *avctx, const AVFrame *frame, int *got_packet) -{ - int ret; - *got_packet = 0; - - av_packet_unref(avctx->internal->buffer_pkt); - avctx->internal->buffer_pkt_valid = 0; - - if (avctx->codec_type == AVMEDIA_TYPE_VIDEO) { - ret = avcodec_encode_video2(avctx, avctx->internal->buffer_pkt, - frame, got_packet); - } else if (avctx->codec_type == AVMEDIA_TYPE_AUDIO) { - ret = avcodec_encode_audio2(avctx, avctx->internal->buffer_pkt, - frame, got_packet); - } else { - ret = AVERROR(EINVAL); - } - - if (ret >= 0 && *got_packet) { - // Encoders must always return ref-counted buffers. - // Side-data only packets have no data and can be not ref-counted. - av_assert0(!avctx->internal->buffer_pkt->data || avctx->internal->buffer_pkt->buf); - avctx->internal->buffer_pkt_valid = 1; - ret = 0; - } else { - av_packet_unref(avctx->internal->buffer_pkt); - } - - return ret; -} - -int attribute_align_arg avcodec_send_frame(AVCodecContext *avctx, const AVFrame *frame) -{ - if (!avcodec_is_open(avctx) || !av_codec_is_encoder(avctx->codec)) - return AVERROR(EINVAL); - - if (avctx->internal->draining) - return AVERROR_EOF; - - if (!frame) { - avctx->internal->draining = 1; - - if (!(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) - return 0; - } - - if (avctx->codec->send_frame) - return avctx->codec->send_frame(avctx, frame); - - // Emulation via old API. Do it here instead of avcodec_receive_packet, because: - // 1. if the AVFrame is not refcounted, the copying will be much more - // expensive than copying the packet data - // 2. assume few users use non-refcounted AVPackets, so usually no copy is - // needed - - if (avctx->internal->buffer_pkt_valid) - return AVERROR(EAGAIN); - - return do_encode(avctx, frame, &(int){0}); -} - -int attribute_align_arg avcodec_receive_packet(AVCodecContext *avctx, AVPacket *avpkt) -{ - av_packet_unref(avpkt); - - if (!avcodec_is_open(avctx) || !av_codec_is_encoder(avctx->codec)) - return AVERROR(EINVAL); - - if (avctx->codec->receive_packet) { - if (avctx->internal->draining && !(avctx->codec->capabilities & AV_CODEC_CAP_DELAY)) - return AVERROR_EOF; - return avctx->codec->receive_packet(avctx, avpkt); - } - - // Emulation via old API. - - if (!avctx->internal->buffer_pkt_valid) { - int got_packet; - int ret; - if (!avctx->internal->draining) - return AVERROR(EAGAIN); - ret = do_encode(avctx, NULL, &got_packet); - if (ret < 0) - return ret; - if (ret >= 0 && !got_packet) - return AVERROR_EOF; - } - - av_packet_move_ref(avpkt, avctx->internal->buffer_pkt); - avctx->internal->buffer_pkt_valid = 0; - return 0; -} - av_cold int avcodec_close(AVCodecContext *avctx) { int i; @@ -3040,8 +1180,13 @@ av_cold int avcodec_close(AVCodecContext *avctx) avctx->internal->byte_buffer_size = 0; av_freep(&avctx->internal->byte_buffer); av_frame_free(&avctx->internal->to_free); + av_frame_free(&avctx->internal->compat_decode_frame); av_frame_free(&avctx->internal->buffer_frame); av_packet_free(&avctx->internal->buffer_pkt); + av_packet_free(&avctx->internal->last_pkt_props); + + av_packet_free(&avctx->internal->ds.in_pkt); + for (i = 0; i < FF_ARRAY_ELEMS(pool->pools); i++) av_buffer_pool_uninit(&pool->pools[i]); av_freep(&avctx->internal->pool); @@ -3050,6 +1195,8 @@ av_cold int avcodec_close(AVCodecContext *avctx) avctx->hwaccel->uninit(avctx); av_freep(&avctx->internal->hwaccel_priv_data); + ff_decode_bsfs_uninit(avctx); + av_freep(&avctx->internal); } @@ -3059,6 +1206,7 @@ av_cold int avcodec_close(AVCodecContext *avctx) avctx->nb_coded_side_data = 0; av_buffer_unref(&avctx->hw_frames_ctx); + av_buffer_unref(&avctx->hw_device_ctx); if (avctx->priv_data && avctx->codec && avctx->codec->priv_class) av_opt_free(avctx->priv_data); @@ -3215,12 +1363,9 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) ", %d reference frame%s", enc->refs, enc->refs > 1 ? "s" : ""); - if (enc->codec_tag) { - char tag_buf[32]; - av_get_codec_tag_string(tag_buf, sizeof(tag_buf), enc->codec_tag); - snprintf(buf + strlen(buf), buf_size - strlen(buf), - " (%s / 0x%04X)", tag_buf, enc->codec_tag); - } + if (enc->codec_tag) + snprintf(buf + strlen(buf), buf_size - strlen(buf), " (%s / 0x%04X)", + av_fourcc2str(enc->codec_tag), enc->codec_tag); switch (enc->codec_type) { case AVMEDIA_TYPE_VIDEO: @@ -3377,7 +1522,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) ", %"PRId64" kb/s", bitrate / 1000); } else if (enc->rc_max_rate > 0) { snprintf(buf + strlen(buf), buf_size - strlen(buf), - ", max. %"PRId64" kb/s", (int64_t)enc->rc_max_rate / 1000); + ", max. %"PRId64" kb/s", enc->rc_max_rate / 1000); } } @@ -3432,26 +1577,6 @@ const char *avcodec_license(void) return LICENSE_PREFIX FFMPEG_LICENSE + sizeof(LICENSE_PREFIX) - 1; } -void avcodec_flush_buffers(AVCodecContext *avctx) -{ - avctx->internal->draining = 0; - avctx->internal->draining_done = 0; - av_frame_unref(avctx->internal->buffer_frame); - av_packet_unref(avctx->internal->buffer_pkt); - avctx->internal->buffer_pkt_valid = 0; - - if (HAVE_THREADS && avctx->active_thread_type & FF_THREAD_FRAME) - ff_thread_flush(avctx); - else if (avctx->codec->flush) - avctx->codec->flush(avctx); - - avctx->pts_correction_last_pts = - avctx->pts_correction_last_dts = INT64_MIN; - - if (!avctx->refcounted_frames) - av_frame_unref(avctx->internal->to_free); -} - int av_get_exact_bits_per_sample(enum AVCodecID codec_id) { switch (codec_id) { @@ -3499,6 +1624,8 @@ int av_get_exact_bits_per_sample(enum AVCodecID codec_id) case AV_CODEC_ID_PCM_U32LE: case AV_CODEC_ID_PCM_F32BE: case AV_CODEC_ID_PCM_F32LE: + case AV_CODEC_ID_PCM_F24LE: + case AV_CODEC_ID_PCM_F16LE: return 32; case AV_CODEC_ID_PCM_F64BE: case AV_CODEC_ID_PCM_F64LE: @@ -3595,6 +1722,9 @@ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, if (id == AV_CODEC_ID_BINKAUDIO_DCT) return (480 << (sr / 22050)) / ch; } + + if (id == AV_CODEC_ID_MP3) + return sr <= 24000 ? 576 : 1152; } if (ba > 0) { @@ -3627,7 +1757,7 @@ static int get_audio_frame_duration(enum AVCodecID id, int sr, int ch, int ba, if (bps > 0) { /* calc from frame_bytes and bits_per_coded_sample */ - if (id == AV_CODEC_ID_ADPCM_G726) + if (id == AV_CODEC_ID_ADPCM_G726 || id == AV_CODEC_ID_ADPCM_G726LE) return frame_bytes * 8 / bps; } @@ -3931,7 +2061,8 @@ int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src) { int ret; - dst->owner = src->owner; + dst->owner[0] = src->owner[0]; + dst->owner[1] = src->owner[1]; ret = av_frame_ref(dst->f, src->f); if (ret < 0) @@ -3941,7 +2072,7 @@ int ff_thread_ref_frame(ThreadFrame *dst, ThreadFrame *src) if (src->progress && !(dst->progress = av_buffer_ref(src->progress))) { - ff_thread_release_buffer(dst->owner, dst); + ff_thread_release_buffer(dst->owner[0], dst); return AVERROR(ENOMEM); } @@ -3957,7 +2088,7 @@ enum AVPixelFormat ff_thread_get_format(AVCodecContext *avctx, const enum AVPixe int ff_thread_get_buffer(AVCodecContext *avctx, ThreadFrame *f, int flags) { - f->owner = avctx; + f->owner[0] = f->owner[1] = avctx; return ff_get_buffer(avctx, f->f, flags); } @@ -4319,3 +2450,24 @@ int ff_alloc_a53_sei(const AVFrame *frame, size_t prefix_len, return 0; } + +int64_t ff_guess_coded_bitrate(AVCodecContext *avctx) +{ + AVRational framerate = avctx->framerate; + int bits_per_coded_sample = avctx->bits_per_coded_sample; + int64_t bitrate; + + if (!(framerate.num && framerate.den)) + framerate = av_inv_q(avctx->time_base); + if (!(framerate.num && framerate.den)) + return 0; + + if (!bits_per_coded_sample) { + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(avctx->pix_fmt); + bits_per_coded_sample = av_get_bits_per_pixel(desc); + } + bitrate = (int64_t)bits_per_coded_sample * avctx->width * avctx->height * + framerate.num / framerate.den; + + return bitrate; +} diff --git a/media/ffvpx/libavcodec/version.h b/media/ffvpx/libavcodec/version.h index ec8837a4e73e..10d9ac4eb3c0 100644 --- a/media/ffvpx/libavcodec/version.h +++ b/media/ffvpx/libavcodec/version.h @@ -28,8 +28,8 @@ #include "libavutil/version.h" #define LIBAVCODEC_VERSION_MAJOR 57 -#define LIBAVCODEC_VERSION_MINOR 64 -#define LIBAVCODEC_VERSION_MICRO 101 +#define LIBAVCODEC_VERSION_MINOR 107 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ @@ -60,9 +60,6 @@ #ifndef FF_API_AVCODEC_RESAMPLE #define FF_API_AVCODEC_RESAMPLE FF_API_AUDIO_CONVERT #endif -#ifndef FF_API_GETCHROMA -#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 58) -#endif #ifndef FF_API_MISSING_SAMPLE #define FF_API_MISSING_SAMPLE (LIBAVCODEC_VERSION_MAJOR < 58) #endif @@ -157,6 +154,9 @@ #ifndef FF_API_VAAPI_CONTEXT #define FF_API_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 58) #endif +#ifndef FF_API_MERGE_SD +#define FF_API_MERGE_SD (LIBAVCODEC_VERSION_MAJOR < 58) +#endif #ifndef FF_API_AVCTX_TIMEBASE #define FF_API_AVCTX_TIMEBASE (LIBAVCODEC_VERSION_MAJOR < 59) #endif @@ -226,5 +226,18 @@ #ifndef FF_API_NVENC_OLD_NAME #define FF_API_NVENC_OLD_NAME (LIBAVCODEC_VERSION_MAJOR < 59) #endif +#ifndef FF_API_STRUCT_VAAPI_CONTEXT +#define FF_API_STRUCT_VAAPI_CONTEXT (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_MERGE_SD_API +#define FF_API_MERGE_SD_API (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_TAG_STRING +#define FF_API_TAG_STRING (LIBAVCODEC_VERSION_MAJOR < 59) +#endif +#ifndef FF_API_GETCHROMA +#define FF_API_GETCHROMA (LIBAVCODEC_VERSION_MAJOR < 59) +#endif + #endif /* AVCODEC_VERSION_H */ diff --git a/media/ffvpx/libavcodec/videodsp.c b/media/ffvpx/libavcodec/videodsp.c index ba618a7bbc6d..ce9e9eb1439d 100644 --- a/media/ffvpx/libavcodec/videodsp.c +++ b/media/ffvpx/libavcodec/videodsp.c @@ -52,4 +52,6 @@ av_cold void ff_videodsp_init(VideoDSPContext *ctx, int bpc) ff_videodsp_init_ppc(ctx, bpc); if (ARCH_X86) ff_videodsp_init_x86(ctx, bpc); + if (ARCH_MIPS) + ff_videodsp_init_mips(ctx, bpc); } diff --git a/media/ffvpx/libavcodec/videodsp.h b/media/ffvpx/libavcodec/videodsp.h index fc01a31dcac3..c0545f22b027 100644 --- a/media/ffvpx/libavcodec/videodsp.h +++ b/media/ffvpx/libavcodec/videodsp.h @@ -83,5 +83,6 @@ void ff_videodsp_init_aarch64(VideoDSPContext *ctx, int bpc); void ff_videodsp_init_arm(VideoDSPContext *ctx, int bpc); void ff_videodsp_init_ppc(VideoDSPContext *ctx, int bpc); void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc); +void ff_videodsp_init_mips(VideoDSPContext *ctx, int bpc); #endif /* AVCODEC_VIDEODSP_H */ diff --git a/media/ffvpx/libavcodec/vlc.h b/media/ffvpx/libavcodec/vlc.h index 9e38f8c6b21a..42ccddf3fc6e 100644 --- a/media/ffvpx/libavcodec/vlc.h +++ b/media/ffvpx/libavcodec/vlc.h @@ -54,12 +54,28 @@ void ff_free_vlc(VLC *vlc); #define INIT_VLC_LE 2 #define INIT_VLC_USE_NEW_STATIC 4 -#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \ +#define INIT_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \ do { \ static VLC_TYPE table[static_size][2]; \ (vlc)->table = table; \ (vlc)->table_allocated = static_size; \ - init_vlc(vlc, bits, a, b, c, d, e, f, g, INIT_VLC_USE_NEW_STATIC); \ + ff_init_vlc_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \ + INIT_VLC_USE_NEW_STATIC); \ } while (0) +#define INIT_LE_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \ + do { \ + static VLC_TYPE table[static_size][2]; \ + (vlc)->table = table; \ + (vlc)->table_allocated = static_size; \ + ff_init_vlc_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \ + INIT_VLC_USE_NEW_STATIC | INIT_VLC_LE); \ + } while (0) + +#define INIT_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \ + INIT_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, NULL, 0, 0, static_size) + +#define INIT_LE_VLC_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \ + INIT_LE_VLC_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, NULL, 0, 0, static_size) + #endif /* AVCODEC_VLC_H */ diff --git a/media/ffvpx/libavcodec/vorbis_parser.h b/media/ffvpx/libavcodec/vorbis_parser.h index 92050277ed19..789932ac4922 100644 --- a/media/ffvpx/libavcodec/vorbis_parser.h +++ b/media/ffvpx/libavcodec/vorbis_parser.h @@ -32,9 +32,6 @@ typedef struct AVVorbisParseContext AVVorbisParseContext; /** * Allocate and initialize the Vorbis parser using headers in the extradata. - * - * @param avctx codec context - * @param s Vorbis parser context */ AVVorbisParseContext *av_vorbis_parse_init(const uint8_t *extradata, int extradata_size); diff --git a/media/ffvpx/libavcodec/vp3dsp.h b/media/ffvpx/libavcodec/vp3dsp.h index b95adae79e15..2fdad162caab 100644 --- a/media/ffvpx/libavcodec/vp3dsp.h +++ b/media/ffvpx/libavcodec/vp3dsp.h @@ -38,11 +38,11 @@ typedef struct VP3DSPContext { const uint8_t *b, ptrdiff_t stride, int h); - void (*idct_put)(uint8_t *dest, int line_size, int16_t *block); - void (*idct_add)(uint8_t *dest, int line_size, int16_t *block); - void (*idct_dc_add)(uint8_t *dest, int line_size, int16_t *block); - void (*v_loop_filter)(uint8_t *src, int stride, int *bounding_values); - void (*h_loop_filter)(uint8_t *src, int stride, int *bounding_values); + void (*idct_put)(uint8_t *dest, ptrdiff_t stride, int16_t *block); + void (*idct_add)(uint8_t *dest, ptrdiff_t stride, int16_t *block); + void (*idct_dc_add)(uint8_t *dest, ptrdiff_t stride, int16_t *block); + void (*v_loop_filter)(uint8_t *src, ptrdiff_t stride, int *bounding_values); + void (*h_loop_filter)(uint8_t *src, ptrdiff_t stride, int *bounding_values); } VP3DSPContext; void ff_vp3dsp_init(VP3DSPContext *c, int flags); diff --git a/media/ffvpx/libavcodec/vp56.h b/media/ffvpx/libavcodec/vp56.h index 56c30919b7d8..b8dda9e73a54 100644 --- a/media/ffvpx/libavcodec/vp56.h +++ b/media/ffvpx/libavcodec/vp56.h @@ -26,6 +26,7 @@ #ifndef AVCODEC_VP56_H #define AVCODEC_VP56_H +#include "avcodec.h" #include "get_bits.h" #include "hpeldsp.h" #include "bytestream.h" @@ -72,9 +73,9 @@ typedef struct VP56mv { typedef void (*VP56ParseVectorAdjustment)(VP56Context *s, VP56mv *vect); typedef void (*VP56Filter)(VP56Context *s, uint8_t *dst, uint8_t *src, - int offset1, int offset2, int stride, + int offset1, int offset2, ptrdiff_t stride, VP56mv mv, int mask, int select, int luma); -typedef void (*VP56ParseCoeff)(VP56Context *s); +typedef int (*VP56ParseCoeff)(VP56Context *s); typedef void (*VP56DefaultModelsInit)(VP56Context *s); typedef void (*VP56ParseVectorModels)(VP56Context *s); typedef int (*VP56ParseCoeffModels)(VP56Context *s); @@ -179,7 +180,7 @@ struct vp56_context { int flip; /* are we flipping ? */ int frbi; /* first row block index in MB */ int srbi; /* second row block index in MB */ - int stride[4]; /* stride for each plan */ + ptrdiff_t stride[4]; /* stride for each plan */ const uint8_t *vp56_coord_div; VP56ParseVectorAdjustment parse_vector_adjustment; @@ -203,6 +204,9 @@ struct vp56_context { VLC runv_vlc[2]; VLC ract_vlc[2][3][6]; unsigned int nb_null[2][2]; /* number of consecutive NULL DC/AC */ + + int have_undamaged_frame; + int discard_frame; }; @@ -221,7 +225,7 @@ int ff_vp56_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, */ extern const uint8_t ff_vp56_norm_shift[256]; -void ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size); +int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size); static av_always_inline unsigned int vp56_rac_renorm(VP56RangeCoder *c) { diff --git a/media/ffvpx/libavcodec/vp56dsp.h b/media/ffvpx/libavcodec/vp56dsp.h index 7807baa4b173..e35e232ea35e 100644 --- a/media/ffvpx/libavcodec/vp56dsp.h +++ b/media/ffvpx/libavcodec/vp56dsp.h @@ -21,22 +21,24 @@ #ifndef AVCODEC_VP56DSP_H #define AVCODEC_VP56DSP_H +#include #include -#include "avcodec.h" typedef struct VP56DSPContext { - void (*edge_filter_hor)(uint8_t *yuv, int stride, int t); - void (*edge_filter_ver)(uint8_t *yuv, int stride, int t); + void (*edge_filter_hor)(uint8_t *yuv, ptrdiff_t stride, int t); + void (*edge_filter_ver)(uint8_t *yuv, ptrdiff_t stride, int t); - void (*vp6_filter_diag4)(uint8_t *dst, uint8_t *src, int stride, + void (*vp6_filter_diag4)(uint8_t *dst, uint8_t *src, ptrdiff_t stride, const int16_t *h_weights,const int16_t *v_weights); } VP56DSPContext; -void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, int stride, +void ff_vp6_filter_diag4_c(uint8_t *dst, uint8_t *src, ptrdiff_t stride, const int16_t *h_weights, const int16_t *v_weights); -void ff_vp56dsp_init(VP56DSPContext *s, enum AVCodecID codec); -void ff_vp6dsp_init_arm(VP56DSPContext *s, enum AVCodecID codec); -void ff_vp6dsp_init_x86(VP56DSPContext* c, enum AVCodecID codec); +void ff_vp5dsp_init(VP56DSPContext *s); +void ff_vp6dsp_init(VP56DSPContext *s); + +void ff_vp6dsp_init_arm(VP56DSPContext *s); +void ff_vp6dsp_init_x86(VP56DSPContext *s); #endif /* AVCODEC_VP56DSP_H */ diff --git a/media/ffvpx/libavcodec/vp56rac.c b/media/ffvpx/libavcodec/vp56rac.c index 6061b7ee72c8..e70302bf856d 100644 --- a/media/ffvpx/libavcodec/vp56rac.c +++ b/media/ffvpx/libavcodec/vp56rac.c @@ -37,11 +37,14 @@ const uint8_t ff_vp56_norm_shift[256]= { 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, }; -void ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size) +int ff_vp56_init_range_decoder(VP56RangeCoder *c, const uint8_t *buf, int buf_size) { c->high = 255; c->bits = -16; c->buffer = buf; c->end = buf + buf_size; + if (buf_size < 1) + return AVERROR_INVALIDDATA; c->code_word = bytestream_get_be24(&c->buffer); + return 0; } diff --git a/media/ffvpx/libavcodec/vp8.c b/media/ffvpx/libavcodec/vp8.c index c1c3eb707244..7841a9d964e7 100644 --- a/media/ffvpx/libavcodec/vp8.c +++ b/media/ffvpx/libavcodec/vp8.c @@ -261,6 +261,7 @@ static int setup_partitions(VP8Context *s, const uint8_t *buf, int buf_size) { const uint8_t *sizes = buf; int i; + int ret; s->num_coeff_partitions = 1 << vp8_rac_get_uint(&s->c, 2); @@ -274,13 +275,13 @@ static int setup_partitions(VP8Context *s, const uint8_t *buf, int buf_size) if (buf_size - size < 0) return -1; - ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, size); + ret = ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, size); + if (ret < 0) + return ret; buf += size; buf_size -= size; } - ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, buf_size); - - return 0; + return ff_vp56_init_range_decoder(&s->coeff_partition[i], buf, buf_size); } static void vp7_get_quants(VP8Context *s) @@ -434,8 +435,8 @@ static void copy_chroma(AVFrame *dst, AVFrame *src, int width, int height) } } -static void fade(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, +static void fade(uint8_t *dst, ptrdiff_t dst_linesize, + const uint8_t *src, ptrdiff_t src_linesize, int width, int height, int alpha, int beta) { @@ -518,7 +519,9 @@ static int vp7_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_si memcpy(s->put_pixels_tab, s->vp8dsp.put_vp8_epel_pixels_tab, sizeof(s->put_pixels_tab)); - ff_vp56_init_range_decoder(c, buf, part1_size); + ret = ff_vp56_init_range_decoder(c, buf, part1_size); + if (ret < 0) + return ret; buf += part1_size; buf_size -= part1_size; @@ -570,7 +573,9 @@ static int vp7_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_si s->lf_delta.enabled = 0; s->num_coeff_partitions = 1; - ff_vp56_init_range_decoder(&s->coeff_partition[0], buf, buf_size); + ret = ff_vp56_init_range_decoder(&s->coeff_partition[0], buf, buf_size); + if (ret < 0) + return ret; if (!s->macroblocks_base || /* first frame */ width != s->avctx->width || height != s->avctx->height || @@ -699,7 +704,9 @@ static int vp8_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_si memset(&s->lf_delta, 0, sizeof(s->lf_delta)); } - ff_vp56_init_range_decoder(c, buf, header_size); + ret = ff_vp56_init_range_decoder(c, buf, header_size); + if (ret < 0) + return ret; buf += header_size; buf_size -= header_size; @@ -765,7 +772,7 @@ static int vp8_decode_frame_header(VP8Context *s, const uint8_t *buf, int buf_si } static av_always_inline -void clamp_mv(VP8Context *s, VP56mv *dst, const VP56mv *src) +void clamp_mv(VP8mvbounds *s, VP56mv *dst, const VP56mv *src) { dst->x = av_clip(src->x, av_clip(s->mv_min.x, INT16_MIN, INT16_MAX), av_clip(s->mv_max.x, INT16_MIN, INT16_MAX)); @@ -1024,7 +1031,7 @@ void vp7_decode_mvs(VP8Context *s, VP8Macroblock *mb, } static av_always_inline -void vp8_decode_mvs(VP8Context *s, VP8Macroblock *mb, +void vp8_decode_mvs(VP8Context *s, VP8mvbounds *mv_bounds, VP8Macroblock *mb, int mb_x, int mb_y, int layout) { VP8Macroblock *mb_edge[3] = { 0 /* top */, @@ -1095,7 +1102,7 @@ void vp8_decode_mvs(VP8Context *s, VP8Macroblock *mb, if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAREST]][1])) { if (vp56_rac_get_prob_branchy(c, vp8_mode_contexts[cnt[CNT_NEAR]][2])) { /* Choose the best mv out of 0,0 and the nearest mv */ - clamp_mv(s, &mb->mv, &near_mv[CNT_ZERO + (cnt[CNT_NEAREST] >= cnt[CNT_ZERO])]); + clamp_mv(mv_bounds, &mb->mv, &near_mv[CNT_ZERO + (cnt[CNT_NEAREST] >= cnt[CNT_ZERO])]); cnt[CNT_SPLITMV] = ((mb_edge[VP8_EDGE_LEFT]->mode == VP8_MVMODE_SPLIT) + (mb_edge[VP8_EDGE_TOP]->mode == VP8_MVMODE_SPLIT)) * 2 + (mb_edge[VP8_EDGE_TOPLEFT]->mode == VP8_MVMODE_SPLIT); @@ -1109,11 +1116,11 @@ void vp8_decode_mvs(VP8Context *s, VP8Macroblock *mb, mb->bmv[0] = mb->mv; } } else { - clamp_mv(s, &mb->mv, &near_mv[CNT_NEAR]); + clamp_mv(mv_bounds, &mb->mv, &near_mv[CNT_NEAR]); mb->bmv[0] = mb->mv; } } else { - clamp_mv(s, &mb->mv, &near_mv[CNT_NEAREST]); + clamp_mv(mv_bounds, &mb->mv, &near_mv[CNT_NEAREST]); mb->bmv[0] = mb->mv; } } else { @@ -1159,14 +1166,15 @@ void decode_intra4x4_modes(VP8Context *s, VP56RangeCoder *c, VP8Macroblock *mb, } static av_always_inline -void decode_mb_mode(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, +void decode_mb_mode(VP8Context *s, VP8mvbounds *mv_bounds, + VP8Macroblock *mb, int mb_x, int mb_y, uint8_t *segment, uint8_t *ref, int layout, int is_vp7) { VP56RangeCoder *c = &s->c; - static const char *vp7_feature_name[] = { "q-index", - "lf-delta", - "partial-golden-update", - "blit-pitch" }; + static const char * const vp7_feature_name[] = { "q-index", + "lf-delta", + "partial-golden-update", + "blit-pitch" }; if (is_vp7) { int i; *segment = 0; @@ -1223,7 +1231,7 @@ void decode_mb_mode(VP8Context *s, VP8Macroblock *mb, int mb_x, int mb_y, if (is_vp7) vp7_decode_mvs(s, mb, mb_x, mb_y, layout); else - vp8_decode_mvs(s, mb, mb_x, mb_y, layout); + vp8_decode_mvs(s, mv_bounds, mb, mb_x, mb_y, layout); } else { // intra MB, 16.1 mb->mode = vp8_rac_get_tree(c, vp8_pred16x16_tree_inter, s->prob->pred16x16); @@ -1461,7 +1469,7 @@ void decode_mb_coeffs(VP8Context *s, VP8ThreadData *td, VP56RangeCoder *c, static av_always_inline void backup_mb_border(uint8_t *top_border, uint8_t *src_y, uint8_t *src_cb, uint8_t *src_cr, - int linesize, int uvlinesize, int simple) + ptrdiff_t linesize, ptrdiff_t uvlinesize, int simple) { AV_COPY128(top_border, src_y + 15 * linesize); if (!simple) { @@ -1472,7 +1480,7 @@ void backup_mb_border(uint8_t *top_border, uint8_t *src_y, static av_always_inline void xchg_mb_border(uint8_t *top_border, uint8_t *src_y, uint8_t *src_cb, - uint8_t *src_cr, int linesize, int uvlinesize, int mb_x, + uint8_t *src_cr, ptrdiff_t linesize, ptrdiff_t uvlinesize, int mb_x, int mb_y, int mb_width, int simple, int xchg) { uint8_t *top_border_m1 = top_border - 32; // for TL prediction @@ -1625,7 +1633,8 @@ void intra_predict(VP8Context *s, VP8ThreadData *td, uint8_t *dst[3], for (y = 0; y < 4; y++) { uint8_t *topright = ptr + 4 - s->linesize; for (x = 0; x < 4; x++) { - int copy = 0, linesize = s->linesize; + int copy = 0; + ptrdiff_t linesize = s->linesize; uint8_t *dst = ptr + 4 * x; LOCAL_ALIGNED(4, uint8_t, copy_dst, [5 * 8]); @@ -1731,7 +1740,7 @@ void vp8_mc_luma(VP8Context *s, VP8ThreadData *td, uint8_t *dst, uint8_t *src = ref->f->data[0]; if (AV_RN32A(mv)) { - int src_linesize = linesize; + ptrdiff_t src_linesize = linesize; int mx = (mv->x * 2) & 7, mx_idx = subpel_idx[0][mx]; int my = (mv->y * 2) & 7, my_idx = subpel_idx[0][my]; @@ -2077,8 +2086,8 @@ void filter_mb(VP8Context *s, uint8_t *dst[3], VP8FilterStrength *f, int filter_level = f->filter_level; int inner_limit = f->inner_limit; int inner_filter = f->inner_filter; - int linesize = s->linesize; - int uvlinesize = s->uvlinesize; + ptrdiff_t linesize = s->linesize; + ptrdiff_t uvlinesize = s->uvlinesize; static const uint8_t hev_thresh_lut[2][64] = { { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, @@ -2164,7 +2173,7 @@ void filter_mb_simple(VP8Context *s, uint8_t *dst, VP8FilterStrength *f, int filter_level = f->filter_level; int inner_limit = f->inner_limit; int inner_filter = f->inner_filter; - int linesize = s->linesize; + ptrdiff_t linesize = s->linesize; if (!filter_level) return; @@ -2197,8 +2206,8 @@ void vp78_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *curframe, VP8Context *s = avctx->priv_data; int mb_x, mb_y; - s->mv_min.y = -MARGIN; - s->mv_max.y = ((s->mb_height - 1) << 6) + MARGIN; + s->mv_bounds.mv_min.y = -MARGIN; + s->mv_bounds.mv_max.y = ((s->mb_height - 1) << 6) + MARGIN; for (mb_y = 0; mb_y < s->mb_height; mb_y++) { VP8Macroblock *mb = s->macroblocks_base + ((s->mb_width + 1) * (mb_y + 1) + 1); @@ -2206,20 +2215,20 @@ void vp78_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *curframe, AV_WN32A(s->intra4x4_pred_mode_left, DC_PRED * 0x01010101); - s->mv_min.x = -MARGIN; - s->mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; + s->mv_bounds.mv_min.x = -MARGIN; + s->mv_bounds.mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb_xy++, mb++) { if (mb_y == 0) AV_WN32A((mb - s->mb_width - 1)->intra4x4_pred_mode_top, DC_PRED * 0x01010101); - decode_mb_mode(s, mb, mb_x, mb_y, curframe->seg_map->data + mb_xy, + decode_mb_mode(s, &s->mv_bounds, mb, mb_x, mb_y, curframe->seg_map->data + mb_xy, prev_frame && prev_frame->seg_map ? prev_frame->seg_map->data + mb_xy : NULL, 1, is_vp7); - s->mv_min.x -= 64; - s->mv_max.x -= 64; + s->mv_bounds.mv_min.x -= 64; + s->mv_bounds.mv_max.x -= 64; } - s->mv_min.y -= 64; - s->mv_max.y -= 64; + s->mv_bounds.mv_min.y -= 64; + s->mv_bounds.mv_max.y -= 64; } } @@ -2239,15 +2248,15 @@ static void vp8_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame, #define check_thread_pos(td, otd, mb_x_check, mb_y_check) \ do { \ int tmp = (mb_y_check << 16) | (mb_x_check & 0xFFFF); \ - if (otd->thread_mb_pos < tmp) { \ + if (atomic_load(&otd->thread_mb_pos) < tmp) { \ pthread_mutex_lock(&otd->lock); \ - td->wait_mb_pos = tmp; \ + atomic_store(&td->wait_mb_pos, tmp); \ do { \ - if (otd->thread_mb_pos >= tmp) \ + if (atomic_load(&otd->thread_mb_pos) >= tmp) \ break; \ pthread_cond_wait(&otd->cond, &otd->lock); \ } while (1); \ - td->wait_mb_pos = INT_MAX; \ + atomic_store(&td->wait_mb_pos, INT_MAX); \ pthread_mutex_unlock(&otd->lock); \ } \ } while (0) @@ -2258,12 +2267,10 @@ static void vp8_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame, int sliced_threading = (avctx->active_thread_type == FF_THREAD_SLICE) && \ (num_jobs > 1); \ int is_null = !next_td || !prev_td; \ - int pos_check = (is_null) ? 1 \ - : (next_td != td && \ - pos >= next_td->wait_mb_pos) || \ - (prev_td != td && \ - pos >= prev_td->wait_mb_pos); \ - td->thread_mb_pos = pos; \ + int pos_check = (is_null) ? 1 : \ + (next_td != td && pos >= atomic_load(&next_td->wait_mb_pos)) || \ + (prev_td != td && pos >= atomic_load(&prev_td->wait_mb_pos)); \ + atomic_store(&td->thread_mb_pos, pos); \ if (sliced_threading && pos_check) { \ pthread_mutex_lock(&td->lock); \ pthread_cond_broadcast(&td->cond); \ @@ -2275,12 +2282,12 @@ static void vp8_decode_mv_mb_modes(AVCodecContext *avctx, VP8Frame *cur_frame, #define update_pos(td, mb_y, mb_x) while(0) #endif -static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void *tdata, +static av_always_inline int decode_mb_row_no_filter(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr, int is_vp7) { VP8Context *s = avctx->priv_data; VP8ThreadData *prev_td, *next_td, *td = &s->thread_data[threadnr]; - int mb_y = td->thread_mb_pos >> 16; + int mb_y = atomic_load(&td->thread_mb_pos) >> 16; int mb_x, mb_xy = mb_y * s->mb_width; int num_jobs = s->num_jobs; VP8Frame *curframe = s->curframe, *prev_frame = s->prev_frame; @@ -2291,6 +2298,10 @@ static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void curframe->tf.f->data[1] + 8 * mb_y * s->uvlinesize, curframe->tf.f->data[2] + 8 * mb_y * s->uvlinesize }; + + if (c->end <= c->buffer && c->bits >= 0) + return AVERROR_INVALIDDATA; + if (mb_y == 0) prev_td = td; else @@ -2315,10 +2326,12 @@ static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void if (!is_vp7 || mb_y == 0) memset(td->left_nnz, 0, sizeof(td->left_nnz)); - s->mv_min.x = -MARGIN; - s->mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; + td->mv_bounds.mv_min.x = -MARGIN; + td->mv_bounds.mv_max.x = ((s->mb_width - 1) << 6) + MARGIN; for (mb_x = 0; mb_x < s->mb_width; mb_x++, mb_xy++, mb++) { + if (c->end <= c->buffer && c->bits >= 0) + return AVERROR_INVALIDDATA; // Wait for previous thread to read mb_x+2, and reach mb_y-1. if (prev_td != td) { if (threadnr != 0) { @@ -2338,7 +2351,7 @@ static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void dst[2] - dst[1], 2); if (!s->mb_layout) - decode_mb_mode(s, mb, mb_x, mb_y, curframe->seg_map->data + mb_xy, + decode_mb_mode(s, &td->mv_bounds, mb, mb_x, mb_y, curframe->seg_map->data + mb_xy, prev_frame && prev_frame->seg_map ? prev_frame->seg_map->data + mb_xy : NULL, 0, is_vp7); @@ -2385,8 +2398,8 @@ static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void dst[0] += 16; dst[1] += 8; dst[2] += 8; - s->mv_min.x -= 64; - s->mv_max.x -= 64; + td->mv_bounds.mv_min.x -= 64; + td->mv_bounds.mv_max.x -= 64; if (mb_x == s->mb_width + 1) { update_pos(td, mb_y, s->mb_width + 3); @@ -2394,18 +2407,19 @@ static av_always_inline void decode_mb_row_no_filter(AVCodecContext *avctx, void update_pos(td, mb_y, mb_x); } } + return 0; } -static void vp7_decode_mb_row_no_filter(AVCodecContext *avctx, void *tdata, +static int vp7_decode_mb_row_no_filter(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr) { - decode_mb_row_no_filter(avctx, tdata, jobnr, threadnr, 1); + return decode_mb_row_no_filter(avctx, tdata, jobnr, threadnr, 1); } -static void vp8_decode_mb_row_no_filter(AVCodecContext *avctx, void *tdata, +static int vp8_decode_mb_row_no_filter(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr) { - decode_mb_row_no_filter(avctx, tdata, jobnr, threadnr, 0); + return decode_mb_row_no_filter(avctx, tdata, jobnr, threadnr, 0); } static av_always_inline void filter_mb_row(AVCodecContext *avctx, void *tdata, @@ -2413,7 +2427,7 @@ static av_always_inline void filter_mb_row(AVCodecContext *avctx, void *tdata, { VP8Context *s = avctx->priv_data; VP8ThreadData *td = &s->thread_data[threadnr]; - int mb_x, mb_y = td->thread_mb_pos >> 16, num_jobs = s->num_jobs; + int mb_x, mb_y = atomic_load(&td->thread_mb_pos) >> 16, num_jobs = s->num_jobs; AVFrame *curframe = s->curframe->tf.f; VP8Macroblock *mb; VP8ThreadData *prev_td, *next_td; @@ -2488,19 +2502,24 @@ int vp78_decode_mb_row_sliced(AVCodecContext *avctx, void *tdata, int jobnr, VP8ThreadData *next_td = NULL, *prev_td = NULL; VP8Frame *curframe = s->curframe; int mb_y, num_jobs = s->num_jobs; + int ret; td->thread_nr = threadnr; + td->mv_bounds.mv_min.y = -MARGIN - 64 * threadnr; + td->mv_bounds.mv_max.y = ((s->mb_height - 1) << 6) + MARGIN - 64 * threadnr; for (mb_y = jobnr; mb_y < s->mb_height; mb_y += num_jobs) { - if (mb_y >= s->mb_height) - break; - td->thread_mb_pos = mb_y << 16; - s->decode_mb_row_no_filter(avctx, tdata, jobnr, threadnr); + atomic_store(&td->thread_mb_pos, mb_y << 16); + ret = s->decode_mb_row_no_filter(avctx, tdata, jobnr, threadnr); + if (ret < 0) { + update_pos(td, s->mb_height, INT_MAX & 0xFFFF); + return ret; + } if (s->deblock_filter) s->filter_mb_row(avctx, tdata, jobnr, threadnr); update_pos(td, mb_y, INT_MAX & 0xFFFF); - s->mv_min.y -= 64; - s->mv_max.y -= 64; + td->mv_bounds.mv_min.y -= 64 * num_jobs; + td->mv_bounds.mv_max.y -= 64 * num_jobs; if (avctx->active_thread_type == FF_THREAD_FRAME) ff_thread_report_progress(&curframe->tf, mb_y, 0); @@ -2531,6 +2550,8 @@ int vp78_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, enum AVDiscard skip_thresh; VP8Frame *av_uninit(curframe), *prev_frame; + av_assert0(avctx->pix_fmt == AV_PIX_FMT_YUVA420P || avctx->pix_fmt == AV_PIX_FMT_YUV420P); + if (is_vp7) ret = vp7_decode_frame_header(s, avpkt->data, avpkt->size); else @@ -2646,11 +2667,12 @@ int vp78_decode_frame(AVCodecContext *avctx, void *data, int *got_frame, s->num_jobs = num_jobs; s->curframe = curframe; s->prev_frame = prev_frame; - s->mv_min.y = -MARGIN; - s->mv_max.y = ((s->mb_height - 1) << 6) + MARGIN; + s->mv_bounds.mv_min.y = -MARGIN; + s->mv_bounds.mv_max.y = ((s->mb_height - 1) << 6) + MARGIN; for (i = 0; i < MAX_THREADS; i++) { - s->thread_data[i].thread_mb_pos = 0; - s->thread_data[i].wait_mb_pos = INT_MAX; + VP8ThreadData *td = &s->thread_data[i]; + atomic_init(&td->thread_mb_pos, 0); + atomic_init(&td->wait_mb_pos, INT_MAX); } if (is_vp7) avctx->execute2(avctx, vp7_decode_mb_row_sliced, s->thread_data, NULL, diff --git a/media/ffvpx/libavcodec/vp8.h b/media/ffvpx/libavcodec/vp8.h index 374e1388e217..8263997e3fcd 100644 --- a/media/ffvpx/libavcodec/vp8.h +++ b/media/ffvpx/libavcodec/vp8.h @@ -26,6 +26,8 @@ #ifndef AVCODEC_VP8_H #define AVCODEC_VP8_H +#include + #include "libavutil/buffer.h" #include "libavutil/thread.h" @@ -91,6 +93,16 @@ typedef struct VP8Macroblock { VP56mv bmv[16]; } VP8Macroblock; +typedef struct VP8intmv { + int x; + int y; +} VP8intmv; + +typedef struct VP8mvbounds { + VP8intmv mv_min; + VP8intmv mv_max; +} VP8mvbounds; + typedef struct VP8ThreadData { DECLARE_ALIGNED(16, int16_t, block)[6][4][16]; DECLARE_ALIGNED(16, int16_t, block_dc)[16]; @@ -114,12 +126,13 @@ typedef struct VP8ThreadData { pthread_mutex_t lock; pthread_cond_t cond; #endif - int thread_mb_pos; // (mb_y << 16) | (mb_x & 0xFFFF) - int wait_mb_pos; // What the current thread is waiting on. + atomic_int thread_mb_pos; // (mb_y << 16) | (mb_x & 0xFFFF) + atomic_int wait_mb_pos; // What the current thread is waiting on. #define EDGE_EMU_LINESIZE 32 DECLARE_ALIGNED(16, uint8_t, edge_emu_buffer)[21 * EDGE_EMU_LINESIZE]; VP8FilterStrength *filter_strength; + VP8mvbounds mv_bounds; } VP8ThreadData; typedef struct VP8Frame { @@ -127,11 +140,6 @@ typedef struct VP8Frame { AVBufferRef *seg_map; } VP8Frame; -typedef struct VP8intmv { - int x; - int y; -} VP8intmv; - #define MAX_THREADS 8 typedef struct VP8Context { VP8ThreadData *thread_data; @@ -143,15 +151,14 @@ typedef struct VP8Context { uint16_t mb_width; /* number of horizontal MB */ uint16_t mb_height; /* number of vertical MB */ - int linesize; - int uvlinesize; + ptrdiff_t linesize; + ptrdiff_t uvlinesize; uint8_t keyframe; uint8_t deblock_filter; uint8_t mbskip_enabled; uint8_t profile; - VP8intmv mv_min; - VP8intmv mv_max; + VP8mvbounds mv_bounds; int8_t sign_bias[4]; ///< one state [0, 1] per ref frame type int ref_count[3]; @@ -275,7 +282,7 @@ typedef struct VP8Context { */ int mb_layout; - void (*decode_mb_row_no_filter)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr); + 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; diff --git a/media/ffvpx/libavcodec/vp8_parser.c b/media/ffvpx/libavcodec/vp8_parser.c index afc7f991e645..609f5077d1a1 100644 --- a/media/ffvpx/libavcodec/vp8_parser.c +++ b/media/ffvpx/libavcodec/vp8_parser.c @@ -1,6 +1,4 @@ /* - * Copyright (C) 2008 Michael Niedermayer - * * This file is part of FFmpeg. * * FFmpeg is free software; you can redistribute it and/or @@ -18,15 +16,56 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include "parser.h" +#include "libavutil/intreadwrite.h" + +#include "avcodec.h" static int parse(AVCodecParserContext *s, AVCodecContext *avctx, const uint8_t **poutbuf, int *poutbuf_size, const uint8_t *buf, int buf_size) { - s->pict_type = (buf[0] & 0x01) ? AV_PICTURE_TYPE_P - : AV_PICTURE_TYPE_I; + unsigned int frame_type; + unsigned int profile; + + if (buf_size < 3) + return buf_size; + + frame_type = buf[0] & 1; + profile = (buf[0] >> 1) & 7; + if (profile > 3) { + av_log(avctx, AV_LOG_ERROR, "Invalid profile %u.\n", profile); + return buf_size; + } + + avctx->profile = profile; + s->key_frame = frame_type == 0; + s->pict_type = frame_type ? AV_PICTURE_TYPE_P : AV_PICTURE_TYPE_I; + s->format = AV_PIX_FMT_YUV420P; + s->field_order = AV_FIELD_PROGRESSIVE; + s->picture_structure = AV_PICTURE_STRUCTURE_FRAME; + + if (frame_type == 0) { + unsigned int sync_code; + unsigned int width, height; + + if (buf_size < 10) + return buf_size; + + sync_code = AV_RL24(buf + 3); + if (sync_code != 0x2a019d) { + av_log(avctx, AV_LOG_ERROR, "Invalid sync code %06x.\n", sync_code); + return buf_size; + } + + width = AV_RL16(buf + 6) & 0x3fff; + height = AV_RL16(buf + 8) & 0x3fff; + + s->width = width; + s->height = height; + s->coded_width = FFALIGN(width, 16); + s->coded_height = FFALIGN(height, 16); + } *poutbuf = buf; *poutbuf_size = buf_size; diff --git a/media/ffvpx/libavcodec/vp8dsp.c b/media/ffvpx/libavcodec/vp8dsp.c index 07bea69c78c4..fed5c67a90c1 100644 --- a/media/ffvpx/libavcodec/vp8dsp.c +++ b/media/ffvpx/libavcodec/vp8dsp.c @@ -53,7 +53,8 @@ static void name ## _idct_dc_add4y_c(uint8_t *dst, int16_t block[4][16], \ #if CONFIG_VP7_DECODER static void vp7_luma_dc_wht_c(int16_t block[4][4][16], int16_t dc[16]) { - int i, a1, b1, c1, d1; + int i; + unsigned a1, b1, c1, d1; int16_t tmp[16]; for (i = 0; i < 4; i++) { @@ -61,10 +62,10 @@ static void vp7_luma_dc_wht_c(int16_t block[4][4][16], int16_t dc[16]) b1 = (dc[i * 4 + 0] - dc[i * 4 + 2]) * 23170; c1 = dc[i * 4 + 1] * 12540 - dc[i * 4 + 3] * 30274; d1 = dc[i * 4 + 1] * 30274 + dc[i * 4 + 3] * 12540; - tmp[i * 4 + 0] = (a1 + d1) >> 14; - tmp[i * 4 + 3] = (a1 - d1) >> 14; - tmp[i * 4 + 1] = (b1 + c1) >> 14; - tmp[i * 4 + 2] = (b1 - c1) >> 14; + tmp[i * 4 + 0] = (int)(a1 + d1) >> 14; + tmp[i * 4 + 3] = (int)(a1 - d1) >> 14; + tmp[i * 4 + 1] = (int)(b1 + c1) >> 14; + tmp[i * 4 + 2] = (int)(b1 - c1) >> 14; } for (i = 0; i < 4; i++) { @@ -73,10 +74,10 @@ static void vp7_luma_dc_wht_c(int16_t block[4][4][16], int16_t dc[16]) c1 = tmp[i + 4] * 12540 - tmp[i + 12] * 30274; d1 = tmp[i + 4] * 30274 + tmp[i + 12] * 12540; AV_ZERO64(dc + i * 4); - block[0][i][0] = (a1 + d1 + 0x20000) >> 18; - block[3][i][0] = (a1 - d1 + 0x20000) >> 18; - block[1][i][0] = (b1 + c1 + 0x20000) >> 18; - block[2][i][0] = (b1 - c1 + 0x20000) >> 18; + block[0][i][0] = (int)(a1 + d1 + 0x20000) >> 18; + block[3][i][0] = (int)(a1 - d1 + 0x20000) >> 18; + block[1][i][0] = (int)(b1 + c1 + 0x20000) >> 18; + block[2][i][0] = (int)(b1 - c1 + 0x20000) >> 18; } } @@ -95,7 +96,8 @@ static void vp7_luma_dc_wht_dc_c(int16_t block[4][4][16], int16_t dc[16]) static void vp7_idct_add_c(uint8_t *dst, int16_t block[16], ptrdiff_t stride) { - int i, a1, b1, c1, d1; + int i; + unsigned a1, b1, c1, d1; int16_t tmp[16]; for (i = 0; i < 4; i++) { @@ -104,10 +106,10 @@ static void vp7_idct_add_c(uint8_t *dst, int16_t block[16], ptrdiff_t stride) c1 = block[i * 4 + 1] * 12540 - block[i * 4 + 3] * 30274; d1 = block[i * 4 + 1] * 30274 + block[i * 4 + 3] * 12540; AV_ZERO64(block + i * 4); - tmp[i * 4 + 0] = (a1 + d1) >> 14; - tmp[i * 4 + 3] = (a1 - d1) >> 14; - tmp[i * 4 + 1] = (b1 + c1) >> 14; - tmp[i * 4 + 2] = (b1 - c1) >> 14; + tmp[i * 4 + 0] = (int)(a1 + d1) >> 14; + tmp[i * 4 + 3] = (int)(a1 - d1) >> 14; + tmp[i * 4 + 1] = (int)(b1 + c1) >> 14; + tmp[i * 4 + 2] = (int)(b1 - c1) >> 14; } for (i = 0; i < 4; i++) { @@ -116,13 +118,13 @@ static void vp7_idct_add_c(uint8_t *dst, int16_t block[16], ptrdiff_t stride) c1 = tmp[i + 4] * 12540 - tmp[i + 12] * 30274; d1 = tmp[i + 4] * 30274 + tmp[i + 12] * 12540; dst[0 * stride + i] = av_clip_uint8(dst[0 * stride + i] + - ((a1 + d1 + 0x20000) >> 18)); + ((int)(a1 + d1 + 0x20000) >> 18)); dst[3 * stride + i] = av_clip_uint8(dst[3 * stride + i] + - ((a1 - d1 + 0x20000) >> 18)); + ((int)(a1 - d1 + 0x20000) >> 18)); dst[1 * stride + i] = av_clip_uint8(dst[1 * stride + i] + - ((b1 + c1 + 0x20000) >> 18)); + ((int)(b1 + c1 + 0x20000) >> 18)); dst[2 * stride + i] = av_clip_uint8(dst[2 * stride + i] + - ((b1 - c1 + 0x20000) >> 18)); + ((int)(b1 - c1 + 0x20000) >> 18)); } } diff --git a/media/ffvpx/libavcodec/vp8dsp.h b/media/ffvpx/libavcodec/vp8dsp.h index 0401c9221b06..eaae4aed6d9a 100644 --- a/media/ffvpx/libavcodec/vp8dsp.h +++ b/media/ffvpx/libavcodec/vp8dsp.h @@ -70,12 +70,12 @@ typedef struct VP8DSPContext { void (*vp8_h_loop_filter_simple)(uint8_t *dst, ptrdiff_t stride, int flim); /** - * first dimension: width>>3, height is assumed equal to width + * first dimension: 4-log2(width) * second dimension: 0 if no vertical interpolation is needed; * 1 4-tap vertical interpolation filter (my & 1) * 2 6-tap vertical interpolation filter (!(my & 1)) * third dimension: same as second dimension, for horizontal interpolation - * so something like put_vp8_epel_pixels_tab[width>>3][2*!!my-(my&1)][2*!!mx-(mx&1)](..., mx, my) + * so something like put_vp8_epel_pixels_tab[4-log2(width)][2*!!my-(my&1)][2*!!mx-(mx&1)](..., mx, my) */ vp8_mc_func put_vp8_epel_pixels_tab[3][3][3]; vp8_mc_func put_vp8_bilinear_pixels_tab[3][3][3]; diff --git a/media/ffvpx/libavcodec/vp9.c b/media/ffvpx/libavcodec/vp9.c index 1aab6ba03c31..6b5de19266f3 100644 --- a/media/ffvpx/libavcodec/vp9.c +++ b/media/ffvpx/libavcodec/vp9.c @@ -30,176 +30,97 @@ #include "vp56.h" #include "vp9.h" #include "vp9data.h" -#include "vp9dsp.h" +#include "vp9dec.h" #include "libavutil/avassert.h" #include "libavutil/pixdesc.h" #define VP9_SYNCCODE 0x498342 -struct VP9Filter { - uint8_t level[8 * 8]; - uint8_t /* bit=col */ mask[2 /* 0=y, 1=uv */][2 /* 0=col, 1=row */] - [8 /* rows */][4 /* 0=16, 1=8, 2=4, 3=inner4 */]; -}; +#if HAVE_THREADS +static void vp9_free_entries(AVCodecContext *avctx) { + VP9Context *s = avctx->priv_data; -typedef struct VP9Block { - uint8_t seg_id, intra, comp, ref[2], mode[4], uvmode, skip; - enum FilterMode filter; - VP56mv mv[4 /* b_idx */][2 /* ref */]; - enum BlockSize bs; - enum TxfmMode tx, uvtx; - enum BlockLevel bl; - enum BlockPartition bp; -} VP9Block; - -typedef struct VP9Context { - VP9SharedContext s; - - VP9DSPContext dsp; - VideoDSPContext vdsp; - GetBitContext gb; - VP56RangeCoder c; - VP56RangeCoder *c_b; - unsigned c_b_size; - VP9Block *b_base, *b; - int pass; - int row, row7, col, col7; - uint8_t *dst[3]; - ptrdiff_t y_stride, uv_stride; - - uint8_t ss_h, ss_v; - uint8_t last_bpp, bpp, bpp_index, bytesperpixel; - uint8_t last_keyframe; - // sb_cols/rows, rows/cols and last_fmt are used for allocating all internal - // arrays, and are thus per-thread. w/h and gf_fmt are synced between threads - // and are therefore per-stream. pix_fmt represents the value in the header - // of the currently processed frame. - int w, h; - enum AVPixelFormat pix_fmt, last_fmt, gf_fmt; - unsigned sb_cols, sb_rows, rows, cols; - ThreadFrame next_refs[8]; - - struct { - uint8_t lim_lut[64]; - uint8_t mblim_lut[64]; - } filter_lut; - unsigned tile_row_start, tile_row_end, tile_col_start, tile_col_end; - struct { - prob_context p; - uint8_t coef[4][2][2][6][6][3]; - } prob_ctx[4]; - struct { - prob_context p; - uint8_t coef[4][2][2][6][6][11]; - } prob; - struct { - unsigned y_mode[4][10]; - unsigned uv_mode[10][10]; - unsigned filter[4][3]; - unsigned mv_mode[7][4]; - unsigned intra[4][2]; - unsigned comp[5][2]; - unsigned single_ref[5][2][2]; - unsigned comp_ref[5][2]; - unsigned tx32p[2][4]; - unsigned tx16p[2][3]; - unsigned tx8p[2][2]; - unsigned skip[3][2]; - unsigned mv_joint[4]; - struct { - unsigned sign[2]; - unsigned classes[11]; - unsigned class0[2]; - unsigned bits[10][2]; - unsigned class0_fp[2][4]; - unsigned fp[4]; - unsigned class0_hp[2]; - unsigned hp[2]; - } mv_comp[2]; - unsigned partition[4][4][4]; - unsigned coef[4][2][2][6][6][3]; - unsigned eob[4][2][2][6][6][2]; - } counts; - - // contextual (left/above) cache - DECLARE_ALIGNED(16, uint8_t, left_y_nnz_ctx)[16]; - DECLARE_ALIGNED(16, uint8_t, left_mode_ctx)[16]; - DECLARE_ALIGNED(16, VP56mv, left_mv_ctx)[16][2]; - DECLARE_ALIGNED(16, uint8_t, left_uv_nnz_ctx)[2][16]; - DECLARE_ALIGNED(8, uint8_t, left_partition_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_skip_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_txfm_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_segpred_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_intra_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_comp_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_ref_ctx)[8]; - DECLARE_ALIGNED(8, uint8_t, left_filter_ctx)[8]; - uint8_t *above_partition_ctx; - uint8_t *above_mode_ctx; - // FIXME maybe merge some of the below in a flags field? - uint8_t *above_y_nnz_ctx; - uint8_t *above_uv_nnz_ctx[2]; - uint8_t *above_skip_ctx; // 1bit - uint8_t *above_txfm_ctx; // 2bit - uint8_t *above_segpred_ctx; // 1bit - uint8_t *above_intra_ctx; // 1bit - uint8_t *above_comp_ctx; // 1bit - uint8_t *above_ref_ctx; // 2bit - uint8_t *above_filter_ctx; - VP56mv (*above_mv_ctx)[2]; - - // whole-frame cache - uint8_t *intra_pred_data[3]; - struct VP9Filter *lflvl; - DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[135 * 144 * 2]; - - // block reconstruction intermediates - int block_alloc_using_2pass; - int16_t *block_base, *block, *uvblock_base[2], *uvblock[2]; - uint8_t *eob_base, *uveob_base[2], *eob, *uveob[2]; - struct { int x, y; } min_mv, max_mv; - DECLARE_ALIGNED(32, uint8_t, tmp_y)[64 * 64 * 2]; - DECLARE_ALIGNED(32, uint8_t, tmp_uv)[2][64 * 64 * 2]; - uint16_t mvscale[3][2]; - uint8_t mvstep[3][2]; -} VP9Context; - -static const uint8_t bwh_tab[2][N_BS_SIZES][2] = { - { - { 16, 16 }, { 16, 8 }, { 8, 16 }, { 8, 8 }, { 8, 4 }, { 4, 8 }, - { 4, 4 }, { 4, 2 }, { 2, 4 }, { 2, 2 }, { 2, 1 }, { 1, 2 }, { 1, 1 }, - }, { - { 8, 8 }, { 8, 4 }, { 4, 8 }, { 4, 4 }, { 4, 2 }, { 2, 4 }, - { 2, 2 }, { 2, 1 }, { 1, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 }, { 1, 1 }, + if (avctx->active_thread_type & FF_THREAD_SLICE) { + pthread_mutex_destroy(&s->progress_mutex); + pthread_cond_destroy(&s->progress_cond); + av_freep(&s->entries); } -}; +} -static void vp9_unref_frame(AVCodecContext *ctx, VP9Frame *f) +static int vp9_alloc_entries(AVCodecContext *avctx, int n) { + VP9Context *s = avctx->priv_data; + int i; + + if (avctx->active_thread_type & FF_THREAD_SLICE) { + if (s->entries) + av_freep(&s->entries); + + s->entries = av_malloc_array(n, sizeof(atomic_int)); + + if (!s->entries) { + av_freep(&s->entries); + return AVERROR(ENOMEM); + } + + for (i = 0; i < n; i++) + atomic_init(&s->entries[i], 0); + + pthread_mutex_init(&s->progress_mutex, NULL); + pthread_cond_init(&s->progress_cond, NULL); + } + return 0; +} + +static void vp9_report_tile_progress(VP9Context *s, int field, int n) { + pthread_mutex_lock(&s->progress_mutex); + atomic_fetch_add_explicit(&s->entries[field], n, memory_order_release); + pthread_cond_signal(&s->progress_cond); + pthread_mutex_unlock(&s->progress_mutex); +} + +static void vp9_await_tile_progress(VP9Context *s, int field, int n) { + if (atomic_load_explicit(&s->entries[field], memory_order_acquire) >= n) + return; + + pthread_mutex_lock(&s->progress_mutex); + while (atomic_load_explicit(&s->entries[field], memory_order_relaxed) != n) + pthread_cond_wait(&s->progress_cond, &s->progress_mutex); + pthread_mutex_unlock(&s->progress_mutex); +} +#else +static void vp9_free_entries(AVCodecContext *avctx) {} +static int vp9_alloc_entries(AVCodecContext *avctx, int n) { return 0; } +#endif + +static void vp9_frame_unref(AVCodecContext *avctx, VP9Frame *f) { - ff_thread_release_buffer(ctx, &f->tf); + ff_thread_release_buffer(avctx, &f->tf); av_buffer_unref(&f->extradata); av_buffer_unref(&f->hwaccel_priv_buf); f->segmentation_map = NULL; f->hwaccel_picture_private = NULL; } -static int vp9_alloc_frame(AVCodecContext *ctx, VP9Frame *f) +static int vp9_frame_alloc(AVCodecContext *avctx, VP9Frame *f) { - VP9Context *s = ctx->priv_data; + VP9Context *s = avctx->priv_data; int ret, sz; - if ((ret = ff_thread_get_buffer(ctx, &f->tf, AV_GET_BUFFER_FLAG_REF)) < 0) + ret = ff_thread_get_buffer(avctx, &f->tf, AV_GET_BUFFER_FLAG_REF); + if (ret < 0) return ret; + sz = 64 * s->sb_cols * s->sb_rows; - if (!(f->extradata = av_buffer_allocz(sz * (1 + sizeof(struct VP9mvrefPair))))) { + f->extradata = av_buffer_allocz(sz * (1 + sizeof(VP9mvrefPair))); + if (!f->extradata) { goto fail; } f->segmentation_map = f->extradata->data; - f->mv = (struct VP9mvrefPair *) (f->extradata->data + sz); + f->mv = (VP9mvrefPair *) (f->extradata->data + sz); - if (ctx->hwaccel) { - const AVHWAccel *hwaccel = ctx->hwaccel; + if (avctx->hwaccel) { + const AVHWAccel *hwaccel = avctx->hwaccel; av_assert0(!f->hwaccel_picture_private); if (hwaccel->frame_priv_data_size) { f->hwaccel_priv_buf = av_buffer_allocz(hwaccel->frame_priv_data_size); @@ -212,19 +133,21 @@ static int vp9_alloc_frame(AVCodecContext *ctx, VP9Frame *f) return 0; fail: - vp9_unref_frame(ctx, f); + vp9_frame_unref(avctx, f); return AVERROR(ENOMEM); } -static int vp9_ref_frame(AVCodecContext *ctx, VP9Frame *dst, VP9Frame *src) +static int vp9_frame_ref(AVCodecContext *avctx, VP9Frame *dst, VP9Frame *src) { - int res; + int ret; - if ((res = ff_thread_ref_frame(&dst->tf, &src->tf)) < 0) { - return res; - } else if (!(dst->extradata = av_buffer_ref(src->extradata))) { + ret = ff_thread_ref_frame(&dst->tf, &src->tf); + if (ret < 0) + return ret; + + dst->extradata = av_buffer_ref(src->extradata); + if (!dst->extradata) goto fail; - } dst->segmentation_map = src->segmentation_map; dst->mv = src->mv; @@ -240,44 +163,54 @@ static int vp9_ref_frame(AVCodecContext *ctx, VP9Frame *dst, VP9Frame *src) return 0; fail: - vp9_unref_frame(ctx, dst); + vp9_frame_unref(avctx, dst); return AVERROR(ENOMEM); } -static int update_size(AVCodecContext *ctx, int w, int h) +static int update_size(AVCodecContext *avctx, int w, int h) { -#define HWACCEL_MAX (CONFIG_VP9_DXVA2_HWACCEL + CONFIG_VP9_D3D11VA_HWACCEL + CONFIG_VP9_VAAPI_HWACCEL) +#define HWACCEL_MAX (CONFIG_VP9_DXVA2_HWACCEL + CONFIG_VP9_D3D11VA_HWACCEL * 2 + CONFIG_VP9_VAAPI_HWACCEL) enum AVPixelFormat pix_fmts[HWACCEL_MAX + 2], *fmtp = pix_fmts; - VP9Context *s = ctx->priv_data; + VP9Context *s = avctx->priv_data; uint8_t *p; - int bytesperpixel = s->bytesperpixel, res, cols, rows; + int bytesperpixel = s->bytesperpixel, ret, cols, rows; + int lflvl_len, i; av_assert0(w > 0 && h > 0); if (!(s->pix_fmt == s->gf_fmt && w == s->w && h == s->h)) { - if ((res = ff_set_dimensions(ctx, w, h)) < 0) - return res; + if ((ret = ff_set_dimensions(avctx, w, h)) < 0) + return ret; - if (s->pix_fmt == AV_PIX_FMT_YUV420P) { + switch (s->pix_fmt) { + case AV_PIX_FMT_YUV420P: #if CONFIG_VP9_DXVA2_HWACCEL *fmtp++ = AV_PIX_FMT_DXVA2_VLD; #endif #if CONFIG_VP9_D3D11VA_HWACCEL *fmtp++ = AV_PIX_FMT_D3D11VA_VLD; + *fmtp++ = AV_PIX_FMT_D3D11; #endif #if CONFIG_VP9_VAAPI_HWACCEL *fmtp++ = AV_PIX_FMT_VAAPI; #endif + break; + case AV_PIX_FMT_YUV420P10: + case AV_PIX_FMT_YUV420P12: +#if CONFIG_VP9_VAAPI_HWACCEL + *fmtp++ = AV_PIX_FMT_VAAPI; +#endif + break; } *fmtp++ = s->pix_fmt; *fmtp = AV_PIX_FMT_NONE; - res = ff_thread_get_format(ctx, pix_fmts); - if (res < 0) - return res; + ret = ff_thread_get_format(avctx, pix_fmts); + if (ret < 0) + return ret; - ctx->pix_fmt = res; + avctx->pix_fmt = ret; s->gf_fmt = s->pix_fmt; s->w = w; s->h = h; @@ -294,13 +227,14 @@ static int update_size(AVCodecContext *ctx, int w, int h) s->sb_rows = (h + 63) >> 6; s->cols = (w + 7) >> 3; s->rows = (h + 7) >> 3; + lflvl_len = avctx->active_thread_type == FF_THREAD_SLICE ? s->sb_rows : 1; #define assign(var, type, n) var = (type) p; p += s->sb_cols * (n) * sizeof(*var) av_freep(&s->intra_pred_data[0]); // FIXME we slightly over-allocate here for subsampled chroma, but a little // bit of padding shouldn't affect performance... p = av_malloc(s->sb_cols * (128 + 192 * bytesperpixel + - sizeof(*s->lflvl) + 16 * sizeof(*s->above_mv_ctx))); + lflvl_len * sizeof(*s->lflvl) + 16 * sizeof(*s->above_mv_ctx))); if (!p) return AVERROR(ENOMEM); assign(s->intra_pred_data[0], uint8_t *, 64 * bytesperpixel); @@ -319,65 +253,78 @@ static int update_size(AVCodecContext *ctx, int w, int h) assign(s->above_comp_ctx, uint8_t *, 8); assign(s->above_ref_ctx, uint8_t *, 8); assign(s->above_filter_ctx, uint8_t *, 8); - assign(s->lflvl, struct VP9Filter *, 1); + assign(s->lflvl, VP9Filter *, lflvl_len); #undef assign - // these will be re-allocated a little later - av_freep(&s->b_base); - av_freep(&s->block_base); + if (s->td) { + for (i = 0; i < s->active_tile_cols; i++) { + av_freep(&s->td[i].b_base); + av_freep(&s->td[i].block_base); + } + } - if (s->bpp != s->last_bpp) { - ff_vp9dsp_init(&s->dsp, s->bpp, ctx->flags & AV_CODEC_FLAG_BITEXACT); - ff_videodsp_init(&s->vdsp, s->bpp); - s->last_bpp = s->bpp; + if (s->s.h.bpp != s->last_bpp) { + ff_vp9dsp_init(&s->dsp, s->s.h.bpp, avctx->flags & AV_CODEC_FLAG_BITEXACT); + ff_videodsp_init(&s->vdsp, s->s.h.bpp); + s->last_bpp = s->s.h.bpp; } return 0; } -static int update_block_buffers(AVCodecContext *ctx) +static int update_block_buffers(AVCodecContext *avctx) { - VP9Context *s = ctx->priv_data; + int i; + VP9Context *s = avctx->priv_data; int chroma_blocks, chroma_eobs, bytesperpixel = s->bytesperpixel; + VP9TileData *td = &s->td[0]; - if (s->b_base && s->block_base && s->block_alloc_using_2pass == s->s.frames[CUR_FRAME].uses_2pass) + if (td->b_base && td->block_base && s->block_alloc_using_2pass == s->s.frames[CUR_FRAME].uses_2pass) return 0; - av_free(s->b_base); - av_free(s->block_base); + av_free(td->b_base); + av_free(td->block_base); chroma_blocks = 64 * 64 >> (s->ss_h + s->ss_v); chroma_eobs = 16 * 16 >> (s->ss_h + s->ss_v); if (s->s.frames[CUR_FRAME].uses_2pass) { int sbs = s->sb_cols * s->sb_rows; - s->b_base = av_malloc_array(s->cols * s->rows, sizeof(VP9Block)); - s->block_base = av_mallocz(((64 * 64 + 2 * chroma_blocks) * bytesperpixel * sizeof(int16_t) + + td->b_base = av_malloc_array(s->cols * s->rows, sizeof(VP9Block)); + td->block_base = av_mallocz(((64 * 64 + 2 * chroma_blocks) * bytesperpixel * sizeof(int16_t) + 16 * 16 + 2 * chroma_eobs) * sbs); - if (!s->b_base || !s->block_base) + if (!td->b_base || !td->block_base) return AVERROR(ENOMEM); - s->uvblock_base[0] = s->block_base + sbs * 64 * 64 * bytesperpixel; - s->uvblock_base[1] = s->uvblock_base[0] + sbs * chroma_blocks * bytesperpixel; - s->eob_base = (uint8_t *) (s->uvblock_base[1] + sbs * chroma_blocks * bytesperpixel); - s->uveob_base[0] = s->eob_base + 16 * 16 * sbs; - s->uveob_base[1] = s->uveob_base[0] + chroma_eobs * sbs; + td->uvblock_base[0] = td->block_base + sbs * 64 * 64 * bytesperpixel; + td->uvblock_base[1] = td->uvblock_base[0] + sbs * chroma_blocks * bytesperpixel; + td->eob_base = (uint8_t *) (td->uvblock_base[1] + sbs * chroma_blocks * bytesperpixel); + td->uveob_base[0] = td->eob_base + 16 * 16 * sbs; + td->uveob_base[1] = td->uveob_base[0] + chroma_eobs * sbs; } else { - s->b_base = av_malloc(sizeof(VP9Block)); - s->block_base = av_mallocz((64 * 64 + 2 * chroma_blocks) * bytesperpixel * sizeof(int16_t) + - 16 * 16 + 2 * chroma_eobs); - if (!s->b_base || !s->block_base) - return AVERROR(ENOMEM); - s->uvblock_base[0] = s->block_base + 64 * 64 * bytesperpixel; - s->uvblock_base[1] = s->uvblock_base[0] + chroma_blocks * bytesperpixel; - s->eob_base = (uint8_t *) (s->uvblock_base[1] + chroma_blocks * bytesperpixel); - s->uveob_base[0] = s->eob_base + 16 * 16; - s->uveob_base[1] = s->uveob_base[0] + chroma_eobs; + for (i = 1; i < s->active_tile_cols; i++) { + if (s->td[i].b_base && s->td[i].block_base) { + av_free(s->td[i].b_base); + av_free(s->td[i].block_base); + } + } + for (i = 0; i < s->active_tile_cols; i++) { + s->td[i].b_base = av_malloc(sizeof(VP9Block)); + s->td[i].block_base = av_mallocz((64 * 64 + 2 * chroma_blocks) * bytesperpixel * sizeof(int16_t) + + 16 * 16 + 2 * chroma_eobs); + if (!s->td[i].b_base || !s->td[i].block_base) + return AVERROR(ENOMEM); + s->td[i].uvblock_base[0] = s->td[i].block_base + 64 * 64 * bytesperpixel; + s->td[i].uvblock_base[1] = s->td[i].uvblock_base[0] + chroma_blocks * bytesperpixel; + s->td[i].eob_base = (uint8_t *) (s->td[i].uvblock_base[1] + chroma_blocks * bytesperpixel); + s->td[i].uveob_base[0] = s->td[i].eob_base + 16 * 16; + s->td[i].uveob_base[1] = s->td[i].uveob_base[0] + chroma_eobs; + } } s->block_alloc_using_2pass = s->s.frames[CUR_FRAME].uses_2pass; return 0; } -// for some reason the sign bit is at the end, not the start, of a bit sequence +// The sign bit is at the end, not the start, of a bit sequence static av_always_inline int get_sbits_inv(GetBitContext *gb, int n) { int v = get_bits(gb, n); @@ -386,7 +333,11 @@ static av_always_inline int get_sbits_inv(GetBitContext *gb, int n) static av_always_inline int inv_recenter_nonneg(int v, int m) { - return v > 2 * m ? v : v & 1 ? m - ((v + 1) >> 1) : m + (v >> 1); + if (v > 2 * m) + return v; + if (v & 1) + return m - ((v + 1) >> 1); + return m + (v >> 1); } // differential forward probability updates @@ -417,13 +368,13 @@ static int update_prob(VP56RangeCoder *c, int p) /* This code is trying to do a differential probability update. For a * current probability A in the range [1, 255], the difference to a new - * probability of any value can be expressed differentially as 1-A,255-A + * probability of any value can be expressed differentially as 1-A, 255-A * where some part of this (absolute range) exists both in positive as * well as the negative part, whereas another part only exists in one * half. We're trying to code this shared part differentially, i.e. * times two where the value of the lowest bit specifies the sign, and * the single part is then coded on top of this. This absolute difference - * then again has a value of [0,254], but a bigger value in this range + * then again has a value of [0, 254], but a bigger value in this range * indicates that we're further away from the original value A, so we * can code this as a VLC code, since higher values are increasingly * unlikely. The first 20 values in inv_map_table[] allow 'cheap, rough' @@ -448,34 +399,34 @@ static int update_prob(VP56RangeCoder *c, int p) 255 - inv_recenter_nonneg(inv_map_table[d], 255 - p); } -static int read_colorspace_details(AVCodecContext *ctx) +static int read_colorspace_details(AVCodecContext *avctx) { static const enum AVColorSpace colorspaces[8] = { AVCOL_SPC_UNSPECIFIED, AVCOL_SPC_BT470BG, AVCOL_SPC_BT709, AVCOL_SPC_SMPTE170M, AVCOL_SPC_SMPTE240M, AVCOL_SPC_BT2020_NCL, AVCOL_SPC_RESERVED, AVCOL_SPC_RGB, }; - VP9Context *s = ctx->priv_data; - int bits = ctx->profile <= 1 ? 0 : 1 + get_bits1(&s->gb); // 0:8, 1:10, 2:12 + VP9Context *s = avctx->priv_data; + int bits = avctx->profile <= 1 ? 0 : 1 + get_bits1(&s->gb); // 0:8, 1:10, 2:12 s->bpp_index = bits; - s->bpp = 8 + bits * 2; - s->bytesperpixel = (7 + s->bpp) >> 3; - ctx->colorspace = colorspaces[get_bits(&s->gb, 3)]; - if (ctx->colorspace == AVCOL_SPC_RGB) { // RGB = profile 1 + s->s.h.bpp = 8 + bits * 2; + s->bytesperpixel = (7 + s->s.h.bpp) >> 3; + avctx->colorspace = colorspaces[get_bits(&s->gb, 3)]; + if (avctx->colorspace == AVCOL_SPC_RGB) { // RGB = profile 1 static const enum AVPixelFormat pix_fmt_rgb[3] = { AV_PIX_FMT_GBRP, AV_PIX_FMT_GBRP10, AV_PIX_FMT_GBRP12 }; s->ss_h = s->ss_v = 0; - ctx->color_range = AVCOL_RANGE_JPEG; + avctx->color_range = AVCOL_RANGE_JPEG; s->pix_fmt = pix_fmt_rgb[bits]; - if (ctx->profile & 1) { + if (avctx->profile & 1) { if (get_bits1(&s->gb)) { - av_log(ctx, AV_LOG_ERROR, "Reserved bit set in RGB\n"); + av_log(avctx, AV_LOG_ERROR, "Reserved bit set in RGB\n"); return AVERROR_INVALIDDATA; } } else { - av_log(ctx, AV_LOG_ERROR, "RGB not supported in profile %d\n", - ctx->profile); + av_log(avctx, AV_LOG_ERROR, "RGB not supported in profile %d\n", + avctx->profile); return AVERROR_INVALIDDATA; } } else { @@ -487,18 +438,18 @@ static int read_colorspace_details(AVCodecContext *ctx) { { AV_PIX_FMT_YUV444P12, AV_PIX_FMT_YUV422P12 }, { AV_PIX_FMT_YUV440P12, AV_PIX_FMT_YUV420P12 } } }; - ctx->color_range = get_bits1(&s->gb) ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; - if (ctx->profile & 1) { + avctx->color_range = get_bits1(&s->gb) ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; + if (avctx->profile & 1) { s->ss_h = get_bits1(&s->gb); s->ss_v = get_bits1(&s->gb); s->pix_fmt = pix_fmt_for_ss[bits][s->ss_v][s->ss_h]; if (s->pix_fmt == AV_PIX_FMT_YUV420P) { - av_log(ctx, AV_LOG_ERROR, "YUV 4:2:0 not supported in profile %d\n", - ctx->profile); + av_log(avctx, AV_LOG_ERROR, "YUV 4:2:0 not supported in profile %d\n", + avctx->profile); return AVERROR_INVALIDDATA; } else if (get_bits1(&s->gb)) { - av_log(ctx, AV_LOG_ERROR, "Profile %d color details reserved bit set\n", - ctx->profile); + av_log(avctx, AV_LOG_ERROR, "Profile %d color details reserved bit set\n", + avctx->profile); return AVERROR_INVALIDDATA; } } else { @@ -510,48 +461,51 @@ static int read_colorspace_details(AVCodecContext *ctx) return 0; } -static int decode_frame_header(AVCodecContext *ctx, +static int decode_frame_header(AVCodecContext *avctx, const uint8_t *data, int size, int *ref) { - VP9Context *s = ctx->priv_data; - int c, i, j, k, l, m, n, w, h, max, size2, res, sharp; + VP9Context *s = avctx->priv_data; + int c, i, j, k, l, m, n, w, h, max, size2, ret, sharp; int last_invisible; const uint8_t *data2; /* general header */ - if ((res = init_get_bits8(&s->gb, data, size)) < 0) { - av_log(ctx, AV_LOG_ERROR, "Failed to initialize bitstream reader\n"); - return res; + if ((ret = init_get_bits8(&s->gb, data, size)) < 0) { + av_log(avctx, AV_LOG_ERROR, "Failed to initialize bitstream reader\n"); + return ret; } if (get_bits(&s->gb, 2) != 0x2) { // frame marker - av_log(ctx, AV_LOG_ERROR, "Invalid frame marker\n"); + av_log(avctx, AV_LOG_ERROR, "Invalid frame marker\n"); return AVERROR_INVALIDDATA; } - ctx->profile = get_bits1(&s->gb); - ctx->profile |= get_bits1(&s->gb) << 1; - if (ctx->profile == 3) ctx->profile += get_bits1(&s->gb); - if (ctx->profile > 3) { - av_log(ctx, AV_LOG_ERROR, "Profile %d is not yet supported\n", ctx->profile); + avctx->profile = get_bits1(&s->gb); + avctx->profile |= get_bits1(&s->gb) << 1; + if (avctx->profile == 3) avctx->profile += get_bits1(&s->gb); + if (avctx->profile > 3) { + av_log(avctx, AV_LOG_ERROR, "Profile %d is not yet supported\n", avctx->profile); return AVERROR_INVALIDDATA; } - s->s.h.profile = ctx->profile; + s->s.h.profile = avctx->profile; if (get_bits1(&s->gb)) { *ref = get_bits(&s->gb, 3); return 0; } + s->last_keyframe = s->s.h.keyframe; - s->s.h.keyframe = !get_bits1(&s->gb); - last_invisible = s->s.h.invisible; - s->s.h.invisible = !get_bits1(&s->gb); - s->s.h.errorres = get_bits1(&s->gb); + s->s.h.keyframe = !get_bits1(&s->gb); + + last_invisible = s->s.h.invisible; + s->s.h.invisible = !get_bits1(&s->gb); + s->s.h.errorres = get_bits1(&s->gb); s->s.h.use_last_frame_mvs = !s->s.h.errorres && !last_invisible; + if (s->s.h.keyframe) { if (get_bits_long(&s->gb, 24) != VP9_SYNCCODE) { // synccode - av_log(ctx, AV_LOG_ERROR, "Invalid sync code\n"); + av_log(avctx, AV_LOG_ERROR, "Invalid sync code\n"); return AVERROR_INVALIDDATA; } - if ((res = read_colorspace_details(ctx)) < 0) - return res; + if ((ret = read_colorspace_details(avctx)) < 0) + return ret; // for profile 1, here follows the subsampling bits s->s.h.refreshrefmask = 0xff; w = get_bits(&s->gb, 16) + 1; @@ -559,24 +513,24 @@ static int decode_frame_header(AVCodecContext *ctx, if (get_bits1(&s->gb)) // display size skip_bits(&s->gb, 32); } else { - s->s.h.intraonly = s->s.h.invisible ? get_bits1(&s->gb) : 0; - s->s.h.resetctx = s->s.h.errorres ? 0 : get_bits(&s->gb, 2); + s->s.h.intraonly = s->s.h.invisible ? get_bits1(&s->gb) : 0; + s->s.h.resetctx = s->s.h.errorres ? 0 : get_bits(&s->gb, 2); if (s->s.h.intraonly) { if (get_bits_long(&s->gb, 24) != VP9_SYNCCODE) { // synccode - av_log(ctx, AV_LOG_ERROR, "Invalid sync code\n"); + av_log(avctx, AV_LOG_ERROR, "Invalid sync code\n"); return AVERROR_INVALIDDATA; } - if (ctx->profile >= 1) { - if ((res = read_colorspace_details(ctx)) < 0) - return res; + if (avctx->profile >= 1) { + if ((ret = read_colorspace_details(avctx)) < 0) + return ret; } else { s->ss_h = s->ss_v = 1; - s->bpp = 8; + s->s.h.bpp = 8; s->bpp_index = 0; s->bytesperpixel = 1; s->pix_fmt = AV_PIX_FMT_YUV420P; - ctx->colorspace = AVCOL_SPC_BT470BG; - ctx->color_range = AVCOL_RANGE_JPEG; + avctx->colorspace = AVCOL_SPC_BT470BG; + avctx->color_range = AVCOL_RANGE_MPEG; } s->s.h.refreshrefmask = get_bits(&s->gb, 8); w = get_bits(&s->gb, 16) + 1; @@ -594,7 +548,7 @@ static int decode_frame_header(AVCodecContext *ctx, if (!s->s.refs[s->s.h.refidx[0]].f->buf[0] || !s->s.refs[s->s.h.refidx[1]].f->buf[0] || !s->s.refs[s->s.h.refidx[2]].f->buf[0]) { - av_log(ctx, AV_LOG_ERROR, "Not all references are available\n"); + av_log(avctx, AV_LOG_ERROR, "Not all references are available\n"); return AVERROR_INVALIDDATA; } if (get_bits1(&s->gb)) { @@ -660,8 +614,20 @@ static int decode_frame_header(AVCodecContext *ctx, sharp = get_bits(&s->gb, 3); // if sharpness changed, reinit lim/mblim LUTs. if it didn't change, keep // the old cache values since they are still valid - if (s->s.h.filter.sharpness != sharp) - memset(s->filter_lut.lim_lut, 0, sizeof(s->filter_lut.lim_lut)); + if (s->s.h.filter.sharpness != sharp) { + for (i = 1; i <= 63; i++) { + int limit = i; + + if (sharp > 0) { + limit >>= (sharp + 3) >> 2; + limit = FFMIN(limit, 9 - sharp); + } + limit = FFMAX(limit, 1); + + s->filter_lut.lim_lut[i] = limit; + s->filter_lut.mblim_lut[i] = 2 * (i + 2) + limit; + } + } s->s.h.filter.sharpness = sharp; if ((s->s.h.lf_delta.enabled = get_bits1(&s->gb))) { if ((s->s.h.lf_delta.updated = get_bits1(&s->gb))) { @@ -682,7 +648,7 @@ static int decode_frame_header(AVCodecContext *ctx, s->s.h.lossless = s->s.h.yac_qi == 0 && s->s.h.ydc_qdelta == 0 && s->s.h.uvdc_qdelta == 0 && s->s.h.uvac_qdelta == 0; if (s->s.h.lossless) - ctx->properties |= FF_CODEC_PROPERTY_LOSSLESS; + avctx->properties |= FF_CODEC_PROPERTY_LOSSLESS; /* segmentation header info */ if ((s->s.h.segmentation.enabled = get_bits1(&s->gb))) { @@ -690,11 +656,10 @@ static int decode_frame_header(AVCodecContext *ctx, for (i = 0; i < 7; i++) s->s.h.segmentation.prob[i] = get_bits1(&s->gb) ? get_bits(&s->gb, 8) : 255; - if ((s->s.h.segmentation.temporal = get_bits1(&s->gb))) { + if ((s->s.h.segmentation.temporal = get_bits1(&s->gb))) for (i = 0; i < 3; i++) s->s.h.segmentation.pred_prob[i] = get_bits1(&s->gb) ? get_bits(&s->gb, 8) : 255; - } } if (get_bits1(&s->gb)) { @@ -728,10 +693,10 @@ static int decode_frame_header(AVCodecContext *ctx, quvac = av_clip_uintp2(qyac + s->s.h.uvac_qdelta, 8); qyac = av_clip_uintp2(qyac, 8); - s->s.h.segmentation.feat[i].qmul[0][0] = vp9_dc_qlookup[s->bpp_index][qydc]; - s->s.h.segmentation.feat[i].qmul[0][1] = vp9_ac_qlookup[s->bpp_index][qyac]; - s->s.h.segmentation.feat[i].qmul[1][0] = vp9_dc_qlookup[s->bpp_index][quvdc]; - s->s.h.segmentation.feat[i].qmul[1][1] = vp9_ac_qlookup[s->bpp_index][quvac]; + s->s.h.segmentation.feat[i].qmul[0][0] = ff_vp9_dc_qlookup[s->bpp_index][qydc]; + s->s.h.segmentation.feat[i].qmul[0][1] = ff_vp9_ac_qlookup[s->bpp_index][qyac]; + s->s.h.segmentation.feat[i].qmul[1][0] = ff_vp9_dc_qlookup[s->bpp_index][quvdc]; + s->s.h.segmentation.feat[i].qmul[1][1] = ff_vp9_ac_qlookup[s->bpp_index][quvac]; sh = s->s.h.filter.level >= 32; if (s->s.h.segmentation.enabled && s->s.h.segmentation.feat[i].lf_enabled) { @@ -761,10 +726,10 @@ static int decode_frame_header(AVCodecContext *ctx, } /* tiling info */ - if ((res = update_size(ctx, w, h)) < 0) { - av_log(ctx, AV_LOG_ERROR, "Failed to initialize decoder for %dx%d @ %d\n", + if ((ret = update_size(avctx, w, h)) < 0) { + av_log(avctx, AV_LOG_ERROR, "Failed to initialize decoder for %dx%d @ %d\n", w, h, s->pix_fmt); - return res; + return ret; } for (s->s.h.tiling.log2_tile_cols = 0; s->sb_cols > (64 << s->s.h.tiling.log2_tile_cols); @@ -780,12 +745,36 @@ static int decode_frame_header(AVCodecContext *ctx, s->s.h.tiling.log2_tile_rows = decode012(&s->gb); s->s.h.tiling.tile_rows = 1 << s->s.h.tiling.log2_tile_rows; if (s->s.h.tiling.tile_cols != (1 << s->s.h.tiling.log2_tile_cols)) { + int n_range_coders; + VP56RangeCoder *rc; + + if (s->td) { + for (i = 0; i < s->active_tile_cols; i++) { + av_free(s->td[i].b_base); + av_free(s->td[i].block_base); + } + av_free(s->td); + } + s->s.h.tiling.tile_cols = 1 << s->s.h.tiling.log2_tile_cols; - s->c_b = av_fast_realloc(s->c_b, &s->c_b_size, - sizeof(VP56RangeCoder) * s->s.h.tiling.tile_cols); - if (!s->c_b) { - av_log(ctx, AV_LOG_ERROR, "Ran out of memory during range coder init\n"); + vp9_free_entries(avctx); + s->active_tile_cols = avctx->active_thread_type == FF_THREAD_SLICE ? + s->s.h.tiling.tile_cols : 1; + vp9_alloc_entries(avctx, s->sb_rows); + if (avctx->active_thread_type == FF_THREAD_SLICE) { + n_range_coders = 4; // max_tile_rows + } else { + n_range_coders = s->s.h.tiling.tile_cols; + } + s->td = av_mallocz_array(s->active_tile_cols, sizeof(VP9TileData) + + n_range_coders * sizeof(VP56RangeCoder)); + if (!s->td) return AVERROR(ENOMEM); + rc = (VP56RangeCoder *) &s->td[s->active_tile_cols]; + for (i = 0; i < s->active_tile_cols; i++) { + s->td[i].s = s; + s->td[i].c_b = rc; + rc += n_range_coders; } } @@ -795,17 +784,17 @@ static int decode_frame_header(AVCodecContext *ctx, AVFrame *ref = s->s.refs[s->s.h.refidx[i]].f; int refw = ref->width, refh = ref->height; - if (ref->format != ctx->pix_fmt) { - av_log(ctx, AV_LOG_ERROR, + if (ref->format != avctx->pix_fmt) { + av_log(avctx, AV_LOG_ERROR, "Ref pixfmt (%s) did not match current frame (%s)", av_get_pix_fmt_name(ref->format), - av_get_pix_fmt_name(ctx->pix_fmt)); + av_get_pix_fmt_name(avctx->pix_fmt)); return AVERROR_INVALIDDATA; } else if (refw == w && refh == h) { s->mvscale[i][0] = s->mvscale[i][1] = 0; } else { if (w * 2 < refw || h * 2 < refh || w > 16 * refw || h > 16 * refh) { - av_log(ctx, AV_LOG_ERROR, + av_log(avctx, AV_LOG_ERROR, "Invalid ref frame dimensions %dx%d for frame size %dx%d\n", refw, refh, w, h); return AVERROR_INVALIDDATA; @@ -820,19 +809,19 @@ static int decode_frame_header(AVCodecContext *ctx, if (s->s.h.keyframe || s->s.h.errorres || (s->s.h.intraonly && s->s.h.resetctx == 3)) { s->prob_ctx[0].p = s->prob_ctx[1].p = s->prob_ctx[2].p = - s->prob_ctx[3].p = vp9_default_probs; - memcpy(s->prob_ctx[0].coef, vp9_default_coef_probs, - sizeof(vp9_default_coef_probs)); - memcpy(s->prob_ctx[1].coef, vp9_default_coef_probs, - sizeof(vp9_default_coef_probs)); - memcpy(s->prob_ctx[2].coef, vp9_default_coef_probs, - sizeof(vp9_default_coef_probs)); - memcpy(s->prob_ctx[3].coef, vp9_default_coef_probs, - sizeof(vp9_default_coef_probs)); + s->prob_ctx[3].p = ff_vp9_default_probs; + memcpy(s->prob_ctx[0].coef, ff_vp9_default_coef_probs, + sizeof(ff_vp9_default_coef_probs)); + memcpy(s->prob_ctx[1].coef, ff_vp9_default_coef_probs, + sizeof(ff_vp9_default_coef_probs)); + memcpy(s->prob_ctx[2].coef, ff_vp9_default_coef_probs, + sizeof(ff_vp9_default_coef_probs)); + memcpy(s->prob_ctx[3].coef, ff_vp9_default_coef_probs, + sizeof(ff_vp9_default_coef_probs)); } else if (s->s.h.intraonly && s->s.h.resetctx == 2) { - s->prob_ctx[c].p = vp9_default_probs; - memcpy(s->prob_ctx[c].coef, vp9_default_coef_probs, - sizeof(vp9_default_coef_probs)); + s->prob_ctx[c].p = ff_vp9_default_probs; + memcpy(s->prob_ctx[c].coef, ff_vp9_default_coef_probs, + sizeof(ff_vp9_default_coef_probs)); } // next 16 bits is size of the rest of the header (arith-coded) @@ -841,24 +830,30 @@ static int decode_frame_header(AVCodecContext *ctx, data2 = align_get_bits(&s->gb); if (size2 > size - (data2 - data)) { - av_log(ctx, AV_LOG_ERROR, "Invalid compressed header size\n"); + av_log(avctx, AV_LOG_ERROR, "Invalid compressed header size\n"); return AVERROR_INVALIDDATA; } - ff_vp56_init_range_decoder(&s->c, data2, size2); + ret = ff_vp56_init_range_decoder(&s->c, data2, size2); + if (ret < 0) + return ret; + if (vp56_rac_get_prob_branchy(&s->c, 128)) { // marker bit - av_log(ctx, AV_LOG_ERROR, "Marker bit was set\n"); + av_log(avctx, AV_LOG_ERROR, "Marker bit was set\n"); return AVERROR_INVALIDDATA; } - if (s->s.h.keyframe || s->s.h.intraonly) { - memset(s->counts.coef, 0, sizeof(s->counts.coef)); - memset(s->counts.eob, 0, sizeof(s->counts.eob)); - } else { - memset(&s->counts, 0, sizeof(s->counts)); + for (i = 0; i < s->active_tile_cols; i++) { + if (s->s.h.keyframe || s->s.h.intraonly) { + memset(s->td[i].counts.coef, 0, sizeof(s->td[0].counts.coef)); + memset(s->td[i].counts.eob, 0, sizeof(s->td[0].counts.eob)); + } else { + memset(&s->td[i].counts, 0, sizeof(s->td[0].counts)); + } } - // FIXME is it faster to not copy here, but do it down in the fw updates - // as explicit copies if the fw update is missing (and skip the copy upon - // fw update)? + + /* FIXME is it faster to not copy here, but do it down in the fw updates + * as explicit copies if the fw update is missing (and skip the copy upon + * fw update)? */ s->prob.p = s->prob_ctx[c].p; // txfm updates @@ -899,13 +894,12 @@ static int decode_frame_header(AVCodecContext *ctx, if (m >= 3 && l == 0) // dc only has 3 pt break; for (n = 0; n < 3; n++) { - if (vp56_rac_get_prob_branchy(&s->c, 252)) { + if (vp56_rac_get_prob_branchy(&s->c, 252)) p[n] = update_prob(&s->c, r[n]); - } else { + else p[n] = r[n]; - } } - p[3] = 0; + memcpy(&p[3], ff_vp9_model_pareto8[p[2]], 8); } } else { for (j = 0; j < 2; j++) @@ -917,7 +911,7 @@ static int decode_frame_header(AVCodecContext *ctx, if (m > 3 && l == 0) // dc only has 3 pt break; memcpy(p, r, 3); - p[3] = 0; + memcpy(&p[3], ff_vp9_model_pareto8[p[2]], 8); } } if (s->s.h.txfmmode == i) @@ -988,7 +982,8 @@ static int decode_frame_header(AVCodecContext *ctx, for (k = 0; k < 3; k++) if (vp56_rac_get_prob_branchy(&s->c, 252)) s->prob.p.partition[3 - i][j][k] = - update_prob(&s->c, s->prob.p.partition[3 - i][j][k]); + update_prob(&s->c, + s->prob.p.partition[3 - i][j][k]); // mv fields don't use the update_prob subexp model for some reason for (i = 0; i < 3; i++) @@ -997,7 +992,8 @@ static int decode_frame_header(AVCodecContext *ctx, for (i = 0; i < 2; i++) { if (vp56_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].sign = (vp8_rac_get_uint(&s->c, 7) << 1) | 1; + s->prob.p.mv_comp[i].sign = + (vp8_rac_get_uint(&s->c, 7) << 1) | 1; for (j = 0; j < 10; j++) if (vp56_rac_get_prob_branchy(&s->c, 252)) @@ -1005,7 +1001,8 @@ static int decode_frame_header(AVCodecContext *ctx, (vp8_rac_get_uint(&s->c, 7) << 1) | 1; if (vp56_rac_get_prob_branchy(&s->c, 252)) - s->prob.p.mv_comp[i].class0 = (vp8_rac_get_uint(&s->c, 7) << 1) | 1; + s->prob.p.mv_comp[i].class0 = + (vp8_rac_get_uint(&s->c, 7) << 1) | 1; for (j = 0; j < 10; j++) if (vp56_rac_get_prob_branchy(&s->c, 252)) @@ -1042,2354 +1039,13 @@ static int decode_frame_header(AVCodecContext *ctx, return (data2 - data) + size2; } -static av_always_inline void clamp_mv(VP56mv *dst, const VP56mv *src, - VP9Context *s) -{ - dst->x = av_clip(src->x, s->min_mv.x, s->max_mv.x); - dst->y = av_clip(src->y, s->min_mv.y, s->max_mv.y); -} - -static void find_ref_mvs(VP9Context *s, - VP56mv *pmv, int ref, int z, int idx, int sb) -{ - static const int8_t mv_ref_blk_off[N_BS_SIZES][8][2] = { - [BS_64x64] = {{ 3, -1 }, { -1, 3 }, { 4, -1 }, { -1, 4 }, - { -1, -1 }, { 0, -1 }, { -1, 0 }, { 6, -1 }}, - [BS_64x32] = {{ 0, -1 }, { -1, 0 }, { 4, -1 }, { -1, 2 }, - { -1, -1 }, { 0, -3 }, { -3, 0 }, { 2, -1 }}, - [BS_32x64] = {{ -1, 0 }, { 0, -1 }, { -1, 4 }, { 2, -1 }, - { -1, -1 }, { -3, 0 }, { 0, -3 }, { -1, 2 }}, - [BS_32x32] = {{ 1, -1 }, { -1, 1 }, { 2, -1 }, { -1, 2 }, - { -1, -1 }, { 0, -3 }, { -3, 0 }, { -3, -3 }}, - [BS_32x16] = {{ 0, -1 }, { -1, 0 }, { 2, -1 }, { -1, -1 }, - { -1, 1 }, { 0, -3 }, { -3, 0 }, { -3, -3 }}, - [BS_16x32] = {{ -1, 0 }, { 0, -1 }, { -1, 2 }, { -1, -1 }, - { 1, -1 }, { -3, 0 }, { 0, -3 }, { -3, -3 }}, - [BS_16x16] = {{ 0, -1 }, { -1, 0 }, { 1, -1 }, { -1, 1 }, - { -1, -1 }, { 0, -3 }, { -3, 0 }, { -3, -3 }}, - [BS_16x8] = {{ 0, -1 }, { -1, 0 }, { 1, -1 }, { -1, -1 }, - { 0, -2 }, { -2, 0 }, { -2, -1 }, { -1, -2 }}, - [BS_8x16] = {{ -1, 0 }, { 0, -1 }, { -1, 1 }, { -1, -1 }, - { -2, 0 }, { 0, -2 }, { -1, -2 }, { -2, -1 }}, - [BS_8x8] = {{ 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, - { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 }}, - [BS_8x4] = {{ 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, - { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 }}, - [BS_4x8] = {{ 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, - { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 }}, - [BS_4x4] = {{ 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, - { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 }}, - }; - VP9Block *b = s->b; - int row = s->row, col = s->col, row7 = s->row7; - const int8_t (*p)[2] = mv_ref_blk_off[b->bs]; -#define INVALID_MV 0x80008000U - uint32_t mem = INVALID_MV, mem_sub8x8 = INVALID_MV; - int i; - -#define RETURN_DIRECT_MV(mv) \ - do { \ - uint32_t m = AV_RN32A(&mv); \ - if (!idx) { \ - AV_WN32A(pmv, m); \ - return; \ - } else if (mem == INVALID_MV) { \ - mem = m; \ - } else if (m != mem) { \ - AV_WN32A(pmv, m); \ - return; \ - } \ - } while (0) - - if (sb >= 0) { - if (sb == 2 || sb == 1) { - RETURN_DIRECT_MV(b->mv[0][z]); - } else if (sb == 3) { - RETURN_DIRECT_MV(b->mv[2][z]); - RETURN_DIRECT_MV(b->mv[1][z]); - RETURN_DIRECT_MV(b->mv[0][z]); - } - -#define RETURN_MV(mv) \ - do { \ - if (sb > 0) { \ - VP56mv tmp; \ - uint32_t m; \ - av_assert2(idx == 1); \ - av_assert2(mem != INVALID_MV); \ - if (mem_sub8x8 == INVALID_MV) { \ - clamp_mv(&tmp, &mv, s); \ - m = AV_RN32A(&tmp); \ - if (m != mem) { \ - AV_WN32A(pmv, m); \ - return; \ - } \ - mem_sub8x8 = AV_RN32A(&mv); \ - } else if (mem_sub8x8 != AV_RN32A(&mv)) { \ - clamp_mv(&tmp, &mv, s); \ - m = AV_RN32A(&tmp); \ - if (m != mem) { \ - AV_WN32A(pmv, m); \ - } else { \ - /* BUG I'm pretty sure this isn't the intention */ \ - AV_WN32A(pmv, 0); \ - } \ - return; \ - } \ - } else { \ - uint32_t m = AV_RN32A(&mv); \ - if (!idx) { \ - clamp_mv(pmv, &mv, s); \ - return; \ - } else if (mem == INVALID_MV) { \ - mem = m; \ - } else if (m != mem) { \ - clamp_mv(pmv, &mv, s); \ - return; \ - } \ - } \ - } while (0) - - if (row > 0) { - struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[(row - 1) * s->sb_cols * 8 + col]; - if (mv->ref[0] == ref) { - RETURN_MV(s->above_mv_ctx[2 * col + (sb & 1)][0]); - } else if (mv->ref[1] == ref) { - RETURN_MV(s->above_mv_ctx[2 * col + (sb & 1)][1]); - } - } - if (col > s->tile_col_start) { - struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[row * s->sb_cols * 8 + col - 1]; - if (mv->ref[0] == ref) { - RETURN_MV(s->left_mv_ctx[2 * row7 + (sb >> 1)][0]); - } else if (mv->ref[1] == ref) { - RETURN_MV(s->left_mv_ctx[2 * row7 + (sb >> 1)][1]); - } - } - i = 2; - } else { - i = 0; - } - - // previously coded MVs in this neighbourhood, using same reference frame - for (; i < 8; i++) { - int c = p[i][0] + col, r = p[i][1] + row; - - if (c >= s->tile_col_start && c < s->cols && r >= 0 && r < s->rows) { - struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; - - if (mv->ref[0] == ref) { - RETURN_MV(mv->mv[0]); - } else if (mv->ref[1] == ref) { - RETURN_MV(mv->mv[1]); - } - } - } - - // MV at this position in previous frame, using same reference frame - if (s->s.h.use_last_frame_mvs) { - struct VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; - - if (!s->s.frames[REF_FRAME_MVPAIR].uses_2pass) - ff_thread_await_progress(&s->s.frames[REF_FRAME_MVPAIR].tf, row >> 3, 0); - if (mv->ref[0] == ref) { - RETURN_MV(mv->mv[0]); - } else if (mv->ref[1] == ref) { - RETURN_MV(mv->mv[1]); - } - } - -#define RETURN_SCALE_MV(mv, scale) \ - do { \ - if (scale) { \ - VP56mv mv_temp = { -mv.x, -mv.y }; \ - RETURN_MV(mv_temp); \ - } else { \ - RETURN_MV(mv); \ - } \ - } while (0) - - // previously coded MVs in this neighbourhood, using different reference frame - for (i = 0; i < 8; i++) { - int c = p[i][0] + col, r = p[i][1] + row; - - if (c >= s->tile_col_start && c < s->cols && r >= 0 && r < s->rows) { - struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; - - if (mv->ref[0] != ref && mv->ref[0] >= 0) { - RETURN_SCALE_MV(mv->mv[0], s->s.h.signbias[mv->ref[0]] != s->s.h.signbias[ref]); - } - if (mv->ref[1] != ref && mv->ref[1] >= 0 && - // BUG - libvpx has this condition regardless of whether - // we used the first ref MV and pre-scaling - AV_RN32A(&mv->mv[0]) != AV_RN32A(&mv->mv[1])) { - RETURN_SCALE_MV(mv->mv[1], s->s.h.signbias[mv->ref[1]] != s->s.h.signbias[ref]); - } - } - } - - // MV at this position in previous frame, using different reference frame - if (s->s.h.use_last_frame_mvs) { - struct VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; - - // no need to await_progress, because we already did that above - if (mv->ref[0] != ref && mv->ref[0] >= 0) { - RETURN_SCALE_MV(mv->mv[0], s->s.h.signbias[mv->ref[0]] != s->s.h.signbias[ref]); - } - if (mv->ref[1] != ref && mv->ref[1] >= 0 && - // BUG - libvpx has this condition regardless of whether - // we used the first ref MV and pre-scaling - AV_RN32A(&mv->mv[0]) != AV_RN32A(&mv->mv[1])) { - RETURN_SCALE_MV(mv->mv[1], s->s.h.signbias[mv->ref[1]] != s->s.h.signbias[ref]); - } - } - - AV_ZERO32(pmv); - clamp_mv(pmv, pmv, s); -#undef INVALID_MV -#undef RETURN_MV -#undef RETURN_SCALE_MV -} - -static av_always_inline int read_mv_component(VP9Context *s, int idx, int hp) -{ - int bit, sign = vp56_rac_get_prob(&s->c, s->prob.p.mv_comp[idx].sign); - int n, c = vp8_rac_get_tree(&s->c, vp9_mv_class_tree, - s->prob.p.mv_comp[idx].classes); - - s->counts.mv_comp[idx].sign[sign]++; - s->counts.mv_comp[idx].classes[c]++; - if (c) { - int m; - - for (n = 0, m = 0; m < c; m++) { - bit = vp56_rac_get_prob(&s->c, s->prob.p.mv_comp[idx].bits[m]); - n |= bit << m; - s->counts.mv_comp[idx].bits[m][bit]++; - } - n <<= 3; - bit = vp8_rac_get_tree(&s->c, vp9_mv_fp_tree, s->prob.p.mv_comp[idx].fp); - n |= bit << 1; - s->counts.mv_comp[idx].fp[bit]++; - if (hp) { - bit = vp56_rac_get_prob(&s->c, s->prob.p.mv_comp[idx].hp); - s->counts.mv_comp[idx].hp[bit]++; - n |= bit; - } else { - n |= 1; - // bug in libvpx - we count for bw entropy purposes even if the - // bit wasn't coded - s->counts.mv_comp[idx].hp[1]++; - } - n += 8 << c; - } else { - n = vp56_rac_get_prob(&s->c, s->prob.p.mv_comp[idx].class0); - s->counts.mv_comp[idx].class0[n]++; - bit = vp8_rac_get_tree(&s->c, vp9_mv_fp_tree, - s->prob.p.mv_comp[idx].class0_fp[n]); - s->counts.mv_comp[idx].class0_fp[n][bit]++; - n = (n << 3) | (bit << 1); - if (hp) { - bit = vp56_rac_get_prob(&s->c, s->prob.p.mv_comp[idx].class0_hp); - s->counts.mv_comp[idx].class0_hp[bit]++; - n |= bit; - } else { - n |= 1; - // bug in libvpx - we count for bw entropy purposes even if the - // bit wasn't coded - s->counts.mv_comp[idx].class0_hp[1]++; - } - } - - return sign ? -(n + 1) : (n + 1); -} - -static void fill_mv(VP9Context *s, - VP56mv *mv, int mode, int sb) -{ - VP9Block *b = s->b; - - if (mode == ZEROMV) { - AV_ZERO64(mv); - } else { - int hp; - - // FIXME cache this value and reuse for other subblocks - find_ref_mvs(s, &mv[0], b->ref[0], 0, mode == NEARMV, - mode == NEWMV ? -1 : sb); - // FIXME maybe move this code into find_ref_mvs() - if ((mode == NEWMV || sb == -1) && - !(hp = s->s.h.highprecisionmvs && abs(mv[0].x) < 64 && abs(mv[0].y) < 64)) { - if (mv[0].y & 1) { - if (mv[0].y < 0) - mv[0].y++; - else - mv[0].y--; - } - if (mv[0].x & 1) { - if (mv[0].x < 0) - mv[0].x++; - else - mv[0].x--; - } - } - if (mode == NEWMV) { - enum MVJoint j = vp8_rac_get_tree(&s->c, vp9_mv_joint_tree, - s->prob.p.mv_joint); - - s->counts.mv_joint[j]++; - if (j >= MV_JOINT_V) - mv[0].y += read_mv_component(s, 0, hp); - if (j & 1) - mv[0].x += read_mv_component(s, 1, hp); - } - - if (b->comp) { - // FIXME cache this value and reuse for other subblocks - find_ref_mvs(s, &mv[1], b->ref[1], 1, mode == NEARMV, - mode == NEWMV ? -1 : sb); - if ((mode == NEWMV || sb == -1) && - !(hp = s->s.h.highprecisionmvs && abs(mv[1].x) < 64 && abs(mv[1].y) < 64)) { - if (mv[1].y & 1) { - if (mv[1].y < 0) - mv[1].y++; - else - mv[1].y--; - } - if (mv[1].x & 1) { - if (mv[1].x < 0) - mv[1].x++; - else - mv[1].x--; - } - } - if (mode == NEWMV) { - enum MVJoint j = vp8_rac_get_tree(&s->c, vp9_mv_joint_tree, - s->prob.p.mv_joint); - - s->counts.mv_joint[j]++; - if (j >= MV_JOINT_V) - mv[1].y += read_mv_component(s, 0, hp); - if (j & 1) - mv[1].x += read_mv_component(s, 1, hp); - } - } - } -} - -static av_always_inline void setctx_2d(uint8_t *ptr, int w, int h, - ptrdiff_t stride, int v) -{ - switch (w) { - case 1: - do { - *ptr = v; - ptr += stride; - } while (--h); - break; - case 2: { - int v16 = v * 0x0101; - do { - AV_WN16A(ptr, v16); - ptr += stride; - } while (--h); - break; - } - case 4: { - uint32_t v32 = v * 0x01010101; - do { - AV_WN32A(ptr, v32); - ptr += stride; - } while (--h); - break; - } - case 8: { -#if HAVE_FAST_64BIT - uint64_t v64 = v * 0x0101010101010101ULL; - do { - AV_WN64A(ptr, v64); - ptr += stride; - } while (--h); -#else - uint32_t v32 = v * 0x01010101; - do { - AV_WN32A(ptr, v32); - AV_WN32A(ptr + 4, v32); - ptr += stride; - } while (--h); -#endif - break; - } - } -} - -static void decode_mode(AVCodecContext *ctx) -{ - static const uint8_t left_ctx[N_BS_SIZES] = { - 0x0, 0x8, 0x0, 0x8, 0xc, 0x8, 0xc, 0xe, 0xc, 0xe, 0xf, 0xe, 0xf - }; - static const uint8_t above_ctx[N_BS_SIZES] = { - 0x0, 0x0, 0x8, 0x8, 0x8, 0xc, 0xc, 0xc, 0xe, 0xe, 0xe, 0xf, 0xf - }; - static const uint8_t max_tx_for_bl_bp[N_BS_SIZES] = { - TX_32X32, TX_32X32, TX_32X32, TX_32X32, TX_16X16, TX_16X16, - TX_16X16, TX_8X8, TX_8X8, TX_8X8, TX_4X4, TX_4X4, TX_4X4 - }; - VP9Context *s = ctx->priv_data; - VP9Block *b = s->b; - int row = s->row, col = s->col, row7 = s->row7; - enum TxfmMode max_tx = max_tx_for_bl_bp[b->bs]; - int bw4 = bwh_tab[1][b->bs][0], w4 = FFMIN(s->cols - col, bw4); - int bh4 = bwh_tab[1][b->bs][1], h4 = FFMIN(s->rows - row, bh4), y; - int have_a = row > 0, have_l = col > s->tile_col_start; - int vref, filter_id; - - if (!s->s.h.segmentation.enabled) { - b->seg_id = 0; - } else if (s->s.h.keyframe || s->s.h.intraonly) { - b->seg_id = !s->s.h.segmentation.update_map ? 0 : - vp8_rac_get_tree(&s->c, vp9_segmentation_tree, s->s.h.segmentation.prob); - } else if (!s->s.h.segmentation.update_map || - (s->s.h.segmentation.temporal && - vp56_rac_get_prob_branchy(&s->c, - s->s.h.segmentation.pred_prob[s->above_segpred_ctx[col] + - s->left_segpred_ctx[row7]]))) { - if (!s->s.h.errorres && s->s.frames[REF_FRAME_SEGMAP].segmentation_map) { - int pred = 8, x; - uint8_t *refsegmap = s->s.frames[REF_FRAME_SEGMAP].segmentation_map; - - if (!s->s.frames[REF_FRAME_SEGMAP].uses_2pass) - ff_thread_await_progress(&s->s.frames[REF_FRAME_SEGMAP].tf, row >> 3, 0); - for (y = 0; y < h4; y++) { - int idx_base = (y + row) * 8 * s->sb_cols + col; - for (x = 0; x < w4; x++) - pred = FFMIN(pred, refsegmap[idx_base + x]); - } - av_assert1(pred < 8); - b->seg_id = pred; - } else { - b->seg_id = 0; - } - - memset(&s->above_segpred_ctx[col], 1, w4); - memset(&s->left_segpred_ctx[row7], 1, h4); - } else { - b->seg_id = vp8_rac_get_tree(&s->c, vp9_segmentation_tree, - s->s.h.segmentation.prob); - - memset(&s->above_segpred_ctx[col], 0, w4); - memset(&s->left_segpred_ctx[row7], 0, h4); - } - if (s->s.h.segmentation.enabled && - (s->s.h.segmentation.update_map || s->s.h.keyframe || s->s.h.intraonly)) { - setctx_2d(&s->s.frames[CUR_FRAME].segmentation_map[row * 8 * s->sb_cols + col], - bw4, bh4, 8 * s->sb_cols, b->seg_id); - } - - b->skip = s->s.h.segmentation.enabled && - s->s.h.segmentation.feat[b->seg_id].skip_enabled; - if (!b->skip) { - int c = s->left_skip_ctx[row7] + s->above_skip_ctx[col]; - b->skip = vp56_rac_get_prob(&s->c, s->prob.p.skip[c]); - s->counts.skip[c][b->skip]++; - } - - if (s->s.h.keyframe || s->s.h.intraonly) { - b->intra = 1; - } else if (s->s.h.segmentation.enabled && s->s.h.segmentation.feat[b->seg_id].ref_enabled) { - b->intra = !s->s.h.segmentation.feat[b->seg_id].ref_val; - } else { - int c, bit; - - if (have_a && have_l) { - c = s->above_intra_ctx[col] + s->left_intra_ctx[row7]; - c += (c == 2); - } else { - c = have_a ? 2 * s->above_intra_ctx[col] : - have_l ? 2 * s->left_intra_ctx[row7] : 0; - } - bit = vp56_rac_get_prob(&s->c, s->prob.p.intra[c]); - s->counts.intra[c][bit]++; - b->intra = !bit; - } - - if ((b->intra || !b->skip) && s->s.h.txfmmode == TX_SWITCHABLE) { - int c; - if (have_a) { - if (have_l) { - c = (s->above_skip_ctx[col] ? max_tx : - s->above_txfm_ctx[col]) + - (s->left_skip_ctx[row7] ? max_tx : - s->left_txfm_ctx[row7]) > max_tx; - } else { - c = s->above_skip_ctx[col] ? 1 : - (s->above_txfm_ctx[col] * 2 > max_tx); - } - } else if (have_l) { - c = s->left_skip_ctx[row7] ? 1 : - (s->left_txfm_ctx[row7] * 2 > max_tx); - } else { - c = 1; - } - switch (max_tx) { - case TX_32X32: - b->tx = vp56_rac_get_prob(&s->c, s->prob.p.tx32p[c][0]); - if (b->tx) { - b->tx += vp56_rac_get_prob(&s->c, s->prob.p.tx32p[c][1]); - if (b->tx == 2) - b->tx += vp56_rac_get_prob(&s->c, s->prob.p.tx32p[c][2]); - } - s->counts.tx32p[c][b->tx]++; - break; - case TX_16X16: - b->tx = vp56_rac_get_prob(&s->c, s->prob.p.tx16p[c][0]); - if (b->tx) - b->tx += vp56_rac_get_prob(&s->c, s->prob.p.tx16p[c][1]); - s->counts.tx16p[c][b->tx]++; - break; - case TX_8X8: - b->tx = vp56_rac_get_prob(&s->c, s->prob.p.tx8p[c]); - s->counts.tx8p[c][b->tx]++; - break; - case TX_4X4: - b->tx = TX_4X4; - break; - } - } else { - b->tx = FFMIN(max_tx, s->s.h.txfmmode); - } - - if (s->s.h.keyframe || s->s.h.intraonly) { - uint8_t *a = &s->above_mode_ctx[col * 2]; - uint8_t *l = &s->left_mode_ctx[(row7) << 1]; - - b->comp = 0; - if (b->bs > BS_8x8) { - // FIXME the memory storage intermediates here aren't really - // necessary, they're just there to make the code slightly - // simpler for now - b->mode[0] = a[0] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - vp9_default_kf_ymode_probs[a[0]][l[0]]); - if (b->bs != BS_8x4) { - b->mode[1] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - vp9_default_kf_ymode_probs[a[1]][b->mode[0]]); - l[0] = a[1] = b->mode[1]; - } else { - l[0] = a[1] = b->mode[1] = b->mode[0]; - } - if (b->bs != BS_4x8) { - b->mode[2] = a[0] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - vp9_default_kf_ymode_probs[a[0]][l[1]]); - if (b->bs != BS_8x4) { - b->mode[3] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - vp9_default_kf_ymode_probs[a[1]][b->mode[2]]); - l[1] = a[1] = b->mode[3]; - } else { - l[1] = a[1] = b->mode[3] = b->mode[2]; - } - } else { - b->mode[2] = b->mode[0]; - l[1] = a[1] = b->mode[3] = b->mode[1]; - } - } else { - b->mode[0] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - vp9_default_kf_ymode_probs[*a][*l]); - b->mode[3] = b->mode[2] = b->mode[1] = b->mode[0]; - // FIXME this can probably be optimized - memset(a, b->mode[0], bwh_tab[0][b->bs][0]); - memset(l, b->mode[0], bwh_tab[0][b->bs][1]); - } - b->uvmode = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - vp9_default_kf_uvmode_probs[b->mode[3]]); - } else if (b->intra) { - b->comp = 0; - if (b->bs > BS_8x8) { - b->mode[0] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - s->prob.p.y_mode[0]); - s->counts.y_mode[0][b->mode[0]]++; - if (b->bs != BS_8x4) { - b->mode[1] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - s->prob.p.y_mode[0]); - s->counts.y_mode[0][b->mode[1]]++; - } else { - b->mode[1] = b->mode[0]; - } - if (b->bs != BS_4x8) { - b->mode[2] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - s->prob.p.y_mode[0]); - s->counts.y_mode[0][b->mode[2]]++; - if (b->bs != BS_8x4) { - b->mode[3] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - s->prob.p.y_mode[0]); - s->counts.y_mode[0][b->mode[3]]++; - } else { - b->mode[3] = b->mode[2]; - } - } else { - b->mode[2] = b->mode[0]; - b->mode[3] = b->mode[1]; - } - } else { - static const uint8_t size_group[10] = { - 3, 3, 3, 3, 2, 2, 2, 1, 1, 1 - }; - int sz = size_group[b->bs]; - - b->mode[0] = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - s->prob.p.y_mode[sz]); - b->mode[1] = b->mode[2] = b->mode[3] = b->mode[0]; - s->counts.y_mode[sz][b->mode[3]]++; - } - b->uvmode = vp8_rac_get_tree(&s->c, vp9_intramode_tree, - s->prob.p.uv_mode[b->mode[3]]); - s->counts.uv_mode[b->mode[3]][b->uvmode]++; - } else { - static const uint8_t inter_mode_ctx_lut[14][14] = { - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, - { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 1, 3 }, - { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 1, 3 }, - { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 0, 3 }, - { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 4 }, - }; - - if (s->s.h.segmentation.enabled && s->s.h.segmentation.feat[b->seg_id].ref_enabled) { - av_assert2(s->s.h.segmentation.feat[b->seg_id].ref_val != 0); - b->comp = 0; - b->ref[0] = s->s.h.segmentation.feat[b->seg_id].ref_val - 1; - } else { - // read comp_pred flag - if (s->s.h.comppredmode != PRED_SWITCHABLE) { - b->comp = s->s.h.comppredmode == PRED_COMPREF; - } else { - int c; - - // FIXME add intra as ref=0xff (or -1) to make these easier? - if (have_a) { - if (have_l) { - if (s->above_comp_ctx[col] && s->left_comp_ctx[row7]) { - c = 4; - } else if (s->above_comp_ctx[col]) { - c = 2 + (s->left_intra_ctx[row7] || - s->left_ref_ctx[row7] == s->s.h.fixcompref); - } else if (s->left_comp_ctx[row7]) { - c = 2 + (s->above_intra_ctx[col] || - s->above_ref_ctx[col] == s->s.h.fixcompref); - } else { - c = (!s->above_intra_ctx[col] && - s->above_ref_ctx[col] == s->s.h.fixcompref) ^ - (!s->left_intra_ctx[row7] && - s->left_ref_ctx[row & 7] == s->s.h.fixcompref); - } - } else { - c = s->above_comp_ctx[col] ? 3 : - (!s->above_intra_ctx[col] && s->above_ref_ctx[col] == s->s.h.fixcompref); - } - } else if (have_l) { - c = s->left_comp_ctx[row7] ? 3 : - (!s->left_intra_ctx[row7] && s->left_ref_ctx[row7] == s->s.h.fixcompref); - } else { - c = 1; - } - b->comp = vp56_rac_get_prob(&s->c, s->prob.p.comp[c]); - s->counts.comp[c][b->comp]++; - } - - // read actual references - // FIXME probably cache a few variables here to prevent repetitive - // memory accesses below - if (b->comp) /* two references */ { - int fix_idx = s->s.h.signbias[s->s.h.fixcompref], var_idx = !fix_idx, c, bit; - - b->ref[fix_idx] = s->s.h.fixcompref; - // FIXME can this codeblob be replaced by some sort of LUT? - if (have_a) { - if (have_l) { - if (s->above_intra_ctx[col]) { - if (s->left_intra_ctx[row7]) { - c = 2; - } else { - c = 1 + 2 * (s->left_ref_ctx[row7] != s->s.h.varcompref[1]); - } - } else if (s->left_intra_ctx[row7]) { - c = 1 + 2 * (s->above_ref_ctx[col] != s->s.h.varcompref[1]); - } else { - int refl = s->left_ref_ctx[row7], refa = s->above_ref_ctx[col]; - - if (refl == refa && refa == s->s.h.varcompref[1]) { - c = 0; - } else if (!s->left_comp_ctx[row7] && !s->above_comp_ctx[col]) { - if ((refa == s->s.h.fixcompref && refl == s->s.h.varcompref[0]) || - (refl == s->s.h.fixcompref && refa == s->s.h.varcompref[0])) { - c = 4; - } else { - c = (refa == refl) ? 3 : 1; - } - } else if (!s->left_comp_ctx[row7]) { - if (refa == s->s.h.varcompref[1] && refl != s->s.h.varcompref[1]) { - c = 1; - } else { - c = (refl == s->s.h.varcompref[1] && - refa != s->s.h.varcompref[1]) ? 2 : 4; - } - } else if (!s->above_comp_ctx[col]) { - if (refl == s->s.h.varcompref[1] && refa != s->s.h.varcompref[1]) { - c = 1; - } else { - c = (refa == s->s.h.varcompref[1] && - refl != s->s.h.varcompref[1]) ? 2 : 4; - } - } else { - c = (refl == refa) ? 4 : 2; - } - } - } else { - if (s->above_intra_ctx[col]) { - c = 2; - } else if (s->above_comp_ctx[col]) { - c = 4 * (s->above_ref_ctx[col] != s->s.h.varcompref[1]); - } else { - c = 3 * (s->above_ref_ctx[col] != s->s.h.varcompref[1]); - } - } - } else if (have_l) { - if (s->left_intra_ctx[row7]) { - c = 2; - } else if (s->left_comp_ctx[row7]) { - c = 4 * (s->left_ref_ctx[row7] != s->s.h.varcompref[1]); - } else { - c = 3 * (s->left_ref_ctx[row7] != s->s.h.varcompref[1]); - } - } else { - c = 2; - } - bit = vp56_rac_get_prob(&s->c, s->prob.p.comp_ref[c]); - b->ref[var_idx] = s->s.h.varcompref[bit]; - s->counts.comp_ref[c][bit]++; - } else /* single reference */ { - int bit, c; - - if (have_a && !s->above_intra_ctx[col]) { - if (have_l && !s->left_intra_ctx[row7]) { - if (s->left_comp_ctx[row7]) { - if (s->above_comp_ctx[col]) { - c = 1 + (!s->s.h.fixcompref || !s->left_ref_ctx[row7] || - !s->above_ref_ctx[col]); - } else { - c = (3 * !s->above_ref_ctx[col]) + - (!s->s.h.fixcompref || !s->left_ref_ctx[row7]); - } - } else if (s->above_comp_ctx[col]) { - c = (3 * !s->left_ref_ctx[row7]) + - (!s->s.h.fixcompref || !s->above_ref_ctx[col]); - } else { - c = 2 * !s->left_ref_ctx[row7] + 2 * !s->above_ref_ctx[col]; - } - } else if (s->above_intra_ctx[col]) { - c = 2; - } else if (s->above_comp_ctx[col]) { - c = 1 + (!s->s.h.fixcompref || !s->above_ref_ctx[col]); - } else { - c = 4 * (!s->above_ref_ctx[col]); - } - } else if (have_l && !s->left_intra_ctx[row7]) { - if (s->left_intra_ctx[row7]) { - c = 2; - } else if (s->left_comp_ctx[row7]) { - c = 1 + (!s->s.h.fixcompref || !s->left_ref_ctx[row7]); - } else { - c = 4 * (!s->left_ref_ctx[row7]); - } - } else { - c = 2; - } - bit = vp56_rac_get_prob(&s->c, s->prob.p.single_ref[c][0]); - s->counts.single_ref[c][0][bit]++; - if (!bit) { - b->ref[0] = 0; - } else { - // FIXME can this codeblob be replaced by some sort of LUT? - if (have_a) { - if (have_l) { - if (s->left_intra_ctx[row7]) { - if (s->above_intra_ctx[col]) { - c = 2; - } else if (s->above_comp_ctx[col]) { - c = 1 + 2 * (s->s.h.fixcompref == 1 || - s->above_ref_ctx[col] == 1); - } else if (!s->above_ref_ctx[col]) { - c = 3; - } else { - c = 4 * (s->above_ref_ctx[col] == 1); - } - } else if (s->above_intra_ctx[col]) { - if (s->left_intra_ctx[row7]) { - c = 2; - } else if (s->left_comp_ctx[row7]) { - c = 1 + 2 * (s->s.h.fixcompref == 1 || - s->left_ref_ctx[row7] == 1); - } else if (!s->left_ref_ctx[row7]) { - c = 3; - } else { - c = 4 * (s->left_ref_ctx[row7] == 1); - } - } else if (s->above_comp_ctx[col]) { - if (s->left_comp_ctx[row7]) { - if (s->left_ref_ctx[row7] == s->above_ref_ctx[col]) { - c = 3 * (s->s.h.fixcompref == 1 || - s->left_ref_ctx[row7] == 1); - } else { - c = 2; - } - } else if (!s->left_ref_ctx[row7]) { - c = 1 + 2 * (s->s.h.fixcompref == 1 || - s->above_ref_ctx[col] == 1); - } else { - c = 3 * (s->left_ref_ctx[row7] == 1) + - (s->s.h.fixcompref == 1 || s->above_ref_ctx[col] == 1); - } - } else if (s->left_comp_ctx[row7]) { - if (!s->above_ref_ctx[col]) { - c = 1 + 2 * (s->s.h.fixcompref == 1 || - s->left_ref_ctx[row7] == 1); - } else { - c = 3 * (s->above_ref_ctx[col] == 1) + - (s->s.h.fixcompref == 1 || s->left_ref_ctx[row7] == 1); - } - } else if (!s->above_ref_ctx[col]) { - if (!s->left_ref_ctx[row7]) { - c = 3; - } else { - c = 4 * (s->left_ref_ctx[row7] == 1); - } - } else if (!s->left_ref_ctx[row7]) { - c = 4 * (s->above_ref_ctx[col] == 1); - } else { - c = 2 * (s->left_ref_ctx[row7] == 1) + - 2 * (s->above_ref_ctx[col] == 1); - } - } else { - if (s->above_intra_ctx[col] || - (!s->above_comp_ctx[col] && !s->above_ref_ctx[col])) { - c = 2; - } else if (s->above_comp_ctx[col]) { - c = 3 * (s->s.h.fixcompref == 1 || s->above_ref_ctx[col] == 1); - } else { - c = 4 * (s->above_ref_ctx[col] == 1); - } - } - } else if (have_l) { - if (s->left_intra_ctx[row7] || - (!s->left_comp_ctx[row7] && !s->left_ref_ctx[row7])) { - c = 2; - } else if (s->left_comp_ctx[row7]) { - c = 3 * (s->s.h.fixcompref == 1 || s->left_ref_ctx[row7] == 1); - } else { - c = 4 * (s->left_ref_ctx[row7] == 1); - } - } else { - c = 2; - } - bit = vp56_rac_get_prob(&s->c, s->prob.p.single_ref[c][1]); - s->counts.single_ref[c][1][bit]++; - b->ref[0] = 1 + bit; - } - } - } - - if (b->bs <= BS_8x8) { - if (s->s.h.segmentation.enabled && s->s.h.segmentation.feat[b->seg_id].skip_enabled) { - b->mode[0] = b->mode[1] = b->mode[2] = b->mode[3] = ZEROMV; - } else { - static const uint8_t off[10] = { - 3, 0, 0, 1, 0, 0, 0, 0, 0, 0 - }; - - // FIXME this needs to use the LUT tables from find_ref_mvs - // because not all are -1,0/0,-1 - int c = inter_mode_ctx_lut[s->above_mode_ctx[col + off[b->bs]]] - [s->left_mode_ctx[row7 + off[b->bs]]]; - - b->mode[0] = vp8_rac_get_tree(&s->c, vp9_inter_mode_tree, - s->prob.p.mv_mode[c]); - b->mode[1] = b->mode[2] = b->mode[3] = b->mode[0]; - s->counts.mv_mode[c][b->mode[0] - 10]++; - } - } - - if (s->s.h.filtermode == FILTER_SWITCHABLE) { - int c; - - if (have_a && s->above_mode_ctx[col] >= NEARESTMV) { - if (have_l && s->left_mode_ctx[row7] >= NEARESTMV) { - c = s->above_filter_ctx[col] == s->left_filter_ctx[row7] ? - s->left_filter_ctx[row7] : 3; - } else { - c = s->above_filter_ctx[col]; - } - } else if (have_l && s->left_mode_ctx[row7] >= NEARESTMV) { - c = s->left_filter_ctx[row7]; - } else { - c = 3; - } - - filter_id = vp8_rac_get_tree(&s->c, vp9_filter_tree, - s->prob.p.filter[c]); - s->counts.filter[c][filter_id]++; - b->filter = vp9_filter_lut[filter_id]; - } else { - b->filter = s->s.h.filtermode; - } - - if (b->bs > BS_8x8) { - int c = inter_mode_ctx_lut[s->above_mode_ctx[col]][s->left_mode_ctx[row7]]; - - b->mode[0] = vp8_rac_get_tree(&s->c, vp9_inter_mode_tree, - s->prob.p.mv_mode[c]); - s->counts.mv_mode[c][b->mode[0] - 10]++; - fill_mv(s, b->mv[0], b->mode[0], 0); - - if (b->bs != BS_8x4) { - b->mode[1] = vp8_rac_get_tree(&s->c, vp9_inter_mode_tree, - s->prob.p.mv_mode[c]); - s->counts.mv_mode[c][b->mode[1] - 10]++; - fill_mv(s, b->mv[1], b->mode[1], 1); - } else { - b->mode[1] = b->mode[0]; - AV_COPY32(&b->mv[1][0], &b->mv[0][0]); - AV_COPY32(&b->mv[1][1], &b->mv[0][1]); - } - - if (b->bs != BS_4x8) { - b->mode[2] = vp8_rac_get_tree(&s->c, vp9_inter_mode_tree, - s->prob.p.mv_mode[c]); - s->counts.mv_mode[c][b->mode[2] - 10]++; - fill_mv(s, b->mv[2], b->mode[2], 2); - - if (b->bs != BS_8x4) { - b->mode[3] = vp8_rac_get_tree(&s->c, vp9_inter_mode_tree, - s->prob.p.mv_mode[c]); - s->counts.mv_mode[c][b->mode[3] - 10]++; - fill_mv(s, b->mv[3], b->mode[3], 3); - } else { - b->mode[3] = b->mode[2]; - AV_COPY32(&b->mv[3][0], &b->mv[2][0]); - AV_COPY32(&b->mv[3][1], &b->mv[2][1]); - } - } else { - b->mode[2] = b->mode[0]; - AV_COPY32(&b->mv[2][0], &b->mv[0][0]); - AV_COPY32(&b->mv[2][1], &b->mv[0][1]); - b->mode[3] = b->mode[1]; - AV_COPY32(&b->mv[3][0], &b->mv[1][0]); - AV_COPY32(&b->mv[3][1], &b->mv[1][1]); - } - } else { - fill_mv(s, b->mv[0], b->mode[0], -1); - AV_COPY32(&b->mv[1][0], &b->mv[0][0]); - AV_COPY32(&b->mv[2][0], &b->mv[0][0]); - AV_COPY32(&b->mv[3][0], &b->mv[0][0]); - AV_COPY32(&b->mv[1][1], &b->mv[0][1]); - AV_COPY32(&b->mv[2][1], &b->mv[0][1]); - AV_COPY32(&b->mv[3][1], &b->mv[0][1]); - } - - vref = b->ref[b->comp ? s->s.h.signbias[s->s.h.varcompref[0]] : 0]; - } - -#if HAVE_FAST_64BIT -#define SPLAT_CTX(var, val, n) \ - switch (n) { \ - case 1: var = val; break; \ - case 2: AV_WN16A(&var, val * 0x0101); break; \ - case 4: AV_WN32A(&var, val * 0x01010101); break; \ - case 8: AV_WN64A(&var, val * 0x0101010101010101ULL); break; \ - case 16: { \ - uint64_t v64 = val * 0x0101010101010101ULL; \ - AV_WN64A( &var, v64); \ - AV_WN64A(&((uint8_t *) &var)[8], v64); \ - break; \ - } \ - } -#else -#define SPLAT_CTX(var, val, n) \ - switch (n) { \ - case 1: var = val; break; \ - case 2: AV_WN16A(&var, val * 0x0101); break; \ - case 4: AV_WN32A(&var, val * 0x01010101); break; \ - case 8: { \ - uint32_t v32 = val * 0x01010101; \ - AV_WN32A( &var, v32); \ - AV_WN32A(&((uint8_t *) &var)[4], v32); \ - break; \ - } \ - case 16: { \ - uint32_t v32 = val * 0x01010101; \ - AV_WN32A( &var, v32); \ - AV_WN32A(&((uint8_t *) &var)[4], v32); \ - AV_WN32A(&((uint8_t *) &var)[8], v32); \ - AV_WN32A(&((uint8_t *) &var)[12], v32); \ - break; \ - } \ - } -#endif - - switch (bwh_tab[1][b->bs][0]) { -#define SET_CTXS(dir, off, n) \ - do { \ - SPLAT_CTX(s->dir##_skip_ctx[off], b->skip, n); \ - SPLAT_CTX(s->dir##_txfm_ctx[off], b->tx, n); \ - SPLAT_CTX(s->dir##_partition_ctx[off], dir##_ctx[b->bs], n); \ - if (!s->s.h.keyframe && !s->s.h.intraonly) { \ - SPLAT_CTX(s->dir##_intra_ctx[off], b->intra, n); \ - SPLAT_CTX(s->dir##_comp_ctx[off], b->comp, n); \ - SPLAT_CTX(s->dir##_mode_ctx[off], b->mode[3], n); \ - if (!b->intra) { \ - SPLAT_CTX(s->dir##_ref_ctx[off], vref, n); \ - if (s->s.h.filtermode == FILTER_SWITCHABLE) { \ - SPLAT_CTX(s->dir##_filter_ctx[off], filter_id, n); \ - } \ - } \ - } \ - } while (0) - case 1: SET_CTXS(above, col, 1); break; - case 2: SET_CTXS(above, col, 2); break; - case 4: SET_CTXS(above, col, 4); break; - case 8: SET_CTXS(above, col, 8); break; - } - switch (bwh_tab[1][b->bs][1]) { - case 1: SET_CTXS(left, row7, 1); break; - case 2: SET_CTXS(left, row7, 2); break; - case 4: SET_CTXS(left, row7, 4); break; - case 8: SET_CTXS(left, row7, 8); break; - } -#undef SPLAT_CTX -#undef SET_CTXS - - if (!s->s.h.keyframe && !s->s.h.intraonly) { - if (b->bs > BS_8x8) { - int mv0 = AV_RN32A(&b->mv[3][0]), mv1 = AV_RN32A(&b->mv[3][1]); - - AV_COPY32(&s->left_mv_ctx[row7 * 2 + 0][0], &b->mv[1][0]); - AV_COPY32(&s->left_mv_ctx[row7 * 2 + 0][1], &b->mv[1][1]); - AV_WN32A(&s->left_mv_ctx[row7 * 2 + 1][0], mv0); - AV_WN32A(&s->left_mv_ctx[row7 * 2 + 1][1], mv1); - AV_COPY32(&s->above_mv_ctx[col * 2 + 0][0], &b->mv[2][0]); - AV_COPY32(&s->above_mv_ctx[col * 2 + 0][1], &b->mv[2][1]); - AV_WN32A(&s->above_mv_ctx[col * 2 + 1][0], mv0); - AV_WN32A(&s->above_mv_ctx[col * 2 + 1][1], mv1); - } else { - int n, mv0 = AV_RN32A(&b->mv[3][0]), mv1 = AV_RN32A(&b->mv[3][1]); - - for (n = 0; n < w4 * 2; n++) { - AV_WN32A(&s->above_mv_ctx[col * 2 + n][0], mv0); - AV_WN32A(&s->above_mv_ctx[col * 2 + n][1], mv1); - } - for (n = 0; n < h4 * 2; n++) { - AV_WN32A(&s->left_mv_ctx[row7 * 2 + n][0], mv0); - AV_WN32A(&s->left_mv_ctx[row7 * 2 + n][1], mv1); - } - } - } - - // FIXME kinda ugly - for (y = 0; y < h4; y++) { - int x, o = (row + y) * s->sb_cols * 8 + col; - struct VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[o]; - - if (b->intra) { - for (x = 0; x < w4; x++) { - mv[x].ref[0] = - mv[x].ref[1] = -1; - } - } else if (b->comp) { - for (x = 0; x < w4; x++) { - mv[x].ref[0] = b->ref[0]; - mv[x].ref[1] = b->ref[1]; - AV_COPY32(&mv[x].mv[0], &b->mv[3][0]); - AV_COPY32(&mv[x].mv[1], &b->mv[3][1]); - } - } else { - for (x = 0; x < w4; x++) { - mv[x].ref[0] = b->ref[0]; - mv[x].ref[1] = -1; - AV_COPY32(&mv[x].mv[0], &b->mv[3][0]); - } - } - } -} - -// FIXME merge cnt/eob arguments? -static av_always_inline int -decode_coeffs_b_generic(VP56RangeCoder *c, int16_t *coef, int n_coeffs, - int is_tx32x32, int is8bitsperpixel, int bpp, unsigned (*cnt)[6][3], - unsigned (*eob)[6][2], uint8_t (*p)[6][11], - int nnz, const int16_t *scan, const int16_t (*nb)[2], - const int16_t *band_counts, const int16_t *qmul) -{ - int i = 0, band = 0, band_left = band_counts[band]; - uint8_t *tp = p[0][nnz]; - uint8_t cache[1024]; - - do { - int val, rc; - - val = vp56_rac_get_prob_branchy(c, tp[0]); // eob - eob[band][nnz][val]++; - if (!val) - break; - - skip_eob: - if (!vp56_rac_get_prob_branchy(c, tp[1])) { // zero - cnt[band][nnz][0]++; - if (!--band_left) - band_left = band_counts[++band]; - cache[scan[i]] = 0; - nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1; - tp = p[band][nnz]; - if (++i == n_coeffs) - break; //invalid input; blocks should end with EOB - goto skip_eob; - } - - rc = scan[i]; - if (!vp56_rac_get_prob_branchy(c, tp[2])) { // one - cnt[band][nnz][1]++; - val = 1; - cache[rc] = 1; - } else { - // fill in p[3-10] (model fill) - only once per frame for each pos - if (!tp[3]) - memcpy(&tp[3], vp9_model_pareto8[tp[2]], 8); - - cnt[band][nnz][2]++; - if (!vp56_rac_get_prob_branchy(c, tp[3])) { // 2, 3, 4 - if (!vp56_rac_get_prob_branchy(c, tp[4])) { - cache[rc] = val = 2; - } else { - val = 3 + vp56_rac_get_prob(c, tp[5]); - cache[rc] = 3; - } - } else if (!vp56_rac_get_prob_branchy(c, tp[6])) { // cat1/2 - cache[rc] = 4; - if (!vp56_rac_get_prob_branchy(c, tp[7])) { - val = 5 + vp56_rac_get_prob(c, 159); - } else { - val = 7 + (vp56_rac_get_prob(c, 165) << 1); - val += vp56_rac_get_prob(c, 145); - } - } else { // cat 3-6 - cache[rc] = 5; - if (!vp56_rac_get_prob_branchy(c, tp[8])) { - if (!vp56_rac_get_prob_branchy(c, tp[9])) { - val = 11 + (vp56_rac_get_prob(c, 173) << 2); - val += (vp56_rac_get_prob(c, 148) << 1); - val += vp56_rac_get_prob(c, 140); - } else { - val = 19 + (vp56_rac_get_prob(c, 176) << 3); - val += (vp56_rac_get_prob(c, 155) << 2); - val += (vp56_rac_get_prob(c, 140) << 1); - val += vp56_rac_get_prob(c, 135); - } - } else if (!vp56_rac_get_prob_branchy(c, tp[10])) { - val = 35 + (vp56_rac_get_prob(c, 180) << 4); - val += (vp56_rac_get_prob(c, 157) << 3); - val += (vp56_rac_get_prob(c, 141) << 2); - val += (vp56_rac_get_prob(c, 134) << 1); - val += vp56_rac_get_prob(c, 130); - } else { - val = 67; - if (!is8bitsperpixel) { - if (bpp == 12) { - val += vp56_rac_get_prob(c, 255) << 17; - val += vp56_rac_get_prob(c, 255) << 16; - } - val += (vp56_rac_get_prob(c, 255) << 15); - val += (vp56_rac_get_prob(c, 255) << 14); - } - val += (vp56_rac_get_prob(c, 254) << 13); - val += (vp56_rac_get_prob(c, 254) << 12); - val += (vp56_rac_get_prob(c, 254) << 11); - val += (vp56_rac_get_prob(c, 252) << 10); - val += (vp56_rac_get_prob(c, 249) << 9); - val += (vp56_rac_get_prob(c, 243) << 8); - val += (vp56_rac_get_prob(c, 230) << 7); - val += (vp56_rac_get_prob(c, 196) << 6); - val += (vp56_rac_get_prob(c, 177) << 5); - val += (vp56_rac_get_prob(c, 153) << 4); - val += (vp56_rac_get_prob(c, 140) << 3); - val += (vp56_rac_get_prob(c, 133) << 2); - val += (vp56_rac_get_prob(c, 130) << 1); - val += vp56_rac_get_prob(c, 129); - } - } - } -#define STORE_COEF(c, i, v) do { \ - if (is8bitsperpixel) { \ - c[i] = v; \ - } else { \ - AV_WN32A(&c[i * 2], v); \ - } \ -} while (0) - if (!--band_left) - band_left = band_counts[++band]; - if (is_tx32x32) - STORE_COEF(coef, rc, ((vp8_rac_get(c) ? -val : val) * qmul[!!i]) / 2); - else - STORE_COEF(coef, rc, (vp8_rac_get(c) ? -val : val) * qmul[!!i]); - nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1; - tp = p[band][nnz]; - } while (++i < n_coeffs); - - return i; -} - -static int decode_coeffs_b_8bpp(VP9Context *s, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], - uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, - const int16_t *qmul) -{ - return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 0, 1, 8, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -} - -static int decode_coeffs_b32_8bpp(VP9Context *s, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], - uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, - const int16_t *qmul) -{ - return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 1, 1, 8, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -} - -static int decode_coeffs_b_16bpp(VP9Context *s, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], - uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, - const int16_t *qmul) -{ - return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 0, 0, s->bpp, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -} - -static int decode_coeffs_b32_16bpp(VP9Context *s, int16_t *coef, int n_coeffs, - unsigned (*cnt)[6][3], unsigned (*eob)[6][2], - uint8_t (*p)[6][11], int nnz, const int16_t *scan, - const int16_t (*nb)[2], const int16_t *band_counts, - const int16_t *qmul) -{ - return decode_coeffs_b_generic(&s->c, coef, n_coeffs, 1, 0, s->bpp, cnt, eob, p, - nnz, scan, nb, band_counts, qmul); -} - -static av_always_inline int decode_coeffs(AVCodecContext *ctx, int is8bitsperpixel) -{ - VP9Context *s = ctx->priv_data; - VP9Block *b = s->b; - int row = s->row, col = s->col; - uint8_t (*p)[6][11] = s->prob.coef[b->tx][0 /* y */][!b->intra]; - unsigned (*c)[6][3] = s->counts.coef[b->tx][0 /* y */][!b->intra]; - unsigned (*e)[6][2] = s->counts.eob[b->tx][0 /* y */][!b->intra]; - int w4 = bwh_tab[1][b->bs][0] << 1, h4 = bwh_tab[1][b->bs][1] << 1; - int end_x = FFMIN(2 * (s->cols - col), w4); - int end_y = FFMIN(2 * (s->rows - row), h4); - int n, pl, x, y, res; - int16_t (*qmul)[2] = s->s.h.segmentation.feat[b->seg_id].qmul; - int tx = 4 * s->s.h.lossless + b->tx; - const int16_t * const *yscans = vp9_scans[tx]; - const int16_t (* const *ynbs)[2] = vp9_scans_nb[tx]; - const int16_t *uvscan = vp9_scans[b->uvtx][DCT_DCT]; - const int16_t (*uvnb)[2] = vp9_scans_nb[b->uvtx][DCT_DCT]; - uint8_t *a = &s->above_y_nnz_ctx[col * 2]; - uint8_t *l = &s->left_y_nnz_ctx[(row & 7) << 1]; - static const int16_t band_counts[4][8] = { - { 1, 2, 3, 4, 3, 16 - 13 }, - { 1, 2, 3, 4, 11, 64 - 21 }, - { 1, 2, 3, 4, 11, 256 - 21 }, - { 1, 2, 3, 4, 11, 1024 - 21 }, - }; - const int16_t *y_band_counts = band_counts[b->tx]; - const int16_t *uv_band_counts = band_counts[b->uvtx]; - int bytesperpixel = is8bitsperpixel ? 1 : 2; - int total_coeff = 0; - -#define MERGE(la, end, step, rd) \ - for (n = 0; n < end; n += step) \ - la[n] = !!rd(&la[n]) -#define MERGE_CTX(step, rd) \ - do { \ - MERGE(l, end_y, step, rd); \ - MERGE(a, end_x, step, rd); \ - } while (0) - -#define DECODE_Y_COEF_LOOP(step, mode_index, v) \ - for (n = 0, y = 0; y < end_y; y += step) { \ - for (x = 0; x < end_x; x += step, n += step * step) { \ - enum TxfmType txtp = vp9_intra_txfm_type[b->mode[mode_index]]; \ - res = (is8bitsperpixel ? decode_coeffs_b##v##_8bpp : decode_coeffs_b##v##_16bpp) \ - (s, s->block + 16 * n * bytesperpixel, 16 * step * step, \ - c, e, p, a[x] + l[y], yscans[txtp], \ - ynbs[txtp], y_band_counts, qmul[0]); \ - a[x] = l[y] = !!res; \ - total_coeff |= !!res; \ - if (step >= 4) { \ - AV_WN16A(&s->eob[n], res); \ - } else { \ - s->eob[n] = res; \ - } \ - } \ - } - -#define SPLAT(la, end, step, cond) \ - if (step == 2) { \ - for (n = 1; n < end; n += step) \ - la[n] = la[n - 1]; \ - } else if (step == 4) { \ - if (cond) { \ - for (n = 0; n < end; n += step) \ - AV_WN32A(&la[n], la[n] * 0x01010101); \ - } else { \ - for (n = 0; n < end; n += step) \ - memset(&la[n + 1], la[n], FFMIN(end - n - 1, 3)); \ - } \ - } else /* step == 8 */ { \ - if (cond) { \ - if (HAVE_FAST_64BIT) { \ - for (n = 0; n < end; n += step) \ - AV_WN64A(&la[n], la[n] * 0x0101010101010101ULL); \ - } else { \ - for (n = 0; n < end; n += step) { \ - uint32_t v32 = la[n] * 0x01010101; \ - AV_WN32A(&la[n], v32); \ - AV_WN32A(&la[n + 4], v32); \ - } \ - } \ - } else { \ - for (n = 0; n < end; n += step) \ - memset(&la[n + 1], la[n], FFMIN(end - n - 1, 7)); \ - } \ - } -#define SPLAT_CTX(step) \ - do { \ - SPLAT(a, end_x, step, end_x == w4); \ - SPLAT(l, end_y, step, end_y == h4); \ - } while (0) - - /* y tokens */ - switch (b->tx) { - case TX_4X4: - DECODE_Y_COEF_LOOP(1, b->bs > BS_8x8 ? n : 0,); - break; - case TX_8X8: - MERGE_CTX(2, AV_RN16A); - DECODE_Y_COEF_LOOP(2, 0,); - SPLAT_CTX(2); - break; - case TX_16X16: - MERGE_CTX(4, AV_RN32A); - DECODE_Y_COEF_LOOP(4, 0,); - SPLAT_CTX(4); - break; - case TX_32X32: - MERGE_CTX(8, AV_RN64A); - DECODE_Y_COEF_LOOP(8, 0, 32); - SPLAT_CTX(8); - break; - } - -#define DECODE_UV_COEF_LOOP(step, v) \ - for (n = 0, y = 0; y < end_y; y += step) { \ - for (x = 0; x < end_x; x += step, n += step * step) { \ - res = (is8bitsperpixel ? decode_coeffs_b##v##_8bpp : decode_coeffs_b##v##_16bpp) \ - (s, s->uvblock[pl] + 16 * n * bytesperpixel, \ - 16 * step * step, c, e, p, a[x] + l[y], \ - uvscan, uvnb, uv_band_counts, qmul[1]); \ - a[x] = l[y] = !!res; \ - total_coeff |= !!res; \ - if (step >= 4) { \ - AV_WN16A(&s->uveob[pl][n], res); \ - } else { \ - s->uveob[pl][n] = res; \ - } \ - } \ - } - - p = s->prob.coef[b->uvtx][1 /* uv */][!b->intra]; - c = s->counts.coef[b->uvtx][1 /* uv */][!b->intra]; - e = s->counts.eob[b->uvtx][1 /* uv */][!b->intra]; - w4 >>= s->ss_h; - end_x >>= s->ss_h; - h4 >>= s->ss_v; - end_y >>= s->ss_v; - for (pl = 0; pl < 2; pl++) { - a = &s->above_uv_nnz_ctx[pl][col << !s->ss_h]; - l = &s->left_uv_nnz_ctx[pl][(row & 7) << !s->ss_v]; - switch (b->uvtx) { - case TX_4X4: - DECODE_UV_COEF_LOOP(1,); - break; - case TX_8X8: - MERGE_CTX(2, AV_RN16A); - DECODE_UV_COEF_LOOP(2,); - SPLAT_CTX(2); - break; - case TX_16X16: - MERGE_CTX(4, AV_RN32A); - DECODE_UV_COEF_LOOP(4,); - SPLAT_CTX(4); - break; - case TX_32X32: - MERGE_CTX(8, AV_RN64A); - DECODE_UV_COEF_LOOP(8, 32); - SPLAT_CTX(8); - break; - } - } - - return total_coeff; -} - -static int decode_coeffs_8bpp(AVCodecContext *ctx) -{ - return decode_coeffs(ctx, 1); -} - -static int decode_coeffs_16bpp(AVCodecContext *ctx) -{ - return decode_coeffs(ctx, 0); -} - -static av_always_inline int check_intra_mode(VP9Context *s, int mode, uint8_t **a, - uint8_t *dst_edge, ptrdiff_t stride_edge, - uint8_t *dst_inner, ptrdiff_t stride_inner, - uint8_t *l, int col, int x, int w, - int row, int y, enum TxfmMode tx, - int p, int ss_h, int ss_v, int bytesperpixel) -{ - int have_top = row > 0 || y > 0; - int have_left = col > s->tile_col_start || x > 0; - int have_right = x < w - 1; - int bpp = s->bpp; - static const uint8_t mode_conv[10][2 /* have_left */][2 /* have_top */] = { - [VERT_PRED] = { { DC_127_PRED, VERT_PRED }, - { DC_127_PRED, VERT_PRED } }, - [HOR_PRED] = { { DC_129_PRED, DC_129_PRED }, - { HOR_PRED, HOR_PRED } }, - [DC_PRED] = { { DC_128_PRED, TOP_DC_PRED }, - { LEFT_DC_PRED, DC_PRED } }, - [DIAG_DOWN_LEFT_PRED] = { { DC_127_PRED, DIAG_DOWN_LEFT_PRED }, - { DC_127_PRED, DIAG_DOWN_LEFT_PRED } }, - [DIAG_DOWN_RIGHT_PRED] = { { DIAG_DOWN_RIGHT_PRED, DIAG_DOWN_RIGHT_PRED }, - { DIAG_DOWN_RIGHT_PRED, DIAG_DOWN_RIGHT_PRED } }, - [VERT_RIGHT_PRED] = { { VERT_RIGHT_PRED, VERT_RIGHT_PRED }, - { VERT_RIGHT_PRED, VERT_RIGHT_PRED } }, - [HOR_DOWN_PRED] = { { HOR_DOWN_PRED, HOR_DOWN_PRED }, - { HOR_DOWN_PRED, HOR_DOWN_PRED } }, - [VERT_LEFT_PRED] = { { DC_127_PRED, VERT_LEFT_PRED }, - { DC_127_PRED, VERT_LEFT_PRED } }, - [HOR_UP_PRED] = { { DC_129_PRED, DC_129_PRED }, - { HOR_UP_PRED, HOR_UP_PRED } }, - [TM_VP8_PRED] = { { DC_129_PRED, VERT_PRED }, - { HOR_PRED, TM_VP8_PRED } }, - }; - static const struct { - uint8_t needs_left:1; - uint8_t needs_top:1; - uint8_t needs_topleft:1; - uint8_t needs_topright:1; - uint8_t invert_left:1; - } edges[N_INTRA_PRED_MODES] = { - [VERT_PRED] = { .needs_top = 1 }, - [HOR_PRED] = { .needs_left = 1 }, - [DC_PRED] = { .needs_top = 1, .needs_left = 1 }, - [DIAG_DOWN_LEFT_PRED] = { .needs_top = 1, .needs_topright = 1 }, - [DIAG_DOWN_RIGHT_PRED] = { .needs_left = 1, .needs_top = 1, .needs_topleft = 1 }, - [VERT_RIGHT_PRED] = { .needs_left = 1, .needs_top = 1, .needs_topleft = 1 }, - [HOR_DOWN_PRED] = { .needs_left = 1, .needs_top = 1, .needs_topleft = 1 }, - [VERT_LEFT_PRED] = { .needs_top = 1, .needs_topright = 1 }, - [HOR_UP_PRED] = { .needs_left = 1, .invert_left = 1 }, - [TM_VP8_PRED] = { .needs_left = 1, .needs_top = 1, .needs_topleft = 1 }, - [LEFT_DC_PRED] = { .needs_left = 1 }, - [TOP_DC_PRED] = { .needs_top = 1 }, - [DC_128_PRED] = { 0 }, - [DC_127_PRED] = { 0 }, - [DC_129_PRED] = { 0 } - }; - - av_assert2(mode >= 0 && mode < 10); - mode = mode_conv[mode][have_left][have_top]; - if (edges[mode].needs_top) { - uint8_t *top, *topleft; - int n_px_need = 4 << tx, n_px_have = (((s->cols - col) << !ss_h) - x) * 4; - int n_px_need_tr = 0; - - if (tx == TX_4X4 && edges[mode].needs_topright && have_right) - n_px_need_tr = 4; - - // if top of sb64-row, use s->intra_pred_data[] instead of - // dst[-stride] for intra prediction (it contains pre- instead of - // post-loopfilter data) - if (have_top) { - top = !(row & 7) && !y ? - s->intra_pred_data[p] + (col * (8 >> ss_h) + x * 4) * bytesperpixel : - y == 0 ? &dst_edge[-stride_edge] : &dst_inner[-stride_inner]; - if (have_left) - topleft = !(row & 7) && !y ? - s->intra_pred_data[p] + (col * (8 >> ss_h) + x * 4) * bytesperpixel : - y == 0 || x == 0 ? &dst_edge[-stride_edge] : - &dst_inner[-stride_inner]; - } - - if (have_top && - (!edges[mode].needs_topleft || (have_left && top == topleft)) && - (tx != TX_4X4 || !edges[mode].needs_topright || have_right) && - n_px_need + n_px_need_tr <= n_px_have) { - *a = top; - } else { - if (have_top) { - if (n_px_need <= n_px_have) { - memcpy(*a, top, n_px_need * bytesperpixel); - } else { -#define memset_bpp(c, i1, v, i2, num) do { \ - if (bytesperpixel == 1) { \ - memset(&(c)[(i1)], (v)[(i2)], (num)); \ - } else { \ - int n, val = AV_RN16A(&(v)[(i2) * 2]); \ - for (n = 0; n < (num); n++) { \ - AV_WN16A(&(c)[((i1) + n) * 2], val); \ - } \ - } \ -} while (0) - memcpy(*a, top, n_px_have * bytesperpixel); - memset_bpp(*a, n_px_have, (*a), n_px_have - 1, n_px_need - n_px_have); - } - } else { -#define memset_val(c, val, num) do { \ - if (bytesperpixel == 1) { \ - memset((c), (val), (num)); \ - } else { \ - int n; \ - for (n = 0; n < (num); n++) { \ - AV_WN16A(&(c)[n * 2], (val)); \ - } \ - } \ -} while (0) - memset_val(*a, (128 << (bpp - 8)) - 1, n_px_need); - } - if (edges[mode].needs_topleft) { - if (have_left && have_top) { -#define assign_bpp(c, i1, v, i2) do { \ - if (bytesperpixel == 1) { \ - (c)[(i1)] = (v)[(i2)]; \ - } else { \ - AV_COPY16(&(c)[(i1) * 2], &(v)[(i2) * 2]); \ - } \ -} while (0) - assign_bpp(*a, -1, topleft, -1); - } else { -#define assign_val(c, i, v) do { \ - if (bytesperpixel == 1) { \ - (c)[(i)] = (v); \ - } else { \ - AV_WN16A(&(c)[(i) * 2], (v)); \ - } \ -} while (0) - assign_val((*a), -1, (128 << (bpp - 8)) + (have_top ? +1 : -1)); - } - } - if (tx == TX_4X4 && edges[mode].needs_topright) { - if (have_top && have_right && - n_px_need + n_px_need_tr <= n_px_have) { - memcpy(&(*a)[4 * bytesperpixel], &top[4 * bytesperpixel], 4 * bytesperpixel); - } else { - memset_bpp(*a, 4, *a, 3, 4); - } - } - } - } - if (edges[mode].needs_left) { - if (have_left) { - int n_px_need = 4 << tx, i, n_px_have = (((s->rows - row) << !ss_v) - y) * 4; - uint8_t *dst = x == 0 ? dst_edge : dst_inner; - ptrdiff_t stride = x == 0 ? stride_edge : stride_inner; - - if (edges[mode].invert_left) { - if (n_px_need <= n_px_have) { - for (i = 0; i < n_px_need; i++) - assign_bpp(l, i, &dst[i * stride], -1); - } else { - for (i = 0; i < n_px_have; i++) - assign_bpp(l, i, &dst[i * stride], -1); - memset_bpp(l, n_px_have, l, n_px_have - 1, n_px_need - n_px_have); - } - } else { - if (n_px_need <= n_px_have) { - for (i = 0; i < n_px_need; i++) - assign_bpp(l, n_px_need - 1 - i, &dst[i * stride], -1); - } else { - for (i = 0; i < n_px_have; i++) - assign_bpp(l, n_px_need - 1 - i, &dst[i * stride], -1); - memset_bpp(l, 0, l, n_px_need - n_px_have, n_px_need - n_px_have); - } - } - } else { - memset_val(l, (128 << (bpp - 8)) + 1, 4 << tx); - } - } - - return mode; -} - -static av_always_inline void intra_recon(AVCodecContext *ctx, ptrdiff_t y_off, - ptrdiff_t uv_off, int bytesperpixel) -{ - VP9Context *s = ctx->priv_data; - VP9Block *b = s->b; - int row = s->row, col = s->col; - int w4 = bwh_tab[1][b->bs][0] << 1, step1d = 1 << b->tx, n; - int h4 = bwh_tab[1][b->bs][1] << 1, x, y, step = 1 << (b->tx * 2); - int end_x = FFMIN(2 * (s->cols - col), w4); - int end_y = FFMIN(2 * (s->rows - row), h4); - int tx = 4 * s->s.h.lossless + b->tx, uvtx = b->uvtx + 4 * s->s.h.lossless; - int uvstep1d = 1 << b->uvtx, p; - uint8_t *dst = s->dst[0], *dst_r = s->s.frames[CUR_FRAME].tf.f->data[0] + y_off; - LOCAL_ALIGNED_32(uint8_t, a_buf, [96]); - LOCAL_ALIGNED_32(uint8_t, l, [64]); - - for (n = 0, y = 0; y < end_y; y += step1d) { - uint8_t *ptr = dst, *ptr_r = dst_r; - for (x = 0; x < end_x; x += step1d, ptr += 4 * step1d * bytesperpixel, - ptr_r += 4 * step1d * bytesperpixel, n += step) { - int mode = b->mode[b->bs > BS_8x8 && b->tx == TX_4X4 ? - y * 2 + x : 0]; - uint8_t *a = &a_buf[32]; - enum TxfmType txtp = vp9_intra_txfm_type[mode]; - int eob = b->skip ? 0 : b->tx > TX_8X8 ? AV_RN16A(&s->eob[n]) : s->eob[n]; - - mode = check_intra_mode(s, mode, &a, ptr_r, - s->s.frames[CUR_FRAME].tf.f->linesize[0], - ptr, s->y_stride, l, - col, x, w4, row, y, b->tx, 0, 0, 0, bytesperpixel); - s->dsp.intra_pred[b->tx][mode](ptr, s->y_stride, l, a); - if (eob) - s->dsp.itxfm_add[tx][txtp](ptr, s->y_stride, - s->block + 16 * n * bytesperpixel, eob); - } - dst_r += 4 * step1d * s->s.frames[CUR_FRAME].tf.f->linesize[0]; - dst += 4 * step1d * s->y_stride; - } - - // U/V - w4 >>= s->ss_h; - end_x >>= s->ss_h; - end_y >>= s->ss_v; - step = 1 << (b->uvtx * 2); - for (p = 0; p < 2; p++) { - dst = s->dst[1 + p]; - dst_r = s->s.frames[CUR_FRAME].tf.f->data[1 + p] + uv_off; - for (n = 0, y = 0; y < end_y; y += uvstep1d) { - uint8_t *ptr = dst, *ptr_r = dst_r; - for (x = 0; x < end_x; x += uvstep1d, ptr += 4 * uvstep1d * bytesperpixel, - ptr_r += 4 * uvstep1d * bytesperpixel, n += step) { - int mode = b->uvmode; - uint8_t *a = &a_buf[32]; - int eob = b->skip ? 0 : b->uvtx > TX_8X8 ? AV_RN16A(&s->uveob[p][n]) : s->uveob[p][n]; - - mode = check_intra_mode(s, mode, &a, ptr_r, - s->s.frames[CUR_FRAME].tf.f->linesize[1], - ptr, s->uv_stride, l, col, x, w4, row, y, - b->uvtx, p + 1, s->ss_h, s->ss_v, bytesperpixel); - s->dsp.intra_pred[b->uvtx][mode](ptr, s->uv_stride, l, a); - if (eob) - s->dsp.itxfm_add[uvtx][DCT_DCT](ptr, s->uv_stride, - s->uvblock[p] + 16 * n * bytesperpixel, eob); - } - dst_r += 4 * uvstep1d * s->s.frames[CUR_FRAME].tf.f->linesize[1]; - dst += 4 * uvstep1d * s->uv_stride; - } - } -} - -static void intra_recon_8bpp(AVCodecContext *ctx, ptrdiff_t y_off, ptrdiff_t uv_off) -{ - intra_recon(ctx, y_off, uv_off, 1); -} - -static void intra_recon_16bpp(AVCodecContext *ctx, ptrdiff_t y_off, ptrdiff_t uv_off) -{ - intra_recon(ctx, y_off, uv_off, 2); -} - -static av_always_inline void mc_luma_unscaled(VP9Context *s, vp9_mc_func (*mc)[2], - uint8_t *dst, ptrdiff_t dst_stride, - const uint8_t *ref, ptrdiff_t ref_stride, - ThreadFrame *ref_frame, - ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, - int bw, int bh, int w, int h, int bytesperpixel) -{ - int mx = mv->x, my = mv->y, th; - - y += my >> 3; - x += mx >> 3; - ref += y * ref_stride + x * bytesperpixel; - mx &= 7; - my &= 7; - // FIXME bilinear filter only needs 0/1 pixels, not 3/4 - // we use +7 because the last 7 pixels of each sbrow can be changed in - // the longest loopfilter of the next sbrow - th = (y + bh + 4 * !!my + 7) >> 6; - ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); - if (x < !!mx * 3 || y < !!my * 3 || - x + !!mx * 4 > w - bw || y + !!my * 4 > h - bh) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, - ref - !!my * 3 * ref_stride - !!mx * 3 * bytesperpixel, - 160, ref_stride, - bw + !!mx * 7, bh + !!my * 7, - x - !!mx * 3, y - !!my * 3, w, h); - ref = s->edge_emu_buffer + !!my * 3 * 160 + !!mx * 3 * bytesperpixel; - ref_stride = 160; - } - mc[!!mx][!!my](dst, dst_stride, ref, ref_stride, bh, mx << 1, my << 1); -} - -static av_always_inline void mc_chroma_unscaled(VP9Context *s, vp9_mc_func (*mc)[2], - uint8_t *dst_u, uint8_t *dst_v, - ptrdiff_t dst_stride, - const uint8_t *ref_u, ptrdiff_t src_stride_u, - const uint8_t *ref_v, ptrdiff_t src_stride_v, - ThreadFrame *ref_frame, - ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, - int bw, int bh, int w, int h, int bytesperpixel) -{ - int mx = mv->x * (1 << !s->ss_h), my = mv->y * (1 << !s->ss_v), th; - - y += my >> 4; - x += mx >> 4; - ref_u += y * src_stride_u + x * bytesperpixel; - ref_v += y * src_stride_v + x * bytesperpixel; - mx &= 15; - my &= 15; - // FIXME bilinear filter only needs 0/1 pixels, not 3/4 - // we use +7 because the last 7 pixels of each sbrow can be changed in - // the longest loopfilter of the next sbrow - th = (y + bh + 4 * !!my + 7) >> (6 - s->ss_v); - ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); - if (x < !!mx * 3 || y < !!my * 3 || - x + !!mx * 4 > w - bw || y + !!my * 4 > h - bh) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, - ref_u - !!my * 3 * src_stride_u - !!mx * 3 * bytesperpixel, - 160, src_stride_u, - bw + !!mx * 7, bh + !!my * 7, - x - !!mx * 3, y - !!my * 3, w, h); - ref_u = s->edge_emu_buffer + !!my * 3 * 160 + !!mx * 3 * bytesperpixel; - mc[!!mx][!!my](dst_u, dst_stride, ref_u, 160, bh, mx, my); - - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, - ref_v - !!my * 3 * src_stride_v - !!mx * 3 * bytesperpixel, - 160, src_stride_v, - bw + !!mx * 7, bh + !!my * 7, - x - !!mx * 3, y - !!my * 3, w, h); - ref_v = s->edge_emu_buffer + !!my * 3 * 160 + !!mx * 3 * bytesperpixel; - mc[!!mx][!!my](dst_v, dst_stride, ref_v, 160, bh, mx, my); - } else { - mc[!!mx][!!my](dst_u, dst_stride, ref_u, src_stride_u, bh, mx, my); - mc[!!mx][!!my](dst_v, dst_stride, ref_v, src_stride_v, bh, mx, my); - } -} - -#define mc_luma_dir(s, mc, dst, dst_ls, src, src_ls, tref, row, col, mv, \ - px, py, pw, ph, bw, bh, w, h, i) \ - mc_luma_unscaled(s, s->dsp.mc, dst, dst_ls, src, src_ls, tref, row, col, \ - mv, bw, bh, w, h, bytesperpixel) -#define mc_chroma_dir(s, mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ - row, col, mv, px, py, pw, ph, bw, bh, w, h, i) \ - mc_chroma_unscaled(s, s->dsp.mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ - row, col, mv, bw, bh, w, h, bytesperpixel) -#define SCALED 0 -#define FN(x) x##_8bpp -#define BYTES_PER_PIXEL 1 -#include "vp9_mc_template.c" -#undef FN -#undef BYTES_PER_PIXEL -#define FN(x) x##_16bpp -#define BYTES_PER_PIXEL 2 -#include "vp9_mc_template.c" -#undef mc_luma_dir -#undef mc_chroma_dir -#undef FN -#undef BYTES_PER_PIXEL -#undef SCALED - -static av_always_inline void mc_luma_scaled(VP9Context *s, vp9_scaled_mc_func smc, - vp9_mc_func (*mc)[2], - uint8_t *dst, ptrdiff_t dst_stride, - const uint8_t *ref, ptrdiff_t ref_stride, - ThreadFrame *ref_frame, - ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, - int px, int py, int pw, int ph, - int bw, int bh, int w, int h, int bytesperpixel, - const uint16_t *scale, const uint8_t *step) -{ - if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && - s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { - mc_luma_unscaled(s, mc, dst, dst_stride, ref, ref_stride, ref_frame, - y, x, in_mv, bw, bh, w, h, bytesperpixel); - } else { -#define scale_mv(n, dim) (((int64_t)(n) * scale[dim]) >> 14) - int mx, my; - int refbw_m1, refbh_m1; - int th; - VP56mv mv; - - mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 8, (s->cols * 8 - x + px + 3) * 8); - mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 8, (s->rows * 8 - y + py + 3) * 8); - // BUG libvpx seems to scale the two components separately. This introduces - // rounding errors but we have to reproduce them to be exactly compatible - // with the output from libvpx... - mx = scale_mv(mv.x * 2, 0) + scale_mv(x * 16, 0); - my = scale_mv(mv.y * 2, 1) + scale_mv(y * 16, 1); - - y = my >> 4; - x = mx >> 4; - ref += y * ref_stride + x * bytesperpixel; - mx &= 15; - my &= 15; - refbw_m1 = ((bw - 1) * step[0] + mx) >> 4; - refbh_m1 = ((bh - 1) * step[1] + my) >> 4; - // FIXME bilinear filter only needs 0/1 pixels, not 3/4 - // we use +7 because the last 7 pixels of each sbrow can be changed in - // the longest loopfilter of the next sbrow - th = (y + refbh_m1 + 4 + 7) >> 6; - ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); - if (x < 3 || y < 3 || x + 4 >= w - refbw_m1 || y + 4 >= h - refbh_m1) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, - ref - 3 * ref_stride - 3 * bytesperpixel, - 288, ref_stride, - refbw_m1 + 8, refbh_m1 + 8, - x - 3, y - 3, w, h); - ref = s->edge_emu_buffer + 3 * 288 + 3 * bytesperpixel; - ref_stride = 288; - } - smc(dst, dst_stride, ref, ref_stride, bh, mx, my, step[0], step[1]); - } -} - -static av_always_inline void mc_chroma_scaled(VP9Context *s, vp9_scaled_mc_func smc, - vp9_mc_func (*mc)[2], - uint8_t *dst_u, uint8_t *dst_v, - ptrdiff_t dst_stride, - const uint8_t *ref_u, ptrdiff_t src_stride_u, - const uint8_t *ref_v, ptrdiff_t src_stride_v, - ThreadFrame *ref_frame, - ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, - int px, int py, int pw, int ph, - int bw, int bh, int w, int h, int bytesperpixel, - const uint16_t *scale, const uint8_t *step) -{ - if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && - s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { - mc_chroma_unscaled(s, mc, dst_u, dst_v, dst_stride, ref_u, src_stride_u, - ref_v, src_stride_v, ref_frame, - y, x, in_mv, bw, bh, w, h, bytesperpixel); - } else { - int mx, my; - int refbw_m1, refbh_m1; - int th; - VP56mv mv; - - if (s->ss_h) { - // BUG https://code.google.com/p/webm/issues/detail?id=820 - mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 16, (s->cols * 4 - x + px + 3) * 16); - mx = scale_mv(mv.x, 0) + (scale_mv(x * 16, 0) & ~15) + (scale_mv(x * 32, 0) & 15); - } else { - mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 8, (s->cols * 8 - x + px + 3) * 8); - mx = scale_mv(mv.x * 2, 0) + scale_mv(x * 16, 0); - } - if (s->ss_v) { - // BUG https://code.google.com/p/webm/issues/detail?id=820 - mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 16, (s->rows * 4 - y + py + 3) * 16); - my = scale_mv(mv.y, 1) + (scale_mv(y * 16, 1) & ~15) + (scale_mv(y * 32, 1) & 15); - } else { - mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 8, (s->rows * 8 - y + py + 3) * 8); - my = scale_mv(mv.y * 2, 1) + scale_mv(y * 16, 1); - } -#undef scale_mv - y = my >> 4; - x = mx >> 4; - ref_u += y * src_stride_u + x * bytesperpixel; - ref_v += y * src_stride_v + x * bytesperpixel; - mx &= 15; - my &= 15; - refbw_m1 = ((bw - 1) * step[0] + mx) >> 4; - refbh_m1 = ((bh - 1) * step[1] + my) >> 4; - // FIXME bilinear filter only needs 0/1 pixels, not 3/4 - // we use +7 because the last 7 pixels of each sbrow can be changed in - // the longest loopfilter of the next sbrow - th = (y + refbh_m1 + 4 + 7) >> (6 - s->ss_v); - ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); - if (x < 3 || y < 3 || x + 4 >= w - refbw_m1 || y + 4 >= h - refbh_m1) { - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, - ref_u - 3 * src_stride_u - 3 * bytesperpixel, - 288, src_stride_u, - refbw_m1 + 8, refbh_m1 + 8, - x - 3, y - 3, w, h); - ref_u = s->edge_emu_buffer + 3 * 288 + 3 * bytesperpixel; - smc(dst_u, dst_stride, ref_u, 288, bh, mx, my, step[0], step[1]); - - s->vdsp.emulated_edge_mc(s->edge_emu_buffer, - ref_v - 3 * src_stride_v - 3 * bytesperpixel, - 288, src_stride_v, - refbw_m1 + 8, refbh_m1 + 8, - x - 3, y - 3, w, h); - ref_v = s->edge_emu_buffer + 3 * 288 + 3 * bytesperpixel; - smc(dst_v, dst_stride, ref_v, 288, bh, mx, my, step[0], step[1]); - } else { - smc(dst_u, dst_stride, ref_u, src_stride_u, bh, mx, my, step[0], step[1]); - smc(dst_v, dst_stride, ref_v, src_stride_v, bh, mx, my, step[0], step[1]); - } - } -} - -#define mc_luma_dir(s, mc, dst, dst_ls, src, src_ls, tref, row, col, mv, \ - px, py, pw, ph, bw, bh, w, h, i) \ - mc_luma_scaled(s, s->dsp.s##mc, s->dsp.mc, dst, dst_ls, src, src_ls, tref, row, col, \ - mv, px, py, pw, ph, bw, bh, w, h, bytesperpixel, \ - s->mvscale[b->ref[i]], s->mvstep[b->ref[i]]) -#define mc_chroma_dir(s, mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ - row, col, mv, px, py, pw, ph, bw, bh, w, h, i) \ - mc_chroma_scaled(s, s->dsp.s##mc, s->dsp.mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ - row, col, mv, px, py, pw, ph, bw, bh, w, h, bytesperpixel, \ - s->mvscale[b->ref[i]], s->mvstep[b->ref[i]]) -#define SCALED 1 -#define FN(x) x##_scaled_8bpp -#define BYTES_PER_PIXEL 1 -#include "vp9_mc_template.c" -#undef FN -#undef BYTES_PER_PIXEL -#define FN(x) x##_scaled_16bpp -#define BYTES_PER_PIXEL 2 -#include "vp9_mc_template.c" -#undef mc_luma_dir -#undef mc_chroma_dir -#undef FN -#undef BYTES_PER_PIXEL -#undef SCALED - -static av_always_inline void inter_recon(AVCodecContext *ctx, int bytesperpixel) -{ - VP9Context *s = ctx->priv_data; - VP9Block *b = s->b; - int row = s->row, col = s->col; - - if (s->mvscale[b->ref[0]][0] || (b->comp && s->mvscale[b->ref[1]][0])) { - if (bytesperpixel == 1) { - inter_pred_scaled_8bpp(ctx); - } else { - inter_pred_scaled_16bpp(ctx); - } - } else { - if (bytesperpixel == 1) { - inter_pred_8bpp(ctx); - } else { - inter_pred_16bpp(ctx); - } - } - if (!b->skip) { - /* mostly copied intra_recon() */ - - int w4 = bwh_tab[1][b->bs][0] << 1, step1d = 1 << b->tx, n; - int h4 = bwh_tab[1][b->bs][1] << 1, x, y, step = 1 << (b->tx * 2); - int end_x = FFMIN(2 * (s->cols - col), w4); - int end_y = FFMIN(2 * (s->rows - row), h4); - int tx = 4 * s->s.h.lossless + b->tx, uvtx = b->uvtx + 4 * s->s.h.lossless; - int uvstep1d = 1 << b->uvtx, p; - uint8_t *dst = s->dst[0]; - - // y itxfm add - for (n = 0, y = 0; y < end_y; y += step1d) { - uint8_t *ptr = dst; - for (x = 0; x < end_x; x += step1d, - ptr += 4 * step1d * bytesperpixel, n += step) { - int eob = b->tx > TX_8X8 ? AV_RN16A(&s->eob[n]) : s->eob[n]; - - if (eob) - s->dsp.itxfm_add[tx][DCT_DCT](ptr, s->y_stride, - s->block + 16 * n * bytesperpixel, eob); - } - dst += 4 * s->y_stride * step1d; - } - - // uv itxfm add - end_x >>= s->ss_h; - end_y >>= s->ss_v; - step = 1 << (b->uvtx * 2); - for (p = 0; p < 2; p++) { - dst = s->dst[p + 1]; - for (n = 0, y = 0; y < end_y; y += uvstep1d) { - uint8_t *ptr = dst; - for (x = 0; x < end_x; x += uvstep1d, - ptr += 4 * uvstep1d * bytesperpixel, n += step) { - int eob = b->uvtx > TX_8X8 ? AV_RN16A(&s->uveob[p][n]) : s->uveob[p][n]; - - if (eob) - s->dsp.itxfm_add[uvtx][DCT_DCT](ptr, s->uv_stride, - s->uvblock[p] + 16 * n * bytesperpixel, eob); - } - dst += 4 * uvstep1d * s->uv_stride; - } - } - } -} - -static void inter_recon_8bpp(AVCodecContext *ctx) -{ - inter_recon(ctx, 1); -} - -static void inter_recon_16bpp(AVCodecContext *ctx) -{ - inter_recon(ctx, 2); -} - -static av_always_inline void mask_edges(uint8_t (*mask)[8][4], int ss_h, int ss_v, - int row_and_7, int col_and_7, - int w, int h, int col_end, int row_end, - enum TxfmMode tx, int skip_inter) -{ - static const unsigned wide_filter_col_mask[2] = { 0x11, 0x01 }; - static const unsigned wide_filter_row_mask[2] = { 0x03, 0x07 }; - - // FIXME I'm pretty sure all loops can be replaced by a single LUT if - // we make VP9Filter.mask uint64_t (i.e. row/col all single variable) - // and make the LUT 5-indexed (bl, bp, is_uv, tx and row/col), and then - // use row_and_7/col_and_7 as shifts (1*col_and_7+8*row_and_7) - - // the intended behaviour of the vp9 loopfilter is to work on 8-pixel - // edges. This means that for UV, we work on two subsampled blocks at - // a time, and we only use the topleft block's mode information to set - // things like block strength. Thus, for any block size smaller than - // 16x16, ignore the odd portion of the block. - if (tx == TX_4X4 && (ss_v | ss_h)) { - if (h == ss_v) { - if (row_and_7 & 1) - return; - if (!row_end) - h += 1; - } - if (w == ss_h) { - if (col_and_7 & 1) - return; - if (!col_end) - w += 1; - } - } - - if (tx == TX_4X4 && !skip_inter) { - int t = 1 << col_and_7, m_col = (t << w) - t, y; - // on 32-px edges, use the 8-px wide loopfilter; else, use 4-px wide - int m_row_8 = m_col & wide_filter_col_mask[ss_h], m_row_4 = m_col - m_row_8; - - for (y = row_and_7; y < h + row_and_7; y++) { - int col_mask_id = 2 - !(y & wide_filter_row_mask[ss_v]); - - mask[0][y][1] |= m_row_8; - mask[0][y][2] |= m_row_4; - // for odd lines, if the odd col is not being filtered, - // skip odd row also: - // .---. <-- a - // | | - // |___| <-- b - // ^ ^ - // c d - // - // if a/c are even row/col and b/d are odd, and d is skipped, - // e.g. right edge of size-66x66.webm, then skip b also (bug) - if ((ss_h & ss_v) && (col_end & 1) && (y & 1)) { - mask[1][y][col_mask_id] |= (t << (w - 1)) - t; - } else { - mask[1][y][col_mask_id] |= m_col; - } - if (!ss_h) - mask[0][y][3] |= m_col; - if (!ss_v) { - if (ss_h && (col_end & 1)) - mask[1][y][3] |= (t << (w - 1)) - t; - else - mask[1][y][3] |= m_col; - } - } - } else { - int y, t = 1 << col_and_7, m_col = (t << w) - t; - - if (!skip_inter) { - int mask_id = (tx == TX_8X8); - static const unsigned masks[4] = { 0xff, 0x55, 0x11, 0x01 }; - int l2 = tx + ss_h - 1, step1d; - int m_row = m_col & masks[l2]; - - // at odd UV col/row edges tx16/tx32 loopfilter edges, force - // 8wd loopfilter to prevent going off the visible edge. - if (ss_h && tx > TX_8X8 && (w ^ (w - 1)) == 1) { - int m_row_16 = ((t << (w - 1)) - t) & masks[l2]; - int m_row_8 = m_row - m_row_16; - - for (y = row_and_7; y < h + row_and_7; y++) { - mask[0][y][0] |= m_row_16; - mask[0][y][1] |= m_row_8; - } - } else { - for (y = row_and_7; y < h + row_and_7; y++) - mask[0][y][mask_id] |= m_row; - } - - l2 = tx + ss_v - 1; - step1d = 1 << l2; - if (ss_v && tx > TX_8X8 && (h ^ (h - 1)) == 1) { - for (y = row_and_7; y < h + row_and_7 - 1; y += step1d) - mask[1][y][0] |= m_col; - if (y - row_and_7 == h - 1) - mask[1][y][1] |= m_col; - } else { - for (y = row_and_7; y < h + row_and_7; y += step1d) - mask[1][y][mask_id] |= m_col; - } - } else if (tx != TX_4X4) { - int mask_id; - - mask_id = (tx == TX_8X8) || (h == ss_v); - mask[1][row_and_7][mask_id] |= m_col; - mask_id = (tx == TX_8X8) || (w == ss_h); - for (y = row_and_7; y < h + row_and_7; y++) - mask[0][y][mask_id] |= t; - } else { - int t8 = t & wide_filter_col_mask[ss_h], t4 = t - t8; - - for (y = row_and_7; y < h + row_and_7; y++) { - mask[0][y][2] |= t4; - mask[0][y][1] |= t8; - } - mask[1][row_and_7][2 - !(row_and_7 & wide_filter_row_mask[ss_v])] |= m_col; - } - } -} - -static void decode_b(AVCodecContext *ctx, int row, int col, - struct VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, - enum BlockLevel bl, enum BlockPartition bp) -{ - VP9Context *s = ctx->priv_data; - VP9Block *b = s->b; - enum BlockSize bs = bl * 3 + bp; - int bytesperpixel = s->bytesperpixel; - int w4 = bwh_tab[1][bs][0], h4 = bwh_tab[1][bs][1], lvl; - int emu[2]; - AVFrame *f = s->s.frames[CUR_FRAME].tf.f; - - s->row = row; - s->row7 = row & 7; - s->col = col; - s->col7 = col & 7; - s->min_mv.x = -(128 + col * 64); - s->min_mv.y = -(128 + row * 64); - s->max_mv.x = 128 + (s->cols - col - w4) * 64; - s->max_mv.y = 128 + (s->rows - row - h4) * 64; - if (s->pass < 2) { - b->bs = bs; - b->bl = bl; - b->bp = bp; - decode_mode(ctx); - b->uvtx = b->tx - ((s->ss_h && w4 * 2 == (1 << b->tx)) || - (s->ss_v && h4 * 2 == (1 << b->tx))); - - if (!b->skip) { - int has_coeffs; - - if (bytesperpixel == 1) { - has_coeffs = decode_coeffs_8bpp(ctx); - } else { - has_coeffs = decode_coeffs_16bpp(ctx); - } - if (!has_coeffs && b->bs <= BS_8x8 && !b->intra) { - b->skip = 1; - memset(&s->above_skip_ctx[col], 1, w4); - memset(&s->left_skip_ctx[s->row7], 1, h4); - } - } else { - int row7 = s->row7; - -#define SPLAT_ZERO_CTX(v, n) \ - switch (n) { \ - case 1: v = 0; break; \ - case 2: AV_ZERO16(&v); break; \ - case 4: AV_ZERO32(&v); break; \ - case 8: AV_ZERO64(&v); break; \ - case 16: AV_ZERO128(&v); break; \ - } -#define SPLAT_ZERO_YUV(dir, var, off, n, dir2) \ - do { \ - SPLAT_ZERO_CTX(s->dir##_y_##var[off * 2], n * 2); \ - if (s->ss_##dir2) { \ - SPLAT_ZERO_CTX(s->dir##_uv_##var[0][off], n); \ - SPLAT_ZERO_CTX(s->dir##_uv_##var[1][off], n); \ - } else { \ - SPLAT_ZERO_CTX(s->dir##_uv_##var[0][off * 2], n * 2); \ - SPLAT_ZERO_CTX(s->dir##_uv_##var[1][off * 2], n * 2); \ - } \ - } while (0) - - switch (w4) { - case 1: SPLAT_ZERO_YUV(above, nnz_ctx, col, 1, h); break; - case 2: SPLAT_ZERO_YUV(above, nnz_ctx, col, 2, h); break; - case 4: SPLAT_ZERO_YUV(above, nnz_ctx, col, 4, h); break; - case 8: SPLAT_ZERO_YUV(above, nnz_ctx, col, 8, h); break; - } - switch (h4) { - case 1: SPLAT_ZERO_YUV(left, nnz_ctx, row7, 1, v); break; - case 2: SPLAT_ZERO_YUV(left, nnz_ctx, row7, 2, v); break; - case 4: SPLAT_ZERO_YUV(left, nnz_ctx, row7, 4, v); break; - case 8: SPLAT_ZERO_YUV(left, nnz_ctx, row7, 8, v); break; - } - } - - if (s->pass == 1) { - s->b++; - s->block += w4 * h4 * 64 * bytesperpixel; - s->uvblock[0] += w4 * h4 * 64 * bytesperpixel >> (s->ss_h + s->ss_v); - s->uvblock[1] += w4 * h4 * 64 * bytesperpixel >> (s->ss_h + s->ss_v); - s->eob += 4 * w4 * h4; - s->uveob[0] += 4 * w4 * h4 >> (s->ss_h + s->ss_v); - s->uveob[1] += 4 * w4 * h4 >> (s->ss_h + s->ss_v); - - return; - } - } - - // emulated overhangs if the stride of the target buffer can't hold. This - // makes it possible to support emu-edge and so on even if we have large block - // overhangs - emu[0] = (col + w4) * 8 * bytesperpixel > f->linesize[0] || - (row + h4) > s->rows; - emu[1] = ((col + w4) * 8 >> s->ss_h) * bytesperpixel > f->linesize[1] || - (row + h4) > s->rows; - if (emu[0]) { - s->dst[0] = s->tmp_y; - s->y_stride = 128; - } else { - s->dst[0] = f->data[0] + yoff; - s->y_stride = f->linesize[0]; - } - if (emu[1]) { - s->dst[1] = s->tmp_uv[0]; - s->dst[2] = s->tmp_uv[1]; - s->uv_stride = 128; - } else { - s->dst[1] = f->data[1] + uvoff; - s->dst[2] = f->data[2] + uvoff; - s->uv_stride = f->linesize[1]; - } - if (b->intra) { - if (s->bpp > 8) { - intra_recon_16bpp(ctx, yoff, uvoff); - } else { - intra_recon_8bpp(ctx, yoff, uvoff); - } - } else { - if (s->bpp > 8) { - inter_recon_16bpp(ctx); - } else { - inter_recon_8bpp(ctx); - } - } - if (emu[0]) { - int w = FFMIN(s->cols - col, w4) * 8, h = FFMIN(s->rows - row, h4) * 8, n, o = 0; - - for (n = 0; o < w; n++) { - int bw = 64 >> n; - - av_assert2(n <= 4); - if (w & bw) { - s->dsp.mc[n][0][0][0][0](f->data[0] + yoff + o * bytesperpixel, f->linesize[0], - s->tmp_y + o * bytesperpixel, 128, h, 0, 0); - o += bw; - } - } - } - if (emu[1]) { - int w = FFMIN(s->cols - col, w4) * 8 >> s->ss_h; - int h = FFMIN(s->rows - row, h4) * 8 >> s->ss_v, n, o = 0; - - for (n = s->ss_h; o < w; n++) { - int bw = 64 >> n; - - av_assert2(n <= 4); - if (w & bw) { - s->dsp.mc[n][0][0][0][0](f->data[1] + uvoff + o * bytesperpixel, f->linesize[1], - s->tmp_uv[0] + o * bytesperpixel, 128, h, 0, 0); - s->dsp.mc[n][0][0][0][0](f->data[2] + uvoff + o * bytesperpixel, f->linesize[2], - s->tmp_uv[1] + o * bytesperpixel, 128, h, 0, 0); - o += bw; - } - } - } - - // pick filter level and find edges to apply filter to - if (s->s.h.filter.level && - (lvl = s->s.h.segmentation.feat[b->seg_id].lflvl[b->intra ? 0 : b->ref[0] + 1] - [b->mode[3] != ZEROMV]) > 0) { - int x_end = FFMIN(s->cols - col, w4), y_end = FFMIN(s->rows - row, h4); - int skip_inter = !b->intra && b->skip, col7 = s->col7, row7 = s->row7; - - setctx_2d(&lflvl->level[row7 * 8 + col7], w4, h4, 8, lvl); - mask_edges(lflvl->mask[0], 0, 0, row7, col7, x_end, y_end, 0, 0, b->tx, skip_inter); - if (s->ss_h || s->ss_v) - mask_edges(lflvl->mask[1], s->ss_h, s->ss_v, row7, col7, x_end, y_end, - s->cols & 1 && col + w4 >= s->cols ? s->cols & 7 : 0, - s->rows & 1 && row + h4 >= s->rows ? s->rows & 7 : 0, - b->uvtx, skip_inter); - - if (!s->filter_lut.lim_lut[lvl]) { - int sharp = s->s.h.filter.sharpness; - int limit = lvl; - - if (sharp > 0) { - limit >>= (sharp + 3) >> 2; - limit = FFMIN(limit, 9 - sharp); - } - limit = FFMAX(limit, 1); - - s->filter_lut.lim_lut[lvl] = limit; - s->filter_lut.mblim_lut[lvl] = 2 * (lvl + 2) + limit; - } - } - - if (s->pass == 2) { - s->b++; - s->block += w4 * h4 * 64 * bytesperpixel; - s->uvblock[0] += w4 * h4 * 64 * bytesperpixel >> (s->ss_v + s->ss_h); - s->uvblock[1] += w4 * h4 * 64 * bytesperpixel >> (s->ss_v + s->ss_h); - s->eob += 4 * w4 * h4; - s->uveob[0] += 4 * w4 * h4 >> (s->ss_v + s->ss_h); - s->uveob[1] += 4 * w4 * h4 >> (s->ss_v + s->ss_h); - } -} - -static void decode_sb(AVCodecContext *ctx, int row, int col, struct VP9Filter *lflvl, +static void decode_sb(VP9TileData *td, int row, int col, VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, enum BlockLevel bl) { - VP9Context *s = ctx->priv_data; + const VP9Context *s = td->s; int c = ((s->above_partition_ctx[col] >> (3 - bl)) & 1) | - (((s->left_partition_ctx[row & 0x7] >> (3 - bl)) & 1) << 1); - const uint8_t *p = s->s.h.keyframe || s->s.h.intraonly ? vp9_default_kf_partition_probs[bl][c] : + (((td->left_partition_ctx[row & 0x7] >> (3 - bl)) & 1) << 1); + const uint8_t *p = s->s.h.keyframe || s->s.h.intraonly ? ff_vp9_default_kf_partition_probs[bl][c] : s->prob.p.partition[bl][c]; enum BlockPartition bp; ptrdiff_t hbs = 4 >> bl; @@ -3398,75 +1054,75 @@ static void decode_sb(AVCodecContext *ctx, int row, int col, struct VP9Filter *l int bytesperpixel = s->bytesperpixel; if (bl == BL_8X8) { - bp = vp8_rac_get_tree(&s->c, vp9_partition_tree, p); - decode_b(ctx, row, col, lflvl, yoff, uvoff, bl, bp); + bp = vp8_rac_get_tree(td->c, ff_vp9_partition_tree, p); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); } else if (col + hbs < s->cols) { // FIXME why not <=? if (row + hbs < s->rows) { // FIXME why not <=? - bp = vp8_rac_get_tree(&s->c, vp9_partition_tree, p); + bp = vp8_rac_get_tree(td->c, ff_vp9_partition_tree, p); switch (bp) { case PARTITION_NONE: - decode_b(ctx, row, col, lflvl, yoff, uvoff, bl, bp); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); break; case PARTITION_H: - decode_b(ctx, row, col, lflvl, yoff, uvoff, bl, bp); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); yoff += hbs * 8 * y_stride; uvoff += hbs * 8 * uv_stride >> s->ss_v; - decode_b(ctx, row + hbs, col, lflvl, yoff, uvoff, bl, bp); + ff_vp9_decode_block(td, row + hbs, col, lflvl, yoff, uvoff, bl, bp); break; case PARTITION_V: - decode_b(ctx, row, col, lflvl, yoff, uvoff, bl, bp); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); yoff += hbs * 8 * bytesperpixel; uvoff += hbs * 8 * bytesperpixel >> s->ss_h; - decode_b(ctx, row, col + hbs, lflvl, yoff, uvoff, bl, bp); + ff_vp9_decode_block(td, row, col + hbs, lflvl, yoff, uvoff, bl, bp); break; case PARTITION_SPLIT: - decode_sb(ctx, row, col, lflvl, yoff, uvoff, bl + 1); - decode_sb(ctx, row, col + hbs, lflvl, + decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); + decode_sb(td, row, col + hbs, lflvl, yoff + 8 * hbs * bytesperpixel, uvoff + (8 * hbs * bytesperpixel >> s->ss_h), bl + 1); yoff += hbs * 8 * y_stride; uvoff += hbs * 8 * uv_stride >> s->ss_v; - decode_sb(ctx, row + hbs, col, lflvl, yoff, uvoff, bl + 1); - decode_sb(ctx, row + hbs, col + hbs, lflvl, + decode_sb(td, row + hbs, col, lflvl, yoff, uvoff, bl + 1); + decode_sb(td, row + hbs, col + hbs, lflvl, yoff + 8 * hbs * bytesperpixel, uvoff + (8 * hbs * bytesperpixel >> s->ss_h), bl + 1); break; default: av_assert0(0); } - } else if (vp56_rac_get_prob_branchy(&s->c, p[1])) { + } else if (vp56_rac_get_prob_branchy(td->c, p[1])) { bp = PARTITION_SPLIT; - decode_sb(ctx, row, col, lflvl, yoff, uvoff, bl + 1); - decode_sb(ctx, row, col + hbs, lflvl, + decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); + decode_sb(td, row, col + hbs, lflvl, yoff + 8 * hbs * bytesperpixel, uvoff + (8 * hbs * bytesperpixel >> s->ss_h), bl + 1); } else { bp = PARTITION_H; - decode_b(ctx, row, col, lflvl, yoff, uvoff, bl, bp); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); } } else if (row + hbs < s->rows) { // FIXME why not <=? - if (vp56_rac_get_prob_branchy(&s->c, p[2])) { + if (vp56_rac_get_prob_branchy(td->c, p[2])) { bp = PARTITION_SPLIT; - decode_sb(ctx, row, col, lflvl, yoff, uvoff, bl + 1); + decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); yoff += hbs * 8 * y_stride; uvoff += hbs * 8 * uv_stride >> s->ss_v; - decode_sb(ctx, row + hbs, col, lflvl, yoff, uvoff, bl + 1); + decode_sb(td, row + hbs, col, lflvl, yoff, uvoff, bl + 1); } else { bp = PARTITION_V; - decode_b(ctx, row, col, lflvl, yoff, uvoff, bl, bp); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, bl, bp); } } else { bp = PARTITION_SPLIT; - decode_sb(ctx, row, col, lflvl, yoff, uvoff, bl + 1); + decode_sb(td, row, col, lflvl, yoff, uvoff, bl + 1); } - s->counts.partition[bl][c][bp]++; + td->counts.partition[bl][c][bp]++; } -static void decode_sb_mem(AVCodecContext *ctx, int row, int col, struct VP9Filter *lflvl, +static void decode_sb_mem(VP9TileData *td, int row, int col, VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, enum BlockLevel bl) { - VP9Context *s = ctx->priv_data; - VP9Block *b = s->b; + const VP9Context *s = td->s; + VP9Block *b = td->b; ptrdiff_t hbs = 4 >> bl; AVFrame *f = s->s.frames[CUR_FRAME].tf.f; ptrdiff_t y_stride = f->linesize[0], uv_stride = f->linesize[1]; @@ -3474,221 +1130,43 @@ static void decode_sb_mem(AVCodecContext *ctx, int row, int col, struct VP9Filte if (bl == BL_8X8) { av_assert2(b->bl == BL_8X8); - decode_b(ctx, row, col, lflvl, yoff, uvoff, b->bl, b->bp); - } else if (s->b->bl == bl) { - decode_b(ctx, row, col, lflvl, yoff, uvoff, b->bl, b->bp); + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, b->bl, b->bp); + } else if (td->b->bl == bl) { + ff_vp9_decode_block(td, row, col, lflvl, yoff, uvoff, b->bl, b->bp); if (b->bp == PARTITION_H && row + hbs < s->rows) { yoff += hbs * 8 * y_stride; uvoff += hbs * 8 * uv_stride >> s->ss_v; - decode_b(ctx, row + hbs, col, lflvl, yoff, uvoff, b->bl, b->bp); + ff_vp9_decode_block(td, row + hbs, col, lflvl, yoff, uvoff, b->bl, b->bp); } else if (b->bp == PARTITION_V && col + hbs < s->cols) { yoff += hbs * 8 * bytesperpixel; uvoff += hbs * 8 * bytesperpixel >> s->ss_h; - decode_b(ctx, row, col + hbs, lflvl, yoff, uvoff, b->bl, b->bp); + ff_vp9_decode_block(td, row, col + hbs, lflvl, yoff, uvoff, b->bl, b->bp); } } else { - decode_sb_mem(ctx, row, col, lflvl, yoff, uvoff, bl + 1); + decode_sb_mem(td, row, col, lflvl, yoff, uvoff, bl + 1); if (col + hbs < s->cols) { // FIXME why not <=? if (row + hbs < s->rows) { - decode_sb_mem(ctx, row, col + hbs, lflvl, yoff + 8 * hbs * bytesperpixel, + decode_sb_mem(td, row, col + hbs, lflvl, yoff + 8 * hbs * bytesperpixel, uvoff + (8 * hbs * bytesperpixel >> s->ss_h), bl + 1); yoff += hbs * 8 * y_stride; uvoff += hbs * 8 * uv_stride >> s->ss_v; - decode_sb_mem(ctx, row + hbs, col, lflvl, yoff, uvoff, bl + 1); - decode_sb_mem(ctx, row + hbs, col + hbs, lflvl, + decode_sb_mem(td, row + hbs, col, lflvl, yoff, uvoff, bl + 1); + decode_sb_mem(td, row + hbs, col + hbs, lflvl, yoff + 8 * hbs * bytesperpixel, uvoff + (8 * hbs * bytesperpixel >> s->ss_h), bl + 1); } else { yoff += hbs * 8 * bytesperpixel; uvoff += hbs * 8 * bytesperpixel >> s->ss_h; - decode_sb_mem(ctx, row, col + hbs, lflvl, yoff, uvoff, bl + 1); + decode_sb_mem(td, row, col + hbs, lflvl, yoff, uvoff, bl + 1); } } else if (row + hbs < s->rows) { yoff += hbs * 8 * y_stride; uvoff += hbs * 8 * uv_stride >> s->ss_v; - decode_sb_mem(ctx, row + hbs, col, lflvl, yoff, uvoff, bl + 1); + decode_sb_mem(td, row + hbs, col, lflvl, yoff, uvoff, bl + 1); } } } -static av_always_inline void filter_plane_cols(VP9Context *s, int col, int ss_h, int ss_v, - uint8_t *lvl, uint8_t (*mask)[4], - uint8_t *dst, ptrdiff_t ls) -{ - int y, x, bytesperpixel = s->bytesperpixel; - - // filter edges between columns (e.g. block1 | block2) - for (y = 0; y < 8; y += 2 << ss_v, dst += 16 * ls, lvl += 16 << ss_v) { - uint8_t *ptr = dst, *l = lvl, *hmask1 = mask[y], *hmask2 = mask[y + 1 + ss_v]; - unsigned hm1 = hmask1[0] | hmask1[1] | hmask1[2], hm13 = hmask1[3]; - unsigned hm2 = hmask2[1] | hmask2[2], hm23 = hmask2[3]; - unsigned hm = hm1 | hm2 | hm13 | hm23; - - for (x = 1; hm & ~(x - 1); x <<= 1, ptr += 8 * bytesperpixel >> ss_h) { - if (col || x > 1) { - if (hm1 & x) { - int L = *l, H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - if (hmask1[0] & x) { - if (hmask2[0] & x) { - av_assert2(l[8 << ss_v] == L); - s->dsp.loop_filter_16[0](ptr, ls, E, I, H); - } else { - s->dsp.loop_filter_8[2][0](ptr, ls, E, I, H); - } - } else if (hm2 & x) { - L = l[8 << ss_v]; - H |= (L >> 4) << 8; - E |= s->filter_lut.mblim_lut[L] << 8; - I |= s->filter_lut.lim_lut[L] << 8; - s->dsp.loop_filter_mix2[!!(hmask1[1] & x)] - [!!(hmask2[1] & x)] - [0](ptr, ls, E, I, H); - } else { - s->dsp.loop_filter_8[!!(hmask1[1] & x)] - [0](ptr, ls, E, I, H); - } - } else if (hm2 & x) { - int L = l[8 << ss_v], H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - s->dsp.loop_filter_8[!!(hmask2[1] & x)] - [0](ptr + 8 * ls, ls, E, I, H); - } - } - if (ss_h) { - if (x & 0xAA) - l += 2; - } else { - if (hm13 & x) { - int L = *l, H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - if (hm23 & x) { - L = l[8 << ss_v]; - H |= (L >> 4) << 8; - E |= s->filter_lut.mblim_lut[L] << 8; - I |= s->filter_lut.lim_lut[L] << 8; - s->dsp.loop_filter_mix2[0][0][0](ptr + 4 * bytesperpixel, ls, E, I, H); - } else { - s->dsp.loop_filter_8[0][0](ptr + 4 * bytesperpixel, ls, E, I, H); - } - } else if (hm23 & x) { - int L = l[8 << ss_v], H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - s->dsp.loop_filter_8[0][0](ptr + 8 * ls + 4 * bytesperpixel, ls, E, I, H); - } - l++; - } - } - } -} - -static av_always_inline void filter_plane_rows(VP9Context *s, int row, int ss_h, int ss_v, - uint8_t *lvl, uint8_t (*mask)[4], - uint8_t *dst, ptrdiff_t ls) -{ - int y, x, bytesperpixel = s->bytesperpixel; - - // block1 - // filter edges between rows (e.g. ------) - // block2 - for (y = 0; y < 8; y++, dst += 8 * ls >> ss_v) { - uint8_t *ptr = dst, *l = lvl, *vmask = mask[y]; - unsigned vm = vmask[0] | vmask[1] | vmask[2], vm3 = vmask[3]; - - for (x = 1; vm & ~(x - 1); x <<= (2 << ss_h), ptr += 16 * bytesperpixel, l += 2 << ss_h) { - if (row || y) { - if (vm & x) { - int L = *l, H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - if (vmask[0] & x) { - if (vmask[0] & (x << (1 + ss_h))) { - av_assert2(l[1 + ss_h] == L); - s->dsp.loop_filter_16[1](ptr, ls, E, I, H); - } else { - s->dsp.loop_filter_8[2][1](ptr, ls, E, I, H); - } - } else if (vm & (x << (1 + ss_h))) { - L = l[1 + ss_h]; - H |= (L >> 4) << 8; - E |= s->filter_lut.mblim_lut[L] << 8; - I |= s->filter_lut.lim_lut[L] << 8; - s->dsp.loop_filter_mix2[!!(vmask[1] & x)] - [!!(vmask[1] & (x << (1 + ss_h)))] - [1](ptr, ls, E, I, H); - } else { - s->dsp.loop_filter_8[!!(vmask[1] & x)] - [1](ptr, ls, E, I, H); - } - } else if (vm & (x << (1 + ss_h))) { - int L = l[1 + ss_h], H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - s->dsp.loop_filter_8[!!(vmask[1] & (x << (1 + ss_h)))] - [1](ptr + 8 * bytesperpixel, ls, E, I, H); - } - } - if (!ss_v) { - if (vm3 & x) { - int L = *l, H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - if (vm3 & (x << (1 + ss_h))) { - L = l[1 + ss_h]; - H |= (L >> 4) << 8; - E |= s->filter_lut.mblim_lut[L] << 8; - I |= s->filter_lut.lim_lut[L] << 8; - s->dsp.loop_filter_mix2[0][0][1](ptr + ls * 4, ls, E, I, H); - } else { - s->dsp.loop_filter_8[0][1](ptr + ls * 4, ls, E, I, H); - } - } else if (vm3 & (x << (1 + ss_h))) { - int L = l[1 + ss_h], H = L >> 4; - int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; - - s->dsp.loop_filter_8[0][1](ptr + ls * 4 + 8 * bytesperpixel, ls, E, I, H); - } - } - } - if (ss_v) { - if (y & 1) - lvl += 16; - } else { - lvl += 8; - } - } -} - -static void loopfilter_sb(AVCodecContext *ctx, struct VP9Filter *lflvl, - int row, int col, ptrdiff_t yoff, ptrdiff_t uvoff) -{ - VP9Context *s = ctx->priv_data; - AVFrame *f = s->s.frames[CUR_FRAME].tf.f; - uint8_t *dst = f->data[0] + yoff; - ptrdiff_t ls_y = f->linesize[0], ls_uv = f->linesize[1]; - uint8_t (*uv_masks)[8][4] = lflvl->mask[s->ss_h | s->ss_v]; - int p; - - // FIXME in how far can we interleave the v/h loopfilter calls? E.g. - // if you think of them as acting on a 8x8 block max, we can interleave - // each v/h within the single x loop, but that only works if we work on - // 8 pixel blocks, and we won't always do that (we want at least 16px - // to use SSE2 optimizations, perhaps 32 for AVX2) - - filter_plane_cols(s, col, 0, 0, lflvl->level, lflvl->mask[0][0], dst, ls_y); - filter_plane_rows(s, row, 0, 0, lflvl->level, lflvl->mask[0][1], dst, ls_y); - - for (p = 0; p < 2; p++) { - dst = f->data[1 + p] + uvoff; - filter_plane_cols(s, col, s->ss_h, s->ss_v, lflvl->level, uv_masks[0], dst, ls_uv); - filter_plane_rows(s, row, s->ss_h, s->ss_v, lflvl->level, uv_masks[1], dst, ls_uv); - } -} - static void set_tile_offset(int *start, int *end, int idx, int log2_n, int n) { int sb_start = ( idx * n) >> log2_n; @@ -3697,300 +1175,302 @@ static void set_tile_offset(int *start, int *end, int idx, int log2_n, int n) *end = FFMIN(sb_end, n) << 3; } -static av_always_inline void adapt_prob(uint8_t *p, unsigned ct0, unsigned ct1, - int max_count, int update_factor) -{ - unsigned ct = ct0 + ct1, p2, p1; - - if (!ct) - return; - - update_factor = FASTDIV(update_factor * FFMIN(ct, max_count), max_count); - p1 = *p; - p2 = ((((int64_t) ct0) << 8) + (ct >> 1)) / ct; - p2 = av_clip(p2, 1, 255); - - // (p1 * (256 - update_factor) + p2 * update_factor + 128) >> 8 - *p = p1 + (((p2 - p1) * update_factor + 128) >> 8); -} - -static void adapt_probs(VP9Context *s) -{ - int i, j, k, l, m; - prob_context *p = &s->prob_ctx[s->s.h.framectxid].p; - int uf = (s->s.h.keyframe || s->s.h.intraonly || !s->last_keyframe) ? 112 : 128; - - // coefficients - for (i = 0; i < 4; i++) - for (j = 0; j < 2; j++) - for (k = 0; k < 2; k++) - for (l = 0; l < 6; l++) - for (m = 0; m < 6; m++) { - uint8_t *pp = s->prob_ctx[s->s.h.framectxid].coef[i][j][k][l][m]; - unsigned *e = s->counts.eob[i][j][k][l][m]; - unsigned *c = s->counts.coef[i][j][k][l][m]; - - if (l == 0 && m >= 3) // dc only has 3 pt - break; - - adapt_prob(&pp[0], e[0], e[1], 24, uf); - adapt_prob(&pp[1], c[0], c[1] + c[2], 24, uf); - adapt_prob(&pp[2], c[1], c[2], 24, uf); - } - - if (s->s.h.keyframe || s->s.h.intraonly) { - memcpy(p->skip, s->prob.p.skip, sizeof(p->skip)); - memcpy(p->tx32p, s->prob.p.tx32p, sizeof(p->tx32p)); - memcpy(p->tx16p, s->prob.p.tx16p, sizeof(p->tx16p)); - memcpy(p->tx8p, s->prob.p.tx8p, sizeof(p->tx8p)); - return; - } - - // skip flag - for (i = 0; i < 3; i++) - adapt_prob(&p->skip[i], s->counts.skip[i][0], s->counts.skip[i][1], 20, 128); - - // intra/inter flag - for (i = 0; i < 4; i++) - adapt_prob(&p->intra[i], s->counts.intra[i][0], s->counts.intra[i][1], 20, 128); - - // comppred flag - if (s->s.h.comppredmode == PRED_SWITCHABLE) { - for (i = 0; i < 5; i++) - adapt_prob(&p->comp[i], s->counts.comp[i][0], s->counts.comp[i][1], 20, 128); - } - - // reference frames - if (s->s.h.comppredmode != PRED_SINGLEREF) { - for (i = 0; i < 5; i++) - adapt_prob(&p->comp_ref[i], s->counts.comp_ref[i][0], - s->counts.comp_ref[i][1], 20, 128); - } - - if (s->s.h.comppredmode != PRED_COMPREF) { - for (i = 0; i < 5; i++) { - uint8_t *pp = p->single_ref[i]; - unsigned (*c)[2] = s->counts.single_ref[i]; - - adapt_prob(&pp[0], c[0][0], c[0][1], 20, 128); - adapt_prob(&pp[1], c[1][0], c[1][1], 20, 128); - } - } - - // block partitioning - for (i = 0; i < 4; i++) - for (j = 0; j < 4; j++) { - uint8_t *pp = p->partition[i][j]; - unsigned *c = s->counts.partition[i][j]; - - adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); - adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); - adapt_prob(&pp[2], c[2], c[3], 20, 128); - } - - // tx size - if (s->s.h.txfmmode == TX_SWITCHABLE) { - for (i = 0; i < 2; i++) { - unsigned *c16 = s->counts.tx16p[i], *c32 = s->counts.tx32p[i]; - - adapt_prob(&p->tx8p[i], s->counts.tx8p[i][0], s->counts.tx8p[i][1], 20, 128); - adapt_prob(&p->tx16p[i][0], c16[0], c16[1] + c16[2], 20, 128); - adapt_prob(&p->tx16p[i][1], c16[1], c16[2], 20, 128); - adapt_prob(&p->tx32p[i][0], c32[0], c32[1] + c32[2] + c32[3], 20, 128); - adapt_prob(&p->tx32p[i][1], c32[1], c32[2] + c32[3], 20, 128); - adapt_prob(&p->tx32p[i][2], c32[2], c32[3], 20, 128); - } - } - - // interpolation filter - if (s->s.h.filtermode == FILTER_SWITCHABLE) { - for (i = 0; i < 4; i++) { - uint8_t *pp = p->filter[i]; - unsigned *c = s->counts.filter[i]; - - adapt_prob(&pp[0], c[0], c[1] + c[2], 20, 128); - adapt_prob(&pp[1], c[1], c[2], 20, 128); - } - } - - // inter modes - for (i = 0; i < 7; i++) { - uint8_t *pp = p->mv_mode[i]; - unsigned *c = s->counts.mv_mode[i]; - - adapt_prob(&pp[0], c[2], c[1] + c[0] + c[3], 20, 128); - adapt_prob(&pp[1], c[0], c[1] + c[3], 20, 128); - adapt_prob(&pp[2], c[1], c[3], 20, 128); - } - - // mv joints - { - uint8_t *pp = p->mv_joint; - unsigned *c = s->counts.mv_joint; - - adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); - adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); - adapt_prob(&pp[2], c[2], c[3], 20, 128); - } - - // mv components - for (i = 0; i < 2; i++) { - uint8_t *pp; - unsigned *c, (*c2)[2], sum; - - adapt_prob(&p->mv_comp[i].sign, s->counts.mv_comp[i].sign[0], - s->counts.mv_comp[i].sign[1], 20, 128); - - pp = p->mv_comp[i].classes; - c = s->counts.mv_comp[i].classes; - sum = c[1] + c[2] + c[3] + c[4] + c[5] + c[6] + c[7] + c[8] + c[9] + c[10]; - adapt_prob(&pp[0], c[0], sum, 20, 128); - sum -= c[1]; - adapt_prob(&pp[1], c[1], sum, 20, 128); - sum -= c[2] + c[3]; - adapt_prob(&pp[2], c[2] + c[3], sum, 20, 128); - adapt_prob(&pp[3], c[2], c[3], 20, 128); - sum -= c[4] + c[5]; - adapt_prob(&pp[4], c[4] + c[5], sum, 20, 128); - adapt_prob(&pp[5], c[4], c[5], 20, 128); - sum -= c[6]; - adapt_prob(&pp[6], c[6], sum, 20, 128); - adapt_prob(&pp[7], c[7] + c[8], c[9] + c[10], 20, 128); - adapt_prob(&pp[8], c[7], c[8], 20, 128); - adapt_prob(&pp[9], c[9], c[10], 20, 128); - - adapt_prob(&p->mv_comp[i].class0, s->counts.mv_comp[i].class0[0], - s->counts.mv_comp[i].class0[1], 20, 128); - pp = p->mv_comp[i].bits; - c2 = s->counts.mv_comp[i].bits; - for (j = 0; j < 10; j++) - adapt_prob(&pp[j], c2[j][0], c2[j][1], 20, 128); - - for (j = 0; j < 2; j++) { - pp = p->mv_comp[i].class0_fp[j]; - c = s->counts.mv_comp[i].class0_fp[j]; - adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); - adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); - adapt_prob(&pp[2], c[2], c[3], 20, 128); - } - pp = p->mv_comp[i].fp; - c = s->counts.mv_comp[i].fp; - adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); - adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); - adapt_prob(&pp[2], c[2], c[3], 20, 128); - - if (s->s.h.highprecisionmvs) { - adapt_prob(&p->mv_comp[i].class0_hp, s->counts.mv_comp[i].class0_hp[0], - s->counts.mv_comp[i].class0_hp[1], 20, 128); - adapt_prob(&p->mv_comp[i].hp, s->counts.mv_comp[i].hp[0], - s->counts.mv_comp[i].hp[1], 20, 128); - } - } - - // y intra modes - for (i = 0; i < 4; i++) { - uint8_t *pp = p->y_mode[i]; - unsigned *c = s->counts.y_mode[i], sum, s2; - - sum = c[0] + c[1] + c[3] + c[4] + c[5] + c[6] + c[7] + c[8] + c[9]; - adapt_prob(&pp[0], c[DC_PRED], sum, 20, 128); - sum -= c[TM_VP8_PRED]; - adapt_prob(&pp[1], c[TM_VP8_PRED], sum, 20, 128); - sum -= c[VERT_PRED]; - adapt_prob(&pp[2], c[VERT_PRED], sum, 20, 128); - s2 = c[HOR_PRED] + c[DIAG_DOWN_RIGHT_PRED] + c[VERT_RIGHT_PRED]; - sum -= s2; - adapt_prob(&pp[3], s2, sum, 20, 128); - s2 -= c[HOR_PRED]; - adapt_prob(&pp[4], c[HOR_PRED], s2, 20, 128); - adapt_prob(&pp[5], c[DIAG_DOWN_RIGHT_PRED], c[VERT_RIGHT_PRED], 20, 128); - sum -= c[DIAG_DOWN_LEFT_PRED]; - adapt_prob(&pp[6], c[DIAG_DOWN_LEFT_PRED], sum, 20, 128); - sum -= c[VERT_LEFT_PRED]; - adapt_prob(&pp[7], c[VERT_LEFT_PRED], sum, 20, 128); - adapt_prob(&pp[8], c[HOR_DOWN_PRED], c[HOR_UP_PRED], 20, 128); - } - - // uv intra modes - for (i = 0; i < 10; i++) { - uint8_t *pp = p->uv_mode[i]; - unsigned *c = s->counts.uv_mode[i], sum, s2; - - sum = c[0] + c[1] + c[3] + c[4] + c[5] + c[6] + c[7] + c[8] + c[9]; - adapt_prob(&pp[0], c[DC_PRED], sum, 20, 128); - sum -= c[TM_VP8_PRED]; - adapt_prob(&pp[1], c[TM_VP8_PRED], sum, 20, 128); - sum -= c[VERT_PRED]; - adapt_prob(&pp[2], c[VERT_PRED], sum, 20, 128); - s2 = c[HOR_PRED] + c[DIAG_DOWN_RIGHT_PRED] + c[VERT_RIGHT_PRED]; - sum -= s2; - adapt_prob(&pp[3], s2, sum, 20, 128); - s2 -= c[HOR_PRED]; - adapt_prob(&pp[4], c[HOR_PRED], s2, 20, 128); - adapt_prob(&pp[5], c[DIAG_DOWN_RIGHT_PRED], c[VERT_RIGHT_PRED], 20, 128); - sum -= c[DIAG_DOWN_LEFT_PRED]; - adapt_prob(&pp[6], c[DIAG_DOWN_LEFT_PRED], sum, 20, 128); - sum -= c[VERT_LEFT_PRED]; - adapt_prob(&pp[7], c[VERT_LEFT_PRED], sum, 20, 128); - adapt_prob(&pp[8], c[HOR_DOWN_PRED], c[HOR_UP_PRED], 20, 128); - } -} - static void free_buffers(VP9Context *s) { + int i; + av_freep(&s->intra_pred_data[0]); - av_freep(&s->b_base); - av_freep(&s->block_base); + for (i = 0; i < s->active_tile_cols; i++) { + av_freep(&s->td[i].b_base); + av_freep(&s->td[i].block_base); + } } -static av_cold int vp9_decode_free(AVCodecContext *ctx) +static av_cold int vp9_decode_free(AVCodecContext *avctx) { - VP9Context *s = ctx->priv_data; + VP9Context *s = avctx->priv_data; int i; for (i = 0; i < 3; i++) { if (s->s.frames[i].tf.f->buf[0]) - vp9_unref_frame(ctx, &s->s.frames[i]); + vp9_frame_unref(avctx, &s->s.frames[i]); av_frame_free(&s->s.frames[i].tf.f); } for (i = 0; i < 8; i++) { if (s->s.refs[i].f->buf[0]) - ff_thread_release_buffer(ctx, &s->s.refs[i]); + ff_thread_release_buffer(avctx, &s->s.refs[i]); av_frame_free(&s->s.refs[i].f); if (s->next_refs[i].f->buf[0]) - ff_thread_release_buffer(ctx, &s->next_refs[i]); + ff_thread_release_buffer(avctx, &s->next_refs[i]); av_frame_free(&s->next_refs[i].f); } - free_buffers(s); - av_freep(&s->c_b); - s->c_b_size = 0; + free_buffers(s); + vp9_free_entries(avctx); + av_freep(&s->td); return 0; } +static int decode_tiles(AVCodecContext *avctx, + const uint8_t *data, int size) +{ + VP9Context *s = avctx->priv_data; + VP9TileData *td = &s->td[0]; + int row, col, tile_row, tile_col, ret; + int bytesperpixel; + int tile_row_start, tile_row_end, tile_col_start, tile_col_end; + AVFrame *f; + ptrdiff_t yoff, uvoff, ls_y, ls_uv; -static int vp9_decode_frame(AVCodecContext *ctx, void *frame, + f = s->s.frames[CUR_FRAME].tf.f; + ls_y = f->linesize[0]; + ls_uv =f->linesize[1]; + bytesperpixel = s->bytesperpixel; + + yoff = uvoff = 0; + for (tile_row = 0; tile_row < s->s.h.tiling.tile_rows; tile_row++) { + set_tile_offset(&tile_row_start, &tile_row_end, + tile_row, s->s.h.tiling.log2_tile_rows, s->sb_rows); + + for (tile_col = 0; tile_col < s->s.h.tiling.tile_cols; tile_col++) { + int64_t tile_size; + + if (tile_col == s->s.h.tiling.tile_cols - 1 && + tile_row == s->s.h.tiling.tile_rows - 1) { + tile_size = size; + } else { + tile_size = AV_RB32(data); + data += 4; + size -= 4; + } + if (tile_size > size) { + ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); + return AVERROR_INVALIDDATA; + } + ret = ff_vp56_init_range_decoder(&td->c_b[tile_col], data, tile_size); + if (ret < 0) + return ret; + if (vp56_rac_get_prob_branchy(&td->c_b[tile_col], 128)) { // marker bit + ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); + return AVERROR_INVALIDDATA; + } + data += tile_size; + size -= tile_size; + } + + for (row = tile_row_start; row < tile_row_end; + row += 8, yoff += ls_y * 64, uvoff += ls_uv * 64 >> s->ss_v) { + VP9Filter *lflvl_ptr = s->lflvl; + ptrdiff_t yoff2 = yoff, uvoff2 = uvoff; + + for (tile_col = 0; tile_col < s->s.h.tiling.tile_cols; tile_col++) { + set_tile_offset(&tile_col_start, &tile_col_end, + tile_col, s->s.h.tiling.log2_tile_cols, s->sb_cols); + td->tile_col_start = tile_col_start; + if (s->pass != 2) { + memset(td->left_partition_ctx, 0, 8); + memset(td->left_skip_ctx, 0, 8); + if (s->s.h.keyframe || s->s.h.intraonly) { + memset(td->left_mode_ctx, DC_PRED, 16); + } else { + memset(td->left_mode_ctx, NEARESTMV, 8); + } + memset(td->left_y_nnz_ctx, 0, 16); + memset(td->left_uv_nnz_ctx, 0, 32); + memset(td->left_segpred_ctx, 0, 8); + + td->c = &td->c_b[tile_col]; + } + + for (col = tile_col_start; + col < tile_col_end; + col += 8, yoff2 += 64 * bytesperpixel, + uvoff2 += 64 * bytesperpixel >> s->ss_h, lflvl_ptr++) { + // FIXME integrate with lf code (i.e. zero after each + // use, similar to invtxfm coefficients, or similar) + if (s->pass != 1) { + memset(lflvl_ptr->mask, 0, sizeof(lflvl_ptr->mask)); + } + + if (s->pass == 2) { + decode_sb_mem(td, row, col, lflvl_ptr, + yoff2, uvoff2, BL_64X64); + } else { + decode_sb(td, row, col, lflvl_ptr, + yoff2, uvoff2, BL_64X64); + } + } + } + + if (s->pass == 1) + continue; + + // backup pre-loopfilter reconstruction data for intra + // prediction of next row of sb64s + if (row + 8 < s->rows) { + memcpy(s->intra_pred_data[0], + f->data[0] + yoff + 63 * ls_y, + 8 * s->cols * bytesperpixel); + memcpy(s->intra_pred_data[1], + f->data[1] + uvoff + ((64 >> s->ss_v) - 1) * ls_uv, + 8 * s->cols * bytesperpixel >> s->ss_h); + memcpy(s->intra_pred_data[2], + f->data[2] + uvoff + ((64 >> s->ss_v) - 1) * ls_uv, + 8 * s->cols * bytesperpixel >> s->ss_h); + } + + // loopfilter one row + if (s->s.h.filter.level) { + yoff2 = yoff; + uvoff2 = uvoff; + lflvl_ptr = s->lflvl; + for (col = 0; col < s->cols; + col += 8, yoff2 += 64 * bytesperpixel, + uvoff2 += 64 * bytesperpixel >> s->ss_h, lflvl_ptr++) { + ff_vp9_loopfilter_sb(avctx, lflvl_ptr, row, col, + yoff2, uvoff2); + } + } + + // FIXME maybe we can make this more finegrained by running the + // loopfilter per-block instead of after each sbrow + // In fact that would also make intra pred left preparation easier? + ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, row >> 3, 0); + } + } + return 0; +} + +#if HAVE_THREADS +static av_always_inline +int decode_tiles_mt(AVCodecContext *avctx, void *tdata, int jobnr, + int threadnr) +{ + VP9Context *s = avctx->priv_data; + VP9TileData *td = &s->td[jobnr]; + ptrdiff_t uvoff, yoff, ls_y, ls_uv; + int bytesperpixel = s->bytesperpixel, row, col, tile_row; + unsigned tile_cols_len; + int tile_row_start, tile_row_end, tile_col_start, tile_col_end; + VP9Filter *lflvl_ptr_base; + AVFrame *f; + + f = s->s.frames[CUR_FRAME].tf.f; + ls_y = f->linesize[0]; + ls_uv =f->linesize[1]; + + set_tile_offset(&tile_col_start, &tile_col_end, + jobnr, s->s.h.tiling.log2_tile_cols, s->sb_cols); + td->tile_col_start = tile_col_start; + uvoff = (64 * bytesperpixel >> s->ss_h)*(tile_col_start >> 3); + yoff = (64 * bytesperpixel)*(tile_col_start >> 3); + lflvl_ptr_base = s->lflvl+(tile_col_start >> 3); + + for (tile_row = 0; tile_row < s->s.h.tiling.tile_rows; tile_row++) { + set_tile_offset(&tile_row_start, &tile_row_end, + tile_row, s->s.h.tiling.log2_tile_rows, s->sb_rows); + + td->c = &td->c_b[tile_row]; + for (row = tile_row_start; row < tile_row_end; + row += 8, yoff += ls_y * 64, uvoff += ls_uv * 64 >> s->ss_v) { + ptrdiff_t yoff2 = yoff, uvoff2 = uvoff; + VP9Filter *lflvl_ptr = lflvl_ptr_base+s->sb_cols*(row >> 3); + + memset(td->left_partition_ctx, 0, 8); + memset(td->left_skip_ctx, 0, 8); + if (s->s.h.keyframe || s->s.h.intraonly) { + memset(td->left_mode_ctx, DC_PRED, 16); + } else { + memset(td->left_mode_ctx, NEARESTMV, 8); + } + memset(td->left_y_nnz_ctx, 0, 16); + memset(td->left_uv_nnz_ctx, 0, 32); + memset(td->left_segpred_ctx, 0, 8); + + for (col = tile_col_start; + col < tile_col_end; + col += 8, yoff2 += 64 * bytesperpixel, + uvoff2 += 64 * bytesperpixel >> s->ss_h, lflvl_ptr++) { + // FIXME integrate with lf code (i.e. zero after each + // use, similar to invtxfm coefficients, or similar) + memset(lflvl_ptr->mask, 0, sizeof(lflvl_ptr->mask)); + decode_sb(td, row, col, lflvl_ptr, + yoff2, uvoff2, BL_64X64); + } + + // backup pre-loopfilter reconstruction data for intra + // prediction of next row of sb64s + tile_cols_len = tile_col_end - tile_col_start; + if (row + 8 < s->rows) { + memcpy(s->intra_pred_data[0] + (tile_col_start * 8 * bytesperpixel), + f->data[0] + yoff + 63 * ls_y, + 8 * tile_cols_len * bytesperpixel); + memcpy(s->intra_pred_data[1] + (tile_col_start * 8 * bytesperpixel >> s->ss_h), + f->data[1] + uvoff + ((64 >> s->ss_v) - 1) * ls_uv, + 8 * tile_cols_len * bytesperpixel >> s->ss_h); + memcpy(s->intra_pred_data[2] + (tile_col_start * 8 * bytesperpixel >> s->ss_h), + f->data[2] + uvoff + ((64 >> s->ss_v) - 1) * ls_uv, + 8 * tile_cols_len * bytesperpixel >> s->ss_h); + } + + vp9_report_tile_progress(s, row >> 3, 1); + } + } + return 0; +} + +static av_always_inline +int loopfilter_proc(AVCodecContext *avctx) +{ + VP9Context *s = avctx->priv_data; + ptrdiff_t uvoff, yoff, ls_y, ls_uv; + VP9Filter *lflvl_ptr; + int bytesperpixel = s->bytesperpixel, col, i; + AVFrame *f; + + f = s->s.frames[CUR_FRAME].tf.f; + ls_y = f->linesize[0]; + ls_uv =f->linesize[1]; + + for (i = 0; i < s->sb_rows; i++) { + vp9_await_tile_progress(s, i, s->s.h.tiling.tile_cols); + + if (s->s.h.filter.level) { + yoff = (ls_y * 64)*i; + uvoff = (ls_uv * 64 >> s->ss_v)*i; + lflvl_ptr = s->lflvl+s->sb_cols*i; + for (col = 0; col < s->cols; + col += 8, yoff += 64 * bytesperpixel, + uvoff += 64 * bytesperpixel >> s->ss_h, lflvl_ptr++) { + ff_vp9_loopfilter_sb(avctx, lflvl_ptr, i << 3, col, + yoff, uvoff); + } + } + } + return 0; +} +#endif + +static int vp9_decode_frame(AVCodecContext *avctx, void *frame, int *got_frame, AVPacket *pkt) { const uint8_t *data = pkt->data; int size = pkt->size; - VP9Context *s = ctx->priv_data; - int res, tile_row, tile_col, i, ref, row, col; + VP9Context *s = avctx->priv_data; + int ret, i, j, ref; int retain_segmap_ref = s->s.frames[REF_FRAME_SEGMAP].segmentation_map && (!s->s.h.segmentation.enabled || !s->s.h.segmentation.update_map); - ptrdiff_t yoff, uvoff, ls_y, ls_uv; AVFrame *f; - int bytesperpixel; - if ((res = decode_frame_header(ctx, data, size, &ref)) < 0) { - return res; - } else if (res == 0) { + if ((ret = decode_frame_header(avctx, data, size, &ref)) < 0) { + return ret; + } else if (ret == 0) { if (!s->s.refs[ref].f->buf[0]) { - av_log(ctx, AV_LOG_ERROR, "Requested reference %d not available\n", ref); + av_log(avctx, AV_LOG_ERROR, "Requested reference %d not available\n", ref); return AVERROR_INVALIDDATA; } - if ((res = av_frame_ref(frame, s->s.refs[ref].f)) < 0) - return res; + if ((ret = av_frame_ref(frame, s->s.refs[ref].f)) < 0) + return ret; ((AVFrame *)frame)->pts = pkt->pts; #if FF_API_PKT_PTS FF_DISABLE_DEPRECATION_WARNINGS @@ -4000,73 +1480,70 @@ FF_ENABLE_DEPRECATION_WARNINGS ((AVFrame *)frame)->pkt_dts = pkt->dts; for (i = 0; i < 8; i++) { if (s->next_refs[i].f->buf[0]) - ff_thread_release_buffer(ctx, &s->next_refs[i]); + ff_thread_release_buffer(avctx, &s->next_refs[i]); if (s->s.refs[i].f->buf[0] && - (res = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i])) < 0) - return res; + (ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i])) < 0) + return ret; } *got_frame = 1; return pkt->size; } - data += res; - size -= res; + data += ret; + size -= ret; if (!retain_segmap_ref || s->s.h.keyframe || s->s.h.intraonly) { if (s->s.frames[REF_FRAME_SEGMAP].tf.f->buf[0]) - vp9_unref_frame(ctx, &s->s.frames[REF_FRAME_SEGMAP]); + vp9_frame_unref(avctx, &s->s.frames[REF_FRAME_SEGMAP]); if (!s->s.h.keyframe && !s->s.h.intraonly && !s->s.h.errorres && s->s.frames[CUR_FRAME].tf.f->buf[0] && - (res = vp9_ref_frame(ctx, &s->s.frames[REF_FRAME_SEGMAP], &s->s.frames[CUR_FRAME])) < 0) - return res; + (ret = vp9_frame_ref(avctx, &s->s.frames[REF_FRAME_SEGMAP], &s->s.frames[CUR_FRAME])) < 0) + return ret; } if (s->s.frames[REF_FRAME_MVPAIR].tf.f->buf[0]) - vp9_unref_frame(ctx, &s->s.frames[REF_FRAME_MVPAIR]); + vp9_frame_unref(avctx, &s->s.frames[REF_FRAME_MVPAIR]); if (!s->s.h.intraonly && !s->s.h.keyframe && !s->s.h.errorres && s->s.frames[CUR_FRAME].tf.f->buf[0] && - (res = vp9_ref_frame(ctx, &s->s.frames[REF_FRAME_MVPAIR], &s->s.frames[CUR_FRAME])) < 0) - return res; + (ret = vp9_frame_ref(avctx, &s->s.frames[REF_FRAME_MVPAIR], &s->s.frames[CUR_FRAME])) < 0) + return ret; if (s->s.frames[CUR_FRAME].tf.f->buf[0]) - vp9_unref_frame(ctx, &s->s.frames[CUR_FRAME]); - if ((res = vp9_alloc_frame(ctx, &s->s.frames[CUR_FRAME])) < 0) - return res; + vp9_frame_unref(avctx, &s->s.frames[CUR_FRAME]); + if ((ret = vp9_frame_alloc(avctx, &s->s.frames[CUR_FRAME])) < 0) + return ret; f = s->s.frames[CUR_FRAME].tf.f; f->key_frame = s->s.h.keyframe; f->pict_type = (s->s.h.keyframe || s->s.h.intraonly) ? AV_PICTURE_TYPE_I : AV_PICTURE_TYPE_P; - ls_y = f->linesize[0]; - ls_uv =f->linesize[1]; if (s->s.frames[REF_FRAME_SEGMAP].tf.f->buf[0] && (s->s.frames[REF_FRAME_MVPAIR].tf.f->width != s->s.frames[CUR_FRAME].tf.f->width || s->s.frames[REF_FRAME_MVPAIR].tf.f->height != s->s.frames[CUR_FRAME].tf.f->height)) { - vp9_unref_frame(ctx, &s->s.frames[REF_FRAME_SEGMAP]); + vp9_frame_unref(avctx, &s->s.frames[REF_FRAME_SEGMAP]); } // ref frame setup for (i = 0; i < 8; i++) { if (s->next_refs[i].f->buf[0]) - ff_thread_release_buffer(ctx, &s->next_refs[i]); + ff_thread_release_buffer(avctx, &s->next_refs[i]); if (s->s.h.refreshrefmask & (1 << i)) { - res = ff_thread_ref_frame(&s->next_refs[i], &s->s.frames[CUR_FRAME].tf); + ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.frames[CUR_FRAME].tf); } else if (s->s.refs[i].f->buf[0]) { - res = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i]); + ret = ff_thread_ref_frame(&s->next_refs[i], &s->s.refs[i]); } - if (res < 0) - return res; + if (ret < 0) + return ret; } - if (ctx->hwaccel) { - res = ctx->hwaccel->start_frame(ctx, NULL, 0); - if (res < 0) - return res; - res = ctx->hwaccel->decode_slice(ctx, pkt->data, pkt->size); - if (res < 0) - return res; - res = ctx->hwaccel->end_frame(ctx); - if (res < 0) - return res; + if (avctx->hwaccel) { + ret = avctx->hwaccel->start_frame(avctx, NULL, 0); + if (ret < 0) + return ret; + ret = avctx->hwaccel->decode_slice(avctx, pkt->data, pkt->size); + if (ret < 0) + return ret; + ret = avctx->hwaccel->end_frame(avctx); + if (ret < 0) + return ret; goto finish; } // main tile decode loop - bytesperpixel = s->bytesperpixel; memset(s->above_partition_ctx, 0, s->cols); memset(s->above_skip_ctx, 0, s->cols); if (s->s.h.keyframe || s->s.h.intraonly) { @@ -4079,11 +1556,11 @@ FF_ENABLE_DEPRECATION_WARNINGS memset(s->above_uv_nnz_ctx[1], 0, s->sb_cols * 16 >> s->ss_h); memset(s->above_segpred_ctx, 0, s->cols); s->pass = s->s.frames[CUR_FRAME].uses_2pass = - ctx->active_thread_type == FF_THREAD_FRAME && s->s.h.refreshctx && !s->s.h.parallelmode; - if ((res = update_block_buffers(ctx)) < 0) { - av_log(ctx, AV_LOG_ERROR, + avctx->active_thread_type == FF_THREAD_FRAME && s->s.h.refreshctx && !s->s.h.parallelmode; + if ((ret = update_block_buffers(avctx)) < 0) { + av_log(avctx, AV_LOG_ERROR, "Failed to allocate block buffers\n"); - return res; + return ret; } if (s->s.h.refreshctx && s->s.h.parallelmode) { int j, k, l, m; @@ -4099,25 +1576,36 @@ FF_ENABLE_DEPRECATION_WARNINGS break; } s->prob_ctx[s->s.h.framectxid].p = s->prob.p; - ff_thread_finish_setup(ctx); + ff_thread_finish_setup(avctx); } else if (!s->s.h.refreshctx) { - ff_thread_finish_setup(ctx); + ff_thread_finish_setup(avctx); } - do { - yoff = uvoff = 0; - s->b = s->b_base; - s->block = s->block_base; - s->uvblock[0] = s->uvblock_base[0]; - s->uvblock[1] = s->uvblock_base[1]; - s->eob = s->eob_base; - s->uveob[0] = s->uveob_base[0]; - s->uveob[1] = s->uveob_base[1]; +#if HAVE_THREADS + if (avctx->active_thread_type & FF_THREAD_SLICE) { + for (i = 0; i < s->sb_rows; i++) + atomic_store(&s->entries[i], 0); + } +#endif - for (tile_row = 0; tile_row < s->s.h.tiling.tile_rows; tile_row++) { - set_tile_offset(&s->tile_row_start, &s->tile_row_end, - tile_row, s->s.h.tiling.log2_tile_rows, s->sb_rows); - if (s->pass != 2) { + do { + for (i = 0; i < s->active_tile_cols; i++) { + s->td[i].b = s->td[i].b_base; + s->td[i].block = s->td[i].block_base; + s->td[i].uvblock[0] = s->td[i].uvblock_base[0]; + s->td[i].uvblock[1] = s->td[i].uvblock_base[1]; + s->td[i].eob = s->td[i].eob_base; + s->td[i].uveob[0] = s->td[i].uveob_base[0]; + s->td[i].uveob[1] = s->td[i].uveob_base[1]; + } + +#if HAVE_THREADS + if (avctx->active_thread_type == FF_THREAD_SLICE) { + int tile_row, tile_col; + + av_assert1(!s->pass); + + for (tile_row = 0; tile_row < s->s.h.tiling.tile_rows; tile_row++) { for (tile_col = 0; tile_col < s->s.h.tiling.tile_cols; tile_col++) { int64_t tile_size; @@ -4129,107 +1617,36 @@ FF_ENABLE_DEPRECATION_WARNINGS data += 4; size -= 4; } - if (tile_size > size) { - ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); + if (tile_size > size) return AVERROR_INVALIDDATA; - } - ff_vp56_init_range_decoder(&s->c_b[tile_col], data, tile_size); - if (vp56_rac_get_prob_branchy(&s->c_b[tile_col], 128)) { // marker bit - ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); + ret = ff_vp56_init_range_decoder(&s->td[tile_col].c_b[tile_row], data, tile_size); + if (ret < 0) + return ret; + if (vp56_rac_get_prob_branchy(&s->td[tile_col].c_b[tile_row], 128)) // marker bit return AVERROR_INVALIDDATA; - } data += tile_size; size -= tile_size; } } - for (row = s->tile_row_start; row < s->tile_row_end; - row += 8, yoff += ls_y * 64, uvoff += ls_uv * 64 >> s->ss_v) { - struct VP9Filter *lflvl_ptr = s->lflvl; - ptrdiff_t yoff2 = yoff, uvoff2 = uvoff; - - for (tile_col = 0; tile_col < s->s.h.tiling.tile_cols; tile_col++) { - set_tile_offset(&s->tile_col_start, &s->tile_col_end, - tile_col, s->s.h.tiling.log2_tile_cols, s->sb_cols); - - if (s->pass != 2) { - memset(s->left_partition_ctx, 0, 8); - memset(s->left_skip_ctx, 0, 8); - if (s->s.h.keyframe || s->s.h.intraonly) { - memset(s->left_mode_ctx, DC_PRED, 16); - } else { - memset(s->left_mode_ctx, NEARESTMV, 8); - } - memset(s->left_y_nnz_ctx, 0, 16); - memset(s->left_uv_nnz_ctx, 0, 32); - memset(s->left_segpred_ctx, 0, 8); - - memcpy(&s->c, &s->c_b[tile_col], sizeof(s->c)); - } - - for (col = s->tile_col_start; - col < s->tile_col_end; - col += 8, yoff2 += 64 * bytesperpixel, - uvoff2 += 64 * bytesperpixel >> s->ss_h, lflvl_ptr++) { - // FIXME integrate with lf code (i.e. zero after each - // use, similar to invtxfm coefficients, or similar) - if (s->pass != 1) { - memset(lflvl_ptr->mask, 0, sizeof(lflvl_ptr->mask)); - } - - if (s->pass == 2) { - decode_sb_mem(ctx, row, col, lflvl_ptr, - yoff2, uvoff2, BL_64X64); - } else { - decode_sb(ctx, row, col, lflvl_ptr, - yoff2, uvoff2, BL_64X64); - } - } - if (s->pass != 2) { - memcpy(&s->c_b[tile_col], &s->c, sizeof(s->c)); - } - } - - if (s->pass == 1) { - continue; - } - - // backup pre-loopfilter reconstruction data for intra - // prediction of next row of sb64s - if (row + 8 < s->rows) { - memcpy(s->intra_pred_data[0], - f->data[0] + yoff + 63 * ls_y, - 8 * s->cols * bytesperpixel); - memcpy(s->intra_pred_data[1], - f->data[1] + uvoff + ((64 >> s->ss_v) - 1) * ls_uv, - 8 * s->cols * bytesperpixel >> s->ss_h); - memcpy(s->intra_pred_data[2], - f->data[2] + uvoff + ((64 >> s->ss_v) - 1) * ls_uv, - 8 * s->cols * bytesperpixel >> s->ss_h); - } - - // loopfilter one row - if (s->s.h.filter.level) { - yoff2 = yoff; - uvoff2 = uvoff; - lflvl_ptr = s->lflvl; - for (col = 0; col < s->cols; - col += 8, yoff2 += 64 * bytesperpixel, - uvoff2 += 64 * bytesperpixel >> s->ss_h, lflvl_ptr++) { - loopfilter_sb(ctx, lflvl_ptr, row, col, yoff2, uvoff2); - } - } - - // FIXME maybe we can make this more finegrained by running the - // loopfilter per-block instead of after each sbrow - // In fact that would also make intra pred left preparation easier? - ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, row >> 3, 0); - } + ff_slice_thread_execute_with_mainfunc(avctx, decode_tiles_mt, loopfilter_proc, s->td, NULL, s->s.h.tiling.tile_cols); + } else +#endif + { + ret = decode_tiles(avctx, data, size); + if (ret < 0) + return ret; } + // Sum all counts fields into td[0].counts for tile threading + if (avctx->active_thread_type == FF_THREAD_SLICE) + for (i = 1; i < s->s.h.tiling.tile_cols; i++) + for (j = 0; j < sizeof(s->td[i].counts) / sizeof(unsigned); j++) + ((unsigned *)&s->td[0].counts)[j] += ((unsigned *)&s->td[i].counts)[j]; + if (s->pass < 2 && s->s.h.refreshctx && !s->s.h.parallelmode) { - adapt_probs(s); - ff_thread_finish_setup(ctx); + ff_vp9_adapt_probs(s); + ff_thread_finish_setup(avctx); } } while (s->pass++ == 1); ff_thread_report_progress(&s->s.frames[CUR_FRAME].tf, INT_MAX, 0); @@ -4238,42 +1655,42 @@ finish: // ref frame setup for (i = 0; i < 8; i++) { if (s->s.refs[i].f->buf[0]) - ff_thread_release_buffer(ctx, &s->s.refs[i]); + ff_thread_release_buffer(avctx, &s->s.refs[i]); if (s->next_refs[i].f->buf[0] && - (res = ff_thread_ref_frame(&s->s.refs[i], &s->next_refs[i])) < 0) - return res; + (ret = ff_thread_ref_frame(&s->s.refs[i], &s->next_refs[i])) < 0) + return ret; } if (!s->s.h.invisible) { - if ((res = av_frame_ref(frame, s->s.frames[CUR_FRAME].tf.f)) < 0) - return res; + if ((ret = av_frame_ref(frame, s->s.frames[CUR_FRAME].tf.f)) < 0) + return ret; *got_frame = 1; } return pkt->size; } -static void vp9_decode_flush(AVCodecContext *ctx) +static void vp9_decode_flush(AVCodecContext *avctx) { - VP9Context *s = ctx->priv_data; + VP9Context *s = avctx->priv_data; int i; for (i = 0; i < 3; i++) - vp9_unref_frame(ctx, &s->s.frames[i]); + vp9_frame_unref(avctx, &s->s.frames[i]); for (i = 0; i < 8; i++) - ff_thread_release_buffer(ctx, &s->s.refs[i]); + ff_thread_release_buffer(avctx, &s->s.refs[i]); } -static int init_frames(AVCodecContext *ctx) +static int init_frames(AVCodecContext *avctx) { - VP9Context *s = ctx->priv_data; + VP9Context *s = avctx->priv_data; int i; for (i = 0; i < 3; i++) { s->s.frames[i].tf.f = av_frame_alloc(); if (!s->s.frames[i].tf.f) { - vp9_decode_free(ctx); - av_log(ctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); + vp9_decode_free(avctx); + av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); return AVERROR(ENOMEM); } } @@ -4281,8 +1698,8 @@ static int init_frames(AVCodecContext *ctx) s->s.refs[i].f = av_frame_alloc(); s->next_refs[i].f = av_frame_alloc(); if (!s->s.refs[i].f || !s->next_refs[i].f) { - vp9_decode_free(ctx); - av_log(ctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); + vp9_decode_free(avctx); + av_log(avctx, AV_LOG_ERROR, "Failed to allocate frame buffer %d\n", i); return AVERROR(ENOMEM); } } @@ -4290,15 +1707,15 @@ static int init_frames(AVCodecContext *ctx) return 0; } -static av_cold int vp9_decode_init(AVCodecContext *ctx) +static av_cold int vp9_decode_init(AVCodecContext *avctx) { - VP9Context *s = ctx->priv_data; + VP9Context *s = avctx->priv_data; - ctx->internal->allocate_progress = 1; + avctx->internal->allocate_progress = 1; s->last_bpp = 0; s->s.h.filter.sharpness = -1; - return init_frames(ctx); + return init_frames(avctx); } #if HAVE_THREADS @@ -4309,23 +1726,23 @@ static av_cold int vp9_decode_init_thread_copy(AVCodecContext *avctx) static int vp9_decode_update_thread_context(AVCodecContext *dst, const AVCodecContext *src) { - int i, res; + int i, ret; VP9Context *s = dst->priv_data, *ssrc = src->priv_data; for (i = 0; i < 3; i++) { if (s->s.frames[i].tf.f->buf[0]) - vp9_unref_frame(dst, &s->s.frames[i]); + vp9_frame_unref(dst, &s->s.frames[i]); if (ssrc->s.frames[i].tf.f->buf[0]) { - if ((res = vp9_ref_frame(dst, &s->s.frames[i], &ssrc->s.frames[i])) < 0) - return res; + if ((ret = vp9_frame_ref(dst, &s->s.frames[i], &ssrc->s.frames[i])) < 0) + return ret; } } for (i = 0; i < 8; i++) { if (s->s.refs[i].f->buf[0]) ff_thread_release_buffer(dst, &s->s.refs[i]); if (ssrc->next_refs[i].f->buf[0]) { - if ((res = ff_thread_ref_frame(&s->s.refs[i], &ssrc->next_refs[i])) < 0) - return res; + if ((ret = ff_thread_ref_frame(&s->s.refs[i], &ssrc->next_refs[i])) < 0) + return ret; } } @@ -4341,7 +1758,7 @@ static int vp9_decode_update_thread_context(AVCodecContext *dst, const AVCodecCo s->gf_fmt = ssrc->gf_fmt; s->w = ssrc->w; s->h = ssrc->h; - s->bpp = ssrc->bpp; + s->s.h.bpp = ssrc->s.h.bpp; s->bpp_index = ssrc->bpp_index; s->pix_fmt = ssrc->pix_fmt; memcpy(&s->prob_ctx, &ssrc->prob_ctx, sizeof(s->prob_ctx)); @@ -4362,7 +1779,8 @@ AVCodec ff_vp9_decoder = { .init = vp9_decode_init, .close = vp9_decode_free, .decode = vp9_decode_frame, - .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS, + .capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS, + .caps_internal = FF_CODEC_CAP_SLICE_THREAD_HAS_MF, .flush = vp9_decode_flush, .init_thread_copy = ONLY_IF_THREADS_ENABLED(vp9_decode_init_thread_copy), .update_thread_context = ONLY_IF_THREADS_ENABLED(vp9_decode_update_thread_context), diff --git a/media/ffvpx/libavcodec/vp9.h b/media/ffvpx/libavcodec/vp9.h index df5bd4d85c56..c8d07ad9860b 100644 --- a/media/ffvpx/libavcodec/vp9.h +++ b/media/ffvpx/libavcodec/vp9.h @@ -24,42 +24,6 @@ #ifndef AVCODEC_VP9_H #define AVCODEC_VP9_H -#include - -#include "thread.h" -#include "vp56.h" - -enum BlockLevel { - BL_64X64, - BL_32X32, - BL_16X16, - BL_8X8, -}; - -enum BlockPartition { - PARTITION_NONE, // [ ] <-. - PARTITION_H, // [-] | - PARTITION_V, // [|] | - PARTITION_SPLIT, // [+] --' -}; - -enum BlockSize { - BS_64x64, - BS_64x32, - BS_32x64, - BS_32x32, - BS_32x16, - BS_16x32, - BS_16x16, - BS_16x8, - BS_8x16, - BS_8x8, - BS_8x4, - BS_4x8, - BS_4x4, - N_BS_SIZES, -}; - enum TxfmMode { TX_4X4, TX_8X8, @@ -97,115 +61,13 @@ enum IntraPredMode { N_INTRA_PRED_MODES }; -enum InterPredMode { - NEARESTMV = 10, - NEARMV = 11, - ZEROMV = 12, - NEWMV = 13, -}; - enum FilterMode { FILTER_8TAP_SMOOTH, FILTER_8TAP_REGULAR, FILTER_8TAP_SHARP, FILTER_BILINEAR, - FILTER_SWITCHABLE, + N_FILTERS, + FILTER_SWITCHABLE = N_FILTERS, }; -enum CompPredMode { - PRED_SINGLEREF, - PRED_COMPREF, - PRED_SWITCHABLE, -}; - -struct VP9mvrefPair { - VP56mv mv[2]; - int8_t ref[2]; -}; - -typedef struct VP9Frame { - ThreadFrame tf; - AVBufferRef *extradata; - uint8_t *segmentation_map; - struct VP9mvrefPair *mv; - int uses_2pass; - - AVBufferRef *hwaccel_priv_buf; - void *hwaccel_picture_private; -} VP9Frame; - -typedef struct VP9BitstreamHeader { - // bitstream header - uint8_t profile; - uint8_t keyframe; - uint8_t invisible; - uint8_t errorres; - uint8_t intraonly; - uint8_t resetctx; - uint8_t refreshrefmask; - uint8_t highprecisionmvs; - enum FilterMode filtermode; - uint8_t allowcompinter; - uint8_t refreshctx; - uint8_t parallelmode; - uint8_t framectxid; - uint8_t use_last_frame_mvs; - uint8_t refidx[3]; - uint8_t signbias[3]; - uint8_t fixcompref; - uint8_t varcompref[2]; - struct { - uint8_t level; - int8_t sharpness; - } filter; - struct { - uint8_t enabled; - uint8_t updated; - int8_t mode[2]; - int8_t ref[4]; - } lf_delta; - uint8_t yac_qi; - int8_t ydc_qdelta, uvdc_qdelta, uvac_qdelta; - uint8_t lossless; -#define MAX_SEGMENT 8 - struct { - uint8_t enabled; - uint8_t temporal; - uint8_t absolute_vals; - uint8_t update_map; - uint8_t prob[7]; - uint8_t pred_prob[3]; - struct { - uint8_t q_enabled; - uint8_t lf_enabled; - uint8_t ref_enabled; - uint8_t skip_enabled; - uint8_t ref_val; - int16_t q_val; - int8_t lf_val; - int16_t qmul[2][2]; - uint8_t lflvl[4][2]; - } feat[MAX_SEGMENT]; - } segmentation; - enum TxfmMode txfmmode; - enum CompPredMode comppredmode; - struct { - unsigned log2_tile_cols, log2_tile_rows; - unsigned tile_cols, tile_rows; - } tiling; - - int uncompressed_header_size; - int compressed_header_size; -} VP9BitstreamHeader; - -typedef struct VP9SharedContext { - VP9BitstreamHeader h; - - ThreadFrame refs[8]; -#define CUR_FRAME 0 -#define REF_FRAME_MVPAIR 1 -#define REF_FRAME_SEGMAP 2 - VP9Frame frames[3]; -} VP9SharedContext; - #endif /* AVCODEC_VP9_H */ diff --git a/media/ffvpx/libavcodec/vp9_mc_template.c b/media/ffvpx/libavcodec/vp9_mc_template.c index 38d9a6da9fa4..31e692f36251 100644 --- a/media/ffvpx/libavcodec/vp9_mc_template.c +++ b/media/ffvpx/libavcodec/vp9_mc_template.c @@ -27,19 +27,19 @@ (VP56mv) { .x = ROUNDED_DIV(a.x + b.x + c.x + d.x, 4), \ .y = ROUNDED_DIV(a.y + b.y + c.y + d.y, 4) } -static void FN(inter_pred)(AVCodecContext *ctx) +static void FN(inter_pred)(VP9TileData *td) { static const uint8_t bwlog_tab[2][N_BS_SIZES] = { { 0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4 }, { 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 4 }, }; - VP9Context *s = ctx->priv_data; - VP9Block *b = s->b; - int row = s->row, col = s->col; + VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; ThreadFrame *tref1 = &s->s.refs[s->s.h.refidx[b->ref[0]]], *tref2; AVFrame *ref1 = tref1->f, *ref2; int w1 = ref1->width, h1 = ref1->height, w2, h2; - ptrdiff_t ls_y = s->y_stride, ls_uv = s->uv_stride; + ptrdiff_t ls_y = td->y_stride, ls_uv = td->uv_stride; int bytesperpixel = BYTES_PER_PIXEL; if (b->comp) { @@ -55,26 +55,26 @@ static void FN(inter_pred)(AVCodecContext *ctx) #if SCALED == 0 if (b->bs == BS_8x4) { - mc_luma_dir(s, mc[3][b->filter][0], s->dst[0], ls_y, + mc_luma_dir(td, mc[3][b->filter][0], td->dst[0], ls_y, ref1->data[0], ref1->linesize[0], tref1, row << 3, col << 3, &b->mv[0][0],,,,, 8, 4, w1, h1, 0); - mc_luma_dir(s, mc[3][b->filter][0], - s->dst[0] + 4 * ls_y, ls_y, + mc_luma_dir(td, mc[3][b->filter][0], + td->dst[0] + 4 * ls_y, ls_y, ref1->data[0], ref1->linesize[0], tref1, (row << 3) + 4, col << 3, &b->mv[2][0],,,,, 8, 4, w1, h1, 0); w1 = (w1 + s->ss_h) >> s->ss_h; if (s->ss_v) { h1 = (h1 + 1) >> 1; uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); - mc_chroma_dir(s, mc[3 + s->ss_h][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 2, col << (3 - s->ss_h), &uvmv,,,,, 8 >> s->ss_h, 4, w1, h1, 0); } else { - mc_chroma_dir(s, mc[3 + s->ss_h][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 3, col << (3 - s->ss_h), @@ -87,8 +87,8 @@ static void FN(inter_pred)(AVCodecContext *ctx) } else { uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); } - mc_chroma_dir(s, mc[3 + s->ss_h][b->filter][0], - s->dst[1] + 4 * ls_uv, s->dst[2] + 4 * ls_uv, ls_uv, + mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][0], + td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, (row << 3) + 4, col << (3 - s->ss_h), @@ -96,26 +96,26 @@ static void FN(inter_pred)(AVCodecContext *ctx) } if (b->comp) { - mc_luma_dir(s, mc[3][b->filter][1], s->dst[0], ls_y, + mc_luma_dir(td, mc[3][b->filter][1], td->dst[0], ls_y, ref2->data[0], ref2->linesize[0], tref2, row << 3, col << 3, &b->mv[0][1],,,,, 8, 4, w2, h2, 1); - mc_luma_dir(s, mc[3][b->filter][1], - s->dst[0] + 4 * ls_y, ls_y, + mc_luma_dir(td, mc[3][b->filter][1], + td->dst[0] + 4 * ls_y, ls_y, ref2->data[0], ref2->linesize[0], tref2, (row << 3) + 4, col << 3, &b->mv[2][1],,,,, 8, 4, w2, h2, 1); w2 = (w2 + s->ss_h) >> s->ss_h; if (s->ss_v) { h2 = (h2 + 1) >> 1; uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); - mc_chroma_dir(s, mc[3 + s->ss_h][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 2, col << (3 - s->ss_h), &uvmv,,,,, 8 >> s->ss_h, 4, w2, h2, 1); } else { - mc_chroma_dir(s, mc[3 + s->ss_h][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 3, col << (3 - s->ss_h), @@ -128,8 +128,8 @@ static void FN(inter_pred)(AVCodecContext *ctx) } else { uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); } - mc_chroma_dir(s, mc[3 + s->ss_h][b->filter][1], - s->dst[1] + 4 * ls_uv, s->dst[2] + 4 * ls_uv, ls_uv, + mc_chroma_dir(td, mc[3 + s->ss_h][b->filter][1], + td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, (row << 3) + 4, col << (3 - s->ss_h), @@ -137,32 +137,32 @@ static void FN(inter_pred)(AVCodecContext *ctx) } } } else if (b->bs == BS_4x8) { - mc_luma_dir(s, mc[4][b->filter][0], s->dst[0], ls_y, + mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, ref1->data[0], ref1->linesize[0], tref1, row << 3, col << 3, &b->mv[0][0],,,,, 4, 8, w1, h1, 0); - mc_luma_dir(s, mc[4][b->filter][0], s->dst[0] + 4 * bytesperpixel, ls_y, + mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, ref1->data[0], ref1->linesize[0], tref1, row << 3, (col << 3) + 4, &b->mv[1][0],,,,, 4, 8, w1, h1, 0); h1 = (h1 + s->ss_v) >> s->ss_v; if (s->ss_h) { w1 = (w1 + 1) >> 1; uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << (3 - s->ss_v), col << 2, &uvmv,,,,, 4, 8 >> s->ss_v, w1, h1, 0); } else { - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << (3 - s->ss_v), col << 3, &b->mv[0][0],,,,, 4, 8 >> s->ss_v, w1, h1, 0); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1] + 4 * bytesperpixel, - s->dst[2] + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1] + 4 * bytesperpixel, + td->dst[2] + 4 * bytesperpixel, ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << (3 - s->ss_v), (col << 3) + 4, @@ -170,32 +170,32 @@ static void FN(inter_pred)(AVCodecContext *ctx) } if (b->comp) { - mc_luma_dir(s, mc[4][b->filter][1], s->dst[0], ls_y, + mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, ref2->data[0], ref2->linesize[0], tref2, row << 3, col << 3, &b->mv[0][1],,,,, 4, 8, w2, h2, 1); - mc_luma_dir(s, mc[4][b->filter][1], s->dst[0] + 4 * bytesperpixel, ls_y, + mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, ref2->data[0], ref2->linesize[0], tref2, row << 3, (col << 3) + 4, &b->mv[1][1],,,,, 4, 8, w2, h2, 1); h2 = (h2 + s->ss_v) >> s->ss_v; if (s->ss_h) { w2 = (w2 + 1) >> 1; uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << (3 - s->ss_v), col << 2, &uvmv,,,,, 4, 8 >> s->ss_v, w2, h2, 1); } else { - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << (3 - s->ss_v), col << 3, &b->mv[0][1],,,,, 4, 8 >> s->ss_v, w2, h2, 1); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1] + 4 * bytesperpixel, - s->dst[2] + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1] + 4 * bytesperpixel, + td->dst[2] + 4 * bytesperpixel, ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << (3 - s->ss_v), (col << 3) + 4, @@ -205,25 +205,27 @@ static void FN(inter_pred)(AVCodecContext *ctx) } else #endif { +#if SCALED == 0 av_assert2(b->bs == BS_4x4); +#endif // FIXME if two horizontally adjacent blocks have the same MV, // do a w8 instead of a w4 call - mc_luma_dir(s, mc[4][b->filter][0], s->dst[0], ls_y, + mc_luma_dir(td, mc[4][b->filter][0], td->dst[0], ls_y, ref1->data[0], ref1->linesize[0], tref1, row << 3, col << 3, &b->mv[0][0], 0, 0, 8, 8, 4, 4, w1, h1, 0); - mc_luma_dir(s, mc[4][b->filter][0], s->dst[0] + 4 * bytesperpixel, ls_y, + mc_luma_dir(td, mc[4][b->filter][0], td->dst[0] + 4 * bytesperpixel, ls_y, ref1->data[0], ref1->linesize[0], tref1, row << 3, (col << 3) + 4, &b->mv[1][0], 4, 0, 8, 8, 4, 4, w1, h1, 0); - mc_luma_dir(s, mc[4][b->filter][0], - s->dst[0] + 4 * ls_y, ls_y, + mc_luma_dir(td, mc[4][b->filter][0], + td->dst[0] + 4 * ls_y, ls_y, ref1->data[0], ref1->linesize[0], tref1, (row << 3) + 4, col << 3, &b->mv[2][0], 0, 4, 8, 8, 4, 4, w1, h1, 0); - mc_luma_dir(s, mc[4][b->filter][0], - s->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, + mc_luma_dir(td, mc[4][b->filter][0], + td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, ref1->data[0], ref1->linesize[0], tref1, (row << 3) + 4, (col << 3) + 4, &b->mv[3][0], 4, 4, 8, 8, 4, 4, w1, h1, 0); @@ -233,24 +235,24 @@ static void FN(inter_pred)(AVCodecContext *ctx) w1 = (w1 + 1) >> 1; uvmv = ROUNDED_DIV_MVx4(b->mv[0][0], b->mv[1][0], b->mv[2][0], b->mv[3][0]); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 2, col << 2, &uvmv, 0, 0, 4, 4, 4, 4, w1, h1, 0); } else { uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[2][0]); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 2, col << 3, &uvmv, 0, 0, 8, 4, 4, 4, w1, h1, 0); uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[3][0]); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1] + 4 * bytesperpixel, - s->dst[2] + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1] + 4 * bytesperpixel, + td->dst[2] + 4 * bytesperpixel, ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 2, (col << 3) + 4, @@ -260,8 +262,8 @@ static void FN(inter_pred)(AVCodecContext *ctx) if (s->ss_h) { w1 = (w1 + 1) >> 1; uvmv = ROUNDED_DIV_MVx2(b->mv[0][0], b->mv[1][0]); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 3, col << 2, @@ -270,35 +272,35 @@ static void FN(inter_pred)(AVCodecContext *ctx) // bottom block // https://code.google.com/p/webm/issues/detail?id=993 uvmv = ROUNDED_DIV_MVx2(b->mv[1][0], b->mv[2][0]); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1] + 4 * ls_uv, s->dst[2] + 4 * ls_uv, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, (row << 3) + 4, col << 2, &uvmv, 0, 4, 4, 8, 4, 4, w1, h1, 0); } else { - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 3, col << 3, &b->mv[0][0], 0, 0, 8, 8, 4, 4, w1, h1, 0); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1] + 4 * bytesperpixel, - s->dst[2] + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1] + 4 * bytesperpixel, + td->dst[2] + 4 * bytesperpixel, ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << 3, (col << 3) + 4, &b->mv[1][0], 4, 0, 8, 8, 4, 4, w1, h1, 0); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1] + 4 * ls_uv, s->dst[2] + 4 * ls_uv, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, (row << 3) + 4, col << 3, &b->mv[2][0], 0, 4, 8, 8, 4, 4, w1, h1, 0); - mc_chroma_dir(s, mc[4][b->filter][0], - s->dst[1] + 4 * ls_uv + 4 * bytesperpixel, - s->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][0], + td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, + td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, (row << 3) + 4, (col << 3) + 4, @@ -307,18 +309,18 @@ static void FN(inter_pred)(AVCodecContext *ctx) } if (b->comp) { - mc_luma_dir(s, mc[4][b->filter][1], s->dst[0], ls_y, + mc_luma_dir(td, mc[4][b->filter][1], td->dst[0], ls_y, ref2->data[0], ref2->linesize[0], tref2, row << 3, col << 3, &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); - mc_luma_dir(s, mc[4][b->filter][1], s->dst[0] + 4 * bytesperpixel, ls_y, + mc_luma_dir(td, mc[4][b->filter][1], td->dst[0] + 4 * bytesperpixel, ls_y, ref2->data[0], ref2->linesize[0], tref2, row << 3, (col << 3) + 4, &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); - mc_luma_dir(s, mc[4][b->filter][1], - s->dst[0] + 4 * ls_y, ls_y, + mc_luma_dir(td, mc[4][b->filter][1], + td->dst[0] + 4 * ls_y, ls_y, ref2->data[0], ref2->linesize[0], tref2, (row << 3) + 4, col << 3, &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); - mc_luma_dir(s, mc[4][b->filter][1], - s->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, + mc_luma_dir(td, mc[4][b->filter][1], + td->dst[0] + 4 * ls_y + 4 * bytesperpixel, ls_y, ref2->data[0], ref2->linesize[0], tref2, (row << 3) + 4, (col << 3) + 4, &b->mv[3][1], 4, 4, 8, 8, 4, 4, w2, h2, 1); if (s->ss_v) { @@ -327,24 +329,24 @@ static void FN(inter_pred)(AVCodecContext *ctx) w2 = (w2 + 1) >> 1; uvmv = ROUNDED_DIV_MVx4(b->mv[0][1], b->mv[1][1], b->mv[2][1], b->mv[3][1]); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 2, col << 2, &uvmv, 0, 0, 4, 4, 4, 4, w2, h2, 1); } else { uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[2][1]); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 2, col << 3, &uvmv, 0, 0, 8, 4, 4, 4, w2, h2, 1); uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[3][1]); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1] + 4 * bytesperpixel, - s->dst[2] + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1] + 4 * bytesperpixel, + td->dst[2] + 4 * bytesperpixel, ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 2, (col << 3) + 4, @@ -354,8 +356,8 @@ static void FN(inter_pred)(AVCodecContext *ctx) if (s->ss_h) { w2 = (w2 + 1) >> 1; uvmv = ROUNDED_DIV_MVx2(b->mv[0][1], b->mv[1][1]); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 3, col << 2, @@ -364,35 +366,35 @@ static void FN(inter_pred)(AVCodecContext *ctx) // bottom block // https://code.google.com/p/webm/issues/detail?id=993 uvmv = ROUNDED_DIV_MVx2(b->mv[1][1], b->mv[2][1]); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1] + 4 * ls_uv, s->dst[2] + 4 * ls_uv, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, (row << 3) + 4, col << 2, &uvmv, 0, 4, 4, 8, 4, 4, w2, h2, 1); } else { - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 3, col << 3, &b->mv[0][1], 0, 0, 8, 8, 4, 4, w2, h2, 1); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1] + 4 * bytesperpixel, - s->dst[2] + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1] + 4 * bytesperpixel, + td->dst[2] + 4 * bytesperpixel, ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << 3, (col << 3) + 4, &b->mv[1][1], 4, 0, 8, 8, 4, 4, w2, h2, 1); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1] + 4 * ls_uv, s->dst[2] + 4 * ls_uv, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1] + 4 * ls_uv, td->dst[2] + 4 * ls_uv, ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, (row << 3) + 4, col << 3, &b->mv[2][1], 0, 4, 8, 8, 4, 4, w2, h2, 1); - mc_chroma_dir(s, mc[4][b->filter][1], - s->dst[1] + 4 * ls_uv + 4 * bytesperpixel, - s->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, + mc_chroma_dir(td, mc[4][b->filter][1], + td->dst[1] + 4 * ls_uv + 4 * bytesperpixel, + td->dst[2] + 4 * ls_uv + 4 * bytesperpixel, ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, (row << 3) + 4, (col << 3) + 4, @@ -403,29 +405,31 @@ static void FN(inter_pred)(AVCodecContext *ctx) } } else { int bwl = bwlog_tab[0][b->bs]; - int bw = bwh_tab[0][b->bs][0] * 4, bh = bwh_tab[0][b->bs][1] * 4; - int uvbw = bwh_tab[s->ss_h][b->bs][0] * 4, uvbh = bwh_tab[s->ss_v][b->bs][1] * 4; + int bw = ff_vp9_bwh_tab[0][b->bs][0] * 4; + int bh = ff_vp9_bwh_tab[0][b->bs][1] * 4; + int uvbw = ff_vp9_bwh_tab[s->ss_h][b->bs][0] * 4; + int uvbh = ff_vp9_bwh_tab[s->ss_v][b->bs][1] * 4; - mc_luma_dir(s, mc[bwl][b->filter][0], s->dst[0], ls_y, + mc_luma_dir(td, mc[bwl][b->filter][0], td->dst[0], ls_y, ref1->data[0], ref1->linesize[0], tref1, row << 3, col << 3, &b->mv[0][0], 0, 0, bw, bh, bw, bh, w1, h1, 0); w1 = (w1 + s->ss_h) >> s->ss_h; h1 = (h1 + s->ss_v) >> s->ss_v; - mc_chroma_dir(s, mc[bwl + s->ss_h][b->filter][0], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][0], + td->dst[1], td->dst[2], ls_uv, ref1->data[1], ref1->linesize[1], ref1->data[2], ref1->linesize[2], tref1, row << (3 - s->ss_v), col << (3 - s->ss_h), &b->mv[0][0], 0, 0, uvbw, uvbh, uvbw, uvbh, w1, h1, 0); if (b->comp) { - mc_luma_dir(s, mc[bwl][b->filter][1], s->dst[0], ls_y, + mc_luma_dir(td, mc[bwl][b->filter][1], td->dst[0], ls_y, ref2->data[0], ref2->linesize[0], tref2, row << 3, col << 3, &b->mv[0][1], 0, 0, bw, bh, bw, bh, w2, h2, 1); w2 = (w2 + s->ss_h) >> s->ss_h; h2 = (h2 + s->ss_v) >> s->ss_v; - mc_chroma_dir(s, mc[bwl + s->ss_h][b->filter][1], - s->dst[1], s->dst[2], ls_uv, + mc_chroma_dir(td, mc[bwl + s->ss_h][b->filter][1], + td->dst[1], td->dst[2], ls_uv, ref2->data[1], ref2->linesize[1], ref2->data[2], ref2->linesize[2], tref2, row << (3 - s->ss_v), col << (3 - s->ss_h), diff --git a/media/ffvpx/libavcodec/vp9block.c b/media/ffvpx/libavcodec/vp9block.c new file mode 100644 index 000000000000..1c3f7a722536 --- /dev/null +++ b/media/ffvpx/libavcodec/vp9block.c @@ -0,0 +1,1449 @@ +/* + * VP9 compatible video decoder + * + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/avassert.h" + +#include "avcodec.h" +#include "internal.h" +#include "videodsp.h" +#include "vp56.h" +#include "vp9.h" +#include "vp9data.h" +#include "vp9dec.h" + +static av_always_inline void setctx_2d(uint8_t *ptr, int w, int h, + ptrdiff_t stride, int v) +{ + switch (w) { + case 1: + do { + *ptr = v; + ptr += stride; + } while (--h); + break; + case 2: { + int v16 = v * 0x0101; + do { + AV_WN16A(ptr, v16); + ptr += stride; + } while (--h); + break; + } + case 4: { + uint32_t v32 = v * 0x01010101; + do { + AV_WN32A(ptr, v32); + ptr += stride; + } while (--h); + break; + } + case 8: { +#if HAVE_FAST_64BIT + uint64_t v64 = v * 0x0101010101010101ULL; + do { + AV_WN64A(ptr, v64); + ptr += stride; + } while (--h); +#else + uint32_t v32 = v * 0x01010101; + do { + AV_WN32A(ptr, v32); + AV_WN32A(ptr + 4, v32); + ptr += stride; + } while (--h); +#endif + break; + } + } +} + +static void decode_mode(VP9TileData *td) +{ + static const uint8_t left_ctx[N_BS_SIZES] = { + 0x0, 0x8, 0x0, 0x8, 0xc, 0x8, 0xc, 0xe, 0xc, 0xe, 0xf, 0xe, 0xf + }; + static const uint8_t above_ctx[N_BS_SIZES] = { + 0x0, 0x0, 0x8, 0x8, 0x8, 0xc, 0xc, 0xc, 0xe, 0xe, 0xe, 0xf, 0xf + }; + static const uint8_t max_tx_for_bl_bp[N_BS_SIZES] = { + TX_32X32, TX_32X32, TX_32X32, TX_32X32, TX_16X16, TX_16X16, + TX_16X16, TX_8X8, TX_8X8, TX_8X8, TX_4X4, TX_4X4, TX_4X4 + }; + VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col, row7 = td->row7; + enum TxfmMode max_tx = max_tx_for_bl_bp[b->bs]; + int bw4 = ff_vp9_bwh_tab[1][b->bs][0], w4 = FFMIN(s->cols - col, bw4); + int bh4 = ff_vp9_bwh_tab[1][b->bs][1], h4 = FFMIN(s->rows - row, bh4), y; + int have_a = row > 0, have_l = col > td->tile_col_start; + int vref, filter_id; + + if (!s->s.h.segmentation.enabled) { + b->seg_id = 0; + } else if (s->s.h.keyframe || s->s.h.intraonly) { + b->seg_id = !s->s.h.segmentation.update_map ? 0 : + vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree, s->s.h.segmentation.prob); + } else if (!s->s.h.segmentation.update_map || + (s->s.h.segmentation.temporal && + vp56_rac_get_prob_branchy(td->c, + s->s.h.segmentation.pred_prob[s->above_segpred_ctx[col] + + td->left_segpred_ctx[row7]]))) { + if (!s->s.h.errorres && s->s.frames[REF_FRAME_SEGMAP].segmentation_map) { + int pred = 8, x; + uint8_t *refsegmap = s->s.frames[REF_FRAME_SEGMAP].segmentation_map; + + if (!s->s.frames[REF_FRAME_SEGMAP].uses_2pass) + ff_thread_await_progress(&s->s.frames[REF_FRAME_SEGMAP].tf, row >> 3, 0); + for (y = 0; y < h4; y++) { + int idx_base = (y + row) * 8 * s->sb_cols + col; + for (x = 0; x < w4; x++) + pred = FFMIN(pred, refsegmap[idx_base + x]); + } + av_assert1(pred < 8); + b->seg_id = pred; + } else { + b->seg_id = 0; + } + + memset(&s->above_segpred_ctx[col], 1, w4); + memset(&td->left_segpred_ctx[row7], 1, h4); + } else { + b->seg_id = vp8_rac_get_tree(td->c, ff_vp9_segmentation_tree, + s->s.h.segmentation.prob); + + memset(&s->above_segpred_ctx[col], 0, w4); + memset(&td->left_segpred_ctx[row7], 0, h4); + } + if (s->s.h.segmentation.enabled && + (s->s.h.segmentation.update_map || s->s.h.keyframe || s->s.h.intraonly)) { + setctx_2d(&s->s.frames[CUR_FRAME].segmentation_map[row * 8 * s->sb_cols + col], + bw4, bh4, 8 * s->sb_cols, b->seg_id); + } + + b->skip = s->s.h.segmentation.enabled && + s->s.h.segmentation.feat[b->seg_id].skip_enabled; + if (!b->skip) { + int c = td->left_skip_ctx[row7] + s->above_skip_ctx[col]; + b->skip = vp56_rac_get_prob(td->c, s->prob.p.skip[c]); + td->counts.skip[c][b->skip]++; + } + + if (s->s.h.keyframe || s->s.h.intraonly) { + b->intra = 1; + } else if (s->s.h.segmentation.enabled && s->s.h.segmentation.feat[b->seg_id].ref_enabled) { + b->intra = !s->s.h.segmentation.feat[b->seg_id].ref_val; + } else { + int c, bit; + + if (have_a && have_l) { + c = s->above_intra_ctx[col] + td->left_intra_ctx[row7]; + c += (c == 2); + } else { + c = have_a ? 2 * s->above_intra_ctx[col] : + have_l ? 2 * td->left_intra_ctx[row7] : 0; + } + bit = vp56_rac_get_prob(td->c, s->prob.p.intra[c]); + td->counts.intra[c][bit]++; + b->intra = !bit; + } + + if ((b->intra || !b->skip) && s->s.h.txfmmode == TX_SWITCHABLE) { + int c; + if (have_a) { + if (have_l) { + c = (s->above_skip_ctx[col] ? max_tx : + s->above_txfm_ctx[col]) + + (td->left_skip_ctx[row7] ? max_tx : + td->left_txfm_ctx[row7]) > max_tx; + } else { + c = s->above_skip_ctx[col] ? 1 : + (s->above_txfm_ctx[col] * 2 > max_tx); + } + } else if (have_l) { + c = td->left_skip_ctx[row7] ? 1 : + (td->left_txfm_ctx[row7] * 2 > max_tx); + } else { + c = 1; + } + switch (max_tx) { + case TX_32X32: + b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][0]); + if (b->tx) { + b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][1]); + if (b->tx == 2) + b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx32p[c][2]); + } + td->counts.tx32p[c][b->tx]++; + break; + case TX_16X16: + b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][0]); + if (b->tx) + b->tx += vp56_rac_get_prob(td->c, s->prob.p.tx16p[c][1]); + td->counts.tx16p[c][b->tx]++; + break; + case TX_8X8: + b->tx = vp56_rac_get_prob(td->c, s->prob.p.tx8p[c]); + td->counts.tx8p[c][b->tx]++; + break; + case TX_4X4: + b->tx = TX_4X4; + break; + } + } else { + b->tx = FFMIN(max_tx, s->s.h.txfmmode); + } + + if (s->s.h.keyframe || s->s.h.intraonly) { + uint8_t *a = &s->above_mode_ctx[col * 2]; + uint8_t *l = &td->left_mode_ctx[(row7) << 1]; + + b->comp = 0; + if (b->bs > BS_8x8) { + // FIXME the memory storage intermediates here aren't really + // necessary, they're just there to make the code slightly + // simpler for now + b->mode[0] = + a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + ff_vp9_default_kf_ymode_probs[a[0]][l[0]]); + if (b->bs != BS_8x4) { + b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + ff_vp9_default_kf_ymode_probs[a[1]][b->mode[0]]); + l[0] = + a[1] = b->mode[1]; + } else { + l[0] = + a[1] = + b->mode[1] = b->mode[0]; + } + if (b->bs != BS_4x8) { + b->mode[2] = + a[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + ff_vp9_default_kf_ymode_probs[a[0]][l[1]]); + if (b->bs != BS_8x4) { + b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + ff_vp9_default_kf_ymode_probs[a[1]][b->mode[2]]); + l[1] = + a[1] = b->mode[3]; + } else { + l[1] = + a[1] = + b->mode[3] = b->mode[2]; + } + } else { + b->mode[2] = b->mode[0]; + l[1] = + a[1] = + b->mode[3] = b->mode[1]; + } + } else { + b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + ff_vp9_default_kf_ymode_probs[*a][*l]); + b->mode[3] = + b->mode[2] = + b->mode[1] = b->mode[0]; + // FIXME this can probably be optimized + memset(a, b->mode[0], ff_vp9_bwh_tab[0][b->bs][0]); + memset(l, b->mode[0], ff_vp9_bwh_tab[0][b->bs][1]); + } + b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + ff_vp9_default_kf_uvmode_probs[b->mode[3]]); + } else if (b->intra) { + b->comp = 0; + if (b->bs > BS_8x8) { + b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[0]]++; + if (b->bs != BS_8x4) { + b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[1]]++; + } else { + b->mode[1] = b->mode[0]; + } + if (b->bs != BS_4x8) { + b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[2]]++; + if (b->bs != BS_8x4) { + b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + s->prob.p.y_mode[0]); + td->counts.y_mode[0][b->mode[3]]++; + } else { + b->mode[3] = b->mode[2]; + } + } else { + b->mode[2] = b->mode[0]; + b->mode[3] = b->mode[1]; + } + } else { + static const uint8_t size_group[10] = { + 3, 3, 3, 3, 2, 2, 2, 1, 1, 1 + }; + int sz = size_group[b->bs]; + + b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + s->prob.p.y_mode[sz]); + b->mode[1] = + b->mode[2] = + b->mode[3] = b->mode[0]; + td->counts.y_mode[sz][b->mode[3]]++; + } + b->uvmode = vp8_rac_get_tree(td->c, ff_vp9_intramode_tree, + s->prob.p.uv_mode[b->mode[3]]); + td->counts.uv_mode[b->mode[3]][b->uvmode]++; + } else { + static const uint8_t inter_mode_ctx_lut[14][14] = { + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5 }, + { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 1, 3 }, + { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 2, 2, 1, 3 }, + { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 1, 1, 0, 3 }, + { 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 3, 3, 3, 4 }, + }; + + if (s->s.h.segmentation.enabled && s->s.h.segmentation.feat[b->seg_id].ref_enabled) { + av_assert2(s->s.h.segmentation.feat[b->seg_id].ref_val != 0); + b->comp = 0; + b->ref[0] = s->s.h.segmentation.feat[b->seg_id].ref_val - 1; + } else { + // read comp_pred flag + if (s->s.h.comppredmode != PRED_SWITCHABLE) { + b->comp = s->s.h.comppredmode == PRED_COMPREF; + } else { + int c; + + // FIXME add intra as ref=0xff (or -1) to make these easier? + if (have_a) { + if (have_l) { + if (s->above_comp_ctx[col] && td->left_comp_ctx[row7]) { + c = 4; + } else if (s->above_comp_ctx[col]) { + c = 2 + (td->left_intra_ctx[row7] || + td->left_ref_ctx[row7] == s->s.h.fixcompref); + } else if (td->left_comp_ctx[row7]) { + c = 2 + (s->above_intra_ctx[col] || + s->above_ref_ctx[col] == s->s.h.fixcompref); + } else { + c = (!s->above_intra_ctx[col] && + s->above_ref_ctx[col] == s->s.h.fixcompref) ^ + (!td->left_intra_ctx[row7] && + td->left_ref_ctx[row & 7] == s->s.h.fixcompref); + } + } else { + c = s->above_comp_ctx[col] ? 3 : + (!s->above_intra_ctx[col] && s->above_ref_ctx[col] == s->s.h.fixcompref); + } + } else if (have_l) { + c = td->left_comp_ctx[row7] ? 3 : + (!td->left_intra_ctx[row7] && td->left_ref_ctx[row7] == s->s.h.fixcompref); + } else { + c = 1; + } + b->comp = vp56_rac_get_prob(td->c, s->prob.p.comp[c]); + td->counts.comp[c][b->comp]++; + } + + // read actual references + // FIXME probably cache a few variables here to prevent repetitive + // memory accesses below + if (b->comp) { /* two references */ + int fix_idx = s->s.h.signbias[s->s.h.fixcompref], var_idx = !fix_idx, c, bit; + + b->ref[fix_idx] = s->s.h.fixcompref; + // FIXME can this codeblob be replaced by some sort of LUT? + if (have_a) { + if (have_l) { + if (s->above_intra_ctx[col]) { + if (td->left_intra_ctx[row7]) { + c = 2; + } else { + c = 1 + 2 * (td->left_ref_ctx[row7] != s->s.h.varcompref[1]); + } + } else if (td->left_intra_ctx[row7]) { + c = 1 + 2 * (s->above_ref_ctx[col] != s->s.h.varcompref[1]); + } else { + int refl = td->left_ref_ctx[row7], refa = s->above_ref_ctx[col]; + + if (refl == refa && refa == s->s.h.varcompref[1]) { + c = 0; + } else if (!td->left_comp_ctx[row7] && !s->above_comp_ctx[col]) { + if ((refa == s->s.h.fixcompref && refl == s->s.h.varcompref[0]) || + (refl == s->s.h.fixcompref && refa == s->s.h.varcompref[0])) { + c = 4; + } else { + c = (refa == refl) ? 3 : 1; + } + } else if (!td->left_comp_ctx[row7]) { + if (refa == s->s.h.varcompref[1] && refl != s->s.h.varcompref[1]) { + c = 1; + } else { + c = (refl == s->s.h.varcompref[1] && + refa != s->s.h.varcompref[1]) ? 2 : 4; + } + } else if (!s->above_comp_ctx[col]) { + if (refl == s->s.h.varcompref[1] && refa != s->s.h.varcompref[1]) { + c = 1; + } else { + c = (refa == s->s.h.varcompref[1] && + refl != s->s.h.varcompref[1]) ? 2 : 4; + } + } else { + c = (refl == refa) ? 4 : 2; + } + } + } else { + if (s->above_intra_ctx[col]) { + c = 2; + } else if (s->above_comp_ctx[col]) { + c = 4 * (s->above_ref_ctx[col] != s->s.h.varcompref[1]); + } else { + c = 3 * (s->above_ref_ctx[col] != s->s.h.varcompref[1]); + } + } + } else if (have_l) { + if (td->left_intra_ctx[row7]) { + c = 2; + } else if (td->left_comp_ctx[row7]) { + c = 4 * (td->left_ref_ctx[row7] != s->s.h.varcompref[1]); + } else { + c = 3 * (td->left_ref_ctx[row7] != s->s.h.varcompref[1]); + } + } else { + c = 2; + } + bit = vp56_rac_get_prob(td->c, s->prob.p.comp_ref[c]); + b->ref[var_idx] = s->s.h.varcompref[bit]; + td->counts.comp_ref[c][bit]++; + } else /* single reference */ { + int bit, c; + + if (have_a && !s->above_intra_ctx[col]) { + if (have_l && !td->left_intra_ctx[row7]) { + if (td->left_comp_ctx[row7]) { + if (s->above_comp_ctx[col]) { + c = 1 + (!s->s.h.fixcompref || !td->left_ref_ctx[row7] || + !s->above_ref_ctx[col]); + } else { + c = (3 * !s->above_ref_ctx[col]) + + (!s->s.h.fixcompref || !td->left_ref_ctx[row7]); + } + } else if (s->above_comp_ctx[col]) { + c = (3 * !td->left_ref_ctx[row7]) + + (!s->s.h.fixcompref || !s->above_ref_ctx[col]); + } else { + c = 2 * !td->left_ref_ctx[row7] + 2 * !s->above_ref_ctx[col]; + } + } else if (s->above_intra_ctx[col]) { + c = 2; + } else if (s->above_comp_ctx[col]) { + c = 1 + (!s->s.h.fixcompref || !s->above_ref_ctx[col]); + } else { + c = 4 * (!s->above_ref_ctx[col]); + } + } else if (have_l && !td->left_intra_ctx[row7]) { + if (td->left_intra_ctx[row7]) { + c = 2; + } else if (td->left_comp_ctx[row7]) { + c = 1 + (!s->s.h.fixcompref || !td->left_ref_ctx[row7]); + } else { + c = 4 * (!td->left_ref_ctx[row7]); + } + } else { + c = 2; + } + bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][0]); + td->counts.single_ref[c][0][bit]++; + if (!bit) { + b->ref[0] = 0; + } else { + // FIXME can this codeblob be replaced by some sort of LUT? + if (have_a) { + if (have_l) { + if (td->left_intra_ctx[row7]) { + if (s->above_intra_ctx[col]) { + c = 2; + } else if (s->above_comp_ctx[col]) { + c = 1 + 2 * (s->s.h.fixcompref == 1 || + s->above_ref_ctx[col] == 1); + } else if (!s->above_ref_ctx[col]) { + c = 3; + } else { + c = 4 * (s->above_ref_ctx[col] == 1); + } + } else if (s->above_intra_ctx[col]) { + if (td->left_intra_ctx[row7]) { + c = 2; + } else if (td->left_comp_ctx[row7]) { + c = 1 + 2 * (s->s.h.fixcompref == 1 || + td->left_ref_ctx[row7] == 1); + } else if (!td->left_ref_ctx[row7]) { + c = 3; + } else { + c = 4 * (td->left_ref_ctx[row7] == 1); + } + } else if (s->above_comp_ctx[col]) { + if (td->left_comp_ctx[row7]) { + if (td->left_ref_ctx[row7] == s->above_ref_ctx[col]) { + c = 3 * (s->s.h.fixcompref == 1 || + td->left_ref_ctx[row7] == 1); + } else { + c = 2; + } + } else if (!td->left_ref_ctx[row7]) { + c = 1 + 2 * (s->s.h.fixcompref == 1 || + s->above_ref_ctx[col] == 1); + } else { + c = 3 * (td->left_ref_ctx[row7] == 1) + + (s->s.h.fixcompref == 1 || s->above_ref_ctx[col] == 1); + } + } else if (td->left_comp_ctx[row7]) { + if (!s->above_ref_ctx[col]) { + c = 1 + 2 * (s->s.h.fixcompref == 1 || + td->left_ref_ctx[row7] == 1); + } else { + c = 3 * (s->above_ref_ctx[col] == 1) + + (s->s.h.fixcompref == 1 || td->left_ref_ctx[row7] == 1); + } + } else if (!s->above_ref_ctx[col]) { + if (!td->left_ref_ctx[row7]) { + c = 3; + } else { + c = 4 * (td->left_ref_ctx[row7] == 1); + } + } else if (!td->left_ref_ctx[row7]) { + c = 4 * (s->above_ref_ctx[col] == 1); + } else { + c = 2 * (td->left_ref_ctx[row7] == 1) + + 2 * (s->above_ref_ctx[col] == 1); + } + } else { + if (s->above_intra_ctx[col] || + (!s->above_comp_ctx[col] && !s->above_ref_ctx[col])) { + c = 2; + } else if (s->above_comp_ctx[col]) { + c = 3 * (s->s.h.fixcompref == 1 || s->above_ref_ctx[col] == 1); + } else { + c = 4 * (s->above_ref_ctx[col] == 1); + } + } + } else if (have_l) { + if (td->left_intra_ctx[row7] || + (!td->left_comp_ctx[row7] && !td->left_ref_ctx[row7])) { + c = 2; + } else if (td->left_comp_ctx[row7]) { + c = 3 * (s->s.h.fixcompref == 1 || td->left_ref_ctx[row7] == 1); + } else { + c = 4 * (td->left_ref_ctx[row7] == 1); + } + } else { + c = 2; + } + bit = vp56_rac_get_prob(td->c, s->prob.p.single_ref[c][1]); + td->counts.single_ref[c][1][bit]++; + b->ref[0] = 1 + bit; + } + } + } + + if (b->bs <= BS_8x8) { + if (s->s.h.segmentation.enabled && s->s.h.segmentation.feat[b->seg_id].skip_enabled) { + b->mode[0] = + b->mode[1] = + b->mode[2] = + b->mode[3] = ZEROMV; + } else { + static const uint8_t off[10] = { + 3, 0, 0, 1, 0, 0, 0, 0, 0, 0 + }; + + // FIXME this needs to use the LUT tables from find_ref_mvs + // because not all are -1,0/0,-1 + int c = inter_mode_ctx_lut[s->above_mode_ctx[col + off[b->bs]]] + [td->left_mode_ctx[row7 + off[b->bs]]]; + + b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, + s->prob.p.mv_mode[c]); + b->mode[1] = + b->mode[2] = + b->mode[3] = b->mode[0]; + td->counts.mv_mode[c][b->mode[0] - 10]++; + } + } + + if (s->s.h.filtermode == FILTER_SWITCHABLE) { + int c; + + if (have_a && s->above_mode_ctx[col] >= NEARESTMV) { + if (have_l && td->left_mode_ctx[row7] >= NEARESTMV) { + c = s->above_filter_ctx[col] == td->left_filter_ctx[row7] ? + td->left_filter_ctx[row7] : 3; + } else { + c = s->above_filter_ctx[col]; + } + } else if (have_l && td->left_mode_ctx[row7] >= NEARESTMV) { + c = td->left_filter_ctx[row7]; + } else { + c = 3; + } + + filter_id = vp8_rac_get_tree(td->c, ff_vp9_filter_tree, + s->prob.p.filter[c]); + td->counts.filter[c][filter_id]++; + b->filter = ff_vp9_filter_lut[filter_id]; + } else { + b->filter = s->s.h.filtermode; + } + + if (b->bs > BS_8x8) { + int c = inter_mode_ctx_lut[s->above_mode_ctx[col]][td->left_mode_ctx[row7]]; + + b->mode[0] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, + s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[0] - 10]++; + ff_vp9_fill_mv(td, b->mv[0], b->mode[0], 0); + + if (b->bs != BS_8x4) { + b->mode[1] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, + s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[1] - 10]++; + ff_vp9_fill_mv(td, b->mv[1], b->mode[1], 1); + } else { + b->mode[1] = b->mode[0]; + AV_COPY32(&b->mv[1][0], &b->mv[0][0]); + AV_COPY32(&b->mv[1][1], &b->mv[0][1]); + } + + if (b->bs != BS_4x8) { + b->mode[2] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, + s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[2] - 10]++; + ff_vp9_fill_mv(td, b->mv[2], b->mode[2], 2); + + if (b->bs != BS_8x4) { + b->mode[3] = vp8_rac_get_tree(td->c, ff_vp9_inter_mode_tree, + s->prob.p.mv_mode[c]); + td->counts.mv_mode[c][b->mode[3] - 10]++; + ff_vp9_fill_mv(td, b->mv[3], b->mode[3], 3); + } else { + b->mode[3] = b->mode[2]; + AV_COPY32(&b->mv[3][0], &b->mv[2][0]); + AV_COPY32(&b->mv[3][1], &b->mv[2][1]); + } + } else { + b->mode[2] = b->mode[0]; + AV_COPY32(&b->mv[2][0], &b->mv[0][0]); + AV_COPY32(&b->mv[2][1], &b->mv[0][1]); + b->mode[3] = b->mode[1]; + AV_COPY32(&b->mv[3][0], &b->mv[1][0]); + AV_COPY32(&b->mv[3][1], &b->mv[1][1]); + } + } else { + ff_vp9_fill_mv(td, b->mv[0], b->mode[0], -1); + AV_COPY32(&b->mv[1][0], &b->mv[0][0]); + AV_COPY32(&b->mv[2][0], &b->mv[0][0]); + AV_COPY32(&b->mv[3][0], &b->mv[0][0]); + AV_COPY32(&b->mv[1][1], &b->mv[0][1]); + AV_COPY32(&b->mv[2][1], &b->mv[0][1]); + AV_COPY32(&b->mv[3][1], &b->mv[0][1]); + } + + vref = b->ref[b->comp ? s->s.h.signbias[s->s.h.varcompref[0]] : 0]; + } + +#if HAVE_FAST_64BIT +#define SPLAT_CTX(var, val, n) \ + switch (n) { \ + case 1: var = val; break; \ + case 2: AV_WN16A(&var, val * 0x0101); break; \ + case 4: AV_WN32A(&var, val * 0x01010101); break; \ + case 8: AV_WN64A(&var, val * 0x0101010101010101ULL); break; \ + case 16: { \ + uint64_t v64 = val * 0x0101010101010101ULL; \ + AV_WN64A( &var, v64); \ + AV_WN64A(&((uint8_t *) &var)[8], v64); \ + break; \ + } \ + } +#else +#define SPLAT_CTX(var, val, n) \ + switch (n) { \ + case 1: var = val; break; \ + case 2: AV_WN16A(&var, val * 0x0101); break; \ + case 4: AV_WN32A(&var, val * 0x01010101); break; \ + case 8: { \ + uint32_t v32 = val * 0x01010101; \ + AV_WN32A( &var, v32); \ + AV_WN32A(&((uint8_t *) &var)[4], v32); \ + break; \ + } \ + case 16: { \ + uint32_t v32 = val * 0x01010101; \ + AV_WN32A( &var, v32); \ + AV_WN32A(&((uint8_t *) &var)[4], v32); \ + AV_WN32A(&((uint8_t *) &var)[8], v32); \ + AV_WN32A(&((uint8_t *) &var)[12], v32); \ + break; \ + } \ + } +#endif + + switch (ff_vp9_bwh_tab[1][b->bs][0]) { +#define SET_CTXS(perf, dir, off, n) \ + do { \ + SPLAT_CTX(perf->dir##_skip_ctx[off], b->skip, n); \ + SPLAT_CTX(perf->dir##_txfm_ctx[off], b->tx, n); \ + SPLAT_CTX(perf->dir##_partition_ctx[off], dir##_ctx[b->bs], n); \ + if (!s->s.h.keyframe && !s->s.h.intraonly) { \ + SPLAT_CTX(perf->dir##_intra_ctx[off], b->intra, n); \ + SPLAT_CTX(perf->dir##_comp_ctx[off], b->comp, n); \ + SPLAT_CTX(perf->dir##_mode_ctx[off], b->mode[3], n); \ + if (!b->intra) { \ + SPLAT_CTX(perf->dir##_ref_ctx[off], vref, n); \ + if (s->s.h.filtermode == FILTER_SWITCHABLE) { \ + SPLAT_CTX(perf->dir##_filter_ctx[off], filter_id, n); \ + } \ + } \ + } \ + } while (0) + case 1: SET_CTXS(s, above, col, 1); break; + case 2: SET_CTXS(s, above, col, 2); break; + case 4: SET_CTXS(s, above, col, 4); break; + case 8: SET_CTXS(s, above, col, 8); break; + } + switch (ff_vp9_bwh_tab[1][b->bs][1]) { + case 1: SET_CTXS(td, left, row7, 1); break; + case 2: SET_CTXS(td, left, row7, 2); break; + case 4: SET_CTXS(td, left, row7, 4); break; + case 8: SET_CTXS(td, left, row7, 8); break; + } +#undef SPLAT_CTX +#undef SET_CTXS + + if (!s->s.h.keyframe && !s->s.h.intraonly) { + if (b->bs > BS_8x8) { + int mv0 = AV_RN32A(&b->mv[3][0]), mv1 = AV_RN32A(&b->mv[3][1]); + + AV_COPY32(&td->left_mv_ctx[row7 * 2 + 0][0], &b->mv[1][0]); + AV_COPY32(&td->left_mv_ctx[row7 * 2 + 0][1], &b->mv[1][1]); + AV_WN32A(&td->left_mv_ctx[row7 * 2 + 1][0], mv0); + AV_WN32A(&td->left_mv_ctx[row7 * 2 + 1][1], mv1); + AV_COPY32(&s->above_mv_ctx[col * 2 + 0][0], &b->mv[2][0]); + AV_COPY32(&s->above_mv_ctx[col * 2 + 0][1], &b->mv[2][1]); + AV_WN32A(&s->above_mv_ctx[col * 2 + 1][0], mv0); + AV_WN32A(&s->above_mv_ctx[col * 2 + 1][1], mv1); + } else { + int n, mv0 = AV_RN32A(&b->mv[3][0]), mv1 = AV_RN32A(&b->mv[3][1]); + + for (n = 0; n < w4 * 2; n++) { + AV_WN32A(&s->above_mv_ctx[col * 2 + n][0], mv0); + AV_WN32A(&s->above_mv_ctx[col * 2 + n][1], mv1); + } + for (n = 0; n < h4 * 2; n++) { + AV_WN32A(&td->left_mv_ctx[row7 * 2 + n][0], mv0); + AV_WN32A(&td->left_mv_ctx[row7 * 2 + n][1], mv1); + } + } + } + + // FIXME kinda ugly + for (y = 0; y < h4; y++) { + int x, o = (row + y) * s->sb_cols * 8 + col; + VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[o]; + + if (b->intra) { + for (x = 0; x < w4; x++) { + mv[x].ref[0] = + mv[x].ref[1] = -1; + } + } else if (b->comp) { + for (x = 0; x < w4; x++) { + mv[x].ref[0] = b->ref[0]; + mv[x].ref[1] = b->ref[1]; + AV_COPY32(&mv[x].mv[0], &b->mv[3][0]); + AV_COPY32(&mv[x].mv[1], &b->mv[3][1]); + } + } else { + for (x = 0; x < w4; x++) { + mv[x].ref[0] = b->ref[0]; + mv[x].ref[1] = -1; + AV_COPY32(&mv[x].mv[0], &b->mv[3][0]); + } + } + } +} + +// FIXME merge cnt/eob arguments? +static av_always_inline int +decode_coeffs_b_generic(VP56RangeCoder *c, int16_t *coef, int n_coeffs, + int is_tx32x32, int is8bitsperpixel, int bpp, unsigned (*cnt)[6][3], + unsigned (*eob)[6][2], uint8_t (*p)[6][11], + int nnz, const int16_t *scan, const int16_t (*nb)[2], + const int16_t *band_counts, int16_t *qmul) +{ + int i = 0, band = 0, band_left = band_counts[band]; + const uint8_t *tp = p[0][nnz]; + uint8_t cache[1024]; + + do { + int val, rc; + + val = vp56_rac_get_prob_branchy(c, tp[0]); // eob + eob[band][nnz][val]++; + if (!val) + break; + +skip_eob: + if (!vp56_rac_get_prob_branchy(c, tp[1])) { // zero + cnt[band][nnz][0]++; + if (!--band_left) + band_left = band_counts[++band]; + cache[scan[i]] = 0; + nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1; + tp = p[band][nnz]; + if (++i == n_coeffs) + break; //invalid input; blocks should end with EOB + goto skip_eob; + } + + rc = scan[i]; + if (!vp56_rac_get_prob_branchy(c, tp[2])) { // one + cnt[band][nnz][1]++; + val = 1; + cache[rc] = 1; + } else { + cnt[band][nnz][2]++; + if (!vp56_rac_get_prob_branchy(c, tp[3])) { // 2, 3, 4 + if (!vp56_rac_get_prob_branchy(c, tp[4])) { + cache[rc] = val = 2; + } else { + val = 3 + vp56_rac_get_prob(c, tp[5]); + cache[rc] = 3; + } + } else if (!vp56_rac_get_prob_branchy(c, tp[6])) { // cat1/2 + cache[rc] = 4; + if (!vp56_rac_get_prob_branchy(c, tp[7])) { + val = vp56_rac_get_prob(c, 159) + 5; + } else { + val = (vp56_rac_get_prob(c, 165) << 1) + 7; + val += vp56_rac_get_prob(c, 145); + } + } else { // cat 3-6 + cache[rc] = 5; + if (!vp56_rac_get_prob_branchy(c, tp[8])) { + if (!vp56_rac_get_prob_branchy(c, tp[9])) { + val = 11 + (vp56_rac_get_prob(c, 173) << 2); + val += (vp56_rac_get_prob(c, 148) << 1); + val += vp56_rac_get_prob(c, 140); + } else { + val = 19 + (vp56_rac_get_prob(c, 176) << 3); + val += (vp56_rac_get_prob(c, 155) << 2); + val += (vp56_rac_get_prob(c, 140) << 1); + val += vp56_rac_get_prob(c, 135); + } + } else if (!vp56_rac_get_prob_branchy(c, tp[10])) { + val = (vp56_rac_get_prob(c, 180) << 4) + 35; + val += (vp56_rac_get_prob(c, 157) << 3); + val += (vp56_rac_get_prob(c, 141) << 2); + val += (vp56_rac_get_prob(c, 134) << 1); + val += vp56_rac_get_prob(c, 130); + } else { + val = 67; + if (!is8bitsperpixel) { + if (bpp == 12) { + val += vp56_rac_get_prob(c, 255) << 17; + val += vp56_rac_get_prob(c, 255) << 16; + } + val += (vp56_rac_get_prob(c, 255) << 15); + val += (vp56_rac_get_prob(c, 255) << 14); + } + val += (vp56_rac_get_prob(c, 254) << 13); + val += (vp56_rac_get_prob(c, 254) << 12); + val += (vp56_rac_get_prob(c, 254) << 11); + val += (vp56_rac_get_prob(c, 252) << 10); + val += (vp56_rac_get_prob(c, 249) << 9); + val += (vp56_rac_get_prob(c, 243) << 8); + val += (vp56_rac_get_prob(c, 230) << 7); + val += (vp56_rac_get_prob(c, 196) << 6); + val += (vp56_rac_get_prob(c, 177) << 5); + val += (vp56_rac_get_prob(c, 153) << 4); + val += (vp56_rac_get_prob(c, 140) << 3); + val += (vp56_rac_get_prob(c, 133) << 2); + val += (vp56_rac_get_prob(c, 130) << 1); + val += vp56_rac_get_prob(c, 129); + } + } + } +#define STORE_COEF(c, i, v) do { \ + if (is8bitsperpixel) { \ + c[i] = v; \ + } else { \ + AV_WN32A(&c[i * 2], v); \ + } \ +} while (0) + if (!--band_left) + band_left = band_counts[++band]; + if (is_tx32x32) + STORE_COEF(coef, rc, (int)((vp8_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]) / 2); + else + STORE_COEF(coef, rc, (vp8_rac_get(c) ? -val : val) * (unsigned)qmul[!!i]); + nnz = (1 + cache[nb[i][0]] + cache[nb[i][1]]) >> 1; + tp = p[band][nnz]; + } while (++i < n_coeffs); + + return i; +} + +static int decode_coeffs_b_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], + uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, + int16_t *qmul) +{ + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 1, 8, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +} + +static int decode_coeffs_b32_8bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], + uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, + int16_t *qmul) +{ + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 1, 8, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +} + +static int decode_coeffs_b_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], + uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, + int16_t *qmul) +{ + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 0, 0, td->s->s.h.bpp, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +} + +static int decode_coeffs_b32_16bpp(VP9TileData *td, int16_t *coef, int n_coeffs, + unsigned (*cnt)[6][3], unsigned (*eob)[6][2], + uint8_t (*p)[6][11], int nnz, const int16_t *scan, + const int16_t (*nb)[2], const int16_t *band_counts, + int16_t *qmul) +{ + return decode_coeffs_b_generic(td->c, coef, n_coeffs, 1, 0, td->s->s.h.bpp, cnt, eob, p, + nnz, scan, nb, band_counts, qmul); +} + +static av_always_inline int decode_coeffs(VP9TileData *td, int is8bitsperpixel) +{ + VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; + uint8_t (*p)[6][11] = s->prob.coef[b->tx][0 /* y */][!b->intra]; + unsigned (*c)[6][3] = td->counts.coef[b->tx][0 /* y */][!b->intra]; + unsigned (*e)[6][2] = td->counts.eob[b->tx][0 /* y */][!b->intra]; + int w4 = ff_vp9_bwh_tab[1][b->bs][0] << 1, h4 = ff_vp9_bwh_tab[1][b->bs][1] << 1; + int end_x = FFMIN(2 * (s->cols - col), w4); + int end_y = FFMIN(2 * (s->rows - row), h4); + int n, pl, x, y, ret; + int16_t (*qmul)[2] = s->s.h.segmentation.feat[b->seg_id].qmul; + int tx = 4 * s->s.h.lossless + b->tx; + const int16_t * const *yscans = ff_vp9_scans[tx]; + const int16_t (* const * ynbs)[2] = ff_vp9_scans_nb[tx]; + const int16_t *uvscan = ff_vp9_scans[b->uvtx][DCT_DCT]; + const int16_t (*uvnb)[2] = ff_vp9_scans_nb[b->uvtx][DCT_DCT]; + uint8_t *a = &s->above_y_nnz_ctx[col * 2]; + uint8_t *l = &td->left_y_nnz_ctx[(row & 7) << 1]; + static const int16_t band_counts[4][8] = { + { 1, 2, 3, 4, 3, 16 - 13 }, + { 1, 2, 3, 4, 11, 64 - 21 }, + { 1, 2, 3, 4, 11, 256 - 21 }, + { 1, 2, 3, 4, 11, 1024 - 21 }, + }; + const int16_t *y_band_counts = band_counts[b->tx]; + const int16_t *uv_band_counts = band_counts[b->uvtx]; + int bytesperpixel = is8bitsperpixel ? 1 : 2; + int total_coeff = 0; + +#define MERGE(la, end, step, rd) \ + for (n = 0; n < end; n += step) \ + la[n] = !!rd(&la[n]) +#define MERGE_CTX(step, rd) \ + do { \ + MERGE(l, end_y, step, rd); \ + MERGE(a, end_x, step, rd); \ + } while (0) + +#define DECODE_Y_COEF_LOOP(step, mode_index, v) \ + for (n = 0, y = 0; y < end_y; y += step) { \ + for (x = 0; x < end_x; x += step, n += step * step) { \ + enum TxfmType txtp = ff_vp9_intra_txfm_type[b->mode[mode_index]]; \ + ret = (is8bitsperpixel ? decode_coeffs_b##v##_8bpp : decode_coeffs_b##v##_16bpp) \ + (td, td->block + 16 * n * bytesperpixel, 16 * step * step, \ + c, e, p, a[x] + l[y], yscans[txtp], \ + ynbs[txtp], y_band_counts, qmul[0]); \ + a[x] = l[y] = !!ret; \ + total_coeff |= !!ret; \ + if (step >= 4) { \ + AV_WN16A(&td->eob[n], ret); \ + } else { \ + td->eob[n] = ret; \ + } \ + } \ + } + +#define SPLAT(la, end, step, cond) \ + if (step == 2) { \ + for (n = 1; n < end; n += step) \ + la[n] = la[n - 1]; \ + } else if (step == 4) { \ + if (cond) { \ + for (n = 0; n < end; n += step) \ + AV_WN32A(&la[n], la[n] * 0x01010101); \ + } else { \ + for (n = 0; n < end; n += step) \ + memset(&la[n + 1], la[n], FFMIN(end - n - 1, 3)); \ + } \ + } else /* step == 8 */ { \ + if (cond) { \ + if (HAVE_FAST_64BIT) { \ + for (n = 0; n < end; n += step) \ + AV_WN64A(&la[n], la[n] * 0x0101010101010101ULL); \ + } else { \ + for (n = 0; n < end; n += step) { \ + uint32_t v32 = la[n] * 0x01010101; \ + AV_WN32A(&la[n], v32); \ + AV_WN32A(&la[n + 4], v32); \ + } \ + } \ + } else { \ + for (n = 0; n < end; n += step) \ + memset(&la[n + 1], la[n], FFMIN(end - n - 1, 7)); \ + } \ + } +#define SPLAT_CTX(step) \ + do { \ + SPLAT(a, end_x, step, end_x == w4); \ + SPLAT(l, end_y, step, end_y == h4); \ + } while (0) + + /* y tokens */ + switch (b->tx) { + case TX_4X4: + DECODE_Y_COEF_LOOP(1, b->bs > BS_8x8 ? n : 0,); + break; + case TX_8X8: + MERGE_CTX(2, AV_RN16A); + DECODE_Y_COEF_LOOP(2, 0,); + SPLAT_CTX(2); + break; + case TX_16X16: + MERGE_CTX(4, AV_RN32A); + DECODE_Y_COEF_LOOP(4, 0,); + SPLAT_CTX(4); + break; + case TX_32X32: + MERGE_CTX(8, AV_RN64A); + DECODE_Y_COEF_LOOP(8, 0, 32); + SPLAT_CTX(8); + break; + } + +#define DECODE_UV_COEF_LOOP(step, v) \ + for (n = 0, y = 0; y < end_y; y += step) { \ + for (x = 0; x < end_x; x += step, n += step * step) { \ + ret = (is8bitsperpixel ? decode_coeffs_b##v##_8bpp : decode_coeffs_b##v##_16bpp) \ + (td, td->uvblock[pl] + 16 * n * bytesperpixel, \ + 16 * step * step, c, e, p, a[x] + l[y], \ + uvscan, uvnb, uv_band_counts, qmul[1]); \ + a[x] = l[y] = !!ret; \ + total_coeff |= !!ret; \ + if (step >= 4) { \ + AV_WN16A(&td->uveob[pl][n], ret); \ + } else { \ + td->uveob[pl][n] = ret; \ + } \ + } \ + } + + p = s->prob.coef[b->uvtx][1 /* uv */][!b->intra]; + c = td->counts.coef[b->uvtx][1 /* uv */][!b->intra]; + e = td->counts.eob[b->uvtx][1 /* uv */][!b->intra]; + w4 >>= s->ss_h; + end_x >>= s->ss_h; + h4 >>= s->ss_v; + end_y >>= s->ss_v; + for (pl = 0; pl < 2; pl++) { + a = &s->above_uv_nnz_ctx[pl][col << !s->ss_h]; + l = &td->left_uv_nnz_ctx[pl][(row & 7) << !s->ss_v]; + switch (b->uvtx) { + case TX_4X4: + DECODE_UV_COEF_LOOP(1,); + break; + case TX_8X8: + MERGE_CTX(2, AV_RN16A); + DECODE_UV_COEF_LOOP(2,); + SPLAT_CTX(2); + break; + case TX_16X16: + MERGE_CTX(4, AV_RN32A); + DECODE_UV_COEF_LOOP(4,); + SPLAT_CTX(4); + break; + case TX_32X32: + MERGE_CTX(8, AV_RN64A); + DECODE_UV_COEF_LOOP(8, 32); + SPLAT_CTX(8); + break; + } + } + + return total_coeff; +} + +static int decode_coeffs_8bpp(VP9TileData *td) +{ + return decode_coeffs(td, 1); +} + +static int decode_coeffs_16bpp(VP9TileData *td) +{ + return decode_coeffs(td, 0); +} + +static av_always_inline void mask_edges(uint8_t (*mask)[8][4], int ss_h, int ss_v, + int row_and_7, int col_and_7, + int w, int h, int col_end, int row_end, + enum TxfmMode tx, int skip_inter) +{ + static const unsigned wide_filter_col_mask[2] = { 0x11, 0x01 }; + static const unsigned wide_filter_row_mask[2] = { 0x03, 0x07 }; + + // FIXME I'm pretty sure all loops can be replaced by a single LUT if + // we make VP9Filter.mask uint64_t (i.e. row/col all single variable) + // and make the LUT 5-indexed (bl, bp, is_uv, tx and row/col), and then + // use row_and_7/col_and_7 as shifts (1*col_and_7+8*row_and_7) + + // the intended behaviour of the vp9 loopfilter is to work on 8-pixel + // edges. This means that for UV, we work on two subsampled blocks at + // a time, and we only use the topleft block's mode information to set + // things like block strength. Thus, for any block size smaller than + // 16x16, ignore the odd portion of the block. + if (tx == TX_4X4 && (ss_v | ss_h)) { + if (h == ss_v) { + if (row_and_7 & 1) + return; + if (!row_end) + h += 1; + } + if (w == ss_h) { + if (col_and_7 & 1) + return; + if (!col_end) + w += 1; + } + } + + if (tx == TX_4X4 && !skip_inter) { + int t = 1 << col_and_7, m_col = (t << w) - t, y; + // on 32-px edges, use the 8-px wide loopfilter; else, use 4-px wide + int m_row_8 = m_col & wide_filter_col_mask[ss_h], m_row_4 = m_col - m_row_8; + + for (y = row_and_7; y < h + row_and_7; y++) { + int col_mask_id = 2 - !(y & wide_filter_row_mask[ss_v]); + + mask[0][y][1] |= m_row_8; + mask[0][y][2] |= m_row_4; + // for odd lines, if the odd col is not being filtered, + // skip odd row also: + // .---. <-- a + // | | + // |___| <-- b + // ^ ^ + // c d + // + // if a/c are even row/col and b/d are odd, and d is skipped, + // e.g. right edge of size-66x66.webm, then skip b also (bug) + if ((ss_h & ss_v) && (col_end & 1) && (y & 1)) { + mask[1][y][col_mask_id] |= (t << (w - 1)) - t; + } else { + mask[1][y][col_mask_id] |= m_col; + } + if (!ss_h) + mask[0][y][3] |= m_col; + if (!ss_v) { + if (ss_h && (col_end & 1)) + mask[1][y][3] |= (t << (w - 1)) - t; + else + mask[1][y][3] |= m_col; + } + } + } else { + int y, t = 1 << col_and_7, m_col = (t << w) - t; + + if (!skip_inter) { + int mask_id = (tx == TX_8X8); + int l2 = tx + ss_h - 1, step1d; + static const unsigned masks[4] = { 0xff, 0x55, 0x11, 0x01 }; + int m_row = m_col & masks[l2]; + + // at odd UV col/row edges tx16/tx32 loopfilter edges, force + // 8wd loopfilter to prevent going off the visible edge. + if (ss_h && tx > TX_8X8 && (w ^ (w - 1)) == 1) { + int m_row_16 = ((t << (w - 1)) - t) & masks[l2]; + int m_row_8 = m_row - m_row_16; + + for (y = row_and_7; y < h + row_and_7; y++) { + mask[0][y][0] |= m_row_16; + mask[0][y][1] |= m_row_8; + } + } else { + for (y = row_and_7; y < h + row_and_7; y++) + mask[0][y][mask_id] |= m_row; + } + + l2 = tx + ss_v - 1; + step1d = 1 << l2; + if (ss_v && tx > TX_8X8 && (h ^ (h - 1)) == 1) { + for (y = row_and_7; y < h + row_and_7 - 1; y += step1d) + mask[1][y][0] |= m_col; + if (y - row_and_7 == h - 1) + mask[1][y][1] |= m_col; + } else { + for (y = row_and_7; y < h + row_and_7; y += step1d) + mask[1][y][mask_id] |= m_col; + } + } else if (tx != TX_4X4) { + int mask_id; + + mask_id = (tx == TX_8X8) || (h == ss_v); + mask[1][row_and_7][mask_id] |= m_col; + mask_id = (tx == TX_8X8) || (w == ss_h); + for (y = row_and_7; y < h + row_and_7; y++) + mask[0][y][mask_id] |= t; + } else { + int t8 = t & wide_filter_col_mask[ss_h], t4 = t - t8; + + for (y = row_and_7; y < h + row_and_7; y++) { + mask[0][y][2] |= t4; + mask[0][y][1] |= t8; + } + mask[1][row_and_7][2 - !(row_and_7 & wide_filter_row_mask[ss_v])] |= m_col; + } + } +} + +void ff_vp9_decode_block(VP9TileData *td, int row, int col, + VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, + enum BlockLevel bl, enum BlockPartition bp) +{ + VP9Context *s = td->s; + VP9Block *b = td->b; + enum BlockSize bs = bl * 3 + bp; + int bytesperpixel = s->bytesperpixel; + int w4 = ff_vp9_bwh_tab[1][bs][0], h4 = ff_vp9_bwh_tab[1][bs][1], lvl; + int emu[2]; + AVFrame *f = s->s.frames[CUR_FRAME].tf.f; + + td->row = row; + td->row7 = row & 7; + td->col = col; + td->col7 = col & 7; + + td->min_mv.x = -(128 + col * 64); + td->min_mv.y = -(128 + row * 64); + td->max_mv.x = 128 + (s->cols - col - w4) * 64; + td->max_mv.y = 128 + (s->rows - row - h4) * 64; + + if (s->pass < 2) { + b->bs = bs; + b->bl = bl; + b->bp = bp; + decode_mode(td); + b->uvtx = b->tx - ((s->ss_h && w4 * 2 == (1 << b->tx)) || + (s->ss_v && h4 * 2 == (1 << b->tx))); + + if (!b->skip) { + int has_coeffs; + + if (bytesperpixel == 1) { + has_coeffs = decode_coeffs_8bpp(td); + } else { + has_coeffs = decode_coeffs_16bpp(td); + } + if (!has_coeffs && b->bs <= BS_8x8 && !b->intra) { + b->skip = 1; + memset(&s->above_skip_ctx[col], 1, w4); + memset(&td->left_skip_ctx[td->row7], 1, h4); + } + } else { + int row7 = td->row7; + +#define SPLAT_ZERO_CTX(v, n) \ + switch (n) { \ + case 1: v = 0; break; \ + case 2: AV_ZERO16(&v); break; \ + case 4: AV_ZERO32(&v); break; \ + case 8: AV_ZERO64(&v); break; \ + case 16: AV_ZERO128(&v); break; \ + } +#define SPLAT_ZERO_YUV(dir, var, off, n, dir2) \ + do { \ + SPLAT_ZERO_CTX(dir##_y_##var[off * 2], n * 2); \ + if (s->ss_##dir2) { \ + SPLAT_ZERO_CTX(dir##_uv_##var[0][off], n); \ + SPLAT_ZERO_CTX(dir##_uv_##var[1][off], n); \ + } else { \ + SPLAT_ZERO_CTX(dir##_uv_##var[0][off * 2], n * 2); \ + SPLAT_ZERO_CTX(dir##_uv_##var[1][off * 2], n * 2); \ + } \ + } while (0) + + switch (w4) { + case 1: SPLAT_ZERO_YUV(s->above, nnz_ctx, col, 1, h); break; + case 2: SPLAT_ZERO_YUV(s->above, nnz_ctx, col, 2, h); break; + case 4: SPLAT_ZERO_YUV(s->above, nnz_ctx, col, 4, h); break; + case 8: SPLAT_ZERO_YUV(s->above, nnz_ctx, col, 8, h); break; + } + switch (h4) { + case 1: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 1, v); break; + case 2: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 2, v); break; + case 4: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 4, v); break; + case 8: SPLAT_ZERO_YUV(td->left, nnz_ctx, row7, 8, v); break; + } + } + + if (s->pass == 1) { + s->td[0].b++; + s->td[0].block += w4 * h4 * 64 * bytesperpixel; + s->td[0].uvblock[0] += w4 * h4 * 64 * bytesperpixel >> (s->ss_h + s->ss_v); + s->td[0].uvblock[1] += w4 * h4 * 64 * bytesperpixel >> (s->ss_h + s->ss_v); + s->td[0].eob += 4 * w4 * h4; + s->td[0].uveob[0] += 4 * w4 * h4 >> (s->ss_h + s->ss_v); + s->td[0].uveob[1] += 4 * w4 * h4 >> (s->ss_h + s->ss_v); + + return; + } + } + + // emulated overhangs if the stride of the target buffer can't hold. This + // makes it possible to support emu-edge and so on even if we have large block + // overhangs + emu[0] = (col + w4) * 8 * bytesperpixel > f->linesize[0] || + (row + h4) > s->rows; + emu[1] = ((col + w4) * 8 >> s->ss_h) * bytesperpixel > f->linesize[1] || + (row + h4) > s->rows; + if (emu[0]) { + td->dst[0] = td->tmp_y; + td->y_stride = 128; + } else { + td->dst[0] = f->data[0] + yoff; + td->y_stride = f->linesize[0]; + } + if (emu[1]) { + td->dst[1] = td->tmp_uv[0]; + td->dst[2] = td->tmp_uv[1]; + td->uv_stride = 128; + } else { + td->dst[1] = f->data[1] + uvoff; + td->dst[2] = f->data[2] + uvoff; + td->uv_stride = f->linesize[1]; + } + if (b->intra) { + if (s->s.h.bpp > 8) { + ff_vp9_intra_recon_16bpp(td, yoff, uvoff); + } else { + ff_vp9_intra_recon_8bpp(td, yoff, uvoff); + } + } else { + if (s->s.h.bpp > 8) { + ff_vp9_inter_recon_16bpp(td); + } else { + ff_vp9_inter_recon_8bpp(td); + } + } + if (emu[0]) { + int w = FFMIN(s->cols - col, w4) * 8, h = FFMIN(s->rows - row, h4) * 8, n, o = 0; + + for (n = 0; o < w; n++) { + int bw = 64 >> n; + + av_assert2(n <= 4); + if (w & bw) { + s->dsp.mc[n][0][0][0][0](f->data[0] + yoff + o * bytesperpixel, f->linesize[0], + td->tmp_y + o * bytesperpixel, 128, h, 0, 0); + o += bw; + } + } + } + if (emu[1]) { + int w = FFMIN(s->cols - col, w4) * 8 >> s->ss_h; + int h = FFMIN(s->rows - row, h4) * 8 >> s->ss_v, n, o = 0; + + for (n = s->ss_h; o < w; n++) { + int bw = 64 >> n; + + av_assert2(n <= 4); + if (w & bw) { + s->dsp.mc[n][0][0][0][0](f->data[1] + uvoff + o * bytesperpixel, f->linesize[1], + td->tmp_uv[0] + o * bytesperpixel, 128, h, 0, 0); + s->dsp.mc[n][0][0][0][0](f->data[2] + uvoff + o * bytesperpixel, f->linesize[2], + td->tmp_uv[1] + o * bytesperpixel, 128, h, 0, 0); + o += bw; + } + } + } + + // pick filter level and find edges to apply filter to + if (s->s.h.filter.level && + (lvl = s->s.h.segmentation.feat[b->seg_id].lflvl[b->intra ? 0 : b->ref[0] + 1] + [b->mode[3] != ZEROMV]) > 0) { + int x_end = FFMIN(s->cols - col, w4), y_end = FFMIN(s->rows - row, h4); + int skip_inter = !b->intra && b->skip, col7 = td->col7, row7 = td->row7; + + setctx_2d(&lflvl->level[row7 * 8 + col7], w4, h4, 8, lvl); + mask_edges(lflvl->mask[0], 0, 0, row7, col7, x_end, y_end, 0, 0, b->tx, skip_inter); + if (s->ss_h || s->ss_v) + mask_edges(lflvl->mask[1], s->ss_h, s->ss_v, row7, col7, x_end, y_end, + s->cols & 1 && col + w4 >= s->cols ? s->cols & 7 : 0, + s->rows & 1 && row + h4 >= s->rows ? s->rows & 7 : 0, + b->uvtx, skip_inter); + } + + if (s->pass == 2) { + s->td[0].b++; + s->td[0].block += w4 * h4 * 64 * bytesperpixel; + s->td[0].uvblock[0] += w4 * h4 * 64 * bytesperpixel >> (s->ss_v + s->ss_h); + s->td[0].uvblock[1] += w4 * h4 * 64 * bytesperpixel >> (s->ss_v + s->ss_h); + s->td[0].eob += 4 * w4 * h4; + s->td[0].uveob[0] += 4 * w4 * h4 >> (s->ss_v + s->ss_h); + s->td[0].uveob[1] += 4 * w4 * h4 >> (s->ss_v + s->ss_h); + } +} diff --git a/media/ffvpx/libavcodec/vp9data.c b/media/ffvpx/libavcodec/vp9data.c new file mode 100644 index 000000000000..7af8a97b1e44 --- /dev/null +++ b/media/ffvpx/libavcodec/vp9data.c @@ -0,0 +1,2247 @@ +/* + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "vp9.h" +#include "vp9data.h" + +const uint8_t ff_vp9_bwh_tab[2][N_BS_SIZES][2] = { + { + { 16, 16 }, { 16, 8 }, { 8, 16 }, { 8, 8 }, { 8, 4 }, { 4, 8 }, + { 4, 4 }, { 4, 2 }, { 2, 4 }, { 2, 2 }, { 2, 1 }, { 1, 2 }, { 1, 1 }, + }, { + { 8, 8 }, { 8, 4 }, { 4, 8 }, { 4, 4 }, { 4, 2 }, { 2, 4 }, + { 2, 2 }, { 2, 1 }, { 1, 2 }, { 1, 1 }, { 1, 1 }, { 1, 1 }, { 1, 1 }, + } +}; + +const int8_t ff_vp9_partition_tree[3][2] = { + { -PARTITION_NONE, 1 }, // '0' + { -PARTITION_H, 2 }, // '10' + { -PARTITION_V, -PARTITION_SPLIT }, // '110', '111' +}; + +const uint8_t ff_vp9_default_kf_partition_probs[4][4][3] = { + { /* 64x64 -> 32x32 */ + { 174, 35, 49 } /* a/l both not split */, + { 68, 11, 27 } /* a split, l not split */, + { 57, 15, 9 } /* l split, a not split */, + { 12, 3, 3 } /* a/l both split */ + }, { /* 32x32 -> 16x16 */ + { 150, 40, 39 } /* a/l both not split */, + { 78, 12, 26 } /* a split, l not split */, + { 67, 33, 11 } /* l split, a not split */, + { 24, 7, 5 } /* a/l both split */, + }, { /* 16x16 -> 8x8 */ + { 149, 53, 53 } /* a/l both not split */, + { 94, 20, 48 } /* a split, l not split */, + { 83, 53, 24 } /* l split, a not split */, + { 52, 18, 18 } /* a/l both split */, + }, { /* 8x8 -> 4x4 */ + { 158, 97, 94 } /* a/l both not split */, + { 93, 24, 99 } /* a split, l not split */, + { 85, 119, 44 } /* l split, a not split */, + { 62, 59, 67 } /* a/l both split */, + }, +}; + +const int8_t ff_vp9_segmentation_tree[7][2] = { + { 1, 2 }, + { 3, 4 }, + { 5, 6 }, + { -0, -1 }, // '00x' + { -2, -3 }, // '01x' + { -4, -5 }, // '10x' + { -6, -7 }, // '11x' +}; + +const int8_t ff_vp9_intramode_tree[9][2] = { + { -DC_PRED, 1 }, // '0' + { -TM_VP8_PRED, 2 }, // '10' + { -VERT_PRED, 3 }, // '110' + { 4, 6 }, + { -HOR_PRED, 5 }, // '11100' + { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED }, // '11101x' + { -DIAG_DOWN_LEFT_PRED, 7 }, // '11110' + { -VERT_LEFT_PRED, 8 }, // '111110' + { -HOR_DOWN_PRED, -HOR_UP_PRED }, // '111111x' +}; + +const uint8_t ff_vp9_default_kf_ymode_probs[10][10][9] = { + { /* above = v */ + { 43, 46, 168, 134, 107, 128, 69, 142, 92 } /* left = v */, + { 44, 29, 68, 159, 201, 177, 50, 57, 77 } /* left = h */, + { 63, 36, 126, 146, 123, 158, 60, 90, 96 } /* left = dc */, + { 58, 38, 76, 114, 97, 172, 78, 133, 92 } /* left = d45 */, + { 46, 41, 76, 140, 63, 184, 69, 112, 57 } /* left = d135 */, + { 38, 32, 85, 140, 46, 112, 54, 151, 133 } /* left = d117 */, + { 39, 27, 61, 131, 110, 175, 44, 75, 136 } /* left = d153 */, + { 47, 35, 80, 100, 74, 143, 64, 163, 74 } /* left = d63 */, + { 52, 30, 74, 113, 130, 175, 51, 64, 58 } /* left = d27 */, + { 36, 61, 116, 114, 128, 162, 80, 125, 82 } /* left = tm */ + }, { /* above = h */ + { 55, 44, 68, 166, 179, 192, 57, 57, 108 } /* left = v */, + { 42, 26, 11, 199, 241, 228, 23, 15, 85 } /* left = h */, + { 82, 26, 26, 171, 208, 204, 44, 32, 105 } /* left = dc */, + { 68, 42, 19, 131, 160, 199, 55, 52, 83 } /* left = d45 */, + { 58, 50, 25, 139, 115, 232, 39, 52, 118 } /* left = d135 */, + { 50, 35, 33, 153, 104, 162, 64, 59, 131 } /* left = d117 */, + { 44, 24, 16, 150, 177, 202, 33, 19, 156 } /* left = d153 */, + { 53, 49, 21, 110, 116, 168, 59, 80, 76 } /* left = d63 */, + { 55, 27, 12, 153, 203, 218, 26, 27, 49 } /* left = d27 */, + { 38, 72, 19, 168, 203, 212, 50, 50, 107 } /* left = tm */ + }, { /* above = dc */ + { 92, 45, 102, 136, 116, 180, 74, 90, 100 } /* left = v */, + { 73, 32, 19, 187, 222, 215, 46, 34, 100 } /* left = h */, + { 137, 30, 42, 148, 151, 207, 70, 52, 91 } /* left = dc */, + { 91, 30, 32, 116, 121, 186, 93, 86, 94 } /* left = d45 */, + { 72, 35, 36, 149, 68, 206, 68, 63, 105 } /* left = d135 */, + { 73, 31, 28, 138, 57, 124, 55, 122, 151 } /* left = d117 */, + { 67, 23, 21, 140, 126, 197, 40, 37, 171 } /* left = d153 */, + { 74, 32, 27, 107, 86, 160, 63, 134, 102 } /* left = d63 */, + { 86, 27, 28, 128, 154, 212, 45, 43, 53 } /* left = d27 */, + { 59, 67, 44, 140, 161, 202, 78, 67, 119 } /* left = tm */ + }, { /* above = d45 */ + { 59, 38, 83, 112, 103, 162, 98, 136, 90 } /* left = v */, + { 62, 30, 23, 158, 200, 207, 59, 57, 50 } /* left = h */, + { 103, 26, 36, 129, 132, 201, 83, 80, 93 } /* left = dc */, + { 67, 30, 29, 84, 86, 191, 102, 91, 59 } /* left = d45 */, + { 60, 32, 33, 112, 71, 220, 64, 89, 104 } /* left = d135 */, + { 53, 26, 34, 130, 56, 149, 84, 120, 103 } /* left = d117 */, + { 53, 21, 23, 133, 109, 210, 56, 77, 172 } /* left = d153 */, + { 61, 29, 29, 93, 97, 165, 83, 175, 162 } /* left = d63 */, + { 77, 19, 29, 112, 142, 228, 55, 66, 36 } /* left = d27 */, + { 47, 47, 43, 114, 137, 181, 100, 99, 95 } /* left = tm */ + }, { /* above = d135 */ + { 53, 40, 55, 139, 69, 183, 61, 80, 110 } /* left = v */, + { 40, 29, 19, 161, 180, 207, 43, 24, 91 } /* left = h */, + { 69, 23, 29, 128, 83, 199, 46, 44, 101 } /* left = dc */, + { 60, 34, 19, 105, 61, 198, 53, 64, 89 } /* left = d45 */, + { 52, 31, 22, 158, 40, 209, 58, 62, 89 } /* left = d135 */, + { 44, 31, 29, 147, 46, 158, 56, 102, 198 } /* left = d117 */, + { 35, 19, 12, 135, 87, 209, 41, 45, 167 } /* left = d153 */, + { 51, 38, 25, 113, 58, 164, 70, 93, 97 } /* left = d63 */, + { 55, 25, 21, 118, 95, 215, 38, 39, 66 } /* left = d27 */, + { 47, 54, 34, 146, 108, 203, 72, 103, 151 } /* left = tm */ + }, { /* above = d117 */ + { 46, 27, 80, 150, 55, 124, 55, 121, 135 } /* left = v */, + { 36, 23, 27, 165, 149, 166, 54, 64, 118 } /* left = h */, + { 64, 19, 37, 156, 66, 138, 49, 95, 133 } /* left = dc */, + { 53, 21, 36, 131, 63, 163, 60, 109, 81 } /* left = d45 */, + { 40, 26, 35, 154, 40, 185, 51, 97, 123 } /* left = d135 */, + { 35, 19, 34, 179, 19, 97, 48, 129, 124 } /* left = d117 */, + { 36, 20, 26, 136, 62, 164, 33, 77, 154 } /* left = d153 */, + { 45, 26, 28, 129, 45, 129, 49, 147, 123 } /* left = d63 */, + { 45, 18, 32, 130, 90, 157, 40, 79, 91 } /* left = d27 */, + { 38, 44, 51, 136, 74, 162, 57, 97, 121 } /* left = tm */ + }, { /* above = d153 */ + { 56, 39, 58, 133, 117, 173, 48, 53, 187 } /* left = v */, + { 35, 21, 12, 161, 212, 207, 20, 23, 145 } /* left = h */, + { 75, 17, 22, 136, 138, 185, 32, 34, 166 } /* left = dc */, + { 56, 29, 19, 117, 109, 181, 55, 68, 112 } /* left = d45 */, + { 47, 29, 17, 153, 64, 220, 59, 51, 114 } /* left = d135 */, + { 46, 16, 24, 136, 76, 147, 41, 64, 172 } /* left = d117 */, + { 34, 17, 11, 108, 152, 187, 13, 15, 209 } /* left = d153 */, + { 55, 30, 18, 122, 79, 179, 44, 88, 116 } /* left = d63 */, + { 51, 24, 14, 115, 133, 209, 32, 26, 104 } /* left = d27 */, + { 37, 49, 25, 129, 168, 164, 41, 54, 148 } /* left = tm */ + }, { /* above = d63 */ + { 48, 34, 86, 101, 92, 146, 78, 179, 134 } /* left = v */, + { 47, 22, 24, 138, 187, 178, 68, 69, 59 } /* left = h */, + { 78, 23, 39, 111, 117, 170, 74, 124, 94 } /* left = dc */, + { 56, 25, 33, 105, 112, 187, 95, 177, 129 } /* left = d45 */, + { 48, 31, 27, 114, 63, 183, 82, 116, 56 } /* left = d135 */, + { 43, 28, 37, 121, 63, 123, 61, 192, 169 } /* left = d117 */, + { 42, 17, 24, 109, 97, 177, 56, 76, 122 } /* left = d153 */, + { 46, 23, 32, 74, 86, 150, 67, 183, 88 } /* left = d63 */, + { 58, 18, 28, 105, 139, 182, 70, 92, 63 } /* left = d27 */, + { 36, 38, 48, 92, 122, 165, 88, 137, 91 } /* left = tm */ + }, { /* above = d27 */ + { 62, 44, 61, 123, 105, 189, 48, 57, 64 } /* left = v */, + { 47, 25, 17, 175, 222, 220, 24, 30, 86 } /* left = h */, + { 82, 22, 32, 127, 143, 213, 39, 41, 70 } /* left = dc */, + { 68, 36, 17, 106, 102, 206, 59, 74, 74 } /* left = d45 */, + { 57, 39, 23, 151, 68, 216, 55, 63, 58 } /* left = d135 */, + { 49, 30, 35, 141, 70, 168, 82, 40, 115 } /* left = d117 */, + { 51, 25, 15, 136, 129, 202, 38, 35, 139 } /* left = d153 */, + { 59, 39, 19, 114, 75, 180, 77, 104, 42 } /* left = d63 */, + { 68, 26, 16, 111, 141, 215, 29, 28, 28 } /* left = d27 */, + { 40, 61, 26, 126, 152, 206, 61, 59, 93 } /* left = tm */ + }, { /* above = tm */ + { 44, 78, 115, 132, 119, 173, 71, 112, 93 } /* left = v */, + { 39, 38, 21, 184, 227, 206, 42, 32, 64 } /* left = h */, + { 65, 70, 60, 155, 159, 199, 61, 60, 81 } /* left = dc */, + { 58, 47, 36, 124, 137, 193, 80, 82, 78 } /* left = d45 */, + { 49, 50, 35, 144, 95, 205, 63, 78, 59 } /* left = d135 */, + { 41, 53, 52, 148, 71, 142, 65, 128, 51 } /* left = d117 */, + { 40, 36, 28, 143, 143, 202, 40, 55, 137 } /* left = d153 */, + { 42, 44, 44, 104, 105, 164, 64, 130, 80 } /* left = d63 */, + { 52, 34, 29, 129, 183, 227, 42, 35, 43 } /* left = d27 */, + { 43, 81, 53, 140, 169, 204, 68, 84, 72 } /* left = tm */ + } +}; + +const uint8_t ff_vp9_default_kf_uvmode_probs[10][9] = { + { 118, 15, 123, 148, 131, 101, 44, 93, 131 } /* y = v */, + { 113, 12, 23, 188, 226, 142, 26, 32, 125 } /* y = h */, + { 144, 11, 54, 157, 195, 130, 46, 58, 108 } /* y = dc */, + { 120, 11, 50, 123, 163, 135, 64, 77, 103 } /* y = d45 */, + { 113, 9, 36, 155, 111, 157, 32, 44, 161 } /* y = d135 */, + { 116, 9, 55, 176, 76, 96, 37, 61, 149 } /* y = d117 */, + { 115, 9, 28, 141, 161, 167, 21, 25, 193 } /* y = d153 */, + { 116, 12, 64, 120, 140, 125, 49, 115, 121 } /* y = d63 */, + { 120, 12, 32, 145, 195, 142, 32, 38, 86 } /* y = d27 */, + { 102, 19, 66, 162, 182, 122, 35, 59, 128 } /* y = tm */ +}; + +const int8_t ff_vp9_inter_mode_tree[3][2] = { + { -ZEROMV, 1 }, // '0' + { -NEARESTMV, 2 }, // '10' + { -NEARMV, -NEWMV }, // '11x' +}; + +const int8_t ff_vp9_filter_tree[2][2] = { + { -0, 1 }, // '0' + { -1, -2 }, // '1x' +}; + +const enum FilterMode ff_vp9_filter_lut[3] = { + FILTER_8TAP_REGULAR, + FILTER_8TAP_SMOOTH, + FILTER_8TAP_SHARP, +}; + +const int16_t ff_vp9_dc_qlookup[3][256] = { + { + 4, 8, 8, 9, 10, 11, 12, 12, + 13, 14, 15, 16, 17, 18, 19, 19, + 20, 21, 22, 23, 24, 25, 26, 26, + 27, 28, 29, 30, 31, 32, 32, 33, + 34, 35, 36, 37, 38, 38, 39, 40, + 41, 42, 43, 43, 44, 45, 46, 47, + 48, 48, 49, 50, 51, 52, 53, 53, + 54, 55, 56, 57, 57, 58, 59, 60, + 61, 62, 62, 63, 64, 65, 66, 66, + 67, 68, 69, 70, 70, 71, 72, 73, + 74, 74, 75, 76, 77, 78, 78, 79, + 80, 81, 81, 82, 83, 84, 85, 85, + 87, 88, 90, 92, 93, 95, 96, 98, + 99, 101, 102, 104, 105, 107, 108, 110, + 111, 113, 114, 116, 117, 118, 120, 121, + 123, 125, 127, 129, 131, 134, 136, 138, + 140, 142, 144, 146, 148, 150, 152, 154, + 156, 158, 161, 164, 166, 169, 172, 174, + 177, 180, 182, 185, 187, 190, 192, 195, + 199, 202, 205, 208, 211, 214, 217, 220, + 223, 226, 230, 233, 237, 240, 243, 247, + 250, 253, 257, 261, 265, 269, 272, 276, + 280, 284, 288, 292, 296, 300, 304, 309, + 313, 317, 322, 326, 330, 335, 340, 344, + 349, 354, 359, 364, 369, 374, 379, 384, + 389, 395, 400, 406, 411, 417, 423, 429, + 435, 441, 447, 454, 461, 467, 475, 482, + 489, 497, 505, 513, 522, 530, 539, 549, + 559, 569, 579, 590, 602, 614, 626, 640, + 654, 668, 684, 700, 717, 736, 755, 775, + 796, 819, 843, 869, 896, 925, 955, 988, + 1022, 1058, 1098, 1139, 1184, 1232, 1282, 1336, + }, { + 4, 9, 10, 13, 15, 17, 20, 22, + 25, 28, 31, 34, 37, 40, 43, 47, + 50, 53, 57, 60, 64, 68, 71, 75, + 78, 82, 86, 90, 93, 97, 101, 105, + 109, 113, 116, 120, 124, 128, 132, 136, + 140, 143, 147, 151, 155, 159, 163, 166, + 170, 174, 178, 182, 185, 189, 193, 197, + 200, 204, 208, 212, 215, 219, 223, 226, + 230, 233, 237, 241, 244, 248, 251, 255, + 259, 262, 266, 269, 273, 276, 280, 283, + 287, 290, 293, 297, 300, 304, 307, 310, + 314, 317, 321, 324, 327, 331, 334, 337, + 343, 350, 356, 362, 369, 375, 381, 387, + 394, 400, 406, 412, 418, 424, 430, 436, + 442, 448, 454, 460, 466, 472, 478, 484, + 490, 499, 507, 516, 525, 533, 542, 550, + 559, 567, 576, 584, 592, 601, 609, 617, + 625, 634, 644, 655, 666, 676, 687, 698, + 708, 718, 729, 739, 749, 759, 770, 782, + 795, 807, 819, 831, 844, 856, 868, 880, + 891, 906, 920, 933, 947, 961, 975, 988, + 1001, 1015, 1030, 1045, 1061, 1076, 1090, 1105, + 1120, 1137, 1153, 1170, 1186, 1202, 1218, 1236, + 1253, 1271, 1288, 1306, 1323, 1342, 1361, 1379, + 1398, 1416, 1436, 1456, 1476, 1496, 1516, 1537, + 1559, 1580, 1601, 1624, 1647, 1670, 1692, 1717, + 1741, 1766, 1791, 1817, 1844, 1871, 1900, 1929, + 1958, 1990, 2021, 2054, 2088, 2123, 2159, 2197, + 2236, 2276, 2319, 2363, 2410, 2458, 2508, 2561, + 2616, 2675, 2737, 2802, 2871, 2944, 3020, 3102, + 3188, 3280, 3375, 3478, 3586, 3702, 3823, 3953, + 4089, 4236, 4394, 4559, 4737, 4929, 5130, 5347, + }, { + 4, 12, 18, 25, 33, 41, 50, 60, + 70, 80, 91, 103, 115, 127, 140, 153, + 166, 180, 194, 208, 222, 237, 251, 266, + 281, 296, 312, 327, 343, 358, 374, 390, + 405, 421, 437, 453, 469, 484, 500, 516, + 532, 548, 564, 580, 596, 611, 627, 643, + 659, 674, 690, 706, 721, 737, 752, 768, + 783, 798, 814, 829, 844, 859, 874, 889, + 904, 919, 934, 949, 964, 978, 993, 1008, + 1022, 1037, 1051, 1065, 1080, 1094, 1108, 1122, + 1136, 1151, 1165, 1179, 1192, 1206, 1220, 1234, + 1248, 1261, 1275, 1288, 1302, 1315, 1329, 1342, + 1368, 1393, 1419, 1444, 1469, 1494, 1519, 1544, + 1569, 1594, 1618, 1643, 1668, 1692, 1717, 1741, + 1765, 1789, 1814, 1838, 1862, 1885, 1909, 1933, + 1957, 1992, 2027, 2061, 2096, 2130, 2165, 2199, + 2233, 2267, 2300, 2334, 2367, 2400, 2434, 2467, + 2499, 2532, 2575, 2618, 2661, 2704, 2746, 2788, + 2830, 2872, 2913, 2954, 2995, 3036, 3076, 3127, + 3177, 3226, 3275, 3324, 3373, 3421, 3469, 3517, + 3565, 3621, 3677, 3733, 3788, 3843, 3897, 3951, + 4005, 4058, 4119, 4181, 4241, 4301, 4361, 4420, + 4479, 4546, 4612, 4677, 4742, 4807, 4871, 4942, + 5013, 5083, 5153, 5222, 5291, 5367, 5442, 5517, + 5591, 5665, 5745, 5825, 5905, 5984, 6063, 6149, + 6234, 6319, 6404, 6495, 6587, 6678, 6769, 6867, + 6966, 7064, 7163, 7269, 7376, 7483, 7599, 7715, + 7832, 7958, 8085, 8214, 8352, 8492, 8635, 8788, + 8945, 9104, 9275, 9450, 9639, 9832, 10031, 10245, + 10465, 10702, 10946, 11210, 11482, 11776, 12081, 12409, + 12750, 13118, 13501, 13913, 14343, 14807, 15290, 15812, + 16356, 16943, 17575, 18237, 18949, 19718, 20521, 21387, + } +}; + +const int16_t ff_vp9_ac_qlookup[3][256] = { + { + 4, 8, 9, 10, 11, 12, 13, 14, + 15, 16, 17, 18, 19, 20, 21, 22, + 23, 24, 25, 26, 27, 28, 29, 30, + 31, 32, 33, 34, 35, 36, 37, 38, + 39, 40, 41, 42, 43, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 58, 59, 60, 61, 62, + 63, 64, 65, 66, 67, 68, 69, 70, + 71, 72, 73, 74, 75, 76, 77, 78, + 79, 80, 81, 82, 83, 84, 85, 86, + 87, 88, 89, 90, 91, 92, 93, 94, + 95, 96, 97, 98, 99, 100, 101, 102, + 104, 106, 108, 110, 112, 114, 116, 118, + 120, 122, 124, 126, 128, 130, 132, 134, + 136, 138, 140, 142, 144, 146, 148, 150, + 152, 155, 158, 161, 164, 167, 170, 173, + 176, 179, 182, 185, 188, 191, 194, 197, + 200, 203, 207, 211, 215, 219, 223, 227, + 231, 235, 239, 243, 247, 251, 255, 260, + 265, 270, 275, 280, 285, 290, 295, 300, + 305, 311, 317, 323, 329, 335, 341, 347, + 353, 359, 366, 373, 380, 387, 394, 401, + 408, 416, 424, 432, 440, 448, 456, 465, + 474, 483, 492, 501, 510, 520, 530, 540, + 550, 560, 571, 582, 593, 604, 615, 627, + 639, 651, 663, 676, 689, 702, 715, 729, + 743, 757, 771, 786, 801, 816, 832, 848, + 864, 881, 898, 915, 933, 951, 969, 988, + 1007, 1026, 1046, 1066, 1087, 1108, 1129, 1151, + 1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343, + 1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567, + 1597, 1628, 1660, 1692, 1725, 1759, 1793, 1828, + }, { + 4, 9, 11, 13, 16, 18, 21, 24, + 27, 30, 33, 37, 40, 44, 48, 51, + 55, 59, 63, 67, 71, 75, 79, 83, + 88, 92, 96, 100, 105, 109, 114, 118, + 122, 127, 131, 136, 140, 145, 149, 154, + 158, 163, 168, 172, 177, 181, 186, 190, + 195, 199, 204, 208, 213, 217, 222, 226, + 231, 235, 240, 244, 249, 253, 258, 262, + 267, 271, 275, 280, 284, 289, 293, 297, + 302, 306, 311, 315, 319, 324, 328, 332, + 337, 341, 345, 349, 354, 358, 362, 367, + 371, 375, 379, 384, 388, 392, 396, 401, + 409, 417, 425, 433, 441, 449, 458, 466, + 474, 482, 490, 498, 506, 514, 523, 531, + 539, 547, 555, 563, 571, 579, 588, 596, + 604, 616, 628, 640, 652, 664, 676, 688, + 700, 713, 725, 737, 749, 761, 773, 785, + 797, 809, 825, 841, 857, 873, 889, 905, + 922, 938, 954, 970, 986, 1002, 1018, 1038, + 1058, 1078, 1098, 1118, 1138, 1158, 1178, 1198, + 1218, 1242, 1266, 1290, 1314, 1338, 1362, 1386, + 1411, 1435, 1463, 1491, 1519, 1547, 1575, 1603, + 1631, 1663, 1695, 1727, 1759, 1791, 1823, 1859, + 1895, 1931, 1967, 2003, 2039, 2079, 2119, 2159, + 2199, 2239, 2283, 2327, 2371, 2415, 2459, 2507, + 2555, 2603, 2651, 2703, 2755, 2807, 2859, 2915, + 2971, 3027, 3083, 3143, 3203, 3263, 3327, 3391, + 3455, 3523, 3591, 3659, 3731, 3803, 3876, 3952, + 4028, 4104, 4184, 4264, 4348, 4432, 4516, 4604, + 4692, 4784, 4876, 4972, 5068, 5168, 5268, 5372, + 5476, 5584, 5692, 5804, 5916, 6032, 6148, 6268, + 6388, 6512, 6640, 6768, 6900, 7036, 7172, 7312, + }, { + 4, 13, 19, 27, 35, 44, 54, 64, + 75, 87, 99, 112, 126, 139, 154, 168, + 183, 199, 214, 230, 247, 263, 280, 297, + 314, 331, 349, 366, 384, 402, 420, 438, + 456, 475, 493, 511, 530, 548, 567, 586, + 604, 623, 642, 660, 679, 698, 716, 735, + 753, 772, 791, 809, 828, 846, 865, 884, + 902, 920, 939, 957, 976, 994, 1012, 1030, + 1049, 1067, 1085, 1103, 1121, 1139, 1157, 1175, + 1193, 1211, 1229, 1246, 1264, 1282, 1299, 1317, + 1335, 1352, 1370, 1387, 1405, 1422, 1440, 1457, + 1474, 1491, 1509, 1526, 1543, 1560, 1577, 1595, + 1627, 1660, 1693, 1725, 1758, 1791, 1824, 1856, + 1889, 1922, 1954, 1987, 2020, 2052, 2085, 2118, + 2150, 2183, 2216, 2248, 2281, 2313, 2346, 2378, + 2411, 2459, 2508, 2556, 2605, 2653, 2701, 2750, + 2798, 2847, 2895, 2943, 2992, 3040, 3088, 3137, + 3185, 3234, 3298, 3362, 3426, 3491, 3555, 3619, + 3684, 3748, 3812, 3876, 3941, 4005, 4069, 4149, + 4230, 4310, 4390, 4470, 4550, 4631, 4711, 4791, + 4871, 4967, 5064, 5160, 5256, 5352, 5448, 5544, + 5641, 5737, 5849, 5961, 6073, 6185, 6297, 6410, + 6522, 6650, 6778, 6906, 7034, 7162, 7290, 7435, + 7579, 7723, 7867, 8011, 8155, 8315, 8475, 8635, + 8795, 8956, 9132, 9308, 9484, 9660, 9836, 10028, + 10220, 10412, 10604, 10812, 11020, 11228, 11437, 11661, + 11885, 12109, 12333, 12573, 12813, 13053, 13309, 13565, + 13821, 14093, 14365, 14637, 14925, 15213, 15502, 15806, + 16110, 16414, 16734, 17054, 17390, 17726, 18062, 18414, + 18766, 19134, 19502, 19886, 20270, 20670, 21070, 21486, + 21902, 22334, 22766, 23214, 23662, 24126, 24590, 25070, + 25551, 26047, 26559, 27071, 27599, 28143, 28687, 29247, + } +}; + +const enum TxfmType ff_vp9_intra_txfm_type[14] = { + [VERT_PRED] = ADST_DCT, + [HOR_PRED] = DCT_ADST, + [DC_PRED] = DCT_DCT, + [DIAG_DOWN_LEFT_PRED] = DCT_DCT, + [DIAG_DOWN_RIGHT_PRED] = ADST_ADST, + [VERT_RIGHT_PRED] = ADST_DCT, + [HOR_DOWN_PRED] = DCT_ADST, + [VERT_LEFT_PRED] = ADST_DCT, + [HOR_UP_PRED] = DCT_ADST, + [TM_VP8_PRED] = ADST_ADST, + [NEARESTMV] = DCT_DCT, + [NEARMV] = DCT_DCT, + [ZEROMV] = DCT_DCT, + [NEWMV] = DCT_DCT, +}; + +const int16_t ff_vp9_default_scan_4x4[16] = { + 0, 1, 4, 5, + 2, 8, 3, 6, + 12, 9, 7, 10, + 13, 11, 14, 15, +}; + +const int16_t ff_vp9_col_scan_4x4[16] = { + 0, 1, 2, 4, + 3, 5, 6, 8, + 7, 9, 10, 12, + 13, 11, 14, 15, +}; + +const int16_t ff_vp9_row_scan_4x4[16] = { + 0, 4, 1, 8, + 5, 12, 9, 2, + 6, 13, 3, 10, + 7, 14, 11, 15, +}; + +const int16_t ff_vp9_default_scan_8x8[64] = { + 0, 1, 8, 2, 9, 16, 10, 3, + 17, 24, 18, 11, 4, 25, 32, 19, + 12, 26, 5, 33, 20, 27, 40, 13, + 34, 6, 41, 28, 21, 35, 42, 48, + 14, 7, 36, 29, 43, 56, 49, 22, + 15, 37, 50, 44, 57, 30, 23, 51, + 45, 58, 38, 31, 52, 59, 39, 46, + 53, 60, 47, 54, 61, 55, 62, 63, +}; + +const int16_t ff_vp9_col_scan_8x8[64] = { + 0, 1, 2, 8, 3, 9, 4, 10, + 16, 5, 11, 17, 12, 18, 6, 24, + 19, 13, 25, 7, 26, 20, 32, 14, + 27, 21, 33, 28, 34, 15, 22, 35, + 40, 29, 41, 36, 23, 30, 42, 37, + 48, 43, 31, 44, 49, 38, 50, 56, + 45, 39, 51, 57, 52, 46, 58, 53, + 59, 47, 60, 54, 61, 55, 62, 63, +}; + +const int16_t ff_vp9_row_scan_8x8[64] = { + 0, 8, 16, 1, 9, 24, 2, 17, + 32, 10, 25, 3, 40, 18, 11, 33, + 26, 19, 4, 48, 41, 34, 12, 27, + 56, 20, 5, 42, 35, 13, 49, 28, + 6, 21, 43, 36, 14, 50, 29, 57, + 7, 44, 22, 37, 51, 15, 58, 30, + 23, 45, 52, 38, 59, 31, 46, 53, + 39, 60, 47, 61, 54, 62, 55, 63, +}; + +const int16_t ff_vp9_default_scan_16x16[256] = { + 0, 1, 16, 2, 17, 32, 3, 18, 33, 48, 4, 34, 19, 49, 20, 5, + 35, 64, 50, 36, 65, 21, 6, 51, 80, 66, 37, 22, 52, 7, 81, 67, + 38, 82, 53, 23, 96, 68, 8, 83, 97, 54, 39, 69, 112, 24, 98, 84, + 70, 55, 9, 40, 85, 99, 113, 128, 25, 114, 100, 71, 86, 56, 10, 41, + 115, 101, 129, 116, 72, 87, 26, 130, 144, 102, 57, 11, 42, 117, 131, 145, + 88, 103, 27, 73, 132, 118, 146, 58, 160, 12, 43, 133, 147, 104, 89, 119, + 161, 74, 148, 134, 28, 162, 59, 13, 176, 120, 149, 90, 135, 105, 163, 44, + 75, 177, 164, 29, 150, 121, 136, 178, 165, 14, 106, 60, 91, 151, 45, 179, + 192, 137, 166, 122, 76, 180, 152, 30, 61, 15, 107, 167, 181, 193, 92, 208, + 46, 138, 123, 153, 194, 77, 168, 182, 31, 195, 209, 183, 108, 139, 62, 154, + 47, 196, 93, 169, 210, 197, 224, 124, 184, 211, 78, 109, 170, 155, 63, 198, + 212, 185, 225, 240, 140, 94, 199, 125, 79, 213, 226, 171, 186, 156, 214, 200, + 110, 227, 141, 95, 241, 215, 228, 201, 126, 242, 187, 172, 157, 229, 111, 216, + 243, 142, 202, 230, 127, 217, 244, 173, 188, 231, 158, 203, 143, 245, 218, 232, + 189, 246, 159, 174, 233, 247, 219, 204, 175, 190, 248, 234, 205, 220, 249, 191, + 235, 221, 250, 206, 222, 251, 236, 207, 237, 223, 252, 238, 253, 239, 254, 255, +}; + +const int16_t ff_vp9_col_scan_16x16[256] = { + 0, 1, 2, 3, 16, 4, 17, 5, 18, 6, 19, 32, 20, 7, 33, 21, + 34, 8, 35, 22, 48, 36, 9, 49, 23, 50, 37, 10, 38, 51, 24, 64, + 52, 11, 65, 39, 25, 53, 66, 54, 40, 67, 12, 80, 26, 68, 55, 81, + 41, 69, 13, 27, 82, 56, 70, 83, 42, 14, 84, 96, 71, 28, 57, 85, + 97, 15, 72, 98, 43, 86, 58, 99, 29, 87, 100, 112, 73, 44, 101, 59, + 30, 113, 88, 114, 74, 128, 102, 45, 31, 115, 60, 103, 89, 116, 75, 129, + 117, 46, 104, 90, 61, 130, 118, 131, 132, 105, 76, 47, 119, 144, 91, 62, + 133, 106, 145, 120, 146, 134, 77, 147, 121, 92, 135, 148, 63, 107, 136, 122, + 93, 149, 160, 78, 150, 137, 108, 161, 162, 151, 123, 79, 138, 163, 152, 94, + 164, 109, 165, 153, 124, 139, 176, 166, 95, 177, 167, 110, 154, 178, 125, 179, + 140, 168, 155, 111, 180, 192, 181, 169, 141, 126, 182, 193, 194, 156, 183, 170, + 195, 127, 142, 196, 184, 208, 197, 157, 171, 143, 185, 198, 209, 199, 210, 172, + 158, 186, 211, 224, 212, 200, 240, 159, 213, 225, 187, 201, 173, 226, 214, 215, + 227, 202, 228, 188, 241, 216, 174, 229, 242, 203, 243, 217, 230, 175, 189, 244, + 231, 204, 218, 232, 245, 219, 246, 190, 233, 205, 191, 247, 234, 248, 220, 206, + 249, 235, 221, 207, 250, 236, 222, 251, 223, 237, 238, 252, 239, 253, 254, 255, +}; + +const int16_t ff_vp9_row_scan_16x16[256] = { + 0, 16, 32, 1, 48, 17, 64, 33, 2, 80, 18, 49, 96, 34, 3, 65, + 19, 112, 50, 81, 35, 4, 128, 66, 20, 97, 51, 82, 5, 144, 36, 67, + 113, 98, 21, 52, 160, 83, 129, 37, 68, 6, 114, 176, 99, 53, 22, 84, + 145, 38, 69, 130, 7, 115, 192, 100, 54, 23, 85, 161, 146, 131, 39, 70, + 208, 116, 8, 101, 177, 55, 86, 24, 162, 147, 132, 71, 224, 117, 40, 102, + 9, 148, 56, 87, 193, 163, 240, 133, 178, 25, 118, 72, 41, 103, 164, 10, + 149, 88, 134, 209, 179, 57, 119, 194, 26, 73, 165, 150, 104, 42, 135, 11, + 180, 120, 89, 225, 195, 58, 27, 210, 151, 181, 166, 74, 43, 105, 12, 136, + 90, 59, 241, 121, 28, 196, 167, 211, 152, 44, 182, 137, 75, 13, 226, 106, + 122, 60, 197, 91, 168, 29, 183, 153, 14, 76, 212, 138, 45, 107, 15, 198, + 92, 227, 169, 30, 123, 154, 61, 242, 184, 213, 139, 46, 77, 31, 108, 170, + 199, 185, 124, 228, 93, 155, 214, 62, 140, 243, 78, 47, 200, 109, 186, 171, + 201, 94, 63, 215, 229, 156, 79, 125, 141, 110, 216, 187, 172, 244, 202, 230, + 217, 95, 157, 126, 245, 111, 142, 231, 188, 127, 158, 218, 173, 232, 246, 233, + 203, 143, 247, 174, 189, 159, 219, 204, 248, 234, 249, 175, 190, 220, 205, 250, + 235, 191, 221, 251, 236, 206, 252, 222, 207, 237, 223, 253, 238, 254, 239, 255, +}; + +const int16_t ff_vp9_default_scan_32x32[1024] = { + 0, 1, 32, 2, 33, 64, 3, 34, 65, 4, 96, 35, 66, 5, 36, 97, 67, 128, 98, 68, 37, 6, 129, 99, 7, 160, 69, 38, 130, 100, 161, 131, + 39, 70, 8, 101, 162, 132, 192, 71, 40, 9, 102, 163, 133, 193, 72, 224, 103, 41, 164, 10, 194, 134, 165, 73, 104, 135, 225, 42, 195, 11, 256, 166, + 226, 196, 74, 105, 136, 43, 12, 167, 197, 227, 257, 75, 106, 137, 228, 44, 198, 168, 258, 288, 13, 229, 76, 107, 199, 138, 259, 169, 289, 45, 230, 260, + 200, 108, 14, 170, 139, 320, 290, 77, 231, 261, 46, 201, 140, 291, 109, 232, 321, 262, 171, 78, 292, 15, 322, 202, 263, 352, 172, 293, 233, 141, 323, 110, + 47, 203, 264, 234, 294, 353, 324, 16, 79, 204, 265, 295, 325, 173, 354, 142, 235, 384, 48, 296, 111, 266, 355, 326, 80, 17, 205, 236, 174, 356, 385, 327, + 143, 297, 267, 357, 386, 112, 49, 328, 298, 206, 416, 237, 358, 387, 81, 175, 18, 329, 359, 388, 299, 330, 389, 113, 417, 238, 360, 50, 207, 418, 390, 331, + 19, 448, 361, 82, 419, 391, 239, 51, 362, 420, 114, 449, 480, 421, 83, 363, 450, 422, 512, 451, 423, 115, 452, 481, 453, 482, 454, 544, 483, 455, 513, 484, + 514, 485, 515, 486, 545, 576, 487, 546, 547, 608, 577, 578, 579, 609, 610, 611, 20, 144, 268, 392, 516, 640, 21, 52, 145, 176, 269, 300, 393, 424, 517, 548, + 641, 672, 22, 53, 84, 146, 177, 208, 270, 301, 332, 394, 425, 456, 518, 549, 580, 642, 673, 704, 23, 54, 85, 116, 147, 178, 209, 240, 271, 302, 333, 364, + 395, 426, 457, 488, 519, 550, 581, 612, 643, 674, 705, 736, 55, 86, 117, 179, 210, 241, 303, 334, 365, 427, 458, 489, 551, 582, 613, 675, 706, 737, 87, 118, + 211, 242, 335, 366, 459, 490, 583, 614, 707, 738, 119, 243, 367, 491, 615, 739, 24, 148, 272, 396, 520, 644, 768, 25, 56, 149, 180, 273, 304, 397, 428, 521, + 552, 645, 676, 769, 800, 26, 57, 88, 150, 181, 212, 274, 305, 336, 398, 429, 460, 522, 553, 584, 646, 677, 708, 770, 801, 832, 27, 58, 89, 120, 151, 182, + 213, 244, 275, 306, 337, 368, 399, 430, 461, 492, 523, 554, 585, 616, 647, 678, 709, 740, 771, 802, 833, 864, 59, 90, 121, 183, 214, 245, 307, 338, 369, 431, + 462, 493, 555, 586, 617, 679, 710, 741, 803, 834, 865, 91, 122, 215, 246, 339, 370, 463, 494, 587, 618, 711, 742, 835, 866, 123, 247, 371, 495, 619, 743, 867, + 28, 152, 276, 400, 524, 648, 772, 896, 29, 60, 153, 184, 277, 308, 401, 432, 525, 556, 649, 680, 773, 804, 897, 928, 30, 61, 92, 154, 185, 216, 278, 309, + 340, 402, 433, 464, 526, 557, 588, 650, 681, 712, 774, 805, 836, 898, 929, 960, 31, 62, 93, 124, 155, 186, 217, 248, 279, 310, 341, 372, 403, 434, 465, 496, + 527, 558, 589, 620, 651, 682, 713, 744, 775, 806, 837, 868, 899, 930, 961, 992, 63, 94, 125, 187, 218, 249, 311, 342, 373, 435, 466, 497, 559, 590, 621, 683, + 714, 745, 807, 838, 869, 931, 962, 993, 95, 126, 219, 250, 343, 374, 467, 498, 591, 622, 715, 746, 839, 870, 963, 994, 127, 251, 375, 499, 623, 747, 871, 995, + 156, 280, 404, 528, 652, 776, 900, 157, 188, 281, 312, 405, 436, 529, 560, 653, 684, 777, 808, 901, 932, 158, 189, 220, 282, 313, 344, 406, 437, 468, 530, 561, + 592, 654, 685, 716, 778, 809, 840, 902, 933, 964, 159, 190, 221, 252, 283, 314, 345, 376, 407, 438, 469, 500, 531, 562, 593, 624, 655, 686, 717, 748, 779, 810, + 841, 872, 903, 934, 965, 996, 191, 222, 253, 315, 346, 377, 439, 470, 501, 563, 594, 625, 687, 718, 749, 811, 842, 873, 935, 966, 997, 223, 254, 347, 378, 471, + 502, 595, 626, 719, 750, 843, 874, 967, 998, 255, 379, 503, 627, 751, 875, 999, 284, 408, 532, 656, 780, 904, 285, 316, 409, 440, 533, 564, 657, 688, 781, 812, + 905, 936, 286, 317, 348, 410, 441, 472, 534, 565, 596, 658, 689, 720, 782, 813, 844, 906, 937, 968, 287, 318, 349, 380, 411, 442, 473, 504, 535, 566, 597, 628, + 659, 690, 721, 752, 783, 814, 845, 876, 907, 938, 969, 1000, 319, 350, 381, 443, 474, 505, 567, 598, 629, 691, 722, 753, 815, 846, 877, 939, 970, 1001, 351, 382, + 475, 506, 599, 630, 723, 754, 847, 878, 971, 1002, 383, 507, 631, 755, 879, 1003, 412, 536, 660, 784, 908, 413, 444, 537, 568, 661, 692, 785, 816, 909, 940, 414, + 445, 476, 538, 569, 600, 662, 693, 724, 786, 817, 848, 910, 941, 972, 415, 446, 477, 508, 539, 570, 601, 632, 663, 694, 725, 756, 787, 818, 849, 880, 911, 942, + 973, 1004, 447, 478, 509, 571, 602, 633, 695, 726, 757, 819, 850, 881, 943, 974, 1005, 479, 510, 603, 634, 727, 758, 851, 882, 975, 1006, 511, 635, 759, 883, 1007, + 540, 664, 788, 912, 541, 572, 665, 696, 789, 820, 913, 944, 542, 573, 604, 666, 697, 728, 790, 821, 852, 914, 945, 976, 543, 574, 605, 636, 667, 698, 729, 760, + 791, 822, 853, 884, 915, 946, 977, 1008, 575, 606, 637, 699, 730, 761, 823, 854, 885, 947, 978, 1009, 607, 638, 731, 762, 855, 886, 979, 1010, 639, 763, 887, 1011, + 668, 792, 916, 669, 700, 793, 824, 917, 948, 670, 701, 732, 794, 825, 856, 918, 949, 980, 671, 702, 733, 764, 795, 826, 857, 888, 919, 950, 981, 1012, 703, 734, + 765, 827, 858, 889, 951, 982, 1013, 735, 766, 859, 890, 983, 1014, 767, 891, 1015, 796, 920, 797, 828, 921, 952, 798, 829, 860, 922, 953, 984, 799, 830, 861, 892, + 923, 954, 985, 1016, 831, 862, 893, 955, 986, 1017, 863, 894, 987, 1018, 895, 1019, 924, 925, 956, 926, 957, 988, 927, 958, 989, 1020, 959, 990, 1021, 991, 1022, 1023, +}; + +const int16_t * const ff_vp9_scans[5][4] = { + { + ff_vp9_default_scan_4x4, ff_vp9_col_scan_4x4, + ff_vp9_row_scan_4x4, ff_vp9_default_scan_4x4 + }, { + ff_vp9_default_scan_8x8, ff_vp9_col_scan_8x8, + ff_vp9_row_scan_8x8, ff_vp9_default_scan_8x8 + }, { + ff_vp9_default_scan_16x16, ff_vp9_col_scan_16x16, + ff_vp9_row_scan_16x16, ff_vp9_default_scan_16x16 + }, { + ff_vp9_default_scan_32x32, ff_vp9_default_scan_32x32, + ff_vp9_default_scan_32x32, ff_vp9_default_scan_32x32 + }, { // lossless + ff_vp9_default_scan_4x4, ff_vp9_default_scan_4x4, + ff_vp9_default_scan_4x4, ff_vp9_default_scan_4x4 + } +}; + +const int16_t ff_vp9_default_scan_4x4_nb[16][2] = { + { 0, 0 }, { 0, 0 }, { 4, 1 }, { 1, 1 }, + { 4, 4 }, { 2, 2 }, { 5, 2 }, { 8, 8 }, + { 8, 5 }, { 6, 3 }, { 9, 6 }, { 12, 9 }, + { 10, 7 }, { 13, 10 }, { 14, 11 }, { 0, 0 }, +}; + +const int16_t ff_vp9_col_scan_4x4_nb[16][2] = { + { 0, 0 }, { 1, 1 }, { 0, 0 }, { 2, 2 }, + { 4, 4 }, { 5, 5 }, { 4, 4 }, { 6, 6 }, + { 8, 8 }, { 9, 9 }, { 8, 8 }, { 12, 12 }, + { 10, 10 }, { 13, 13 }, { 14, 14 }, { 0, 0 }, +}; + +const int16_t ff_vp9_row_scan_4x4_nb[16][2] = { + { 0, 0 }, { 0, 0 }, { 4, 4 }, { 1, 1 }, + { 8, 8 }, { 5, 5 }, { 1, 1 }, { 2, 2 }, + { 9, 9 }, { 2, 2 }, { 6, 6 }, { 3, 3 }, + { 10, 10 }, { 7, 7 }, { 11, 11 }, { 0, 0 }, +}; + +const int16_t ff_vp9_default_scan_8x8_nb[64][2] = { + { 0, 0 }, { 0, 0 }, { 1, 1 }, { 8, 1 }, + { 8, 8 }, { 9, 2 }, { 2, 2 }, { 16, 9 }, + { 16, 16 }, { 17, 10 }, { 10, 3 }, { 3, 3 }, + { 24, 17 }, { 24, 24 }, { 18, 11 }, { 11, 4 }, + { 25, 18 }, { 4, 4 }, { 32, 25 }, { 19, 12 }, + { 26, 19 }, { 32, 32 }, { 12, 5 }, { 33, 26 }, + { 5, 5 }, { 40, 33 }, { 27, 20 }, { 20, 13 }, + { 34, 27 }, { 41, 34 }, { 40, 40 }, { 13, 6 }, + { 6, 6 }, { 35, 28 }, { 28, 21 }, { 42, 35 }, + { 48, 48 }, { 48, 41 }, { 21, 14 }, { 14, 7 }, + { 36, 29 }, { 49, 42 }, { 43, 36 }, { 56, 49 }, + { 29, 22 }, { 22, 15 }, { 50, 43 }, { 44, 37 }, + { 57, 50 }, { 37, 30 }, { 30, 23 }, { 51, 44 }, + { 58, 51 }, { 38, 31 }, { 45, 38 }, { 52, 45 }, + { 59, 52 }, { 46, 39 }, { 53, 46 }, { 60, 53 }, + { 54, 47 }, { 61, 54 }, { 62, 55 }, { 0, 0 }, +}; + +const int16_t ff_vp9_col_scan_8x8_nb[64][2] = { + { 0, 0 }, { 1, 1 }, { 0, 0 }, { 2, 2 }, + { 8, 8 }, { 3, 3 }, { 9, 9 }, { 8, 8 }, + { 4, 4 }, { 10, 10 }, { 16, 16 }, { 11, 11 }, + { 17, 17 }, { 5, 5 }, { 16, 16 }, { 18, 18 }, + { 12, 12 }, { 24, 24 }, { 6, 6 }, { 25, 25 }, + { 19, 19 }, { 24, 24 }, { 13, 13 }, { 26, 26 }, + { 20, 20 }, { 32, 32 }, { 27, 27 }, { 33, 33 }, + { 14, 14 }, { 21, 21 }, { 34, 34 }, { 32, 32 }, + { 28, 28 }, { 40, 40 }, { 35, 35 }, { 22, 22 }, + { 29, 29 }, { 41, 41 }, { 36, 36 }, { 40, 40 }, + { 42, 42 }, { 30, 30 }, { 43, 43 }, { 48, 48 }, + { 37, 37 }, { 49, 49 }, { 48, 48 }, { 44, 44 }, + { 38, 38 }, { 50, 50 }, { 56, 56 }, { 51, 51 }, + { 45, 45 }, { 57, 57 }, { 52, 52 }, { 58, 58 }, + { 46, 46 }, { 59, 59 }, { 53, 53 }, { 60, 60 }, + { 54, 54 }, { 61, 61 }, { 62, 62 }, { 0, 0 }, +}; + +const int16_t ff_vp9_row_scan_8x8_nb[64][2] = { + { 0, 0 }, { 8, 8 }, { 0, 0 }, { 1, 1 }, + { 16, 16 }, { 1, 1 }, { 9, 9 }, { 24, 24 }, + { 2, 2 }, { 17, 17 }, { 2, 2 }, { 32, 32 }, + { 10, 10 }, { 3, 3 }, { 25, 25 }, { 18, 18 }, + { 11, 11 }, { 3, 3 }, { 40, 40 }, { 33, 33 }, + { 26, 26 }, { 4, 4 }, { 19, 19 }, { 48, 48 }, + { 12, 12 }, { 4, 4 }, { 34, 34 }, { 27, 27 }, + { 5, 5 }, { 41, 41 }, { 20, 20 }, { 5, 5 }, + { 13, 13 }, { 35, 35 }, { 28, 28 }, { 6, 6 }, + { 42, 42 }, { 21, 21 }, { 49, 49 }, { 6, 6 }, + { 36, 36 }, { 14, 14 }, { 29, 29 }, { 43, 43 }, + { 7, 7 }, { 50, 50 }, { 22, 22 }, { 15, 15 }, + { 37, 37 }, { 44, 44 }, { 30, 30 }, { 51, 51 }, + { 23, 23 }, { 38, 38 }, { 45, 45 }, { 31, 31 }, + { 52, 52 }, { 39, 39 }, { 53, 53 }, { 46, 46 }, + { 54, 54 }, { 47, 47 }, { 55, 55 }, { 0, 0 }, +}; + +const int16_t ff_vp9_default_scan_16x16_nb[256][2] = { + { 0, 0 }, { 0, 0 }, { 1, 1 }, { 16, 1 }, + { 16, 16 }, { 2, 2 }, { 17, 2 }, { 32, 17 }, + { 32, 32 }, { 3, 3 }, { 33, 18 }, { 18, 3 }, + { 48, 33 }, { 19, 4 }, { 4, 4 }, { 34, 19 }, + { 48, 48 }, { 49, 34 }, { 35, 20 }, { 64, 49 }, + { 20, 5 }, { 5, 5 }, { 50, 35 }, { 64, 64 }, + { 65, 50 }, { 36, 21 }, { 21, 6 }, { 51, 36 }, + { 6, 6 }, { 80, 65 }, { 66, 51 }, { 37, 22 }, + { 81, 66 }, { 52, 37 }, { 22, 7 }, { 80, 80 }, + { 67, 52 }, { 7, 7 }, { 82, 67 }, { 96, 81 }, + { 53, 38 }, { 38, 23 }, { 68, 53 }, { 96, 96 }, + { 23, 8 }, { 97, 82 }, { 83, 68 }, { 69, 54 }, + { 54, 39 }, { 8, 8 }, { 39, 24 }, { 84, 69 }, + { 98, 83 }, { 112, 97 }, { 112, 112 }, { 24, 9 }, + { 113, 98 }, { 99, 84 }, { 70, 55 }, { 85, 70 }, + { 55, 40 }, { 9, 9 }, { 40, 25 }, { 114, 99 }, + { 100, 85 }, { 128, 113 }, { 115, 100 }, { 71, 56 }, + { 86, 71 }, { 25, 10 }, { 129, 114 }, { 128, 128 }, + { 101, 86 }, { 56, 41 }, { 10, 10 }, { 41, 26 }, + { 116, 101 }, { 130, 115 }, { 144, 129 }, { 87, 72 }, + { 102, 87 }, { 26, 11 }, { 72, 57 }, { 131, 116 }, + { 117, 102 }, { 145, 130 }, { 57, 42 }, { 144, 144 }, + { 11, 11 }, { 42, 27 }, { 132, 117 }, { 146, 131 }, + { 103, 88 }, { 88, 73 }, { 118, 103 }, { 160, 145 }, + { 73, 58 }, { 147, 132 }, { 133, 118 }, { 27, 12 }, + { 161, 146 }, { 58, 43 }, { 12, 12 }, { 160, 160 }, + { 119, 104 }, { 148, 133 }, { 89, 74 }, { 134, 119 }, + { 104, 89 }, { 162, 147 }, { 43, 28 }, { 74, 59 }, + { 176, 161 }, { 163, 148 }, { 28, 13 }, { 149, 134 }, + { 120, 105 }, { 135, 120 }, { 177, 162 }, { 164, 149 }, + { 13, 13 }, { 105, 90 }, { 59, 44 }, { 90, 75 }, + { 150, 135 }, { 44, 29 }, { 178, 163 }, { 176, 176 }, + { 136, 121 }, { 165, 150 }, { 121, 106 }, { 75, 60 }, + { 179, 164 }, { 151, 136 }, { 29, 14 }, { 60, 45 }, + { 14, 14 }, { 106, 91 }, { 166, 151 }, { 180, 165 }, + { 192, 177 }, { 91, 76 }, { 192, 192 }, { 45, 30 }, + { 137, 122 }, { 122, 107 }, { 152, 137 }, { 193, 178 }, + { 76, 61 }, { 167, 152 }, { 181, 166 }, { 30, 15 }, + { 194, 179 }, { 208, 193 }, { 182, 167 }, { 107, 92 }, + { 138, 123 }, { 61, 46 }, { 153, 138 }, { 46, 31 }, + { 195, 180 }, { 92, 77 }, { 168, 153 }, { 209, 194 }, + { 196, 181 }, { 208, 208 }, { 123, 108 }, { 183, 168 }, + { 210, 195 }, { 77, 62 }, { 108, 93 }, { 169, 154 }, + { 154, 139 }, { 62, 47 }, { 197, 182 }, { 211, 196 }, + { 184, 169 }, { 224, 209 }, { 224, 224 }, { 139, 124 }, + { 93, 78 }, { 198, 183 }, { 124, 109 }, { 78, 63 }, + { 212, 197 }, { 225, 210 }, { 170, 155 }, { 185, 170 }, + { 155, 140 }, { 213, 198 }, { 199, 184 }, { 109, 94 }, + { 226, 211 }, { 140, 125 }, { 94, 79 }, { 240, 225 }, + { 214, 199 }, { 227, 212 }, { 200, 185 }, { 125, 110 }, + { 241, 226 }, { 186, 171 }, { 171, 156 }, { 156, 141 }, + { 228, 213 }, { 110, 95 }, { 215, 200 }, { 242, 227 }, + { 141, 126 }, { 201, 186 }, { 229, 214 }, { 126, 111 }, + { 216, 201 }, { 243, 228 }, { 172, 157 }, { 187, 172 }, + { 230, 215 }, { 157, 142 }, { 202, 187 }, { 142, 127 }, + { 244, 229 }, { 217, 202 }, { 231, 216 }, { 188, 173 }, + { 245, 230 }, { 158, 143 }, { 173, 158 }, { 232, 217 }, + { 246, 231 }, { 218, 203 }, { 203, 188 }, { 174, 159 }, + { 189, 174 }, { 247, 232 }, { 233, 218 }, { 204, 189 }, + { 219, 204 }, { 248, 233 }, { 190, 175 }, { 234, 219 }, + { 220, 205 }, { 249, 234 }, { 205, 190 }, { 221, 206 }, + { 250, 235 }, { 235, 220 }, { 206, 191 }, { 236, 221 }, + { 222, 207 }, { 251, 236 }, { 237, 222 }, { 252, 237 }, + { 238, 223 }, { 253, 238 }, { 254, 239 }, { 0, 0 }, +}; + +const int16_t ff_vp9_col_scan_16x16_nb[256][2] = { + { 0, 0 }, { 1, 1 }, { 2, 2 }, { 0, 0 }, + { 3, 3 }, { 16, 16 }, { 4, 4 }, { 17, 17 }, + { 5, 5 }, { 18, 18 }, { 16, 16 }, { 19, 19 }, + { 6, 6 }, { 32, 32 }, { 20, 20 }, { 33, 33 }, + { 7, 7 }, { 34, 34 }, { 21, 21 }, { 32, 32 }, + { 35, 35 }, { 8, 8 }, { 48, 48 }, { 22, 22 }, + { 49, 49 }, { 36, 36 }, { 9, 9 }, { 37, 37 }, + { 50, 50 }, { 23, 23 }, { 48, 48 }, { 51, 51 }, + { 10, 10 }, { 64, 64 }, { 38, 38 }, { 24, 24 }, + { 52, 52 }, { 65, 65 }, { 53, 53 }, { 39, 39 }, + { 66, 66 }, { 11, 11 }, { 64, 64 }, { 25, 25 }, + { 67, 67 }, { 54, 54 }, { 80, 80 }, { 40, 40 }, + { 68, 68 }, { 12, 12 }, { 26, 26 }, { 81, 81 }, + { 55, 55 }, { 69, 69 }, { 82, 82 }, { 41, 41 }, + { 13, 13 }, { 83, 83 }, { 80, 80 }, { 70, 70 }, + { 27, 27 }, { 56, 56 }, { 84, 84 }, { 96, 96 }, + { 14, 14 }, { 71, 71 }, { 97, 97 }, { 42, 42 }, + { 85, 85 }, { 57, 57 }, { 98, 98 }, { 28, 28 }, + { 86, 86 }, { 99, 99 }, { 96, 96 }, { 72, 72 }, + { 43, 43 }, { 100, 100 }, { 58, 58 }, { 29, 29 }, + { 112, 112 }, { 87, 87 }, { 113, 113 }, { 73, 73 }, + { 112, 112 }, { 101, 101 }, { 44, 44 }, { 30, 30 }, + { 114, 114 }, { 59, 59 }, { 102, 102 }, { 88, 88 }, + { 115, 115 }, { 74, 74 }, { 128, 128 }, { 116, 116 }, + { 45, 45 }, { 103, 103 }, { 89, 89 }, { 60, 60 }, + { 129, 129 }, { 117, 117 }, { 130, 130 }, { 131, 131 }, + { 104, 104 }, { 75, 75 }, { 46, 46 }, { 118, 118 }, + { 128, 128 }, { 90, 90 }, { 61, 61 }, { 132, 132 }, + { 105, 105 }, { 144, 144 }, { 119, 119 }, { 145, 145 }, + { 133, 133 }, { 76, 76 }, { 146, 146 }, { 120, 120 }, + { 91, 91 }, { 134, 134 }, { 147, 147 }, { 62, 62 }, + { 106, 106 }, { 135, 135 }, { 121, 121 }, { 92, 92 }, + { 148, 148 }, { 144, 144 }, { 77, 77 }, { 149, 149 }, + { 136, 136 }, { 107, 107 }, { 160, 160 }, { 161, 161 }, + { 150, 150 }, { 122, 122 }, { 78, 78 }, { 137, 137 }, + { 162, 162 }, { 151, 151 }, { 93, 93 }, { 163, 163 }, + { 108, 108 }, { 164, 164 }, { 152, 152 }, { 123, 123 }, + { 138, 138 }, { 160, 160 }, { 165, 165 }, { 94, 94 }, + { 176, 176 }, { 166, 166 }, { 109, 109 }, { 153, 153 }, + { 177, 177 }, { 124, 124 }, { 178, 178 }, { 139, 139 }, + { 167, 167 }, { 154, 154 }, { 110, 110 }, { 179, 179 }, + { 176, 176 }, { 180, 180 }, { 168, 168 }, { 140, 140 }, + { 125, 125 }, { 181, 181 }, { 192, 192 }, { 193, 193 }, + { 155, 155 }, { 182, 182 }, { 169, 169 }, { 194, 194 }, + { 126, 126 }, { 141, 141 }, { 195, 195 }, { 183, 183 }, + { 192, 192 }, { 196, 196 }, { 156, 156 }, { 170, 170 }, + { 142, 142 }, { 184, 184 }, { 197, 197 }, { 208, 208 }, + { 198, 198 }, { 209, 209 }, { 171, 171 }, { 157, 157 }, + { 185, 185 }, { 210, 210 }, { 208, 208 }, { 211, 211 }, + { 199, 199 }, { 224, 224 }, { 158, 158 }, { 212, 212 }, + { 224, 224 }, { 186, 186 }, { 200, 200 }, { 172, 172 }, + { 225, 225 }, { 213, 213 }, { 214, 214 }, { 226, 226 }, + { 201, 201 }, { 227, 227 }, { 187, 187 }, { 240, 240 }, + { 215, 215 }, { 173, 173 }, { 228, 228 }, { 241, 241 }, + { 202, 202 }, { 242, 242 }, { 216, 216 }, { 229, 229 }, + { 174, 174 }, { 188, 188 }, { 243, 243 }, { 230, 230 }, + { 203, 203 }, { 217, 217 }, { 231, 231 }, { 244, 244 }, + { 218, 218 }, { 245, 245 }, { 189, 189 }, { 232, 232 }, + { 204, 204 }, { 190, 190 }, { 246, 246 }, { 233, 233 }, + { 247, 247 }, { 219, 219 }, { 205, 205 }, { 248, 248 }, + { 234, 234 }, { 220, 220 }, { 206, 206 }, { 249, 249 }, + { 235, 235 }, { 221, 221 }, { 250, 250 }, { 222, 222 }, + { 236, 236 }, { 237, 237 }, { 251, 251 }, { 238, 238 }, + { 252, 252 }, { 253, 253 }, { 254, 254 }, { 0, 0 }, +}; + +const int16_t ff_vp9_row_scan_16x16_nb[256][2] = { + { 0, 0 }, { 16, 16 }, { 0, 0 }, { 32, 32 }, + { 1, 1 }, { 48, 48 }, { 17, 17 }, { 1, 1 }, + { 64, 64 }, { 2, 2 }, { 33, 33 }, { 80, 80 }, + { 18, 18 }, { 2, 2 }, { 49, 49 }, { 3, 3 }, + { 96, 96 }, { 34, 34 }, { 65, 65 }, { 19, 19 }, + { 3, 3 }, { 112, 112 }, { 50, 50 }, { 4, 4 }, + { 81, 81 }, { 35, 35 }, { 66, 66 }, { 4, 4 }, + { 128, 128 }, { 20, 20 }, { 51, 51 }, { 97, 97 }, + { 82, 82 }, { 5, 5 }, { 36, 36 }, { 144, 144 }, + { 67, 67 }, { 113, 113 }, { 21, 21 }, { 52, 52 }, + { 5, 5 }, { 98, 98 }, { 160, 160 }, { 83, 83 }, + { 37, 37 }, { 6, 6 }, { 68, 68 }, { 129, 129 }, + { 22, 22 }, { 53, 53 }, { 114, 114 }, { 6, 6 }, + { 99, 99 }, { 176, 176 }, { 84, 84 }, { 38, 38 }, + { 7, 7 }, { 69, 69 }, { 145, 145 }, { 130, 130 }, + { 115, 115 }, { 23, 23 }, { 54, 54 }, { 192, 192 }, + { 100, 100 }, { 7, 7 }, { 85, 85 }, { 161, 161 }, + { 39, 39 }, { 70, 70 }, { 8, 8 }, { 146, 146 }, + { 131, 131 }, { 116, 116 }, { 55, 55 }, { 208, 208 }, + { 101, 101 }, { 24, 24 }, { 86, 86 }, { 8, 8 }, + { 132, 132 }, { 40, 40 }, { 71, 71 }, { 177, 177 }, + { 147, 147 }, { 224, 224 }, { 117, 117 }, { 162, 162 }, + { 9, 9 }, { 102, 102 }, { 56, 56 }, { 25, 25 }, + { 87, 87 }, { 148, 148 }, { 9, 9 }, { 133, 133 }, + { 72, 72 }, { 118, 118 }, { 193, 193 }, { 163, 163 }, + { 41, 41 }, { 103, 103 }, { 178, 178 }, { 10, 10 }, + { 57, 57 }, { 149, 149 }, { 134, 134 }, { 88, 88 }, + { 26, 26 }, { 119, 119 }, { 10, 10 }, { 164, 164 }, + { 104, 104 }, { 73, 73 }, { 209, 209 }, { 179, 179 }, + { 42, 42 }, { 11, 11 }, { 194, 194 }, { 135, 135 }, + { 165, 165 }, { 150, 150 }, { 58, 58 }, { 27, 27 }, + { 89, 89 }, { 11, 11 }, { 120, 120 }, { 74, 74 }, + { 43, 43 }, { 225, 225 }, { 105, 105 }, { 12, 12 }, + { 180, 180 }, { 151, 151 }, { 195, 195 }, { 136, 136 }, + { 28, 28 }, { 166, 166 }, { 121, 121 }, { 59, 59 }, + { 12, 12 }, { 210, 210 }, { 90, 90 }, { 106, 106 }, + { 44, 44 }, { 181, 181 }, { 75, 75 }, { 152, 152 }, + { 13, 13 }, { 167, 167 }, { 137, 137 }, { 13, 13 }, + { 60, 60 }, { 196, 196 }, { 122, 122 }, { 29, 29 }, + { 91, 91 }, { 14, 14 }, { 182, 182 }, { 76, 76 }, + { 211, 211 }, { 153, 153 }, { 14, 14 }, { 107, 107 }, + { 138, 138 }, { 45, 45 }, { 226, 226 }, { 168, 168 }, + { 197, 197 }, { 123, 123 }, { 30, 30 }, { 61, 61 }, + { 15, 15 }, { 92, 92 }, { 154, 154 }, { 183, 183 }, + { 169, 169 }, { 108, 108 }, { 212, 212 }, { 77, 77 }, + { 139, 139 }, { 198, 198 }, { 46, 46 }, { 124, 124 }, + { 227, 227 }, { 62, 62 }, { 31, 31 }, { 184, 184 }, + { 93, 93 }, { 170, 170 }, { 155, 155 }, { 185, 185 }, + { 78, 78 }, { 47, 47 }, { 199, 199 }, { 213, 213 }, + { 140, 140 }, { 63, 63 }, { 109, 109 }, { 125, 125 }, + { 94, 94 }, { 200, 200 }, { 171, 171 }, { 156, 156 }, + { 228, 228 }, { 186, 186 }, { 214, 214 }, { 201, 201 }, + { 79, 79 }, { 141, 141 }, { 110, 110 }, { 229, 229 }, + { 95, 95 }, { 126, 126 }, { 215, 215 }, { 172, 172 }, + { 111, 111 }, { 142, 142 }, { 202, 202 }, { 157, 157 }, + { 216, 216 }, { 230, 230 }, { 217, 217 }, { 187, 187 }, + { 127, 127 }, { 231, 231 }, { 158, 158 }, { 173, 173 }, + { 143, 143 }, { 203, 203 }, { 188, 188 }, { 232, 232 }, + { 218, 218 }, { 233, 233 }, { 159, 159 }, { 174, 174 }, + { 204, 204 }, { 189, 189 }, { 234, 234 }, { 219, 219 }, + { 175, 175 }, { 205, 205 }, { 235, 235 }, { 220, 220 }, + { 190, 190 }, { 236, 236 }, { 206, 206 }, { 191, 191 }, + { 221, 221 }, { 207, 207 }, { 237, 237 }, { 222, 222 }, + { 238, 238 }, { 223, 223 }, { 239, 239 }, { 0, 0 }, +}; + +const int16_t ff_vp9_default_scan_32x32_nb[1024][2] = { + { 0, 0 }, { 0, 0 }, { 1, 1 }, { 32, 1 }, + { 32, 32 }, { 2, 2 }, { 33, 2 }, { 64, 33 }, + { 3, 3 }, { 64, 64 }, { 34, 3 }, { 65, 34 }, + { 4, 4 }, { 35, 4 }, { 96, 65 }, { 66, 35 }, + { 96, 96 }, { 97, 66 }, { 67, 36 }, { 36, 5 }, + { 5, 5 }, { 128, 97 }, { 98, 67 }, { 6, 6 }, + { 128, 128 }, { 68, 37 }, { 37, 6 }, { 129, 98 }, + { 99, 68 }, { 160, 129 }, { 130, 99 }, { 38, 7 }, + { 69, 38 }, { 7, 7 }, { 100, 69 }, { 161, 130 }, + { 131, 100 }, { 160, 160 }, { 70, 39 }, { 39, 8 }, + { 8, 8 }, { 101, 70 }, { 162, 131 }, { 132, 101 }, + { 192, 161 }, { 71, 40 }, { 192, 192 }, { 102, 71 }, + { 40, 9 }, { 163, 132 }, { 9, 9 }, { 193, 162 }, + { 133, 102 }, { 164, 133 }, { 72, 41 }, { 103, 72 }, + { 134, 103 }, { 224, 193 }, { 41, 10 }, { 194, 163 }, + { 10, 10 }, { 224, 224 }, { 165, 134 }, { 225, 194 }, + { 195, 164 }, { 73, 42 }, { 104, 73 }, { 135, 104 }, + { 42, 11 }, { 11, 11 }, { 166, 135 }, { 196, 165 }, + { 226, 195 }, { 256, 225 }, { 74, 43 }, { 105, 74 }, + { 136, 105 }, { 227, 196 }, { 43, 12 }, { 197, 166 }, + { 167, 136 }, { 257, 226 }, { 256, 256 }, { 12, 12 }, + { 228, 197 }, { 75, 44 }, { 106, 75 }, { 198, 167 }, + { 137, 106 }, { 258, 227 }, { 168, 137 }, { 288, 257 }, + { 44, 13 }, { 229, 198 }, { 259, 228 }, { 199, 168 }, + { 107, 76 }, { 13, 13 }, { 169, 138 }, { 138, 107 }, + { 288, 288 }, { 289, 258 }, { 76, 45 }, { 230, 199 }, + { 260, 229 }, { 45, 14 }, { 200, 169 }, { 139, 108 }, + { 290, 259 }, { 108, 77 }, { 231, 200 }, { 320, 289 }, + { 261, 230 }, { 170, 139 }, { 77, 46 }, { 291, 260 }, + { 14, 14 }, { 321, 290 }, { 201, 170 }, { 262, 231 }, + { 320, 320 }, { 171, 140 }, { 292, 261 }, { 232, 201 }, + { 140, 109 }, { 322, 291 }, { 109, 78 }, { 46, 15 }, + { 202, 171 }, { 263, 232 }, { 233, 202 }, { 293, 262 }, + { 352, 321 }, { 323, 292 }, { 15, 15 }, { 78, 47 }, + { 203, 172 }, { 264, 233 }, { 294, 263 }, { 324, 293 }, + { 172, 141 }, { 353, 322 }, { 141, 110 }, { 234, 203 }, + { 352, 352 }, { 47, 16 }, { 295, 264 }, { 110, 79 }, + { 265, 234 }, { 354, 323 }, { 325, 294 }, { 79, 48 }, + { 16, 16 }, { 204, 173 }, { 235, 204 }, { 173, 142 }, + { 355, 324 }, { 384, 353 }, { 326, 295 }, { 142, 111 }, + { 296, 265 }, { 266, 235 }, { 356, 325 }, { 385, 354 }, + { 111, 80 }, { 48, 17 }, { 327, 296 }, { 297, 266 }, + { 205, 174 }, { 384, 384 }, { 236, 205 }, { 357, 326 }, + { 386, 355 }, { 80, 49 }, { 174, 143 }, { 17, 17 }, + { 328, 297 }, { 358, 327 }, { 387, 356 }, { 298, 267 }, + { 329, 298 }, { 388, 357 }, { 112, 81 }, { 416, 385 }, + { 237, 206 }, { 359, 328 }, { 49, 18 }, { 206, 175 }, + { 417, 386 }, { 389, 358 }, { 330, 299 }, { 18, 18 }, + { 416, 416 }, { 360, 329 }, { 81, 50 }, { 418, 387 }, + { 390, 359 }, { 238, 207 }, { 50, 19 }, { 361, 330 }, + { 419, 388 }, { 113, 82 }, { 448, 417 }, { 448, 448 }, + { 420, 389 }, { 82, 51 }, { 362, 331 }, { 449, 418 }, + { 421, 390 }, { 480, 480 }, { 450, 419 }, { 422, 391 }, + { 114, 83 }, { 451, 420 }, { 480, 449 }, { 452, 421 }, + { 481, 450 }, { 453, 422 }, { 512, 512 }, { 482, 451 }, + { 454, 423 }, { 512, 481 }, { 483, 452 }, { 513, 482 }, + { 484, 453 }, { 514, 483 }, { 485, 454 }, { 544, 513 }, + { 544, 544 }, { 486, 455 }, { 545, 514 }, { 546, 515 }, + { 576, 576 }, { 576, 545 }, { 577, 546 }, { 578, 547 }, + { 608, 577 }, { 609, 578 }, { 610, 579 }, { 19, 19 }, + { 143, 112 }, { 267, 236 }, { 391, 360 }, { 515, 484 }, + { 608, 608 }, { 20, 20 }, { 51, 20 }, { 144, 113 }, + { 175, 144 }, { 268, 237 }, { 299, 268 }, { 392, 361 }, + { 423, 392 }, { 516, 485 }, { 547, 516 }, { 640, 609 }, + { 640, 640 }, { 21, 21 }, { 52, 21 }, { 83, 52 }, + { 145, 114 }, { 176, 145 }, { 207, 176 }, { 269, 238 }, + { 300, 269 }, { 331, 300 }, { 393, 362 }, { 424, 393 }, + { 455, 424 }, { 517, 486 }, { 548, 517 }, { 579, 548 }, + { 641, 610 }, { 672, 641 }, { 672, 672 }, { 22, 22 }, + { 53, 22 }, { 84, 53 }, { 115, 84 }, { 146, 115 }, + { 177, 146 }, { 208, 177 }, { 239, 208 }, { 270, 239 }, + { 301, 270 }, { 332, 301 }, { 363, 332 }, { 394, 363 }, + { 425, 394 }, { 456, 425 }, { 487, 456 }, { 518, 487 }, + { 549, 518 }, { 580, 549 }, { 611, 580 }, { 642, 611 }, + { 673, 642 }, { 704, 673 }, { 704, 704 }, { 54, 23 }, + { 85, 54 }, { 116, 85 }, { 178, 147 }, { 209, 178 }, + { 240, 209 }, { 302, 271 }, { 333, 302 }, { 364, 333 }, + { 426, 395 }, { 457, 426 }, { 488, 457 }, { 550, 519 }, + { 581, 550 }, { 612, 581 }, { 674, 643 }, { 705, 674 }, + { 736, 705 }, { 86, 55 }, { 117, 86 }, { 210, 179 }, + { 241, 210 }, { 334, 303 }, { 365, 334 }, { 458, 427 }, + { 489, 458 }, { 582, 551 }, { 613, 582 }, { 706, 675 }, + { 737, 706 }, { 118, 87 }, { 242, 211 }, { 366, 335 }, + { 490, 459 }, { 614, 583 }, { 738, 707 }, { 23, 23 }, + { 147, 116 }, { 271, 240 }, { 395, 364 }, { 519, 488 }, + { 643, 612 }, { 736, 736 }, { 24, 24 }, { 55, 24 }, + { 148, 117 }, { 179, 148 }, { 272, 241 }, { 303, 272 }, + { 396, 365 }, { 427, 396 }, { 520, 489 }, { 551, 520 }, + { 644, 613 }, { 675, 644 }, { 768, 737 }, { 768, 768 }, + { 25, 25 }, { 56, 25 }, { 87, 56 }, { 149, 118 }, + { 180, 149 }, { 211, 180 }, { 273, 242 }, { 304, 273 }, + { 335, 304 }, { 397, 366 }, { 428, 397 }, { 459, 428 }, + { 521, 490 }, { 552, 521 }, { 583, 552 }, { 645, 614 }, + { 676, 645 }, { 707, 676 }, { 769, 738 }, { 800, 769 }, + { 800, 800 }, { 26, 26 }, { 57, 26 }, { 88, 57 }, + { 119, 88 }, { 150, 119 }, { 181, 150 }, { 212, 181 }, + { 243, 212 }, { 274, 243 }, { 305, 274 }, { 336, 305 }, + { 367, 336 }, { 398, 367 }, { 429, 398 }, { 460, 429 }, + { 491, 460 }, { 522, 491 }, { 553, 522 }, { 584, 553 }, + { 615, 584 }, { 646, 615 }, { 677, 646 }, { 708, 677 }, + { 739, 708 }, { 770, 739 }, { 801, 770 }, { 832, 801 }, + { 832, 832 }, { 58, 27 }, { 89, 58 }, { 120, 89 }, + { 182, 151 }, { 213, 182 }, { 244, 213 }, { 306, 275 }, + { 337, 306 }, { 368, 337 }, { 430, 399 }, { 461, 430 }, + { 492, 461 }, { 554, 523 }, { 585, 554 }, { 616, 585 }, + { 678, 647 }, { 709, 678 }, { 740, 709 }, { 802, 771 }, + { 833, 802 }, { 864, 833 }, { 90, 59 }, { 121, 90 }, + { 214, 183 }, { 245, 214 }, { 338, 307 }, { 369, 338 }, + { 462, 431 }, { 493, 462 }, { 586, 555 }, { 617, 586 }, + { 710, 679 }, { 741, 710 }, { 834, 803 }, { 865, 834 }, + { 122, 91 }, { 246, 215 }, { 370, 339 }, { 494, 463 }, + { 618, 587 }, { 742, 711 }, { 866, 835 }, { 27, 27 }, + { 151, 120 }, { 275, 244 }, { 399, 368 }, { 523, 492 }, + { 647, 616 }, { 771, 740 }, { 864, 864 }, { 28, 28 }, + { 59, 28 }, { 152, 121 }, { 183, 152 }, { 276, 245 }, + { 307, 276 }, { 400, 369 }, { 431, 400 }, { 524, 493 }, + { 555, 524 }, { 648, 617 }, { 679, 648 }, { 772, 741 }, + { 803, 772 }, { 896, 865 }, { 896, 896 }, { 29, 29 }, + { 60, 29 }, { 91, 60 }, { 153, 122 }, { 184, 153 }, + { 215, 184 }, { 277, 246 }, { 308, 277 }, { 339, 308 }, + { 401, 370 }, { 432, 401 }, { 463, 432 }, { 525, 494 }, + { 556, 525 }, { 587, 556 }, { 649, 618 }, { 680, 649 }, + { 711, 680 }, { 773, 742 }, { 804, 773 }, { 835, 804 }, + { 897, 866 }, { 928, 897 }, { 928, 928 }, { 30, 30 }, + { 61, 30 }, { 92, 61 }, { 123, 92 }, { 154, 123 }, + { 185, 154 }, { 216, 185 }, { 247, 216 }, { 278, 247 }, + { 309, 278 }, { 340, 309 }, { 371, 340 }, { 402, 371 }, + { 433, 402 }, { 464, 433 }, { 495, 464 }, { 526, 495 }, + { 557, 526 }, { 588, 557 }, { 619, 588 }, { 650, 619 }, + { 681, 650 }, { 712, 681 }, { 743, 712 }, { 774, 743 }, + { 805, 774 }, { 836, 805 }, { 867, 836 }, { 898, 867 }, + { 929, 898 }, { 960, 929 }, { 960, 960 }, { 62, 31 }, + { 93, 62 }, { 124, 93 }, { 186, 155 }, { 217, 186 }, + { 248, 217 }, { 310, 279 }, { 341, 310 }, { 372, 341 }, + { 434, 403 }, { 465, 434 }, { 496, 465 }, { 558, 527 }, + { 589, 558 }, { 620, 589 }, { 682, 651 }, { 713, 682 }, + { 744, 713 }, { 806, 775 }, { 837, 806 }, { 868, 837 }, + { 930, 899 }, { 961, 930 }, { 992, 961 }, { 94, 63 }, + { 125, 94 }, { 218, 187 }, { 249, 218 }, { 342, 311 }, + { 373, 342 }, { 466, 435 }, { 497, 466 }, { 590, 559 }, + { 621, 590 }, { 714, 683 }, { 745, 714 }, { 838, 807 }, + { 869, 838 }, { 962, 931 }, { 993, 962 }, { 126, 95 }, + { 250, 219 }, { 374, 343 }, { 498, 467 }, { 622, 591 }, + { 746, 715 }, { 870, 839 }, { 994, 963 }, { 155, 124 }, + { 279, 248 }, { 403, 372 }, { 527, 496 }, { 651, 620 }, + { 775, 744 }, { 899, 868 }, { 156, 125 }, { 187, 156 }, + { 280, 249 }, { 311, 280 }, { 404, 373 }, { 435, 404 }, + { 528, 497 }, { 559, 528 }, { 652, 621 }, { 683, 652 }, + { 776, 745 }, { 807, 776 }, { 900, 869 }, { 931, 900 }, + { 157, 126 }, { 188, 157 }, { 219, 188 }, { 281, 250 }, + { 312, 281 }, { 343, 312 }, { 405, 374 }, { 436, 405 }, + { 467, 436 }, { 529, 498 }, { 560, 529 }, { 591, 560 }, + { 653, 622 }, { 684, 653 }, { 715, 684 }, { 777, 746 }, + { 808, 777 }, { 839, 808 }, { 901, 870 }, { 932, 901 }, + { 963, 932 }, { 158, 127 }, { 189, 158 }, { 220, 189 }, + { 251, 220 }, { 282, 251 }, { 313, 282 }, { 344, 313 }, + { 375, 344 }, { 406, 375 }, { 437, 406 }, { 468, 437 }, + { 499, 468 }, { 530, 499 }, { 561, 530 }, { 592, 561 }, + { 623, 592 }, { 654, 623 }, { 685, 654 }, { 716, 685 }, + { 747, 716 }, { 778, 747 }, { 809, 778 }, { 840, 809 }, + { 871, 840 }, { 902, 871 }, { 933, 902 }, { 964, 933 }, + { 995, 964 }, { 190, 159 }, { 221, 190 }, { 252, 221 }, + { 314, 283 }, { 345, 314 }, { 376, 345 }, { 438, 407 }, + { 469, 438 }, { 500, 469 }, { 562, 531 }, { 593, 562 }, + { 624, 593 }, { 686, 655 }, { 717, 686 }, { 748, 717 }, + { 810, 779 }, { 841, 810 }, { 872, 841 }, { 934, 903 }, + { 965, 934 }, { 996, 965 }, { 222, 191 }, { 253, 222 }, + { 346, 315 }, { 377, 346 }, { 470, 439 }, { 501, 470 }, + { 594, 563 }, { 625, 594 }, { 718, 687 }, { 749, 718 }, + { 842, 811 }, { 873, 842 }, { 966, 935 }, { 997, 966 }, + { 254, 223 }, { 378, 347 }, { 502, 471 }, { 626, 595 }, + { 750, 719 }, { 874, 843 }, { 998, 967 }, { 283, 252 }, + { 407, 376 }, { 531, 500 }, { 655, 624 }, { 779, 748 }, + { 903, 872 }, { 284, 253 }, { 315, 284 }, { 408, 377 }, + { 439, 408 }, { 532, 501 }, { 563, 532 }, { 656, 625 }, + { 687, 656 }, { 780, 749 }, { 811, 780 }, { 904, 873 }, + { 935, 904 }, { 285, 254 }, { 316, 285 }, { 347, 316 }, + { 409, 378 }, { 440, 409 }, { 471, 440 }, { 533, 502 }, + { 564, 533 }, { 595, 564 }, { 657, 626 }, { 688, 657 }, + { 719, 688 }, { 781, 750 }, { 812, 781 }, { 843, 812 }, + { 905, 874 }, { 936, 905 }, { 967, 936 }, { 286, 255 }, + { 317, 286 }, { 348, 317 }, { 379, 348 }, { 410, 379 }, + { 441, 410 }, { 472, 441 }, { 503, 472 }, { 534, 503 }, + { 565, 534 }, { 596, 565 }, { 627, 596 }, { 658, 627 }, + { 689, 658 }, { 720, 689 }, { 751, 720 }, { 782, 751 }, + { 813, 782 }, { 844, 813 }, { 875, 844 }, { 906, 875 }, + { 937, 906 }, { 968, 937 }, { 999, 968 }, { 318, 287 }, + { 349, 318 }, { 380, 349 }, { 442, 411 }, { 473, 442 }, + { 504, 473 }, { 566, 535 }, { 597, 566 }, { 628, 597 }, + { 690, 659 }, { 721, 690 }, { 752, 721 }, { 814, 783 }, + { 845, 814 }, { 876, 845 }, { 938, 907 }, { 969, 938 }, + { 1000, 969 }, { 350, 319 }, { 381, 350 }, { 474, 443 }, + { 505, 474 }, { 598, 567 }, { 629, 598 }, { 722, 691 }, + { 753, 722 }, { 846, 815 }, { 877, 846 }, { 970, 939 }, + { 1001, 970 }, { 382, 351 }, { 506, 475 }, { 630, 599 }, + { 754, 723 }, { 878, 847 }, { 1002, 971 }, { 411, 380 }, + { 535, 504 }, { 659, 628 }, { 783, 752 }, { 907, 876 }, + { 412, 381 }, { 443, 412 }, { 536, 505 }, { 567, 536 }, + { 660, 629 }, { 691, 660 }, { 784, 753 }, { 815, 784 }, + { 908, 877 }, { 939, 908 }, { 413, 382 }, { 444, 413 }, + { 475, 444 }, { 537, 506 }, { 568, 537 }, { 599, 568 }, + { 661, 630 }, { 692, 661 }, { 723, 692 }, { 785, 754 }, + { 816, 785 }, { 847, 816 }, { 909, 878 }, { 940, 909 }, + { 971, 940 }, { 414, 383 }, { 445, 414 }, { 476, 445 }, + { 507, 476 }, { 538, 507 }, { 569, 538 }, { 600, 569 }, + { 631, 600 }, { 662, 631 }, { 693, 662 }, { 724, 693 }, + { 755, 724 }, { 786, 755 }, { 817, 786 }, { 848, 817 }, + { 879, 848 }, { 910, 879 }, { 941, 910 }, { 972, 941 }, + { 1003, 972 }, { 446, 415 }, { 477, 446 }, { 508, 477 }, + { 570, 539 }, { 601, 570 }, { 632, 601 }, { 694, 663 }, + { 725, 694 }, { 756, 725 }, { 818, 787 }, { 849, 818 }, + { 880, 849 }, { 942, 911 }, { 973, 942 }, { 1004, 973 }, + { 478, 447 }, { 509, 478 }, { 602, 571 }, { 633, 602 }, + { 726, 695 }, { 757, 726 }, { 850, 819 }, { 881, 850 }, + { 974, 943 }, { 1005, 974 }, { 510, 479 }, { 634, 603 }, + { 758, 727 }, { 882, 851 }, { 1006, 975 }, { 539, 508 }, + { 663, 632 }, { 787, 756 }, { 911, 880 }, { 540, 509 }, + { 571, 540 }, { 664, 633 }, { 695, 664 }, { 788, 757 }, + { 819, 788 }, { 912, 881 }, { 943, 912 }, { 541, 510 }, + { 572, 541 }, { 603, 572 }, { 665, 634 }, { 696, 665 }, + { 727, 696 }, { 789, 758 }, { 820, 789 }, { 851, 820 }, + { 913, 882 }, { 944, 913 }, { 975, 944 }, { 542, 511 }, + { 573, 542 }, { 604, 573 }, { 635, 604 }, { 666, 635 }, + { 697, 666 }, { 728, 697 }, { 759, 728 }, { 790, 759 }, + { 821, 790 }, { 852, 821 }, { 883, 852 }, { 914, 883 }, + { 945, 914 }, { 976, 945 }, { 1007, 976 }, { 574, 543 }, + { 605, 574 }, { 636, 605 }, { 698, 667 }, { 729, 698 }, + { 760, 729 }, { 822, 791 }, { 853, 822 }, { 884, 853 }, + { 946, 915 }, { 977, 946 }, { 1008, 977 }, { 606, 575 }, + { 637, 606 }, { 730, 699 }, { 761, 730 }, { 854, 823 }, + { 885, 854 }, { 978, 947 }, { 1009, 978 }, { 638, 607 }, + { 762, 731 }, { 886, 855 }, { 1010, 979 }, { 667, 636 }, + { 791, 760 }, { 915, 884 }, { 668, 637 }, { 699, 668 }, + { 792, 761 }, { 823, 792 }, { 916, 885 }, { 947, 916 }, + { 669, 638 }, { 700, 669 }, { 731, 700 }, { 793, 762 }, + { 824, 793 }, { 855, 824 }, { 917, 886 }, { 948, 917 }, + { 979, 948 }, { 670, 639 }, { 701, 670 }, { 732, 701 }, + { 763, 732 }, { 794, 763 }, { 825, 794 }, { 856, 825 }, + { 887, 856 }, { 918, 887 }, { 949, 918 }, { 980, 949 }, + { 1011, 980 }, { 702, 671 }, { 733, 702 }, { 764, 733 }, + { 826, 795 }, { 857, 826 }, { 888, 857 }, { 950, 919 }, + { 981, 950 }, { 1012, 981 }, { 734, 703 }, { 765, 734 }, + { 858, 827 }, { 889, 858 }, { 982, 951 }, { 1013, 982 }, + { 766, 735 }, { 890, 859 }, { 1014, 983 }, { 795, 764 }, + { 919, 888 }, { 796, 765 }, { 827, 796 }, { 920, 889 }, + { 951, 920 }, { 797, 766 }, { 828, 797 }, { 859, 828 }, + { 921, 890 }, { 952, 921 }, { 983, 952 }, { 798, 767 }, + { 829, 798 }, { 860, 829 }, { 891, 860 }, { 922, 891 }, + { 953, 922 }, { 984, 953 }, { 1015, 984 }, { 830, 799 }, + { 861, 830 }, { 892, 861 }, { 954, 923 }, { 985, 954 }, + { 1016, 985 }, { 862, 831 }, { 893, 862 }, { 986, 955 }, + { 1017, 986 }, { 894, 863 }, { 1018, 987 }, { 923, 892 }, + { 924, 893 }, { 955, 924 }, { 925, 894 }, { 956, 925 }, + { 987, 956 }, { 926, 895 }, { 957, 926 }, { 988, 957 }, + { 1019, 988 }, { 958, 927 }, { 989, 958 }, { 1020, 989 }, + { 990, 959 }, { 1021, 990 }, { 1022, 991 }, { 0, 0 }, +}; + +const int16_t (* const ff_vp9_scans_nb[5][4])[2] = { + { + ff_vp9_default_scan_4x4_nb, ff_vp9_col_scan_4x4_nb, + ff_vp9_row_scan_4x4_nb, ff_vp9_default_scan_4x4_nb + }, { + ff_vp9_default_scan_8x8_nb, ff_vp9_col_scan_8x8_nb, + ff_vp9_row_scan_8x8_nb, ff_vp9_default_scan_8x8_nb + }, { + ff_vp9_default_scan_16x16_nb, ff_vp9_col_scan_16x16_nb, + ff_vp9_row_scan_16x16_nb, ff_vp9_default_scan_16x16_nb + }, { + ff_vp9_default_scan_32x32_nb, ff_vp9_default_scan_32x32_nb, + ff_vp9_default_scan_32x32_nb, ff_vp9_default_scan_32x32_nb + }, { // lossless + ff_vp9_default_scan_4x4_nb, ff_vp9_default_scan_4x4_nb, + ff_vp9_default_scan_4x4_nb, ff_vp9_default_scan_4x4_nb + } +}; + +const uint8_t ff_vp9_model_pareto8[256][8] = { + { 6, 86, 128, 11, 87, 42, 91, 52 }, + { 3, 86, 128, 6, 86, 23, 88, 29 }, + { 6, 86, 128, 11, 87, 42, 91, 52 }, + { 9, 86, 129, 17, 88, 61, 94, 76 }, + { 12, 86, 129, 22, 88, 77, 97, 93 }, + { 15, 87, 129, 28, 89, 93, 100, 110 }, + { 17, 87, 129, 33, 90, 105, 103, 123 }, + { 20, 88, 130, 38, 91, 118, 106, 136 }, + { 23, 88, 130, 43, 91, 128, 108, 146 }, + { 26, 89, 131, 48, 92, 139, 111, 156 }, + { 28, 89, 131, 53, 93, 147, 114, 163 }, + { 31, 90, 131, 58, 94, 156, 117, 171 }, + { 34, 90, 131, 62, 94, 163, 119, 177 }, + { 37, 90, 132, 66, 95, 171, 122, 184 }, + { 39, 90, 132, 70, 96, 177, 124, 189 }, + { 42, 91, 132, 75, 97, 183, 127, 194 }, + { 44, 91, 132, 79, 97, 188, 129, 198 }, + { 47, 92, 133, 83, 98, 193, 132, 202 }, + { 49, 92, 133, 86, 99, 197, 134, 205 }, + { 52, 93, 133, 90, 100, 201, 137, 208 }, + { 54, 93, 133, 94, 100, 204, 139, 211 }, + { 57, 94, 134, 98, 101, 208, 142, 214 }, + { 59, 94, 134, 101, 102, 211, 144, 216 }, + { 62, 94, 135, 105, 103, 214, 146, 218 }, + { 64, 94, 135, 108, 103, 216, 148, 220 }, + { 66, 95, 135, 111, 104, 219, 151, 222 }, + { 68, 95, 135, 114, 105, 221, 153, 223 }, + { 71, 96, 136, 117, 106, 224, 155, 225 }, + { 73, 96, 136, 120, 106, 225, 157, 226 }, + { 76, 97, 136, 123, 107, 227, 159, 228 }, + { 78, 97, 136, 126, 108, 229, 160, 229 }, + { 80, 98, 137, 129, 109, 231, 162, 231 }, + { 82, 98, 137, 131, 109, 232, 164, 232 }, + { 84, 98, 138, 134, 110, 234, 166, 233 }, + { 86, 98, 138, 137, 111, 235, 168, 234 }, + { 89, 99, 138, 140, 112, 236, 170, 235 }, + { 91, 99, 138, 142, 112, 237, 171, 235 }, + { 93, 100, 139, 145, 113, 238, 173, 236 }, + { 95, 100, 139, 147, 114, 239, 174, 237 }, + { 97, 101, 140, 149, 115, 240, 176, 238 }, + { 99, 101, 140, 151, 115, 241, 177, 238 }, + { 101, 102, 140, 154, 116, 242, 179, 239 }, + { 103, 102, 140, 156, 117, 242, 180, 239 }, + { 105, 103, 141, 158, 118, 243, 182, 240 }, + { 107, 103, 141, 160, 118, 243, 183, 240 }, + { 109, 104, 141, 162, 119, 244, 185, 241 }, + { 111, 104, 141, 164, 119, 244, 186, 241 }, + { 113, 104, 142, 166, 120, 245, 187, 242 }, + { 114, 104, 142, 168, 121, 245, 188, 242 }, + { 116, 105, 143, 170, 122, 246, 190, 243 }, + { 118, 105, 143, 171, 122, 246, 191, 243 }, + { 120, 106, 143, 173, 123, 247, 192, 244 }, + { 121, 106, 143, 175, 124, 247, 193, 244 }, + { 123, 107, 144, 177, 125, 248, 195, 244 }, + { 125, 107, 144, 178, 125, 248, 196, 244 }, + { 127, 108, 145, 180, 126, 249, 197, 245 }, + { 128, 108, 145, 181, 127, 249, 198, 245 }, + { 130, 109, 145, 183, 128, 249, 199, 245 }, + { 132, 109, 145, 184, 128, 249, 200, 245 }, + { 134, 110, 146, 186, 129, 250, 201, 246 }, + { 135, 110, 146, 187, 130, 250, 202, 246 }, + { 137, 111, 147, 189, 131, 251, 203, 246 }, + { 138, 111, 147, 190, 131, 251, 204, 246 }, + { 140, 112, 147, 192, 132, 251, 205, 247 }, + { 141, 112, 147, 193, 132, 251, 206, 247 }, + { 143, 113, 148, 194, 133, 251, 207, 247 }, + { 144, 113, 148, 195, 134, 251, 207, 247 }, + { 146, 114, 149, 197, 135, 252, 208, 248 }, + { 147, 114, 149, 198, 135, 252, 209, 248 }, + { 149, 115, 149, 199, 136, 252, 210, 248 }, + { 150, 115, 149, 200, 137, 252, 210, 248 }, + { 152, 115, 150, 201, 138, 252, 211, 248 }, + { 153, 115, 150, 202, 138, 252, 212, 248 }, + { 155, 116, 151, 204, 139, 253, 213, 249 }, + { 156, 116, 151, 205, 139, 253, 213, 249 }, + { 158, 117, 151, 206, 140, 253, 214, 249 }, + { 159, 117, 151, 207, 141, 253, 215, 249 }, + { 161, 118, 152, 208, 142, 253, 216, 249 }, + { 162, 118, 152, 209, 142, 253, 216, 249 }, + { 163, 119, 153, 210, 143, 253, 217, 249 }, + { 164, 119, 153, 211, 143, 253, 217, 249 }, + { 166, 120, 153, 212, 144, 254, 218, 250 }, + { 167, 120, 153, 212, 145, 254, 219, 250 }, + { 168, 121, 154, 213, 146, 254, 220, 250 }, + { 169, 121, 154, 214, 146, 254, 220, 250 }, + { 171, 122, 155, 215, 147, 254, 221, 250 }, + { 172, 122, 155, 216, 147, 254, 221, 250 }, + { 173, 123, 155, 217, 148, 254, 222, 250 }, + { 174, 123, 155, 217, 149, 254, 222, 250 }, + { 176, 124, 156, 218, 150, 254, 223, 250 }, + { 177, 124, 156, 219, 150, 254, 223, 250 }, + { 178, 125, 157, 220, 151, 254, 224, 251 }, + { 179, 125, 157, 220, 151, 254, 224, 251 }, + { 180, 126, 157, 221, 152, 254, 225, 251 }, + { 181, 126, 157, 221, 152, 254, 225, 251 }, + { 183, 127, 158, 222, 153, 254, 226, 251 }, + { 184, 127, 158, 223, 154, 254, 226, 251 }, + { 185, 128, 159, 224, 155, 255, 227, 251 }, + { 186, 128, 159, 224, 155, 255, 227, 251 }, + { 187, 129, 160, 225, 156, 255, 228, 251 }, + { 188, 130, 160, 225, 156, 255, 228, 251 }, + { 189, 131, 160, 226, 157, 255, 228, 251 }, + { 190, 131, 160, 226, 158, 255, 228, 251 }, + { 191, 132, 161, 227, 159, 255, 229, 251 }, + { 192, 132, 161, 227, 159, 255, 229, 251 }, + { 193, 133, 162, 228, 160, 255, 230, 252 }, + { 194, 133, 162, 229, 160, 255, 230, 252 }, + { 195, 134, 163, 230, 161, 255, 231, 252 }, + { 196, 134, 163, 230, 161, 255, 231, 252 }, + { 197, 135, 163, 231, 162, 255, 231, 252 }, + { 198, 135, 163, 231, 162, 255, 231, 252 }, + { 199, 136, 164, 232, 163, 255, 232, 252 }, + { 200, 136, 164, 232, 164, 255, 232, 252 }, + { 201, 137, 165, 233, 165, 255, 233, 252 }, + { 201, 137, 165, 233, 165, 255, 233, 252 }, + { 202, 138, 166, 233, 166, 255, 233, 252 }, + { 203, 138, 166, 233, 166, 255, 233, 252 }, + { 204, 139, 166, 234, 167, 255, 234, 252 }, + { 205, 139, 166, 234, 167, 255, 234, 252 }, + { 206, 140, 167, 235, 168, 255, 235, 252 }, + { 206, 140, 167, 235, 168, 255, 235, 252 }, + { 207, 141, 168, 236, 169, 255, 235, 252 }, + { 208, 141, 168, 236, 170, 255, 235, 252 }, + { 209, 142, 169, 237, 171, 255, 236, 252 }, + { 209, 143, 169, 237, 171, 255, 236, 252 }, + { 210, 144, 169, 237, 172, 255, 236, 252 }, + { 211, 144, 169, 237, 172, 255, 236, 252 }, + { 212, 145, 170, 238, 173, 255, 237, 252 }, + { 213, 145, 170, 238, 173, 255, 237, 252 }, + { 214, 146, 171, 239, 174, 255, 237, 253 }, + { 214, 146, 171, 239, 174, 255, 237, 253 }, + { 215, 147, 172, 240, 175, 255, 238, 253 }, + { 215, 147, 172, 240, 175, 255, 238, 253 }, + { 216, 148, 173, 240, 176, 255, 238, 253 }, + { 217, 148, 173, 240, 176, 255, 238, 253 }, + { 218, 149, 173, 241, 177, 255, 239, 253 }, + { 218, 149, 173, 241, 178, 255, 239, 253 }, + { 219, 150, 174, 241, 179, 255, 239, 253 }, + { 219, 151, 174, 241, 179, 255, 239, 253 }, + { 220, 152, 175, 242, 180, 255, 240, 253 }, + { 221, 152, 175, 242, 180, 255, 240, 253 }, + { 222, 153, 176, 242, 181, 255, 240, 253 }, + { 222, 153, 176, 242, 181, 255, 240, 253 }, + { 223, 154, 177, 243, 182, 255, 240, 253 }, + { 223, 154, 177, 243, 182, 255, 240, 253 }, + { 224, 155, 178, 244, 183, 255, 241, 253 }, + { 224, 155, 178, 244, 183, 255, 241, 253 }, + { 225, 156, 178, 244, 184, 255, 241, 253 }, + { 225, 157, 178, 244, 184, 255, 241, 253 }, + { 226, 158, 179, 244, 185, 255, 242, 253 }, + { 227, 158, 179, 244, 185, 255, 242, 253 }, + { 228, 159, 180, 245, 186, 255, 242, 253 }, + { 228, 159, 180, 245, 186, 255, 242, 253 }, + { 229, 160, 181, 245, 187, 255, 242, 253 }, + { 229, 160, 181, 245, 187, 255, 242, 253 }, + { 230, 161, 182, 246, 188, 255, 243, 253 }, + { 230, 162, 182, 246, 188, 255, 243, 253 }, + { 231, 163, 183, 246, 189, 255, 243, 253 }, + { 231, 163, 183, 246, 189, 255, 243, 253 }, + { 232, 164, 184, 247, 190, 255, 243, 253 }, + { 232, 164, 184, 247, 190, 255, 243, 253 }, + { 233, 165, 185, 247, 191, 255, 244, 253 }, + { 233, 165, 185, 247, 191, 255, 244, 253 }, + { 234, 166, 185, 247, 192, 255, 244, 253 }, + { 234, 167, 185, 247, 192, 255, 244, 253 }, + { 235, 168, 186, 248, 193, 255, 244, 253 }, + { 235, 168, 186, 248, 193, 255, 244, 253 }, + { 236, 169, 187, 248, 194, 255, 244, 253 }, + { 236, 169, 187, 248, 194, 255, 244, 253 }, + { 236, 170, 188, 248, 195, 255, 245, 253 }, + { 236, 170, 188, 248, 195, 255, 245, 253 }, + { 237, 171, 189, 249, 196, 255, 245, 254 }, + { 237, 172, 189, 249, 196, 255, 245, 254 }, + { 238, 173, 190, 249, 197, 255, 245, 254 }, + { 238, 173, 190, 249, 197, 255, 245, 254 }, + { 239, 174, 191, 249, 198, 255, 245, 254 }, + { 239, 174, 191, 249, 198, 255, 245, 254 }, + { 240, 175, 192, 249, 199, 255, 246, 254 }, + { 240, 176, 192, 249, 199, 255, 246, 254 }, + { 240, 177, 193, 250, 200, 255, 246, 254 }, + { 240, 177, 193, 250, 200, 255, 246, 254 }, + { 241, 178, 194, 250, 201, 255, 246, 254 }, + { 241, 178, 194, 250, 201, 255, 246, 254 }, + { 242, 179, 195, 250, 202, 255, 246, 254 }, + { 242, 180, 195, 250, 202, 255, 246, 254 }, + { 242, 181, 196, 250, 203, 255, 247, 254 }, + { 242, 181, 196, 250, 203, 255, 247, 254 }, + { 243, 182, 197, 251, 204, 255, 247, 254 }, + { 243, 183, 197, 251, 204, 255, 247, 254 }, + { 244, 184, 198, 251, 205, 255, 247, 254 }, + { 244, 184, 198, 251, 205, 255, 247, 254 }, + { 244, 185, 199, 251, 206, 255, 247, 254 }, + { 244, 185, 199, 251, 206, 255, 247, 254 }, + { 245, 186, 200, 251, 207, 255, 247, 254 }, + { 245, 187, 200, 251, 207, 255, 247, 254 }, + { 246, 188, 201, 252, 207, 255, 248, 254 }, + { 246, 188, 201, 252, 207, 255, 248, 254 }, + { 246, 189, 202, 252, 208, 255, 248, 254 }, + { 246, 190, 202, 252, 208, 255, 248, 254 }, + { 247, 191, 203, 252, 209, 255, 248, 254 }, + { 247, 191, 203, 252, 209, 255, 248, 254 }, + { 247, 192, 204, 252, 210, 255, 248, 254 }, + { 247, 193, 204, 252, 210, 255, 248, 254 }, + { 248, 194, 205, 252, 211, 255, 248, 254 }, + { 248, 194, 205, 252, 211, 255, 248, 254 }, + { 248, 195, 206, 252, 212, 255, 249, 254 }, + { 248, 196, 206, 252, 212, 255, 249, 254 }, + { 249, 197, 207, 253, 213, 255, 249, 254 }, + { 249, 197, 207, 253, 213, 255, 249, 254 }, + { 249, 198, 208, 253, 214, 255, 249, 254 }, + { 249, 199, 209, 253, 214, 255, 249, 254 }, + { 250, 200, 210, 253, 215, 255, 249, 254 }, + { 250, 200, 210, 253, 215, 255, 249, 254 }, + { 250, 201, 211, 253, 215, 255, 249, 254 }, + { 250, 202, 211, 253, 215, 255, 249, 254 }, + { 250, 203, 212, 253, 216, 255, 249, 254 }, + { 250, 203, 212, 253, 216, 255, 249, 254 }, + { 251, 204, 213, 253, 217, 255, 250, 254 }, + { 251, 205, 213, 253, 217, 255, 250, 254 }, + { 251, 206, 214, 254, 218, 255, 250, 254 }, + { 251, 206, 215, 254, 218, 255, 250, 254 }, + { 252, 207, 216, 254, 219, 255, 250, 254 }, + { 252, 208, 216, 254, 219, 255, 250, 254 }, + { 252, 209, 217, 254, 220, 255, 250, 254 }, + { 252, 210, 217, 254, 220, 255, 250, 254 }, + { 252, 211, 218, 254, 221, 255, 250, 254 }, + { 252, 212, 218, 254, 221, 255, 250, 254 }, + { 253, 213, 219, 254, 222, 255, 250, 254 }, + { 253, 213, 220, 254, 222, 255, 250, 254 }, + { 253, 214, 221, 254, 223, 255, 250, 254 }, + { 253, 215, 221, 254, 223, 255, 250, 254 }, + { 253, 216, 222, 254, 224, 255, 251, 254 }, + { 253, 217, 223, 254, 224, 255, 251, 254 }, + { 253, 218, 224, 254, 225, 255, 251, 254 }, + { 253, 219, 224, 254, 225, 255, 251, 254 }, + { 254, 220, 225, 254, 225, 255, 251, 254 }, + { 254, 221, 226, 254, 225, 255, 251, 254 }, + { 254, 222, 227, 255, 226, 255, 251, 254 }, + { 254, 223, 227, 255, 226, 255, 251, 254 }, + { 254, 224, 228, 255, 227, 255, 251, 254 }, + { 254, 225, 229, 255, 227, 255, 251, 254 }, + { 254, 226, 230, 255, 228, 255, 251, 254 }, + { 254, 227, 230, 255, 229, 255, 251, 254 }, + { 255, 228, 231, 255, 230, 255, 251, 254 }, + { 255, 229, 232, 255, 230, 255, 251, 254 }, + { 255, 230, 233, 255, 231, 255, 252, 254 }, + { 255, 231, 234, 255, 231, 255, 252, 254 }, + { 255, 232, 235, 255, 232, 255, 252, 254 }, + { 255, 233, 236, 255, 232, 255, 252, 254 }, + { 255, 235, 237, 255, 233, 255, 252, 254 }, + { 255, 236, 238, 255, 234, 255, 252, 254 }, + { 255, 238, 240, 255, 235, 255, 252, 255 }, + { 255, 239, 241, 255, 235, 255, 252, 254 }, + { 255, 241, 243, 255, 236, 255, 252, 254 }, + { 255, 243, 245, 255, 237, 255, 252, 254 }, + { 255, 246, 247, 255, 239, 255, 253, 255 }, +}; + +const ProbContext ff_vp9_default_probs = { + { /* y_mode */ + { 65, 32, 18, 144, 162, 194, 41, 51, 98 } /* bsize < 8x8 */, + { 132, 68, 18, 165, 217, 196, 45, 40, 78 } /* bsize < 16x16 */, + { 173, 80, 19, 176, 240, 193, 64, 35, 46 } /* bsize < 32x32 */, + { 221, 135, 38, 194, 248, 121, 96, 85, 29 } /* bsize >= 32x32 */ + }, { /* uv_mode */ + { 48, 12, 154, 155, 139, 90, 34, 117, 119 } /* y = v */, + { 67, 6, 25, 204, 243, 158, 13, 21, 96 } /* y = h */, + { 120, 7, 76, 176, 208, 126, 28, 54, 103 } /* y = dc */, + { 97, 5, 44, 131, 176, 139, 48, 68, 97 } /* y = d45 */, + { 83, 5, 42, 156, 111, 152, 26, 49, 152 } /* y = d135 */, + { 80, 5, 58, 178, 74, 83, 33, 62, 145 } /* y = d117 */, + { 86, 5, 32, 154, 192, 168, 14, 22, 163 } /* y = d153 */, + { 77, 7, 64, 116, 132, 122, 37, 126, 120 } /* y = d63 */, + { 85, 5, 32, 156, 216, 148, 19, 29, 73 } /* y = d27 */, + { 101, 21, 107, 181, 192, 103, 19, 67, 125 } /* y = tm */ + }, { /* filter */ + { 235, 162, }, + { 36, 255, }, + { 34, 3, }, + { 149, 144, }, + }, { /* mv_mode */ + { 2, 173, 34 }, // 0 = both zero mv + { 7, 145, 85 }, // 1 = one zero mv + one a predicted mv + { 7, 166, 63 }, // 2 = two predicted mvs + { 7, 94, 66 }, // 3 = one predicted/zero and one new mv + { 8, 64, 46 }, // 4 = two new mvs + { 17, 81, 31 }, // 5 = one intra neighbor + x + { 25, 29, 30 }, // 6 = two intra neighbors + }, { /* intra */ + 9, 102, 187, 225 + }, { /* comp */ + 239, 183, 119, 96, 41 + }, { /* single_ref */ + { 33, 16 }, + { 77, 74 }, + { 142, 142 }, + { 172, 170 }, + { 238, 247 } + }, { /* comp_ref */ + 50, 126, 123, 221, 226 + }, { /* tx32p */ + { 3, 136, 37, }, + { 5, 52, 13, }, + }, { /* tx16p */ + { 20, 152, }, + { 15, 101, }, + }, { /* tx8p */ + 100, 66 + }, { /* skip */ + 192, 128, 64 + }, { /* mv_joint */ + 32, 64, 96 + }, { + { /* mv vertical component */ + 128, /* sign */ + { 224, 144, 192, 168, 192, 176, 192, 198, 198, 245 }, /* class */ + 216, /* class0 */ + { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 }, /* bits */ + { /* class0_fp */ + { 128, 128, 64 }, + { 96, 112, 64 } + }, + { 64, 96, 64 }, /* fp */ + 160, /* class0_hp bit */ + 128, /* hp */ + }, { /* mv horizontal component */ + 128, /* sign */ + { 216, 128, 176, 160, 176, 176, 192, 198, 198, 208 }, /* class */ + 208, /* class0 */ + { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 }, /* bits */ + { /* class0_fp */ + { 128, 128, 64 }, + { 96, 112, 64 } + }, + { 64, 96, 64 }, /* fp */ + 160, /* class0_hp bit */ + 128, /* hp */ + } + }, { /* partition */ + { /* 64x64 -> 32x32 */ + { 222, 34, 30 } /* a/l both not split */, + { 72, 16, 44 } /* a split, l not split */, + { 58, 32, 12 } /* l split, a not split */, + { 10, 7, 6 } /* a/l both split */, + }, { /* 32x32 -> 16x16 */ + { 177, 58, 59 } /* a/l both not split */, + { 68, 26, 63 } /* a split, l not split */, + { 52, 79, 25 } /* l split, a not split */, + { 17, 14, 12 } /* a/l both split */, + }, { /* 16x16 -> 8x8 */ + { 174, 73, 87 } /* a/l both not split */, + { 92, 41, 83 } /* a split, l not split */, + { 82, 99, 50 } /* l split, a not split */, + { 53, 39, 39 } /* a/l both split */, + }, { /* 8x8 -> 4x4 */ + { 199, 122, 141 } /* a/l both not split */, + { 147, 63, 159 } /* a split, l not split */, + { 148, 133, 118 } /* l split, a not split */, + { 121, 104, 114 } /* a/l both split */, + } + }, +}; + +const uint8_t ff_vp9_default_coef_probs[4][2][2][6][6][3] = { + { /* tx = 4x4 */ + { /* block Type 0 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 195, 29, 183 }, + { 84, 49, 136 }, + { 8, 42, 71 } + }, { /* Coeff Band 1 */ + { 31, 107, 169 }, + { 35, 99, 159 }, + { 17, 82, 140 }, + { 8, 66, 114 }, + { 2, 44, 76 }, + { 1, 19, 32 } + }, { /* Coeff Band 2 */ + { 40, 132, 201 }, + { 29, 114, 187 }, + { 13, 91, 157 }, + { 7, 75, 127 }, + { 3, 58, 95 }, + { 1, 28, 47 } + }, { /* Coeff Band 3 */ + { 69, 142, 221 }, + { 42, 122, 201 }, + { 15, 91, 159 }, + { 6, 67, 121 }, + { 1, 42, 77 }, + { 1, 17, 31 } + }, { /* Coeff Band 4 */ + { 102, 148, 228 }, + { 67, 117, 204 }, + { 17, 82, 154 }, + { 6, 59, 114 }, + { 2, 39, 75 }, + { 1, 15, 29 } + }, { /* Coeff Band 5 */ + { 156, 57, 233 }, + { 119, 57, 212 }, + { 58, 48, 163 }, + { 29, 40, 124 }, + { 12, 30, 81 }, + { 3, 12, 31 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 191, 107, 226 }, + { 124, 117, 204 }, + { 25, 99, 155 } + }, { /* Coeff Band 1 */ + { 29, 148, 210 }, + { 37, 126, 194 }, + { 8, 93, 157 }, + { 2, 68, 118 }, + { 1, 39, 69 }, + { 1, 17, 33 } + }, { /* Coeff Band 2 */ + { 41, 151, 213 }, + { 27, 123, 193 }, + { 3, 82, 144 }, + { 1, 58, 105 }, + { 1, 32, 60 }, + { 1, 13, 26 } + }, { /* Coeff Band 3 */ + { 59, 159, 220 }, + { 23, 126, 198 }, + { 4, 88, 151 }, + { 1, 66, 114 }, + { 1, 38, 71 }, + { 1, 18, 34 } + }, { /* Coeff Band 4 */ + { 114, 136, 232 }, + { 51, 114, 207 }, + { 11, 83, 155 }, + { 3, 56, 105 }, + { 1, 33, 65 }, + { 1, 17, 34 } + }, { /* Coeff Band 5 */ + { 149, 65, 234 }, + { 121, 57, 215 }, + { 61, 49, 166 }, + { 28, 36, 114 }, + { 12, 25, 76 }, + { 3, 16, 42 } + } + } + }, { /* block Type 1 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 214, 49, 220 }, + { 132, 63, 188 }, + { 42, 65, 137 } + }, { /* Coeff Band 1 */ + { 85, 137, 221 }, + { 104, 131, 216 }, + { 49, 111, 192 }, + { 21, 87, 155 }, + { 2, 49, 87 }, + { 1, 16, 28 } + }, { /* Coeff Band 2 */ + { 89, 163, 230 }, + { 90, 137, 220 }, + { 29, 100, 183 }, + { 10, 70, 135 }, + { 2, 42, 81 }, + { 1, 17, 33 } + }, { /* Coeff Band 3 */ + { 108, 167, 237 }, + { 55, 133, 222 }, + { 15, 97, 179 }, + { 4, 72, 135 }, + { 1, 45, 85 }, + { 1, 19, 38 } + }, { /* Coeff Band 4 */ + { 124, 146, 240 }, + { 66, 124, 224 }, + { 17, 88, 175 }, + { 4, 58, 122 }, + { 1, 36, 75 }, + { 1, 18, 37 } + }, { /* Coeff Band 5 */ + { 141, 79, 241 }, + { 126, 70, 227 }, + { 66, 58, 182 }, + { 30, 44, 136 }, + { 12, 34, 96 }, + { 2, 20, 47 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 229, 99, 249 }, + { 143, 111, 235 }, + { 46, 109, 192 } + }, { /* Coeff Band 1 */ + { 82, 158, 236 }, + { 94, 146, 224 }, + { 25, 117, 191 }, + { 9, 87, 149 }, + { 3, 56, 99 }, + { 1, 33, 57 } + }, { /* Coeff Band 2 */ + { 83, 167, 237 }, + { 68, 145, 222 }, + { 10, 103, 177 }, + { 2, 72, 131 }, + { 1, 41, 79 }, + { 1, 20, 39 } + }, { /* Coeff Band 3 */ + { 99, 167, 239 }, + { 47, 141, 224 }, + { 10, 104, 178 }, + { 2, 73, 133 }, + { 1, 44, 85 }, + { 1, 22, 47 } + }, { /* Coeff Band 4 */ + { 127, 145, 243 }, + { 71, 129, 228 }, + { 17, 93, 177 }, + { 3, 61, 124 }, + { 1, 41, 84 }, + { 1, 21, 52 } + }, { /* Coeff Band 5 */ + { 157, 78, 244 }, + { 140, 72, 231 }, + { 69, 58, 184 }, + { 31, 44, 137 }, + { 14, 38, 105 }, + { 8, 23, 61 } + } + } + } + }, { /* tx = 8x8 */ + { /* block Type 0 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 125, 34, 187 }, + { 52, 41, 133 }, + { 6, 31, 56 } + }, { /* Coeff Band 1 */ + { 37, 109, 153 }, + { 51, 102, 147 }, + { 23, 87, 128 }, + { 8, 67, 101 }, + { 1, 41, 63 }, + { 1, 19, 29 } + }, { /* Coeff Band 2 */ + { 31, 154, 185 }, + { 17, 127, 175 }, + { 6, 96, 145 }, + { 2, 73, 114 }, + { 1, 51, 82 }, + { 1, 28, 45 } + }, { /* Coeff Band 3 */ + { 23, 163, 200 }, + { 10, 131, 185 }, + { 2, 93, 148 }, + { 1, 67, 111 }, + { 1, 41, 69 }, + { 1, 14, 24 } + }, { /* Coeff Band 4 */ + { 29, 176, 217 }, + { 12, 145, 201 }, + { 3, 101, 156 }, + { 1, 69, 111 }, + { 1, 39, 63 }, + { 1, 14, 23 } + }, { /* Coeff Band 5 */ + { 57, 192, 233 }, + { 25, 154, 215 }, + { 6, 109, 167 }, + { 3, 78, 118 }, + { 1, 48, 69 }, + { 1, 21, 29 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 202, 105, 245 }, + { 108, 106, 216 }, + { 18, 90, 144 } + }, { /* Coeff Band 1 */ + { 33, 172, 219 }, + { 64, 149, 206 }, + { 14, 117, 177 }, + { 5, 90, 141 }, + { 2, 61, 95 }, + { 1, 37, 57 } + }, { /* Coeff Band 2 */ + { 33, 179, 220 }, + { 11, 140, 198 }, + { 1, 89, 148 }, + { 1, 60, 104 }, + { 1, 33, 57 }, + { 1, 12, 21 } + }, { /* Coeff Band 3 */ + { 30, 181, 221 }, + { 8, 141, 198 }, + { 1, 87, 145 }, + { 1, 58, 100 }, + { 1, 31, 55 }, + { 1, 12, 20 } + }, { /* Coeff Band 4 */ + { 32, 186, 224 }, + { 7, 142, 198 }, + { 1, 86, 143 }, + { 1, 58, 100 }, + { 1, 31, 55 }, + { 1, 12, 22 } + }, { /* Coeff Band 5 */ + { 57, 192, 227 }, + { 20, 143, 204 }, + { 3, 96, 154 }, + { 1, 68, 112 }, + { 1, 42, 69 }, + { 1, 19, 32 } + } + } + }, { /* block Type 1 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 212, 35, 215 }, + { 113, 47, 169 }, + { 29, 48, 105 } + }, { /* Coeff Band 1 */ + { 74, 129, 203 }, + { 106, 120, 203 }, + { 49, 107, 178 }, + { 19, 84, 144 }, + { 4, 50, 84 }, + { 1, 15, 25 } + }, { /* Coeff Band 2 */ + { 71, 172, 217 }, + { 44, 141, 209 }, + { 15, 102, 173 }, + { 6, 76, 133 }, + { 2, 51, 89 }, + { 1, 24, 42 } + }, { /* Coeff Band 3 */ + { 64, 185, 231 }, + { 31, 148, 216 }, + { 8, 103, 175 }, + { 3, 74, 131 }, + { 1, 46, 81 }, + { 1, 18, 30 } + }, { /* Coeff Band 4 */ + { 65, 196, 235 }, + { 25, 157, 221 }, + { 5, 105, 174 }, + { 1, 67, 120 }, + { 1, 38, 69 }, + { 1, 15, 30 } + }, { /* Coeff Band 5 */ + { 65, 204, 238 }, + { 30, 156, 224 }, + { 7, 107, 177 }, + { 2, 70, 124 }, + { 1, 42, 73 }, + { 1, 18, 34 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 225, 86, 251 }, + { 144, 104, 235 }, + { 42, 99, 181 } + }, { /* Coeff Band 1 */ + { 85, 175, 239 }, + { 112, 165, 229 }, + { 29, 136, 200 }, + { 12, 103, 162 }, + { 6, 77, 123 }, + { 2, 53, 84 } + }, { /* Coeff Band 2 */ + { 75, 183, 239 }, + { 30, 155, 221 }, + { 3, 106, 171 }, + { 1, 74, 128 }, + { 1, 44, 76 }, + { 1, 17, 28 } + }, { /* Coeff Band 3 */ + { 73, 185, 240 }, + { 27, 159, 222 }, + { 2, 107, 172 }, + { 1, 75, 127 }, + { 1, 42, 73 }, + { 1, 17, 29 } + }, { /* Coeff Band 4 */ + { 62, 190, 238 }, + { 21, 159, 222 }, + { 2, 107, 172 }, + { 1, 72, 122 }, + { 1, 40, 71 }, + { 1, 18, 32 } + }, { /* Coeff Band 5 */ + { 61, 199, 240 }, + { 27, 161, 226 }, + { 4, 113, 180 }, + { 1, 76, 129 }, + { 1, 46, 80 }, + { 1, 23, 41 } + } + } + } + }, { /* tx = 16x16 */ + { /* block Type 0 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 7, 27, 153 }, + { 5, 30, 95 }, + { 1, 16, 30 } + }, { /* Coeff Band 1 */ + { 50, 75, 127 }, + { 57, 75, 124 }, + { 27, 67, 108 }, + { 10, 54, 86 }, + { 1, 33, 52 }, + { 1, 12, 18 } + }, { /* Coeff Band 2 */ + { 43, 125, 151 }, + { 26, 108, 148 }, + { 7, 83, 122 }, + { 2, 59, 89 }, + { 1, 38, 60 }, + { 1, 17, 27 } + }, { /* Coeff Band 3 */ + { 23, 144, 163 }, + { 13, 112, 154 }, + { 2, 75, 117 }, + { 1, 50, 81 }, + { 1, 31, 51 }, + { 1, 14, 23 } + }, { /* Coeff Band 4 */ + { 18, 162, 185 }, + { 6, 123, 171 }, + { 1, 78, 125 }, + { 1, 51, 86 }, + { 1, 31, 54 }, + { 1, 14, 23 } + }, { /* Coeff Band 5 */ + { 15, 199, 227 }, + { 3, 150, 204 }, + { 1, 91, 146 }, + { 1, 55, 95 }, + { 1, 30, 53 }, + { 1, 11, 20 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 19, 55, 240 }, + { 19, 59, 196 }, + { 3, 52, 105 } + }, { /* Coeff Band 1 */ + { 41, 166, 207 }, + { 104, 153, 199 }, + { 31, 123, 181 }, + { 14, 101, 152 }, + { 5, 72, 106 }, + { 1, 36, 52 } + }, { /* Coeff Band 2 */ + { 35, 176, 211 }, + { 12, 131, 190 }, + { 2, 88, 144 }, + { 1, 60, 101 }, + { 1, 36, 60 }, + { 1, 16, 28 } + }, { /* Coeff Band 3 */ + { 28, 183, 213 }, + { 8, 134, 191 }, + { 1, 86, 142 }, + { 1, 56, 96 }, + { 1, 30, 53 }, + { 1, 12, 20 } + }, { /* Coeff Band 4 */ + { 20, 190, 215 }, + { 4, 135, 192 }, + { 1, 84, 139 }, + { 1, 53, 91 }, + { 1, 28, 49 }, + { 1, 11, 20 } + }, { /* Coeff Band 5 */ + { 13, 196, 216 }, + { 2, 137, 192 }, + { 1, 86, 143 }, + { 1, 57, 99 }, + { 1, 32, 56 }, + { 1, 13, 24 } + } + } + }, { /* block Type 1 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 211, 29, 217 }, + { 96, 47, 156 }, + { 22, 43, 87 } + }, { /* Coeff Band 1 */ + { 78, 120, 193 }, + { 111, 116, 186 }, + { 46, 102, 164 }, + { 15, 80, 128 }, + { 2, 49, 76 }, + { 1, 18, 28 } + }, { /* Coeff Band 2 */ + { 71, 161, 203 }, + { 42, 132, 192 }, + { 10, 98, 150 }, + { 3, 69, 109 }, + { 1, 44, 70 }, + { 1, 18, 29 } + }, { /* Coeff Band 3 */ + { 57, 186, 211 }, + { 30, 140, 196 }, + { 4, 93, 146 }, + { 1, 62, 102 }, + { 1, 38, 65 }, + { 1, 16, 27 } + }, { /* Coeff Band 4 */ + { 47, 199, 217 }, + { 14, 145, 196 }, + { 1, 88, 142 }, + { 1, 57, 98 }, + { 1, 36, 62 }, + { 1, 15, 26 } + }, { /* Coeff Band 5 */ + { 26, 219, 229 }, + { 5, 155, 207 }, + { 1, 94, 151 }, + { 1, 60, 104 }, + { 1, 36, 62 }, + { 1, 16, 28 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 233, 29, 248 }, + { 146, 47, 220 }, + { 43, 52, 140 } + }, { /* Coeff Band 1 */ + { 100, 163, 232 }, + { 179, 161, 222 }, + { 63, 142, 204 }, + { 37, 113, 174 }, + { 26, 89, 137 }, + { 18, 68, 97 } + }, { /* Coeff Band 2 */ + { 85, 181, 230 }, + { 32, 146, 209 }, + { 7, 100, 164 }, + { 3, 71, 121 }, + { 1, 45, 77 }, + { 1, 18, 30 } + }, { /* Coeff Band 3 */ + { 65, 187, 230 }, + { 20, 148, 207 }, + { 2, 97, 159 }, + { 1, 68, 116 }, + { 1, 40, 70 }, + { 1, 14, 29 } + }, { /* Coeff Band 4 */ + { 40, 194, 227 }, + { 8, 147, 204 }, + { 1, 94, 155 }, + { 1, 65, 112 }, + { 1, 39, 66 }, + { 1, 14, 26 } + }, { /* Coeff Band 5 */ + { 16, 208, 228 }, + { 3, 151, 207 }, + { 1, 98, 160 }, + { 1, 67, 117 }, + { 1, 41, 74 }, + { 1, 17, 31 } + } + } + } + }, { /* tx = 32x32 */ + { /* block Type 0 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 17, 38, 140 }, + { 7, 34, 80 }, + { 1, 17, 29 } + }, { /* Coeff Band 1 */ + { 37, 75, 128 }, + { 41, 76, 128 }, + { 26, 66, 116 }, + { 12, 52, 94 }, + { 2, 32, 55 }, + { 1, 10, 16 } + }, { /* Coeff Band 2 */ + { 50, 127, 154 }, + { 37, 109, 152 }, + { 16, 82, 121 }, + { 5, 59, 85 }, + { 1, 35, 54 }, + { 1, 13, 20 } + }, { /* Coeff Band 3 */ + { 40, 142, 167 }, + { 17, 110, 157 }, + { 2, 71, 112 }, + { 1, 44, 72 }, + { 1, 27, 45 }, + { 1, 11, 17 } + }, { /* Coeff Band 4 */ + { 30, 175, 188 }, + { 9, 124, 169 }, + { 1, 74, 116 }, + { 1, 48, 78 }, + { 1, 30, 49 }, + { 1, 11, 18 } + }, { /* Coeff Band 5 */ + { 10, 222, 223 }, + { 2, 150, 194 }, + { 1, 83, 128 }, + { 1, 48, 79 }, + { 1, 27, 45 }, + { 1, 11, 17 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 36, 41, 235 }, + { 29, 36, 193 }, + { 10, 27, 111 } + }, { /* Coeff Band 1 */ + { 85, 165, 222 }, + { 177, 162, 215 }, + { 110, 135, 195 }, + { 57, 113, 168 }, + { 23, 83, 120 }, + { 10, 49, 61 } + }, { /* Coeff Band 2 */ + { 85, 190, 223 }, + { 36, 139, 200 }, + { 5, 90, 146 }, + { 1, 60, 103 }, + { 1, 38, 65 }, + { 1, 18, 30 } + }, { /* Coeff Band 3 */ + { 72, 202, 223 }, + { 23, 141, 199 }, + { 2, 86, 140 }, + { 1, 56, 97 }, + { 1, 36, 61 }, + { 1, 16, 27 } + }, { /* Coeff Band 4 */ + { 55, 218, 225 }, + { 13, 145, 200 }, + { 1, 86, 141 }, + { 1, 57, 99 }, + { 1, 35, 61 }, + { 1, 13, 22 } + }, { /* Coeff Band 5 */ + { 15, 235, 212 }, + { 1, 132, 184 }, + { 1, 84, 139 }, + { 1, 57, 97 }, + { 1, 34, 56 }, + { 1, 14, 23 } + } + } + }, { /* block Type 1 */ + { /* Intra */ + { /* Coeff Band 0 */ + { 181, 21, 201 }, + { 61, 37, 123 }, + { 10, 38, 71 } + }, { /* Coeff Band 1 */ + { 47, 106, 172 }, + { 95, 104, 173 }, + { 42, 93, 159 }, + { 18, 77, 131 }, + { 4, 50, 81 }, + { 1, 17, 23 } + }, { /* Coeff Band 2 */ + { 62, 147, 199 }, + { 44, 130, 189 }, + { 28, 102, 154 }, + { 18, 75, 115 }, + { 2, 44, 65 }, + { 1, 12, 19 } + }, { /* Coeff Band 3 */ + { 55, 153, 210 }, + { 24, 130, 194 }, + { 3, 93, 146 }, + { 1, 61, 97 }, + { 1, 31, 50 }, + { 1, 10, 16 } + }, { /* Coeff Band 4 */ + { 49, 186, 223 }, + { 17, 148, 204 }, + { 1, 96, 142 }, + { 1, 53, 83 }, + { 1, 26, 44 }, + { 1, 11, 17 } + }, { /* Coeff Band 5 */ + { 13, 217, 212 }, + { 2, 136, 180 }, + { 1, 78, 124 }, + { 1, 50, 83 }, + { 1, 29, 49 }, + { 1, 14, 23 } + } + }, { /* Inter */ + { /* Coeff Band 0 */ + { 197, 13, 247 }, + { 82, 17, 222 }, + { 25, 17, 162 } + }, { /* Coeff Band 1 */ + { 126, 186, 247 }, + { 234, 191, 243 }, + { 176, 177, 234 }, + { 104, 158, 220 }, + { 66, 128, 186 }, + { 55, 90, 137 } + }, { /* Coeff Band 2 */ + { 111, 197, 242 }, + { 46, 158, 219 }, + { 9, 104, 171 }, + { 2, 65, 125 }, + { 1, 44, 80 }, + { 1, 17, 91 } + }, { /* Coeff Band 3 */ + { 104, 208, 245 }, + { 39, 168, 224 }, + { 3, 109, 162 }, + { 1, 79, 124 }, + { 1, 50, 102 }, + { 1, 43, 102 } + }, { /* Coeff Band 4 */ + { 84, 220, 246 }, + { 31, 177, 231 }, + { 2, 115, 180 }, + { 1, 79, 134 }, + { 1, 55, 77 }, + { 1, 60, 79 } + }, { /* Coeff Band 5 */ + { 43, 243, 240 }, + { 8, 180, 217 }, + { 1, 115, 166 }, + { 1, 84, 121 }, + { 1, 51, 67 }, + { 1, 16, 6 } + } + } + } + } +}; + +const int8_t ff_vp9_mv_joint_tree[3][2] = { + { -MV_JOINT_ZERO, 1 }, // '0' + { -MV_JOINT_H, 2 }, // '10' + { -MV_JOINT_V, -MV_JOINT_HV }, // '11x' +}; + +const int8_t ff_vp9_mv_class_tree[10][2] = { + { -0, 1 }, // '0' + { -1, 2 }, // '10' + { 3, 4 }, + { -2, -3 }, // '110x' + { 5, 6 }, + { -4, -5 }, // '1110x' + { -6, 7 }, // '11110' + { 8, 9 }, + { -7, -8 }, // '111110x' + { -9, -10 }, // '111111x' +}; + +const int8_t ff_vp9_mv_fp_tree[3][2] = { + { -0, 1 }, // '0' + { -1, 2 }, // '10' + { -2, -3 }, // '11x' +}; diff --git a/media/ffvpx/libavcodec/vp9data.h b/media/ffvpx/libavcodec/vp9data.h index cb12e7e94679..086dbdec06dd 100644 --- a/media/ffvpx/libavcodec/vp9data.h +++ b/media/ffvpx/libavcodec/vp9data.h @@ -24,2254 +24,48 @@ #include -#include "vp9.h" +#include "vp9dec.h" -static const int8_t vp9_partition_tree[3][2] = { - { -PARTITION_NONE, 1 }, // '0' - { -PARTITION_H, 2 }, // '10' - { -PARTITION_V, -PARTITION_SPLIT }, // '110', '111' -}; - -static const uint8_t vp9_default_kf_partition_probs[4][4][3] = { - { /* 64x64 -> 32x32 */ - { 174, 35, 49 } /* a/l both not split */, - { 68, 11, 27 } /* a split, l not split */, - { 57, 15, 9 } /* l split, a not split */, - { 12, 3, 3 } /* a/l both split */ - }, { /* 32x32 -> 16x16 */ - { 150, 40, 39 } /* a/l both not split */, - { 78, 12, 26 } /* a split, l not split */, - { 67, 33, 11 } /* l split, a not split */, - { 24, 7, 5 } /* a/l both split */, - }, { /* 16x16 -> 8x8 */ - { 149, 53, 53 } /* a/l both not split */, - { 94, 20, 48 } /* a split, l not split */, - { 83, 53, 24 } /* l split, a not split */, - { 52, 18, 18 } /* a/l both split */, - }, { /* 8x8 -> 4x4 */ - { 158, 97, 94 } /* a/l both not split */, - { 93, 24, 99 } /* a split, l not split */, - { 85, 119, 44 } /* l split, a not split */, - { 62, 59, 67 } /* a/l both split */, - }, -}; - -static const int8_t vp9_segmentation_tree[7][2] = { - { 1, 2 }, - { 3, 4 }, - { 5, 6 }, - { -0, -1 }, // '00x' - { -2, -3 }, // '01x' - { -4, -5 }, // '10x' - { -6, -7 }, // '11x' -}; - -static const int8_t vp9_intramode_tree[9][2] = { - { -DC_PRED, 1 }, // '0' - { -TM_VP8_PRED, 2 }, // '10' - { -VERT_PRED, 3 }, // '110' - { 4, 6 }, - { -HOR_PRED, 5 }, // '11100' - { -DIAG_DOWN_RIGHT_PRED, -VERT_RIGHT_PRED }, // '11101x' - { -DIAG_DOWN_LEFT_PRED, 7 }, // '11110' - { -VERT_LEFT_PRED, 8 }, // '111110' - { -HOR_DOWN_PRED, -HOR_UP_PRED }, // '111111x' -}; - -static const uint8_t vp9_default_kf_ymode_probs[10][10][9] = { - { /* above = v */ - { 43, 46, 168, 134, 107, 128, 69, 142, 92 } /* left = v */, - { 44, 29, 68, 159, 201, 177, 50, 57, 77 } /* left = h */, - { 63, 36, 126, 146, 123, 158, 60, 90, 96 } /* left = dc */, - { 58, 38, 76, 114, 97, 172, 78, 133, 92 } /* left = d45 */, - { 46, 41, 76, 140, 63, 184, 69, 112, 57 } /* left = d135 */, - { 38, 32, 85, 140, 46, 112, 54, 151, 133 } /* left = d117 */, - { 39, 27, 61, 131, 110, 175, 44, 75, 136 } /* left = d153 */, - { 47, 35, 80, 100, 74, 143, 64, 163, 74 } /* left = d63 */, - { 52, 30, 74, 113, 130, 175, 51, 64, 58 } /* left = d27 */, - { 36, 61, 116, 114, 128, 162, 80, 125, 82 } /* left = tm */ - }, { /* above = h */ - { 55, 44, 68, 166, 179, 192, 57, 57, 108 } /* left = v */, - { 42, 26, 11, 199, 241, 228, 23, 15, 85 } /* left = h */, - { 82, 26, 26, 171, 208, 204, 44, 32, 105 } /* left = dc */, - { 68, 42, 19, 131, 160, 199, 55, 52, 83 } /* left = d45 */, - { 58, 50, 25, 139, 115, 232, 39, 52, 118 } /* left = d135 */, - { 50, 35, 33, 153, 104, 162, 64, 59, 131 } /* left = d117 */, - { 44, 24, 16, 150, 177, 202, 33, 19, 156 } /* left = d153 */, - { 53, 49, 21, 110, 116, 168, 59, 80, 76 } /* left = d63 */, - { 55, 27, 12, 153, 203, 218, 26, 27, 49 } /* left = d27 */, - { 38, 72, 19, 168, 203, 212, 50, 50, 107 } /* left = tm */ - }, { /* above = dc */ - { 92, 45, 102, 136, 116, 180, 74, 90, 100 } /* left = v */, - { 73, 32, 19, 187, 222, 215, 46, 34, 100 } /* left = h */, - { 137, 30, 42, 148, 151, 207, 70, 52, 91 } /* left = dc */, - { 91, 30, 32, 116, 121, 186, 93, 86, 94 } /* left = d45 */, - { 72, 35, 36, 149, 68, 206, 68, 63, 105 } /* left = d135 */, - { 73, 31, 28, 138, 57, 124, 55, 122, 151 } /* left = d117 */, - { 67, 23, 21, 140, 126, 197, 40, 37, 171 } /* left = d153 */, - { 74, 32, 27, 107, 86, 160, 63, 134, 102 } /* left = d63 */, - { 86, 27, 28, 128, 154, 212, 45, 43, 53 } /* left = d27 */, - { 59, 67, 44, 140, 161, 202, 78, 67, 119 } /* left = tm */ - }, { /* above = d45 */ - { 59, 38, 83, 112, 103, 162, 98, 136, 90 } /* left = v */, - { 62, 30, 23, 158, 200, 207, 59, 57, 50 } /* left = h */, - { 103, 26, 36, 129, 132, 201, 83, 80, 93 } /* left = dc */, - { 67, 30, 29, 84, 86, 191, 102, 91, 59 } /* left = d45 */, - { 60, 32, 33, 112, 71, 220, 64, 89, 104 } /* left = d135 */, - { 53, 26, 34, 130, 56, 149, 84, 120, 103 } /* left = d117 */, - { 53, 21, 23, 133, 109, 210, 56, 77, 172 } /* left = d153 */, - { 61, 29, 29, 93, 97, 165, 83, 175, 162 } /* left = d63 */, - { 77, 19, 29, 112, 142, 228, 55, 66, 36 } /* left = d27 */, - { 47, 47, 43, 114, 137, 181, 100, 99, 95 } /* left = tm */ - }, { /* above = d135 */ - { 53, 40, 55, 139, 69, 183, 61, 80, 110 } /* left = v */, - { 40, 29, 19, 161, 180, 207, 43, 24, 91 } /* left = h */, - { 69, 23, 29, 128, 83, 199, 46, 44, 101 } /* left = dc */, - { 60, 34, 19, 105, 61, 198, 53, 64, 89 } /* left = d45 */, - { 52, 31, 22, 158, 40, 209, 58, 62, 89 } /* left = d135 */, - { 44, 31, 29, 147, 46, 158, 56, 102, 198 } /* left = d117 */, - { 35, 19, 12, 135, 87, 209, 41, 45, 167 } /* left = d153 */, - { 51, 38, 25, 113, 58, 164, 70, 93, 97 } /* left = d63 */, - { 55, 25, 21, 118, 95, 215, 38, 39, 66 } /* left = d27 */, - { 47, 54, 34, 146, 108, 203, 72, 103, 151 } /* left = tm */ - }, { /* above = d117 */ - { 46, 27, 80, 150, 55, 124, 55, 121, 135 } /* left = v */, - { 36, 23, 27, 165, 149, 166, 54, 64, 118 } /* left = h */, - { 64, 19, 37, 156, 66, 138, 49, 95, 133 } /* left = dc */, - { 53, 21, 36, 131, 63, 163, 60, 109, 81 } /* left = d45 */, - { 40, 26, 35, 154, 40, 185, 51, 97, 123 } /* left = d135 */, - { 35, 19, 34, 179, 19, 97, 48, 129, 124 } /* left = d117 */, - { 36, 20, 26, 136, 62, 164, 33, 77, 154 } /* left = d153 */, - { 45, 26, 28, 129, 45, 129, 49, 147, 123 } /* left = d63 */, - { 45, 18, 32, 130, 90, 157, 40, 79, 91 } /* left = d27 */, - { 38, 44, 51, 136, 74, 162, 57, 97, 121 } /* left = tm */ - }, { /* above = d153 */ - { 56, 39, 58, 133, 117, 173, 48, 53, 187 } /* left = v */, - { 35, 21, 12, 161, 212, 207, 20, 23, 145 } /* left = h */, - { 75, 17, 22, 136, 138, 185, 32, 34, 166 } /* left = dc */, - { 56, 29, 19, 117, 109, 181, 55, 68, 112 } /* left = d45 */, - { 47, 29, 17, 153, 64, 220, 59, 51, 114 } /* left = d135 */, - { 46, 16, 24, 136, 76, 147, 41, 64, 172 } /* left = d117 */, - { 34, 17, 11, 108, 152, 187, 13, 15, 209 } /* left = d153 */, - { 55, 30, 18, 122, 79, 179, 44, 88, 116 } /* left = d63 */, - { 51, 24, 14, 115, 133, 209, 32, 26, 104 } /* left = d27 */, - { 37, 49, 25, 129, 168, 164, 41, 54, 148 } /* left = tm */ - }, { /* above = d63 */ - { 48, 34, 86, 101, 92, 146, 78, 179, 134 } /* left = v */, - { 47, 22, 24, 138, 187, 178, 68, 69, 59 } /* left = h */, - { 78, 23, 39, 111, 117, 170, 74, 124, 94 } /* left = dc */, - { 56, 25, 33, 105, 112, 187, 95, 177, 129 } /* left = d45 */, - { 48, 31, 27, 114, 63, 183, 82, 116, 56 } /* left = d135 */, - { 43, 28, 37, 121, 63, 123, 61, 192, 169 } /* left = d117 */, - { 42, 17, 24, 109, 97, 177, 56, 76, 122 } /* left = d153 */, - { 46, 23, 32, 74, 86, 150, 67, 183, 88 } /* left = d63 */, - { 58, 18, 28, 105, 139, 182, 70, 92, 63 } /* left = d27 */, - { 36, 38, 48, 92, 122, 165, 88, 137, 91 } /* left = tm */ - }, { /* above = d27 */ - { 62, 44, 61, 123, 105, 189, 48, 57, 64 } /* left = v */, - { 47, 25, 17, 175, 222, 220, 24, 30, 86 } /* left = h */, - { 82, 22, 32, 127, 143, 213, 39, 41, 70 } /* left = dc */, - { 68, 36, 17, 106, 102, 206, 59, 74, 74 } /* left = d45 */, - { 57, 39, 23, 151, 68, 216, 55, 63, 58 } /* left = d135 */, - { 49, 30, 35, 141, 70, 168, 82, 40, 115 } /* left = d117 */, - { 51, 25, 15, 136, 129, 202, 38, 35, 139 } /* left = d153 */, - { 59, 39, 19, 114, 75, 180, 77, 104, 42 } /* left = d63 */, - { 68, 26, 16, 111, 141, 215, 29, 28, 28 } /* left = d27 */, - { 40, 61, 26, 126, 152, 206, 61, 59, 93 } /* left = tm */ - }, { /* above = tm */ - { 44, 78, 115, 132, 119, 173, 71, 112, 93 } /* left = v */, - { 39, 38, 21, 184, 227, 206, 42, 32, 64 } /* left = h */, - { 65, 70, 60, 155, 159, 199, 61, 60, 81 } /* left = dc */, - { 58, 47, 36, 124, 137, 193, 80, 82, 78 } /* left = d45 */, - { 49, 50, 35, 144, 95, 205, 63, 78, 59 } /* left = d135 */, - { 41, 53, 52, 148, 71, 142, 65, 128, 51 } /* left = d117 */, - { 40, 36, 28, 143, 143, 202, 40, 55, 137 } /* left = d153 */, - { 42, 44, 44, 104, 105, 164, 64, 130, 80 } /* left = d63 */, - { 52, 34, 29, 129, 183, 227, 42, 35, 43 } /* left = d27 */, - { 43, 81, 53, 140, 169, 204, 68, 84, 72 } /* left = tm */ - } -}; - -static const uint8_t vp9_default_kf_uvmode_probs[10][9] = { - { 118, 15, 123, 148, 131, 101, 44, 93, 131 } /* y = v */, - { 113, 12, 23, 188, 226, 142, 26, 32, 125 } /* y = h */, - { 144, 11, 54, 157, 195, 130, 46, 58, 108 } /* y = dc */, - { 120, 11, 50, 123, 163, 135, 64, 77, 103 } /* y = d45 */, - { 113, 9, 36, 155, 111, 157, 32, 44, 161 } /* y = d135 */, - { 116, 9, 55, 176, 76, 96, 37, 61, 149 } /* y = d117 */, - { 115, 9, 28, 141, 161, 167, 21, 25, 193 } /* y = d153 */, - { 116, 12, 64, 120, 140, 125, 49, 115, 121 } /* y = d63 */, - { 120, 12, 32, 145, 195, 142, 32, 38, 86 } /* y = d27 */, - { 102, 19, 66, 162, 182, 122, 35, 59, 128 } /* y = tm */ -}; - -static const int8_t vp9_inter_mode_tree[3][2] = { - { -ZEROMV, 1 }, // '0' - { -NEARESTMV, 2 }, // '10' - { -NEARMV, -NEWMV }, // '11x' -}; - -static const int8_t vp9_filter_tree[2][2] = { - { -0, 1 }, // '0' - { -1, -2 }, // '1x' -}; - -static const enum FilterMode vp9_filter_lut[3] = { - FILTER_8TAP_REGULAR, - FILTER_8TAP_SMOOTH, - FILTER_8TAP_SHARP, -}; - -static const int16_t vp9_dc_qlookup[3][256] = { - { - 4, 8, 8, 9, 10, 11, 12, 12, - 13, 14, 15, 16, 17, 18, 19, 19, - 20, 21, 22, 23, 24, 25, 26, 26, - 27, 28, 29, 30, 31, 32, 32, 33, - 34, 35, 36, 37, 38, 38, 39, 40, - 41, 42, 43, 43, 44, 45, 46, 47, - 48, 48, 49, 50, 51, 52, 53, 53, - 54, 55, 56, 57, 57, 58, 59, 60, - 61, 62, 62, 63, 64, 65, 66, 66, - 67, 68, 69, 70, 70, 71, 72, 73, - 74, 74, 75, 76, 77, 78, 78, 79, - 80, 81, 81, 82, 83, 84, 85, 85, - 87, 88, 90, 92, 93, 95, 96, 98, - 99, 101, 102, 104, 105, 107, 108, 110, - 111, 113, 114, 116, 117, 118, 120, 121, - 123, 125, 127, 129, 131, 134, 136, 138, - 140, 142, 144, 146, 148, 150, 152, 154, - 156, 158, 161, 164, 166, 169, 172, 174, - 177, 180, 182, 185, 187, 190, 192, 195, - 199, 202, 205, 208, 211, 214, 217, 220, - 223, 226, 230, 233, 237, 240, 243, 247, - 250, 253, 257, 261, 265, 269, 272, 276, - 280, 284, 288, 292, 296, 300, 304, 309, - 313, 317, 322, 326, 330, 335, 340, 344, - 349, 354, 359, 364, 369, 374, 379, 384, - 389, 395, 400, 406, 411, 417, 423, 429, - 435, 441, 447, 454, 461, 467, 475, 482, - 489, 497, 505, 513, 522, 530, 539, 549, - 559, 569, 579, 590, 602, 614, 626, 640, - 654, 668, 684, 700, 717, 736, 755, 775, - 796, 819, 843, 869, 896, 925, 955, 988, - 1022, 1058, 1098, 1139, 1184, 1232, 1282, 1336, - }, { - 4, 9, 10, 13, 15, 17, 20, 22, - 25, 28, 31, 34, 37, 40, 43, 47, - 50, 53, 57, 60, 64, 68, 71, 75, - 78, 82, 86, 90, 93, 97, 101, 105, - 109, 113, 116, 120, 124, 128, 132, 136, - 140, 143, 147, 151, 155, 159, 163, 166, - 170, 174, 178, 182, 185, 189, 193, 197, - 200, 204, 208, 212, 215, 219, 223, 226, - 230, 233, 237, 241, 244, 248, 251, 255, - 259, 262, 266, 269, 273, 276, 280, 283, - 287, 290, 293, 297, 300, 304, 307, 310, - 314, 317, 321, 324, 327, 331, 334, 337, - 343, 350, 356, 362, 369, 375, 381, 387, - 394, 400, 406, 412, 418, 424, 430, 436, - 442, 448, 454, 460, 466, 472, 478, 484, - 490, 499, 507, 516, 525, 533, 542, 550, - 559, 567, 576, 584, 592, 601, 609, 617, - 625, 634, 644, 655, 666, 676, 687, 698, - 708, 718, 729, 739, 749, 759, 770, 782, - 795, 807, 819, 831, 844, 856, 868, 880, - 891, 906, 920, 933, 947, 961, 975, 988, - 1001, 1015, 1030, 1045, 1061, 1076, 1090, 1105, - 1120, 1137, 1153, 1170, 1186, 1202, 1218, 1236, - 1253, 1271, 1288, 1306, 1323, 1342, 1361, 1379, - 1398, 1416, 1436, 1456, 1476, 1496, 1516, 1537, - 1559, 1580, 1601, 1624, 1647, 1670, 1692, 1717, - 1741, 1766, 1791, 1817, 1844, 1871, 1900, 1929, - 1958, 1990, 2021, 2054, 2088, 2123, 2159, 2197, - 2236, 2276, 2319, 2363, 2410, 2458, 2508, 2561, - 2616, 2675, 2737, 2802, 2871, 2944, 3020, 3102, - 3188, 3280, 3375, 3478, 3586, 3702, 3823, 3953, - 4089, 4236, 4394, 4559, 4737, 4929, 5130, 5347, - }, { - 4, 12, 18, 25, 33, 41, 50, 60, - 70, 80, 91, 103, 115, 127, 140, 153, - 166, 180, 194, 208, 222, 237, 251, 266, - 281, 296, 312, 327, 343, 358, 374, 390, - 405, 421, 437, 453, 469, 484, 500, 516, - 532, 548, 564, 580, 596, 611, 627, 643, - 659, 674, 690, 706, 721, 737, 752, 768, - 783, 798, 814, 829, 844, 859, 874, 889, - 904, 919, 934, 949, 964, 978, 993, 1008, - 1022, 1037, 1051, 1065, 1080, 1094, 1108, 1122, - 1136, 1151, 1165, 1179, 1192, 1206, 1220, 1234, - 1248, 1261, 1275, 1288, 1302, 1315, 1329, 1342, - 1368, 1393, 1419, 1444, 1469, 1494, 1519, 1544, - 1569, 1594, 1618, 1643, 1668, 1692, 1717, 1741, - 1765, 1789, 1814, 1838, 1862, 1885, 1909, 1933, - 1957, 1992, 2027, 2061, 2096, 2130, 2165, 2199, - 2233, 2267, 2300, 2334, 2367, 2400, 2434, 2467, - 2499, 2532, 2575, 2618, 2661, 2704, 2746, 2788, - 2830, 2872, 2913, 2954, 2995, 3036, 3076, 3127, - 3177, 3226, 3275, 3324, 3373, 3421, 3469, 3517, - 3565, 3621, 3677, 3733, 3788, 3843, 3897, 3951, - 4005, 4058, 4119, 4181, 4241, 4301, 4361, 4420, - 4479, 4546, 4612, 4677, 4742, 4807, 4871, 4942, - 5013, 5083, 5153, 5222, 5291, 5367, 5442, 5517, - 5591, 5665, 5745, 5825, 5905, 5984, 6063, 6149, - 6234, 6319, 6404, 6495, 6587, 6678, 6769, 6867, - 6966, 7064, 7163, 7269, 7376, 7483, 7599, 7715, - 7832, 7958, 8085, 8214, 8352, 8492, 8635, 8788, - 8945, 9104, 9275, 9450, 9639, 9832, 10031, 10245, - 10465, 10702, 10946, 11210, 11482, 11776, 12081, 12409, - 12750, 13118, 13501, 13913, 14343, 14807, 15290, 15812, - 16356, 16943, 17575, 18237, 18949, 19718, 20521, 21387, - } -}; - -static const int16_t vp9_ac_qlookup[3][256] = { - { - 4, 8, 9, 10, 11, 12, 13, 14, - 15, 16, 17, 18, 19, 20, 21, 22, - 23, 24, 25, 26, 27, 28, 29, 30, - 31, 32, 33, 34, 35, 36, 37, 38, - 39, 40, 41, 42, 43, 44, 45, 46, - 47, 48, 49, 50, 51, 52, 53, 54, - 55, 56, 57, 58, 59, 60, 61, 62, - 63, 64, 65, 66, 67, 68, 69, 70, - 71, 72, 73, 74, 75, 76, 77, 78, - 79, 80, 81, 82, 83, 84, 85, 86, - 87, 88, 89, 90, 91, 92, 93, 94, - 95, 96, 97, 98, 99, 100, 101, 102, - 104, 106, 108, 110, 112, 114, 116, 118, - 120, 122, 124, 126, 128, 130, 132, 134, - 136, 138, 140, 142, 144, 146, 148, 150, - 152, 155, 158, 161, 164, 167, 170, 173, - 176, 179, 182, 185, 188, 191, 194, 197, - 200, 203, 207, 211, 215, 219, 223, 227, - 231, 235, 239, 243, 247, 251, 255, 260, - 265, 270, 275, 280, 285, 290, 295, 300, - 305, 311, 317, 323, 329, 335, 341, 347, - 353, 359, 366, 373, 380, 387, 394, 401, - 408, 416, 424, 432, 440, 448, 456, 465, - 474, 483, 492, 501, 510, 520, 530, 540, - 550, 560, 571, 582, 593, 604, 615, 627, - 639, 651, 663, 676, 689, 702, 715, 729, - 743, 757, 771, 786, 801, 816, 832, 848, - 864, 881, 898, 915, 933, 951, 969, 988, - 1007, 1026, 1046, 1066, 1087, 1108, 1129, 1151, - 1173, 1196, 1219, 1243, 1267, 1292, 1317, 1343, - 1369, 1396, 1423, 1451, 1479, 1508, 1537, 1567, - 1597, 1628, 1660, 1692, 1725, 1759, 1793, 1828, - }, { - 4, 9, 11, 13, 16, 18, 21, 24, - 27, 30, 33, 37, 40, 44, 48, 51, - 55, 59, 63, 67, 71, 75, 79, 83, - 88, 92, 96, 100, 105, 109, 114, 118, - 122, 127, 131, 136, 140, 145, 149, 154, - 158, 163, 168, 172, 177, 181, 186, 190, - 195, 199, 204, 208, 213, 217, 222, 226, - 231, 235, 240, 244, 249, 253, 258, 262, - 267, 271, 275, 280, 284, 289, 293, 297, - 302, 306, 311, 315, 319, 324, 328, 332, - 337, 341, 345, 349, 354, 358, 362, 367, - 371, 375, 379, 384, 388, 392, 396, 401, - 409, 417, 425, 433, 441, 449, 458, 466, - 474, 482, 490, 498, 506, 514, 523, 531, - 539, 547, 555, 563, 571, 579, 588, 596, - 604, 616, 628, 640, 652, 664, 676, 688, - 700, 713, 725, 737, 749, 761, 773, 785, - 797, 809, 825, 841, 857, 873, 889, 905, - 922, 938, 954, 970, 986, 1002, 1018, 1038, - 1058, 1078, 1098, 1118, 1138, 1158, 1178, 1198, - 1218, 1242, 1266, 1290, 1314, 1338, 1362, 1386, - 1411, 1435, 1463, 1491, 1519, 1547, 1575, 1603, - 1631, 1663, 1695, 1727, 1759, 1791, 1823, 1859, - 1895, 1931, 1967, 2003, 2039, 2079, 2119, 2159, - 2199, 2239, 2283, 2327, 2371, 2415, 2459, 2507, - 2555, 2603, 2651, 2703, 2755, 2807, 2859, 2915, - 2971, 3027, 3083, 3143, 3203, 3263, 3327, 3391, - 3455, 3523, 3591, 3659, 3731, 3803, 3876, 3952, - 4028, 4104, 4184, 4264, 4348, 4432, 4516, 4604, - 4692, 4784, 4876, 4972, 5068, 5168, 5268, 5372, - 5476, 5584, 5692, 5804, 5916, 6032, 6148, 6268, - 6388, 6512, 6640, 6768, 6900, 7036, 7172, 7312, - }, { - 4, 13, 19, 27, 35, 44, 54, 64, - 75, 87, 99, 112, 126, 139, 154, 168, - 183, 199, 214, 230, 247, 263, 280, 297, - 314, 331, 349, 366, 384, 402, 420, 438, - 456, 475, 493, 511, 530, 548, 567, 586, - 604, 623, 642, 660, 679, 698, 716, 735, - 753, 772, 791, 809, 828, 846, 865, 884, - 902, 920, 939, 957, 976, 994, 1012, 1030, - 1049, 1067, 1085, 1103, 1121, 1139, 1157, 1175, - 1193, 1211, 1229, 1246, 1264, 1282, 1299, 1317, - 1335, 1352, 1370, 1387, 1405, 1422, 1440, 1457, - 1474, 1491, 1509, 1526, 1543, 1560, 1577, 1595, - 1627, 1660, 1693, 1725, 1758, 1791, 1824, 1856, - 1889, 1922, 1954, 1987, 2020, 2052, 2085, 2118, - 2150, 2183, 2216, 2248, 2281, 2313, 2346, 2378, - 2411, 2459, 2508, 2556, 2605, 2653, 2701, 2750, - 2798, 2847, 2895, 2943, 2992, 3040, 3088, 3137, - 3185, 3234, 3298, 3362, 3426, 3491, 3555, 3619, - 3684, 3748, 3812, 3876, 3941, 4005, 4069, 4149, - 4230, 4310, 4390, 4470, 4550, 4631, 4711, 4791, - 4871, 4967, 5064, 5160, 5256, 5352, 5448, 5544, - 5641, 5737, 5849, 5961, 6073, 6185, 6297, 6410, - 6522, 6650, 6778, 6906, 7034, 7162, 7290, 7435, - 7579, 7723, 7867, 8011, 8155, 8315, 8475, 8635, - 8795, 8956, 9132, 9308, 9484, 9660, 9836, 10028, - 10220, 10412, 10604, 10812, 11020, 11228, 11437, 11661, - 11885, 12109, 12333, 12573, 12813, 13053, 13309, 13565, - 13821, 14093, 14365, 14637, 14925, 15213, 15502, 15806, - 16110, 16414, 16734, 17054, 17390, 17726, 18062, 18414, - 18766, 19134, 19502, 19886, 20270, 20670, 21070, 21486, - 21902, 22334, 22766, 23214, 23662, 24126, 24590, 25070, - 25551, 26047, 26559, 27071, 27599, 28143, 28687, 29247, - } -}; - -static const enum TxfmType vp9_intra_txfm_type[14] = { - [VERT_PRED] = ADST_DCT, - [HOR_PRED] = DCT_ADST, - [DC_PRED] = DCT_DCT, - [DIAG_DOWN_LEFT_PRED] = DCT_DCT, - [DIAG_DOWN_RIGHT_PRED] = ADST_ADST, - [VERT_RIGHT_PRED] = ADST_DCT, - [HOR_DOWN_PRED] = DCT_ADST, - [VERT_LEFT_PRED] = ADST_DCT, - [HOR_UP_PRED] = DCT_ADST, - [TM_VP8_PRED] = ADST_ADST, - [NEARESTMV] = DCT_DCT, - [NEARMV] = DCT_DCT, - [ZEROMV] = DCT_DCT, - [NEWMV] = DCT_DCT, -}; - -static const int16_t vp9_default_scan_4x4[16] = { - 0, 1, 4, 5, - 2, 8, 3, 6, - 12, 9, 7, 10, - 13, 11, 14, 15, -}; - -static const int16_t vp9_col_scan_4x4[16] = { - 0, 1, 2, 4, - 3, 5, 6, 8, - 7, 9, 10, 12, - 13, 11, 14, 15, -}; - -static const int16_t vp9_row_scan_4x4[16] = { - 0, 4, 1, 8, - 5, 12, 9, 2, - 6, 13, 3, 10, - 7, 14, 11, 15, -}; - -static const int16_t vp9_default_scan_8x8[64] = { - 0, 1, 8, 2, 9, 16, 10, 3, - 17, 24, 18, 11, 4, 25, 32, 19, - 12, 26, 5, 33, 20, 27, 40, 13, - 34, 6, 41, 28, 21, 35, 42, 48, - 14, 7, 36, 29, 43, 56, 49, 22, - 15, 37, 50, 44, 57, 30, 23, 51, - 45, 58, 38, 31, 52, 59, 39, 46, - 53, 60, 47, 54, 61, 55, 62, 63, -}; - -static const int16_t vp9_col_scan_8x8[64] = { - 0, 1, 2, 8, 3, 9, 4, 10, - 16, 5, 11, 17, 12, 18, 6, 24, - 19, 13, 25, 7, 26, 20, 32, 14, - 27, 21, 33, 28, 34, 15, 22, 35, - 40, 29, 41, 36, 23, 30, 42, 37, - 48, 43, 31, 44, 49, 38, 50, 56, - 45, 39, 51, 57, 52, 46, 58, 53, - 59, 47, 60, 54, 61, 55, 62, 63, -}; - -static const int16_t vp9_row_scan_8x8[64] = { - 0, 8, 16, 1, 9, 24, 2, 17, - 32, 10, 25, 3, 40, 18, 11, 33, - 26, 19, 4, 48, 41, 34, 12, 27, - 56, 20, 5, 42, 35, 13, 49, 28, - 6, 21, 43, 36, 14, 50, 29, 57, - 7, 44, 22, 37, 51, 15, 58, 30, - 23, 45, 52, 38, 59, 31, 46, 53, - 39, 60, 47, 61, 54, 62, 55, 63, -}; - -static const int16_t vp9_default_scan_16x16[256] = { - 0, 1, 16, 2, 17, 32, 3, 18, 33, 48, 4, 34, 19, 49, 20, 5, - 35, 64, 50, 36, 65, 21, 6, 51, 80, 66, 37, 22, 52, 7, 81, 67, - 38, 82, 53, 23, 96, 68, 8, 83, 97, 54, 39, 69, 112, 24, 98, 84, - 70, 55, 9, 40, 85, 99, 113, 128, 25, 114, 100, 71, 86, 56, 10, 41, - 115, 101, 129, 116, 72, 87, 26, 130, 144, 102, 57, 11, 42, 117, 131, 145, - 88, 103, 27, 73, 132, 118, 146, 58, 160, 12, 43, 133, 147, 104, 89, 119, - 161, 74, 148, 134, 28, 162, 59, 13, 176, 120, 149, 90, 135, 105, 163, 44, - 75, 177, 164, 29, 150, 121, 136, 178, 165, 14, 106, 60, 91, 151, 45, 179, - 192, 137, 166, 122, 76, 180, 152, 30, 61, 15, 107, 167, 181, 193, 92, 208, - 46, 138, 123, 153, 194, 77, 168, 182, 31, 195, 209, 183, 108, 139, 62, 154, - 47, 196, 93, 169, 210, 197, 224, 124, 184, 211, 78, 109, 170, 155, 63, 198, - 212, 185, 225, 240, 140, 94, 199, 125, 79, 213, 226, 171, 186, 156, 214, 200, - 110, 227, 141, 95, 241, 215, 228, 201, 126, 242, 187, 172, 157, 229, 111, 216, - 243, 142, 202, 230, 127, 217, 244, 173, 188, 231, 158, 203, 143, 245, 218, 232, - 189, 246, 159, 174, 233, 247, 219, 204, 175, 190, 248, 234, 205, 220, 249, 191, - 235, 221, 250, 206, 222, 251, 236, 207, 237, 223, 252, 238, 253, 239, 254, 255, -}; - -static const int16_t vp9_col_scan_16x16[256] = { - 0, 1, 2, 3, 16, 4, 17, 5, 18, 6, 19, 32, 20, 7, 33, 21, - 34, 8, 35, 22, 48, 36, 9, 49, 23, 50, 37, 10, 38, 51, 24, 64, - 52, 11, 65, 39, 25, 53, 66, 54, 40, 67, 12, 80, 26, 68, 55, 81, - 41, 69, 13, 27, 82, 56, 70, 83, 42, 14, 84, 96, 71, 28, 57, 85, - 97, 15, 72, 98, 43, 86, 58, 99, 29, 87, 100, 112, 73, 44, 101, 59, - 30, 113, 88, 114, 74, 128, 102, 45, 31, 115, 60, 103, 89, 116, 75, 129, - 117, 46, 104, 90, 61, 130, 118, 131, 132, 105, 76, 47, 119, 144, 91, 62, - 133, 106, 145, 120, 146, 134, 77, 147, 121, 92, 135, 148, 63, 107, 136, 122, - 93, 149, 160, 78, 150, 137, 108, 161, 162, 151, 123, 79, 138, 163, 152, 94, - 164, 109, 165, 153, 124, 139, 176, 166, 95, 177, 167, 110, 154, 178, 125, 179, - 140, 168, 155, 111, 180, 192, 181, 169, 141, 126, 182, 193, 194, 156, 183, 170, - 195, 127, 142, 196, 184, 208, 197, 157, 171, 143, 185, 198, 209, 199, 210, 172, - 158, 186, 211, 224, 212, 200, 240, 159, 213, 225, 187, 201, 173, 226, 214, 215, - 227, 202, 228, 188, 241, 216, 174, 229, 242, 203, 243, 217, 230, 175, 189, 244, - 231, 204, 218, 232, 245, 219, 246, 190, 233, 205, 191, 247, 234, 248, 220, 206, - 249, 235, 221, 207, 250, 236, 222, 251, 223, 237, 238, 252, 239, 253, 254, 255, -}; - -static const int16_t vp9_row_scan_16x16[256] = { - 0, 16, 32, 1, 48, 17, 64, 33, 2, 80, 18, 49, 96, 34, 3, 65, - 19, 112, 50, 81, 35, 4, 128, 66, 20, 97, 51, 82, 5, 144, 36, 67, - 113, 98, 21, 52, 160, 83, 129, 37, 68, 6, 114, 176, 99, 53, 22, 84, - 145, 38, 69, 130, 7, 115, 192, 100, 54, 23, 85, 161, 146, 131, 39, 70, - 208, 116, 8, 101, 177, 55, 86, 24, 162, 147, 132, 71, 224, 117, 40, 102, - 9, 148, 56, 87, 193, 163, 240, 133, 178, 25, 118, 72, 41, 103, 164, 10, - 149, 88, 134, 209, 179, 57, 119, 194, 26, 73, 165, 150, 104, 42, 135, 11, - 180, 120, 89, 225, 195, 58, 27, 210, 151, 181, 166, 74, 43, 105, 12, 136, - 90, 59, 241, 121, 28, 196, 167, 211, 152, 44, 182, 137, 75, 13, 226, 106, - 122, 60, 197, 91, 168, 29, 183, 153, 14, 76, 212, 138, 45, 107, 15, 198, - 92, 227, 169, 30, 123, 154, 61, 242, 184, 213, 139, 46, 77, 31, 108, 170, - 199, 185, 124, 228, 93, 155, 214, 62, 140, 243, 78, 47, 200, 109, 186, 171, - 201, 94, 63, 215, 229, 156, 79, 125, 141, 110, 216, 187, 172, 244, 202, 230, - 217, 95, 157, 126, 245, 111, 142, 231, 188, 127, 158, 218, 173, 232, 246, 233, - 203, 143, 247, 174, 189, 159, 219, 204, 248, 234, 249, 175, 190, 220, 205, 250, - 235, 191, 221, 251, 236, 206, 252, 222, 207, 237, 223, 253, 238, 254, 239, 255, -}; - -static const int16_t vp9_default_scan_32x32[1024] = { - 0, 1, 32, 2, 33, 64, 3, 34, 65, 4, 96, 35, 66, 5, 36, 97, 67, 128, 98, 68, 37, 6, 129, 99, 7, 160, 69, 38, 130, 100, 161, 131, - 39, 70, 8, 101, 162, 132, 192, 71, 40, 9, 102, 163, 133, 193, 72, 224, 103, 41, 164, 10, 194, 134, 165, 73, 104, 135, 225, 42, 195, 11, 256, 166, - 226, 196, 74, 105, 136, 43, 12, 167, 197, 227, 257, 75, 106, 137, 228, 44, 198, 168, 258, 288, 13, 229, 76, 107, 199, 138, 259, 169, 289, 45, 230, 260, - 200, 108, 14, 170, 139, 320, 290, 77, 231, 261, 46, 201, 140, 291, 109, 232, 321, 262, 171, 78, 292, 15, 322, 202, 263, 352, 172, 293, 233, 141, 323, 110, - 47, 203, 264, 234, 294, 353, 324, 16, 79, 204, 265, 295, 325, 173, 354, 142, 235, 384, 48, 296, 111, 266, 355, 326, 80, 17, 205, 236, 174, 356, 385, 327, - 143, 297, 267, 357, 386, 112, 49, 328, 298, 206, 416, 237, 358, 387, 81, 175, 18, 329, 359, 388, 299, 330, 389, 113, 417, 238, 360, 50, 207, 418, 390, 331, - 19, 448, 361, 82, 419, 391, 239, 51, 362, 420, 114, 449, 480, 421, 83, 363, 450, 422, 512, 451, 423, 115, 452, 481, 453, 482, 454, 544, 483, 455, 513, 484, - 514, 485, 515, 486, 545, 576, 487, 546, 547, 608, 577, 578, 579, 609, 610, 611, 20, 144, 268, 392, 516, 640, 21, 52, 145, 176, 269, 300, 393, 424, 517, 548, - 641, 672, 22, 53, 84, 146, 177, 208, 270, 301, 332, 394, 425, 456, 518, 549, 580, 642, 673, 704, 23, 54, 85, 116, 147, 178, 209, 240, 271, 302, 333, 364, - 395, 426, 457, 488, 519, 550, 581, 612, 643, 674, 705, 736, 55, 86, 117, 179, 210, 241, 303, 334, 365, 427, 458, 489, 551, 582, 613, 675, 706, 737, 87, 118, - 211, 242, 335, 366, 459, 490, 583, 614, 707, 738, 119, 243, 367, 491, 615, 739, 24, 148, 272, 396, 520, 644, 768, 25, 56, 149, 180, 273, 304, 397, 428, 521, - 552, 645, 676, 769, 800, 26, 57, 88, 150, 181, 212, 274, 305, 336, 398, 429, 460, 522, 553, 584, 646, 677, 708, 770, 801, 832, 27, 58, 89, 120, 151, 182, - 213, 244, 275, 306, 337, 368, 399, 430, 461, 492, 523, 554, 585, 616, 647, 678, 709, 740, 771, 802, 833, 864, 59, 90, 121, 183, 214, 245, 307, 338, 369, 431, - 462, 493, 555, 586, 617, 679, 710, 741, 803, 834, 865, 91, 122, 215, 246, 339, 370, 463, 494, 587, 618, 711, 742, 835, 866, 123, 247, 371, 495, 619, 743, 867, - 28, 152, 276, 400, 524, 648, 772, 896, 29, 60, 153, 184, 277, 308, 401, 432, 525, 556, 649, 680, 773, 804, 897, 928, 30, 61, 92, 154, 185, 216, 278, 309, - 340, 402, 433, 464, 526, 557, 588, 650, 681, 712, 774, 805, 836, 898, 929, 960, 31, 62, 93, 124, 155, 186, 217, 248, 279, 310, 341, 372, 403, 434, 465, 496, - 527, 558, 589, 620, 651, 682, 713, 744, 775, 806, 837, 868, 899, 930, 961, 992, 63, 94, 125, 187, 218, 249, 311, 342, 373, 435, 466, 497, 559, 590, 621, 683, - 714, 745, 807, 838, 869, 931, 962, 993, 95, 126, 219, 250, 343, 374, 467, 498, 591, 622, 715, 746, 839, 870, 963, 994, 127, 251, 375, 499, 623, 747, 871, 995, - 156, 280, 404, 528, 652, 776, 900, 157, 188, 281, 312, 405, 436, 529, 560, 653, 684, 777, 808, 901, 932, 158, 189, 220, 282, 313, 344, 406, 437, 468, 530, 561, - 592, 654, 685, 716, 778, 809, 840, 902, 933, 964, 159, 190, 221, 252, 283, 314, 345, 376, 407, 438, 469, 500, 531, 562, 593, 624, 655, 686, 717, 748, 779, 810, - 841, 872, 903, 934, 965, 996, 191, 222, 253, 315, 346, 377, 439, 470, 501, 563, 594, 625, 687, 718, 749, 811, 842, 873, 935, 966, 997, 223, 254, 347, 378, 471, - 502, 595, 626, 719, 750, 843, 874, 967, 998, 255, 379, 503, 627, 751, 875, 999, 284, 408, 532, 656, 780, 904, 285, 316, 409, 440, 533, 564, 657, 688, 781, 812, - 905, 936, 286, 317, 348, 410, 441, 472, 534, 565, 596, 658, 689, 720, 782, 813, 844, 906, 937, 968, 287, 318, 349, 380, 411, 442, 473, 504, 535, 566, 597, 628, - 659, 690, 721, 752, 783, 814, 845, 876, 907, 938, 969, 1000, 319, 350, 381, 443, 474, 505, 567, 598, 629, 691, 722, 753, 815, 846, 877, 939, 970, 1001, 351, 382, - 475, 506, 599, 630, 723, 754, 847, 878, 971, 1002, 383, 507, 631, 755, 879, 1003, 412, 536, 660, 784, 908, 413, 444, 537, 568, 661, 692, 785, 816, 909, 940, 414, - 445, 476, 538, 569, 600, 662, 693, 724, 786, 817, 848, 910, 941, 972, 415, 446, 477, 508, 539, 570, 601, 632, 663, 694, 725, 756, 787, 818, 849, 880, 911, 942, - 973, 1004, 447, 478, 509, 571, 602, 633, 695, 726, 757, 819, 850, 881, 943, 974, 1005, 479, 510, 603, 634, 727, 758, 851, 882, 975, 1006, 511, 635, 759, 883, 1007, - 540, 664, 788, 912, 541, 572, 665, 696, 789, 820, 913, 944, 542, 573, 604, 666, 697, 728, 790, 821, 852, 914, 945, 976, 543, 574, 605, 636, 667, 698, 729, 760, - 791, 822, 853, 884, 915, 946, 977, 1008, 575, 606, 637, 699, 730, 761, 823, 854, 885, 947, 978, 1009, 607, 638, 731, 762, 855, 886, 979, 1010, 639, 763, 887, 1011, - 668, 792, 916, 669, 700, 793, 824, 917, 948, 670, 701, 732, 794, 825, 856, 918, 949, 980, 671, 702, 733, 764, 795, 826, 857, 888, 919, 950, 981, 1012, 703, 734, - 765, 827, 858, 889, 951, 982, 1013, 735, 766, 859, 890, 983, 1014, 767, 891, 1015, 796, 920, 797, 828, 921, 952, 798, 829, 860, 922, 953, 984, 799, 830, 861, 892, - 923, 954, 985, 1016, 831, 862, 893, 955, 986, 1017, 863, 894, 987, 1018, 895, 1019, 924, 925, 956, 926, 957, 988, 927, 958, 989, 1020, 959, 990, 1021, 991, 1022, 1023, -}; - -static const int16_t * const vp9_scans[5][4] = { - { - vp9_default_scan_4x4, vp9_col_scan_4x4, - vp9_row_scan_4x4, vp9_default_scan_4x4 - }, { - vp9_default_scan_8x8, vp9_col_scan_8x8, - vp9_row_scan_8x8, vp9_default_scan_8x8 - }, { - vp9_default_scan_16x16, vp9_col_scan_16x16, - vp9_row_scan_16x16, vp9_default_scan_16x16 - }, { - vp9_default_scan_32x32, vp9_default_scan_32x32, - vp9_default_scan_32x32, vp9_default_scan_32x32 - }, { // lossless - vp9_default_scan_4x4, vp9_default_scan_4x4, - vp9_default_scan_4x4, vp9_default_scan_4x4 - } -}; - -static const int16_t vp9_default_scan_4x4_nb[16][2] = { - { 0, 0 }, { 0, 0 }, { 4, 1 }, { 1, 1 }, - { 4, 4 }, { 2, 2 }, { 5, 2 }, { 8, 8 }, - { 8, 5 }, { 6, 3 }, { 9, 6 }, { 12, 9 }, - { 10, 7 }, { 13, 10 }, { 14, 11 }, { 0, 0 }, -}; - -static const int16_t vp9_col_scan_4x4_nb[16][2] = { - { 0, 0 }, { 1, 1 }, { 0, 0 }, { 2, 2 }, - { 4, 4 }, { 5, 5 }, { 4, 4 }, { 6, 6 }, - { 8, 8 }, { 9, 9 }, { 8, 8 }, { 12, 12 }, - { 10, 10 }, { 13, 13 }, { 14, 14 }, { 0, 0 }, -}; - -static const int16_t vp9_row_scan_4x4_nb[16][2] = { - { 0, 0 }, { 0, 0 }, { 4, 4 }, { 1, 1 }, - { 8, 8 }, { 5, 5 }, { 1, 1 }, { 2, 2 }, - { 9, 9 }, { 2, 2 }, { 6, 6 }, { 3, 3 }, - { 10, 10 }, { 7, 7 }, { 11, 11 }, { 0, 0 }, -}; - -static const int16_t vp9_default_scan_8x8_nb[64][2] = { - { 0, 0 }, { 0, 0 }, { 1, 1 }, { 8, 1 }, - { 8, 8 }, { 9, 2 }, { 2, 2 }, { 16, 9 }, - { 16, 16 }, { 17, 10 }, { 10, 3 }, { 3, 3 }, - { 24, 17 }, { 24, 24 }, { 18, 11 }, { 11, 4 }, - { 25, 18 }, { 4, 4 }, { 32, 25 }, { 19, 12 }, - { 26, 19 }, { 32, 32 }, { 12, 5 }, { 33, 26 }, - { 5, 5 }, { 40, 33 }, { 27, 20 }, { 20, 13 }, - { 34, 27 }, { 41, 34 }, { 40, 40 }, { 13, 6 }, - { 6, 6 }, { 35, 28 }, { 28, 21 }, { 42, 35 }, - { 48, 48 }, { 48, 41 }, { 21, 14 }, { 14, 7 }, - { 36, 29 }, { 49, 42 }, { 43, 36 }, { 56, 49 }, - { 29, 22 }, { 22, 15 }, { 50, 43 }, { 44, 37 }, - { 57, 50 }, { 37, 30 }, { 30, 23 }, { 51, 44 }, - { 58, 51 }, { 38, 31 }, { 45, 38 }, { 52, 45 }, - { 59, 52 }, { 46, 39 }, { 53, 46 }, { 60, 53 }, - { 54, 47 }, { 61, 54 }, { 62, 55 }, { 0, 0 }, -}; - -static const int16_t vp9_col_scan_8x8_nb[64][2] = { - { 0, 0 }, { 1, 1 }, { 0, 0 }, { 2, 2 }, - { 8, 8 }, { 3, 3 }, { 9, 9 }, { 8, 8 }, - { 4, 4 }, { 10, 10 }, { 16, 16 }, { 11, 11 }, - { 17, 17 }, { 5, 5 }, { 16, 16 }, { 18, 18 }, - { 12, 12 }, { 24, 24 }, { 6, 6 }, { 25, 25 }, - { 19, 19 }, { 24, 24 }, { 13, 13 }, { 26, 26 }, - { 20, 20 }, { 32, 32 }, { 27, 27 }, { 33, 33 }, - { 14, 14 }, { 21, 21 }, { 34, 34 }, { 32, 32 }, - { 28, 28 }, { 40, 40 }, { 35, 35 }, { 22, 22 }, - { 29, 29 }, { 41, 41 }, { 36, 36 }, { 40, 40 }, - { 42, 42 }, { 30, 30 }, { 43, 43 }, { 48, 48 }, - { 37, 37 }, { 49, 49 }, { 48, 48 }, { 44, 44 }, - { 38, 38 }, { 50, 50 }, { 56, 56 }, { 51, 51 }, - { 45, 45 }, { 57, 57 }, { 52, 52 }, { 58, 58 }, - { 46, 46 }, { 59, 59 }, { 53, 53 }, { 60, 60 }, - { 54, 54 }, { 61, 61 }, { 62, 62 }, { 0, 0 }, -}; - -static const int16_t vp9_row_scan_8x8_nb[64][2] = { - { 0, 0 }, { 8, 8 }, { 0, 0 }, { 1, 1 }, - { 16, 16 }, { 1, 1 }, { 9, 9 }, { 24, 24 }, - { 2, 2 }, { 17, 17 }, { 2, 2 }, { 32, 32 }, - { 10, 10 }, { 3, 3 }, { 25, 25 }, { 18, 18 }, - { 11, 11 }, { 3, 3 }, { 40, 40 }, { 33, 33 }, - { 26, 26 }, { 4, 4 }, { 19, 19 }, { 48, 48 }, - { 12, 12 }, { 4, 4 }, { 34, 34 }, { 27, 27 }, - { 5, 5 }, { 41, 41 }, { 20, 20 }, { 5, 5 }, - { 13, 13 }, { 35, 35 }, { 28, 28 }, { 6, 6 }, - { 42, 42 }, { 21, 21 }, { 49, 49 }, { 6, 6 }, - { 36, 36 }, { 14, 14 }, { 29, 29 }, { 43, 43 }, - { 7, 7 }, { 50, 50 }, { 22, 22 }, { 15, 15 }, - { 37, 37 }, { 44, 44 }, { 30, 30 }, { 51, 51 }, - { 23, 23 }, { 38, 38 }, { 45, 45 }, { 31, 31 }, - { 52, 52 }, { 39, 39 }, { 53, 53 }, { 46, 46 }, - { 54, 54 }, { 47, 47 }, { 55, 55 }, { 0, 0 }, -}; - -static const int16_t vp9_default_scan_16x16_nb[256][2] = { - { 0, 0 }, { 0, 0 }, { 1, 1 }, { 16, 1 }, - { 16, 16 }, { 2, 2 }, { 17, 2 }, { 32, 17 }, - { 32, 32 }, { 3, 3 }, { 33, 18 }, { 18, 3 }, - { 48, 33 }, { 19, 4 }, { 4, 4 }, { 34, 19 }, - { 48, 48 }, { 49, 34 }, { 35, 20 }, { 64, 49 }, - { 20, 5 }, { 5, 5 }, { 50, 35 }, { 64, 64 }, - { 65, 50 }, { 36, 21 }, { 21, 6 }, { 51, 36 }, - { 6, 6 }, { 80, 65 }, { 66, 51 }, { 37, 22 }, - { 81, 66 }, { 52, 37 }, { 22, 7 }, { 80, 80 }, - { 67, 52 }, { 7, 7 }, { 82, 67 }, { 96, 81 }, - { 53, 38 }, { 38, 23 }, { 68, 53 }, { 96, 96 }, - { 23, 8 }, { 97, 82 }, { 83, 68 }, { 69, 54 }, - { 54, 39 }, { 8, 8 }, { 39, 24 }, { 84, 69 }, - { 98, 83 }, { 112, 97 }, { 112, 112 }, { 24, 9 }, - { 113, 98 }, { 99, 84 }, { 70, 55 }, { 85, 70 }, - { 55, 40 }, { 9, 9 }, { 40, 25 }, { 114, 99 }, - { 100, 85 }, { 128, 113 }, { 115, 100 }, { 71, 56 }, - { 86, 71 }, { 25, 10 }, { 129, 114 }, { 128, 128 }, - { 101, 86 }, { 56, 41 }, { 10, 10 }, { 41, 26 }, - { 116, 101 }, { 130, 115 }, { 144, 129 }, { 87, 72 }, - { 102, 87 }, { 26, 11 }, { 72, 57 }, { 131, 116 }, - { 117, 102 }, { 145, 130 }, { 57, 42 }, { 144, 144 }, - { 11, 11 }, { 42, 27 }, { 132, 117 }, { 146, 131 }, - { 103, 88 }, { 88, 73 }, { 118, 103 }, { 160, 145 }, - { 73, 58 }, { 147, 132 }, { 133, 118 }, { 27, 12 }, - { 161, 146 }, { 58, 43 }, { 12, 12 }, { 160, 160 }, - { 119, 104 }, { 148, 133 }, { 89, 74 }, { 134, 119 }, - { 104, 89 }, { 162, 147 }, { 43, 28 }, { 74, 59 }, - { 176, 161 }, { 163, 148 }, { 28, 13 }, { 149, 134 }, - { 120, 105 }, { 135, 120 }, { 177, 162 }, { 164, 149 }, - { 13, 13 }, { 105, 90 }, { 59, 44 }, { 90, 75 }, - { 150, 135 }, { 44, 29 }, { 178, 163 }, { 176, 176 }, - { 136, 121 }, { 165, 150 }, { 121, 106 }, { 75, 60 }, - { 179, 164 }, { 151, 136 }, { 29, 14 }, { 60, 45 }, - { 14, 14 }, { 106, 91 }, { 166, 151 }, { 180, 165 }, - { 192, 177 }, { 91, 76 }, { 192, 192 }, { 45, 30 }, - { 137, 122 }, { 122, 107 }, { 152, 137 }, { 193, 178 }, - { 76, 61 }, { 167, 152 }, { 181, 166 }, { 30, 15 }, - { 194, 179 }, { 208, 193 }, { 182, 167 }, { 107, 92 }, - { 138, 123 }, { 61, 46 }, { 153, 138 }, { 46, 31 }, - { 195, 180 }, { 92, 77 }, { 168, 153 }, { 209, 194 }, - { 196, 181 }, { 208, 208 }, { 123, 108 }, { 183, 168 }, - { 210, 195 }, { 77, 62 }, { 108, 93 }, { 169, 154 }, - { 154, 139 }, { 62, 47 }, { 197, 182 }, { 211, 196 }, - { 184, 169 }, { 224, 209 }, { 224, 224 }, { 139, 124 }, - { 93, 78 }, { 198, 183 }, { 124, 109 }, { 78, 63 }, - { 212, 197 }, { 225, 210 }, { 170, 155 }, { 185, 170 }, - { 155, 140 }, { 213, 198 }, { 199, 184 }, { 109, 94 }, - { 226, 211 }, { 140, 125 }, { 94, 79 }, { 240, 225 }, - { 214, 199 }, { 227, 212 }, { 200, 185 }, { 125, 110 }, - { 241, 226 }, { 186, 171 }, { 171, 156 }, { 156, 141 }, - { 228, 213 }, { 110, 95 }, { 215, 200 }, { 242, 227 }, - { 141, 126 }, { 201, 186 }, { 229, 214 }, { 126, 111 }, - { 216, 201 }, { 243, 228 }, { 172, 157 }, { 187, 172 }, - { 230, 215 }, { 157, 142 }, { 202, 187 }, { 142, 127 }, - { 244, 229 }, { 217, 202 }, { 231, 216 }, { 188, 173 }, - { 245, 230 }, { 158, 143 }, { 173, 158 }, { 232, 217 }, - { 246, 231 }, { 218, 203 }, { 203, 188 }, { 174, 159 }, - { 189, 174 }, { 247, 232 }, { 233, 218 }, { 204, 189 }, - { 219, 204 }, { 248, 233 }, { 190, 175 }, { 234, 219 }, - { 220, 205 }, { 249, 234 }, { 205, 190 }, { 221, 206 }, - { 250, 235 }, { 235, 220 }, { 206, 191 }, { 236, 221 }, - { 222, 207 }, { 251, 236 }, { 237, 222 }, { 252, 237 }, - { 238, 223 }, { 253, 238 }, { 254, 239 }, { 0, 0 }, -}; - -static const int16_t vp9_col_scan_16x16_nb[256][2] = { - { 0, 0 }, { 1, 1 }, { 2, 2 }, { 0, 0 }, - { 3, 3 }, { 16, 16 }, { 4, 4 }, { 17, 17 }, - { 5, 5 }, { 18, 18 }, { 16, 16 }, { 19, 19 }, - { 6, 6 }, { 32, 32 }, { 20, 20 }, { 33, 33 }, - { 7, 7 }, { 34, 34 }, { 21, 21 }, { 32, 32 }, - { 35, 35 }, { 8, 8 }, { 48, 48 }, { 22, 22 }, - { 49, 49 }, { 36, 36 }, { 9, 9 }, { 37, 37 }, - { 50, 50 }, { 23, 23 }, { 48, 48 }, { 51, 51 }, - { 10, 10 }, { 64, 64 }, { 38, 38 }, { 24, 24 }, - { 52, 52 }, { 65, 65 }, { 53, 53 }, { 39, 39 }, - { 66, 66 }, { 11, 11 }, { 64, 64 }, { 25, 25 }, - { 67, 67 }, { 54, 54 }, { 80, 80 }, { 40, 40 }, - { 68, 68 }, { 12, 12 }, { 26, 26 }, { 81, 81 }, - { 55, 55 }, { 69, 69 }, { 82, 82 }, { 41, 41 }, - { 13, 13 }, { 83, 83 }, { 80, 80 }, { 70, 70 }, - { 27, 27 }, { 56, 56 }, { 84, 84 }, { 96, 96 }, - { 14, 14 }, { 71, 71 }, { 97, 97 }, { 42, 42 }, - { 85, 85 }, { 57, 57 }, { 98, 98 }, { 28, 28 }, - { 86, 86 }, { 99, 99 }, { 96, 96 }, { 72, 72 }, - { 43, 43 }, { 100, 100 }, { 58, 58 }, { 29, 29 }, - { 112, 112 }, { 87, 87 }, { 113, 113 }, { 73, 73 }, - { 112, 112 }, { 101, 101 }, { 44, 44 }, { 30, 30 }, - { 114, 114 }, { 59, 59 }, { 102, 102 }, { 88, 88 }, - { 115, 115 }, { 74, 74 }, { 128, 128 }, { 116, 116 }, - { 45, 45 }, { 103, 103 }, { 89, 89 }, { 60, 60 }, - { 129, 129 }, { 117, 117 }, { 130, 130 }, { 131, 131 }, - { 104, 104 }, { 75, 75 }, { 46, 46 }, { 118, 118 }, - { 128, 128 }, { 90, 90 }, { 61, 61 }, { 132, 132 }, - { 105, 105 }, { 144, 144 }, { 119, 119 }, { 145, 145 }, - { 133, 133 }, { 76, 76 }, { 146, 146 }, { 120, 120 }, - { 91, 91 }, { 134, 134 }, { 147, 147 }, { 62, 62 }, - { 106, 106 }, { 135, 135 }, { 121, 121 }, { 92, 92 }, - { 148, 148 }, { 144, 144 }, { 77, 77 }, { 149, 149 }, - { 136, 136 }, { 107, 107 }, { 160, 160 }, { 161, 161 }, - { 150, 150 }, { 122, 122 }, { 78, 78 }, { 137, 137 }, - { 162, 162 }, { 151, 151 }, { 93, 93 }, { 163, 163 }, - { 108, 108 }, { 164, 164 }, { 152, 152 }, { 123, 123 }, - { 138, 138 }, { 160, 160 }, { 165, 165 }, { 94, 94 }, - { 176, 176 }, { 166, 166 }, { 109, 109 }, { 153, 153 }, - { 177, 177 }, { 124, 124 }, { 178, 178 }, { 139, 139 }, - { 167, 167 }, { 154, 154 }, { 110, 110 }, { 179, 179 }, - { 176, 176 }, { 180, 180 }, { 168, 168 }, { 140, 140 }, - { 125, 125 }, { 181, 181 }, { 192, 192 }, { 193, 193 }, - { 155, 155 }, { 182, 182 }, { 169, 169 }, { 194, 194 }, - { 126, 126 }, { 141, 141 }, { 195, 195 }, { 183, 183 }, - { 192, 192 }, { 196, 196 }, { 156, 156 }, { 170, 170 }, - { 142, 142 }, { 184, 184 }, { 197, 197 }, { 208, 208 }, - { 198, 198 }, { 209, 209 }, { 171, 171 }, { 157, 157 }, - { 185, 185 }, { 210, 210 }, { 208, 208 }, { 211, 211 }, - { 199, 199 }, { 224, 224 }, { 158, 158 }, { 212, 212 }, - { 224, 224 }, { 186, 186 }, { 200, 200 }, { 172, 172 }, - { 225, 225 }, { 213, 213 }, { 214, 214 }, { 226, 226 }, - { 201, 201 }, { 227, 227 }, { 187, 187 }, { 240, 240 }, - { 215, 215 }, { 173, 173 }, { 228, 228 }, { 241, 241 }, - { 202, 202 }, { 242, 242 }, { 216, 216 }, { 229, 229 }, - { 174, 174 }, { 188, 188 }, { 243, 243 }, { 230, 230 }, - { 203, 203 }, { 217, 217 }, { 231, 231 }, { 244, 244 }, - { 218, 218 }, { 245, 245 }, { 189, 189 }, { 232, 232 }, - { 204, 204 }, { 190, 190 }, { 246, 246 }, { 233, 233 }, - { 247, 247 }, { 219, 219 }, { 205, 205 }, { 248, 248 }, - { 234, 234 }, { 220, 220 }, { 206, 206 }, { 249, 249 }, - { 235, 235 }, { 221, 221 }, { 250, 250 }, { 222, 222 }, - { 236, 236 }, { 237, 237 }, { 251, 251 }, { 238, 238 }, - { 252, 252 }, { 253, 253 }, { 254, 254 }, { 0, 0 }, -}; - -static const int16_t vp9_row_scan_16x16_nb[256][2] = { - { 0, 0 }, { 16, 16 }, { 0, 0 }, { 32, 32 }, - { 1, 1 }, { 48, 48 }, { 17, 17 }, { 1, 1 }, - { 64, 64 }, { 2, 2 }, { 33, 33 }, { 80, 80 }, - { 18, 18 }, { 2, 2 }, { 49, 49 }, { 3, 3 }, - { 96, 96 }, { 34, 34 }, { 65, 65 }, { 19, 19 }, - { 3, 3 }, { 112, 112 }, { 50, 50 }, { 4, 4 }, - { 81, 81 }, { 35, 35 }, { 66, 66 }, { 4, 4 }, - { 128, 128 }, { 20, 20 }, { 51, 51 }, { 97, 97 }, - { 82, 82 }, { 5, 5 }, { 36, 36 }, { 144, 144 }, - { 67, 67 }, { 113, 113 }, { 21, 21 }, { 52, 52 }, - { 5, 5 }, { 98, 98 }, { 160, 160 }, { 83, 83 }, - { 37, 37 }, { 6, 6 }, { 68, 68 }, { 129, 129 }, - { 22, 22 }, { 53, 53 }, { 114, 114 }, { 6, 6 }, - { 99, 99 }, { 176, 176 }, { 84, 84 }, { 38, 38 }, - { 7, 7 }, { 69, 69 }, { 145, 145 }, { 130, 130 }, - { 115, 115 }, { 23, 23 }, { 54, 54 }, { 192, 192 }, - { 100, 100 }, { 7, 7 }, { 85, 85 }, { 161, 161 }, - { 39, 39 }, { 70, 70 }, { 8, 8 }, { 146, 146 }, - { 131, 131 }, { 116, 116 }, { 55, 55 }, { 208, 208 }, - { 101, 101 }, { 24, 24 }, { 86, 86 }, { 8, 8 }, - { 132, 132 }, { 40, 40 }, { 71, 71 }, { 177, 177 }, - { 147, 147 }, { 224, 224 }, { 117, 117 }, { 162, 162 }, - { 9, 9 }, { 102, 102 }, { 56, 56 }, { 25, 25 }, - { 87, 87 }, { 148, 148 }, { 9, 9 }, { 133, 133 }, - { 72, 72 }, { 118, 118 }, { 193, 193 }, { 163, 163 }, - { 41, 41 }, { 103, 103 }, { 178, 178 }, { 10, 10 }, - { 57, 57 }, { 149, 149 }, { 134, 134 }, { 88, 88 }, - { 26, 26 }, { 119, 119 }, { 10, 10 }, { 164, 164 }, - { 104, 104 }, { 73, 73 }, { 209, 209 }, { 179, 179 }, - { 42, 42 }, { 11, 11 }, { 194, 194 }, { 135, 135 }, - { 165, 165 }, { 150, 150 }, { 58, 58 }, { 27, 27 }, - { 89, 89 }, { 11, 11 }, { 120, 120 }, { 74, 74 }, - { 43, 43 }, { 225, 225 }, { 105, 105 }, { 12, 12 }, - { 180, 180 }, { 151, 151 }, { 195, 195 }, { 136, 136 }, - { 28, 28 }, { 166, 166 }, { 121, 121 }, { 59, 59 }, - { 12, 12 }, { 210, 210 }, { 90, 90 }, { 106, 106 }, - { 44, 44 }, { 181, 181 }, { 75, 75 }, { 152, 152 }, - { 13, 13 }, { 167, 167 }, { 137, 137 }, { 13, 13 }, - { 60, 60 }, { 196, 196 }, { 122, 122 }, { 29, 29 }, - { 91, 91 }, { 14, 14 }, { 182, 182 }, { 76, 76 }, - { 211, 211 }, { 153, 153 }, { 14, 14 }, { 107, 107 }, - { 138, 138 }, { 45, 45 }, { 226, 226 }, { 168, 168 }, - { 197, 197 }, { 123, 123 }, { 30, 30 }, { 61, 61 }, - { 15, 15 }, { 92, 92 }, { 154, 154 }, { 183, 183 }, - { 169, 169 }, { 108, 108 }, { 212, 212 }, { 77, 77 }, - { 139, 139 }, { 198, 198 }, { 46, 46 }, { 124, 124 }, - { 227, 227 }, { 62, 62 }, { 31, 31 }, { 184, 184 }, - { 93, 93 }, { 170, 170 }, { 155, 155 }, { 185, 185 }, - { 78, 78 }, { 47, 47 }, { 199, 199 }, { 213, 213 }, - { 140, 140 }, { 63, 63 }, { 109, 109 }, { 125, 125 }, - { 94, 94 }, { 200, 200 }, { 171, 171 }, { 156, 156 }, - { 228, 228 }, { 186, 186 }, { 214, 214 }, { 201, 201 }, - { 79, 79 }, { 141, 141 }, { 110, 110 }, { 229, 229 }, - { 95, 95 }, { 126, 126 }, { 215, 215 }, { 172, 172 }, - { 111, 111 }, { 142, 142 }, { 202, 202 }, { 157, 157 }, - { 216, 216 }, { 230, 230 }, { 217, 217 }, { 187, 187 }, - { 127, 127 }, { 231, 231 }, { 158, 158 }, { 173, 173 }, - { 143, 143 }, { 203, 203 }, { 188, 188 }, { 232, 232 }, - { 218, 218 }, { 233, 233 }, { 159, 159 }, { 174, 174 }, - { 204, 204 }, { 189, 189 }, { 234, 234 }, { 219, 219 }, - { 175, 175 }, { 205, 205 }, { 235, 235 }, { 220, 220 }, - { 190, 190 }, { 236, 236 }, { 206, 206 }, { 191, 191 }, - { 221, 221 }, { 207, 207 }, { 237, 237 }, { 222, 222 }, - { 238, 238 }, { 223, 223 }, { 239, 239 }, { 0, 0 }, -}; - -static const int16_t vp9_default_scan_32x32_nb[1024][2] = { - { 0, 0 }, { 0, 0 }, { 1, 1 }, { 32, 1 }, - { 32, 32 }, { 2, 2 }, { 33, 2 }, { 64, 33 }, - { 3, 3 }, { 64, 64 }, { 34, 3 }, { 65, 34 }, - { 4, 4 }, { 35, 4 }, { 96, 65 }, { 66, 35 }, - { 96, 96 }, { 97, 66 }, { 67, 36 }, { 36, 5 }, - { 5, 5 }, { 128, 97 }, { 98, 67 }, { 6, 6 }, - { 128, 128 }, { 68, 37 }, { 37, 6 }, { 129, 98 }, - { 99, 68 }, { 160, 129 }, { 130, 99 }, { 38, 7 }, - { 69, 38 }, { 7, 7 }, { 100, 69 }, { 161, 130 }, - { 131, 100 }, { 160, 160 }, { 70, 39 }, { 39, 8 }, - { 8, 8 }, { 101, 70 }, { 162, 131 }, { 132, 101 }, - { 192, 161 }, { 71, 40 }, { 192, 192 }, { 102, 71 }, - { 40, 9 }, { 163, 132 }, { 9, 9 }, { 193, 162 }, - { 133, 102 }, { 164, 133 }, { 72, 41 }, { 103, 72 }, - { 134, 103 }, { 224, 193 }, { 41, 10 }, { 194, 163 }, - { 10, 10 }, { 224, 224 }, { 165, 134 }, { 225, 194 }, - { 195, 164 }, { 73, 42 }, { 104, 73 }, { 135, 104 }, - { 42, 11 }, { 11, 11 }, { 166, 135 }, { 196, 165 }, - { 226, 195 }, { 256, 225 }, { 74, 43 }, { 105, 74 }, - { 136, 105 }, { 227, 196 }, { 43, 12 }, { 197, 166 }, - { 167, 136 }, { 257, 226 }, { 256, 256 }, { 12, 12 }, - { 228, 197 }, { 75, 44 }, { 106, 75 }, { 198, 167 }, - { 137, 106 }, { 258, 227 }, { 168, 137 }, { 288, 257 }, - { 44, 13 }, { 229, 198 }, { 259, 228 }, { 199, 168 }, - { 107, 76 }, { 13, 13 }, { 169, 138 }, { 138, 107 }, - { 288, 288 }, { 289, 258 }, { 76, 45 }, { 230, 199 }, - { 260, 229 }, { 45, 14 }, { 200, 169 }, { 139, 108 }, - { 290, 259 }, { 108, 77 }, { 231, 200 }, { 320, 289 }, - { 261, 230 }, { 170, 139 }, { 77, 46 }, { 291, 260 }, - { 14, 14 }, { 321, 290 }, { 201, 170 }, { 262, 231 }, - { 320, 320 }, { 171, 140 }, { 292, 261 }, { 232, 201 }, - { 140, 109 }, { 322, 291 }, { 109, 78 }, { 46, 15 }, - { 202, 171 }, { 263, 232 }, { 233, 202 }, { 293, 262 }, - { 352, 321 }, { 323, 292 }, { 15, 15 }, { 78, 47 }, - { 203, 172 }, { 264, 233 }, { 294, 263 }, { 324, 293 }, - { 172, 141 }, { 353, 322 }, { 141, 110 }, { 234, 203 }, - { 352, 352 }, { 47, 16 }, { 295, 264 }, { 110, 79 }, - { 265, 234 }, { 354, 323 }, { 325, 294 }, { 79, 48 }, - { 16, 16 }, { 204, 173 }, { 235, 204 }, { 173, 142 }, - { 355, 324 }, { 384, 353 }, { 326, 295 }, { 142, 111 }, - { 296, 265 }, { 266, 235 }, { 356, 325 }, { 385, 354 }, - { 111, 80 }, { 48, 17 }, { 327, 296 }, { 297, 266 }, - { 205, 174 }, { 384, 384 }, { 236, 205 }, { 357, 326 }, - { 386, 355 }, { 80, 49 }, { 174, 143 }, { 17, 17 }, - { 328, 297 }, { 358, 327 }, { 387, 356 }, { 298, 267 }, - { 329, 298 }, { 388, 357 }, { 112, 81 }, { 416, 385 }, - { 237, 206 }, { 359, 328 }, { 49, 18 }, { 206, 175 }, - { 417, 386 }, { 389, 358 }, { 330, 299 }, { 18, 18 }, - { 416, 416 }, { 360, 329 }, { 81, 50 }, { 418, 387 }, - { 390, 359 }, { 238, 207 }, { 50, 19 }, { 361, 330 }, - { 419, 388 }, { 113, 82 }, { 448, 417 }, { 448, 448 }, - { 420, 389 }, { 82, 51 }, { 362, 331 }, { 449, 418 }, - { 421, 390 }, { 480, 480 }, { 450, 419 }, { 422, 391 }, - { 114, 83 }, { 451, 420 }, { 480, 449 }, { 452, 421 }, - { 481, 450 }, { 453, 422 }, { 512, 512 }, { 482, 451 }, - { 454, 423 }, { 512, 481 }, { 483, 452 }, { 513, 482 }, - { 484, 453 }, { 514, 483 }, { 485, 454 }, { 544, 513 }, - { 544, 544 }, { 486, 455 }, { 545, 514 }, { 546, 515 }, - { 576, 576 }, { 576, 545 }, { 577, 546 }, { 578, 547 }, - { 608, 577 }, { 609, 578 }, { 610, 579 }, { 19, 19 }, - { 143, 112 }, { 267, 236 }, { 391, 360 }, { 515, 484 }, - { 608, 608 }, { 20, 20 }, { 51, 20 }, { 144, 113 }, - { 175, 144 }, { 268, 237 }, { 299, 268 }, { 392, 361 }, - { 423, 392 }, { 516, 485 }, { 547, 516 }, { 640, 609 }, - { 640, 640 }, { 21, 21 }, { 52, 21 }, { 83, 52 }, - { 145, 114 }, { 176, 145 }, { 207, 176 }, { 269, 238 }, - { 300, 269 }, { 331, 300 }, { 393, 362 }, { 424, 393 }, - { 455, 424 }, { 517, 486 }, { 548, 517 }, { 579, 548 }, - { 641, 610 }, { 672, 641 }, { 672, 672 }, { 22, 22 }, - { 53, 22 }, { 84, 53 }, { 115, 84 }, { 146, 115 }, - { 177, 146 }, { 208, 177 }, { 239, 208 }, { 270, 239 }, - { 301, 270 }, { 332, 301 }, { 363, 332 }, { 394, 363 }, - { 425, 394 }, { 456, 425 }, { 487, 456 }, { 518, 487 }, - { 549, 518 }, { 580, 549 }, { 611, 580 }, { 642, 611 }, - { 673, 642 }, { 704, 673 }, { 704, 704 }, { 54, 23 }, - { 85, 54 }, { 116, 85 }, { 178, 147 }, { 209, 178 }, - { 240, 209 }, { 302, 271 }, { 333, 302 }, { 364, 333 }, - { 426, 395 }, { 457, 426 }, { 488, 457 }, { 550, 519 }, - { 581, 550 }, { 612, 581 }, { 674, 643 }, { 705, 674 }, - { 736, 705 }, { 86, 55 }, { 117, 86 }, { 210, 179 }, - { 241, 210 }, { 334, 303 }, { 365, 334 }, { 458, 427 }, - { 489, 458 }, { 582, 551 }, { 613, 582 }, { 706, 675 }, - { 737, 706 }, { 118, 87 }, { 242, 211 }, { 366, 335 }, - { 490, 459 }, { 614, 583 }, { 738, 707 }, { 23, 23 }, - { 147, 116 }, { 271, 240 }, { 395, 364 }, { 519, 488 }, - { 643, 612 }, { 736, 736 }, { 24, 24 }, { 55, 24 }, - { 148, 117 }, { 179, 148 }, { 272, 241 }, { 303, 272 }, - { 396, 365 }, { 427, 396 }, { 520, 489 }, { 551, 520 }, - { 644, 613 }, { 675, 644 }, { 768, 737 }, { 768, 768 }, - { 25, 25 }, { 56, 25 }, { 87, 56 }, { 149, 118 }, - { 180, 149 }, { 211, 180 }, { 273, 242 }, { 304, 273 }, - { 335, 304 }, { 397, 366 }, { 428, 397 }, { 459, 428 }, - { 521, 490 }, { 552, 521 }, { 583, 552 }, { 645, 614 }, - { 676, 645 }, { 707, 676 }, { 769, 738 }, { 800, 769 }, - { 800, 800 }, { 26, 26 }, { 57, 26 }, { 88, 57 }, - { 119, 88 }, { 150, 119 }, { 181, 150 }, { 212, 181 }, - { 243, 212 }, { 274, 243 }, { 305, 274 }, { 336, 305 }, - { 367, 336 }, { 398, 367 }, { 429, 398 }, { 460, 429 }, - { 491, 460 }, { 522, 491 }, { 553, 522 }, { 584, 553 }, - { 615, 584 }, { 646, 615 }, { 677, 646 }, { 708, 677 }, - { 739, 708 }, { 770, 739 }, { 801, 770 }, { 832, 801 }, - { 832, 832 }, { 58, 27 }, { 89, 58 }, { 120, 89 }, - { 182, 151 }, { 213, 182 }, { 244, 213 }, { 306, 275 }, - { 337, 306 }, { 368, 337 }, { 430, 399 }, { 461, 430 }, - { 492, 461 }, { 554, 523 }, { 585, 554 }, { 616, 585 }, - { 678, 647 }, { 709, 678 }, { 740, 709 }, { 802, 771 }, - { 833, 802 }, { 864, 833 }, { 90, 59 }, { 121, 90 }, - { 214, 183 }, { 245, 214 }, { 338, 307 }, { 369, 338 }, - { 462, 431 }, { 493, 462 }, { 586, 555 }, { 617, 586 }, - { 710, 679 }, { 741, 710 }, { 834, 803 }, { 865, 834 }, - { 122, 91 }, { 246, 215 }, { 370, 339 }, { 494, 463 }, - { 618, 587 }, { 742, 711 }, { 866, 835 }, { 27, 27 }, - { 151, 120 }, { 275, 244 }, { 399, 368 }, { 523, 492 }, - { 647, 616 }, { 771, 740 }, { 864, 864 }, { 28, 28 }, - { 59, 28 }, { 152, 121 }, { 183, 152 }, { 276, 245 }, - { 307, 276 }, { 400, 369 }, { 431, 400 }, { 524, 493 }, - { 555, 524 }, { 648, 617 }, { 679, 648 }, { 772, 741 }, - { 803, 772 }, { 896, 865 }, { 896, 896 }, { 29, 29 }, - { 60, 29 }, { 91, 60 }, { 153, 122 }, { 184, 153 }, - { 215, 184 }, { 277, 246 }, { 308, 277 }, { 339, 308 }, - { 401, 370 }, { 432, 401 }, { 463, 432 }, { 525, 494 }, - { 556, 525 }, { 587, 556 }, { 649, 618 }, { 680, 649 }, - { 711, 680 }, { 773, 742 }, { 804, 773 }, { 835, 804 }, - { 897, 866 }, { 928, 897 }, { 928, 928 }, { 30, 30 }, - { 61, 30 }, { 92, 61 }, { 123, 92 }, { 154, 123 }, - { 185, 154 }, { 216, 185 }, { 247, 216 }, { 278, 247 }, - { 309, 278 }, { 340, 309 }, { 371, 340 }, { 402, 371 }, - { 433, 402 }, { 464, 433 }, { 495, 464 }, { 526, 495 }, - { 557, 526 }, { 588, 557 }, { 619, 588 }, { 650, 619 }, - { 681, 650 }, { 712, 681 }, { 743, 712 }, { 774, 743 }, - { 805, 774 }, { 836, 805 }, { 867, 836 }, { 898, 867 }, - { 929, 898 }, { 960, 929 }, { 960, 960 }, { 62, 31 }, - { 93, 62 }, { 124, 93 }, { 186, 155 }, { 217, 186 }, - { 248, 217 }, { 310, 279 }, { 341, 310 }, { 372, 341 }, - { 434, 403 }, { 465, 434 }, { 496, 465 }, { 558, 527 }, - { 589, 558 }, { 620, 589 }, { 682, 651 }, { 713, 682 }, - { 744, 713 }, { 806, 775 }, { 837, 806 }, { 868, 837 }, - { 930, 899 }, { 961, 930 }, { 992, 961 }, { 94, 63 }, - { 125, 94 }, { 218, 187 }, { 249, 218 }, { 342, 311 }, - { 373, 342 }, { 466, 435 }, { 497, 466 }, { 590, 559 }, - { 621, 590 }, { 714, 683 }, { 745, 714 }, { 838, 807 }, - { 869, 838 }, { 962, 931 }, { 993, 962 }, { 126, 95 }, - { 250, 219 }, { 374, 343 }, { 498, 467 }, { 622, 591 }, - { 746, 715 }, { 870, 839 }, { 994, 963 }, { 155, 124 }, - { 279, 248 }, { 403, 372 }, { 527, 496 }, { 651, 620 }, - { 775, 744 }, { 899, 868 }, { 156, 125 }, { 187, 156 }, - { 280, 249 }, { 311, 280 }, { 404, 373 }, { 435, 404 }, - { 528, 497 }, { 559, 528 }, { 652, 621 }, { 683, 652 }, - { 776, 745 }, { 807, 776 }, { 900, 869 }, { 931, 900 }, - { 157, 126 }, { 188, 157 }, { 219, 188 }, { 281, 250 }, - { 312, 281 }, { 343, 312 }, { 405, 374 }, { 436, 405 }, - { 467, 436 }, { 529, 498 }, { 560, 529 }, { 591, 560 }, - { 653, 622 }, { 684, 653 }, { 715, 684 }, { 777, 746 }, - { 808, 777 }, { 839, 808 }, { 901, 870 }, { 932, 901 }, - { 963, 932 }, { 158, 127 }, { 189, 158 }, { 220, 189 }, - { 251, 220 }, { 282, 251 }, { 313, 282 }, { 344, 313 }, - { 375, 344 }, { 406, 375 }, { 437, 406 }, { 468, 437 }, - { 499, 468 }, { 530, 499 }, { 561, 530 }, { 592, 561 }, - { 623, 592 }, { 654, 623 }, { 685, 654 }, { 716, 685 }, - { 747, 716 }, { 778, 747 }, { 809, 778 }, { 840, 809 }, - { 871, 840 }, { 902, 871 }, { 933, 902 }, { 964, 933 }, - { 995, 964 }, { 190, 159 }, { 221, 190 }, { 252, 221 }, - { 314, 283 }, { 345, 314 }, { 376, 345 }, { 438, 407 }, - { 469, 438 }, { 500, 469 }, { 562, 531 }, { 593, 562 }, - { 624, 593 }, { 686, 655 }, { 717, 686 }, { 748, 717 }, - { 810, 779 }, { 841, 810 }, { 872, 841 }, { 934, 903 }, - { 965, 934 }, { 996, 965 }, { 222, 191 }, { 253, 222 }, - { 346, 315 }, { 377, 346 }, { 470, 439 }, { 501, 470 }, - { 594, 563 }, { 625, 594 }, { 718, 687 }, { 749, 718 }, - { 842, 811 }, { 873, 842 }, { 966, 935 }, { 997, 966 }, - { 254, 223 }, { 378, 347 }, { 502, 471 }, { 626, 595 }, - { 750, 719 }, { 874, 843 }, { 998, 967 }, { 283, 252 }, - { 407, 376 }, { 531, 500 }, { 655, 624 }, { 779, 748 }, - { 903, 872 }, { 284, 253 }, { 315, 284 }, { 408, 377 }, - { 439, 408 }, { 532, 501 }, { 563, 532 }, { 656, 625 }, - { 687, 656 }, { 780, 749 }, { 811, 780 }, { 904, 873 }, - { 935, 904 }, { 285, 254 }, { 316, 285 }, { 347, 316 }, - { 409, 378 }, { 440, 409 }, { 471, 440 }, { 533, 502 }, - { 564, 533 }, { 595, 564 }, { 657, 626 }, { 688, 657 }, - { 719, 688 }, { 781, 750 }, { 812, 781 }, { 843, 812 }, - { 905, 874 }, { 936, 905 }, { 967, 936 }, { 286, 255 }, - { 317, 286 }, { 348, 317 }, { 379, 348 }, { 410, 379 }, - { 441, 410 }, { 472, 441 }, { 503, 472 }, { 534, 503 }, - { 565, 534 }, { 596, 565 }, { 627, 596 }, { 658, 627 }, - { 689, 658 }, { 720, 689 }, { 751, 720 }, { 782, 751 }, - { 813, 782 }, { 844, 813 }, { 875, 844 }, { 906, 875 }, - { 937, 906 }, { 968, 937 }, { 999, 968 }, { 318, 287 }, - { 349, 318 }, { 380, 349 }, { 442, 411 }, { 473, 442 }, - { 504, 473 }, { 566, 535 }, { 597, 566 }, { 628, 597 }, - { 690, 659 }, { 721, 690 }, { 752, 721 }, { 814, 783 }, - { 845, 814 }, { 876, 845 }, { 938, 907 }, { 969, 938 }, - { 1000, 969 }, { 350, 319 }, { 381, 350 }, { 474, 443 }, - { 505, 474 }, { 598, 567 }, { 629, 598 }, { 722, 691 }, - { 753, 722 }, { 846, 815 }, { 877, 846 }, { 970, 939 }, - { 1001, 970 }, { 382, 351 }, { 506, 475 }, { 630, 599 }, - { 754, 723 }, { 878, 847 }, { 1002, 971 }, { 411, 380 }, - { 535, 504 }, { 659, 628 }, { 783, 752 }, { 907, 876 }, - { 412, 381 }, { 443, 412 }, { 536, 505 }, { 567, 536 }, - { 660, 629 }, { 691, 660 }, { 784, 753 }, { 815, 784 }, - { 908, 877 }, { 939, 908 }, { 413, 382 }, { 444, 413 }, - { 475, 444 }, { 537, 506 }, { 568, 537 }, { 599, 568 }, - { 661, 630 }, { 692, 661 }, { 723, 692 }, { 785, 754 }, - { 816, 785 }, { 847, 816 }, { 909, 878 }, { 940, 909 }, - { 971, 940 }, { 414, 383 }, { 445, 414 }, { 476, 445 }, - { 507, 476 }, { 538, 507 }, { 569, 538 }, { 600, 569 }, - { 631, 600 }, { 662, 631 }, { 693, 662 }, { 724, 693 }, - { 755, 724 }, { 786, 755 }, { 817, 786 }, { 848, 817 }, - { 879, 848 }, { 910, 879 }, { 941, 910 }, { 972, 941 }, - { 1003, 972 }, { 446, 415 }, { 477, 446 }, { 508, 477 }, - { 570, 539 }, { 601, 570 }, { 632, 601 }, { 694, 663 }, - { 725, 694 }, { 756, 725 }, { 818, 787 }, { 849, 818 }, - { 880, 849 }, { 942, 911 }, { 973, 942 }, { 1004, 973 }, - { 478, 447 }, { 509, 478 }, { 602, 571 }, { 633, 602 }, - { 726, 695 }, { 757, 726 }, { 850, 819 }, { 881, 850 }, - { 974, 943 }, { 1005, 974 }, { 510, 479 }, { 634, 603 }, - { 758, 727 }, { 882, 851 }, { 1006, 975 }, { 539, 508 }, - { 663, 632 }, { 787, 756 }, { 911, 880 }, { 540, 509 }, - { 571, 540 }, { 664, 633 }, { 695, 664 }, { 788, 757 }, - { 819, 788 }, { 912, 881 }, { 943, 912 }, { 541, 510 }, - { 572, 541 }, { 603, 572 }, { 665, 634 }, { 696, 665 }, - { 727, 696 }, { 789, 758 }, { 820, 789 }, { 851, 820 }, - { 913, 882 }, { 944, 913 }, { 975, 944 }, { 542, 511 }, - { 573, 542 }, { 604, 573 }, { 635, 604 }, { 666, 635 }, - { 697, 666 }, { 728, 697 }, { 759, 728 }, { 790, 759 }, - { 821, 790 }, { 852, 821 }, { 883, 852 }, { 914, 883 }, - { 945, 914 }, { 976, 945 }, { 1007, 976 }, { 574, 543 }, - { 605, 574 }, { 636, 605 }, { 698, 667 }, { 729, 698 }, - { 760, 729 }, { 822, 791 }, { 853, 822 }, { 884, 853 }, - { 946, 915 }, { 977, 946 }, { 1008, 977 }, { 606, 575 }, - { 637, 606 }, { 730, 699 }, { 761, 730 }, { 854, 823 }, - { 885, 854 }, { 978, 947 }, { 1009, 978 }, { 638, 607 }, - { 762, 731 }, { 886, 855 }, { 1010, 979 }, { 667, 636 }, - { 791, 760 }, { 915, 884 }, { 668, 637 }, { 699, 668 }, - { 792, 761 }, { 823, 792 }, { 916, 885 }, { 947, 916 }, - { 669, 638 }, { 700, 669 }, { 731, 700 }, { 793, 762 }, - { 824, 793 }, { 855, 824 }, { 917, 886 }, { 948, 917 }, - { 979, 948 }, { 670, 639 }, { 701, 670 }, { 732, 701 }, - { 763, 732 }, { 794, 763 }, { 825, 794 }, { 856, 825 }, - { 887, 856 }, { 918, 887 }, { 949, 918 }, { 980, 949 }, - { 1011, 980 }, { 702, 671 }, { 733, 702 }, { 764, 733 }, - { 826, 795 }, { 857, 826 }, { 888, 857 }, { 950, 919 }, - { 981, 950 }, { 1012, 981 }, { 734, 703 }, { 765, 734 }, - { 858, 827 }, { 889, 858 }, { 982, 951 }, { 1013, 982 }, - { 766, 735 }, { 890, 859 }, { 1014, 983 }, { 795, 764 }, - { 919, 888 }, { 796, 765 }, { 827, 796 }, { 920, 889 }, - { 951, 920 }, { 797, 766 }, { 828, 797 }, { 859, 828 }, - { 921, 890 }, { 952, 921 }, { 983, 952 }, { 798, 767 }, - { 829, 798 }, { 860, 829 }, { 891, 860 }, { 922, 891 }, - { 953, 922 }, { 984, 953 }, { 1015, 984 }, { 830, 799 }, - { 861, 830 }, { 892, 861 }, { 954, 923 }, { 985, 954 }, - { 1016, 985 }, { 862, 831 }, { 893, 862 }, { 986, 955 }, - { 1017, 986 }, { 894, 863 }, { 1018, 987 }, { 923, 892 }, - { 924, 893 }, { 955, 924 }, { 925, 894 }, { 956, 925 }, - { 987, 956 }, { 926, 895 }, { 957, 926 }, { 988, 957 }, - { 1019, 988 }, { 958, 927 }, { 989, 958 }, { 1020, 989 }, - { 990, 959 }, { 1021, 990 }, { 1022, 991 }, { 0, 0 }, -}; - -static const int16_t (* const vp9_scans_nb[5][4])[2] = { - { - vp9_default_scan_4x4_nb, vp9_col_scan_4x4_nb, - vp9_row_scan_4x4_nb, vp9_default_scan_4x4_nb - }, { - vp9_default_scan_8x8_nb, vp9_col_scan_8x8_nb, - vp9_row_scan_8x8_nb, vp9_default_scan_8x8_nb - }, { - vp9_default_scan_16x16_nb, vp9_col_scan_16x16_nb, - vp9_row_scan_16x16_nb, vp9_default_scan_16x16_nb - }, { - vp9_default_scan_32x32_nb, vp9_default_scan_32x32_nb, - vp9_default_scan_32x32_nb, vp9_default_scan_32x32_nb - }, { // lossless - vp9_default_scan_4x4_nb, vp9_default_scan_4x4_nb, - vp9_default_scan_4x4_nb, vp9_default_scan_4x4_nb - } -}; - -static const uint8_t vp9_model_pareto8[256][8] = { - { 6, 86, 128, 11, 87, 42, 91, 52 }, - { 3, 86, 128, 6, 86, 23, 88, 29 }, - { 6, 86, 128, 11, 87, 42, 91, 52 }, - { 9, 86, 129, 17, 88, 61, 94, 76 }, - { 12, 86, 129, 22, 88, 77, 97, 93 }, - { 15, 87, 129, 28, 89, 93, 100, 110 }, - { 17, 87, 129, 33, 90, 105, 103, 123 }, - { 20, 88, 130, 38, 91, 118, 106, 136 }, - { 23, 88, 130, 43, 91, 128, 108, 146 }, - { 26, 89, 131, 48, 92, 139, 111, 156 }, - { 28, 89, 131, 53, 93, 147, 114, 163 }, - { 31, 90, 131, 58, 94, 156, 117, 171 }, - { 34, 90, 131, 62, 94, 163, 119, 177 }, - { 37, 90, 132, 66, 95, 171, 122, 184 }, - { 39, 90, 132, 70, 96, 177, 124, 189 }, - { 42, 91, 132, 75, 97, 183, 127, 194 }, - { 44, 91, 132, 79, 97, 188, 129, 198 }, - { 47, 92, 133, 83, 98, 193, 132, 202 }, - { 49, 92, 133, 86, 99, 197, 134, 205 }, - { 52, 93, 133, 90, 100, 201, 137, 208 }, - { 54, 93, 133, 94, 100, 204, 139, 211 }, - { 57, 94, 134, 98, 101, 208, 142, 214 }, - { 59, 94, 134, 101, 102, 211, 144, 216 }, - { 62, 94, 135, 105, 103, 214, 146, 218 }, - { 64, 94, 135, 108, 103, 216, 148, 220 }, - { 66, 95, 135, 111, 104, 219, 151, 222 }, - { 68, 95, 135, 114, 105, 221, 153, 223 }, - { 71, 96, 136, 117, 106, 224, 155, 225 }, - { 73, 96, 136, 120, 106, 225, 157, 226 }, - { 76, 97, 136, 123, 107, 227, 159, 228 }, - { 78, 97, 136, 126, 108, 229, 160, 229 }, - { 80, 98, 137, 129, 109, 231, 162, 231 }, - { 82, 98, 137, 131, 109, 232, 164, 232 }, - { 84, 98, 138, 134, 110, 234, 166, 233 }, - { 86, 98, 138, 137, 111, 235, 168, 234 }, - { 89, 99, 138, 140, 112, 236, 170, 235 }, - { 91, 99, 138, 142, 112, 237, 171, 235 }, - { 93, 100, 139, 145, 113, 238, 173, 236 }, - { 95, 100, 139, 147, 114, 239, 174, 237 }, - { 97, 101, 140, 149, 115, 240, 176, 238 }, - { 99, 101, 140, 151, 115, 241, 177, 238 }, - { 101, 102, 140, 154, 116, 242, 179, 239 }, - { 103, 102, 140, 156, 117, 242, 180, 239 }, - { 105, 103, 141, 158, 118, 243, 182, 240 }, - { 107, 103, 141, 160, 118, 243, 183, 240 }, - { 109, 104, 141, 162, 119, 244, 185, 241 }, - { 111, 104, 141, 164, 119, 244, 186, 241 }, - { 113, 104, 142, 166, 120, 245, 187, 242 }, - { 114, 104, 142, 168, 121, 245, 188, 242 }, - { 116, 105, 143, 170, 122, 246, 190, 243 }, - { 118, 105, 143, 171, 122, 246, 191, 243 }, - { 120, 106, 143, 173, 123, 247, 192, 244 }, - { 121, 106, 143, 175, 124, 247, 193, 244 }, - { 123, 107, 144, 177, 125, 248, 195, 244 }, - { 125, 107, 144, 178, 125, 248, 196, 244 }, - { 127, 108, 145, 180, 126, 249, 197, 245 }, - { 128, 108, 145, 181, 127, 249, 198, 245 }, - { 130, 109, 145, 183, 128, 249, 199, 245 }, - { 132, 109, 145, 184, 128, 249, 200, 245 }, - { 134, 110, 146, 186, 129, 250, 201, 246 }, - { 135, 110, 146, 187, 130, 250, 202, 246 }, - { 137, 111, 147, 189, 131, 251, 203, 246 }, - { 138, 111, 147, 190, 131, 251, 204, 246 }, - { 140, 112, 147, 192, 132, 251, 205, 247 }, - { 141, 112, 147, 193, 132, 251, 206, 247 }, - { 143, 113, 148, 194, 133, 251, 207, 247 }, - { 144, 113, 148, 195, 134, 251, 207, 247 }, - { 146, 114, 149, 197, 135, 252, 208, 248 }, - { 147, 114, 149, 198, 135, 252, 209, 248 }, - { 149, 115, 149, 199, 136, 252, 210, 248 }, - { 150, 115, 149, 200, 137, 252, 210, 248 }, - { 152, 115, 150, 201, 138, 252, 211, 248 }, - { 153, 115, 150, 202, 138, 252, 212, 248 }, - { 155, 116, 151, 204, 139, 253, 213, 249 }, - { 156, 116, 151, 205, 139, 253, 213, 249 }, - { 158, 117, 151, 206, 140, 253, 214, 249 }, - { 159, 117, 151, 207, 141, 253, 215, 249 }, - { 161, 118, 152, 208, 142, 253, 216, 249 }, - { 162, 118, 152, 209, 142, 253, 216, 249 }, - { 163, 119, 153, 210, 143, 253, 217, 249 }, - { 164, 119, 153, 211, 143, 253, 217, 249 }, - { 166, 120, 153, 212, 144, 254, 218, 250 }, - { 167, 120, 153, 212, 145, 254, 219, 250 }, - { 168, 121, 154, 213, 146, 254, 220, 250 }, - { 169, 121, 154, 214, 146, 254, 220, 250 }, - { 171, 122, 155, 215, 147, 254, 221, 250 }, - { 172, 122, 155, 216, 147, 254, 221, 250 }, - { 173, 123, 155, 217, 148, 254, 222, 250 }, - { 174, 123, 155, 217, 149, 254, 222, 250 }, - { 176, 124, 156, 218, 150, 254, 223, 250 }, - { 177, 124, 156, 219, 150, 254, 223, 250 }, - { 178, 125, 157, 220, 151, 254, 224, 251 }, - { 179, 125, 157, 220, 151, 254, 224, 251 }, - { 180, 126, 157, 221, 152, 254, 225, 251 }, - { 181, 126, 157, 221, 152, 254, 225, 251 }, - { 183, 127, 158, 222, 153, 254, 226, 251 }, - { 184, 127, 158, 223, 154, 254, 226, 251 }, - { 185, 128, 159, 224, 155, 255, 227, 251 }, - { 186, 128, 159, 224, 155, 255, 227, 251 }, - { 187, 129, 160, 225, 156, 255, 228, 251 }, - { 188, 130, 160, 225, 156, 255, 228, 251 }, - { 189, 131, 160, 226, 157, 255, 228, 251 }, - { 190, 131, 160, 226, 158, 255, 228, 251 }, - { 191, 132, 161, 227, 159, 255, 229, 251 }, - { 192, 132, 161, 227, 159, 255, 229, 251 }, - { 193, 133, 162, 228, 160, 255, 230, 252 }, - { 194, 133, 162, 229, 160, 255, 230, 252 }, - { 195, 134, 163, 230, 161, 255, 231, 252 }, - { 196, 134, 163, 230, 161, 255, 231, 252 }, - { 197, 135, 163, 231, 162, 255, 231, 252 }, - { 198, 135, 163, 231, 162, 255, 231, 252 }, - { 199, 136, 164, 232, 163, 255, 232, 252 }, - { 200, 136, 164, 232, 164, 255, 232, 252 }, - { 201, 137, 165, 233, 165, 255, 233, 252 }, - { 201, 137, 165, 233, 165, 255, 233, 252 }, - { 202, 138, 166, 233, 166, 255, 233, 252 }, - { 203, 138, 166, 233, 166, 255, 233, 252 }, - { 204, 139, 166, 234, 167, 255, 234, 252 }, - { 205, 139, 166, 234, 167, 255, 234, 252 }, - { 206, 140, 167, 235, 168, 255, 235, 252 }, - { 206, 140, 167, 235, 168, 255, 235, 252 }, - { 207, 141, 168, 236, 169, 255, 235, 252 }, - { 208, 141, 168, 236, 170, 255, 235, 252 }, - { 209, 142, 169, 237, 171, 255, 236, 252 }, - { 209, 143, 169, 237, 171, 255, 236, 252 }, - { 210, 144, 169, 237, 172, 255, 236, 252 }, - { 211, 144, 169, 237, 172, 255, 236, 252 }, - { 212, 145, 170, 238, 173, 255, 237, 252 }, - { 213, 145, 170, 238, 173, 255, 237, 252 }, - { 214, 146, 171, 239, 174, 255, 237, 253 }, - { 214, 146, 171, 239, 174, 255, 237, 253 }, - { 215, 147, 172, 240, 175, 255, 238, 253 }, - { 215, 147, 172, 240, 175, 255, 238, 253 }, - { 216, 148, 173, 240, 176, 255, 238, 253 }, - { 217, 148, 173, 240, 176, 255, 238, 253 }, - { 218, 149, 173, 241, 177, 255, 239, 253 }, - { 218, 149, 173, 241, 178, 255, 239, 253 }, - { 219, 150, 174, 241, 179, 255, 239, 253 }, - { 219, 151, 174, 241, 179, 255, 239, 253 }, - { 220, 152, 175, 242, 180, 255, 240, 253 }, - { 221, 152, 175, 242, 180, 255, 240, 253 }, - { 222, 153, 176, 242, 181, 255, 240, 253 }, - { 222, 153, 176, 242, 181, 255, 240, 253 }, - { 223, 154, 177, 243, 182, 255, 240, 253 }, - { 223, 154, 177, 243, 182, 255, 240, 253 }, - { 224, 155, 178, 244, 183, 255, 241, 253 }, - { 224, 155, 178, 244, 183, 255, 241, 253 }, - { 225, 156, 178, 244, 184, 255, 241, 253 }, - { 225, 157, 178, 244, 184, 255, 241, 253 }, - { 226, 158, 179, 244, 185, 255, 242, 253 }, - { 227, 158, 179, 244, 185, 255, 242, 253 }, - { 228, 159, 180, 245, 186, 255, 242, 253 }, - { 228, 159, 180, 245, 186, 255, 242, 253 }, - { 229, 160, 181, 245, 187, 255, 242, 253 }, - { 229, 160, 181, 245, 187, 255, 242, 253 }, - { 230, 161, 182, 246, 188, 255, 243, 253 }, - { 230, 162, 182, 246, 188, 255, 243, 253 }, - { 231, 163, 183, 246, 189, 255, 243, 253 }, - { 231, 163, 183, 246, 189, 255, 243, 253 }, - { 232, 164, 184, 247, 190, 255, 243, 253 }, - { 232, 164, 184, 247, 190, 255, 243, 253 }, - { 233, 165, 185, 247, 191, 255, 244, 253 }, - { 233, 165, 185, 247, 191, 255, 244, 253 }, - { 234, 166, 185, 247, 192, 255, 244, 253 }, - { 234, 167, 185, 247, 192, 255, 244, 253 }, - { 235, 168, 186, 248, 193, 255, 244, 253 }, - { 235, 168, 186, 248, 193, 255, 244, 253 }, - { 236, 169, 187, 248, 194, 255, 244, 253 }, - { 236, 169, 187, 248, 194, 255, 244, 253 }, - { 236, 170, 188, 248, 195, 255, 245, 253 }, - { 236, 170, 188, 248, 195, 255, 245, 253 }, - { 237, 171, 189, 249, 196, 255, 245, 254 }, - { 237, 172, 189, 249, 196, 255, 245, 254 }, - { 238, 173, 190, 249, 197, 255, 245, 254 }, - { 238, 173, 190, 249, 197, 255, 245, 254 }, - { 239, 174, 191, 249, 198, 255, 245, 254 }, - { 239, 174, 191, 249, 198, 255, 245, 254 }, - { 240, 175, 192, 249, 199, 255, 246, 254 }, - { 240, 176, 192, 249, 199, 255, 246, 254 }, - { 240, 177, 193, 250, 200, 255, 246, 254 }, - { 240, 177, 193, 250, 200, 255, 246, 254 }, - { 241, 178, 194, 250, 201, 255, 246, 254 }, - { 241, 178, 194, 250, 201, 255, 246, 254 }, - { 242, 179, 195, 250, 202, 255, 246, 254 }, - { 242, 180, 195, 250, 202, 255, 246, 254 }, - { 242, 181, 196, 250, 203, 255, 247, 254 }, - { 242, 181, 196, 250, 203, 255, 247, 254 }, - { 243, 182, 197, 251, 204, 255, 247, 254 }, - { 243, 183, 197, 251, 204, 255, 247, 254 }, - { 244, 184, 198, 251, 205, 255, 247, 254 }, - { 244, 184, 198, 251, 205, 255, 247, 254 }, - { 244, 185, 199, 251, 206, 255, 247, 254 }, - { 244, 185, 199, 251, 206, 255, 247, 254 }, - { 245, 186, 200, 251, 207, 255, 247, 254 }, - { 245, 187, 200, 251, 207, 255, 247, 254 }, - { 246, 188, 201, 252, 207, 255, 248, 254 }, - { 246, 188, 201, 252, 207, 255, 248, 254 }, - { 246, 189, 202, 252, 208, 255, 248, 254 }, - { 246, 190, 202, 252, 208, 255, 248, 254 }, - { 247, 191, 203, 252, 209, 255, 248, 254 }, - { 247, 191, 203, 252, 209, 255, 248, 254 }, - { 247, 192, 204, 252, 210, 255, 248, 254 }, - { 247, 193, 204, 252, 210, 255, 248, 254 }, - { 248, 194, 205, 252, 211, 255, 248, 254 }, - { 248, 194, 205, 252, 211, 255, 248, 254 }, - { 248, 195, 206, 252, 212, 255, 249, 254 }, - { 248, 196, 206, 252, 212, 255, 249, 254 }, - { 249, 197, 207, 253, 213, 255, 249, 254 }, - { 249, 197, 207, 253, 213, 255, 249, 254 }, - { 249, 198, 208, 253, 214, 255, 249, 254 }, - { 249, 199, 209, 253, 214, 255, 249, 254 }, - { 250, 200, 210, 253, 215, 255, 249, 254 }, - { 250, 200, 210, 253, 215, 255, 249, 254 }, - { 250, 201, 211, 253, 215, 255, 249, 254 }, - { 250, 202, 211, 253, 215, 255, 249, 254 }, - { 250, 203, 212, 253, 216, 255, 249, 254 }, - { 250, 203, 212, 253, 216, 255, 249, 254 }, - { 251, 204, 213, 253, 217, 255, 250, 254 }, - { 251, 205, 213, 253, 217, 255, 250, 254 }, - { 251, 206, 214, 254, 218, 255, 250, 254 }, - { 251, 206, 215, 254, 218, 255, 250, 254 }, - { 252, 207, 216, 254, 219, 255, 250, 254 }, - { 252, 208, 216, 254, 219, 255, 250, 254 }, - { 252, 209, 217, 254, 220, 255, 250, 254 }, - { 252, 210, 217, 254, 220, 255, 250, 254 }, - { 252, 211, 218, 254, 221, 255, 250, 254 }, - { 252, 212, 218, 254, 221, 255, 250, 254 }, - { 253, 213, 219, 254, 222, 255, 250, 254 }, - { 253, 213, 220, 254, 222, 255, 250, 254 }, - { 253, 214, 221, 254, 223, 255, 250, 254 }, - { 253, 215, 221, 254, 223, 255, 250, 254 }, - { 253, 216, 222, 254, 224, 255, 251, 254 }, - { 253, 217, 223, 254, 224, 255, 251, 254 }, - { 253, 218, 224, 254, 225, 255, 251, 254 }, - { 253, 219, 224, 254, 225, 255, 251, 254 }, - { 254, 220, 225, 254, 225, 255, 251, 254 }, - { 254, 221, 226, 254, 225, 255, 251, 254 }, - { 254, 222, 227, 255, 226, 255, 251, 254 }, - { 254, 223, 227, 255, 226, 255, 251, 254 }, - { 254, 224, 228, 255, 227, 255, 251, 254 }, - { 254, 225, 229, 255, 227, 255, 251, 254 }, - { 254, 226, 230, 255, 228, 255, 251, 254 }, - { 254, 227, 230, 255, 229, 255, 251, 254 }, - { 255, 228, 231, 255, 230, 255, 251, 254 }, - { 255, 229, 232, 255, 230, 255, 251, 254 }, - { 255, 230, 233, 255, 231, 255, 252, 254 }, - { 255, 231, 234, 255, 231, 255, 252, 254 }, - { 255, 232, 235, 255, 232, 255, 252, 254 }, - { 255, 233, 236, 255, 232, 255, 252, 254 }, - { 255, 235, 237, 255, 233, 255, 252, 254 }, - { 255, 236, 238, 255, 234, 255, 252, 254 }, - { 255, 238, 240, 255, 235, 255, 252, 255 }, - { 255, 239, 241, 255, 235, 255, 252, 254 }, - { 255, 241, 243, 255, 236, 255, 252, 254 }, - { 255, 243, 245, 255, 237, 255, 252, 254 }, - { 255, 246, 247, 255, 239, 255, 253, 255 }, -}; - -typedef struct { - uint8_t y_mode[4][9]; - uint8_t uv_mode[10][9]; - uint8_t filter[4][2]; - uint8_t mv_mode[7][3]; - uint8_t intra[4]; - uint8_t comp[5]; - uint8_t single_ref[5][2]; - uint8_t comp_ref[5]; - uint8_t tx32p[2][3]; - uint8_t tx16p[2][2]; - uint8_t tx8p[2]; - uint8_t skip[3]; - uint8_t mv_joint[3]; - struct { - uint8_t sign; - uint8_t classes[10]; - uint8_t class0; - uint8_t bits[10]; - uint8_t class0_fp[2][3]; - uint8_t fp[3]; - uint8_t class0_hp; - uint8_t hp; - } mv_comp[2]; - uint8_t partition[4][4][3]; -} prob_context; - -static const prob_context vp9_default_probs = { - { /* y_mode */ - { 65, 32, 18, 144, 162, 194, 41, 51, 98 } /* bsize < 8x8 */, - { 132, 68, 18, 165, 217, 196, 45, 40, 78 } /* bsize < 16x16 */, - { 173, 80, 19, 176, 240, 193, 64, 35, 46 } /* bsize < 32x32 */, - { 221, 135, 38, 194, 248, 121, 96, 85, 29 } /* bsize >= 32x32 */ - }, { /* uv_mode */ - { 48, 12, 154, 155, 139, 90, 34, 117, 119 } /* y = v */, - { 67, 6, 25, 204, 243, 158, 13, 21, 96 } /* y = h */, - { 120, 7, 76, 176, 208, 126, 28, 54, 103 } /* y = dc */, - { 97, 5, 44, 131, 176, 139, 48, 68, 97 } /* y = d45 */, - { 83, 5, 42, 156, 111, 152, 26, 49, 152 } /* y = d135 */, - { 80, 5, 58, 178, 74, 83, 33, 62, 145 } /* y = d117 */, - { 86, 5, 32, 154, 192, 168, 14, 22, 163 } /* y = d153 */, - { 77, 7, 64, 116, 132, 122, 37, 126, 120 } /* y = d63 */, - { 85, 5, 32, 156, 216, 148, 19, 29, 73 } /* y = d27 */, - { 101, 21, 107, 181, 192, 103, 19, 67, 125 } /* y = tm */ - }, { /* filter */ - { 235, 162, }, - { 36, 255, }, - { 34, 3, }, - { 149, 144, }, - }, { /* mv_mode */ - { 2, 173, 34}, // 0 = both zero mv - { 7, 145, 85}, // 1 = one zero mv + one a predicted mv - { 7, 166, 63}, // 2 = two predicted mvs - { 7, 94, 66}, // 3 = one predicted/zero and one new mv - { 8, 64, 46}, // 4 = two new mvs - { 17, 81, 31}, // 5 = one intra neighbour + x - { 25, 29, 30}, // 6 = two intra neighbours - }, { /* intra */ - 9, 102, 187, 225 - }, { /* comp */ - 239, 183, 119, 96, 41 - }, { /* single_ref */ - { 33, 16 }, - { 77, 74 }, - { 142, 142 }, - { 172, 170 }, - { 238, 247 } - }, { /* comp_ref */ - 50, 126, 123, 221, 226 - }, { /* tx32p */ - { 3, 136, 37, }, - { 5, 52, 13, }, - }, { /* tx16p */ - { 20, 152, }, - { 15, 101, }, - }, { /* tx8p */ - 100, 66 - }, { /* skip */ - 192, 128, 64 - }, { /* mv_joint */ - 32, 64, 96 - }, { - { /* mv vertical component */ - 128, /* sign */ - { 224, 144, 192, 168, 192, 176, 192, 198, 198, 245 }, /* class */ - 216, /* class0 */ - { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240}, /* bits */ - { /* class0_fp */ - { 128, 128, 64 }, - { 96, 112, 64 } - }, - { 64, 96, 64 }, /* fp */ - 160, /* class0_hp bit */ - 128, /* hp */ - }, { /* mv horizontal component */ - 128, /* sign */ - { 216, 128, 176, 160, 176, 176, 192, 198, 198, 208 }, /* class */ - 208, /* class0 */ - { 136, 140, 148, 160, 176, 192, 224, 234, 234, 240 }, /* bits */ - { /* class0_fp */ - { 128, 128, 64 }, - { 96, 112, 64 } - }, - { 64, 96, 64 }, /* fp */ - 160, /* class0_hp bit */ - 128, /* hp */ - } - }, { /* partition */ - { /* 64x64 -> 32x32 */ - { 222, 34, 30 } /* a/l both not split */, - { 72, 16, 44 } /* a split, l not split */, - { 58, 32, 12 } /* l split, a not split */, - { 10, 7, 6 } /* a/l both split */, - }, { /* 32x32 -> 16x16 */ - { 177, 58, 59 } /* a/l both not split */, - { 68, 26, 63 } /* a split, l not split */, - { 52, 79, 25 } /* l split, a not split */, - { 17, 14, 12 } /* a/l both split */, - }, { /* 16x16 -> 8x8 */ - { 174, 73, 87 } /* a/l both not split */, - { 92, 41, 83 } /* a split, l not split */, - { 82, 99, 50 } /* l split, a not split */, - { 53, 39, 39 } /* a/l both split */, - }, { /* 8x8 -> 4x4 */ - { 199, 122, 141 } /* a/l both not split */, - { 147, 63, 159 } /* a split, l not split */, - { 148, 133, 118 } /* l split, a not split */, - { 121, 104, 114 } /* a/l both split */, - } - }, -}; - -static const uint8_t vp9_default_coef_probs[4][2][2][6][6][3] = { - { /* tx = 4x4 */ - { /* block Type 0 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 195, 29, 183 }, - { 84, 49, 136 }, - { 8, 42, 71 } - }, { /* Coeff Band 1 */ - { 31, 107, 169 }, - { 35, 99, 159 }, - { 17, 82, 140 }, - { 8, 66, 114 }, - { 2, 44, 76 }, - { 1, 19, 32 } - }, { /* Coeff Band 2 */ - { 40, 132, 201 }, - { 29, 114, 187 }, - { 13, 91, 157 }, - { 7, 75, 127 }, - { 3, 58, 95 }, - { 1, 28, 47 } - }, { /* Coeff Band 3 */ - { 69, 142, 221 }, - { 42, 122, 201 }, - { 15, 91, 159 }, - { 6, 67, 121 }, - { 1, 42, 77 }, - { 1, 17, 31 } - }, { /* Coeff Band 4 */ - { 102, 148, 228 }, - { 67, 117, 204 }, - { 17, 82, 154 }, - { 6, 59, 114 }, - { 2, 39, 75 }, - { 1, 15, 29 } - }, { /* Coeff Band 5 */ - { 156, 57, 233 }, - { 119, 57, 212 }, - { 58, 48, 163 }, - { 29, 40, 124 }, - { 12, 30, 81 }, - { 3, 12, 31 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 191, 107, 226 }, - { 124, 117, 204 }, - { 25, 99, 155 } - }, { /* Coeff Band 1 */ - { 29, 148, 210 }, - { 37, 126, 194 }, - { 8, 93, 157 }, - { 2, 68, 118 }, - { 1, 39, 69 }, - { 1, 17, 33 } - }, { /* Coeff Band 2 */ - { 41, 151, 213 }, - { 27, 123, 193 }, - { 3, 82, 144 }, - { 1, 58, 105 }, - { 1, 32, 60 }, - { 1, 13, 26 } - }, { /* Coeff Band 3 */ - { 59, 159, 220 }, - { 23, 126, 198 }, - { 4, 88, 151 }, - { 1, 66, 114 }, - { 1, 38, 71 }, - { 1, 18, 34 } - }, { /* Coeff Band 4 */ - { 114, 136, 232 }, - { 51, 114, 207 }, - { 11, 83, 155 }, - { 3, 56, 105 }, - { 1, 33, 65 }, - { 1, 17, 34 } - }, { /* Coeff Band 5 */ - { 149, 65, 234 }, - { 121, 57, 215 }, - { 61, 49, 166 }, - { 28, 36, 114 }, - { 12, 25, 76 }, - { 3, 16, 42 } - } - } - }, { /* block Type 1 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 214, 49, 220 }, - { 132, 63, 188 }, - { 42, 65, 137 } - }, { /* Coeff Band 1 */ - { 85, 137, 221 }, - { 104, 131, 216 }, - { 49, 111, 192 }, - { 21, 87, 155 }, - { 2, 49, 87 }, - { 1, 16, 28 } - }, { /* Coeff Band 2 */ - { 89, 163, 230 }, - { 90, 137, 220 }, - { 29, 100, 183 }, - { 10, 70, 135 }, - { 2, 42, 81 }, - { 1, 17, 33 } - }, { /* Coeff Band 3 */ - { 108, 167, 237 }, - { 55, 133, 222 }, - { 15, 97, 179 }, - { 4, 72, 135 }, - { 1, 45, 85 }, - { 1, 19, 38 } - }, { /* Coeff Band 4 */ - { 124, 146, 240 }, - { 66, 124, 224 }, - { 17, 88, 175 }, - { 4, 58, 122 }, - { 1, 36, 75 }, - { 1, 18, 37 } - }, { /* Coeff Band 5 */ - { 141, 79, 241 }, - { 126, 70, 227 }, - { 66, 58, 182 }, - { 30, 44, 136 }, - { 12, 34, 96 }, - { 2, 20, 47 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 229, 99, 249 }, - { 143, 111, 235 }, - { 46, 109, 192 } - }, { /* Coeff Band 1 */ - { 82, 158, 236 }, - { 94, 146, 224 }, - { 25, 117, 191 }, - { 9, 87, 149 }, - { 3, 56, 99 }, - { 1, 33, 57 } - }, { /* Coeff Band 2 */ - { 83, 167, 237 }, - { 68, 145, 222 }, - { 10, 103, 177 }, - { 2, 72, 131 }, - { 1, 41, 79 }, - { 1, 20, 39 } - }, { /* Coeff Band 3 */ - { 99, 167, 239 }, - { 47, 141, 224 }, - { 10, 104, 178 }, - { 2, 73, 133 }, - { 1, 44, 85 }, - { 1, 22, 47 } - }, { /* Coeff Band 4 */ - { 127, 145, 243 }, - { 71, 129, 228 }, - { 17, 93, 177 }, - { 3, 61, 124 }, - { 1, 41, 84 }, - { 1, 21, 52 } - }, { /* Coeff Band 5 */ - { 157, 78, 244 }, - { 140, 72, 231 }, - { 69, 58, 184 }, - { 31, 44, 137 }, - { 14, 38, 105 }, - { 8, 23, 61 } - } - } - } - }, { /* tx = 8x8 */ - { /* block Type 0 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 125, 34, 187 }, - { 52, 41, 133 }, - { 6, 31, 56 } - }, { /* Coeff Band 1 */ - { 37, 109, 153 }, - { 51, 102, 147 }, - { 23, 87, 128 }, - { 8, 67, 101 }, - { 1, 41, 63 }, - { 1, 19, 29 } - }, { /* Coeff Band 2 */ - { 31, 154, 185 }, - { 17, 127, 175 }, - { 6, 96, 145 }, - { 2, 73, 114 }, - { 1, 51, 82 }, - { 1, 28, 45 } - }, { /* Coeff Band 3 */ - { 23, 163, 200 }, - { 10, 131, 185 }, - { 2, 93, 148 }, - { 1, 67, 111 }, - { 1, 41, 69 }, - { 1, 14, 24 } - }, { /* Coeff Band 4 */ - { 29, 176, 217 }, - { 12, 145, 201 }, - { 3, 101, 156 }, - { 1, 69, 111 }, - { 1, 39, 63 }, - { 1, 14, 23 } - }, { /* Coeff Band 5 */ - { 57, 192, 233 }, - { 25, 154, 215 }, - { 6, 109, 167 }, - { 3, 78, 118 }, - { 1, 48, 69 }, - { 1, 21, 29 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 202, 105, 245 }, - { 108, 106, 216 }, - { 18, 90, 144 } - }, { /* Coeff Band 1 */ - { 33, 172, 219 }, - { 64, 149, 206 }, - { 14, 117, 177 }, - { 5, 90, 141 }, - { 2, 61, 95 }, - { 1, 37, 57 } - }, { /* Coeff Band 2 */ - { 33, 179, 220 }, - { 11, 140, 198 }, - { 1, 89, 148 }, - { 1, 60, 104 }, - { 1, 33, 57 }, - { 1, 12, 21 } - }, { /* Coeff Band 3 */ - { 30, 181, 221 }, - { 8, 141, 198 }, - { 1, 87, 145 }, - { 1, 58, 100 }, - { 1, 31, 55 }, - { 1, 12, 20 } - }, { /* Coeff Band 4 */ - { 32, 186, 224 }, - { 7, 142, 198 }, - { 1, 86, 143 }, - { 1, 58, 100 }, - { 1, 31, 55 }, - { 1, 12, 22 } - }, { /* Coeff Band 5 */ - { 57, 192, 227 }, - { 20, 143, 204 }, - { 3, 96, 154 }, - { 1, 68, 112 }, - { 1, 42, 69 }, - { 1, 19, 32 } - } - } - }, { /* block Type 1 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 212, 35, 215 }, - { 113, 47, 169 }, - { 29, 48, 105 } - }, { /* Coeff Band 1 */ - { 74, 129, 203 }, - { 106, 120, 203 }, - { 49, 107, 178 }, - { 19, 84, 144 }, - { 4, 50, 84 }, - { 1, 15, 25 } - }, { /* Coeff Band 2 */ - { 71, 172, 217 }, - { 44, 141, 209 }, - { 15, 102, 173 }, - { 6, 76, 133 }, - { 2, 51, 89 }, - { 1, 24, 42 } - }, { /* Coeff Band 3 */ - { 64, 185, 231 }, - { 31, 148, 216 }, - { 8, 103, 175 }, - { 3, 74, 131 }, - { 1, 46, 81 }, - { 1, 18, 30 } - }, { /* Coeff Band 4 */ - { 65, 196, 235 }, - { 25, 157, 221 }, - { 5, 105, 174 }, - { 1, 67, 120 }, - { 1, 38, 69 }, - { 1, 15, 30 } - }, { /* Coeff Band 5 */ - { 65, 204, 238 }, - { 30, 156, 224 }, - { 7, 107, 177 }, - { 2, 70, 124 }, - { 1, 42, 73 }, - { 1, 18, 34 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 225, 86, 251 }, - { 144, 104, 235 }, - { 42, 99, 181 } - }, { /* Coeff Band 1 */ - { 85, 175, 239 }, - { 112, 165, 229 }, - { 29, 136, 200 }, - { 12, 103, 162 }, - { 6, 77, 123 }, - { 2, 53, 84 } - }, { /* Coeff Band 2 */ - { 75, 183, 239 }, - { 30, 155, 221 }, - { 3, 106, 171 }, - { 1, 74, 128 }, - { 1, 44, 76 }, - { 1, 17, 28 } - }, { /* Coeff Band 3 */ - { 73, 185, 240 }, - { 27, 159, 222 }, - { 2, 107, 172 }, - { 1, 75, 127 }, - { 1, 42, 73 }, - { 1, 17, 29 } - }, { /* Coeff Band 4 */ - { 62, 190, 238 }, - { 21, 159, 222 }, - { 2, 107, 172 }, - { 1, 72, 122 }, - { 1, 40, 71 }, - { 1, 18, 32 } - }, { /* Coeff Band 5 */ - { 61, 199, 240 }, - { 27, 161, 226 }, - { 4, 113, 180 }, - { 1, 76, 129 }, - { 1, 46, 80 }, - { 1, 23, 41 } - } - } - } - }, { /* tx = 16x16 */ - { /* block Type 0 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 7, 27, 153 }, - { 5, 30, 95 }, - { 1, 16, 30 } - }, { /* Coeff Band 1 */ - { 50, 75, 127 }, - { 57, 75, 124 }, - { 27, 67, 108 }, - { 10, 54, 86 }, - { 1, 33, 52 }, - { 1, 12, 18 } - }, { /* Coeff Band 2 */ - { 43, 125, 151 }, - { 26, 108, 148 }, - { 7, 83, 122 }, - { 2, 59, 89 }, - { 1, 38, 60 }, - { 1, 17, 27 } - }, { /* Coeff Band 3 */ - { 23, 144, 163 }, - { 13, 112, 154 }, - { 2, 75, 117 }, - { 1, 50, 81 }, - { 1, 31, 51 }, - { 1, 14, 23 } - }, { /* Coeff Band 4 */ - { 18, 162, 185 }, - { 6, 123, 171 }, - { 1, 78, 125 }, - { 1, 51, 86 }, - { 1, 31, 54 }, - { 1, 14, 23 } - }, { /* Coeff Band 5 */ - { 15, 199, 227 }, - { 3, 150, 204 }, - { 1, 91, 146 }, - { 1, 55, 95 }, - { 1, 30, 53 }, - { 1, 11, 20 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 19, 55, 240 }, - { 19, 59, 196 }, - { 3, 52, 105 } - }, { /* Coeff Band 1 */ - { 41, 166, 207 }, - { 104, 153, 199 }, - { 31, 123, 181 }, - { 14, 101, 152 }, - { 5, 72, 106 }, - { 1, 36, 52 } - }, { /* Coeff Band 2 */ - { 35, 176, 211 }, - { 12, 131, 190 }, - { 2, 88, 144 }, - { 1, 60, 101 }, - { 1, 36, 60 }, - { 1, 16, 28 } - }, { /* Coeff Band 3 */ - { 28, 183, 213 }, - { 8, 134, 191 }, - { 1, 86, 142 }, - { 1, 56, 96 }, - { 1, 30, 53 }, - { 1, 12, 20 } - }, { /* Coeff Band 4 */ - { 20, 190, 215 }, - { 4, 135, 192 }, - { 1, 84, 139 }, - { 1, 53, 91 }, - { 1, 28, 49 }, - { 1, 11, 20 } - }, { /* Coeff Band 5 */ - { 13, 196, 216 }, - { 2, 137, 192 }, - { 1, 86, 143 }, - { 1, 57, 99 }, - { 1, 32, 56 }, - { 1, 13, 24 } - } - } - }, { /* block Type 1 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 211, 29, 217 }, - { 96, 47, 156 }, - { 22, 43, 87 } - }, { /* Coeff Band 1 */ - { 78, 120, 193 }, - { 111, 116, 186 }, - { 46, 102, 164 }, - { 15, 80, 128 }, - { 2, 49, 76 }, - { 1, 18, 28 } - }, { /* Coeff Band 2 */ - { 71, 161, 203 }, - { 42, 132, 192 }, - { 10, 98, 150 }, - { 3, 69, 109 }, - { 1, 44, 70 }, - { 1, 18, 29 } - }, { /* Coeff Band 3 */ - { 57, 186, 211 }, - { 30, 140, 196 }, - { 4, 93, 146 }, - { 1, 62, 102 }, - { 1, 38, 65 }, - { 1, 16, 27 } - }, { /* Coeff Band 4 */ - { 47, 199, 217 }, - { 14, 145, 196 }, - { 1, 88, 142 }, - { 1, 57, 98 }, - { 1, 36, 62 }, - { 1, 15, 26 } - }, { /* Coeff Band 5 */ - { 26, 219, 229 }, - { 5, 155, 207 }, - { 1, 94, 151 }, - { 1, 60, 104 }, - { 1, 36, 62 }, - { 1, 16, 28 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 233, 29, 248 }, - { 146, 47, 220 }, - { 43, 52, 140 } - }, { /* Coeff Band 1 */ - { 100, 163, 232 }, - { 179, 161, 222 }, - { 63, 142, 204 }, - { 37, 113, 174 }, - { 26, 89, 137 }, - { 18, 68, 97 } - }, { /* Coeff Band 2 */ - { 85, 181, 230 }, - { 32, 146, 209 }, - { 7, 100, 164 }, - { 3, 71, 121 }, - { 1, 45, 77 }, - { 1, 18, 30 } - }, { /* Coeff Band 3 */ - { 65, 187, 230 }, - { 20, 148, 207 }, - { 2, 97, 159 }, - { 1, 68, 116 }, - { 1, 40, 70 }, - { 1, 14, 29 } - }, { /* Coeff Band 4 */ - { 40, 194, 227 }, - { 8, 147, 204 }, - { 1, 94, 155 }, - { 1, 65, 112 }, - { 1, 39, 66 }, - { 1, 14, 26 } - }, { /* Coeff Band 5 */ - { 16, 208, 228 }, - { 3, 151, 207 }, - { 1, 98, 160 }, - { 1, 67, 117 }, - { 1, 41, 74 }, - { 1, 17, 31 } - } - } - } - }, { /* tx = 32x32 */ - { /* block Type 0 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 17, 38, 140 }, - { 7, 34, 80 }, - { 1, 17, 29 } - }, { /* Coeff Band 1 */ - { 37, 75, 128 }, - { 41, 76, 128 }, - { 26, 66, 116 }, - { 12, 52, 94 }, - { 2, 32, 55 }, - { 1, 10, 16 } - }, { /* Coeff Band 2 */ - { 50, 127, 154 }, - { 37, 109, 152 }, - { 16, 82, 121 }, - { 5, 59, 85 }, - { 1, 35, 54 }, - { 1, 13, 20 } - }, { /* Coeff Band 3 */ - { 40, 142, 167 }, - { 17, 110, 157 }, - { 2, 71, 112 }, - { 1, 44, 72 }, - { 1, 27, 45 }, - { 1, 11, 17 } - }, { /* Coeff Band 4 */ - { 30, 175, 188 }, - { 9, 124, 169 }, - { 1, 74, 116 }, - { 1, 48, 78 }, - { 1, 30, 49 }, - { 1, 11, 18 } - }, { /* Coeff Band 5 */ - { 10, 222, 223 }, - { 2, 150, 194 }, - { 1, 83, 128 }, - { 1, 48, 79 }, - { 1, 27, 45 }, - { 1, 11, 17 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 36, 41, 235 }, - { 29, 36, 193 }, - { 10, 27, 111 } - }, { /* Coeff Band 1 */ - { 85, 165, 222 }, - { 177, 162, 215 }, - { 110, 135, 195 }, - { 57, 113, 168 }, - { 23, 83, 120 }, - { 10, 49, 61 } - }, { /* Coeff Band 2 */ - { 85, 190, 223 }, - { 36, 139, 200 }, - { 5, 90, 146 }, - { 1, 60, 103 }, - { 1, 38, 65 }, - { 1, 18, 30 } - }, { /* Coeff Band 3 */ - { 72, 202, 223 }, - { 23, 141, 199 }, - { 2, 86, 140 }, - { 1, 56, 97 }, - { 1, 36, 61 }, - { 1, 16, 27 } - }, { /* Coeff Band 4 */ - { 55, 218, 225 }, - { 13, 145, 200 }, - { 1, 86, 141 }, - { 1, 57, 99 }, - { 1, 35, 61 }, - { 1, 13, 22 } - }, { /* Coeff Band 5 */ - { 15, 235, 212 }, - { 1, 132, 184 }, - { 1, 84, 139 }, - { 1, 57, 97 }, - { 1, 34, 56 }, - { 1, 14, 23 } - } - } - }, { /* block Type 1 */ - { /* Intra */ - { /* Coeff Band 0 */ - { 181, 21, 201 }, - { 61, 37, 123 }, - { 10, 38, 71 } - }, { /* Coeff Band 1 */ - { 47, 106, 172 }, - { 95, 104, 173 }, - { 42, 93, 159 }, - { 18, 77, 131 }, - { 4, 50, 81 }, - { 1, 17, 23 } - }, { /* Coeff Band 2 */ - { 62, 147, 199 }, - { 44, 130, 189 }, - { 28, 102, 154 }, - { 18, 75, 115 }, - { 2, 44, 65 }, - { 1, 12, 19 } - }, { /* Coeff Band 3 */ - { 55, 153, 210 }, - { 24, 130, 194 }, - { 3, 93, 146 }, - { 1, 61, 97 }, - { 1, 31, 50 }, - { 1, 10, 16 } - }, { /* Coeff Band 4 */ - { 49, 186, 223 }, - { 17, 148, 204 }, - { 1, 96, 142 }, - { 1, 53, 83 }, - { 1, 26, 44 }, - { 1, 11, 17 } - }, { /* Coeff Band 5 */ - { 13, 217, 212 }, - { 2, 136, 180 }, - { 1, 78, 124 }, - { 1, 50, 83 }, - { 1, 29, 49 }, - { 1, 14, 23 } - } - }, { /* Inter */ - { /* Coeff Band 0 */ - { 197, 13, 247 }, - { 82, 17, 222 }, - { 25, 17, 162 } - }, { /* Coeff Band 1 */ - { 126, 186, 247 }, - { 234, 191, 243 }, - { 176, 177, 234 }, - { 104, 158, 220 }, - { 66, 128, 186 }, - { 55, 90, 137 } - }, { /* Coeff Band 2 */ - { 111, 197, 242 }, - { 46, 158, 219 }, - { 9, 104, 171 }, - { 2, 65, 125 }, - { 1, 44, 80 }, - { 1, 17, 91 } - }, { /* Coeff Band 3 */ - { 104, 208, 245 }, - { 39, 168, 224 }, - { 3, 109, 162 }, - { 1, 79, 124 }, - { 1, 50, 102 }, - { 1, 43, 102 } - }, { /* Coeff Band 4 */ - { 84, 220, 246 }, - { 31, 177, 231 }, - { 2, 115, 180 }, - { 1, 79, 134 }, - { 1, 55, 77 }, - { 1, 60, 79 } - }, { /* Coeff Band 5 */ - { 43, 243, 240 }, - { 8, 180, 217 }, - { 1, 115, 166 }, - { 1, 84, 121 }, - { 1, 51, 67 }, - { 1, 16, 6 } - } - } - } - } -}; - -enum MVJoint { - MV_JOINT_ZERO, - MV_JOINT_H, - MV_JOINT_V, - MV_JOINT_HV, -}; - -static const int8_t vp9_mv_joint_tree[3][2] = { - { -MV_JOINT_ZERO, 1 }, // '0' - { -MV_JOINT_H, 2 }, // '10' - { -MV_JOINT_V, -MV_JOINT_HV }, // '11x' -}; - -static const int8_t vp9_mv_class_tree[10][2] = { - { -0, 1 }, // '0' - { -1, 2 }, // '10' - { 3, 4 }, - { -2, -3 }, // '110x' - { 5, 6 }, - { -4, -5 }, // '1110x' - { -6, 7 }, // '11110' - { 8, 9 }, - { -7, -8 }, // '111110x' - { -9, -10 }, // '111111x' -}; - -static const int8_t vp9_mv_fp_tree[3][2] = { - { -0, 1 }, // '0' - { -1, 2 }, // '10' - { -2, -3 }, // '11x' -}; +extern const uint8_t ff_vp9_bwh_tab[2][N_BS_SIZES][2]; +extern const int8_t ff_vp9_partition_tree[3][2]; +extern const uint8_t ff_vp9_default_kf_partition_probs[4][4][3]; +extern const int8_t ff_vp9_segmentation_tree[7][2]; +extern const int8_t ff_vp9_intramode_tree[9][2]; +extern const uint8_t ff_vp9_default_kf_ymode_probs[10][10][9]; +extern const uint8_t ff_vp9_default_kf_uvmode_probs[10][9]; +extern const int8_t ff_vp9_inter_mode_tree[3][2]; +extern const int8_t ff_vp9_filter_tree[2][2]; +extern const enum FilterMode ff_vp9_filter_lut[3]; +extern const int16_t ff_vp9_dc_qlookup[3][256]; +extern const int16_t ff_vp9_ac_qlookup[3][256]; +extern const enum TxfmType ff_vp9_intra_txfm_type[14]; +extern const int16_t ff_vp9_default_scan_4x4[16]; +extern const int16_t ff_vp9_col_scan_4x4[16]; +extern const int16_t ff_vp9_row_scan_4x4[16]; +extern const int16_t ff_vp9_default_scan_8x8[64]; +extern const int16_t ff_vp9_col_scan_8x8[64]; +extern const int16_t ff_vp9_row_scan_8x8[64]; +extern const int16_t ff_vp9_default_scan_16x16[256]; +extern const int16_t ff_vp9_col_scan_16x16[256]; +extern const int16_t ff_vp9_row_scan_16x16[256]; +extern const int16_t ff_vp9_default_scan_32x32[1024]; +extern const int16_t * const ff_vp9_scans[5][4]; +extern const int16_t ff_vp9_default_scan_4x4_nb[16][2]; +extern const int16_t ff_vp9_col_scan_4x4_nb[16][2]; +extern const int16_t ff_vp9_row_scan_4x4_nb[16][2]; +extern const int16_t ff_vp9_default_scan_8x8_nb[64][2]; +extern const int16_t ff_vp9_col_scan_8x8_nb[64][2]; +extern const int16_t ff_vp9_row_scan_8x8_nb[64][2]; +extern const int16_t ff_vp9_default_scan_16x16_nb[256][2]; +extern const int16_t ff_vp9_col_scan_16x16_nb[256][2]; +extern const int16_t ff_vp9_row_scan_16x16_nb[256][2]; +extern const int16_t ff_vp9_default_scan_32x32_nb[1024][2]; +extern const int16_t (* const ff_vp9_scans_nb[5][4])[2]; +extern const uint8_t ff_vp9_model_pareto8[256][8]; +extern const ProbContext ff_vp9_default_probs; +extern const uint8_t ff_vp9_default_coef_probs[4][2][2][6][6][3]; +extern const int8_t ff_vp9_mv_joint_tree[3][2]; +extern const int8_t ff_vp9_mv_class_tree[10][2]; +extern const int8_t ff_vp9_mv_fp_tree[3][2]; #endif /* AVCODEC_VP9DATA_H */ diff --git a/media/ffvpx/libavcodec/vp9dec.h b/media/ffvpx/libavcodec/vp9dec.h new file mode 100644 index 000000000000..66573edc7911 --- /dev/null +++ b/media/ffvpx/libavcodec/vp9dec.h @@ -0,0 +1,240 @@ +/* + * VP9 compatible video decoder + * + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_VP9DEC_H +#define AVCODEC_VP9DEC_H + +#include +#include +#include + +#include "libavutil/buffer.h" +#include "libavutil/thread.h" +#include "libavutil/internal.h" + +#include "vp9.h" +#include "vp9dsp.h" +#include "vp9shared.h" + +enum MVJoint { + MV_JOINT_ZERO, + MV_JOINT_H, + MV_JOINT_V, + MV_JOINT_HV, +}; + +typedef struct ProbContext { + uint8_t y_mode[4][9]; + uint8_t uv_mode[10][9]; + uint8_t filter[4][2]; + uint8_t mv_mode[7][3]; + uint8_t intra[4]; + uint8_t comp[5]; + uint8_t single_ref[5][2]; + uint8_t comp_ref[5]; + uint8_t tx32p[2][3]; + uint8_t tx16p[2][2]; + uint8_t tx8p[2]; + uint8_t skip[3]; + uint8_t mv_joint[3]; + struct { + uint8_t sign; + uint8_t classes[10]; + uint8_t class0; + uint8_t bits[10]; + uint8_t class0_fp[2][3]; + uint8_t fp[3]; + uint8_t class0_hp; + uint8_t hp; + } mv_comp[2]; + uint8_t partition[4][4][3]; +} ProbContext; + +typedef struct VP9Filter { + uint8_t level[8 * 8]; + uint8_t /* bit=col */ mask[2 /* 0=y, 1=uv */][2 /* 0=col, 1=row */] + [8 /* rows */][4 /* 0=16, 1=8, 2=4, 3=inner4 */]; +} VP9Filter; + +typedef struct VP9Block { + uint8_t seg_id, intra, comp, ref[2], mode[4], uvmode, skip; + enum FilterMode filter; + VP56mv mv[4 /* b_idx */][2 /* ref */]; + enum BlockSize bs; + enum TxfmMode tx, uvtx; + enum BlockLevel bl; + enum BlockPartition bp; +} VP9Block; + +typedef struct VP9TileData VP9TileData; + +typedef struct VP9Context { + VP9SharedContext s; + VP9TileData *td; + + VP9DSPContext dsp; + VideoDSPContext vdsp; + GetBitContext gb; + VP56RangeCoder c; + int pass, active_tile_cols; + +#if HAVE_THREADS + pthread_mutex_t progress_mutex; + pthread_cond_t progress_cond; + atomic_int *entries; +#endif + + uint8_t ss_h, ss_v; + uint8_t last_bpp, bpp_index, bytesperpixel; + uint8_t last_keyframe; + // sb_cols/rows, rows/cols and last_fmt are used for allocating all internal + // arrays, and are thus per-thread. w/h and gf_fmt are synced between threads + // and are therefore per-stream. pix_fmt represents the value in the header + // of the currently processed frame. + int w, h; + enum AVPixelFormat pix_fmt, last_fmt, gf_fmt; + unsigned sb_cols, sb_rows, rows, cols; + ThreadFrame next_refs[8]; + + struct { + uint8_t lim_lut[64]; + uint8_t mblim_lut[64]; + } filter_lut; + struct { + ProbContext p; + uint8_t coef[4][2][2][6][6][3]; + } prob_ctx[4]; + struct { + ProbContext p; + uint8_t coef[4][2][2][6][6][11]; + } prob; + + // contextual (above) cache + uint8_t *above_partition_ctx; + uint8_t *above_mode_ctx; + // FIXME maybe merge some of the below in a flags field? + uint8_t *above_y_nnz_ctx; + uint8_t *above_uv_nnz_ctx[2]; + uint8_t *above_skip_ctx; // 1bit + uint8_t *above_txfm_ctx; // 2bit + uint8_t *above_segpred_ctx; // 1bit + uint8_t *above_intra_ctx; // 1bit + uint8_t *above_comp_ctx; // 1bit + uint8_t *above_ref_ctx; // 2bit + uint8_t *above_filter_ctx; + VP56mv (*above_mv_ctx)[2]; + + // whole-frame cache + uint8_t *intra_pred_data[3]; + VP9Filter *lflvl; + + // block reconstruction intermediates + int block_alloc_using_2pass; + uint16_t mvscale[3][2]; + uint8_t mvstep[3][2]; +} VP9Context; + +struct VP9TileData { + //VP9Context should be const, but because of the threading API(generates + //a lot of warnings) it's not. + VP9Context *s; + VP56RangeCoder *c_b; + VP56RangeCoder *c; + int row, row7, col, col7; + uint8_t *dst[3]; + ptrdiff_t y_stride, uv_stride; + VP9Block *b_base, *b; + unsigned tile_col_start; + + struct { + unsigned y_mode[4][10]; + unsigned uv_mode[10][10]; + unsigned filter[4][3]; + unsigned mv_mode[7][4]; + unsigned intra[4][2]; + unsigned comp[5][2]; + unsigned single_ref[5][2][2]; + unsigned comp_ref[5][2]; + unsigned tx32p[2][4]; + unsigned tx16p[2][3]; + unsigned tx8p[2][2]; + unsigned skip[3][2]; + unsigned mv_joint[4]; + struct { + unsigned sign[2]; + unsigned classes[11]; + unsigned class0[2]; + unsigned bits[10][2]; + unsigned class0_fp[2][4]; + unsigned fp[4]; + unsigned class0_hp[2]; + unsigned hp[2]; + } mv_comp[2]; + unsigned partition[4][4][4]; + unsigned coef[4][2][2][6][6][3]; + unsigned eob[4][2][2][6][6][2]; + } counts; + + // whole-frame cache + DECLARE_ALIGNED(32, uint8_t, edge_emu_buffer)[135 * 144 * 2]; + + // contextual (left) cache + DECLARE_ALIGNED(16, uint8_t, left_y_nnz_ctx)[16]; + DECLARE_ALIGNED(16, uint8_t, left_mode_ctx)[16]; + DECLARE_ALIGNED(16, VP56mv, left_mv_ctx)[16][2]; + DECLARE_ALIGNED(16, uint8_t, left_uv_nnz_ctx)[2][16]; + DECLARE_ALIGNED(8, uint8_t, left_partition_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_skip_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_txfm_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_segpred_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_intra_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_comp_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_ref_ctx)[8]; + DECLARE_ALIGNED(8, uint8_t, left_filter_ctx)[8]; + // block reconstruction intermediates + DECLARE_ALIGNED(32, uint8_t, tmp_y)[64 * 64 * 2]; + DECLARE_ALIGNED(32, uint8_t, tmp_uv)[2][64 * 64 * 2]; + struct { int x, y; } min_mv, max_mv; + int16_t *block_base, *block, *uvblock_base[2], *uvblock[2]; + uint8_t *eob_base, *uveob_base[2], *eob, *uveob[2]; +}; + +void ff_vp9_fill_mv(VP9TileData *td, VP56mv *mv, int mode, int sb); + +void ff_vp9_adapt_probs(VP9Context *s); + +void ff_vp9_decode_block(VP9TileData *td, int row, int col, + VP9Filter *lflvl, ptrdiff_t yoff, ptrdiff_t uvoff, + enum BlockLevel bl, enum BlockPartition bp); + +void ff_vp9_loopfilter_sb(AVCodecContext *avctx, VP9Filter *lflvl, + int row, int col, ptrdiff_t yoff, ptrdiff_t uvoff); + +void ff_vp9_intra_recon_8bpp(VP9TileData *td, + ptrdiff_t y_off, ptrdiff_t uv_off); +void ff_vp9_intra_recon_16bpp(VP9TileData *td, + ptrdiff_t y_off, ptrdiff_t uv_off); +void ff_vp9_inter_recon_8bpp(VP9TileData *td); +void ff_vp9_inter_recon_16bpp(VP9TileData *td); + +#endif /* AVCODEC_VP9DEC_H */ diff --git a/media/ffvpx/libavcodec/vp9dsp.c b/media/ffvpx/libavcodec/vp9dsp.c index 54e77e267b4e..f6d73f73cd4d 100644 --- a/media/ffvpx/libavcodec/vp9dsp.c +++ b/media/ffvpx/libavcodec/vp9dsp.c @@ -25,6 +25,62 @@ #include "libavutil/common.h" #include "vp9dsp.h" +const DECLARE_ALIGNED(16, int16_t, ff_vp9_subpel_filters)[3][16][8] = { + [FILTER_8TAP_REGULAR] = { + { 0, 0, 0, 128, 0, 0, 0, 0 }, + { 0, 1, -5, 126, 8, -3, 1, 0 }, + { -1, 3, -10, 122, 18, -6, 2, 0 }, + { -1, 4, -13, 118, 27, -9, 3, -1 }, + { -1, 4, -16, 112, 37, -11, 4, -1 }, + { -1, 5, -18, 105, 48, -14, 4, -1 }, + { -1, 5, -19, 97, 58, -16, 5, -1 }, + { -1, 6, -19, 88, 68, -18, 5, -1 }, + { -1, 6, -19, 78, 78, -19, 6, -1 }, + { -1, 5, -18, 68, 88, -19, 6, -1 }, + { -1, 5, -16, 58, 97, -19, 5, -1 }, + { -1, 4, -14, 48, 105, -18, 5, -1 }, + { -1, 4, -11, 37, 112, -16, 4, -1 }, + { -1, 3, -9, 27, 118, -13, 4, -1 }, + { 0, 2, -6, 18, 122, -10, 3, -1 }, + { 0, 1, -3, 8, 126, -5, 1, 0 }, + }, [FILTER_8TAP_SHARP] = { + { 0, 0, 0, 128, 0, 0, 0, 0 }, + { -1, 3, -7, 127, 8, -3, 1, 0 }, + { -2, 5, -13, 125, 17, -6, 3, -1 }, + { -3, 7, -17, 121, 27, -10, 5, -2 }, + { -4, 9, -20, 115, 37, -13, 6, -2 }, + { -4, 10, -23, 108, 48, -16, 8, -3 }, + { -4, 10, -24, 100, 59, -19, 9, -3 }, + { -4, 11, -24, 90, 70, -21, 10, -4 }, + { -4, 11, -23, 80, 80, -23, 11, -4 }, + { -4, 10, -21, 70, 90, -24, 11, -4 }, + { -3, 9, -19, 59, 100, -24, 10, -4 }, + { -3, 8, -16, 48, 108, -23, 10, -4 }, + { -2, 6, -13, 37, 115, -20, 9, -4 }, + { -2, 5, -10, 27, 121, -17, 7, -3 }, + { -1, 3, -6, 17, 125, -13, 5, -2 }, + { 0, 1, -3, 8, 127, -7, 3, -1 }, + }, [FILTER_8TAP_SMOOTH] = { + { 0, 0, 0, 128, 0, 0, 0, 0 }, + { -3, -1, 32, 64, 38, 1, -3, 0 }, + { -2, -2, 29, 63, 41, 2, -3, 0 }, + { -2, -2, 26, 63, 43, 4, -4, 0 }, + { -2, -3, 24, 62, 46, 5, -4, 0 }, + { -2, -3, 21, 60, 49, 7, -4, 0 }, + { -1, -4, 18, 59, 51, 9, -4, 0 }, + { -1, -4, 16, 57, 53, 12, -4, -1 }, + { -1, -4, 14, 55, 55, 14, -4, -1 }, + { -1, -4, 12, 53, 57, 16, -4, -1 }, + { 0, -4, 9, 51, 59, 18, -4, -1 }, + { 0, -4, 7, 49, 60, 21, -3, -2 }, + { 0, -4, 5, 46, 62, 24, -3, -2 }, + { 0, -4, 4, 43, 63, 26, -2, -2 }, + { 0, -3, 2, 41, 63, 29, -2, -2 }, + { 0, -3, 1, 38, 64, 32, -1, -3 }, + } +}; + + av_cold void ff_vp9dsp_init(VP9DSPContext *dsp, int bpp, int bitexact) { if (bpp == 8) { @@ -36,6 +92,8 @@ av_cold void ff_vp9dsp_init(VP9DSPContext *dsp, int bpp, int bitexact) ff_vp9dsp_init_12(dsp); } + if (ARCH_AARCH64) ff_vp9dsp_init_aarch64(dsp, bpp); + if (ARCH_ARM) ff_vp9dsp_init_arm(dsp, bpp); if (ARCH_X86) ff_vp9dsp_init_x86(dsp, bpp, bitexact); if (ARCH_MIPS) ff_vp9dsp_init_mips(dsp, bpp); } diff --git a/media/ffvpx/libavcodec/vp9dsp.h b/media/ffvpx/libavcodec/vp9dsp.h index 733f5bfc4dac..e2256316a8f5 100644 --- a/media/ffvpx/libavcodec/vp9dsp.h +++ b/media/ffvpx/libavcodec/vp9dsp.h @@ -27,7 +27,7 @@ #include #include -#include "vp9.h" +#include "libavcodec/vp9.h" typedef void (*vp9_mc_func)(uint8_t *dst, ptrdiff_t dst_stride, const uint8_t *ref, ptrdiff_t ref_stride, @@ -111,21 +111,25 @@ typedef struct VP9DSPContext { * * dst/stride are aligned by hsize */ - vp9_mc_func mc[5][4][2][2][2]; + vp9_mc_func mc[5][N_FILTERS][2][2][2]; /* * for scalable MC, first 3 dimensions identical to above, the other two * don't exist since it changes per stepsize. */ - vp9_scaled_mc_func smc[5][4][2]; + vp9_scaled_mc_func smc[5][N_FILTERS][2]; } VP9DSPContext; +extern const int16_t ff_vp9_subpel_filters[3][16][8]; + void ff_vp9dsp_init(VP9DSPContext *dsp, int bpp, int bitexact); void ff_vp9dsp_init_8(VP9DSPContext *dsp); void ff_vp9dsp_init_10(VP9DSPContext *dsp); void ff_vp9dsp_init_12(VP9DSPContext *dsp); +void ff_vp9dsp_init_aarch64(VP9DSPContext *dsp, int bpp); +void ff_vp9dsp_init_arm(VP9DSPContext *dsp, int bpp); void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact); void ff_vp9dsp_init_mips(VP9DSPContext *dsp, int bpp); diff --git a/media/ffvpx/libavcodec/vp9dsp_template.c b/media/ffvpx/libavcodec/vp9dsp_template.c index 4d810fec3a9a..bb54561a60b3 100644 --- a/media/ffvpx/libavcodec/vp9dsp_template.c +++ b/media/ffvpx/libavcodec/vp9dsp_template.c @@ -1991,61 +1991,6 @@ copy_avg_fn(4) #endif /* BIT_DEPTH != 12 */ -static const int16_t vp9_subpel_filters[3][16][8] = { - [FILTER_8TAP_REGULAR] = { - { 0, 0, 0, 128, 0, 0, 0, 0 }, - { 0, 1, -5, 126, 8, -3, 1, 0 }, - { -1, 3, -10, 122, 18, -6, 2, 0 }, - { -1, 4, -13, 118, 27, -9, 3, -1 }, - { -1, 4, -16, 112, 37, -11, 4, -1 }, - { -1, 5, -18, 105, 48, -14, 4, -1 }, - { -1, 5, -19, 97, 58, -16, 5, -1 }, - { -1, 6, -19, 88, 68, -18, 5, -1 }, - { -1, 6, -19, 78, 78, -19, 6, -1 }, - { -1, 5, -18, 68, 88, -19, 6, -1 }, - { -1, 5, -16, 58, 97, -19, 5, -1 }, - { -1, 4, -14, 48, 105, -18, 5, -1 }, - { -1, 4, -11, 37, 112, -16, 4, -1 }, - { -1, 3, -9, 27, 118, -13, 4, -1 }, - { 0, 2, -6, 18, 122, -10, 3, -1 }, - { 0, 1, -3, 8, 126, -5, 1, 0 }, - }, [FILTER_8TAP_SHARP] = { - { 0, 0, 0, 128, 0, 0, 0, 0 }, - { -1, 3, -7, 127, 8, -3, 1, 0 }, - { -2, 5, -13, 125, 17, -6, 3, -1 }, - { -3, 7, -17, 121, 27, -10, 5, -2 }, - { -4, 9, -20, 115, 37, -13, 6, -2 }, - { -4, 10, -23, 108, 48, -16, 8, -3 }, - { -4, 10, -24, 100, 59, -19, 9, -3 }, - { -4, 11, -24, 90, 70, -21, 10, -4 }, - { -4, 11, -23, 80, 80, -23, 11, -4 }, - { -4, 10, -21, 70, 90, -24, 11, -4 }, - { -3, 9, -19, 59, 100, -24, 10, -4 }, - { -3, 8, -16, 48, 108, -23, 10, -4 }, - { -2, 6, -13, 37, 115, -20, 9, -4 }, - { -2, 5, -10, 27, 121, -17, 7, -3 }, - { -1, 3, -6, 17, 125, -13, 5, -2 }, - { 0, 1, -3, 8, 127, -7, 3, -1 }, - }, [FILTER_8TAP_SMOOTH] = { - { 0, 0, 0, 128, 0, 0, 0, 0 }, - { -3, -1, 32, 64, 38, 1, -3, 0 }, - { -2, -2, 29, 63, 41, 2, -3, 0 }, - { -2, -2, 26, 63, 43, 4, -4, 0 }, - { -2, -3, 24, 62, 46, 5, -4, 0 }, - { -2, -3, 21, 60, 49, 7, -4, 0 }, - { -1, -4, 18, 59, 51, 9, -4, 0 }, - { -1, -4, 16, 57, 53, 12, -4, -1 }, - { -1, -4, 14, 55, 55, 14, -4, -1 }, - { -1, -4, 12, 53, 57, 16, -4, -1 }, - { 0, -4, 9, 51, 59, 18, -4, -1 }, - { 0, -4, 7, 49, 60, 21, -3, -2 }, - { 0, -4, 5, 46, 62, 24, -3, -2 }, - { 0, -4, 4, 43, 63, 26, -2, -2 }, - { 0, -3, 2, 41, 63, 29, -2, -2 }, - { 0, -3, 1, 38, 64, 32, -1, -3 }, - } -}; - #define FILTER_8TAP(src, x, F, stride) \ av_clip_pixel((F[0] * src[x + -3 * stride] + \ F[1] * src[x + -2 * stride] + \ @@ -2155,7 +2100,7 @@ static void avg##_8tap_##type##_##sz##dir##_c(uint8_t *dst, ptrdiff_t dst_stride int h, int mx, int my) \ { \ avg##_8tap_1d_##dir##_c(dst, dst_stride, src, src_stride, sz, h, \ - vp9_subpel_filters[type_idx][dir_m]); \ + ff_vp9_subpel_filters[type_idx][dir_m]); \ } #define filter_fn_2d(sz, type, type_idx, avg) \ @@ -2164,8 +2109,8 @@ static void avg##_8tap_##type##_##sz##hv_c(uint8_t *dst, ptrdiff_t dst_stride, \ int h, int mx, int my) \ { \ avg##_8tap_2d_hv_c(dst, dst_stride, src, src_stride, sz, h, \ - vp9_subpel_filters[type_idx][mx], \ - vp9_subpel_filters[type_idx][my]); \ + ff_vp9_subpel_filters[type_idx][mx], \ + ff_vp9_subpel_filters[type_idx][my]); \ } #if BIT_DEPTH != 12 @@ -2454,7 +2399,7 @@ static void avg##_scaled_##type##_##sz##_c(uint8_t *dst, ptrdiff_t dst_stride, \ int h, int mx, int my, int dx, int dy) \ { \ avg##_scaled_8tap_c(dst, dst_stride, src, src_stride, sz, h, mx, my, dx, dy, \ - vp9_subpel_filters[type_idx]); \ + ff_vp9_subpel_filters[type_idx]); \ } #if BIT_DEPTH != 12 diff --git a/media/ffvpx/libavcodec/vp9lpf.c b/media/ffvpx/libavcodec/vp9lpf.c new file mode 100644 index 000000000000..414cede8520e --- /dev/null +++ b/media/ffvpx/libavcodec/vp9lpf.c @@ -0,0 +1,202 @@ +/* + * VP9 compatible video decoder + * + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "vp9dec.h" + +static av_always_inline void filter_plane_cols(VP9Context *s, int col, int ss_h, int ss_v, + uint8_t *lvl, uint8_t (*mask)[4], + uint8_t *dst, ptrdiff_t ls) +{ + int y, x, bytesperpixel = s->bytesperpixel; + + // filter edges between columns (e.g. block1 | block2) + for (y = 0; y < 8; y += 2 << ss_v, dst += 16 * ls, lvl += 16 << ss_v) { + uint8_t *ptr = dst, *l = lvl, *hmask1 = mask[y], *hmask2 = mask[y + 1 + ss_v]; + unsigned hm1 = hmask1[0] | hmask1[1] | hmask1[2], hm13 = hmask1[3]; + unsigned hm2 = hmask2[1] | hmask2[2], hm23 = hmask2[3]; + unsigned hm = hm1 | hm2 | hm13 | hm23; + + for (x = 1; hm & ~(x - 1); x <<= 1, ptr += 8 * bytesperpixel >> ss_h) { + if (col || x > 1) { + if (hm1 & x) { + int L = *l, H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + if (hmask1[0] & x) { + if (hmask2[0] & x) { + av_assert2(l[8 << ss_v] == L); + s->dsp.loop_filter_16[0](ptr, ls, E, I, H); + } else { + s->dsp.loop_filter_8[2][0](ptr, ls, E, I, H); + } + } else if (hm2 & x) { + L = l[8 << ss_v]; + H |= (L >> 4) << 8; + E |= s->filter_lut.mblim_lut[L] << 8; + I |= s->filter_lut.lim_lut[L] << 8; + s->dsp.loop_filter_mix2[!!(hmask1[1] & x)] + [!!(hmask2[1] & x)] + [0](ptr, ls, E, I, H); + } else { + s->dsp.loop_filter_8[!!(hmask1[1] & x)] + [0](ptr, ls, E, I, H); + } + } else if (hm2 & x) { + int L = l[8 << ss_v], H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + s->dsp.loop_filter_8[!!(hmask2[1] & x)] + [0](ptr + 8 * ls, ls, E, I, H); + } + } + if (ss_h) { + if (x & 0xAA) + l += 2; + } else { + if (hm13 & x) { + int L = *l, H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + if (hm23 & x) { + L = l[8 << ss_v]; + H |= (L >> 4) << 8; + E |= s->filter_lut.mblim_lut[L] << 8; + I |= s->filter_lut.lim_lut[L] << 8; + s->dsp.loop_filter_mix2[0][0][0](ptr + 4 * bytesperpixel, ls, E, I, H); + } else { + s->dsp.loop_filter_8[0][0](ptr + 4 * bytesperpixel, ls, E, I, H); + } + } else if (hm23 & x) { + int L = l[8 << ss_v], H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + s->dsp.loop_filter_8[0][0](ptr + 8 * ls + 4 * bytesperpixel, ls, E, I, H); + } + l++; + } + } + } +} + +static av_always_inline void filter_plane_rows(VP9Context *s, int row, int ss_h, int ss_v, + uint8_t *lvl, uint8_t (*mask)[4], + uint8_t *dst, ptrdiff_t ls) +{ + int y, x, bytesperpixel = s->bytesperpixel; + + // block1 + // filter edges between rows (e.g. ------) + // block2 + for (y = 0; y < 8; y++, dst += 8 * ls >> ss_v) { + uint8_t *ptr = dst, *l = lvl, *vmask = mask[y]; + unsigned vm = vmask[0] | vmask[1] | vmask[2], vm3 = vmask[3]; + + for (x = 1; vm & ~(x - 1); x <<= (2 << ss_h), ptr += 16 * bytesperpixel, l += 2 << ss_h) { + if (row || y) { + if (vm & x) { + int L = *l, H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + if (vmask[0] & x) { + if (vmask[0] & (x << (1 + ss_h))) { + av_assert2(l[1 + ss_h] == L); + s->dsp.loop_filter_16[1](ptr, ls, E, I, H); + } else { + s->dsp.loop_filter_8[2][1](ptr, ls, E, I, H); + } + } else if (vm & (x << (1 + ss_h))) { + L = l[1 + ss_h]; + H |= (L >> 4) << 8; + E |= s->filter_lut.mblim_lut[L] << 8; + I |= s->filter_lut.lim_lut[L] << 8; + s->dsp.loop_filter_mix2[!!(vmask[1] & x)] + [!!(vmask[1] & (x << (1 + ss_h)))] + [1](ptr, ls, E, I, H); + } else { + s->dsp.loop_filter_8[!!(vmask[1] & x)] + [1](ptr, ls, E, I, H); + } + } else if (vm & (x << (1 + ss_h))) { + int L = l[1 + ss_h], H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + s->dsp.loop_filter_8[!!(vmask[1] & (x << (1 + ss_h)))] + [1](ptr + 8 * bytesperpixel, ls, E, I, H); + } + } + if (!ss_v) { + if (vm3 & x) { + int L = *l, H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + if (vm3 & (x << (1 + ss_h))) { + L = l[1 + ss_h]; + H |= (L >> 4) << 8; + E |= s->filter_lut.mblim_lut[L] << 8; + I |= s->filter_lut.lim_lut[L] << 8; + s->dsp.loop_filter_mix2[0][0][1](ptr + ls * 4, ls, E, I, H); + } else { + s->dsp.loop_filter_8[0][1](ptr + ls * 4, ls, E, I, H); + } + } else if (vm3 & (x << (1 + ss_h))) { + int L = l[1 + ss_h], H = L >> 4; + int E = s->filter_lut.mblim_lut[L], I = s->filter_lut.lim_lut[L]; + + s->dsp.loop_filter_8[0][1](ptr + ls * 4 + 8 * bytesperpixel, ls, E, I, H); + } + } + } + if (ss_v) { + if (y & 1) + lvl += 16; + } else { + lvl += 8; + } + } +} + +void ff_vp9_loopfilter_sb(AVCodecContext *avctx, VP9Filter *lflvl, + int row, int col, ptrdiff_t yoff, ptrdiff_t uvoff) +{ + VP9Context *s = avctx->priv_data; + AVFrame *f = s->s.frames[CUR_FRAME].tf.f; + uint8_t *dst = f->data[0] + yoff; + ptrdiff_t ls_y = f->linesize[0], ls_uv = f->linesize[1]; + uint8_t (*uv_masks)[8][4] = lflvl->mask[s->ss_h | s->ss_v]; + int p; + + /* FIXME: In how far can we interleave the v/h loopfilter calls? E.g. + * if you think of them as acting on a 8x8 block max, we can interleave + * each v/h within the single x loop, but that only works if we work on + * 8 pixel blocks, and we won't always do that (we want at least 16px + * to use SSE2 optimizations, perhaps 32 for AVX2) */ + + filter_plane_cols(s, col, 0, 0, lflvl->level, lflvl->mask[0][0], dst, ls_y); + filter_plane_rows(s, row, 0, 0, lflvl->level, lflvl->mask[0][1], dst, ls_y); + + for (p = 0; p < 2; p++) { + dst = f->data[1 + p] + uvoff; + filter_plane_cols(s, col, s->ss_h, s->ss_v, lflvl->level, uv_masks[0], dst, ls_uv); + filter_plane_rows(s, row, s->ss_h, s->ss_v, lflvl->level, uv_masks[1], dst, ls_uv); + } +} diff --git a/media/ffvpx/libavcodec/vp9mvs.c b/media/ffvpx/libavcodec/vp9mvs.c new file mode 100644 index 000000000000..88db1c341c16 --- /dev/null +++ b/media/ffvpx/libavcodec/vp9mvs.c @@ -0,0 +1,364 @@ +/* + * VP9 compatible video decoder + * + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "internal.h" +#include "vp56.h" +#include "vp9.h" +#include "vp9data.h" +#include "vp9dec.h" + +static av_always_inline void clamp_mv(VP56mv *dst, const VP56mv *src, + VP9TileData *td) +{ + dst->x = av_clip(src->x, td->min_mv.x, td->max_mv.x); + dst->y = av_clip(src->y, td->min_mv.y, td->max_mv.y); +} + +static void find_ref_mvs(VP9TileData *td, + VP56mv *pmv, int ref, int z, int idx, int sb) +{ + static const int8_t mv_ref_blk_off[N_BS_SIZES][8][2] = { + [BS_64x64] = { { 3, -1 }, { -1, 3 }, { 4, -1 }, { -1, 4 }, + { -1, -1 }, { 0, -1 }, { -1, 0 }, { 6, -1 } }, + [BS_64x32] = { { 0, -1 }, { -1, 0 }, { 4, -1 }, { -1, 2 }, + { -1, -1 }, { 0, -3 }, { -3, 0 }, { 2, -1 } }, + [BS_32x64] = { { -1, 0 }, { 0, -1 }, { -1, 4 }, { 2, -1 }, + { -1, -1 }, { -3, 0 }, { 0, -3 }, { -1, 2 } }, + [BS_32x32] = { { 1, -1 }, { -1, 1 }, { 2, -1 }, { -1, 2 }, + { -1, -1 }, { 0, -3 }, { -3, 0 }, { -3, -3 } }, + [BS_32x16] = { { 0, -1 }, { -1, 0 }, { 2, -1 }, { -1, -1 }, + { -1, 1 }, { 0, -3 }, { -3, 0 }, { -3, -3 } }, + [BS_16x32] = { { -1, 0 }, { 0, -1 }, { -1, 2 }, { -1, -1 }, + { 1, -1 }, { -3, 0 }, { 0, -3 }, { -3, -3 } }, + [BS_16x16] = { { 0, -1 }, { -1, 0 }, { 1, -1 }, { -1, 1 }, + { -1, -1 }, { 0, -3 }, { -3, 0 }, { -3, -3 } }, + [BS_16x8] = { { 0, -1 }, { -1, 0 }, { 1, -1 }, { -1, -1 }, + { 0, -2 }, { -2, 0 }, { -2, -1 }, { -1, -2 } }, + [BS_8x16] = { { -1, 0 }, { 0, -1 }, { -1, 1 }, { -1, -1 }, + { -2, 0 }, { 0, -2 }, { -1, -2 }, { -2, -1 } }, + [BS_8x8] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, + { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } }, + [BS_8x4] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, + { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } }, + [BS_4x8] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, + { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } }, + [BS_4x4] = { { 0, -1 }, { -1, 0 }, { -1, -1 }, { 0, -2 }, + { -2, 0 }, { -1, -2 }, { -2, -1 }, { -2, -2 } }, + }; + VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col, row7 = td->row7; + const int8_t (*p)[2] = mv_ref_blk_off[b->bs]; +#define INVALID_MV 0x80008000U + uint32_t mem = INVALID_MV, mem_sub8x8 = INVALID_MV; + int i; + +#define RETURN_DIRECT_MV(mv) \ + do { \ + uint32_t m = AV_RN32A(&mv); \ + if (!idx) { \ + AV_WN32A(pmv, m); \ + return; \ + } else if (mem == INVALID_MV) { \ + mem = m; \ + } else if (m != mem) { \ + AV_WN32A(pmv, m); \ + return; \ + } \ + } while (0) + + if (sb >= 0) { + if (sb == 2 || sb == 1) { + RETURN_DIRECT_MV(b->mv[0][z]); + } else if (sb == 3) { + RETURN_DIRECT_MV(b->mv[2][z]); + RETURN_DIRECT_MV(b->mv[1][z]); + RETURN_DIRECT_MV(b->mv[0][z]); + } + +#define RETURN_MV(mv) \ + do { \ + if (sb > 0) { \ + VP56mv tmp; \ + uint32_t m; \ + av_assert2(idx == 1); \ + av_assert2(mem != INVALID_MV); \ + if (mem_sub8x8 == INVALID_MV) { \ + clamp_mv(&tmp, &mv, td); \ + m = AV_RN32A(&tmp); \ + if (m != mem) { \ + AV_WN32A(pmv, m); \ + return; \ + } \ + mem_sub8x8 = AV_RN32A(&mv); \ + } else if (mem_sub8x8 != AV_RN32A(&mv)) { \ + clamp_mv(&tmp, &mv, td); \ + m = AV_RN32A(&tmp); \ + if (m != mem) { \ + AV_WN32A(pmv, m); \ + } else { \ + /* BUG I'm pretty sure this isn't the intention */ \ + AV_WN32A(pmv, 0); \ + } \ + return; \ + } \ + } else { \ + uint32_t m = AV_RN32A(&mv); \ + if (!idx) { \ + clamp_mv(pmv, &mv, td); \ + return; \ + } else if (mem == INVALID_MV) { \ + mem = m; \ + } else if (m != mem) { \ + clamp_mv(pmv, &mv, td); \ + return; \ + } \ + } \ + } while (0) + + if (row > 0) { + VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[(row - 1) * s->sb_cols * 8 + col]; + if (mv->ref[0] == ref) + RETURN_MV(s->above_mv_ctx[2 * col + (sb & 1)][0]); + else if (mv->ref[1] == ref) + RETURN_MV(s->above_mv_ctx[2 * col + (sb & 1)][1]); + } + if (col > td->tile_col_start) { + VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[row * s->sb_cols * 8 + col - 1]; + if (mv->ref[0] == ref) + RETURN_MV(td->left_mv_ctx[2 * row7 + (sb >> 1)][0]); + else if (mv->ref[1] == ref) + RETURN_MV(td->left_mv_ctx[2 * row7 + (sb >> 1)][1]); + } + i = 2; + } else { + i = 0; + } + + // previously coded MVs in this neighborhood, using same reference frame + for (; i < 8; i++) { + int c = p[i][0] + col, r = p[i][1] + row; + + if (c >= td->tile_col_start && c < s->cols && + r >= 0 && r < s->rows) { + VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; + + if (mv->ref[0] == ref) + RETURN_MV(mv->mv[0]); + else if (mv->ref[1] == ref) + RETURN_MV(mv->mv[1]); + } + } + + // MV at this position in previous frame, using same reference frame + if (s->s.h.use_last_frame_mvs) { + VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; + + if (!s->s.frames[REF_FRAME_MVPAIR].uses_2pass) + ff_thread_await_progress(&s->s.frames[REF_FRAME_MVPAIR].tf, row >> 3, 0); + if (mv->ref[0] == ref) + RETURN_MV(mv->mv[0]); + else if (mv->ref[1] == ref) + RETURN_MV(mv->mv[1]); + } + +#define RETURN_SCALE_MV(mv, scale) \ + do { \ + if (scale) { \ + VP56mv mv_temp = { -mv.x, -mv.y }; \ + RETURN_MV(mv_temp); \ + } else { \ + RETURN_MV(mv); \ + } \ + } while (0) + + // previously coded MVs in this neighborhood, using different reference frame + for (i = 0; i < 8; i++) { + int c = p[i][0] + col, r = p[i][1] + row; + + if (c >= td->tile_col_start && c < s->cols && r >= 0 && r < s->rows) { + VP9mvrefPair *mv = &s->s.frames[CUR_FRAME].mv[r * s->sb_cols * 8 + c]; + + if (mv->ref[0] != ref && mv->ref[0] >= 0) + RETURN_SCALE_MV(mv->mv[0], + s->s.h.signbias[mv->ref[0]] != s->s.h.signbias[ref]); + if (mv->ref[1] != ref && mv->ref[1] >= 0 && + // BUG - libvpx has this condition regardless of whether + // we used the first ref MV and pre-scaling + AV_RN32A(&mv->mv[0]) != AV_RN32A(&mv->mv[1])) { + RETURN_SCALE_MV(mv->mv[1], s->s.h.signbias[mv->ref[1]] != s->s.h.signbias[ref]); + } + } + } + + // MV at this position in previous frame, using different reference frame + if (s->s.h.use_last_frame_mvs) { + VP9mvrefPair *mv = &s->s.frames[REF_FRAME_MVPAIR].mv[row * s->sb_cols * 8 + col]; + + // no need to await_progress, because we already did that above + if (mv->ref[0] != ref && mv->ref[0] >= 0) + RETURN_SCALE_MV(mv->mv[0], s->s.h.signbias[mv->ref[0]] != s->s.h.signbias[ref]); + if (mv->ref[1] != ref && mv->ref[1] >= 0 && + // BUG - libvpx has this condition regardless of whether + // we used the first ref MV and pre-scaling + AV_RN32A(&mv->mv[0]) != AV_RN32A(&mv->mv[1])) { + RETURN_SCALE_MV(mv->mv[1], s->s.h.signbias[mv->ref[1]] != s->s.h.signbias[ref]); + } + } + + AV_ZERO32(pmv); + clamp_mv(pmv, pmv, td); +#undef INVALID_MV +#undef RETURN_MV +#undef RETURN_SCALE_MV +} + +static av_always_inline int read_mv_component(VP9TileData *td, int idx, int hp) +{ + VP9Context *s = td->s; + int bit, sign = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].sign); + int n, c = vp8_rac_get_tree(td->c, ff_vp9_mv_class_tree, + s->prob.p.mv_comp[idx].classes); + + td->counts.mv_comp[idx].sign[sign]++; + td->counts.mv_comp[idx].classes[c]++; + if (c) { + int m; + + for (n = 0, m = 0; m < c; m++) { + bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].bits[m]); + n |= bit << m; + td->counts.mv_comp[idx].bits[m][bit]++; + } + n <<= 3; + bit = vp8_rac_get_tree(td->c, ff_vp9_mv_fp_tree, + s->prob.p.mv_comp[idx].fp); + n |= bit << 1; + td->counts.mv_comp[idx].fp[bit]++; + if (hp) { + bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].hp); + td->counts.mv_comp[idx].hp[bit]++; + n |= bit; + } else { + n |= 1; + // bug in libvpx - we count for bw entropy purposes even if the + // bit wasn't coded + td->counts.mv_comp[idx].hp[1]++; + } + n += 8 << c; + } else { + n = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0); + td->counts.mv_comp[idx].class0[n]++; + bit = vp8_rac_get_tree(td->c, ff_vp9_mv_fp_tree, + s->prob.p.mv_comp[idx].class0_fp[n]); + td->counts.mv_comp[idx].class0_fp[n][bit]++; + n = (n << 3) | (bit << 1); + if (hp) { + bit = vp56_rac_get_prob(td->c, s->prob.p.mv_comp[idx].class0_hp); + td->counts.mv_comp[idx].class0_hp[bit]++; + n |= bit; + } else { + n |= 1; + // bug in libvpx - we count for bw entropy purposes even if the + // bit wasn't coded + td->counts.mv_comp[idx].class0_hp[1]++; + } + } + + return sign ? -(n + 1) : (n + 1); +} + +void ff_vp9_fill_mv(VP9TileData *td, VP56mv *mv, int mode, int sb) +{ + VP9Context *s = td->s; + VP9Block *b = td->b; + + if (mode == ZEROMV) { + AV_ZERO64(mv); + } else { + int hp; + + // FIXME cache this value and reuse for other subblocks + find_ref_mvs(td, &mv[0], b->ref[0], 0, mode == NEARMV, + mode == NEWMV ? -1 : sb); + // FIXME maybe move this code into find_ref_mvs() + if ((mode == NEWMV || sb == -1) && + !(hp = s->s.h.highprecisionmvs && + abs(mv[0].x) < 64 && abs(mv[0].y) < 64)) { + if (mv[0].y & 1) { + if (mv[0].y < 0) + mv[0].y++; + else + mv[0].y--; + } + if (mv[0].x & 1) { + if (mv[0].x < 0) + mv[0].x++; + else + mv[0].x--; + } + } + if (mode == NEWMV) { + enum MVJoint j = vp8_rac_get_tree(td->c, ff_vp9_mv_joint_tree, + s->prob.p.mv_joint); + + td->counts.mv_joint[j]++; + if (j >= MV_JOINT_V) + mv[0].y += read_mv_component(td, 0, hp); + if (j & 1) + mv[0].x += read_mv_component(td, 1, hp); + } + + if (b->comp) { + // FIXME cache this value and reuse for other subblocks + find_ref_mvs(td, &mv[1], b->ref[1], 1, mode == NEARMV, + mode == NEWMV ? -1 : sb); + if ((mode == NEWMV || sb == -1) && + !(hp = s->s.h.highprecisionmvs && + abs(mv[1].x) < 64 && abs(mv[1].y) < 64)) { + if (mv[1].y & 1) { + if (mv[1].y < 0) + mv[1].y++; + else + mv[1].y--; + } + if (mv[1].x & 1) { + if (mv[1].x < 0) + mv[1].x++; + else + mv[1].x--; + } + } + if (mode == NEWMV) { + enum MVJoint j = vp8_rac_get_tree(td->c, ff_vp9_mv_joint_tree, + s->prob.p.mv_joint); + + td->counts.mv_joint[j]++; + if (j >= MV_JOINT_V) + mv[1].y += read_mv_component(td, 0, hp); + if (j & 1) + mv[1].x += read_mv_component(td, 1, hp); + } + } + } +} diff --git a/media/ffvpx/libavcodec/vp9prob.c b/media/ffvpx/libavcodec/vp9prob.c new file mode 100644 index 000000000000..fb295b482d0b --- /dev/null +++ b/media/ffvpx/libavcodec/vp9prob.c @@ -0,0 +1,274 @@ +/* + * VP9 compatible video decoder + * + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "vp56.h" +#include "vp9.h" +#include "vp9data.h" +#include "vp9dec.h" + +static av_always_inline void adapt_prob(uint8_t *p, unsigned ct0, unsigned ct1, + int max_count, int update_factor) +{ + unsigned ct = ct0 + ct1, p2, p1; + + if (!ct) + return; + + update_factor = FASTDIV(update_factor * FFMIN(ct, max_count), max_count); + p1 = *p; + p2 = ((((int64_t) ct0) << 8) + (ct >> 1)) / ct; + p2 = av_clip(p2, 1, 255); + + // (p1 * (256 - update_factor) + p2 * update_factor + 128) >> 8 + *p = p1 + (((p2 - p1) * update_factor + 128) >> 8); +} + +void ff_vp9_adapt_probs(VP9Context *s) +{ + int i, j, k, l, m; + ProbContext *p = &s->prob_ctx[s->s.h.framectxid].p; + int uf = (s->s.h.keyframe || s->s.h.intraonly || !s->last_keyframe) ? 112 : 128; + + // coefficients + for (i = 0; i < 4; i++) + for (j = 0; j < 2; j++) + for (k = 0; k < 2; k++) + for (l = 0; l < 6; l++) + for (m = 0; m < 6; m++) { + uint8_t *pp = s->prob_ctx[s->s.h.framectxid].coef[i][j][k][l][m]; + unsigned *e = s->td[0].counts.eob[i][j][k][l][m]; + unsigned *c = s->td[0].counts.coef[i][j][k][l][m]; + + if (l == 0 && m >= 3) // dc only has 3 pt + break; + + adapt_prob(&pp[0], e[0], e[1], 24, uf); + adapt_prob(&pp[1], c[0], c[1] + c[2], 24, uf); + adapt_prob(&pp[2], c[1], c[2], 24, uf); + } + + if (s->s.h.keyframe || s->s.h.intraonly) { + memcpy(p->skip, s->prob.p.skip, sizeof(p->skip)); + memcpy(p->tx32p, s->prob.p.tx32p, sizeof(p->tx32p)); + memcpy(p->tx16p, s->prob.p.tx16p, sizeof(p->tx16p)); + memcpy(p->tx8p, s->prob.p.tx8p, sizeof(p->tx8p)); + return; + } + + // skip flag + for (i = 0; i < 3; i++) + adapt_prob(&p->skip[i], s->td[0].counts.skip[i][0], + s->td[0].counts.skip[i][1], 20, 128); + + // intra/inter flag + for (i = 0; i < 4; i++) + adapt_prob(&p->intra[i], s->td[0].counts.intra[i][0], + s->td[0].counts.intra[i][1], 20, 128); + + // comppred flag + if (s->s.h.comppredmode == PRED_SWITCHABLE) { + for (i = 0; i < 5; i++) + adapt_prob(&p->comp[i], s->td[0].counts.comp[i][0], + s->td[0].counts.comp[i][1], 20, 128); + } + + // reference frames + if (s->s.h.comppredmode != PRED_SINGLEREF) { + for (i = 0; i < 5; i++) + adapt_prob(&p->comp_ref[i], s->td[0].counts.comp_ref[i][0], + s->td[0].counts.comp_ref[i][1], 20, 128); + } + + if (s->s.h.comppredmode != PRED_COMPREF) { + for (i = 0; i < 5; i++) { + uint8_t *pp = p->single_ref[i]; + unsigned (*c)[2] = s->td[0].counts.single_ref[i]; + + adapt_prob(&pp[0], c[0][0], c[0][1], 20, 128); + adapt_prob(&pp[1], c[1][0], c[1][1], 20, 128); + } + } + + // block partitioning + for (i = 0; i < 4; i++) + for (j = 0; j < 4; j++) { + uint8_t *pp = p->partition[i][j]; + unsigned *c = s->td[0].counts.partition[i][j]; + + adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); + adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); + adapt_prob(&pp[2], c[2], c[3], 20, 128); + } + + // tx size + if (s->s.h.txfmmode == TX_SWITCHABLE) { + for (i = 0; i < 2; i++) { + unsigned *c16 = s->td[0].counts.tx16p[i], *c32 = s->td[0].counts.tx32p[i]; + + adapt_prob(&p->tx8p[i], s->td[0].counts.tx8p[i][0], + s->td[0].counts.tx8p[i][1], 20, 128); + adapt_prob(&p->tx16p[i][0], c16[0], c16[1] + c16[2], 20, 128); + adapt_prob(&p->tx16p[i][1], c16[1], c16[2], 20, 128); + adapt_prob(&p->tx32p[i][0], c32[0], c32[1] + c32[2] + c32[3], 20, 128); + adapt_prob(&p->tx32p[i][1], c32[1], c32[2] + c32[3], 20, 128); + adapt_prob(&p->tx32p[i][2], c32[2], c32[3], 20, 128); + } + } + + // interpolation filter + if (s->s.h.filtermode == FILTER_SWITCHABLE) { + for (i = 0; i < 4; i++) { + uint8_t *pp = p->filter[i]; + unsigned *c = s->td[0].counts.filter[i]; + + adapt_prob(&pp[0], c[0], c[1] + c[2], 20, 128); + adapt_prob(&pp[1], c[1], c[2], 20, 128); + } + } + + // inter modes + for (i = 0; i < 7; i++) { + uint8_t *pp = p->mv_mode[i]; + unsigned *c = s->td[0].counts.mv_mode[i]; + + adapt_prob(&pp[0], c[2], c[1] + c[0] + c[3], 20, 128); + adapt_prob(&pp[1], c[0], c[1] + c[3], 20, 128); + adapt_prob(&pp[2], c[1], c[3], 20, 128); + } + + // mv joints + { + uint8_t *pp = p->mv_joint; + unsigned *c = s->td[0].counts.mv_joint; + + adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); + adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); + adapt_prob(&pp[2], c[2], c[3], 20, 128); + } + + // mv components + for (i = 0; i < 2; i++) { + uint8_t *pp; + unsigned *c, (*c2)[2], sum; + + adapt_prob(&p->mv_comp[i].sign, s->td[0].counts.mv_comp[i].sign[0], + s->td[0].counts.mv_comp[i].sign[1], 20, 128); + + pp = p->mv_comp[i].classes; + c = s->td[0].counts.mv_comp[i].classes; + sum = c[1] + c[2] + c[3] + c[4] + c[5] + + c[6] + c[7] + c[8] + c[9] + c[10]; + adapt_prob(&pp[0], c[0], sum, 20, 128); + sum -= c[1]; + adapt_prob(&pp[1], c[1], sum, 20, 128); + sum -= c[2] + c[3]; + adapt_prob(&pp[2], c[2] + c[3], sum, 20, 128); + adapt_prob(&pp[3], c[2], c[3], 20, 128); + sum -= c[4] + c[5]; + adapt_prob(&pp[4], c[4] + c[5], sum, 20, 128); + adapt_prob(&pp[5], c[4], c[5], 20, 128); + sum -= c[6]; + adapt_prob(&pp[6], c[6], sum, 20, 128); + adapt_prob(&pp[7], c[7] + c[8], c[9] + c[10], 20, 128); + adapt_prob(&pp[8], c[7], c[8], 20, 128); + adapt_prob(&pp[9], c[9], c[10], 20, 128); + + adapt_prob(&p->mv_comp[i].class0, s->td[0].counts.mv_comp[i].class0[0], + s->td[0].counts.mv_comp[i].class0[1], 20, 128); + pp = p->mv_comp[i].bits; + c2 = s->td[0].counts.mv_comp[i].bits; + for (j = 0; j < 10; j++) + adapt_prob(&pp[j], c2[j][0], c2[j][1], 20, 128); + + for (j = 0; j < 2; j++) { + pp = p->mv_comp[i].class0_fp[j]; + c = s->td[0].counts.mv_comp[i].class0_fp[j]; + adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); + adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); + adapt_prob(&pp[2], c[2], c[3], 20, 128); + } + pp = p->mv_comp[i].fp; + c = s->td[0].counts.mv_comp[i].fp; + adapt_prob(&pp[0], c[0], c[1] + c[2] + c[3], 20, 128); + adapt_prob(&pp[1], c[1], c[2] + c[3], 20, 128); + adapt_prob(&pp[2], c[2], c[3], 20, 128); + + if (s->s.h.highprecisionmvs) { + adapt_prob(&p->mv_comp[i].class0_hp, + s->td[0].counts.mv_comp[i].class0_hp[0], + s->td[0].counts.mv_comp[i].class0_hp[1], 20, 128); + adapt_prob(&p->mv_comp[i].hp, s->td[0].counts.mv_comp[i].hp[0], + s->td[0].counts.mv_comp[i].hp[1], 20, 128); + } + } + + // y intra modes + for (i = 0; i < 4; i++) { + uint8_t *pp = p->y_mode[i]; + unsigned *c = s->td[0].counts.y_mode[i], sum, s2; + + sum = c[0] + c[1] + c[3] + c[4] + c[5] + c[6] + c[7] + c[8] + c[9]; + adapt_prob(&pp[0], c[DC_PRED], sum, 20, 128); + sum -= c[TM_VP8_PRED]; + adapt_prob(&pp[1], c[TM_VP8_PRED], sum, 20, 128); + sum -= c[VERT_PRED]; + adapt_prob(&pp[2], c[VERT_PRED], sum, 20, 128); + s2 = c[HOR_PRED] + c[DIAG_DOWN_RIGHT_PRED] + c[VERT_RIGHT_PRED]; + sum -= s2; + adapt_prob(&pp[3], s2, sum, 20, 128); + s2 -= c[HOR_PRED]; + adapt_prob(&pp[4], c[HOR_PRED], s2, 20, 128); + adapt_prob(&pp[5], c[DIAG_DOWN_RIGHT_PRED], c[VERT_RIGHT_PRED], + 20, 128); + sum -= c[DIAG_DOWN_LEFT_PRED]; + adapt_prob(&pp[6], c[DIAG_DOWN_LEFT_PRED], sum, 20, 128); + sum -= c[VERT_LEFT_PRED]; + adapt_prob(&pp[7], c[VERT_LEFT_PRED], sum, 20, 128); + adapt_prob(&pp[8], c[HOR_DOWN_PRED], c[HOR_UP_PRED], 20, 128); + } + + // uv intra modes + for (i = 0; i < 10; i++) { + uint8_t *pp = p->uv_mode[i]; + unsigned *c = s->td[0].counts.uv_mode[i], sum, s2; + + sum = c[0] + c[1] + c[3] + c[4] + c[5] + c[6] + c[7] + c[8] + c[9]; + adapt_prob(&pp[0], c[DC_PRED], sum, 20, 128); + sum -= c[TM_VP8_PRED]; + adapt_prob(&pp[1], c[TM_VP8_PRED], sum, 20, 128); + sum -= c[VERT_PRED]; + adapt_prob(&pp[2], c[VERT_PRED], sum, 20, 128); + s2 = c[HOR_PRED] + c[DIAG_DOWN_RIGHT_PRED] + c[VERT_RIGHT_PRED]; + sum -= s2; + adapt_prob(&pp[3], s2, sum, 20, 128); + s2 -= c[HOR_PRED]; + adapt_prob(&pp[4], c[HOR_PRED], s2, 20, 128); + adapt_prob(&pp[5], c[DIAG_DOWN_RIGHT_PRED], c[VERT_RIGHT_PRED], + 20, 128); + sum -= c[DIAG_DOWN_LEFT_PRED]; + adapt_prob(&pp[6], c[DIAG_DOWN_LEFT_PRED], sum, 20, 128); + sum -= c[VERT_LEFT_PRED]; + adapt_prob(&pp[7], c[VERT_LEFT_PRED], sum, 20, 128); + adapt_prob(&pp[8], c[HOR_DOWN_PRED], c[HOR_UP_PRED], 20, 128); + } +} diff --git a/media/ffvpx/libavcodec/vp9recon.c b/media/ffvpx/libavcodec/vp9recon.c new file mode 100644 index 000000000000..49bb04e1f40f --- /dev/null +++ b/media/ffvpx/libavcodec/vp9recon.c @@ -0,0 +1,644 @@ +/* + * VP9 compatible video decoder + * + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "libavutil/avassert.h" + +#include "avcodec.h" +#include "internal.h" +#include "videodsp.h" +#include "vp9data.h" +#include "vp9dec.h" + +static av_always_inline int check_intra_mode(VP9TileData *td, int mode, uint8_t **a, + uint8_t *dst_edge, ptrdiff_t stride_edge, + uint8_t *dst_inner, ptrdiff_t stride_inner, + uint8_t *l, int col, int x, int w, + int row, int y, enum TxfmMode tx, + int p, int ss_h, int ss_v, int bytesperpixel) +{ + VP9Context *s = td->s; + int have_top = row > 0 || y > 0; + int have_left = col > td->tile_col_start || x > 0; + int have_right = x < w - 1; + int bpp = s->s.h.bpp; + static const uint8_t mode_conv[10][2 /* have_left */][2 /* have_top */] = { + [VERT_PRED] = { { DC_127_PRED, VERT_PRED }, + { DC_127_PRED, VERT_PRED } }, + [HOR_PRED] = { { DC_129_PRED, DC_129_PRED }, + { HOR_PRED, HOR_PRED } }, + [DC_PRED] = { { DC_128_PRED, TOP_DC_PRED }, + { LEFT_DC_PRED, DC_PRED } }, + [DIAG_DOWN_LEFT_PRED] = { { DC_127_PRED, DIAG_DOWN_LEFT_PRED }, + { DC_127_PRED, DIAG_DOWN_LEFT_PRED } }, + [DIAG_DOWN_RIGHT_PRED] = { { DIAG_DOWN_RIGHT_PRED, DIAG_DOWN_RIGHT_PRED }, + { DIAG_DOWN_RIGHT_PRED, DIAG_DOWN_RIGHT_PRED } }, + [VERT_RIGHT_PRED] = { { VERT_RIGHT_PRED, VERT_RIGHT_PRED }, + { VERT_RIGHT_PRED, VERT_RIGHT_PRED } }, + [HOR_DOWN_PRED] = { { HOR_DOWN_PRED, HOR_DOWN_PRED }, + { HOR_DOWN_PRED, HOR_DOWN_PRED } }, + [VERT_LEFT_PRED] = { { DC_127_PRED, VERT_LEFT_PRED }, + { DC_127_PRED, VERT_LEFT_PRED } }, + [HOR_UP_PRED] = { { DC_129_PRED, DC_129_PRED }, + { HOR_UP_PRED, HOR_UP_PRED } }, + [TM_VP8_PRED] = { { DC_129_PRED, VERT_PRED }, + { HOR_PRED, TM_VP8_PRED } }, + }; + static const struct { + uint8_t needs_left:1; + uint8_t needs_top:1; + uint8_t needs_topleft:1; + uint8_t needs_topright:1; + uint8_t invert_left:1; + } edges[N_INTRA_PRED_MODES] = { + [VERT_PRED] = { .needs_top = 1 }, + [HOR_PRED] = { .needs_left = 1 }, + [DC_PRED] = { .needs_top = 1, .needs_left = 1 }, + [DIAG_DOWN_LEFT_PRED] = { .needs_top = 1, .needs_topright = 1 }, + [DIAG_DOWN_RIGHT_PRED] = { .needs_left = 1, .needs_top = 1, + .needs_topleft = 1 }, + [VERT_RIGHT_PRED] = { .needs_left = 1, .needs_top = 1, + .needs_topleft = 1 }, + [HOR_DOWN_PRED] = { .needs_left = 1, .needs_top = 1, + .needs_topleft = 1 }, + [VERT_LEFT_PRED] = { .needs_top = 1, .needs_topright = 1 }, + [HOR_UP_PRED] = { .needs_left = 1, .invert_left = 1 }, + [TM_VP8_PRED] = { .needs_left = 1, .needs_top = 1, + .needs_topleft = 1 }, + [LEFT_DC_PRED] = { .needs_left = 1 }, + [TOP_DC_PRED] = { .needs_top = 1 }, + [DC_128_PRED] = { 0 }, + [DC_127_PRED] = { 0 }, + [DC_129_PRED] = { 0 } + }; + + av_assert2(mode >= 0 && mode < 10); + mode = mode_conv[mode][have_left][have_top]; + if (edges[mode].needs_top) { + uint8_t *top, *topleft; + int n_px_need = 4 << tx, n_px_have = (((s->cols - col) << !ss_h) - x) * 4; + int n_px_need_tr = 0; + + if (tx == TX_4X4 && edges[mode].needs_topright && have_right) + n_px_need_tr = 4; + + // if top of sb64-row, use s->intra_pred_data[] instead of + // dst[-stride] for intra prediction (it contains pre- instead of + // post-loopfilter data) + if (have_top) { + top = !(row & 7) && !y ? + s->intra_pred_data[p] + (col * (8 >> ss_h) + x * 4) * bytesperpixel : + y == 0 ? &dst_edge[-stride_edge] : &dst_inner[-stride_inner]; + if (have_left) + topleft = !(row & 7) && !y ? + s->intra_pred_data[p] + (col * (8 >> ss_h) + x * 4) * bytesperpixel : + y == 0 || x == 0 ? &dst_edge[-stride_edge] : + &dst_inner[-stride_inner]; + } + + if (have_top && + (!edges[mode].needs_topleft || (have_left && top == topleft)) && + (tx != TX_4X4 || !edges[mode].needs_topright || have_right) && + n_px_need + n_px_need_tr <= n_px_have) { + *a = top; + } else { + if (have_top) { + if (n_px_need <= n_px_have) { + memcpy(*a, top, n_px_need * bytesperpixel); + } else { +#define memset_bpp(c, i1, v, i2, num) do { \ + if (bytesperpixel == 1) { \ + memset(&(c)[(i1)], (v)[(i2)], (num)); \ + } else { \ + int n, val = AV_RN16A(&(v)[(i2) * 2]); \ + for (n = 0; n < (num); n++) { \ + AV_WN16A(&(c)[((i1) + n) * 2], val); \ + } \ + } \ +} while (0) + memcpy(*a, top, n_px_have * bytesperpixel); + memset_bpp(*a, n_px_have, (*a), n_px_have - 1, n_px_need - n_px_have); + } + } else { +#define memset_val(c, val, num) do { \ + if (bytesperpixel == 1) { \ + memset((c), (val), (num)); \ + } else { \ + int n; \ + for (n = 0; n < (num); n++) { \ + AV_WN16A(&(c)[n * 2], (val)); \ + } \ + } \ +} while (0) + memset_val(*a, (128 << (bpp - 8)) - 1, n_px_need); + } + if (edges[mode].needs_topleft) { + if (have_left && have_top) { +#define assign_bpp(c, i1, v, i2) do { \ + if (bytesperpixel == 1) { \ + (c)[(i1)] = (v)[(i2)]; \ + } else { \ + AV_COPY16(&(c)[(i1) * 2], &(v)[(i2) * 2]); \ + } \ +} while (0) + assign_bpp(*a, -1, topleft, -1); + } else { +#define assign_val(c, i, v) do { \ + if (bytesperpixel == 1) { \ + (c)[(i)] = (v); \ + } else { \ + AV_WN16A(&(c)[(i) * 2], (v)); \ + } \ +} while (0) + assign_val((*a), -1, (128 << (bpp - 8)) + (have_top ? +1 : -1)); + } + } + if (tx == TX_4X4 && edges[mode].needs_topright) { + if (have_top && have_right && + n_px_need + n_px_need_tr <= n_px_have) { + memcpy(&(*a)[4 * bytesperpixel], &top[4 * bytesperpixel], 4 * bytesperpixel); + } else { + memset_bpp(*a, 4, *a, 3, 4); + } + } + } + } + if (edges[mode].needs_left) { + if (have_left) { + int n_px_need = 4 << tx, i, n_px_have = (((s->rows - row) << !ss_v) - y) * 4; + uint8_t *dst = x == 0 ? dst_edge : dst_inner; + ptrdiff_t stride = x == 0 ? stride_edge : stride_inner; + + if (edges[mode].invert_left) { + if (n_px_need <= n_px_have) { + for (i = 0; i < n_px_need; i++) + assign_bpp(l, i, &dst[i * stride], -1); + } else { + for (i = 0; i < n_px_have; i++) + assign_bpp(l, i, &dst[i * stride], -1); + memset_bpp(l, n_px_have, l, n_px_have - 1, n_px_need - n_px_have); + } + } else { + if (n_px_need <= n_px_have) { + for (i = 0; i < n_px_need; i++) + assign_bpp(l, n_px_need - 1 - i, &dst[i * stride], -1); + } else { + for (i = 0; i < n_px_have; i++) + assign_bpp(l, n_px_need - 1 - i, &dst[i * stride], -1); + memset_bpp(l, 0, l, n_px_need - n_px_have, n_px_need - n_px_have); + } + } + } else { + memset_val(l, (128 << (bpp - 8)) + 1, 4 << tx); + } + } + + return mode; +} + +static av_always_inline void intra_recon(VP9TileData *td, ptrdiff_t y_off, + ptrdiff_t uv_off, int bytesperpixel) +{ + VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; + int w4 = ff_vp9_bwh_tab[1][b->bs][0] << 1, step1d = 1 << b->tx, n; + int h4 = ff_vp9_bwh_tab[1][b->bs][1] << 1, x, y, step = 1 << (b->tx * 2); + int end_x = FFMIN(2 * (s->cols - col), w4); + int end_y = FFMIN(2 * (s->rows - row), h4); + int tx = 4 * s->s.h.lossless + b->tx, uvtx = b->uvtx + 4 * s->s.h.lossless; + int uvstep1d = 1 << b->uvtx, p; + uint8_t *dst = td->dst[0], *dst_r = s->s.frames[CUR_FRAME].tf.f->data[0] + y_off; + LOCAL_ALIGNED_32(uint8_t, a_buf, [96]); + LOCAL_ALIGNED_32(uint8_t, l, [64]); + + for (n = 0, y = 0; y < end_y; y += step1d) { + uint8_t *ptr = dst, *ptr_r = dst_r; + for (x = 0; x < end_x; x += step1d, ptr += 4 * step1d * bytesperpixel, + ptr_r += 4 * step1d * bytesperpixel, n += step) { + int mode = b->mode[b->bs > BS_8x8 && b->tx == TX_4X4 ? + y * 2 + x : 0]; + uint8_t *a = &a_buf[32]; + enum TxfmType txtp = ff_vp9_intra_txfm_type[mode]; + int eob = b->skip ? 0 : b->tx > TX_8X8 ? AV_RN16A(&td->eob[n]) : td->eob[n]; + + mode = check_intra_mode(td, mode, &a, ptr_r, + s->s.frames[CUR_FRAME].tf.f->linesize[0], + ptr, td->y_stride, l, + col, x, w4, row, y, b->tx, 0, 0, 0, bytesperpixel); + s->dsp.intra_pred[b->tx][mode](ptr, td->y_stride, l, a); + if (eob) + s->dsp.itxfm_add[tx][txtp](ptr, td->y_stride, + td->block + 16 * n * bytesperpixel, eob); + } + dst_r += 4 * step1d * s->s.frames[CUR_FRAME].tf.f->linesize[0]; + dst += 4 * step1d * td->y_stride; + } + + // U/V + w4 >>= s->ss_h; + end_x >>= s->ss_h; + end_y >>= s->ss_v; + step = 1 << (b->uvtx * 2); + for (p = 0; p < 2; p++) { + dst = td->dst[1 + p]; + dst_r = s->s.frames[CUR_FRAME].tf.f->data[1 + p] + uv_off; + for (n = 0, y = 0; y < end_y; y += uvstep1d) { + uint8_t *ptr = dst, *ptr_r = dst_r; + for (x = 0; x < end_x; x += uvstep1d, ptr += 4 * uvstep1d * bytesperpixel, + ptr_r += 4 * uvstep1d * bytesperpixel, n += step) { + int mode = b->uvmode; + uint8_t *a = &a_buf[32]; + int eob = b->skip ? 0 : b->uvtx > TX_8X8 ? AV_RN16A(&td->uveob[p][n]) : td->uveob[p][n]; + + mode = check_intra_mode(td, mode, &a, ptr_r, + s->s.frames[CUR_FRAME].tf.f->linesize[1], + ptr, td->uv_stride, l, col, x, w4, row, y, + b->uvtx, p + 1, s->ss_h, s->ss_v, bytesperpixel); + s->dsp.intra_pred[b->uvtx][mode](ptr, td->uv_stride, l, a); + if (eob) + s->dsp.itxfm_add[uvtx][DCT_DCT](ptr, td->uv_stride, + td->uvblock[p] + 16 * n * bytesperpixel, eob); + } + dst_r += 4 * uvstep1d * s->s.frames[CUR_FRAME].tf.f->linesize[1]; + dst += 4 * uvstep1d * td->uv_stride; + } + } +} + +void ff_vp9_intra_recon_8bpp(VP9TileData *td, ptrdiff_t y_off, ptrdiff_t uv_off) +{ + intra_recon(td, y_off, uv_off, 1); +} + +void ff_vp9_intra_recon_16bpp(VP9TileData *td, ptrdiff_t y_off, ptrdiff_t uv_off) +{ + intra_recon(td, y_off, uv_off, 2); +} + +static av_always_inline void mc_luma_unscaled(VP9TileData *td, vp9_mc_func (*mc)[2], + uint8_t *dst, ptrdiff_t dst_stride, + const uint8_t *ref, ptrdiff_t ref_stride, + ThreadFrame *ref_frame, + ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, + int bw, int bh, int w, int h, int bytesperpixel) +{ + VP9Context *s = td->s; + int mx = mv->x, my = mv->y, th; + + y += my >> 3; + x += mx >> 3; + ref += y * ref_stride + x * bytesperpixel; + mx &= 7; + my &= 7; + // FIXME bilinear filter only needs 0/1 pixels, not 3/4 + // we use +7 because the last 7 pixels of each sbrow can be changed in + // the longest loopfilter of the next sbrow + th = (y + bh + 4 * !!my + 7) >> 6; + ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); + // The arm/aarch64 _hv filters read one more row than what actually is + // needed, so switch to emulated edge one pixel sooner vertically + // (!!my * 5) than horizontally (!!mx * 4). + if (x < !!mx * 3 || y < !!my * 3 || + x + !!mx * 4 > w - bw || y + !!my * 5 > h - bh) { + s->vdsp.emulated_edge_mc(td->edge_emu_buffer, + ref - !!my * 3 * ref_stride - !!mx * 3 * bytesperpixel, + 160, ref_stride, + bw + !!mx * 7, bh + !!my * 7, + x - !!mx * 3, y - !!my * 3, w, h); + ref = td->edge_emu_buffer + !!my * 3 * 160 + !!mx * 3 * bytesperpixel; + ref_stride = 160; + } + mc[!!mx][!!my](dst, dst_stride, ref, ref_stride, bh, mx << 1, my << 1); +} + +static av_always_inline void mc_chroma_unscaled(VP9TileData *td, vp9_mc_func (*mc)[2], + uint8_t *dst_u, uint8_t *dst_v, + ptrdiff_t dst_stride, + const uint8_t *ref_u, ptrdiff_t src_stride_u, + const uint8_t *ref_v, ptrdiff_t src_stride_v, + ThreadFrame *ref_frame, + ptrdiff_t y, ptrdiff_t x, const VP56mv *mv, + int bw, int bh, int w, int h, int bytesperpixel) +{ + VP9Context *s = td->s; + int mx = mv->x * (1 << !s->ss_h), my = mv->y * (1 << !s->ss_v), th; + + y += my >> 4; + x += mx >> 4; + ref_u += y * src_stride_u + x * bytesperpixel; + ref_v += y * src_stride_v + x * bytesperpixel; + mx &= 15; + my &= 15; + // FIXME bilinear filter only needs 0/1 pixels, not 3/4 + // we use +7 because the last 7 pixels of each sbrow can be changed in + // the longest loopfilter of the next sbrow + th = (y + bh + 4 * !!my + 7) >> (6 - s->ss_v); + ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); + // The arm/aarch64 _hv filters read one more row than what actually is + // needed, so switch to emulated edge one pixel sooner vertically + // (!!my * 5) than horizontally (!!mx * 4). + if (x < !!mx * 3 || y < !!my * 3 || + x + !!mx * 4 > w - bw || y + !!my * 5 > h - bh) { + s->vdsp.emulated_edge_mc(td->edge_emu_buffer, + ref_u - !!my * 3 * src_stride_u - !!mx * 3 * bytesperpixel, + 160, src_stride_u, + bw + !!mx * 7, bh + !!my * 7, + x - !!mx * 3, y - !!my * 3, w, h); + ref_u = td->edge_emu_buffer + !!my * 3 * 160 + !!mx * 3 * bytesperpixel; + mc[!!mx][!!my](dst_u, dst_stride, ref_u, 160, bh, mx, my); + + s->vdsp.emulated_edge_mc(td->edge_emu_buffer, + ref_v - !!my * 3 * src_stride_v - !!mx * 3 * bytesperpixel, + 160, src_stride_v, + bw + !!mx * 7, bh + !!my * 7, + x - !!mx * 3, y - !!my * 3, w, h); + ref_v = td->edge_emu_buffer + !!my * 3 * 160 + !!mx * 3 * bytesperpixel; + mc[!!mx][!!my](dst_v, dst_stride, ref_v, 160, bh, mx, my); + } else { + mc[!!mx][!!my](dst_u, dst_stride, ref_u, src_stride_u, bh, mx, my); + mc[!!mx][!!my](dst_v, dst_stride, ref_v, src_stride_v, bh, mx, my); + } +} + +#define mc_luma_dir(td, mc, dst, dst_ls, src, src_ls, tref, row, col, mv, \ + px, py, pw, ph, bw, bh, w, h, i) \ + mc_luma_unscaled(td, s->dsp.mc, dst, dst_ls, src, src_ls, tref, row, col, \ + mv, bw, bh, w, h, bytesperpixel) +#define mc_chroma_dir(td, mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ + row, col, mv, px, py, pw, ph, bw, bh, w, h, i) \ + mc_chroma_unscaled(td, s->dsp.mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ + row, col, mv, bw, bh, w, h, bytesperpixel) +#define SCALED 0 +#define FN(x) x##_8bpp +#define BYTES_PER_PIXEL 1 +#include "vp9_mc_template.c" +#undef FN +#undef BYTES_PER_PIXEL +#define FN(x) x##_16bpp +#define BYTES_PER_PIXEL 2 +#include "vp9_mc_template.c" +#undef mc_luma_dir +#undef mc_chroma_dir +#undef FN +#undef BYTES_PER_PIXEL +#undef SCALED + +static av_always_inline void mc_luma_scaled(VP9TileData *td, vp9_scaled_mc_func smc, + vp9_mc_func (*mc)[2], + uint8_t *dst, ptrdiff_t dst_stride, + const uint8_t *ref, ptrdiff_t ref_stride, + ThreadFrame *ref_frame, + ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, + int px, int py, int pw, int ph, + int bw, int bh, int w, int h, int bytesperpixel, + const uint16_t *scale, const uint8_t *step) +{ + VP9Context *s = td->s; + if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && + s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { + mc_luma_unscaled(td, mc, dst, dst_stride, ref, ref_stride, ref_frame, + y, x, in_mv, bw, bh, w, h, bytesperpixel); + } else { +#define scale_mv(n, dim) (((int64_t)(n) * scale[dim]) >> 14) + int mx, my; + int refbw_m1, refbh_m1; + int th; + VP56mv mv; + + mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 8, (s->cols * 8 - x + px + 3) * 8); + mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 8, (s->rows * 8 - y + py + 3) * 8); + // BUG libvpx seems to scale the two components separately. This introduces + // rounding errors but we have to reproduce them to be exactly compatible + // with the output from libvpx... + mx = scale_mv(mv.x * 2, 0) + scale_mv(x * 16, 0); + my = scale_mv(mv.y * 2, 1) + scale_mv(y * 16, 1); + + y = my >> 4; + x = mx >> 4; + ref += y * ref_stride + x * bytesperpixel; + mx &= 15; + my &= 15; + refbw_m1 = ((bw - 1) * step[0] + mx) >> 4; + refbh_m1 = ((bh - 1) * step[1] + my) >> 4; + // FIXME bilinear filter only needs 0/1 pixels, not 3/4 + // we use +7 because the last 7 pixels of each sbrow can be changed in + // the longest loopfilter of the next sbrow + th = (y + refbh_m1 + 4 + 7) >> 6; + ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); + // The arm/aarch64 _hv filters read one more row than what actually is + // needed, so switch to emulated edge one pixel sooner vertically + // (y + 5 >= h - refbh_m1) than horizontally (x + 4 >= w - refbw_m1). + if (x < 3 || y < 3 || x + 4 >= w - refbw_m1 || y + 5 >= h - refbh_m1) { + s->vdsp.emulated_edge_mc(td->edge_emu_buffer, + ref - 3 * ref_stride - 3 * bytesperpixel, + 288, ref_stride, + refbw_m1 + 8, refbh_m1 + 8, + x - 3, y - 3, w, h); + ref = td->edge_emu_buffer + 3 * 288 + 3 * bytesperpixel; + ref_stride = 288; + } + smc(dst, dst_stride, ref, ref_stride, bh, mx, my, step[0], step[1]); + } +} + +static av_always_inline void mc_chroma_scaled(VP9TileData *td, vp9_scaled_mc_func smc, + vp9_mc_func (*mc)[2], + uint8_t *dst_u, uint8_t *dst_v, + ptrdiff_t dst_stride, + const uint8_t *ref_u, ptrdiff_t src_stride_u, + const uint8_t *ref_v, ptrdiff_t src_stride_v, + ThreadFrame *ref_frame, + ptrdiff_t y, ptrdiff_t x, const VP56mv *in_mv, + int px, int py, int pw, int ph, + int bw, int bh, int w, int h, int bytesperpixel, + const uint16_t *scale, const uint8_t *step) +{ + VP9Context *s = td->s; + if (s->s.frames[CUR_FRAME].tf.f->width == ref_frame->f->width && + s->s.frames[CUR_FRAME].tf.f->height == ref_frame->f->height) { + mc_chroma_unscaled(td, mc, dst_u, dst_v, dst_stride, ref_u, src_stride_u, + ref_v, src_stride_v, ref_frame, + y, x, in_mv, bw, bh, w, h, bytesperpixel); + } else { + int mx, my; + int refbw_m1, refbh_m1; + int th; + VP56mv mv; + + if (s->ss_h) { + // BUG https://code.google.com/p/webm/issues/detail?id=820 + mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 16, (s->cols * 4 - x + px + 3) * 16); + mx = scale_mv(mv.x, 0) + (scale_mv(x * 16, 0) & ~15) + (scale_mv(x * 32, 0) & 15); + } else { + mv.x = av_clip(in_mv->x, -(x + pw - px + 4) * 8, (s->cols * 8 - x + px + 3) * 8); + mx = scale_mv(mv.x * 2, 0) + scale_mv(x * 16, 0); + } + if (s->ss_v) { + // BUG https://code.google.com/p/webm/issues/detail?id=820 + mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 16, (s->rows * 4 - y + py + 3) * 16); + my = scale_mv(mv.y, 1) + (scale_mv(y * 16, 1) & ~15) + (scale_mv(y * 32, 1) & 15); + } else { + mv.y = av_clip(in_mv->y, -(y + ph - py + 4) * 8, (s->rows * 8 - y + py + 3) * 8); + my = scale_mv(mv.y * 2, 1) + scale_mv(y * 16, 1); + } +#undef scale_mv + y = my >> 4; + x = mx >> 4; + ref_u += y * src_stride_u + x * bytesperpixel; + ref_v += y * src_stride_v + x * bytesperpixel; + mx &= 15; + my &= 15; + refbw_m1 = ((bw - 1) * step[0] + mx) >> 4; + refbh_m1 = ((bh - 1) * step[1] + my) >> 4; + // FIXME bilinear filter only needs 0/1 pixels, not 3/4 + // we use +7 because the last 7 pixels of each sbrow can be changed in + // the longest loopfilter of the next sbrow + th = (y + refbh_m1 + 4 + 7) >> (6 - s->ss_v); + ff_thread_await_progress(ref_frame, FFMAX(th, 0), 0); + // The arm/aarch64 _hv filters read one more row than what actually is + // needed, so switch to emulated edge one pixel sooner vertically + // (y + 5 >= h - refbh_m1) than horizontally (x + 4 >= w - refbw_m1). + if (x < 3 || y < 3 || x + 4 >= w - refbw_m1 || y + 5 >= h - refbh_m1) { + s->vdsp.emulated_edge_mc(td->edge_emu_buffer, + ref_u - 3 * src_stride_u - 3 * bytesperpixel, + 288, src_stride_u, + refbw_m1 + 8, refbh_m1 + 8, + x - 3, y - 3, w, h); + ref_u = td->edge_emu_buffer + 3 * 288 + 3 * bytesperpixel; + smc(dst_u, dst_stride, ref_u, 288, bh, mx, my, step[0], step[1]); + + s->vdsp.emulated_edge_mc(td->edge_emu_buffer, + ref_v - 3 * src_stride_v - 3 * bytesperpixel, + 288, src_stride_v, + refbw_m1 + 8, refbh_m1 + 8, + x - 3, y - 3, w, h); + ref_v = td->edge_emu_buffer + 3 * 288 + 3 * bytesperpixel; + smc(dst_v, dst_stride, ref_v, 288, bh, mx, my, step[0], step[1]); + } else { + smc(dst_u, dst_stride, ref_u, src_stride_u, bh, mx, my, step[0], step[1]); + smc(dst_v, dst_stride, ref_v, src_stride_v, bh, mx, my, step[0], step[1]); + } + } +} + +#define mc_luma_dir(td, mc, dst, dst_ls, src, src_ls, tref, row, col, mv, \ + px, py, pw, ph, bw, bh, w, h, i) \ + mc_luma_scaled(td, s->dsp.s##mc, s->dsp.mc, dst, dst_ls, src, src_ls, tref, row, col, \ + mv, px, py, pw, ph, bw, bh, w, h, bytesperpixel, \ + s->mvscale[b->ref[i]], s->mvstep[b->ref[i]]) +#define mc_chroma_dir(td, mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ + row, col, mv, px, py, pw, ph, bw, bh, w, h, i) \ + mc_chroma_scaled(td, s->dsp.s##mc, s->dsp.mc, dstu, dstv, dst_ls, srcu, srcu_ls, srcv, srcv_ls, tref, \ + row, col, mv, px, py, pw, ph, bw, bh, w, h, bytesperpixel, \ + s->mvscale[b->ref[i]], s->mvstep[b->ref[i]]) +#define SCALED 1 +#define FN(x) x##_scaled_8bpp +#define BYTES_PER_PIXEL 1 +#include "vp9_mc_template.c" +#undef FN +#undef BYTES_PER_PIXEL +#define FN(x) x##_scaled_16bpp +#define BYTES_PER_PIXEL 2 +#include "vp9_mc_template.c" +#undef mc_luma_dir +#undef mc_chroma_dir +#undef FN +#undef BYTES_PER_PIXEL +#undef SCALED + +static av_always_inline void inter_recon(VP9TileData *td, int bytesperpixel) +{ + VP9Context *s = td->s; + VP9Block *b = td->b; + int row = td->row, col = td->col; + + if (s->mvscale[b->ref[0]][0] || (b->comp && s->mvscale[b->ref[1]][0])) { + if (bytesperpixel == 1) { + inter_pred_scaled_8bpp(td); + } else { + inter_pred_scaled_16bpp(td); + } + } else { + if (bytesperpixel == 1) { + inter_pred_8bpp(td); + } else { + inter_pred_16bpp(td); + } + } + + if (!b->skip) { + /* mostly copied intra_recon() */ + + int w4 = ff_vp9_bwh_tab[1][b->bs][0] << 1, step1d = 1 << b->tx, n; + int h4 = ff_vp9_bwh_tab[1][b->bs][1] << 1, x, y, step = 1 << (b->tx * 2); + int end_x = FFMIN(2 * (s->cols - col), w4); + int end_y = FFMIN(2 * (s->rows - row), h4); + int tx = 4 * s->s.h.lossless + b->tx, uvtx = b->uvtx + 4 * s->s.h.lossless; + int uvstep1d = 1 << b->uvtx, p; + uint8_t *dst = td->dst[0]; + + // y itxfm add + for (n = 0, y = 0; y < end_y; y += step1d) { + uint8_t *ptr = dst; + for (x = 0; x < end_x; x += step1d, + ptr += 4 * step1d * bytesperpixel, n += step) { + int eob = b->tx > TX_8X8 ? AV_RN16A(&td->eob[n]) : td->eob[n]; + + if (eob) + s->dsp.itxfm_add[tx][DCT_DCT](ptr, td->y_stride, + td->block + 16 * n * bytesperpixel, eob); + } + dst += 4 * td->y_stride * step1d; + } + + // uv itxfm add + end_x >>= s->ss_h; + end_y >>= s->ss_v; + step = 1 << (b->uvtx * 2); + for (p = 0; p < 2; p++) { + dst = td->dst[p + 1]; + for (n = 0, y = 0; y < end_y; y += uvstep1d) { + uint8_t *ptr = dst; + for (x = 0; x < end_x; x += uvstep1d, + ptr += 4 * uvstep1d * bytesperpixel, n += step) { + int eob = b->uvtx > TX_8X8 ? AV_RN16A(&td->uveob[p][n]) : td->uveob[p][n]; + + if (eob) + s->dsp.itxfm_add[uvtx][DCT_DCT](ptr, td->uv_stride, + td->uvblock[p] + 16 * n * bytesperpixel, eob); + } + dst += 4 * uvstep1d * td->uv_stride; + } + } + } +} + +void ff_vp9_inter_recon_8bpp(VP9TileData *td) +{ + inter_recon(td, 1); +} + +void ff_vp9_inter_recon_16bpp(VP9TileData *td) +{ + inter_recon(td, 2); +} diff --git a/media/ffvpx/libavcodec/vp9shared.h b/media/ffvpx/libavcodec/vp9shared.h new file mode 100644 index 000000000000..54726df742f9 --- /dev/null +++ b/media/ffvpx/libavcodec/vp9shared.h @@ -0,0 +1,169 @@ +/* + * VP9 compatible video decoder + * + * Copyright (C) 2013 Ronald S. Bultje + * Copyright (C) 2013 Clément Bœsch + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_VP9SHARED_H +#define AVCODEC_VP9SHARED_H + +#include +#include + +#include "vp9.h" +#include "thread.h" +#include "vp56.h" + +enum BlockPartition { + PARTITION_NONE, // [ ] <-. + PARTITION_H, // [-] | + PARTITION_V, // [|] | + PARTITION_SPLIT, // [+] --' +}; + +enum InterPredMode { + NEARESTMV = 10, + NEARMV = 11, + ZEROMV = 12, + NEWMV = 13, +}; + +enum CompPredMode { + PRED_SINGLEREF, + PRED_COMPREF, + PRED_SWITCHABLE, +}; + +typedef struct VP9mvrefPair { + VP56mv mv[2]; + int8_t ref[2]; +} VP9mvrefPair; + +typedef struct VP9Frame { + ThreadFrame tf; + AVBufferRef *extradata; + uint8_t *segmentation_map; + VP9mvrefPair *mv; + int uses_2pass; + + AVBufferRef *hwaccel_priv_buf; + void *hwaccel_picture_private; +} VP9Frame; + +enum BlockLevel { + BL_64X64, + BL_32X32, + BL_16X16, + BL_8X8, +}; + +enum BlockSize { + BS_64x64, + BS_64x32, + BS_32x64, + BS_32x32, + BS_32x16, + BS_16x32, + BS_16x16, + BS_16x8, + BS_8x16, + BS_8x8, + BS_8x4, + BS_4x8, + BS_4x4, + N_BS_SIZES, +}; + +typedef struct VP9BitstreamHeader { + // bitstream header + uint8_t profile; + uint8_t bpp; + uint8_t keyframe; + uint8_t invisible; + uint8_t errorres; + uint8_t intraonly; + uint8_t resetctx; + uint8_t refreshrefmask; + uint8_t highprecisionmvs; + enum FilterMode filtermode; + uint8_t allowcompinter; + uint8_t refreshctx; + uint8_t parallelmode; + uint8_t framectxid; + uint8_t use_last_frame_mvs; + uint8_t refidx[3]; + uint8_t signbias[3]; + uint8_t fixcompref; + uint8_t varcompref[2]; + struct { + uint8_t level; + int8_t sharpness; + } filter; + struct { + uint8_t enabled; + uint8_t updated; + int8_t mode[2]; + int8_t ref[4]; + } lf_delta; + uint8_t yac_qi; + int8_t ydc_qdelta, uvdc_qdelta, uvac_qdelta; + uint8_t lossless; +#define MAX_SEGMENT 8 + struct { + uint8_t enabled; + uint8_t temporal; + uint8_t absolute_vals; + uint8_t update_map; + uint8_t prob[7]; + uint8_t pred_prob[3]; + struct { + uint8_t q_enabled; + uint8_t lf_enabled; + uint8_t ref_enabled; + uint8_t skip_enabled; + uint8_t ref_val; + int16_t q_val; + int8_t lf_val; + int16_t qmul[2][2]; + uint8_t lflvl[4][2]; + } feat[MAX_SEGMENT]; + } segmentation; + enum TxfmMode txfmmode; + enum CompPredMode comppredmode; + struct { + unsigned log2_tile_cols, log2_tile_rows; + unsigned tile_cols, tile_rows; + } tiling; + + int uncompressed_header_size; + int compressed_header_size; +} VP9BitstreamHeader; + +typedef struct VP9SharedContext { + VP9BitstreamHeader h; + + ThreadFrame refs[8]; +#define CUR_FRAME 0 +#define REF_FRAME_MVPAIR 1 +#define REF_FRAME_SEGMAP 2 + VP9Frame frames[3]; +} VP9SharedContext; + +#endif /* AVCODEC_VP9SHARED_H */ diff --git a/media/ffvpx/libavcodec/x86/constants.h b/media/ffvpx/libavcodec/x86/constants.h index b82aef9a47d8..bbb0ef844aa9 100644 --- a/media/ffvpx/libavcodec/x86/constants.h +++ b/media/ffvpx/libavcodec/x86/constants.h @@ -43,6 +43,7 @@ extern const xmm_reg ff_pw_64; extern const uint64_t ff_pw_96; extern const uint64_t ff_pw_128; extern const ymm_reg ff_pw_255; +extern const ymm_reg ff_pw_256; extern const ymm_reg ff_pw_512; extern const ymm_reg ff_pw_1023; extern const ymm_reg ff_pw_1024; diff --git a/media/ffvpx/libavcodec/x86/flacdsp_init.c b/media/ffvpx/libavcodec/x86/flacdsp_init.c index e28c5c932288..1971f81b8dea 100644 --- a/media/ffvpx/libavcodec/x86/flacdsp_init.c +++ b/media/ffvpx/libavcodec/x86/flacdsp_init.c @@ -53,7 +53,7 @@ DECORRELATE_FUNCS(32, avx); av_cold void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int channels, int bps) { -#if HAVE_YASM +#if HAVE_X86ASM int cpu_flags = av_get_cpu_flags(); #if CONFIG_FLAC_DECODER @@ -111,5 +111,5 @@ av_cold void ff_flacdsp_init_x86(FLACDSPContext *c, enum AVSampleFormat fmt, int c->lpc16_encode = ff_flac_enc_lpc_16_sse4; } #endif -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ } diff --git a/media/ffvpx/libavcodec/x86/h264_intrapred.asm b/media/ffvpx/libavcodec/x86/h264_intrapred.asm index c88d91b49e59..f3aa3172f05f 100644 --- a/media/ffvpx/libavcodec/x86/h264_intrapred.asm +++ b/media/ffvpx/libavcodec/x86/h264_intrapred.asm @@ -49,7 +49,7 @@ cextern pw_17 cextern pw_32 ;----------------------------------------------------------------------------- -; void ff_pred16x16_vertical_8(uint8_t *src, int stride) +; void ff_pred16x16_vertical_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmx @@ -85,7 +85,7 @@ cglobal pred16x16_vertical_8, 2,3 REP_RET ;----------------------------------------------------------------------------- -; void ff_pred16x16_horizontal_8(uint8_t *src, int stride) +; void ff_pred16x16_horizontal_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_H 0 @@ -126,7 +126,7 @@ INIT_XMM ssse3 PRED16x16_H ;----------------------------------------------------------------------------- -; void ff_pred16x16_dc_8(uint8_t *src, int stride) +; void ff_pred16x16_dc_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_DC 0 @@ -188,7 +188,7 @@ INIT_XMM ssse3 PRED16x16_DC ;----------------------------------------------------------------------------- -; void ff_pred16x16_tm_vp8_8(uint8_t *src, int stride) +; void ff_pred16x16_tm_vp8_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_TM 0 @@ -268,8 +268,45 @@ cglobal pred16x16_tm_vp8_8, 2,6,6 jg .loop REP_RET +%if HAVE_AVX2_EXTERNAL +INIT_YMM avx2 +cglobal pred16x16_tm_vp8_8, 2, 4, 5, dst, stride, stride3, iteration + sub dstq, strideq + pmovzxbw m0, [dstq] + vpbroadcastb xm1, [r0-1] + pmovzxbw m1, xm1 + psubw m0, m1 + mov iterationd, 4 + lea stride3q, [strideq*3] +.loop: + vpbroadcastb xm1, [dstq+strideq*1-1] + vpbroadcastb xm2, [dstq+strideq*2-1] + vpbroadcastb xm3, [dstq+stride3q-1] + vpbroadcastb xm4, [dstq+strideq*4-1] + pmovzxbw m1, xm1 + pmovzxbw m2, xm2 + pmovzxbw m3, xm3 + pmovzxbw m4, xm4 + paddw m1, m0 + paddw m2, m0 + paddw m3, m0 + paddw m4, m0 + vpackuswb m1, m1, m2 + vpackuswb m3, m3, m4 + vpermq m1, m1, q3120 + vpermq m3, m3, q3120 + movdqa [dstq+strideq*1], xm1 + vextracti128 [dstq+strideq*2], m1, 1 + movdqa [dstq+stride3q*1], xm3 + vextracti128 [dstq+strideq*4], m3, 1 + lea dstq, [dstq+strideq*4] + dec iterationd + jg .loop + REP_RET +%endif + ;----------------------------------------------------------------------------- -; void ff_pred16x16_plane_*_8(uint8_t *src, int stride) +; void ff_pred16x16_plane_*_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro H264_PRED16x16_PLANE 1 @@ -550,7 +587,7 @@ H264_PRED16x16_PLANE rv40 H264_PRED16x16_PLANE svq3 ;----------------------------------------------------------------------------- -; void ff_pred8x8_plane_8(uint8_t *src, int stride) +; void ff_pred8x8_plane_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro H264_PRED8x8_PLANE 0 @@ -724,7 +761,7 @@ INIT_XMM ssse3 H264_PRED8x8_PLANE ;----------------------------------------------------------------------------- -; void ff_pred8x8_vertical_8(uint8_t *src, int stride) +; void ff_pred8x8_vertical_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmx @@ -741,7 +778,7 @@ cglobal pred8x8_vertical_8, 2,2 RET ;----------------------------------------------------------------------------- -; void ff_pred8x8_horizontal_8(uint8_t *src, int stride) +; void ff_pred8x8_horizontal_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8_H 0 @@ -769,7 +806,7 @@ INIT_MMX ssse3 PRED8x8_H ;----------------------------------------------------------------------------- -; void ff_pred8x8_top_dc_8_mmxext(uint8_t *src, int stride) +; void ff_pred8x8_top_dc_8_mmxext(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext cglobal pred8x8_top_dc_8, 2,5 @@ -803,7 +840,7 @@ cglobal pred8x8_top_dc_8, 2,5 RET ;----------------------------------------------------------------------------- -; void ff_pred8x8_dc_8_mmxext(uint8_t *src, int stride) +; void ff_pred8x8_dc_8_mmxext(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -864,7 +901,7 @@ cglobal pred8x8_dc_8, 2,5 RET ;----------------------------------------------------------------------------- -; void ff_pred8x8_dc_rv40_8(uint8_t *src, int stride) +; void ff_pred8x8_dc_rv40_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -901,7 +938,7 @@ cglobal pred8x8_dc_rv40_8, 2,7 REP_RET ;----------------------------------------------------------------------------- -; void ff_pred8x8_tm_vp8_8(uint8_t *src, int stride) +; void ff_pred8x8_tm_vp8_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8_TM 0 @@ -1014,7 +1051,7 @@ cglobal pred8x8_tm_vp8_8, 2,3,6 ;----------------------------------------------------------------------------- ; void ff_pred8x8l_top_dc_8(uint8_t *src, int has_topleft, int has_topright, -; int stride) +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_TOP_DC 0 cglobal pred8x8l_top_dc_8, 4,4 @@ -1070,7 +1107,7 @@ PRED8x8L_TOP_DC ;----------------------------------------------------------------------------- ; void ff_pred8x8l_dc_8(uint8_t *src, int has_topleft, int has_topright, -; int stride) +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_DC 0 @@ -1174,7 +1211,7 @@ PRED8x8L_DC ;----------------------------------------------------------------------------- ; void ff_pred8x8l_horizontal_8(uint8_t *src, int has_topleft, -; int has_topright, int stride) +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_HORIZONTAL 0 @@ -1246,7 +1283,7 @@ PRED8x8L_HORIZONTAL ;----------------------------------------------------------------------------- ; void ff_pred8x8l_vertical_8(uint8_t *src, int has_topleft, int has_topright, -; int stride) +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_VERTICAL 0 @@ -1297,7 +1334,7 @@ PRED8x8L_VERTICAL ;----------------------------------------------------------------------------- ; void ff_pred8x8l_down_left_8(uint8_t *src, int has_topleft, -; int has_topright, int stride) +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -1498,7 +1535,7 @@ PRED8x8L_DOWN_LEFT ;----------------------------------------------------------------------------- ; void ff_pred8x8l_down_right_8_mmxext(uint8_t *src, int has_topleft, -; int has_topright, int stride) +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -1750,7 +1787,7 @@ PRED8x8L_DOWN_RIGHT ;----------------------------------------------------------------------------- ; void ff_pred8x8l_vertical_right_8(uint8_t *src, int has_topleft, -; int has_topright, int stride) +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -1978,7 +2015,7 @@ PRED8x8L_VERTICAL_RIGHT ;----------------------------------------------------------------------------- ; void ff_pred8x8l_vertical_left_8(uint8_t *src, int has_topleft, -; int has_topright, int stride) +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_VERTICAL_LEFT 0 @@ -2068,7 +2105,7 @@ PRED8x8L_VERTICAL_LEFT ;----------------------------------------------------------------------------- ; void ff_pred8x8l_horizontal_up_8(uint8_t *src, int has_topleft, -; int has_topright, int stride) +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_HORIZONTAL_UP 0 @@ -2156,7 +2193,7 @@ PRED8x8L_HORIZONTAL_UP ;----------------------------------------------------------------------------- ; void ff_pred8x8l_horizontal_down_8(uint8_t *src, int has_topleft, -; int has_topright, int stride) +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -2404,7 +2441,8 @@ INIT_MMX ssse3 PRED8x8L_HORIZONTAL_DOWN ;------------------------------------------------------------------------------- -; void ff_pred4x4_dc_8_mmxext(uint8_t *src, const uint8_t *topright, int stride) +; void ff_pred4x4_dc_8_mmxext(uint8_t *src, const uint8_t *topright, +; ptrdiff_t stride) ;------------------------------------------------------------------------------- INIT_MMX mmxext @@ -2435,7 +2473,7 @@ cglobal pred4x4_dc_8, 3,5 ;----------------------------------------------------------------------------- ; void ff_pred4x4_tm_vp8_8_mmxext(uint8_t *src, const uint8_t *topright, -; int stride) +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED4x4_TM 0 @@ -2514,7 +2552,7 @@ cglobal pred4x4_tm_vp8_8, 3,3 ;----------------------------------------------------------------------------- ; void ff_pred4x4_vertical_vp8_8_mmxext(uint8_t *src, const uint8_t *topright, -; int stride) +; ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -2535,7 +2573,7 @@ cglobal pred4x4_vertical_vp8_8, 3,3 ;----------------------------------------------------------------------------- ; void ff_pred4x4_down_left_8_mmxext(uint8_t *src, const uint8_t *topright, -; int stride) +; ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext cglobal pred4x4_down_left_8, 3,3 @@ -2562,7 +2600,7 @@ cglobal pred4x4_down_left_8, 3,3 ;------------------------------------------------------------------------------ ; void ff_pred4x4_vertical_left_8_mmxext(uint8_t *src, const uint8_t *topright, -; int stride) +; ptrdiff_t stride) ;------------------------------------------------------------------------------ INIT_MMX mmxext @@ -2588,7 +2626,7 @@ cglobal pred4x4_vertical_left_8, 3,3 ;------------------------------------------------------------------------------ ; void ff_pred4x4_horizontal_up_8_mmxext(uint8_t *src, const uint8_t *topright, -; int stride) +; ptrdiff_t stride) ;------------------------------------------------------------------------------ INIT_MMX mmxext @@ -2622,7 +2660,8 @@ cglobal pred4x4_horizontal_up_8, 3,3 ;------------------------------------------------------------------------------ ; void ff_pred4x4_horizontal_down_8_mmxext(uint8_t *src, -; const uint8_t *topright, int stride) +; const uint8_t *topright, +; ptrdiff_t stride) ;------------------------------------------------------------------------------ INIT_MMX mmxext @@ -2658,7 +2697,8 @@ cglobal pred4x4_horizontal_down_8, 3,3 ;----------------------------------------------------------------------------- ; void ff_pred4x4_vertical_right_8_mmxext(uint8_t *src, -; const uint8_t *topright, int stride) +; const uint8_t *topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -2689,7 +2729,7 @@ cglobal pred4x4_vertical_right_8, 3,3 ;----------------------------------------------------------------------------- ; void ff_pred4x4_down_right_8_mmxext(uint8_t *src, const uint8_t *topright, -; int stride) +; ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext diff --git a/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm b/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm index 9e40cfe24b9b..629e0a72e3ad 100644 --- a/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm +++ b/media/ffvpx/libavcodec/x86/h264_intrapred_10bit.asm @@ -51,7 +51,8 @@ SECTION .text %endmacro ;----------------------------------------------------------------------------- -; void ff_pred4x4_down_right(pixel *src, const pixel *topright, int stride) +; void ff_pred4x4_down_right_10(pixel *src, const pixel *topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED4x4_DR 0 cglobal pred4x4_down_right_10, 3, 3 @@ -89,7 +90,8 @@ PRED4x4_DR %endif ;------------------------------------------------------------------------------ -; void ff_pred4x4_vertical_right(pixel *src, const pixel *topright, int stride) +; void ff_pred4x4_vertical_right_10(pixel *src, const pixel *topright, +; ptrdiff_t stride) ;------------------------------------------------------------------------------ %macro PRED4x4_VR 0 cglobal pred4x4_vertical_right_10, 3, 3, 6 @@ -128,7 +130,8 @@ PRED4x4_VR %endif ;------------------------------------------------------------------------------- -; void ff_pred4x4_horizontal_down(pixel *src, const pixel *topright, int stride) +; void ff_pred4x4_horizontal_down_10(pixel *src, const pixel *topright, +; ptrdiff_t stride) ;------------------------------------------------------------------------------- %macro PRED4x4_HD 0 cglobal pred4x4_horizontal_down_10, 3, 3 @@ -170,7 +173,7 @@ PRED4x4_HD %endif ;----------------------------------------------------------------------------- -; void ff_pred4x4_dc(pixel *src, const pixel *topright, int stride) +; void ff_pred4x4_dc_10(pixel *src, const pixel *topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext @@ -195,7 +198,8 @@ cglobal pred4x4_dc_10, 3, 3 RET ;----------------------------------------------------------------------------- -; void ff_pred4x4_down_left(pixel *src, const pixel *topright, int stride) +; void ff_pred4x4_down_left_10(pixel *src, const pixel *topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED4x4_DL 0 cglobal pred4x4_down_left_10, 3, 3 @@ -225,7 +229,8 @@ PRED4x4_DL %endif ;----------------------------------------------------------------------------- -; void ff_pred4x4_vertical_left(pixel *src, const pixel *topright, int stride) +; void ff_pred4x4_vertical_left_10(pixel *src, const pixel *topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED4x4_VL 0 cglobal pred4x4_vertical_left_10, 3, 3 @@ -254,7 +259,8 @@ PRED4x4_VL %endif ;----------------------------------------------------------------------------- -; void ff_pred4x4_horizontal_up(pixel *src, const pixel *topright, int stride) +; void ff_pred4x4_horizontal_up_10(pixel *src, const pixel *topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_MMX mmxext cglobal pred4x4_horizontal_up_10, 3, 3 @@ -288,7 +294,7 @@ cglobal pred4x4_horizontal_up_10, 3, 3 ;----------------------------------------------------------------------------- -; void ff_pred8x8_vertical(pixel *src, int stride) +; void ff_pred8x8_vertical_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_XMM sse2 cglobal pred8x8_vertical_10, 2, 2 @@ -304,7 +310,7 @@ cglobal pred8x8_vertical_10, 2, 2 RET ;----------------------------------------------------------------------------- -; void ff_pred8x8_horizontal(pixel *src, int stride) +; void ff_pred8x8_horizontal_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_XMM sse2 cglobal pred8x8_horizontal_10, 2, 3 @@ -324,7 +330,7 @@ cglobal pred8x8_horizontal_10, 2, 3 REP_RET ;----------------------------------------------------------------------------- -; void ff_predict_8x8_dc(pixel *src, int stride) +; void ff_predict_8x8_dc_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro MOV8 2-3 ; sort of a hack, but it works @@ -411,7 +417,7 @@ INIT_XMM sse2 PRED8x8_DC pshuflw ;----------------------------------------------------------------------------- -; void ff_pred8x8_top_dc(pixel *src, int stride) +; void ff_pred8x8_top_dc_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_XMM sse2 cglobal pred8x8_top_dc_10, 2, 4 @@ -438,7 +444,7 @@ cglobal pred8x8_top_dc_10, 2, 4 RET ;----------------------------------------------------------------------------- -; void ff_pred8x8_plane(pixel *src, int stride) +; void ff_pred8x8_plane_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- INIT_XMM sse2 cglobal pred8x8_plane_10, 2, 7, 7 @@ -501,8 +507,8 @@ cglobal pred8x8_plane_10, 2, 7, 7 ;----------------------------------------------------------------------------- -; void ff_pred8x8l_128_dc(pixel *src, int has_topleft, int has_topright, -; int stride) +; void ff_pred8x8l_128_dc_10(pixel *src, int has_topleft, int has_topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_128_DC 0 cglobal pred8x8l_128_dc_10, 4, 4 @@ -526,8 +532,8 @@ INIT_XMM sse2 PRED8x8L_128_DC ;----------------------------------------------------------------------------- -; void ff_pred8x8l_top_dc(pixel *src, int has_topleft, int has_topright, -; int stride) +; void ff_pred8x8l_top_dc_10(pixel *src, int has_topleft, int has_topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_TOP_DC 0 cglobal pred8x8l_top_dc_10, 4, 4, 6 @@ -566,7 +572,8 @@ PRED8x8L_TOP_DC %endif ;------------------------------------------------------------------------------- -; void ff_pred8x8l_dc(pixel *src, int has_topleft, int has_topright, int stride) +; void ff_pred8x8l_dc_10(pixel *src, int has_topleft, int has_topright, +; ptrdiff_t stride) ;------------------------------------------------------------------------------- ;TODO: see if scalar is faster %macro PRED8x8L_DC 0 @@ -625,8 +632,8 @@ PRED8x8L_DC %endif ;----------------------------------------------------------------------------- -; void ff_pred8x8l_vertical(pixel *src, int has_topleft, int has_topright, -; int stride) +; void ff_pred8x8l_vertical_10(pixel *src, int has_topleft, int has_topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_VERTICAL 0 cglobal pred8x8l_vertical_10, 4, 4, 6 @@ -661,8 +668,8 @@ PRED8x8L_VERTICAL %endif ;----------------------------------------------------------------------------- -; void ff_pred8x8l_horizontal(uint8_t *src, int has_topleft, int has_topright, -; int stride) +; void ff_pred8x8l_horizontal_10(uint8_t *src, int has_topleft, +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_HORIZONTAL 0 cglobal pred8x8l_horizontal_10, 4, 4, 5 @@ -718,8 +725,8 @@ PRED8x8L_HORIZONTAL %endif ;----------------------------------------------------------------------------- -; void ff_pred8x8l_down_left(pixel *src, int has_topleft, int has_topright, -; int stride) +; void ff_pred8x8l_down_left_10(pixel *src, int has_topleft, int has_topright, +; ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_DOWN_LEFT 0 cglobal pred8x8l_down_left_10, 4, 4, 7 @@ -787,8 +794,8 @@ PRED8x8L_DOWN_LEFT %endif ;----------------------------------------------------------------------------- -; void ff_pred8x8l_down_right(pixel *src, int has_topleft, int has_topright, -; int stride) +; void ff_pred8x8l_down_right_10(pixel *src, int has_topleft, +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_DOWN_RIGHT 0 ; standard forbids this when has_topleft is false @@ -862,8 +869,8 @@ PRED8x8L_DOWN_RIGHT %endif ;----------------------------------------------------------------------------- -; void ff_pred8x8l_vertical_right(pixel *src, int has_topleft, -; int has_topright, int stride) +; void ff_pred8x8l_vertical_right_10(pixel *src, int has_topleft, +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_VERTICAL_RIGHT 0 ; likewise with 8x8l_down_right @@ -933,8 +940,8 @@ PRED8x8L_VERTICAL_RIGHT %endif ;----------------------------------------------------------------------------- -; void ff_pred8x8l_horizontal_up(pixel *src, int has_topleft, -; int has_topright, int stride) +; void ff_pred8x8l_horizontal_up_10(pixel *src, int has_topleft, +; int has_topright, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED8x8L_HORIZONTAL_UP 0 cglobal pred8x8l_horizontal_up_10, 4, 4, 6 @@ -996,7 +1003,7 @@ PRED8x8L_HORIZONTAL_UP ;----------------------------------------------------------------------------- -; void ff_pred16x16_vertical(pixel *src, int stride) +; void ff_pred16x16_vertical_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro MOV16 3-5 mova [%1+ 0], %2 @@ -1032,7 +1039,7 @@ INIT_XMM sse2 PRED16x16_VERTICAL ;----------------------------------------------------------------------------- -; void ff_pred16x16_horizontal(pixel *src, int stride) +; void ff_pred16x16_horizontal_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_HORIZONTAL 0 cglobal pred16x16_horizontal_10, 2, 3 @@ -1056,7 +1063,7 @@ INIT_XMM sse2 PRED16x16_HORIZONTAL ;----------------------------------------------------------------------------- -; void ff_pred16x16_dc(pixel *src, int stride) +; void ff_pred16x16_dc_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_DC 0 cglobal pred16x16_dc_10, 2, 6 @@ -1102,7 +1109,7 @@ INIT_XMM sse2 PRED16x16_DC ;----------------------------------------------------------------------------- -; void ff_pred16x16_top_dc(pixel *src, int stride) +; void ff_pred16x16_top_dc_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_TOP_DC 0 cglobal pred16x16_top_dc_10, 2, 3 @@ -1134,7 +1141,7 @@ INIT_XMM sse2 PRED16x16_TOP_DC ;----------------------------------------------------------------------------- -; void ff_pred16x16_left_dc(pixel *src, int stride) +; void ff_pred16x16_left_dc_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_LEFT_DC 0 cglobal pred16x16_left_dc_10, 2, 6 @@ -1171,7 +1178,7 @@ INIT_XMM sse2 PRED16x16_LEFT_DC ;----------------------------------------------------------------------------- -; void ff_pred16x16_128_dc(pixel *src, int stride) +; void ff_pred16x16_128_dc_10(pixel *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- %macro PRED16x16_128_DC 0 cglobal pred16x16_128_dc_10, 2,3 diff --git a/media/ffvpx/libavcodec/x86/h264_intrapred_init.c b/media/ffvpx/libavcodec/x86/h264_intrapred_init.c index 528b92e49785..bdd5125d688f 100644 --- a/media/ffvpx/libavcodec/x86/h264_intrapred_init.c +++ b/media/ffvpx/libavcodec/x86/h264_intrapred_init.c @@ -127,6 +127,7 @@ PRED16x16(plane_svq3, 8, ssse3) PRED16x16(tm_vp8, 8, mmx) PRED16x16(tm_vp8, 8, mmxext) PRED16x16(tm_vp8, 8, sse2) +PRED16x16(tm_vp8, 8, avx2) PRED8x8(top_dc, 8, mmxext) PRED8x8(dc_rv40, 8, mmxext) @@ -323,6 +324,12 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, } } } + + if(EXTERNAL_AVX2(cpu_flags)){ + if (codec_id == AV_CODEC_ID_VP8) { + h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_avx2; + } + } } else if (bit_depth == 10) { if (EXTERNAL_MMXEXT(cpu_flags)) { h->pred4x4[DC_PRED ] = ff_pred4x4_dc_10_mmxext; diff --git a/media/ffvpx/libavcodec/x86/videodsp.asm b/media/ffvpx/libavcodec/x86/videodsp.asm index a807d3b888f5..e237860700be 100644 --- a/media/ffvpx/libavcodec/x86/videodsp.asm +++ b/media/ffvpx/libavcodec/x86/videodsp.asm @@ -114,7 +114,7 @@ cglobal emu_edge_hvar, 5, 6, 1, dst, dst_stride, start_x, n_words, h, w .x_loop: ; do { movu [dstq+wq*2], m0 ; write($reg, $mmsize) add wq, mmsize/2 ; w -= $mmsize/2 - cmp wq, -mmsize/2 ; } while (w > $mmsize/2) + cmp wq, -(mmsize/2) ; } while (w > $mmsize/2) jl .x_loop movu [dstq-mmsize], m0 ; write($reg, $mmsize) add dstq, dst_strideq ; dst += dst_stride diff --git a/media/ffvpx/libavcodec/x86/videodsp_init.c b/media/ffvpx/libavcodec/x86/videodsp_init.c index 26e072bb12a9..eeebb415479d 100644 --- a/media/ffvpx/libavcodec/x86/videodsp_init.c +++ b/media/ffvpx/libavcodec/x86/videodsp_init.c @@ -29,7 +29,7 @@ #include "libavutil/x86/cpu.h" #include "libavcodec/videodsp.h" -#if HAVE_YASM +#if HAVE_X86ASM typedef void emu_edge_vfix_func(uint8_t *dst, x86_reg dst_stride, const uint8_t *src, x86_reg src_stride, x86_reg start_y, x86_reg end_y, x86_reg bh); @@ -271,14 +271,14 @@ static av_noinline void emulated_edge_mc_avx2(uint8_t *buf, const uint8_t *src, hfixtbl_avx2, &ff_emu_edge_hvar_avx2); } #endif /* HAVE_AVX2_EXTERNAL */ -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ void ff_prefetch_mmxext(uint8_t *buf, ptrdiff_t stride, int h); void ff_prefetch_3dnow(uint8_t *buf, ptrdiff_t stride, int h); av_cold void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc) { -#if HAVE_YASM +#if HAVE_X86ASM int cpu_flags = av_get_cpu_flags(); #if ARCH_X86_32 @@ -305,5 +305,5 @@ av_cold void ff_videodsp_init_x86(VideoDSPContext *ctx, int bpc) ctx->emulated_edge_mc = emulated_edge_mc_avx2; } #endif -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ } diff --git a/media/ffvpx/libavcodec/x86/vp8dsp.asm b/media/ffvpx/libavcodec/x86/vp8dsp.asm index 538b3f4a9b67..e303b802938e 100644 --- a/media/ffvpx/libavcodec/x86/vp8dsp.asm +++ b/media/ffvpx/libavcodec/x86/vp8dsp.asm @@ -156,8 +156,8 @@ SECTION .text ;------------------------------------------------------------------------------- ; subpel MC functions: ; -; void ff_put_vp8_epel_hv_(uint8_t *dst, int deststride, -; uint8_t *src, int srcstride, +; void ff_put_vp8_epel_hv_(uint8_t *dst, ptrdiff_t deststride, +; uint8_t *src, ptrdiff_t srcstride, ; int height, int mx, int my); ;------------------------------------------------------------------------------- @@ -884,7 +884,7 @@ cglobal put_vp8_pixels16, 5, 5, 2, dst, dststride, src, srcstride, height REP_RET ;----------------------------------------------------------------------------- -; void ff_vp8_idct_dc_add_(uint8_t *dst, int16_t block[16], int stride); +; void ff_vp8_idct_dc_add_(uint8_t *dst, int16_t block[16], ptrdiff_t stride); ;----------------------------------------------------------------------------- %macro ADD_DC 4 @@ -906,6 +906,7 @@ cglobal put_vp8_pixels16, 5, 5, 2, dst, dststride, src, srcstride, height %4 [dst2q+strideq+%3], m5 %endmacro +%if ARCH_X86_32 INIT_MMX mmx cglobal vp8_idct_dc_add, 3, 3, 0, dst, block, stride ; load data @@ -929,8 +930,9 @@ cglobal vp8_idct_dc_add, 3, 3, 0, dst, block, stride lea dst2q, [dst1q+strideq*2] ADD_DC m0, m1, 0, movh RET +%endif -INIT_XMM sse4 +%macro VP8_IDCT_DC_ADD 0 cglobal vp8_idct_dc_add, 3, 3, 6, dst, block, stride ; load data movd m0, [blockq] @@ -956,13 +958,28 @@ cglobal vp8_idct_dc_add, 3, 3, 6, dst, block, stride paddw m4, m0 packuswb m2, m4 movd [dst1q], m2 +%if cpuflag(sse4) pextrd [dst1q+strideq], m2, 1 pextrd [dst2q], m2, 2 pextrd [dst2q+strideq], m2, 3 +%else + psrldq m2, 4 + movd [dst1q+strideq], m2 + psrldq m2, 4 + movd [dst2q], m2 + psrldq m2, 4 + movd [dst2q+strideq], m2 +%endif RET +%endmacro + +INIT_XMM sse2 +VP8_IDCT_DC_ADD +INIT_XMM sse4 +VP8_IDCT_DC_ADD ;----------------------------------------------------------------------------- -; void ff_vp8_idct_dc_add4y_(uint8_t *dst, int16_t block[4][16], int stride); +; void ff_vp8_idct_dc_add4y_(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride); ;----------------------------------------------------------------------------- %if ARCH_X86_32 @@ -1035,7 +1052,7 @@ cglobal vp8_idct_dc_add4y, 3, 3, 6, dst, block, stride RET ;----------------------------------------------------------------------------- -; void ff_vp8_idct_dc_add4uv_(uint8_t *dst, int16_t block[4][16], int stride); +; void ff_vp8_idct_dc_add4uv_(uint8_t *dst, int16_t block[4][16], ptrdiff_t stride); ;----------------------------------------------------------------------------- INIT_MMX mmx @@ -1077,7 +1094,7 @@ cglobal vp8_idct_dc_add4uv, 3, 3, 0, dst, block, stride RET ;----------------------------------------------------------------------------- -; void ff_vp8_idct_add_(uint8_t *dst, int16_t block[16], int stride); +; void ff_vp8_idct_add_(uint8_t *dst, int16_t block[16], ptrdiff_t stride); ;----------------------------------------------------------------------------- ; calculate %1=mul_35468(%1)-mul_20091(%2); %2=mul_20091(%1)+mul_35468(%2) diff --git a/media/ffvpx/libavcodec/x86/vp8dsp_init.c b/media/ffvpx/libavcodec/x86/vp8dsp_init.c index 897d5a0e77c8..397b2518cbae 100644 --- a/media/ffvpx/libavcodec/x86/vp8dsp_init.c +++ b/media/ffvpx/libavcodec/x86/vp8dsp_init.c @@ -26,7 +26,7 @@ #include "libavutil/x86/cpu.h" #include "libavcodec/vp8dsp.h" -#if HAVE_YASM +#if HAVE_X86ASM /* * MC functions @@ -233,6 +233,8 @@ HVBILIN(ssse3, 8, 16, 16) void ff_vp8_idct_dc_add_mmx(uint8_t *dst, int16_t block[16], ptrdiff_t stride); +void ff_vp8_idct_dc_add_sse2(uint8_t *dst, int16_t block[16], + ptrdiff_t stride); void ff_vp8_idct_dc_add_sse4(uint8_t *dst, int16_t block[16], ptrdiff_t stride); void ff_vp8_idct_dc_add4y_mmx(uint8_t *dst, int16_t block[4][16], @@ -288,7 +290,7 @@ DECLARE_LOOP_FILTER(sse2) DECLARE_LOOP_FILTER(ssse3) DECLARE_LOOP_FILTER(sse4) -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ #define VP8_LUMA_MC_FUNC(IDX, SIZE, OPT) \ c->put_vp8_epel_pixels_tab[IDX][0][2] = ff_put_vp8_epel ## SIZE ## _h6_ ## OPT; \ @@ -316,7 +318,7 @@ DECLARE_LOOP_FILTER(sse4) av_cold void ff_vp78dsp_init_x86(VP8DSPContext *c) { -#if HAVE_YASM +#if HAVE_X86ASM int cpu_flags = av_get_cpu_flags(); if (EXTERNAL_MMX(cpu_flags)) { @@ -346,7 +348,7 @@ av_cold void ff_vp78dsp_init_x86(VP8DSPContext *c) c->put_vp8_bilinear_pixels_tab[0][0][0] = ff_put_vp8_pixels16_sse; } - if (HAVE_SSE2_EXTERNAL && cpu_flags & (AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_SSE2SLOW)) { + if (EXTERNAL_SSE2(cpu_flags) || EXTERNAL_SSE2_SLOW(cpu_flags)) { VP8_LUMA_MC_FUNC(0, 16, sse2); VP8_MC_FUNC(1, 8, sse2); VP8_BILINEAR_MC_FUNC(0, 16, sse2); @@ -361,18 +363,18 @@ av_cold void ff_vp78dsp_init_x86(VP8DSPContext *c) VP8_BILINEAR_MC_FUNC(1, 8, ssse3); VP8_BILINEAR_MC_FUNC(2, 4, ssse3); } -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ } av_cold void ff_vp8dsp_init_x86(VP8DSPContext *c) { -#if HAVE_YASM +#if HAVE_X86ASM int cpu_flags = av_get_cpu_flags(); if (EXTERNAL_MMX(cpu_flags)) { - c->vp8_idct_dc_add = ff_vp8_idct_dc_add_mmx; c->vp8_idct_dc_add4uv = ff_vp8_idct_dc_add4uv_mmx; #if ARCH_X86_32 + c->vp8_idct_dc_add = ff_vp8_idct_dc_add_mmx; c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_mmx; c->vp8_idct_add = ff_vp8_idct_add_mmx; c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_mmx; @@ -416,7 +418,7 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext *c) c->vp8_luma_dc_wht = ff_vp8_luma_dc_wht_sse; } - if (HAVE_SSE2_EXTERNAL && cpu_flags & (AV_CPU_FLAG_SSE2 | AV_CPU_FLAG_SSE2SLOW)) { + if (EXTERNAL_SSE2(cpu_flags) || EXTERNAL_SSE2_SLOW(cpu_flags)) { c->vp8_v_loop_filter_simple = ff_vp8_v_loop_filter_simple_sse2; c->vp8_v_loop_filter16y_inner = ff_vp8_v_loop_filter16y_inner_sse2; @@ -427,6 +429,7 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext *c) } if (EXTERNAL_SSE2(cpu_flags)) { + c->vp8_idct_dc_add = ff_vp8_idct_dc_add_sse2; c->vp8_idct_dc_add4y = ff_vp8_idct_dc_add4y_sse2; c->vp8_h_loop_filter_simple = ff_vp8_h_loop_filter_simple_sse2; @@ -460,5 +463,5 @@ av_cold void ff_vp8dsp_init_x86(VP8DSPContext *c) c->vp8_h_loop_filter16y = ff_vp8_h_loop_filter16y_mbedge_sse4; c->vp8_h_loop_filter8uv = ff_vp8_h_loop_filter8uv_mbedge_sse4; } -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ } diff --git a/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm b/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm index 98bb6696a031..caeb40526706 100644 --- a/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm +++ b/media/ffvpx/libavcodec/x86/vp8dsp_loopfilter.asm @@ -43,7 +43,7 @@ cextern pb_80 SECTION .text ;----------------------------------------------------------------------------- -; void ff_vp8_h/v_loop_filter_simple_(uint8_t *dst, int stride, int flim); +; void ff_vp8_h/v_loop_filter_simple_(uint8_t *dst, ptrdiff_t stride, int flim); ;----------------------------------------------------------------------------- ; macro called with 7 mm register indexes as argument, and 4 regular registers @@ -429,7 +429,7 @@ INIT_XMM sse4 SIMPLE_LOOPFILTER h, 5 ;----------------------------------------------------------------------------- -; void ff_vp8_h/v_loop_filter_inner_(uint8_t *dst, [uint8_t *v,] int stride, +; void ff_vp8_h/v_loop_filter_inner_(uint8_t *dst, [uint8_t *v,] ptrdiff_t stride, ; int flimE, int flimI, int hev_thr); ;----------------------------------------------------------------------------- @@ -921,7 +921,7 @@ INNER_LOOPFILTER v, 8 INNER_LOOPFILTER h, 8 ;----------------------------------------------------------------------------- -; void ff_vp8_h/v_loop_filter_mbedge_(uint8_t *dst, [uint8_t *v,] int stride, +; void ff_vp8_h/v_loop_filter_mbedge_(uint8_t *dst, [uint8_t *v,] ptrdiff_t stride, ; int flimE, int flimI, int hev_thr); ;----------------------------------------------------------------------------- diff --git a/media/ffvpx/libavcodec/x86/vp9dsp_init.c b/media/ffvpx/libavcodec/x86/vp9dsp_init.c index cc781a009bb5..837cce850819 100644 --- a/media/ffvpx/libavcodec/x86/vp9dsp_init.c +++ b/media/ffvpx/libavcodec/x86/vp9dsp_init.c @@ -27,7 +27,7 @@ #include "libavcodec/vp9dsp.h" #include "libavcodec/x86/vp9dsp_init.h" -#if HAVE_YASM +#if HAVE_X86ASM decl_fpel_func(put, 4, , mmx); decl_fpel_func(put, 8, , mmx); @@ -114,7 +114,7 @@ itxfm_func(idct, idct, 32, sse2); itxfm_func(idct, idct, 32, ssse3); itxfm_func(idct, idct, 32, avx); itxfm_func(iwht, iwht, 4, mmx); -itxfm_func(idct, idct, 16, avx2); +itxfm_funcs(16, avx2); itxfm_func(idct, idct, 32, avx2); #undef itxfm_func @@ -212,11 +212,11 @@ ipred_func(32, tm, avx2); #undef ipred_dir_tm_funcs #undef ipred_dc_funcs -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact) { -#if HAVE_YASM +#if HAVE_X86ASM int cpu_flags; if (bpp == 10) { @@ -391,6 +391,12 @@ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact) if (ARCH_X86_64) { #if ARCH_X86_64 && HAVE_AVX2_EXTERNAL dsp->itxfm_add[TX_16X16][DCT_DCT] = ff_vp9_idct_idct_16x16_add_avx2; + dsp->itxfm_add[TX_16X16][ADST_DCT] = ff_vp9_idct_iadst_16x16_add_avx2; + dsp->itxfm_add[TX_16X16][DCT_ADST] = ff_vp9_iadst_idct_16x16_add_avx2; + dsp->itxfm_add[TX_16X16][ADST_ADST] = ff_vp9_iadst_iadst_16x16_add_avx2; + dsp->itxfm_add[TX_32X32][ADST_ADST] = + dsp->itxfm_add[TX_32X32][ADST_DCT] = + dsp->itxfm_add[TX_32X32][DCT_ADST] = dsp->itxfm_add[TX_32X32][DCT_DCT] = ff_vp9_idct_idct_32x32_add_avx2; init_subpel3_32_64(0, put, 8, avx2); init_subpel3_32_64(1, avg, 8, avx2); @@ -406,5 +412,5 @@ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact) #undef init_subpel2 #undef init_subpel3 -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ } diff --git a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c index eb67499c9624..60d10a12a3a6 100644 --- a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c +++ b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp.c @@ -27,7 +27,7 @@ #include "libavcodec/vp9dsp.h" #include "libavcodec/x86/vp9dsp_init.h" -#if HAVE_YASM +#if HAVE_X86ASM decl_fpel_func(put, 8, , mmx); decl_fpel_func(avg, 8, _16, mmxext); @@ -51,6 +51,10 @@ decl_ipred_fns(h, 16, mmxext, sse2); decl_ipred_fns(dc, 16, mmxext, sse2); decl_ipred_fns(dc_top, 16, mmxext, sse2); decl_ipred_fns(dc_left, 16, mmxext, sse2); +decl_ipred_fn(dl, 16, 16, avx2); +decl_ipred_fn(dl, 32, 16, avx2); +decl_ipred_fn(dr, 16, 16, avx2); +decl_ipred_fn(dr, 32, 16, avx2); #define decl_ipred_dir_funcs(type) \ decl_ipred_fns(type, 16, sse2, sse2); \ @@ -63,11 +67,11 @@ decl_ipred_dir_funcs(vl); decl_ipred_dir_funcs(vr); decl_ipred_dir_funcs(hu); decl_ipred_dir_funcs(hd); -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ av_cold void ff_vp9dsp_init_16bpp_x86(VP9DSPContext *dsp) { -#if HAVE_YASM +#if HAVE_X86ASM int cpu_flags = av_get_cpu_flags(); if (EXTERNAL_MMX(cpu_flags)) { @@ -133,7 +137,13 @@ av_cold void ff_vp9dsp_init_16bpp_x86(VP9DSPContext *dsp) init_fpel_func(2, 1, 32, avg, _16, avx2); init_fpel_func(1, 1, 64, avg, _16, avx2); init_fpel_func(0, 1, 128, avg, _16, avx2); + init_ipred_func(dl, DIAG_DOWN_LEFT, 16, 16, avx2); + init_ipred_func(dl, DIAG_DOWN_LEFT, 32, 16, avx2); + init_ipred_func(dr, DIAG_DOWN_RIGHT, 16, 16, avx2); +#if ARCH_X86_64 + init_ipred_func(dr, DIAG_DOWN_RIGHT, 32, 16, avx2); +#endif } -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ } diff --git a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c index 4840b2844e3a..b56afc7f5041 100644 --- a/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c +++ b/media/ffvpx/libavcodec/x86/vp9dsp_init_16bpp_template.c @@ -27,7 +27,7 @@ #include "libavcodec/vp9dsp.h" #include "libavcodec/x86/vp9dsp_init.h" -#if HAVE_YASM +#if HAVE_X86ASM extern const int16_t ff_filters_16bpp[3][15][4][16]; @@ -137,11 +137,11 @@ decl_itxfm_func(iadst, iadst, 4, BPC, sse2); decl_itxfm_funcs(8, BPC, sse2); decl_itxfm_funcs(16, BPC, sse2); decl_itxfm_func(idct, idct, 32, BPC, sse2); -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ av_cold void INIT_FUNC(VP9DSPContext *dsp, int bitexact) { -#if HAVE_YASM +#if HAVE_X86ASM int cpu_flags = av_get_cpu_flags(); #define init_lpf_8_func(idx1, idx2, dir, wd, bpp, opt) \ @@ -234,7 +234,7 @@ av_cold void INIT_FUNC(VP9DSPContext *dsp, int bitexact) #endif } -#endif /* HAVE_YASM */ +#endif /* HAVE_X86ASM */ ff_vp9dsp_init_16bpp_x86(dsp); } diff --git a/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm b/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm index c0ac16d3eba4..32b698243a89 100644 --- a/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm +++ b/media/ffvpx/libavcodec/x86/vp9intrapred_16bpp.asm @@ -847,6 +847,108 @@ DL_FUNCS INIT_XMM avx DL_FUNCS +%if HAVE_AVX2_EXTERNAL +INIT_YMM avx2 +cglobal vp9_ipred_dl_16x16_16, 2, 4, 5, dst, stride, l, a + movifnidn aq, amp + mova m0, [aq] ; abcdefghijklmnop + vpbroadcastw xm1, [aq+30] ; pppppppp + vperm2i128 m2, m0, m1, q0201 ; ijklmnoppppppppp + vpalignr m3, m2, m0, 2 ; bcdefghijklmnopp + vpalignr m4, m2, m0, 4 ; cdefghijklmnoppp + LOWPASS 0, 3, 4 ; BCDEFGHIJKLMNOPp + vperm2i128 m2, m0, m1, q0201 ; JKLMNOPppppppppp + DEFINE_ARGS dst, stride, stride3, cnt + mov cntd, 2 + lea stride3q, [strideq*3] + +.loop: + mova [dstq+strideq*0], m0 + vpalignr m3, m2, m0, 2 + vpalignr m4, m2, m0, 4 + mova [dstq+strideq*1], m3 + mova [dstq+strideq*2], m4 + vpalignr m3, m2, m0, 6 + vpalignr m4, m2, m0, 8 + mova [dstq+stride3q ], m3 + lea dstq, [dstq+strideq*4] + mova [dstq+strideq*0], m4 + vpalignr m3, m2, m0, 10 + vpalignr m4, m2, m0, 12 + mova [dstq+strideq*1], m3 + mova [dstq+strideq*2], m4 + vpalignr m3, m2, m0, 14 + mova [dstq+stride3q ], m3 + lea dstq, [dstq+strideq*4] + mova m0, m2 + vperm2i128 m2, m2, m2, q0101 ; pppppppppppppppp + dec cntd + jg .loop + RET + +cglobal vp9_ipred_dl_32x32_16, 2, 6, 7, dst, stride, l, a + movifnidn aq, amp + mova m0, [aq+mmsize*0+ 0] ; abcdefghijklmnop + mova m1, [aq+mmsize*1+ 0] ; qrstuvwxyz012345 + vpbroadcastw xm4, [aq+mmsize*1+30] ; 55555555 + vperm2i128 m5, m0, m1, q0201 ; ijklmnopqrstuvwx + vpalignr m2, m5, m0, 2 ; bcdefghijklmnopq + vpalignr m3, m5, m0, 4 ; cdefghijklmnopqr + LOWPASS 0, 2, 3 ; BCDEFGHIJKLMNOPQ + vperm2i128 m5, m1, m4, q0201 ; yz01234555555555 + vpalignr m2, m5, m1, 2 ; rstuvwxyz0123455 + vpalignr m3, m5, m1, 4 ; stuvwxyz01234555 + LOWPASS 1, 2, 3 ; RSTUVWXYZ......5 + vperm2i128 m2, m1, m4, q0201 ; Z......555555555 + vperm2i128 m5, m0, m1, q0201 ; JKLMNOPQRSTUVWXY + DEFINE_ARGS dst, stride, stride3, cnt + lea stride3q, [strideq*3] + mov cntd, 4 + +.loop: + mova [dstq+strideq*0 + 0], m0 + mova [dstq+strideq*0 +32], m1 + vpalignr m3, m5, m0, 2 + vpalignr m4, m2, m1, 2 + mova [dstq+strideq*1 + 0], m3 + mova [dstq+strideq*1 +32], m4 + vpalignr m3, m5, m0, 4 + vpalignr m4, m2, m1, 4 + mova [dstq+strideq*2 + 0], m3 + mova [dstq+strideq*2 +32], m4 + vpalignr m3, m5, m0, 6 + vpalignr m4, m2, m1, 6 + mova [dstq+stride3q*1+ 0], m3 + mova [dstq+stride3q*1+32], m4 + lea dstq, [dstq+strideq*4] + vpalignr m3, m5, m0, 8 + vpalignr m4, m2, m1, 8 + mova [dstq+strideq*0 + 0], m3 + mova [dstq+strideq*0 +32], m4 + vpalignr m3, m5, m0, 10 + vpalignr m4, m2, m1, 10 + mova [dstq+strideq*1 + 0], m3 + mova [dstq+strideq*1 +32], m4 + vpalignr m3, m5, m0, 12 + vpalignr m4, m2, m1, 12 + mova [dstq+strideq*2+ 0], m3 + mova [dstq+strideq*2+32], m4 + vpalignr m3, m5, m0, 14 + vpalignr m4, m2, m1, 14 + mova [dstq+stride3q+ 0], m3 + mova [dstq+stride3q+ 32], m4 + vpalignr m3, m5, m0, 16 + vpalignr m4, m2, m1, 16 + vperm2i128 m5, m3, m4, q0201 + vperm2i128 m2, m4, m4, q0101 + mova m0, m3 + mova m1, m4 + lea dstq, [dstq+strideq*4] + dec cntd + jg .loop + RET +%endif + %macro DR_FUNCS 1 ; stack_mem_for_32x32_32bit_function cglobal vp9_ipred_dr_4x4_16, 4, 4, 3, dst, stride, l, a movh m0, [lq] ; wxyz.... @@ -1068,6 +1170,161 @@ DR_FUNCS 2 INIT_XMM avx DR_FUNCS 2 +%if HAVE_AVX2_EXTERNAL +INIT_YMM avx2 +cglobal vp9_ipred_dr_16x16_16, 4, 5, 6, dst, stride, l, a + mova m0, [lq] ; klmnopqrstuvwxyz + movu m1, [aq-2] ; *abcdefghijklmno + mova m2, [aq] ; abcdefghijklmnop + vperm2i128 m4, m2, m2, q2001 ; ijklmnop........ + vpalignr m5, m4, m2, 2 ; bcdefghijklmnop. + vperm2i128 m3, m0, m1, q0201 ; stuvwxyz*abcdefg + LOWPASS 1, 2, 5 ; ABCDEFGHIJKLMNO. + vpalignr m4, m3, m0, 2 ; lmnopqrstuvwxyz* + vpalignr m5, m3, m0, 4 ; mnopqrstuvwxyz*a + LOWPASS 0, 4, 5 ; LMNOPQRSTUVWXYZ# + vperm2i128 m5, m0, m1, q0201 ; TUVWXYZ#ABCDEFGH + DEFINE_ARGS dst, stride, stride3, stride5, dst3 + lea dst3q, [dstq+strideq*4] + lea stride3q, [strideq*3] + lea stride5q, [stride3q+strideq*2] + + vpalignr m3, m5, m0, 2 + vpalignr m4, m1, m5, 2 + mova [dst3q+stride5q*2], m3 ; 14 + mova [ dstq+stride3q*2], m4 ; 6 + vpalignr m3, m5, m0, 4 + vpalignr m4, m1, m5, 4 + sub dst3q, strideq + mova [dst3q+stride5q*2], m3 ; 13 + mova [dst3q+strideq*2 ], m4 ; 5 + mova [dst3q+stride3q*4], m0 ; 15 + vpalignr m3, m5, m0, 6 + vpalignr m4, m1, m5, 6 + mova [dstq+stride3q*4], m3 ; 12 + mova [dst3q+strideq*1], m4 ; 4 + vpalignr m3, m5, m0, 8 + vpalignr m4, m1, m5, 8 + mova [dst3q+strideq*8], m3 ; 11 + mova [dst3q+strideq*0], m4 ; 3 + vpalignr m3, m5, m0, 10 + vpalignr m4, m1, m5, 10 + mova [dstq+stride5q*2], m3 ; 10 + mova [dstq+strideq*2 ], m4 ; 2 + vpalignr m3, m5, m0, 12 + vpalignr m4, m1, m5, 12 + mova [dst3q+stride3q*2], m3 ; 9 + mova [dstq+strideq*1 ], m4 ; 1 + vpalignr m3, m5, m0, 14 + vpalignr m4, m1, m5, 14 + mova [dstq+strideq*8], m3 ; 8 + mova [dstq+strideq*0], m4 ; 0 + mova [dst3q+strideq*4], m5 ; 7 + RET + +%if ARCH_X86_64 +cglobal vp9_ipred_dr_32x32_16, 4, 7, 10, dst, stride, l, a + mova m0, [lq+mmsize*0+0] ; l[0-15] + mova m1, [lq+mmsize*1+0] ; l[16-31] + movu m2, [aq+mmsize*0-2] ; *abcdefghijklmno + mova m3, [aq+mmsize*0+0] ; abcdefghijklmnop + mova m4, [aq+mmsize*1+0] ; qrstuvwxyz012345 + vperm2i128 m5, m0, m1, q0201 ; lmnopqrstuvwxyz0 + vpalignr m6, m5, m0, 2 ; mnopqrstuvwxyz01 + vpalignr m7, m5, m0, 4 ; nopqrstuvwxyz012 + LOWPASS 0, 6, 7 ; L[0-15] + vperm2i128 m7, m1, m2, q0201 ; stuvwxyz*abcdefg + vpalignr m5, m7, m1, 2 ; lmnopqrstuvwxyz* + vpalignr m6, m7, m1, 4 ; mnopqrstuvwxyz*a + LOWPASS 1, 5, 6 ; L[16-31]# + vperm2i128 m5, m3, m4, q0201 ; ijklmnopqrstuvwx + vpalignr m6, m5, m3, 2 ; bcdefghijklmnopq + LOWPASS 2, 3, 6 ; A[0-15] + movu m3, [aq+mmsize*1-2] ; pqrstuvwxyz01234 + vperm2i128 m6, m4, m4, q2001 ; yz012345........ + vpalignr m7, m6, m4, 2 ; rstuvwxyz012345. + LOWPASS 3, 4, 7 ; A[16-31]. + vperm2i128 m4, m1, m2, q0201 ; TUVWXYZ#ABCDEFGH + vperm2i128 m5, m0, m1, q0201 ; L[7-15]L[16-23] + vperm2i128 m8, m2, m3, q0201 ; IJKLMNOPQRSTUVWX + DEFINE_ARGS dst8, stride, stride3, stride7, stride5, dst24, cnt + lea stride3q, [strideq*3] + lea stride5q, [stride3q+strideq*2] + lea stride7q, [strideq*4+stride3q] + lea dst24q, [dst8q+stride3q*8] + lea dst8q, [dst8q+strideq*8] + mov cntd, 2 + +.loop: + mova [dst24q+stride7q+0 ], m0 ; 31 23 15 7 + mova [dst24q+stride7q+32], m1 + mova [dst8q+stride7q+0], m1 + mova [dst8q+stride7q+32], m2 + vpalignr m6, m4, m1, 2 + vpalignr m7, m5, m0, 2 + vpalignr m9, m8, m2, 2 + mova [dst24q+stride3q*2+0], m7 ; 30 22 14 6 + mova [dst24q+stride3q*2+32], m6 + mova [dst8q+stride3q*2+0], m6 + mova [dst8q+stride3q*2+32], m9 + vpalignr m6, m4, m1, 4 + vpalignr m7, m5, m0, 4 + vpalignr m9, m8, m2, 4 + mova [dst24q+stride5q+0], m7 ; 29 21 13 5 + mova [dst24q+stride5q+32], m6 + mova [dst8q+stride5q+0], m6 + mova [dst8q+stride5q+32], m9 + vpalignr m6, m4, m1, 6 + vpalignr m7, m5, m0, 6 + vpalignr m9, m8, m2, 6 + mova [dst24q+strideq*4+0 ], m7 ; 28 20 12 4 + mova [dst24q+strideq*4+32], m6 + mova [dst8q+strideq*4+0], m6 + mova [dst8q+strideq*4+32], m9 + vpalignr m6, m4, m1, 8 + vpalignr m7, m5, m0, 8 + vpalignr m9, m8, m2, 8 + mova [dst24q+stride3q+0 ], m7 ; 27 19 11 3 + mova [dst24q+stride3q+32], m6 + mova [dst8q+stride3q+0], m6 + mova [dst8q+stride3q+32], m9 + vpalignr m6, m4, m1, 10 + vpalignr m7, m5, m0, 10 + vpalignr m9, m8, m2, 10 + mova [dst24q+strideq*2+0 ], m7 ; 26 18 10 2 + mova [dst24q+strideq*2+32], m6 + mova [dst8q+strideq*2+0], m6 + mova [dst8q+strideq*2+32], m9 + vpalignr m6, m4, m1, 12 + vpalignr m7, m5, m0, 12 + vpalignr m9, m8, m2, 12 + mova [dst24q+strideq+0 ], m7 ; 25 17 9 1 + mova [dst24q+strideq+32], m6 + mova [dst8q+strideq+0], m6 + mova [dst8q+strideq+32], m9 + vpalignr m6, m4, m1, 14 + vpalignr m7, m5, m0, 14 + vpalignr m9, m8, m2, 14 + mova [dst24q+strideq*0+0 ], m7 ; 24 16 8 0 + mova [dst24q+strideq*0+32], m6 + mova [dst8q+strideq*0+0], m6 + mova [dst8q+strideq*0+32], m9 + mova m0, m5 + mova m5, m1 + mova m1, m4 + mova m4, m2 + mova m2, m8 + mova m8, m3 + sub dst24q, stride7q + sub dst24q, strideq + sub dst8q, stride7q + sub dst8q, strideq + dec cntd + jg .loop + RET +%endif +%endif + %macro VL_FUNCS 1 ; stack_mem_for_32x32_32bit_function cglobal vp9_ipred_vl_4x4_16, 2, 4, 3, dst, stride, l, a movifnidn aq, amp diff --git a/media/ffvpx/libavcodec/x86/vp9itxfm.asm b/media/ffvpx/libavcodec/x86/vp9itxfm.asm index 57d6d353bd86..2c63fe514a3f 100644 --- a/media/ffvpx/libavcodec/x86/vp9itxfm.asm +++ b/media/ffvpx/libavcodec/x86/vp9itxfm.asm @@ -1581,33 +1581,30 @@ cglobal vp9_idct_idct_16x16_add, 4, 4, 16, dst, stride, block, eob VP9_IDCT16_YMM_1D mova [blockq+224], m7 - mova [blockq+480], m15 - pxor m15, m15 ; store - VP9_IDCT8_WRITEx2 0, 1, 6, 7, 15, [pw_512], 6 + VP9_IDCT8_WRITEx2 0, 1, 6, 7, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] - VP9_IDCT8_WRITEx2 2, 3, 6, 7, 15, [pw_512], 6 + VP9_IDCT8_WRITEx2 2, 3, 6, 7, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] - VP9_IDCT8_WRITEx2 4, 5, 6, 7, 15, [pw_512], 6 + VP9_IDCT8_WRITEx2 4, 5, 6, 7, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] mova m6, [blockq+192] mova m7, [blockq+224] - SWAP 0, 15 - mova m15, [blockq+480] - VP9_IDCT8_WRITEx2 6, 7, 1, 2, 0, [pw_512], 6 + VP9_IDCT8_WRITEx2 6, 7, 1, 2, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] - VP9_IDCT8_WRITEx2 8, 9, 1, 2, 0, [pw_512], 6 + VP9_IDCT8_WRITEx2 8, 9, 1, 2, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] - VP9_IDCT8_WRITEx2 10, 11, 1, 2, 0, [pw_512], 6 + VP9_IDCT8_WRITEx2 10, 11, 1, 2, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] - VP9_IDCT8_WRITEx2 12, 13, 1, 2, 0, [pw_512], 6 + VP9_IDCT8_WRITEx2 12, 13, 1, 2, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] - VP9_IDCT8_WRITEx2 14, 15, 1, 2, 0, [pw_512], 6 + VP9_IDCT8_WRITEx2 14, 15, 1, 2, unused, [pw_512], 6 lea dstq, [dstq+2*strideq] ; at the end of the loop, m0 should still be zero ; use that to zero out block coefficients + pxor m0, m0 ZERO_BLOCK blockq, 32, 16, m0 RET %endif @@ -1987,6 +1984,173 @@ IADST16_FN idct, IDCT16, iadst, IADST16, avx IADST16_FN iadst, IADST16, idct, IDCT16, avx IADST16_FN iadst, IADST16, iadst, IADST16, avx +; in: data in m[0-15] except m0/m4, which are in [blockq+0] and [blockq+128] +; out: m[0-15] except m6, which is in [blockq+192] +; uses blockq as scratch space +%macro VP9_IADST16_YMM_1D 0 + mova [blockq+ 32], m3 + mova [blockq+ 64], m7 + mova [blockq+ 96], m8 + + ; first half of round 1 + VP9_UNPACK_MULSUB_2D_4X 9, 6, 0, 3, 13160, 9760 ; m9/x=t7[d], m6/x=t6[d] + VP9_UNPACK_MULSUB_2D_4X 1, 14, 4, 7, 2404, 16207 ; m1/x=t15[d], m14/x=t14[d] + VP9_RND_SH_SUMSUB_BA 14, 6, 7, 3, 8, [pd_8192] ; m14=t6[w], m6=t14[w] + VP9_RND_SH_SUMSUB_BA 1, 9, 4, 0, 8, [pd_8192] ; m1=t7[w], m9=t15[w] + + VP9_UNPACK_MULSUB_2D_4X 13, 2, 4, 7, 15893, 3981 ; m13/x=t3[d], m2/x=t2[d] + VP9_UNPACK_MULSUB_2D_4X 5, 10, 0, 3, 8423, 14053 ; m5/x=t11[d], m10/x=t10[d] + VP9_RND_SH_SUMSUB_BA 10, 2, 3, 7, 8, [pd_8192] ; m10=t2[w], m2=t10[w] + VP9_RND_SH_SUMSUB_BA 5, 13, 0, 4, 8, [pd_8192] ; m5=t3[w], m13=t11[w] + + ; half of round 2 t8-15 + VP9_UNPACK_MULSUB_2D_4X 2, 13, 4, 7, 9102, 13623 ; m2/x=t11[d], m13/x=t10[d] + VP9_UNPACK_MULSUB_2D_4X 9, 6, 3, 0, 13623, 9102 ; m9/x=t14[d], m6/x=t15[d] + VP9_RND_SH_SUMSUB_BA 9, 13, 3, 7, 8, [pd_8192] ; m9=t10[w], m13=t14[w] + VP9_RND_SH_SUMSUB_BA 6, 2, 0, 4, 8, [pd_8192] ; m6=t11[w], m2=t15[w] + + SUMSUB_BA w, 14, 10, 8 ; m14=t2, m10=t6 + SUMSUB_BA w, 1, 5, 8 ; m1=t3, m5=t7 + + mova m0, [blockq+ 0] + mova m4, [blockq+128] + mova m3, [blockq+ 32] + mova m7, [blockq+ 64] + mova m8, [blockq+ 96] + mova [blockq+ 0], m1 + mova [blockq+128], m14 + mova [blockq+ 32], m6 + mova [blockq+ 64], m9 + mova [blockq+ 96], m10 + + ; second half of round 1 + VP9_UNPACK_MULSUB_2D_4X 15, 0, 1, 9, 16364, 804 ; m15/x=t1[d], m0/x=t0[d] + VP9_UNPACK_MULSUB_2D_4X 7, 8, 10, 6, 11003, 12140 ; m7/x=t9[d], m8/x=t8[d] + VP9_RND_SH_SUMSUB_BA 8, 0, 6, 9, 14, [pd_8192] ; m8=t0[w], m0=t8[w] + VP9_RND_SH_SUMSUB_BA 7, 15, 10, 1, 14, [pd_8192] ; m7=t1[w], m15=t9[w] + + VP9_UNPACK_MULSUB_2D_4X 11, 4, 10, 6, 14811, 7005 ; m11/x=t5[d], m4/x=t4[d] + VP9_UNPACK_MULSUB_2D_4X 3, 12, 1, 9, 5520, 15426 ; m3/x=t13[d], m12/x=t12[d] + VP9_RND_SH_SUMSUB_BA 12, 4, 9, 6, 14, [pd_8192] ; m12=t4[w], m4=t12[w] + VP9_RND_SH_SUMSUB_BA 3, 11, 1, 10, 14, [pd_8192] ; m3=t5[w], m11=t13[w] + + ; second half of round 2 t8-15 + VP9_UNPACK_MULSUB_2D_4X 0, 15, 6, 10, 16069, 3196 ; m15/x=t8[d], m0/x=t9[d] + VP9_UNPACK_MULSUB_2D_4X 11, 4, 9, 1, 3196, 16069 ; m11/x=t12[d], m4/x=t13[d] + VP9_RND_SH_SUMSUB_BA 11, 15, 9, 10, 14, [pd_8192] ; m11=t8[w], m15=t12[w] + VP9_RND_SH_SUMSUB_BA 4, 0, 1, 6, 14, [pd_8192] ; m4=t9[w], m0=t13[w] + + SUMSUB_BA w, 12, 8, 14 ; m12=t0, m8=t4 + SUMSUB_BA w, 3, 7, 14 ; m3=t1, m7=t5 + + mova m10, [blockq+ 96] + mova [blockq+ 96], m12 + + ; round 3 + VP9_UNPACK_MULSUB_2D_4X 15, 0, 9, 12, 15137, 6270 ; m15/x=t13[d], m0/x=t12[d] + VP9_UNPACK_MULSUB_2D_4X 2, 13, 1, 6, 6270, 15137 ; m2/x=t14[d], m13/x=t15[d] + VP9_RND_SH_SUMSUB_BA 2, 0, 1, 12, 14, [pd_8192] ; m2=out2[w], m0=t14a[w] + VP9_RND_SH_SUMSUB_BA 13, 15, 6, 9, 14, [pd_8192] + PSIGNW m13, [pw_m1] ; m13=out13[w], m15=t15a[w] + + VP9_UNPACK_MULSUB_2D_4X 8, 7, 12, 9, 15137, 6270 ; m8/x=t5[d], m7/x=t4[d] + VP9_UNPACK_MULSUB_2D_4X 5, 10, 1, 6, 6270, 15137 ; m5/x=t6[d], m10/x=t7[d] + VP9_RND_SH_SUMSUB_BA 5, 7, 1, 9, 14, [pd_8192] + PSIGNW m5, [pw_m1] ; m5=out3[w], m7=t6[w] + VP9_RND_SH_SUMSUB_BA 10, 8, 6, 12, 14, [pd_8192] ; m10=out12[w], m8=t7[w] + + mova m1, [blockq+ 0] + mova m14, [blockq+128] + mova m6, [blockq+ 32] + mova m9, [blockq+ 64] + mova m12, [blockq+ 96] + mova [blockq+ 0], m10 + mova [blockq+128], m5 + + SUMSUB_BA w, 14, 12, 5 ; m14=out0, m12=t2a + SUMSUB_BA w, 1, 3, 5 + PSIGNW m1, [pw_m1] ; m1=out15, m3=t3a + + SUMSUB_BA w, 9, 11, 5 + PSIGNW m9, [pw_m1] ; m9=out1, m11=t10 + SUMSUB_BA w, 6, 4, 5 ; m6=out14, m4=t11 + + VP9_UNPACK_MULSUB_2W_4X 4, 11, 11585, 11585, [pd_8192], 5, 10 ; m4=out9, m11=out6 + mova m5, [blockq+128] + mova [blockq+192], m11 + PSIGNW m15, [pw_m1] + VP9_UNPACK_MULSUB_2W_4X 15, 0, 11585, 11585, [pd_8192], 10, 11 ; m15=out5, m0=out10 + + PSIGNW m3, [pw_m1] + VP9_UNPACK_MULSUB_2W_4X 3, 12, 11585, 11585, [pd_8192], 10, 11 ; m3=out7,m12=out8 + VP9_UNPACK_MULSUB_2W_4X 8, 7, 11585, 11585, [pd_8192], 10, 11 ; m8=out11,m7=out4 + + mova m10, [blockq+ 0] + + SWAP 0, 14, 6, 11, 8, 12, 10 + SWAP 1, 9, 15, 4, 7, 3, 5 + SWAP 5, 9, 15 +%endmacro + +%if ARCH_X86_64 && HAVE_AVX2_EXTERNAL +%macro IADST16_YMM_FN 4 +INIT_YMM avx2 +cglobal vp9_%1_%3_16x16_add, 4, 4, 16, dst, stride, block, eob + mova m1, [blockq+ 32] + mova m2, [blockq+ 64] + mova m3, [blockq+ 96] + mova m5, [blockq+160] + mova m6, [blockq+192] + mova m7, [blockq+224] + mova m8, [blockq+256] + mova m9, [blockq+288] + mova m10, [blockq+320] + mova m11, [blockq+352] + mova m12, [blockq+384] + mova m13, [blockq+416] + mova m14, [blockq+448] + mova m15, [blockq+480] + + VP9_%2_YMM_1D + TRANSPOSE16x16W 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, \ + [blockq+192], [blockq+128], 1 + mova [blockq+ 0], m0 + VP9_%4_YMM_1D + + mova [blockq+224], m7 + + ; store + VP9_IDCT8_WRITEx2 0, 1, 6, 7, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + VP9_IDCT8_WRITEx2 2, 3, 6, 7, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + VP9_IDCT8_WRITEx2 4, 5, 6, 7, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + mova m6, [blockq+192] + mova m7, [blockq+224] + VP9_IDCT8_WRITEx2 6, 7, 1, 2, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + VP9_IDCT8_WRITEx2 8, 9, 1, 2, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + VP9_IDCT8_WRITEx2 10, 11, 1, 2, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + VP9_IDCT8_WRITEx2 12, 13, 1, 2, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + VP9_IDCT8_WRITEx2 14, 15, 1, 2, unused, [pw_512], 6 + lea dstq, [dstq+2*strideq] + + ; at the end of the loop, m0 should still be zero + ; use that to zero out block coefficients + pxor m0, m0 + ZERO_BLOCK blockq, 32, 16, m0 + RET +%endmacro + +IADST16_YMM_FN idct, IDCT16, iadst, IADST16 +IADST16_YMM_FN iadst, IADST16, idct, IDCT16 +IADST16_YMM_FN iadst, IADST16, iadst, IADST16 +%endif + ;--------------------------------------------------------------------------------------------- ; void vp9_idct_idct_32x32_add_(uint8_t *dst, ptrdiff_t stride, int16_t *block, int eob); ;--------------------------------------------------------------------------------------------- diff --git a/media/ffvpx/libavcodec/x86/vp9mc.asm b/media/ffvpx/libavcodec/x86/vp9mc.asm index 9152ba541be8..f64161b2c288 100644 --- a/media/ffvpx/libavcodec/x86/vp9mc.asm +++ b/media/ffvpx/libavcodec/x86/vp9mc.asm @@ -1,5 +1,5 @@ ;****************************************************************************** -;* VP9 MC SIMD optimizations +;* VP9 motion compensation SIMD optimizations ;* ;* Copyright (c) 2013 Ronald S. Bultje ;* @@ -440,9 +440,8 @@ cglobal vp9_%1_8tap_1d_v_ %+ %%px %+ _8, 4, 7, 11, dst, dstride, src, sstride, f mova m10, [filteryq+96] %endif .loop: - ; FIXME maybe reuse loads from previous rows, or just - ; more generally unroll this to prevent multiple loads of - ; the same data? + ; FIXME maybe reuse loads from previous rows, or just more generally + ; unroll this to prevent multiple loads of the same data? movh m0, [srcq] movh m1, [srcq+sstrideq] movh m2, [srcq+sstrideq*2] diff --git a/media/ffvpx/libavutil/atomic_gcc.h b/media/ffvpx/libavutil/atomic_gcc.h index 5f9fc49ba084..2bb43c3cea0e 100644 --- a/media/ffvpx/libavutil/atomic_gcc.h +++ b/media/ffvpx/libavutil/atomic_gcc.h @@ -28,40 +28,27 @@ #define avpriv_atomic_int_get atomic_int_get_gcc static inline int atomic_int_get_gcc(volatile int *ptr) { -#if HAVE_ATOMIC_COMPARE_EXCHANGE - return __atomic_load_n(ptr, __ATOMIC_SEQ_CST); -#else __sync_synchronize(); return *ptr; -#endif } #define avpriv_atomic_int_set atomic_int_set_gcc static inline void atomic_int_set_gcc(volatile int *ptr, int val) { -#if HAVE_ATOMIC_COMPARE_EXCHANGE - __atomic_store_n(ptr, val, __ATOMIC_SEQ_CST); -#else *ptr = val; __sync_synchronize(); -#endif } #define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_gcc static inline int atomic_int_add_and_fetch_gcc(volatile int *ptr, int inc) { -#if HAVE_ATOMIC_COMPARE_EXCHANGE - return __atomic_add_fetch(ptr, inc, __ATOMIC_SEQ_CST); -#else return __sync_add_and_fetch(ptr, inc); -#endif } #define avpriv_atomic_ptr_cas atomic_ptr_cas_gcc static inline void *atomic_ptr_cas_gcc(void * volatile *ptr, void *oldval, void *newval) { -#if HAVE_SYNC_VAL_COMPARE_AND_SWAP #ifdef __ARMCC_VERSION // armcc will throw an error if ptr is not an integer type volatile uintptr_t *tmp = (volatile uintptr_t*)ptr; @@ -69,10 +56,6 @@ static inline void *atomic_ptr_cas_gcc(void * volatile *ptr, #else return __sync_val_compare_and_swap(ptr, oldval, newval); #endif -#else - __atomic_compare_exchange_n(ptr, &oldval, newval, 0, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST); - return oldval; -#endif } #endif /* AVUTIL_ATOMIC_GCC_H */ diff --git a/media/ffvpx/libavutil/attributes.h b/media/ffvpx/libavutil/attributes.h index 5c6b9deecb7b..54d190111691 100644 --- a/media/ffvpx/libavutil/attributes.h +++ b/media/ffvpx/libavutil/attributes.h @@ -121,8 +121,7 @@ #endif #endif - -#if defined(__GNUC__) +#if defined(__GNUC__) || defined(__clang__) # define av_unused __attribute__((unused)) #else # define av_unused @@ -133,7 +132,7 @@ * away. This is useful for variables accessed only from inline * assembler without the compiler being aware. */ -#if AV_GCC_VERSION_AT_LEAST(3,1) +#if AV_GCC_VERSION_AT_LEAST(3,1) || defined(__clang__) # define av_used __attribute__((used)) #else # define av_used diff --git a/media/ffvpx/libavutil/avstring.c b/media/ffvpx/libavutil/avstring.c index 1787a1ef54f6..f03dd251417a 100644 --- a/media/ffvpx/libavutil/avstring.c +++ b/media/ffvpx/libavutil/avstring.c @@ -231,6 +231,29 @@ int av_strncasecmp(const char *a, const char *b, size_t n) return c1 - c2; } +char *av_strireplace(const char *str, const char *from, const char *to) +{ + char *ret = NULL; + const char *pstr2, *pstr = str; + size_t tolen = strlen(to), fromlen = strlen(from); + AVBPrint pbuf; + + av_bprint_init(&pbuf, 1, AV_BPRINT_SIZE_UNLIMITED); + while ((pstr2 = av_stristr(pstr, from))) { + av_bprint_append_data(&pbuf, pstr, pstr2 - pstr); + pstr = pstr2 + fromlen; + av_bprint_append_data(&pbuf, to, tolen); + } + av_bprint_append_data(&pbuf, pstr, strlen(pstr)); + if (!av_bprint_is_complete(&pbuf)) { + av_bprint_finalize(&pbuf, NULL); + } else { + av_bprint_finalize(&pbuf, &ret); + } + + return ret; +} + const char *av_basename(const char *path) { char *p = strrchr(path, '/'); diff --git a/media/ffvpx/libavutil/avstring.h b/media/ffvpx/libavutil/avstring.h index dd2876990f26..04d2695640a1 100644 --- a/media/ffvpx/libavutil/avstring.h +++ b/media/ffvpx/libavutil/avstring.h @@ -266,6 +266,11 @@ int av_strcasecmp(const char *a, const char *b); */ int av_strncasecmp(const char *a, const char *b, size_t n); +/** + * Locale-independent strings replace. + * @note This means only ASCII-range characters are replace + */ +char *av_strireplace(const char *str, const char *from, const char *to); /** * Thread safe basename. diff --git a/media/ffvpx/libavutil/avutil.h b/media/ffvpx/libavutil/avutil.h index 29dd830bf5e9..4d633156d14d 100644 --- a/media/ffvpx/libavutil/avutil.h +++ b/media/ffvpx/libavutil/avutil.h @@ -118,6 +118,12 @@ * * @} * + * @defgroup lavu_video Video related + * + * @{ + * + * @} + * * @defgroup lavu_audio Audio related * * @{ @@ -337,6 +343,20 @@ FILE *av_fopen_utf8(const char *path, const char *mode); */ AVRational av_get_time_base_q(void); +#define AV_FOURCC_MAX_STRING_SIZE 32 + +#define av_fourcc2str(fourcc) av_fourcc_make_string((char[AV_FOURCC_MAX_STRING_SIZE]){0}, fourcc) + +/** + * Fill the provided buffer with a string containing a FourCC (four-character + * code) representation. + * + * @param buf a buffer with size in bytes of at least AV_FOURCC_MAX_STRING_SIZE + * @param fourcc the fourcc to represent + * @return the buffer in input + */ +char *av_fourcc_make_string(char *buf, uint32_t fourcc); + /** * @} * @} diff --git a/media/ffvpx/libavutil/avutil.symbols b/media/ffvpx/libavutil/avutil.symbols index 81cf6a8ef3c5..fb93143faf1c 100644 --- a/media/ffvpx/libavutil/avutil.symbols +++ b/media/ffvpx/libavutil/avutil.symbols @@ -88,7 +88,9 @@ av_find_best_pix_fmt_of_2 av_find_info_tag av_find_nearest_q_idx av_force_cpu_flags +av_fourcc_make_string av_frame_alloc +av_frame_apply_cropping av_frame_clone av_frame_copy av_frame_copy_props @@ -166,6 +168,7 @@ av_hwframe_get_buffer av_image_alloc av_image_check_sar av_image_check_size +av_image_check_size2 av_image_copy av_image_copy_plane av_image_copy_to_buffer @@ -332,5 +335,8 @@ avutil_configuration avutil_license avutil_version #ifdef XP_WIN -avpriv_emms_yasm +avpriv_emms_asm #endif +avpriv_slicethread_create +avpriv_slicethread_execute +avpriv_slicethread_free diff --git a/media/ffvpx/libavutil/buffer.c b/media/ffvpx/libavutil/buffer.c index 694e116a3c88..8d1aa5fa841e 100644 --- a/media/ffvpx/libavutil/buffer.c +++ b/media/ffvpx/libavutil/buffer.c @@ -16,10 +16,10 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include #include -#include "atomic.h" #include "buffer_internal.h" #include "common.h" #include "mem.h" @@ -40,7 +40,8 @@ AVBufferRef *av_buffer_create(uint8_t *data, int size, buf->size = size; buf->free = free ? free : av_buffer_default_free; buf->opaque = opaque; - buf->refcount = 1; + + atomic_init(&buf->refcount, 1); if (flags & AV_BUFFER_FLAG_READONLY) buf->flags |= BUFFER_FLAG_READONLY; @@ -98,7 +99,7 @@ AVBufferRef *av_buffer_ref(AVBufferRef *buf) *ret = *buf; - avpriv_atomic_int_add_and_fetch(&buf->buffer->refcount, 1); + atomic_fetch_add_explicit(&buf->buffer->refcount, 1, memory_order_relaxed); return ret; } @@ -115,7 +116,7 @@ static void buffer_replace(AVBufferRef **dst, AVBufferRef **src) } else av_freep(dst); - if (!avpriv_atomic_int_add_and_fetch(&b->refcount, -1)) { + if (atomic_fetch_add_explicit(&b->refcount, -1, memory_order_acq_rel) == 1) { b->free(b->opaque, b->data); av_freep(&b); } @@ -134,7 +135,7 @@ int av_buffer_is_writable(const AVBufferRef *buf) if (buf->buffer->flags & AV_BUFFER_FLAG_READONLY) return 0; - return avpriv_atomic_int_get(&buf->buffer->refcount) == 1; + return atomic_load(&buf->buffer->refcount) == 1; } void *av_buffer_get_opaque(const AVBufferRef *buf) @@ -144,7 +145,7 @@ void *av_buffer_get_opaque(const AVBufferRef *buf) int av_buffer_get_ref_count(const AVBufferRef *buf) { - return buf->buffer->refcount; + return atomic_load(&buf->buffer->refcount); } int av_buffer_make_writable(AVBufferRef **pbuf) @@ -191,7 +192,7 @@ int av_buffer_realloc(AVBufferRef **pbuf, int size) return 0; if (!(buf->buffer->flags & BUFFER_FLAG_REALLOCATABLE) || - !av_buffer_is_writable(buf)) { + !av_buffer_is_writable(buf) || buf->data != buf->buffer->data) { /* cannot realloc, allocate a new reallocable buffer and copy data */ AVBufferRef *new = NULL; @@ -229,7 +230,7 @@ AVBufferPool *av_buffer_pool_init2(int size, void *opaque, pool->alloc2 = alloc; pool->pool_free = pool_free; - avpriv_atomic_int_set(&pool->refcount, 1); + atomic_init(&pool->refcount, 1); return pool; } @@ -245,7 +246,7 @@ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)) pool->size = size; pool->alloc = alloc ? alloc : av_buffer_alloc; - avpriv_atomic_int_set(&pool->refcount, 1); + atomic_init(&pool->refcount, 1); return pool; } @@ -280,48 +281,10 @@ void av_buffer_pool_uninit(AVBufferPool **ppool) pool = *ppool; *ppool = NULL; - if (!avpriv_atomic_int_add_and_fetch(&pool->refcount, -1)) + if (atomic_fetch_add_explicit(&pool->refcount, -1, memory_order_acq_rel) == 1) buffer_pool_free(pool); } -#if USE_ATOMICS -/* remove the whole buffer list from the pool and return it */ -static BufferPoolEntry *get_pool(AVBufferPool *pool) -{ - BufferPoolEntry *cur = *(void * volatile *)&pool->pool, *last = NULL; - - while (cur != last) { - last = cur; - cur = avpriv_atomic_ptr_cas((void * volatile *)&pool->pool, last, NULL); - if (!cur) - return NULL; - } - - return cur; -} - -static void add_to_pool(BufferPoolEntry *buf) -{ - AVBufferPool *pool; - BufferPoolEntry *cur, *end = buf; - - if (!buf) - return; - pool = buf->pool; - - while (end->next) - end = end->next; - - while (avpriv_atomic_ptr_cas((void * volatile *)&pool->pool, NULL, buf)) { - /* pool is not empty, retrieve it and append it to our list */ - cur = get_pool(pool); - end->next = cur; - while (end->next) - end = end->next; - } -} -#endif - static void pool_release_buffer(void *opaque, uint8_t *data) { BufferPoolEntry *buf = opaque; @@ -330,16 +293,12 @@ static void pool_release_buffer(void *opaque, uint8_t *data) if(CONFIG_MEMORY_POISONING) memset(buf->data, FF_MEMORY_POISON, pool->size); -#if USE_ATOMICS - add_to_pool(buf); -#else ff_mutex_lock(&pool->mutex); buf->next = pool->pool; pool->pool = buf; ff_mutex_unlock(&pool->mutex); -#endif - if (!avpriv_atomic_int_add_and_fetch(&pool->refcount, -1)) + if (atomic_fetch_add_explicit(&pool->refcount, -1, memory_order_acq_rel) == 1) buffer_pool_free(pool); } @@ -369,11 +328,6 @@ static AVBufferRef *pool_alloc_buffer(AVBufferPool *pool) ret->buffer->opaque = buf; ret->buffer->free = pool_release_buffer; -#if USE_ATOMICS - avpriv_atomic_int_add_and_fetch(&pool->refcount, 1); - avpriv_atomic_int_add_and_fetch(&pool->nb_allocated, 1); -#endif - return ret; } @@ -382,29 +336,6 @@ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool) AVBufferRef *ret; BufferPoolEntry *buf; -#if USE_ATOMICS - /* check whether the pool is empty */ - buf = get_pool(pool); - if (!buf && pool->refcount <= pool->nb_allocated) { - av_log(NULL, AV_LOG_DEBUG, "Pool race dectected, spining to avoid overallocation and eventual OOM\n"); - while (!buf && avpriv_atomic_int_get(&pool->refcount) <= avpriv_atomic_int_get(&pool->nb_allocated)) - buf = get_pool(pool); - } - - if (!buf) - return pool_alloc_buffer(pool); - - /* keep the first entry, return the rest of the list to the pool */ - add_to_pool(buf->next); - buf->next = NULL; - - ret = av_buffer_create(buf->data, pool->size, pool_release_buffer, - buf, 0); - if (!ret) { - add_to_pool(buf); - return NULL; - } -#else ff_mutex_lock(&pool->mutex); buf = pool->pool; if (buf) { @@ -418,10 +349,9 @@ AVBufferRef *av_buffer_pool_get(AVBufferPool *pool) ret = pool_alloc_buffer(pool); } ff_mutex_unlock(&pool->mutex); -#endif if (ret) - avpriv_atomic_int_add_and_fetch(&pool->refcount, 1); + atomic_fetch_add_explicit(&pool->refcount, 1, memory_order_relaxed); return ret; } diff --git a/media/ffvpx/libavutil/buffer.h b/media/ffvpx/libavutil/buffer.h index 0c0ce12cf2fa..73b6bd0b148e 100644 --- a/media/ffvpx/libavutil/buffer.h +++ b/media/ffvpx/libavutil/buffer.h @@ -256,9 +256,10 @@ AVBufferPool *av_buffer_pool_init(int size, AVBufferRef* (*alloc)(int size)); * @param alloc a function that will be used to allocate new buffers when the * pool is empty. * @param pool_free a function that will be called immediately before the pool - * is freed. I.e. after av_buffer_pool_can_uninit() is called - * by the pool and all the frames are returned to the pool and - * freed. It is intended to uninitialize the user opaque data. + * is freed. I.e. after av_buffer_pool_uninit() is called + * by the caller and all the frames are returned to the pool + * and freed. It is intended to uninitialize the user opaque + * data. * @return newly created buffer pool on success, NULL on error. */ AVBufferPool *av_buffer_pool_init2(int size, void *opaque, diff --git a/media/ffvpx/libavutil/buffer_internal.h b/media/ffvpx/libavutil/buffer_internal.h index 29ce8a643c0a..54b67047e5e5 100644 --- a/media/ffvpx/libavutil/buffer_internal.h +++ b/media/ffvpx/libavutil/buffer_internal.h @@ -19,6 +19,7 @@ #ifndef AVUTIL_BUFFER_INTERNAL_H #define AVUTIL_BUFFER_INTERNAL_H +#include #include #include "buffer.h" @@ -40,7 +41,7 @@ struct AVBuffer { /** * number of existing AVBufferRef instances referring to this buffer */ - volatile int refcount; + atomic_uint refcount; /** * a callback for freeing the data @@ -85,9 +86,7 @@ struct AVBufferPool { * buffers have been released, then it's safe to free the pool and all * the buffers in it. */ - volatile int refcount; - - volatile int nb_allocated; + atomic_uint refcount; int size; void *opaque; diff --git a/media/ffvpx/libavutil/channel_layout.c b/media/ffvpx/libavutil/channel_layout.c index 26c87c96a899..3bd5ee29b757 100644 --- a/media/ffvpx/libavutil/channel_layout.c +++ b/media/ffvpx/libavutil/channel_layout.c @@ -152,6 +152,28 @@ uint64_t av_get_channel_layout(const char *name) return layout; } +int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels) +{ + int nb = 0; + char *end; + uint64_t layout = av_get_channel_layout(name); + + if (layout) { + *channel_layout = layout; + *nb_channels = av_get_channel_layout_nb_channels(layout); + return 0; + } + + nb = strtol(name, &end, 10); + if (!errno && *end == 'C' && *(end + 1) == '\0' && nb > 0 && nb < 64) { + *channel_layout = 0; + *nb_channels = nb; + return 0; + } + + return AVERROR(EINVAL); +} + void av_bprint_channel_layout(struct AVBPrint *bp, int nb_channels, uint64_t channel_layout) { diff --git a/media/ffvpx/libavutil/channel_layout.h b/media/ffvpx/libavutil/channel_layout.h index ec7effead1d2..50bb8f03c586 100644 --- a/media/ffvpx/libavutil/channel_layout.h +++ b/media/ffvpx/libavutil/channel_layout.h @@ -131,21 +131,30 @@ enum AVMatrixEncoding { * 5.0(side), 5.1, 5.1(side), 7.1, 7.1(wide), downmix); * - the name of a single channel (FL, FR, FC, LFE, BL, BR, FLC, FRC, BC, * SL, SR, TC, TFL, TFC, TFR, TBL, TBC, TBR, DL, DR); - * - a number of channels, in decimal, optionally followed by 'c', yielding + * - a number of channels, in decimal, followed by 'c', yielding * the default channel layout for that number of channels (@see * av_get_default_channel_layout); * - a channel layout mask, in hexadecimal starting with "0x" (see the * AV_CH_* macros). * - * @warning Starting from the next major bump the trailing character - * 'c' to specify a number of channels will be required, while a - * channel layout mask could also be specified as a decimal number - * (if and only if not followed by "c"). - * * Example: "stereo+FC" = "2c+FC" = "2c+1c" = "0x7" */ uint64_t av_get_channel_layout(const char *name); +/** + * Return a channel layout and the number of channels based on the specified name. + * + * This function is similar to (@see av_get_channel_layout), but can also parse + * unknown channel layout specifications. + * + * @param[in] name channel layout specification string + * @param[out] channel_layout parsed channel layout (0 if unknown) + * @param[out] nb_channels number of channels + * + * @return 0 on success, AVERROR(EINVAL) if the parsing fails. + */ +int av_get_extended_channel_layout(const char *name, uint64_t* channel_layout, int* nb_channels); + /** * Return a description of a channel layout. * If nb_channels is <= 0, it is guessed from the channel_layout. diff --git a/media/ffvpx/libavutil/cpu.c b/media/ffvpx/libavutil/cpu.c index f5785fc13fb8..c8401b825809 100644 --- a/media/ffvpx/libavutil/cpu.c +++ b/media/ffvpx/libavutil/cpu.c @@ -16,8 +16,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#include #include +#include +#include "attributes.h" #include "cpu.h" #include "cpu_internal.h" #include "config.h" @@ -44,10 +47,24 @@ #include #endif -static int flags, checked; +static atomic_int cpu_flags = ATOMIC_VAR_INIT(-1); + +static int get_cpu_flags(void) +{ + if (ARCH_AARCH64) + return ff_get_cpu_flags_aarch64(); + if (ARCH_ARM) + return ff_get_cpu_flags_arm(); + if (ARCH_PPC) + return ff_get_cpu_flags_ppc(); + if (ARCH_X86) + return ff_get_cpu_flags_x86(); + return 0; +} void av_force_cpu_flags(int arg){ - if ( (arg & ( AV_CPU_FLAG_3DNOW | + if (ARCH_X86 && + (arg & ( AV_CPU_FLAG_3DNOW | AV_CPU_FLAG_3DNOWEXT | AV_CPU_FLAG_MMXEXT | AV_CPU_FLAG_SSE | @@ -69,33 +86,23 @@ void av_force_cpu_flags(int arg){ arg |= AV_CPU_FLAG_MMX; } - flags = arg; - checked = arg != -1; + atomic_store_explicit(&cpu_flags, arg, memory_order_relaxed); } int av_get_cpu_flags(void) { - if (checked) - return flags; - - if (ARCH_AARCH64) - flags = ff_get_cpu_flags_aarch64(); - if (ARCH_ARM) - flags = ff_get_cpu_flags_arm(); - if (ARCH_PPC) - flags = ff_get_cpu_flags_ppc(); - if (ARCH_X86) - flags = ff_get_cpu_flags_x86(); - - checked = 1; + int flags = atomic_load_explicit(&cpu_flags, memory_order_relaxed); + if (flags == -1) { + flags = get_cpu_flags(); + atomic_store_explicit(&cpu_flags, flags, memory_order_relaxed); + } return flags; } void av_set_cpu_flags_mask(int mask) { - checked = 0; - flags = av_get_cpu_flags() & mask; - checked = 1; + atomic_store_explicit(&cpu_flags, get_cpu_flags() & mask, + memory_order_relaxed); } int av_parse_cpu_flags(const char *s) @@ -294,3 +301,17 @@ int av_cpu_count(void) return nb_cpus; } + +size_t av_cpu_max_align(void) +{ + if (ARCH_AARCH64) + return ff_get_cpu_max_align_aarch64(); + if (ARCH_ARM) + return ff_get_cpu_max_align_arm(); + if (ARCH_PPC) + return ff_get_cpu_max_align_ppc(); + if (ARCH_X86) + return ff_get_cpu_max_align_x86(); + + return 8; +} diff --git a/media/ffvpx/libavutil/cpu.h b/media/ffvpx/libavutil/cpu.h index 4bff16714a38..9e5d40affef6 100644 --- a/media/ffvpx/libavutil/cpu.h +++ b/media/ffvpx/libavutil/cpu.h @@ -21,6 +21,8 @@ #ifndef AVUTIL_CPU_H #define AVUTIL_CPU_H +#include + #include "attributes.h" #define AV_CPU_FLAG_FORCE 0x80000000 /* force usage of selected flags (OR) */ @@ -39,6 +41,7 @@ #define AV_CPU_FLAG_SSE3SLOW 0x20000000 ///< SSE3 supported, but usually not faster ///< than regular MMX/SSE (e.g. Core1) #define AV_CPU_FLAG_SSSE3 0x0080 ///< Conroe SSSE3 functions +#define AV_CPU_FLAG_SSSE3SLOW 0x4000000 ///< SSSE3 supported, but usually not faster #define AV_CPU_FLAG_ATOM 0x10000000 ///< Atom processor, some SSSE3 instructions are slower #define AV_CPU_FLAG_SSE4 0x0100 ///< Penryn SSE4.1 functions #define AV_CPU_FLAG_SSE42 0x0200 ///< Nehalem SSE4.2 functions @@ -85,8 +88,6 @@ void av_force_cpu_flags(int flags); * Set a mask on flags returned by av_get_cpu_flags(). * This function is mainly useful for testing. * Please use av_force_cpu_flags() and av_get_cpu_flags() instead which are more flexible - * - * @warning this function is not thread safe. */ attribute_deprecated void av_set_cpu_flags_mask(int mask); @@ -114,4 +115,15 @@ int av_parse_cpu_caps(unsigned *flags, const char *s); */ int av_cpu_count(void); +/** + * Get the maximum data alignment that may be required by FFmpeg. + * + * Note that this is affected by the build configuration and the CPU flags mask, + * so e.g. if the CPU supports AVX, but libavutil has been built with + * --disable-avx or the AV_CPU_FLAG_AVX flag has been disabled through + * av_set_cpu_flags_mask(), then this function will behave as if AVX is not + * present. + */ +size_t av_cpu_max_align(void); + #endif /* AVUTIL_CPU_H */ diff --git a/media/ffvpx/libavutil/cpu_internal.h b/media/ffvpx/libavutil/cpu_internal.h index 6c352abe1b67..b8bf1e539648 100644 --- a/media/ffvpx/libavutil/cpu_internal.h +++ b/media/ffvpx/libavutil/cpu_internal.h @@ -44,4 +44,9 @@ int ff_get_cpu_flags_arm(void); int ff_get_cpu_flags_ppc(void); int ff_get_cpu_flags_x86(void); +size_t ff_get_cpu_max_align_aarch64(void); +size_t ff_get_cpu_max_align_arm(void); +size_t ff_get_cpu_max_align_ppc(void); +size_t ff_get_cpu_max_align_x86(void); + #endif /* AVUTIL_CPU_INTERNAL_H */ diff --git a/media/ffvpx/libavutil/display.h b/media/ffvpx/libavutil/display.h index 39c15ee6b83d..515adad795d5 100644 --- a/media/ffvpx/libavutil/display.h +++ b/media/ffvpx/libavutil/display.h @@ -18,6 +18,11 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +/** + * @file + * Display matrix + */ + #ifndef AVUTIL_DISPLAY_H #define AVUTIL_DISPLAY_H @@ -25,15 +30,26 @@ #include "common.h" /** + * @addtogroup lavu_video + * @{ + * + * @defgroup lavu_video_display Display transformation matrix functions + * @{ + */ + +/** + * @addtogroup lavu_video_display * The display transformation matrix specifies an affine transformation that * should be applied to video frames for correct presentation. It is compatible * with the matrices stored in the ISO/IEC 14496-12 container format. * * The data is a 3x3 matrix represented as a 9-element array: * + * @code{.unparsed} * | a b u | * (a, b, u, c, d, v, x, y, w) -> | c d v | * | x y w | + * @endcode * * All numbers are stored in native endianness, as 16.16 fixed-point values, * except for u, v and w, which are stored as 2.30 fixed-point values. @@ -41,15 +57,21 @@ * The transformation maps a point (p, q) in the source (pre-transformation) * frame to the point (p', q') in the destination (post-transformation) frame as * follows: + * + * @code{.unparsed} * | a b u | * (p, q, 1) . | c d v | = z * (p', q', 1) * | x y w | + * @endcode * * The transformation can also be more explicitly written in components as * follows: + * + * @code{.unparsed} * p' = (a * p + c * q + x) / z; * q' = (b * p + d * q + y) / z; * z = u * p + v * q + w + * @endcode */ /** @@ -84,4 +106,9 @@ void av_display_rotation_set(int32_t matrix[9], double angle); */ void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); +/** + * @} + * @} + */ + #endif /* AVUTIL_DISPLAY_H */ diff --git a/media/ffvpx/libavutil/dummy_funcs.c b/media/ffvpx/libavutil/dummy_funcs.c index e579fcc8933f..3a2381074b3a 100644 --- a/media/ffvpx/libavutil/dummy_funcs.c +++ b/media/ffvpx/libavutil/dummy_funcs.c @@ -19,3 +19,8 @@ void ff_float_dsp_init_ppc(AVFloatDSPContext *fdsp, int strict) {} void ff_float_dsp_init_mips(AVFloatDSPContext *fdsp) {} int av_hwframe_get_buffer(struct AVBufferRef* hwframe_ref, struct AVFrame* frame, int flags) { return 0; } + +// cpu.c +size_t ff_get_cpu_max_align_aarch64() { return 0; } +size_t ff_get_cpu_max_align_arm() { return 0; } +size_t ff_get_cpu_max_align_ppc() { return 0; } diff --git a/media/ffvpx/libavutil/eval.c b/media/ffvpx/libavutil/eval.c index fc12885c277d..e5948793bd75 100644 --- a/media/ffvpx/libavutil/eval.c +++ b/media/ffvpx/libavutil/eval.c @@ -38,6 +38,7 @@ #include "fftime.h" #include "avstring.h" #include "timer.h" +#include "reverse.h" typedef struct Parser { const AVClass *class; @@ -152,9 +153,9 @@ struct AVExpr { e_squish, e_gauss, e_ld, e_isnan, e_isinf, e_mod, e_max, e_min, e_eq, e_gt, e_gte, e_lte, e_lt, e_pow, e_mul, e_div, e_add, - e_last, e_st, e_while, e_taylor, e_root, e_floor, e_ceil, e_trunc, + e_last, e_st, e_while, e_taylor, e_root, e_floor, e_ceil, e_trunc, e_round, e_sqrt, e_not, e_random, e_hypot, e_gcd, - e_if, e_ifnot, e_print, e_bitand, e_bitor, e_between, e_clip + e_if, e_ifnot, e_print, e_bitand, e_bitor, e_between, e_clip, e_atan2, e_lerp, } type; double value; // is sign in other types union { @@ -188,6 +189,7 @@ static double eval_expr(Parser *p, AVExpr *e) case e_floor: return e->value * floor(eval_expr(p, e->param[0])); case e_ceil : return e->value * ceil (eval_expr(p, e->param[0])); case e_trunc: return e->value * trunc(eval_expr(p, e->param[0])); + case e_round: return e->value * round(eval_expr(p, e->param[0])); case e_sqrt: return e->value * sqrt (eval_expr(p, e->param[0])); case e_not: return e->value * (eval_expr(p, e->param[0]) == 0); case e_if: return e->value * (eval_expr(p, e->param[0]) ? eval_expr(p, e->param[1]) : @@ -206,6 +208,12 @@ static double eval_expr(Parser *p, AVExpr *e) return e->value * (d >= eval_expr(p, e->param[1]) && d <= eval_expr(p, e->param[2])); } + case e_lerp: { + double v0 = eval_expr(p, e->param[0]); + double v1 = eval_expr(p, e->param[1]); + double f = eval_expr(p, e->param[2]); + return v0 + (v1 - v0) * f; + } case e_print: { double x = eval_expr(p, e->param[0]); int level = e->param[1] ? av_clip(eval_expr(p, e->param[1]), INT_MIN, INT_MAX) : AV_LOG_INFO; @@ -305,6 +313,7 @@ static double eval_expr(Parser *p, AVExpr *e) case e_last:return e->value * d2; case e_st : return e->value * (p->var[av_clip(d, 0, VARS-1)]= d2); case e_hypot:return e->value * hypot(d, d2); + case e_atan2:return e->value * atan2(d, d2); case e_bitand: return isnan(d) || isnan(d2) ? NAN : e->value * ((long int)d & (long int)d2); case e_bitor: return isnan(d) || isnan(d2) ? NAN : e->value * ((long int)d | (long int)d2); } @@ -438,6 +447,7 @@ static int parse_primary(AVExpr **e, Parser *p) else if (strmatch(next, "floor" )) d->type = e_floor; else if (strmatch(next, "ceil" )) d->type = e_ceil; else if (strmatch(next, "trunc" )) d->type = e_trunc; + else if (strmatch(next, "round" )) d->type = e_round; else if (strmatch(next, "sqrt" )) d->type = e_sqrt; else if (strmatch(next, "not" )) d->type = e_not; else if (strmatch(next, "pow" )) d->type = e_pow; @@ -451,6 +461,8 @@ static int parse_primary(AVExpr **e, Parser *p) else if (strmatch(next, "bitor" )) d->type = e_bitor; else if (strmatch(next, "between"))d->type = e_between; else if (strmatch(next, "clip" )) d->type = e_clip; + else if (strmatch(next, "atan2" )) d->type = e_atan2; + else if (strmatch(next, "lerp" )) d->type = e_lerp; else { for (i=0; p->func1_names && p->func1_names[i]; i++) { if (strmatch(next, p->func1_names[i])) { @@ -634,6 +646,7 @@ static int verify_expr(AVExpr *e) case e_floor: case e_ceil: case e_trunc: + case e_round: case e_sqrt: case e_not: case e_random: @@ -648,6 +661,7 @@ static int verify_expr(AVExpr *e) && (!e->param[2] || verify_expr(e->param[2])); case e_between: case e_clip: + case e_lerp: return verify_expr(e->param[0]) && verify_expr(e->param[1]) && verify_expr(e->param[2]); diff --git a/media/ffvpx/libavutil/float_dsp.c b/media/ffvpx/libavutil/float_dsp.c index c85daffc6a96..1d4911d81527 100644 --- a/media/ffvpx/libavutil/float_dsp.c +++ b/media/ffvpx/libavutil/float_dsp.c @@ -40,6 +40,14 @@ static void vector_fmac_scalar_c(float *dst, const float *src, float mul, dst[i] += src[i] * mul; } +static void vector_dmac_scalar_c(double *dst, const double *src, double mul, + int len) +{ + int i; + for (i = 0; i < len; i++) + dst[i] += src[i] * mul; +} + static void vector_fmul_scalar_c(float *dst, const float *src, float mul, int len) { @@ -125,6 +133,7 @@ av_cold AVFloatDSPContext *avpriv_float_dsp_alloc(int bit_exact) fdsp->vector_fmul = vector_fmul_c; fdsp->vector_fmac_scalar = vector_fmac_scalar_c; fdsp->vector_fmul_scalar = vector_fmul_scalar_c; + fdsp->vector_dmac_scalar = vector_dmac_scalar_c; fdsp->vector_dmul_scalar = vector_dmul_scalar_c; fdsp->vector_fmul_window = vector_fmul_window_c; fdsp->vector_fmul_add = vector_fmul_add_c; diff --git a/media/ffvpx/libavutil/float_dsp.h b/media/ffvpx/libavutil/float_dsp.h index d1be38f947d4..2c24d93471f3 100644 --- a/media/ffvpx/libavutil/float_dsp.h +++ b/media/ffvpx/libavutil/float_dsp.h @@ -54,6 +54,22 @@ typedef struct AVFloatDSPContext { void (*vector_fmac_scalar)(float *dst, const float *src, float mul, int len); + /** + * Multiply a vector of doubles by a scalar double and add to + * destination vector. Source and destination vectors must + * overlap exactly or not at all. + * + * @param dst result vector + * constraints: 32-byte aligned + * @param src input vector + * constraints: 32-byte aligned + * @param mul scalar value + * @param len length of vector + * constraints: multiple of 16 + */ + void (*vector_dmac_scalar)(double *dst, const double *src, double mul, + int len); + /** * Multiply a vector of floats by a scalar float. Source and * destination vectors must overlap exactly or not at all. diff --git a/media/ffvpx/libavutil/frame.c b/media/ffvpx/libavutil/frame.c index 53e6174223ad..d5fd2932e34a 100644 --- a/media/ffvpx/libavutil/frame.c +++ b/media/ffvpx/libavutil/frame.c @@ -26,6 +26,11 @@ #include "mem.h" #include "samplefmt.h" + +static AVFrameSideData *frame_new_side_data(AVFrame *frame, + enum AVFrameSideDataType type, + AVBufferRef *buf); + MAKE_ACCESSORS(AVFrame, frame, int64_t, best_effort_timestamp) MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_duration) MAKE_ACCESSORS(AVFrame, frame, int64_t, pkt_pos) @@ -176,6 +181,9 @@ static int get_video_buffer(AVFrame *frame, int align) return ret; if (!frame->linesize[0]) { + if (align <= 0) + align = 32; /* STRIDE_ALIGN. Should be av_cpu_max_align() */ + for(i=1; i<=align; i+=i) { ret = av_image_fill_linesizes(frame->linesize, frame->format, FFALIGN(frame->width, i)); @@ -292,6 +300,10 @@ static int frame_copy_props(AVFrame *dst, const AVFrame *src, int force_copy) dst->key_frame = src->key_frame; dst->pict_type = src->pict_type; dst->sample_aspect_ratio = src->sample_aspect_ratio; + dst->crop_top = src->crop_top; + dst->crop_bottom = src->crop_bottom; + dst->crop_left = src->crop_left; + dst->crop_right = src->crop_right; dst->pts = src->pts; dst->repeat_pict = src->repeat_pict; dst->interlaced_frame = src->interlaced_frame; @@ -344,18 +356,11 @@ FF_ENABLE_DEPRECATION_WARNINGS } memcpy(sd_dst->data, sd_src->data, sd_src->size); } else { - sd_dst = av_frame_new_side_data(dst, sd_src->type, 0); + sd_dst = frame_new_side_data(dst, sd_src->type, av_buffer_ref(sd_src->buf)); if (!sd_dst) { wipe_side_data(dst); return AVERROR(ENOMEM); } - sd_dst->buf = av_buffer_ref(sd_src->buf); - if (!sd_dst->buf) { - wipe_side_data(dst); - return AVERROR(ENOMEM); - } - sd_dst->data = sd_dst->buf->data; - sd_dst->size = sd_dst->buf->size; } av_dict_copy(&sd_dst->metadata, sd_src->metadata, 0); } @@ -377,6 +382,13 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif + av_buffer_unref(&dst->opaque_ref); + if (src->opaque_ref) { + dst->opaque_ref = av_buffer_ref(src->opaque_ref); + if (!dst->opaque_ref) + return AVERROR(ENOMEM); + } + return 0; } @@ -511,6 +523,8 @@ void av_frame_unref(AVFrame *frame) av_buffer_unref(&frame->hw_frames_ctx); + av_buffer_unref(&frame->opaque_ref); + get_frame_defaults(frame); } @@ -622,40 +636,47 @@ AVBufferRef *av_frame_get_plane_buffer(AVFrame *frame, int plane) return NULL; } -AVFrameSideData *av_frame_new_side_data(AVFrame *frame, - enum AVFrameSideDataType type, - int size) +static AVFrameSideData *frame_new_side_data(AVFrame *frame, + enum AVFrameSideDataType type, + AVBufferRef *buf) { AVFrameSideData *ret, **tmp; - if (frame->nb_side_data > INT_MAX / sizeof(*frame->side_data) - 1) + if (!buf) return NULL; + if (frame->nb_side_data > INT_MAX / sizeof(*frame->side_data) - 1) + goto fail; + tmp = av_realloc(frame->side_data, (frame->nb_side_data + 1) * sizeof(*frame->side_data)); if (!tmp) - return NULL; + goto fail; frame->side_data = tmp; ret = av_mallocz(sizeof(*ret)); if (!ret) - return NULL; + goto fail; - if (size > 0) { - ret->buf = av_buffer_alloc(size); - if (!ret->buf) { - av_freep(&ret); - return NULL; - } - - ret->data = ret->buf->data; - ret->size = size; - } + ret->buf = buf; + ret->data = ret->buf->data; + ret->size = buf->size; ret->type = type; frame->side_data[frame->nb_side_data++] = ret; return ret; +fail: + av_buffer_unref(&buf); + return NULL; +} + +AVFrameSideData *av_frame_new_side_data(AVFrame *frame, + enum AVFrameSideDataType type, + int size) +{ + + return frame_new_side_data(frame, type, av_buffer_alloc(size)); } AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, @@ -723,7 +744,7 @@ int av_frame_copy(AVFrame *dst, const AVFrame *src) if (dst->width > 0 && dst->height > 0) return frame_copy_video(dst, src); - else if (dst->nb_samples > 0 && dst->channel_layout) + else if (dst->nb_samples > 0 && dst->channels > 0) return frame_copy_audio(dst, src); return AVERROR(EINVAL); @@ -758,7 +779,109 @@ const char *av_frame_side_data_name(enum AVFrameSideDataType type) case AV_FRAME_DATA_SKIP_SAMPLES: return "Skip samples"; case AV_FRAME_DATA_AUDIO_SERVICE_TYPE: return "Audio service type"; case AV_FRAME_DATA_MASTERING_DISPLAY_METADATA: return "Mastering display metadata"; + case AV_FRAME_DATA_CONTENT_LIGHT_LEVEL: return "Content light level metadata"; case AV_FRAME_DATA_GOP_TIMECODE: return "GOP timecode"; + case AV_FRAME_DATA_ICC_PROFILE: return "ICC profile"; } return NULL; } + +static int calc_cropping_offsets(size_t offsets[4], const AVFrame *frame, + const AVPixFmtDescriptor *desc) +{ + int i, j; + + for (i = 0; frame->data[i]; i++) { + const AVComponentDescriptor *comp = NULL; + int shift_x = (i == 1 || i == 2) ? desc->log2_chroma_w : 0; + int shift_y = (i == 1 || i == 2) ? desc->log2_chroma_h : 0; + + if (desc->flags & (AV_PIX_FMT_FLAG_PAL | AV_PIX_FMT_FLAG_PSEUDOPAL) && i == 1) { + offsets[i] = 0; + break; + } + + /* find any component descriptor for this plane */ + for (j = 0; j < desc->nb_components; j++) { + if (desc->comp[j].plane == i) { + comp = &desc->comp[j]; + break; + } + } + if (!comp) + return AVERROR_BUG; + + offsets[i] = (frame->crop_top >> shift_y) * frame->linesize[i] + + (frame->crop_left >> shift_x) * comp->step; + } + + return 0; +} + +int av_frame_apply_cropping(AVFrame *frame, int flags) +{ + const AVPixFmtDescriptor *desc; + size_t offsets[4]; + int i; + + if (!(frame->width > 0 && frame->height > 0)) + return AVERROR(EINVAL); + + if (frame->crop_left >= INT_MAX - frame->crop_right || + frame->crop_top >= INT_MAX - frame->crop_bottom || + (frame->crop_left + frame->crop_right) >= frame->width || + (frame->crop_top + frame->crop_bottom) >= frame->height) + return AVERROR(ERANGE); + + desc = av_pix_fmt_desc_get(frame->format); + if (!desc) + return AVERROR_BUG; + + /* Apply just the right/bottom cropping for hwaccel formats. Bitstream + * formats cannot be easily handled here either (and corresponding decoders + * should not export any cropping anyway), so do the same for those as well. + * */ + if (desc->flags & (AV_PIX_FMT_FLAG_BITSTREAM | AV_PIX_FMT_FLAG_HWACCEL)) { + frame->width -= frame->crop_right; + frame->height -= frame->crop_bottom; + frame->crop_right = 0; + frame->crop_bottom = 0; + return 0; + } + + /* calculate the offsets for each plane */ + calc_cropping_offsets(offsets, frame, desc); + + /* adjust the offsets to avoid breaking alignment */ + if (!(flags & AV_FRAME_CROP_UNALIGNED)) { + int log2_crop_align = frame->crop_left ? ff_ctz(frame->crop_left) : INT_MAX; + int min_log2_align = INT_MAX; + + for (i = 0; frame->data[i]; i++) { + int log2_align = offsets[i] ? ff_ctz(offsets[i]) : INT_MAX; + min_log2_align = FFMIN(log2_align, min_log2_align); + } + + /* we assume, and it should always be true, that the data alignment is + * related to the cropping alignment by a constant power-of-2 factor */ + if (log2_crop_align < min_log2_align) + return AVERROR_BUG; + + if (min_log2_align < 5) { + frame->crop_left &= ~((1 << (5 + log2_crop_align - min_log2_align)) - 1); + calc_cropping_offsets(offsets, frame, desc); + } + } + + for (i = 0; frame->data[i]; i++) + frame->data[i] += offsets[i]; + + frame->width -= (frame->crop_left + frame->crop_right); + frame->height -= (frame->crop_top + frame->crop_bottom); + frame->crop_left = 0; + frame->crop_right = 0; + frame->crop_top = 0; + frame->crop_bottom = 0; + + return 0; +} diff --git a/media/ffvpx/libavutil/frame.h b/media/ffvpx/libavutil/frame.h index 8e51361e293c..abe4f4fd178d 100644 --- a/media/ffvpx/libavutil/frame.h +++ b/media/ffvpx/libavutil/frame.h @@ -25,6 +25,7 @@ #ifndef AVUTIL_FRAME_H #define AVUTIL_FRAME_H +#include #include #include "avutil.h" @@ -120,7 +121,26 @@ enum AVFrameSideDataType { * The GOP timecode in 25 bit timecode format. Data format is 64-bit integer. * This is set on the first frame of a GOP that has a temporal reference of 0. */ - AV_FRAME_DATA_GOP_TIMECODE + AV_FRAME_DATA_GOP_TIMECODE, + + /** + * The data represents the AVSphericalMapping structure defined in + * libavutil/spherical.h. + */ + AV_FRAME_DATA_SPHERICAL, + + /** + * Content light level (based on CTA-861.3). This payload contains data in + * the form of the AVContentLightMetadata struct. + */ + AV_FRAME_DATA_CONTENT_LIGHT_LEVEL, + + /** + * The data contains an ICC profile as an opaque octet buffer following the + * format described by ISO 15076-1 with an optional name defined in the + * metadata key entry "name". + */ + AV_FRAME_DATA_ICC_PROFILE, }; enum AVActiveFormatDescription { @@ -173,9 +193,6 @@ typedef struct AVFrameSideData { * * sizeof(AVFrame) is not a part of the public ABI, so new fields may be added * to the end with a minor bump. - * Similarly fields that are marked as to be only accessed by - * av_opt_ptr() can be reordered. This allows 2 forks to add fields - * without breaking compatibility with each other. * * Fields can be accessed through AVOptions, the name string used, matches the * C structure field name for fields accessible through AVOptions. The AVClass @@ -231,9 +248,18 @@ typedef struct AVFrame { uint8_t **extended_data; /** - * width and height of the video frame + * @name Video dimensions + * Video frames only. The coded dimensions (in pixels) of the video frame, + * i.e. the size of the rectangle that contains some well-defined values. + * + * @note The part of the frame intended for display/presentation is further + * restricted by the @ref cropping "Cropping rectangle". + * @{ */ int width, height; + /** + * @} + */ /** * number of audio samples (per channel) described by this frame @@ -414,8 +440,6 @@ typedef struct AVFrame { /** * MPEG vs JPEG YUV range. - * It must be accessed using av_frame_get_color_range() and - * av_frame_set_color_range(). * - encoding: Set by user * - decoding: Set by libavcodec */ @@ -427,8 +451,6 @@ typedef struct AVFrame { /** * YUV colorspace type. - * It must be accessed using av_frame_get_colorspace() and - * av_frame_set_colorspace(). * - encoding: Set by user * - decoding: Set by libavcodec */ @@ -438,8 +460,6 @@ typedef struct AVFrame { /** * frame timestamp estimated using various heuristics, in stream time base - * Code outside libavutil should access this field using: - * av_frame_get_best_effort_timestamp(frame) * - encoding: unused * - decoding: set by libavcodec, read by user. */ @@ -447,8 +467,6 @@ typedef struct AVFrame { /** * reordered pos from the last AVPacket that has been input into the decoder - * Code outside libavutil should access this field using: - * av_frame_get_pkt_pos(frame) * - encoding: unused * - decoding: Read by user. */ @@ -457,8 +475,6 @@ typedef struct AVFrame { /** * duration of the corresponding packet, expressed in * AVStream->time_base units, 0 if unknown. - * Code outside libavutil should access this field using: - * av_frame_get_pkt_duration(frame) * - encoding: unused * - decoding: Read by user. */ @@ -466,8 +482,6 @@ typedef struct AVFrame { /** * metadata. - * Code outside libavutil should access this field using: - * av_frame_get_metadata(frame) * - encoding: Set by user. * - decoding: Set by libavcodec. */ @@ -477,8 +491,6 @@ typedef struct AVFrame { * decode error flags of the frame, set to a combination of * FF_DECODE_ERROR_xxx flags if the decoder produced a frame, but there * were errors during the decoding. - * Code outside libavutil should access this field using: - * av_frame_get_decode_error_flags(frame) * - encoding: unused * - decoding: set by libavcodec, read by user. */ @@ -488,8 +500,6 @@ typedef struct AVFrame { /** * number of audio channels, only used for audio. - * Code outside libavutil should access this field using: - * av_frame_get_channels(frame) * - encoding: unused * - decoding: Read by user. */ @@ -497,8 +507,7 @@ typedef struct AVFrame { /** * size of the corresponding packet containing the compressed - * frame. It must be accessed using av_frame_get_pkt_size() and - * av_frame_set_pkt_size(). + * frame. * It is set to a negative value if unknown. * - encoding: unused * - decoding: set by libavcodec, read by user. @@ -508,13 +517,11 @@ typedef struct AVFrame { #if FF_API_FRAME_QP /** * QP table - * Not to be accessed directly from outside libavutil */ attribute_deprecated int8_t *qscale_table; /** * QP store stride - * Not to be accessed directly from outside libavutil */ attribute_deprecated int qstride; @@ -522,9 +529,6 @@ typedef struct AVFrame { attribute_deprecated int qscale_type; - /** - * Not to be accessed directly from outside libavutil - */ AVBufferRef *qp_table_buf; #endif /** @@ -532,12 +536,38 @@ typedef struct AVFrame { * AVHWFramesContext describing the frame. */ AVBufferRef *hw_frames_ctx; + + /** + * AVBufferRef for free use by the API user. FFmpeg will never check the + * contents of the buffer ref. FFmpeg calls av_buffer_unref() on it when + * the frame is unreferenced. av_frame_copy_props() calls create a new + * reference with av_buffer_ref() for the target frame's opaque_ref field. + * + * This is unrelated to the opaque field, although it serves a similar + * purpose. + */ + AVBufferRef *opaque_ref; + + /** + * @anchor cropping + * @name Cropping + * Video frames only. The number of pixels to discard from the the + * top/bottom/left/right border of the frame to obtain the sub-rectangle of + * the frame intended for presentation. + * @{ + */ + size_t crop_top; + size_t crop_bottom; + size_t crop_left; + size_t crop_right; + /** + * @} + */ } AVFrame; /** - * Accessors for some AVFrame fields. - * The position of these field in the structure is not part of the ABI, - * they should not be accessed directly outside libavutil. + * Accessors for some AVFrame fields. These used to be provided for ABI + * compatibility, and do not need to be used anymore. */ int64_t av_frame_get_best_effort_timestamp(const AVFrame *frame); void av_frame_set_best_effort_timestamp(AVFrame *frame, int64_t val); @@ -651,7 +681,9 @@ void av_frame_move_ref(AVFrame *dst, AVFrame *src); * cases. * * @param frame frame in which to store the new buffers. - * @param align required buffer size alignment + * @param align Required buffer size alignment. If equal to 0, alignment will be + * chosen automatically for the current CPU. It is highly + * recommended to pass 0 here unless you know what you are doing. * * @return 0 on success, a negative AVERROR on error. */ @@ -743,6 +775,40 @@ AVFrameSideData *av_frame_get_side_data(const AVFrame *frame, */ void av_frame_remove_side_data(AVFrame *frame, enum AVFrameSideDataType type); + +/** + * Flags for frame cropping. + */ +enum { + /** + * Apply the maximum possible cropping, even if it requires setting the + * AVFrame.data[] entries to unaligned pointers. Passing unaligned data + * to FFmpeg API is generally not allowed, and causes undefined behavior + * (such as crashes). You can pass unaligned data only to FFmpeg APIs that + * are explicitly documented to accept it. Use this flag only if you + * absolutely know what you are doing. + */ + AV_FRAME_CROP_UNALIGNED = 1 << 0, +}; + +/** + * Crop the given video AVFrame according to its crop_left/crop_top/crop_right/ + * crop_bottom fields. If cropping is successful, the function will adjust the + * data pointers and the width/height fields, and set the crop fields to 0. + * + * In all cases, the cropping boundaries will be rounded to the inherent + * alignment of the pixel format. In some cases, such as for opaque hwaccel + * formats, the left/top cropping is ignored. The crop fields are set to 0 even + * if the cropping was rounded or ignored. + * + * @param frame the frame which should be cropped + * @param flags Some combination of AV_FRAME_CROP_* flags, or 0. + * + * @return >= 0 on success, a negative AVERROR on error. If the cropping fields + * were invalid, AVERROR(ERANGE) is returned, and nothing is changed. + */ +int av_frame_apply_cropping(AVFrame *frame, int flags); + /** * @return a string identifying the side data type */ diff --git a/media/ffvpx/libavutil/hwcontext.h b/media/ffvpx/libavutil/hwcontext.h index 5e2af092a410..03334e20e06c 100644 --- a/media/ffvpx/libavutil/hwcontext.h +++ b/media/ffvpx/libavutil/hwcontext.h @@ -30,6 +30,10 @@ enum AVHWDeviceType { AV_HWDEVICE_TYPE_VAAPI, AV_HWDEVICE_TYPE_DXVA2, AV_HWDEVICE_TYPE_QSV, + AV_HWDEVICE_TYPE_VIDEOTOOLBOX, + AV_HWDEVICE_TYPE_NONE, + AV_HWDEVICE_TYPE_D3D11VA, + AV_HWDEVICE_TYPE_DRM, }; typedef struct AVHWDeviceInternal AVHWDeviceInternal; @@ -223,10 +227,36 @@ typedef struct AVHWFramesContext { } AVHWFramesContext; /** - * Allocate an AVHWDeviceContext for a given pixel format. + * Look up an AVHWDeviceType by name. * - * @param format a hwaccel pixel format (AV_PIX_FMT_FLAG_HWACCEL must be set - * on the corresponding format descriptor) + * @param name String name of the device type (case-insensitive). + * @return The type from enum AVHWDeviceType, or AV_HWDEVICE_TYPE_NONE if + * not found. + */ +enum AVHWDeviceType av_hwdevice_find_type_by_name(const char *name); + +/** Get the string name of an AVHWDeviceType. + * + * @param type Type from enum AVHWDeviceType. + * @return Pointer to a static string containing the name, or NULL if the type + * is not valid. + */ +const char *av_hwdevice_get_type_name(enum AVHWDeviceType type); + +/** + * Iterate over supported device types. + * + * @param type AV_HWDEVICE_TYPE_NONE initially, then the previous type + * returned by this function in subsequent iterations. + * @return The next usable device type from enum AVHWDeviceType, or + * AV_HWDEVICE_TYPE_NONE if there are no more. + */ +enum AVHWDeviceType av_hwdevice_iterate_types(enum AVHWDeviceType prev); + +/** + * Allocate an AVHWDeviceContext for a given hardware type. + * + * @param type the type of the hardware device to allocate. * @return a reference to the newly created AVHWDeviceContext on success or NULL * on failure. */ @@ -270,6 +300,32 @@ int av_hwdevice_ctx_init(AVBufferRef *ref); int av_hwdevice_ctx_create(AVBufferRef **device_ctx, enum AVHWDeviceType type, const char *device, AVDictionary *opts, int flags); +/** + * Create a new device of the specified type from an existing device. + * + * If the source device is a device of the target type or was originally + * derived from such a device (possibly through one or more intermediate + * devices of other types), then this will return a reference to the + * existing device of the same type as is requested. + * + * Otherwise, it will attempt to derive a new device from the given source + * device. If direct derivation to the new type is not implemented, it will + * attempt the same derivation from each ancestor of the source device in + * turn looking for an implemented derivation method. + * + * @param dst_ctx On success, a reference to the newly-created + * AVHWDeviceContext. + * @param type The type of the new device to create. + * @param src_ctx A reference to an existing AVHWDeviceContext which will be + * used to create the new device. + * @param flags Currently unused; should be set to zero. + * @return Zero on success, a negative AVERROR code on failure. + */ +int av_hwdevice_ctx_create_derived(AVBufferRef **dst_ctx, + enum AVHWDeviceType type, + AVBufferRef *src_ctx, int flags); + + /** * Allocate an AVHWFramesContext tied to a given device context. * @@ -318,6 +374,14 @@ int av_hwframe_get_buffer(AVBufferRef *hwframe_ctx, AVFrame *frame, int flags); * If dst->format is set, then this format will be used, otherwise (when * dst->format is AV_PIX_FMT_NONE) the first acceptable format will be chosen. * + * The two frames must have matching allocated dimensions (i.e. equal to + * AVHWFramesContext.width/height), since not all device types support + * transferring a sub-rectangle of the whole surface. The display dimensions + * (i.e. AVFrame.width/height) may be smaller than the allocated dimensions, but + * also have to be equal for both frames. When the display dimensions are + * smaller than the allocated dimensions, the content of the padding in the + * destination frame is unspecified. + * * @param dst the destination frame. dst is not touched on failure. * @param src the source frame. * @param flags currently unused, should be set to zero @@ -410,7 +474,7 @@ void *av_hwdevice_hwconfig_alloc(AVBufferRef *device_ctx); * configuration is provided, returns the maximum possible capabilities * of the device. * - * @param device_ctx a reference to the associated AVHWDeviceContext. + * @param ref a reference to the associated AVHWDeviceContext. * @param hwconfig a filled HW-specific configuration structure, or NULL * to return the maximum possible capabilities of the device. * @return AVHWFramesConstraints structure describing the constraints @@ -426,4 +490,93 @@ AVHWFramesConstraints *av_hwdevice_get_hwframe_constraints(AVBufferRef *ref, */ void av_hwframe_constraints_free(AVHWFramesConstraints **constraints); + +/** + * Flags to apply to frame mappings. + */ +enum { + /** + * The mapping must be readable. + */ + AV_HWFRAME_MAP_READ = 1 << 0, + /** + * The mapping must be writeable. + */ + AV_HWFRAME_MAP_WRITE = 1 << 1, + /** + * The mapped frame will be overwritten completely in subsequent + * operations, so the current frame data need not be loaded. Any values + * which are not overwritten are unspecified. + */ + AV_HWFRAME_MAP_OVERWRITE = 1 << 2, + /** + * The mapping must be direct. That is, there must not be any copying in + * the map or unmap steps. Note that performance of direct mappings may + * be much lower than normal memory. + */ + AV_HWFRAME_MAP_DIRECT = 1 << 3, +}; + +/** + * Map a hardware frame. + * + * This has a number of different possible effects, depending on the format + * and origin of the src and dst frames. On input, src should be a usable + * frame with valid buffers and dst should be blank (typically as just created + * by av_frame_alloc()). src should have an associated hwframe context, and + * dst may optionally have a format and associated hwframe context. + * + * If src was created by mapping a frame from the hwframe context of dst, + * then this function undoes the mapping - dst is replaced by a reference to + * the frame that src was originally mapped from. + * + * If both src and dst have an associated hwframe context, then this function + * attempts to map the src frame from its hardware context to that of dst and + * then fill dst with appropriate data to be usable there. This will only be + * possible if the hwframe contexts and associated devices are compatible - + * given compatible devices, av_hwframe_ctx_create_derived() can be used to + * create a hwframe context for dst in which mapping should be possible. + * + * If src has a hwframe context but dst does not, then the src frame is + * mapped to normal memory and should thereafter be usable as a normal frame. + * If the format is set on dst, then the mapping will attempt to create dst + * with that format and fail if it is not possible. If format is unset (is + * AV_PIX_FMT_NONE) then dst will be mapped with whatever the most appropriate + * format to use is (probably the sw_format of the src hwframe context). + * + * A return value of AVERROR(ENOSYS) indicates that the mapping is not + * possible with the given arguments and hwframe setup, while other return + * values indicate that it failed somehow. + * + * @param dst Destination frame, to contain the mapping. + * @param src Source frame, to be mapped. + * @param flags Some combination of AV_HWFRAME_MAP_* flags. + * @return Zero on success, negative AVERROR code on failure. + */ +int av_hwframe_map(AVFrame *dst, const AVFrame *src, int flags); + + +/** + * Create and initialise an AVHWFramesContext as a mapping of another existing + * AVHWFramesContext on a different device. + * + * av_hwframe_ctx_init() should not be called after this. + * + * @param derived_frame_ctx On success, a reference to the newly created + * AVHWFramesContext. + * @param derived_device_ctx A reference to the device to create the new + * AVHWFramesContext on. + * @param source_frame_ctx A reference to an existing AVHWFramesContext + * which will be mapped to the derived context. + * @param flags Some combination of AV_HWFRAME_MAP_* flags, defining the + * mapping parameters to apply to frames which are allocated + * in the derived device. + * @return Zero on success, negative AVERROR code on failure. + */ +int av_hwframe_ctx_create_derived(AVBufferRef **derived_frame_ctx, + enum AVPixelFormat format, + AVBufferRef *derived_device_ctx, + AVBufferRef *source_frame_ctx, + int flags); + #endif /* AVUTIL_HWCONTEXT_H */ diff --git a/media/ffvpx/libavutil/imgutils.c b/media/ffvpx/libavutil/imgutils.c index 37808e53d05f..50051788041d 100644 --- a/media/ffvpx/libavutil/imgutils.c +++ b/media/ffvpx/libavutil/imgutils.c @@ -24,6 +24,7 @@ #include "avassert.h" #include "common.h" #include "imgutils.h" +#include "imgutils_internal.h" #include "internal.h" #include "intreadwrite.h" #include "log.h" @@ -248,19 +249,38 @@ static const AVClass imgutils_class = { .parent_log_context_offset = offsetof(ImgUtils, log_ctx), }; -int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx) +int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx) { ImgUtils imgutils = { .class = &imgutils_class, .log_offset = log_offset, .log_ctx = log_ctx, }; + int64_t stride = av_image_get_linesize(pix_fmt, w, 0); + if (stride <= 0) + stride = 8LL*w; + stride += 128*8; - if ((int)w>0 && (int)h>0 && (w+128)*(uint64_t)(h+128) < INT_MAX/8) - return 0; + if ((int)w<=0 || (int)h<=0 || stride >= INT_MAX || stride*(uint64_t)(h+128) >= INT_MAX) { + av_log(&imgutils, AV_LOG_ERROR, "Picture size %ux%u is invalid\n", w, h); + return AVERROR(EINVAL); + } - av_log(&imgutils, AV_LOG_ERROR, "Picture size %ux%u is invalid\n", w, h); - return AVERROR(EINVAL); + if (max_pixels < INT64_MAX) { + if (w*(int64_t)h > max_pixels) { + av_log(&imgutils, AV_LOG_ERROR, + "Picture size %ux%u exceeds specified max pixel count %"PRId64", see the documentation if you wish to increase it\n", + w, h, max_pixels); + return AVERROR(EINVAL); + } + } + + return 0; +} + +int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx) +{ + return av_image_check_size2(w, h, INT64_MAX, AV_PIX_FMT_NONE, log_offset, log_ctx); } int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar) @@ -284,9 +304,9 @@ int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar) return AVERROR(EINVAL); } -void av_image_copy_plane(uint8_t *dst, int dst_linesize, - const uint8_t *src, int src_linesize, - int bytewidth, int height) +static void image_copy_plane(uint8_t *dst, ptrdiff_t dst_linesize, + const uint8_t *src, ptrdiff_t src_linesize, + ptrdiff_t bytewidth, int height) { if (!dst || !src) return; @@ -299,9 +319,33 @@ void av_image_copy_plane(uint8_t *dst, int dst_linesize, } } -void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], - const uint8_t *src_data[4], const int src_linesizes[4], - enum AVPixelFormat pix_fmt, int width, int height) +static void image_copy_plane_uc_from(uint8_t *dst, ptrdiff_t dst_linesize, + const uint8_t *src, ptrdiff_t src_linesize, + ptrdiff_t bytewidth, int height) +{ + int ret = -1; + +#if ARCH_X86 + ret = ff_image_copy_plane_uc_from_x86(dst, dst_linesize, src, src_linesize, + bytewidth, height); +#endif + + if (ret < 0) + image_copy_plane(dst, dst_linesize, src, src_linesize, bytewidth, height); +} + +void av_image_copy_plane(uint8_t *dst, int dst_linesize, + const uint8_t *src, int src_linesize, + int bytewidth, int height) +{ + image_copy_plane(dst, dst_linesize, src, src_linesize, bytewidth, height); +} + +static void image_copy(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4], + const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4], + enum AVPixelFormat pix_fmt, int width, int height, + void (*copy_plane)(uint8_t *, ptrdiff_t, const uint8_t *, + ptrdiff_t, ptrdiff_t, int)) { const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); @@ -310,9 +354,9 @@ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], if (desc->flags & AV_PIX_FMT_FLAG_PAL || desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL) { - av_image_copy_plane(dst_data[0], dst_linesizes[0], - src_data[0], src_linesizes[0], - width, height); + copy_plane(dst_data[0], dst_linesizes[0], + src_data[0], src_linesizes[0], + width, height); /* copy the palette */ memcpy(dst_data[1], src_data[1], 4*256); } else { @@ -323,7 +367,7 @@ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], for (i = 0; i < planes_nb; i++) { int h = height; - int bwidth = av_image_get_linesize(pix_fmt, width, i); + ptrdiff_t bwidth = av_image_get_linesize(pix_fmt, width, i); if (bwidth < 0) { av_log(NULL, AV_LOG_ERROR, "av_image_get_linesize failed\n"); return; @@ -331,13 +375,37 @@ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], if (i == 1 || i == 2) { h = AV_CEIL_RSHIFT(height, desc->log2_chroma_h); } - av_image_copy_plane(dst_data[i], dst_linesizes[i], - src_data[i], src_linesizes[i], - bwidth, h); + copy_plane(dst_data[i], dst_linesizes[i], + src_data[i], src_linesizes[i], + bwidth, h); } } } +void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], + const uint8_t *src_data[4], const int src_linesizes[4], + enum AVPixelFormat pix_fmt, int width, int height) +{ + ptrdiff_t dst_linesizes1[4], src_linesizes1[4]; + int i; + + for (i = 0; i < 4; i++) { + dst_linesizes1[i] = dst_linesizes[i]; + src_linesizes1[i] = src_linesizes[i]; + } + + image_copy(dst_data, dst_linesizes1, src_data, src_linesizes1, pix_fmt, + width, height, image_copy_plane); +} + +void av_image_copy_uc_from(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4], + const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4], + enum AVPixelFormat pix_fmt, int width, int height) +{ + image_copy(dst_data, dst_linesizes, src_data, src_linesizes, pix_fmt, + width, height, image_copy_plane_uc_from); +} + int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], const uint8_t *src, enum AVPixelFormat pix_fmt, int width, int height, int align) @@ -423,3 +491,170 @@ int av_image_copy_to_buffer(uint8_t *dst, int dst_size, return size; } + +// Fill dst[0..dst_size] with the bytes in clear[0..clear_size]. The clear +// bytes are repeated until dst_size is reached. If dst_size is unaligned (i.e. +// dst_size%clear_size!=0), the remaining data will be filled with the beginning +// of the clear data only. +static void memset_bytes(uint8_t *dst, size_t dst_size, uint8_t *clear, + size_t clear_size) +{ + size_t pos = 0; + int same = 1; + int i; + + if (!clear_size) + return; + + // Reduce to memset() if possible. + for (i = 0; i < clear_size; i++) { + if (clear[i] != clear[0]) { + same = 0; + break; + } + } + if (same) + clear_size = 1; + + if (clear_size == 1) { + memset(dst, clear[0], dst_size); + dst_size = 0; + } else if (clear_size == 2) { + uint16_t val = AV_RN16(clear); + for (; dst_size >= 2; dst_size -= 2) { + AV_WN16(dst, val); + dst += 2; + } + } else if (clear_size == 4) { + uint32_t val = AV_RN32(clear); + for (; dst_size >= 4; dst_size -= 4) { + AV_WN32(dst, val); + dst += 4; + } + } else if (clear_size == 8) { + uint32_t val = AV_RN64(clear); + for (; dst_size >= 8; dst_size -= 8) { + AV_WN64(dst, val); + dst += 8; + } + } + + for (; dst_size; dst_size--) + *dst++ = clear[pos++ % clear_size]; +} + +// Maximum size in bytes of a plane element (usually a pixel, or multiple pixels +// if it's a subsampled packed format). +#define MAX_BLOCK_SIZE 32 + +int av_image_fill_black(uint8_t *dst_data[4], const ptrdiff_t dst_linesize[4], + enum AVPixelFormat pix_fmt, enum AVColorRange range, + int width, int height) +{ + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(pix_fmt); + int nb_planes = av_pix_fmt_count_planes(pix_fmt); + // A pixel or a group of pixels on each plane, with a value that represents black. + // Consider e.g. AV_PIX_FMT_UYVY422 for non-trivial cases. + uint8_t clear_block[4][MAX_BLOCK_SIZE] = {{0}}; // clear padding with 0 + int clear_block_size[4] = {0}; + ptrdiff_t plane_line_bytes[4] = {0}; + int rgb, limited; + int plane, c; + + if (!desc || nb_planes < 1 || nb_planes > 4 || desc->flags & AV_PIX_FMT_FLAG_HWACCEL) + return AVERROR(EINVAL); + + rgb = !!(desc->flags & AV_PIX_FMT_FLAG_RGB); + limited = !rgb && range != AVCOL_RANGE_JPEG; + + if (desc->flags & AV_PIX_FMT_FLAG_BITSTREAM) { + ptrdiff_t bytewidth = av_image_get_linesize(pix_fmt, width, 0); + uint8_t *data; + int mono = pix_fmt == AV_PIX_FMT_MONOWHITE || pix_fmt == AV_PIX_FMT_MONOBLACK; + int fill = pix_fmt == AV_PIX_FMT_MONOWHITE ? 0xFF : 0; + if (nb_planes != 1 || !(rgb || mono) || bytewidth < 1) + return AVERROR(EINVAL); + + if (!dst_data) + return 0; + + data = dst_data[0]; + + // (Bitstream + alpha will be handled incorrectly - it'll remain transparent.) + for (;height > 0; height--) { + memset(data, fill, bytewidth); + data += dst_linesize[0]; + } + return 0; + } + + for (c = 0; c < desc->nb_components; c++) { + const AVComponentDescriptor comp = desc->comp[c]; + + // We try to operate on entire non-subsampled pixel groups (for + // AV_PIX_FMT_UYVY422 this would mean two consecutive pixels). + clear_block_size[comp.plane] = FFMAX(clear_block_size[comp.plane], comp.step); + + if (clear_block_size[comp.plane] > MAX_BLOCK_SIZE) + return AVERROR(EINVAL); + } + + // Create a byte array for clearing 1 pixel (sometimes several pixels). + for (c = 0; c < desc->nb_components; c++) { + const AVComponentDescriptor comp = desc->comp[c]; + // (Multiple pixels happen e.g. with AV_PIX_FMT_UYVY422.) + int w = clear_block_size[comp.plane] / comp.step; + uint8_t *c_data[4]; + const int c_linesize[4] = {0}; + uint16_t src_array[MAX_BLOCK_SIZE]; + uint16_t src = 0; + int x; + + if (comp.depth > 16) + return AVERROR(EINVAL); + if (!rgb && comp.depth < 8) + return AVERROR(EINVAL); + if (w < 1) + return AVERROR(EINVAL); + + if (c == 0 && limited) { + src = 16 << (comp.depth - 8); + } else if ((c == 1 || c == 2) && !rgb) { + src = 128 << (comp.depth - 8); + } else if (c == 3) { + // (Assume even limited YUV uses full range alpha.) + src = (1 << comp.depth) - 1; + } + + for (x = 0; x < w; x++) + src_array[x] = src; + + for (x = 0; x < 4; x++) + c_data[x] = &clear_block[x][0]; + + av_write_image_line(src_array, c_data, c_linesize, desc, 0, 0, c, w); + } + + for (plane = 0; plane < nb_planes; plane++) { + plane_line_bytes[plane] = av_image_get_linesize(pix_fmt, width, plane); + if (plane_line_bytes[plane] < 0) + return AVERROR(EINVAL); + } + + if (!dst_data) + return 0; + + for (plane = 0; plane < nb_planes; plane++) { + size_t bytewidth = plane_line_bytes[plane]; + uint8_t *data = dst_data[plane]; + int chroma_div = plane == 1 || plane == 2 ? desc->log2_chroma_h : 0; + int plane_h = ((height + ( 1 << chroma_div) - 1)) >> chroma_div; + + for (; plane_h > 0; plane_h--) { + memset_bytes(data, bytewidth, &clear_block[plane][0], clear_block_size[plane]); + data += dst_linesize[plane]; + } + } + + return 0; +} diff --git a/media/ffvpx/libavutil/imgutils.h b/media/ffvpx/libavutil/imgutils.h index 23282a38fa79..5b790ecf0ab3 100644 --- a/media/ffvpx/libavutil/imgutils.h +++ b/media/ffvpx/libavutil/imgutils.h @@ -120,6 +120,24 @@ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], const uint8_t *src_data[4], const int src_linesizes[4], enum AVPixelFormat pix_fmt, int width, int height); +/** + * Copy image data located in uncacheable (e.g. GPU mapped) memory. Where + * available, this function will use special functionality for reading from such + * memory, which may result in greatly improved performance compared to plain + * av_image_copy(). + * + * The data pointers and the linesizes must be aligned to the maximum required + * by the CPU architecture. + * + * @note The linesize parameters have the type ptrdiff_t here, while they are + * int for av_image_copy(). + * @note On x86, the linesizes currently need to be aligned to the cacheline + * size (i.e. 64) to get improved performance. + */ +void av_image_copy_uc_from(uint8_t *dst_data[4], const ptrdiff_t dst_linesizes[4], + const uint8_t *src_data[4], const ptrdiff_t src_linesizes[4], + enum AVPixelFormat pix_fmt, int width, int height); + /** * Setup the data pointers and linesizes based on the specified image * parameters and the provided array. @@ -137,7 +155,7 @@ void av_image_copy(uint8_t *dst_data[4], int dst_linesizes[4], * one call, use av_image_alloc(). * * @param dst_data data pointers to be filled in - * @param dst_linesizes linesizes for the image in dst_data to be filled in + * @param dst_linesize linesizes for the image in dst_data to be filled in * @param src buffer which will contain or contains the actual image data, can be NULL * @param pix_fmt the pixel format of the image * @param width the width of the image in pixels @@ -154,7 +172,11 @@ int av_image_fill_arrays(uint8_t *dst_data[4], int dst_linesize[4], * Return the size in bytes of the amount of data required to store an * image with the given parameters. * - * @param[in] align the assumed linesize alignment + * @param pix_fmt the pixel format of the image + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @param align the assumed linesize alignment + * @return the buffer size in bytes, a negative error code in case of failure */ int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, int align); @@ -167,7 +189,7 @@ int av_image_get_buffer_size(enum AVPixelFormat pix_fmt, int width, int height, * @param dst a buffer into which picture data will be copied * @param dst_size the size in bytes of dst * @param src_data pointers containing the source image data - * @param src_linesizes linesizes for the image in src_data + * @param src_linesize linesizes for the image in src_data * @param pix_fmt the pixel format of the source image * @param width the width of the source image in pixels * @param height the height of the source image in pixels @@ -191,6 +213,21 @@ int av_image_copy_to_buffer(uint8_t *dst, int dst_size, */ int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *log_ctx); +/** + * Check if the given dimension of an image is valid, meaning that all + * bytes of a plane of an image with the specified pix_fmt can be addressed + * with a signed int. + * + * @param w the width of the picture + * @param h the height of the picture + * @param max_pixels the maximum number of pixels the user wants to accept + * @param pix_fmt the pixel format, can be AV_PIX_FMT_NONE if unknown. + * @param log_offset the offset to sum to the log level for logging with log_ctx + * @param log_ctx the parent logging context, it may be NULL + * @return >= 0 if valid, a negative error code otherwise + */ +int av_image_check_size2(unsigned int w, unsigned int h, int64_t max_pixels, enum AVPixelFormat pix_fmt, int log_offset, void *log_ctx); + /** * Check if the given sample aspect ratio of an image is valid. * @@ -205,6 +242,33 @@ int av_image_check_size(unsigned int w, unsigned int h, int log_offset, void *lo */ int av_image_check_sar(unsigned int w, unsigned int h, AVRational sar); +/** + * Overwrite the image data with black. This is suitable for filling a + * sub-rectangle of an image, meaning the padding between the right most pixel + * and the left most pixel on the next line will not be overwritten. For some + * formats, the image size might be rounded up due to inherent alignment. + * + * If the pixel format has alpha, the alpha is cleared to opaque. + * + * This can return an error if the pixel format is not supported. Normally, all + * non-hwaccel pixel formats should be supported. + * + * Passing NULL for dst_data is allowed. Then the function returns whether the + * operation would have succeeded. (It can return an error if the pix_fmt is + * not supported.) + * + * @param dst_data data pointers to destination image + * @param dst_linesize linesizes for the destination image + * @param pix_fmt the pixel format of the image + * @param range the color range of the image (important for colorspaces such as YUV) + * @param width the width of the image in pixels + * @param height the height of the image in pixels + * @return 0 if the image data was cleared, a negative AVERROR code otherwise + */ +int av_image_fill_black(uint8_t *dst_data[4], const ptrdiff_t dst_linesize[4], + enum AVPixelFormat pix_fmt, enum AVColorRange range, + int width, int height); + /** * @} */ diff --git a/media/ffvpx/libavutil/imgutils_internal.h b/media/ffvpx/libavutil/imgutils_internal.h new file mode 100644 index 000000000000..d5158584133b --- /dev/null +++ b/media/ffvpx/libavutil/imgutils_internal.h @@ -0,0 +1,30 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_IMGUTILS_INTERNAL_H +#define AVUTIL_IMGUTILS_INTERNAL_H + +#include +#include + +int ff_image_copy_plane_uc_from_x86(uint8_t *dst, ptrdiff_t dst_linesize, + const uint8_t *src, ptrdiff_t src_linesize, + ptrdiff_t bytewidth, int height); + + +#endif /* AVUTIL_IMGUTILS_INTERNAL_H */ diff --git a/media/ffvpx/libavutil/internal.h b/media/ffvpx/libavutil/internal.h index e995af97e47e..a2d73e3cc6c6 100644 --- a/media/ffvpx/libavutil/internal.h +++ b/media/ffvpx/libavutil/internal.h @@ -30,6 +30,9 @@ # define NDEBUG #endif +// This can be enabled to allow detection of additional integer overflows with ubsan +//#define CHECKED + #include #include #include @@ -258,6 +261,16 @@ void avpriv_request_sample(void *avc, # define ff_dlog(ctx, ...) do { if (0) av_log(ctx, AV_LOG_DEBUG, __VA_ARGS__); } while (0) #endif +// For debuging we use signed operations so overflows can be detected (by ubsan) +// For production we use unsigned so there are no undefined operations +#ifdef CHECKED +#define SUINT int +#define SUINT32 int32_t +#else +#define SUINT unsigned +#define SUINT32 uint32_t +#endif + /** * Clip and convert a double value into the long long amin-amax range. * This function is needed because conversion of floating point to integers when @@ -340,6 +353,4 @@ void ff_check_pixfmt_descriptors(void); */ int avpriv_dict_set_timestamp(AVDictionary **dict, const char *key, int64_t timestamp); -extern const uint8_t ff_reverse[256]; - #endif /* AVUTIL_INTERNAL_H */ diff --git a/media/ffvpx/libavutil/intreadwrite.h b/media/ffvpx/libavutil/intreadwrite.h index 51fbe30a23ab..d54d4b91d6ce 100644 --- a/media/ffvpx/libavutil/intreadwrite.h +++ b/media/ffvpx/libavutil/intreadwrite.h @@ -229,6 +229,11 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; # define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) # define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) +#elif defined(_MSC_VER) && (defined(_M_ARM) || defined(_M_X64)) && AV_HAVE_FAST_UNALIGNED + +# define AV_RN(s, p) (*((const __unaligned uint##s##_t*)(p))) +# define AV_WN(s, p, v) (*((__unaligned uint##s##_t*)(p)) = (v)) + #elif AV_HAVE_FAST_UNALIGNED # define AV_RN(s, p) (((const av_alias##s*)(p))->u##s) @@ -242,8 +247,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[1]) #endif #ifndef AV_WB16 -# define AV_WB16(p, darg) do { \ - unsigned d = (darg); \ +# define AV_WB16(p, val) do { \ + uint16_t d = (val); \ ((uint8_t*)(p))[1] = (d); \ ((uint8_t*)(p))[0] = (d)>>8; \ } while(0) @@ -255,8 +260,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL16 -# define AV_WL16(p, darg) do { \ - unsigned d = (darg); \ +# define AV_WL16(p, val) do { \ + uint16_t d = (val); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ } while(0) @@ -270,8 +275,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[3]) #endif #ifndef AV_WB32 -# define AV_WB32(p, darg) do { \ - unsigned d = (darg); \ +# define AV_WB32(p, val) do { \ + uint32_t d = (val); \ ((uint8_t*)(p))[3] = (d); \ ((uint8_t*)(p))[2] = (d)>>8; \ ((uint8_t*)(p))[1] = (d)>>16; \ @@ -287,8 +292,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; ((const uint8_t*)(x))[0]) #endif #ifndef AV_WL32 -# define AV_WL32(p, darg) do { \ - unsigned d = (darg); \ +# define AV_WL32(p, val) do { \ + uint32_t d = (val); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ @@ -308,8 +313,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; (uint64_t)((const uint8_t*)(x))[7]) #endif #ifndef AV_WB64 -# define AV_WB64(p, darg) do { \ - uint64_t d = (darg); \ +# define AV_WB64(p, val) do { \ + uint64_t d = (val); \ ((uint8_t*)(p))[7] = (d); \ ((uint8_t*)(p))[6] = (d)>>8; \ ((uint8_t*)(p))[5] = (d)>>16; \ @@ -333,8 +338,8 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; (uint64_t)((const uint8_t*)(x))[0]) #endif #ifndef AV_WL64 -# define AV_WL64(p, darg) do { \ - uint64_t d = (darg); \ +# define AV_WL64(p, val) do { \ + uint64_t d = (val); \ ((uint8_t*)(p))[0] = (d); \ ((uint8_t*)(p))[1] = (d)>>8; \ ((uint8_t*)(p))[2] = (d)>>16; \ diff --git a/media/ffvpx/libavutil/log.c b/media/ffvpx/libavutil/log.c index 44c11cb0917e..be806202ffbb 100644 --- a/media/ffvpx/libavutil/log.c +++ b/media/ffvpx/libavutil/log.c @@ -168,19 +168,19 @@ static void colored_fputs(int level, int tint, const char *str) #else if (local_use_color == 1) { fprintf(stderr, - "\033[%d;3%dm%s\033[0m", + "\033[%"PRIu32";3%"PRIu32"m%s\033[0m", (color[level] >> 4) & 15, color[level] & 15, str); } else if (tint && use_color == 256) { fprintf(stderr, - "\033[48;5;%dm\033[38;5;%dm%s\033[0m", + "\033[48;5;%"PRIu32"m\033[38;5;%dm%s\033[0m", (color[level] >> 16) & 0xff, tint, str); } else if (local_use_color == 256) { fprintf(stderr, - "\033[48;5;%dm\033[38;5;%dm%s\033[0m", + "\033[48;5;%"PRIu32"m\033[38;5;%"PRIu32"m%s\033[0m", (color[level] >> 16) & 0xff, (color[level] >> 8) & 0xff, str); diff --git a/media/ffvpx/libavutil/mathematics.c b/media/ffvpx/libavutil/mathematics.c index 20ff37f5e9d7..1bf044cdf114 100644 --- a/media/ffvpx/libavutil/mathematics.c +++ b/media/ffvpx/libavutil/mathematics.c @@ -115,15 +115,15 @@ int64_t av_rescale_rnd(int64_t a, int64_t b, int64_t c, enum AVRounding rnd) if (t1 > INT64_MAX) return INT64_MIN; return t1; - } #else + /* reference code doing (a*b + r) / c, requires libavutil/integer.h */ AVInteger ai; ai = av_mul_i(av_int2i(a), av_int2i(b)); ai = av_add_i(ai, av_int2i(r)); return av_i2int(av_div_i(ai, av_int2i(c))); - } #endif + } } int64_t av_rescale(int64_t a, int64_t b, int64_t c) diff --git a/media/ffvpx/libavutil/mem.c b/media/ffvpx/libavutil/mem.c index 1a8fc21e98f9..36740f1154bf 100644 --- a/media/ffvpx/libavutil/mem.c +++ b/media/ffvpx/libavutil/mem.c @@ -77,22 +77,12 @@ void av_max_alloc(size_t max){ void *av_malloc(size_t size) { void *ptr = NULL; -#if CONFIG_MEMALIGN_HACK - long diff; -#endif /* let's disallow possibly ambiguous cases */ if (size > (max_alloc_size - 32)) return NULL; -#if CONFIG_MEMALIGN_HACK - ptr = malloc(size + ALIGN); - if (!ptr) - return ptr; - diff = ((~(long)ptr)&(ALIGN - 1)) + 1; - ptr = (char *)ptr + diff; - ((char *)ptr)[-1] = diff; -#elif HAVE_POSIX_MEMALIGN +#if HAVE_POSIX_MEMALIGN if (size) //OS X on SDK 10.6 has a broken posix_memalign implementation if (posix_memalign(&ptr, ALIGN, size)) ptr = NULL; @@ -144,25 +134,11 @@ void *av_malloc(size_t size) void *av_realloc(void *ptr, size_t size) { -#if CONFIG_MEMALIGN_HACK - int diff; -#endif - /* let's disallow possibly ambiguous cases */ if (size > (max_alloc_size - 32)) return NULL; -#if CONFIG_MEMALIGN_HACK - //FIXME this isn't aligned correctly, though it probably isn't needed - if (!ptr) - return av_malloc(size); - diff = ((char *)ptr)[-1]; - av_assert0(diff>0 && diff<=ALIGN); - ptr = realloc((char *)ptr - diff, size + diff); - if (ptr) - ptr = (char *)ptr + diff; - return ptr; -#elif HAVE_ALIGNED_MALLOC +#if HAVE_ALIGNED_MALLOC return _aligned_realloc(ptr, size + !size, ALIGN); #else return realloc(ptr, size + !size); @@ -227,13 +203,7 @@ int av_reallocp_array(void *ptr, size_t nmemb, size_t size) void av_free(void *ptr) { -#if CONFIG_MEMALIGN_HACK - if (ptr) { - int v= ((char *)ptr)[-1]; - av_assert0(v>0 && v<=ALIGN); - free((char *)ptr - v); - } -#elif HAVE_ALIGNED_MALLOC +#if HAVE_ALIGNED_MALLOC _aligned_free(ptr); #else free(ptr); diff --git a/media/ffvpx/libavutil/mem.h b/media/ffvpx/libavutil/mem.h index f9d888478819..527cd03191a9 100644 --- a/media/ffvpx/libavutil/mem.h +++ b/media/ffvpx/libavutil/mem.h @@ -97,7 +97,10 @@ #define DECLARE_ASM_CONST(n,t,v) \ AV_PRAGMA(DATA_ALIGN(v,n)) \ static const t __attribute__((aligned(n))) v -#elif defined(__GNUC__) +#elif defined(__DJGPP__) + #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (FFMIN(n, 16)))) v + #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (FFMIN(n, 16)))) v +#elif defined(__GNUC__) || defined(__clang__) #define DECLARE_ALIGNED(n,t,v) t __attribute__ ((aligned (n))) v #define DECLARE_ASM_CONST(n,t,v) static const t av_used __attribute__ ((aligned (n))) v #elif defined(_MSC_VER) diff --git a/media/ffvpx/libavutil/moz.build b/media/ffvpx/libavutil/moz.build index f825d62cb805..413ac3d44216 100644 --- a/media/ffvpx/libavutil/moz.build +++ b/media/ffvpx/libavutil/moz.build @@ -45,6 +45,7 @@ SOURCES += [ 'rational.c', 'reverse.c', 'samplefmt.c', + 'slicethread.c', 'threadmessage.c', 'time.c', 'timecode.c', diff --git a/media/ffvpx/libavutil/opt.h b/media/ffvpx/libavutil/opt.h index 9430b989e92b..0d893795deec 100644 --- a/media/ffvpx/libavutil/opt.h +++ b/media/ffvpx/libavutil/opt.h @@ -228,6 +228,7 @@ enum AVOptionType{ AV_OPT_TYPE_RATIONAL, AV_OPT_TYPE_BINARY, ///< offset must point to a pointer immediately followed by an int for the length AV_OPT_TYPE_DICT, + AV_OPT_TYPE_UINT64, AV_OPT_TYPE_CONST = 128, AV_OPT_TYPE_IMAGE_SIZE = MKBETAG('S','I','Z','E'), ///< offset must point to two consecutive integers AV_OPT_TYPE_PIXEL_FMT = MKBETAG('P','F','M','T'), diff --git a/media/ffvpx/libavutil/parseutils.c b/media/ffvpx/libavutil/parseutils.c index a2464cfc6e4e..be4ea1ee15e7 100644 --- a/media/ffvpx/libavutil/parseutils.c +++ b/media/ffvpx/libavutil/parseutils.c @@ -140,6 +140,11 @@ static const VideoRateAbbr video_rate_abbrs[]= { { "ntsc-film", { 24000, 1001 } }, }; +static const char *months[12] = { + "january", "february", "march", "april", "may", "june", "july", "august", + "september", "october", "november", "december" +}; + int av_parse_video_size(int *width_ptr, int *height_ptr, const char *str) { int i; @@ -466,6 +471,21 @@ static int date_get_num(const char **pp, return val; } +static int date_get_month(const char **pp) { + int i = 0; + for (; i < 12; i++) { + if (!av_strncasecmp(*pp, months[i], 3)) { + const char *mo_full = months[i] + 3; + int len = strlen(mo_full); + *pp += 3; + if (len > 0 && !av_strncasecmp(*pp, mo_full, len)) + *pp += len; + return i; + } + } + return -1; +} + char *av_small_strptime(const char *p, const char *fmt, struct tm *dt) { int c, val; @@ -525,6 +545,14 @@ char *av_small_strptime(const char *p, const char *fmt, struct tm *dt) if (!p) return NULL; break; + case 'b': + case 'B': + case 'h': + val = date_get_month(&p); + if (val == -1) + return NULL; + dt->tm_mon = val; + break; case '%': if (*p++ != '%') return NULL; diff --git a/media/ffvpx/libavutil/pixdesc.c b/media/ffvpx/libavutil/pixdesc.c index b715fce15dcf..2cfab89c030f 100644 --- a/media/ffvpx/libavutil/pixdesc.c +++ b/media/ffvpx/libavutil/pixdesc.c @@ -560,6 +560,69 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { }, .flags = AV_PIX_FMT_FLAG_RGB, }, + [AV_PIX_FMT_GRAY9BE] = { + .name = "gray9be", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y9be", + }, + [AV_PIX_FMT_GRAY9LE] = { + .name = "gray9le", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 9, 1, 8, 1 }, /* Y */ + }, + .alias = "y9le", + }, + [AV_PIX_FMT_GRAY10BE] = { + .name = "gray10be", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y10be", + }, + [AV_PIX_FMT_GRAY10LE] = { + .name = "gray10le", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 10, 1, 9, 1 }, /* Y */ + }, + .alias = "y10le", + }, + [AV_PIX_FMT_GRAY12BE] = { + .name = "gray12be", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ + }, + .flags = AV_PIX_FMT_FLAG_BE, + .alias = "y12be", + }, + [AV_PIX_FMT_GRAY12LE] = { + .name = "gray12le", + .nb_components = 1, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 0, 2, 0, 0, 12, 1, 11, 1 }, /* Y */ + }, + .alias = "y12le", + }, [AV_PIX_FMT_GRAY16BE] = { .name = "gray16be", .nb_components = 1, @@ -1873,62 +1936,62 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { [AV_PIX_FMT_BAYER_BGGR8] = { .name = "bayer_bggr8", BAYER8_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_BGGR16LE] = { .name = "bayer_bggr16le", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_BGGR16BE] = { .name = "bayer_bggr16be", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_RGGB8] = { .name = "bayer_rggb8", BAYER8_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_RGGB16LE] = { .name = "bayer_rggb16le", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_RGGB16BE] = { .name = "bayer_rggb16be", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_GBRG8] = { .name = "bayer_gbrg8", BAYER8_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_GBRG16LE] = { .name = "bayer_gbrg16le", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_GBRG16BE] = { .name = "bayer_gbrg16be", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_GRBG8] = { .name = "bayer_grbg8", BAYER8_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_GRBG16LE] = { .name = "bayer_grbg16le", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_BAYER_GRBG16BE] = { .name = "bayer_grbg16be", BAYER16_DESC_COMMON - .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_BAYER, }, [AV_PIX_FMT_NV16] = { .name = "nv16", @@ -2036,6 +2099,30 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { }, .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, }, + [AV_PIX_FMT_P016LE] = { + .name = "p016le", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { + { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ + { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */ + { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR, + }, + [AV_PIX_FMT_P016BE] = { + .name = "p016be", + .nb_components = 3, + .log2_chroma_w = 1, + .log2_chroma_h = 1, + .comp = { + { 0, 2, 0, 0, 16, 1, 15, 1 }, /* Y */ + { 1, 4, 0, 0, 16, 3, 15, 1 }, /* U */ + { 1, 4, 2, 0, 16, 3, 15, 3 }, /* V */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_BE, + }, [AV_PIX_FMT_GBRAP12LE] = { .name = "gbrap12le", .nb_components = 4, @@ -2092,18 +2179,80 @@ static const AVPixFmtDescriptor av_pix_fmt_descriptors[AV_PIX_FMT_NB] = { .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_ALPHA, }, + [AV_PIX_FMT_D3D11] = { + .name = "d3d11", + .flags = AV_PIX_FMT_FLAG_HWACCEL, + }, + [AV_PIX_FMT_GBRPF32BE] = { + .name = "gbrpf32be", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, + }, + [AV_PIX_FMT_GBRPF32LE] = { + .name = "gbrpf32le", + .nb_components = 3, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_FLOAT | AV_PIX_FMT_FLAG_RGB, + }, + [AV_PIX_FMT_GBRAPF32BE] = { + .name = "gbrapf32be", + .nb_components = 4, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ + { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_BE | AV_PIX_FMT_FLAG_PLANAR | + AV_PIX_FMT_FLAG_ALPHA | AV_PIX_FMT_FLAG_RGB | + AV_PIX_FMT_FLAG_FLOAT, + }, + [AV_PIX_FMT_GBRAPF32LE] = { + .name = "gbrapf32le", + .nb_components = 4, + .log2_chroma_w = 0, + .log2_chroma_h = 0, + .comp = { + { 2, 4, 0, 0, 32, 3, 31, 1 }, /* R */ + { 0, 4, 0, 0, 32, 3, 31, 1 }, /* G */ + { 1, 4, 0, 0, 32, 3, 31, 1 }, /* B */ + { 3, 4, 0, 0, 32, 3, 31, 1 }, /* A */ + }, + .flags = AV_PIX_FMT_FLAG_PLANAR | AV_PIX_FMT_FLAG_ALPHA | + AV_PIX_FMT_FLAG_RGB | AV_PIX_FMT_FLAG_FLOAT, + }, + [AV_PIX_FMT_DRM_PRIME] = { + .name = "drm_prime", + .flags = AV_PIX_FMT_FLAG_HWACCEL, + }, }; #if FF_API_PLUS1_MINUS1 FF_ENABLE_DEPRECATION_WARNINGS #endif -static const char *color_range_names[] = { +static const char * const color_range_names[] = { [AVCOL_RANGE_UNSPECIFIED] = "unknown", [AVCOL_RANGE_MPEG] = "tv", [AVCOL_RANGE_JPEG] = "pc", }; -static const char *color_primaries_names[AVCOL_PRI_NB] = { +static const char * const color_primaries_names[AVCOL_PRI_NB] = { [AVCOL_PRI_RESERVED0] = "reserved", [AVCOL_PRI_BT709] = "bt709", [AVCOL_PRI_UNSPECIFIED] = "unknown", @@ -2114,12 +2263,13 @@ static const char *color_primaries_names[AVCOL_PRI_NB] = { [AVCOL_PRI_SMPTE240M] = "smpte240m", [AVCOL_PRI_FILM] = "film", [AVCOL_PRI_BT2020] = "bt2020", - [AVCOL_PRI_SMPTEST428_1] = "smpte428-1", + [AVCOL_PRI_SMPTE428] = "smpte428", [AVCOL_PRI_SMPTE431] = "smpte431", [AVCOL_PRI_SMPTE432] = "smpte432", + [AVCOL_PRI_JEDEC_P22] = "jedec-p22", }; -static const char *color_transfer_names[] = { +static const char * const color_transfer_names[] = { [AVCOL_TRC_RESERVED0] = "reserved", [AVCOL_TRC_BT709] = "bt709", [AVCOL_TRC_UNSPECIFIED] = "unknown", @@ -2135,13 +2285,13 @@ static const char *color_transfer_names[] = { [AVCOL_TRC_BT1361_ECG] = "bt1361e", [AVCOL_TRC_IEC61966_2_1] = "iec61966-2-1", [AVCOL_TRC_BT2020_10] = "bt2020-10", - [AVCOL_TRC_BT2020_12] = "bt2020-20", - [AVCOL_TRC_SMPTEST2084] = "smpte2084", - [AVCOL_TRC_SMPTEST428_1] = "smpte428-1", + [AVCOL_TRC_BT2020_12] = "bt2020-12", + [AVCOL_TRC_SMPTE2084] = "smpte2084", + [AVCOL_TRC_SMPTE428] = "smpte428", [AVCOL_TRC_ARIB_STD_B67] = "arib-std-b67", }; -static const char *color_space_names[] = { +static const char * const color_space_names[] = { [AVCOL_SPC_RGB] = "gbr", [AVCOL_SPC_BT709] = "bt709", [AVCOL_SPC_UNSPECIFIED] = "unknown", @@ -2150,13 +2300,16 @@ static const char *color_space_names[] = { [AVCOL_SPC_BT470BG] = "bt470bg", [AVCOL_SPC_SMPTE170M] = "smpte170m", [AVCOL_SPC_SMPTE240M] = "smpte240m", - [AVCOL_SPC_YCOCG] = "ycgco", + [AVCOL_SPC_YCGCO] = "ycgco", [AVCOL_SPC_BT2020_NCL] = "bt2020nc", [AVCOL_SPC_BT2020_CL] = "bt2020c", [AVCOL_SPC_SMPTE2085] = "smpte2085", + [AVCOL_SPC_CHROMA_DERIVED_NCL] = "chroma-derived-nc", + [AVCOL_SPC_CHROMA_DERIVED_CL] = "chroma-derived-c", + [AVCOL_SPC_ICTCP] = "ictcp", }; -static const char *chroma_location_names[] = { +static const char * const chroma_location_names[] = { [AVCHROMA_LOC_UNSPECIFIED] = "unspecified", [AVCHROMA_LOC_LEFT] = "left", [AVCHROMA_LOC_CENTER] = "center", @@ -2349,7 +2502,7 @@ void ff_check_pixfmt_descriptors(void){ } else { av_assert0(8*c->step >= c->depth); } - if (!strncmp(d->name, "bayer_", 6)) + if (d->flags & AV_PIX_FMT_FLAG_BAYER) continue; av_read_image_line(tmp, (void*)data, linesize, d, 0, 0, j, 2, 0); av_assert0(tmp[0] == 0 && tmp[1] == 0); @@ -2440,8 +2593,16 @@ static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt, int ret, loss, i, nb_components; int score = INT_MAX - 1; - if (dst_pix_fmt >= AV_PIX_FMT_NB || dst_pix_fmt <= AV_PIX_FMT_NONE) - return ~0; + if (!src_desc || !dst_desc) + return -4; + + if ((src_desc->flags & AV_PIX_FMT_FLAG_HWACCEL) || + (dst_desc->flags & AV_PIX_FMT_FLAG_HWACCEL)) { + if (dst_pix_fmt == src_pix_fmt) + return -1; + else + return -2; + } /* compute loss */ *lossp = loss = 0; @@ -2450,9 +2611,9 @@ static int get_pix_fmt_score(enum AVPixelFormat dst_pix_fmt, return INT_MAX; if ((ret = get_pix_fmt_depth(&src_min_depth, &src_max_depth, src_pix_fmt)) < 0) - return ret; + return -3; if ((ret = get_pix_fmt_depth(&dst_min_depth, &dst_max_depth, dst_pix_fmt)) < 0) - return ret; + return -3; src_color = get_color_type(src_desc); dst_color = get_color_type(dst_desc); @@ -2554,21 +2715,27 @@ enum AVPixelFormat av_find_best_pix_fmt_of_2(enum AVPixelFormat dst_pix_fmt1, en const AVPixFmtDescriptor *desc2 = av_pix_fmt_desc_get(dst_pix_fmt2); int score1, score2; - loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */ - if(!has_alpha) - loss_mask &= ~FF_LOSS_ALPHA; - - score1 = get_pix_fmt_score(dst_pix_fmt1, src_pix_fmt, &loss1, loss_mask); - score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask); - - if (score1 == score2) { - if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) { - dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1; - } else { - dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1; - } + if (!desc1) { + dst_pix_fmt = dst_pix_fmt2; + } else if (!desc2) { + dst_pix_fmt = dst_pix_fmt1; } else { - dst_pix_fmt = score1 < score2 ? dst_pix_fmt2 : dst_pix_fmt1; + loss_mask= loss_ptr?~*loss_ptr:~0; /* use loss mask if provided */ + if(!has_alpha) + loss_mask &= ~FF_LOSS_ALPHA; + + score1 = get_pix_fmt_score(dst_pix_fmt1, src_pix_fmt, &loss1, loss_mask); + score2 = get_pix_fmt_score(dst_pix_fmt2, src_pix_fmt, &loss2, loss_mask); + + if (score1 == score2) { + if(av_get_padded_bits_per_pixel(desc2) != av_get_padded_bits_per_pixel(desc1)) { + dst_pix_fmt = av_get_padded_bits_per_pixel(desc2) < av_get_padded_bits_per_pixel(desc1) ? dst_pix_fmt2 : dst_pix_fmt1; + } else { + dst_pix_fmt = desc2->nb_components < desc1->nb_components ? dst_pix_fmt2 : dst_pix_fmt1; + } + } else { + dst_pix_fmt = score1 < score2 ? dst_pix_fmt2 : dst_pix_fmt1; + } } if (loss_ptr) @@ -2582,26 +2749,91 @@ const char *av_color_range_name(enum AVColorRange range) color_range_names[range] : NULL; } +int av_color_range_from_name(const char *name) +{ + int i; + + for (i = 0; i < FF_ARRAY_ELEMS(color_range_names); i++) { + size_t len = strlen(color_range_names[i]); + if (!strncmp(color_range_names[i], name, len)) + return i; + } + + return AVERROR(EINVAL); +} + const char *av_color_primaries_name(enum AVColorPrimaries primaries) { return (unsigned) primaries < AVCOL_PRI_NB ? color_primaries_names[primaries] : NULL; } +int av_color_primaries_from_name(const char *name) +{ + int i; + + for (i = 0; i < FF_ARRAY_ELEMS(color_primaries_names); i++) { + size_t len = strlen(color_primaries_names[i]); + if (!strncmp(color_primaries_names[i], name, len)) + return i; + } + + return AVERROR(EINVAL); +} + const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer) { return (unsigned) transfer < AVCOL_TRC_NB ? color_transfer_names[transfer] : NULL; } +int av_color_transfer_from_name(const char *name) +{ + int i; + + for (i = 0; i < FF_ARRAY_ELEMS(color_transfer_names); i++) { + size_t len = strlen(color_transfer_names[i]); + if (!strncmp(color_transfer_names[i], name, len)) + return i; + } + + return AVERROR(EINVAL); +} + const char *av_color_space_name(enum AVColorSpace space) { return (unsigned) space < AVCOL_SPC_NB ? color_space_names[space] : NULL; } +int av_color_space_from_name(const char *name) +{ + int i; + + for (i = 0; i < FF_ARRAY_ELEMS(color_space_names); i++) { + size_t len = strlen(color_space_names[i]); + if (!strncmp(color_space_names[i], name, len)) + return i; + } + + return AVERROR(EINVAL); +} + const char *av_chroma_location_name(enum AVChromaLocation location) { return (unsigned) location < AVCHROMA_LOC_NB ? chroma_location_names[location] : NULL; } + +int av_chroma_location_from_name(const char *name) +{ + int i; + + for (i = 0; i < FF_ARRAY_ELEMS(chroma_location_names); i++) { + size_t len = strlen(chroma_location_names[i]); + if (!strncmp(chroma_location_names[i], name, len)) + return i; + } + + return AVERROR(EINVAL); +} diff --git a/media/ffvpx/libavutil/pixdesc.h b/media/ffvpx/libavutil/pixdesc.h index a8ad588913cf..fc3737c4adee 100644 --- a/media/ffvpx/libavutil/pixdesc.h +++ b/media/ffvpx/libavutil/pixdesc.h @@ -172,6 +172,17 @@ typedef struct AVPixFmtDescriptor { */ #define AV_PIX_FMT_FLAG_ALPHA (1 << 7) +/** + * The pixel format is following a Bayer pattern + */ +#define AV_PIX_FMT_FLAG_BAYER (1 << 8) + +/** + * The pixel format contains IEEE-754 floating point values. Precision (double, + * single, or half) should be determined by the pixel size (64, 32, or 16 bits). + */ +#define AV_PIX_FMT_FLAG_FLOAT (1 << 9) + /** * Return the number of bits per pixel used by the pixel format * described by pixdesc. Note that this is not the same as the number @@ -239,26 +250,51 @@ int av_pix_fmt_count_planes(enum AVPixelFormat pix_fmt); */ const char *av_color_range_name(enum AVColorRange range); +/** + * @return the AVColorRange value for name or an AVError if not found. + */ +int av_color_range_from_name(const char *name); + /** * @return the name for provided color primaries or NULL if unknown. */ const char *av_color_primaries_name(enum AVColorPrimaries primaries); +/** + * @return the AVColorPrimaries value for name or an AVError if not found. + */ +int av_color_primaries_from_name(const char *name); + /** * @return the name for provided color transfer or NULL if unknown. */ const char *av_color_transfer_name(enum AVColorTransferCharacteristic transfer); +/** + * @return the AVColorTransferCharacteristic value for name or an AVError if not found. + */ +int av_color_transfer_from_name(const char *name); + /** * @return the name for provided color space or NULL if unknown. */ const char *av_color_space_name(enum AVColorSpace space); +/** + * @return the AVColorSpace value for name or an AVError if not found. + */ +int av_color_space_from_name(const char *name); + /** * @return the name for provided chroma location or NULL if unknown. */ const char *av_chroma_location_name(enum AVChromaLocation location); +/** + * @return the AVChromaLocation value for name or an AVError if not found. + */ +int av_chroma_location_from_name(const char *name); + /** * Return the pixel format corresponding to name. * diff --git a/media/ffvpx/libavutil/pixfmt.h b/media/ffvpx/libavutil/pixfmt.h index 7a3f68be7e24..24889c8e5288 100644 --- a/media/ffvpx/libavutil/pixfmt.h +++ b/media/ffvpx/libavutil/pixfmt.h @@ -240,7 +240,7 @@ enum AVPixelFormat { */ AV_PIX_FMT_MMAL, - AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer + AV_PIX_FMT_D3D11VA_VLD, ///< HW decoding through Direct3D11 via old API, Picture.data[3] contains a ID3D11VideoDecoderOutputView pointer /** * HW acceleration through CUDA. data[i] contain CUdeviceptr pointers @@ -306,6 +306,41 @@ enum AVPixelFormat { AV_PIX_FMT_MEDIACODEC, ///< hardware decoding through MediaCodec + AV_PIX_FMT_GRAY12BE, ///< Y , 12bpp, big-endian + AV_PIX_FMT_GRAY12LE, ///< Y , 12bpp, little-endian + AV_PIX_FMT_GRAY10BE, ///< Y , 10bpp, big-endian + AV_PIX_FMT_GRAY10LE, ///< Y , 10bpp, little-endian + + AV_PIX_FMT_P016LE, ///< like NV12, with 16bpp per component, little-endian + AV_PIX_FMT_P016BE, ///< like NV12, with 16bpp per component, big-endian + + /** + * Hardware surfaces for Direct3D11. + * + * This is preferred over the legacy AV_PIX_FMT_D3D11VA_VLD. The new D3D11 + * hwaccel API and filtering support AV_PIX_FMT_D3D11 only. + * + * data[0] contains a ID3D11Texture2D pointer, and data[1] contains the + * texture array index of the frame as intptr_t if the ID3D11Texture2D is + * an array texture (or always 0 if it's a normal texture). + */ + AV_PIX_FMT_D3D11, + + AV_PIX_FMT_GRAY9BE, ///< Y , 9bpp, big-endian + AV_PIX_FMT_GRAY9LE, ///< Y , 9bpp, little-endian + + AV_PIX_FMT_GBRPF32BE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, big-endian + AV_PIX_FMT_GBRPF32LE, ///< IEEE-754 single precision planar GBR 4:4:4, 96bpp, little-endian + AV_PIX_FMT_GBRAPF32BE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, big-endian + AV_PIX_FMT_GBRAPF32LE, ///< IEEE-754 single precision planar GBRA 4:4:4:4, 128bpp, little-endian + + /** + * DRM-managed buffers exposed through PRIME buffer sharing. + * + * data[0] points to an AVDRMFrameDescriptor. + */ + AV_PIX_FMT_DRM_PRIME, + AV_PIX_FMT_NB ///< number of pixel formats, DO NOT USE THIS if you want to link with shared libav* because the number of formats might differ between versions }; @@ -322,6 +357,9 @@ enum AVPixelFormat { #define AV_PIX_FMT_0RGB32 AV_PIX_FMT_NE(0RGB, BGR0) #define AV_PIX_FMT_0BGR32 AV_PIX_FMT_NE(0BGR, RGB0) +#define AV_PIX_FMT_GRAY9 AV_PIX_FMT_NE(GRAY9BE, GRAY9LE) +#define AV_PIX_FMT_GRAY10 AV_PIX_FMT_NE(GRAY10BE, GRAY10LE) +#define AV_PIX_FMT_GRAY12 AV_PIX_FMT_NE(GRAY12BE, GRAY12LE) #define AV_PIX_FMT_GRAY16 AV_PIX_FMT_NE(GRAY16BE, GRAY16LE) #define AV_PIX_FMT_YA16 AV_PIX_FMT_NE(YA16BE, YA16LE) #define AV_PIX_FMT_RGB48 AV_PIX_FMT_NE(RGB48BE, RGB48LE) @@ -367,6 +405,8 @@ enum AVPixelFormat { #define AV_PIX_FMT_BAYER_GBRG16 AV_PIX_FMT_NE(BAYER_GBRG16BE, BAYER_GBRG16LE) #define AV_PIX_FMT_BAYER_GRBG16 AV_PIX_FMT_NE(BAYER_GRBG16BE, BAYER_GRBG16LE) +#define AV_PIX_FMT_GBRPF32 AV_PIX_FMT_NE(GBRPF32BE, GBRPF32LE) +#define AV_PIX_FMT_GBRAPF32 AV_PIX_FMT_NE(GBRAPF32BE, GBRAPF32LE) #define AV_PIX_FMT_YUVA420P9 AV_PIX_FMT_NE(YUVA420P9BE , YUVA420P9LE) #define AV_PIX_FMT_YUVA422P9 AV_PIX_FMT_NE(YUVA422P9BE , YUVA422P9LE) @@ -382,9 +422,11 @@ enum AVPixelFormat { #define AV_PIX_FMT_NV20 AV_PIX_FMT_NE(NV20BE, NV20LE) #define AV_PIX_FMT_AYUV64 AV_PIX_FMT_NE(AYUV64BE, AYUV64LE) #define AV_PIX_FMT_P010 AV_PIX_FMT_NE(P010BE, P010LE) +#define AV_PIX_FMT_P016 AV_PIX_FMT_NE(P016BE, P016LE) /** * Chromaticity coordinates of the source primaries. + * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.1. */ enum AVColorPrimaries { AVCOL_PRI_RESERVED0 = 0, @@ -398,14 +440,17 @@ enum AVColorPrimaries { AVCOL_PRI_SMPTE240M = 7, ///< functionally identical to above AVCOL_PRI_FILM = 8, ///< colour filters using Illuminant C AVCOL_PRI_BT2020 = 9, ///< ITU-R BT2020 - AVCOL_PRI_SMPTEST428_1 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) - AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) - AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 D65 (2010) + AVCOL_PRI_SMPTE428 = 10, ///< SMPTE ST 428-1 (CIE 1931 XYZ) + AVCOL_PRI_SMPTEST428_1 = AVCOL_PRI_SMPTE428, + AVCOL_PRI_SMPTE431 = 11, ///< SMPTE ST 431-2 (2011) / DCI P3 + AVCOL_PRI_SMPTE432 = 12, ///< SMPTE ST 432-1 (2010) / P3 D65 / Display P3 + AVCOL_PRI_JEDEC_P22 = 22, ///< JEDEC P22 phosphors AVCOL_PRI_NB ///< Not part of ABI }; /** * Color Transfer Characteristic. + * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.2. */ enum AVColorTransferCharacteristic { AVCOL_TRC_RESERVED0 = 0, @@ -424,14 +469,17 @@ enum AVColorTransferCharacteristic { AVCOL_TRC_IEC61966_2_1 = 13, ///< IEC 61966-2-1 (sRGB or sYCC) AVCOL_TRC_BT2020_10 = 14, ///< ITU-R BT2020 for 10-bit system AVCOL_TRC_BT2020_12 = 15, ///< ITU-R BT2020 for 12-bit system - AVCOL_TRC_SMPTEST2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems - AVCOL_TRC_SMPTEST428_1 = 17, ///< SMPTE ST 428-1 + AVCOL_TRC_SMPTE2084 = 16, ///< SMPTE ST 2084 for 10-, 12-, 14- and 16-bit systems + AVCOL_TRC_SMPTEST2084 = AVCOL_TRC_SMPTE2084, + AVCOL_TRC_SMPTE428 = 17, ///< SMPTE ST 428-1 + AVCOL_TRC_SMPTEST428_1 = AVCOL_TRC_SMPTE428, AVCOL_TRC_ARIB_STD_B67 = 18, ///< ARIB STD-B67, known as "Hybrid log-gamma" AVCOL_TRC_NB ///< Not part of ABI }; /** * YUV colorspace type. + * These values match the ones defined by ISO/IEC 23001-8_2013 § 7.3. */ enum AVColorSpace { AVCOL_SPC_RGB = 0, ///< order of coefficients is actually GBR, also IEC 61966-2-1 (sRGB) @@ -442,14 +490,16 @@ enum AVColorSpace { AVCOL_SPC_BT470BG = 5, ///< also ITU-R BT601-6 625 / ITU-R BT1358 625 / ITU-R BT1700 625 PAL & SECAM / IEC 61966-2-4 xvYCC601 AVCOL_SPC_SMPTE170M = 6, ///< also ITU-R BT601-6 525 / ITU-R BT1358 525 / ITU-R BT1700 NTSC AVCOL_SPC_SMPTE240M = 7, ///< functionally identical to above - AVCOL_SPC_YCOCG = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_YCGCO = 8, ///< Used by Dirac / VC-2 and H.264 FRext, see ITU-T SG16 + AVCOL_SPC_YCOCG = AVCOL_SPC_YCGCO, AVCOL_SPC_BT2020_NCL = 9, ///< ITU-R BT2020 non-constant luminance system AVCOL_SPC_BT2020_CL = 10, ///< ITU-R BT2020 constant luminance system AVCOL_SPC_SMPTE2085 = 11, ///< SMPTE 2085, Y'D'zD'x + AVCOL_SPC_CHROMA_DERIVED_NCL = 12, ///< Chromaticity-derived non-constant luminance system + AVCOL_SPC_CHROMA_DERIVED_CL = 13, ///< Chromaticity-derived constant luminance system + AVCOL_SPC_ICTCP = 14, ///< ITU-R BT.2100-0, ICtCp AVCOL_SPC_NB ///< Not part of ABI }; -#define AVCOL_SPC_YCGCO AVCOL_SPC_YCOCG - /** * MPEG vs JPEG YUV range. diff --git a/media/ffvpx/libavutil/reverse.h b/media/ffvpx/libavutil/reverse.h new file mode 100644 index 000000000000..4eb612393281 --- /dev/null +++ b/media/ffvpx/libavutil/reverse.h @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2002-2004 Michael Niedermayer + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_REVERSE_H +#define AVUTIL_REVERSE_H + +#include + +extern const uint8_t ff_reverse[256]; + +#endif /* AVUTIL_REVERSE_H */ diff --git a/media/ffvpx/libavutil/slicethread.c b/media/ffvpx/libavutil/slicethread.c new file mode 100644 index 000000000000..c43f87a2aa4a --- /dev/null +++ b/media/ffvpx/libavutil/slicethread.c @@ -0,0 +1,259 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include "slicethread.h" +#include "mem.h" +#include "thread.h" +#include "avassert.h" + +#if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS + +typedef struct WorkerContext { + AVSliceThread *ctx; + pthread_mutex_t mutex; + pthread_cond_t cond; + pthread_t thread; + int done; +} WorkerContext; + +struct AVSliceThread { + WorkerContext *workers; + int nb_threads; + int nb_active_threads; + int nb_jobs; + + atomic_uint first_job; + atomic_uint current_job; + pthread_mutex_t done_mutex; + pthread_cond_t done_cond; + int done; + int finished; + + void *priv; + void (*worker_func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads); + void (*main_func)(void *priv); +}; + +static int run_jobs(AVSliceThread *ctx) +{ + unsigned nb_jobs = ctx->nb_jobs; + unsigned nb_active_threads = ctx->nb_active_threads; + unsigned first_job = atomic_fetch_add_explicit(&ctx->first_job, 1, memory_order_acq_rel); + unsigned current_job = first_job; + + do { + ctx->worker_func(ctx->priv, current_job, first_job, nb_jobs, nb_active_threads); + } while ((current_job = atomic_fetch_add_explicit(&ctx->current_job, 1, memory_order_acq_rel)) < nb_jobs); + + return current_job == nb_jobs + nb_active_threads - 1; +} + +static void *attribute_align_arg thread_worker(void *v) +{ + WorkerContext *w = v; + AVSliceThread *ctx = w->ctx; + + pthread_mutex_lock(&w->mutex); + pthread_cond_signal(&w->cond); + + while (1) { + w->done = 1; + while (w->done) + pthread_cond_wait(&w->cond, &w->mutex); + + if (ctx->finished) { + pthread_mutex_unlock(&w->mutex); + return NULL; + } + + if (run_jobs(ctx)) { + pthread_mutex_lock(&ctx->done_mutex); + ctx->done = 1; + pthread_cond_signal(&ctx->done_cond); + pthread_mutex_unlock(&ctx->done_mutex); + } + } +} + +int avpriv_slicethread_create(AVSliceThread **pctx, void *priv, + void (*worker_func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads), + void (*main_func)(void *priv), + int nb_threads) +{ + AVSliceThread *ctx; + int nb_workers, i; + +#if HAVE_W32THREADS + w32thread_init(); +#endif + + av_assert0(nb_threads >= 0); + if (!nb_threads) { + int nb_cpus = av_cpu_count(); + if (nb_cpus > 1) + nb_threads = nb_cpus + 1; + else + nb_threads = 1; + } + + nb_workers = nb_threads; + if (!main_func) + nb_workers--; + + *pctx = ctx = av_mallocz(sizeof(*ctx)); + if (!ctx) + return AVERROR(ENOMEM); + + if (nb_workers && !(ctx->workers = av_calloc(nb_workers, sizeof(*ctx->workers)))) { + av_freep(pctx); + return AVERROR(ENOMEM); + } + + ctx->priv = priv; + ctx->worker_func = worker_func; + ctx->main_func = main_func; + ctx->nb_threads = nb_threads; + ctx->nb_active_threads = 0; + ctx->nb_jobs = 0; + ctx->finished = 0; + + atomic_init(&ctx->first_job, 0); + atomic_init(&ctx->current_job, 0); + pthread_mutex_init(&ctx->done_mutex, NULL); + pthread_cond_init(&ctx->done_cond, NULL); + ctx->done = 0; + + for (i = 0; i < nb_workers; i++) { + WorkerContext *w = &ctx->workers[i]; + int ret; + w->ctx = ctx; + pthread_mutex_init(&w->mutex, NULL); + pthread_cond_init(&w->cond, NULL); + pthread_mutex_lock(&w->mutex); + w->done = 0; + + if (ret = pthread_create(&w->thread, NULL, thread_worker, w)) { + ctx->nb_threads = main_func ? i : i + 1; + pthread_mutex_unlock(&w->mutex); + pthread_cond_destroy(&w->cond); + pthread_mutex_destroy(&w->mutex); + avpriv_slicethread_free(pctx); + return AVERROR(ret); + } + + while (!w->done) + pthread_cond_wait(&w->cond, &w->mutex); + pthread_mutex_unlock(&w->mutex); + } + + return nb_threads; +} + +void avpriv_slicethread_execute(AVSliceThread *ctx, int nb_jobs, int execute_main) +{ + int nb_workers, i, is_last = 0; + + av_assert0(nb_jobs > 0); + ctx->nb_jobs = nb_jobs; + ctx->nb_active_threads = FFMIN(nb_jobs, ctx->nb_threads); + atomic_store_explicit(&ctx->first_job, 0, memory_order_relaxed); + atomic_store_explicit(&ctx->current_job, ctx->nb_active_threads, memory_order_relaxed); + nb_workers = ctx->nb_active_threads; + if (!ctx->main_func || !execute_main) + nb_workers--; + + for (i = 0; i < nb_workers; i++) { + WorkerContext *w = &ctx->workers[i]; + pthread_mutex_lock(&w->mutex); + w->done = 0; + pthread_cond_signal(&w->cond); + pthread_mutex_unlock(&w->mutex); + } + + if (ctx->main_func && execute_main) + ctx->main_func(ctx->priv); + else + is_last = run_jobs(ctx); + + if (!is_last) { + pthread_mutex_lock(&ctx->done_mutex); + while (!ctx->done) + pthread_cond_wait(&ctx->done_cond, &ctx->done_mutex); + ctx->done = 0; + pthread_mutex_unlock(&ctx->done_mutex); + } +} + +void avpriv_slicethread_free(AVSliceThread **pctx) +{ + AVSliceThread *ctx; + int nb_workers, i; + + if (!pctx || !*pctx) + return; + + ctx = *pctx; + nb_workers = ctx->nb_threads; + if (!ctx->main_func) + nb_workers--; + + ctx->finished = 1; + for (i = 0; i < nb_workers; i++) { + WorkerContext *w = &ctx->workers[i]; + pthread_mutex_lock(&w->mutex); + w->done = 0; + pthread_cond_signal(&w->cond); + pthread_mutex_unlock(&w->mutex); + } + + for (i = 0; i < nb_workers; i++) { + WorkerContext *w = &ctx->workers[i]; + pthread_join(w->thread, NULL); + pthread_cond_destroy(&w->cond); + pthread_mutex_destroy(&w->mutex); + } + + pthread_cond_destroy(&ctx->done_cond); + pthread_mutex_destroy(&ctx->done_mutex); + av_freep(&ctx->workers); + av_freep(pctx); +} + +#else /* HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS32THREADS */ + +int avpriv_slicethread_create(AVSliceThread **pctx, void *priv, + void (*worker_func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads), + void (*main_func)(void *priv), + int nb_threads) +{ + *pctx = NULL; + return AVERROR(EINVAL); +} + +void avpriv_slicethread_execute(AVSliceThread *ctx, int nb_jobs, int execute_main) +{ + av_assert0(0); +} + +void avpriv_slicethread_free(AVSliceThread **pctx) +{ + av_assert0(!pctx || !*pctx); +} + +#endif /* HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS32THREADS */ diff --git a/media/ffvpx/libavutil/slicethread.h b/media/ffvpx/libavutil/slicethread.h new file mode 100644 index 000000000000..f6f6f302c444 --- /dev/null +++ b/media/ffvpx/libavutil/slicethread.h @@ -0,0 +1,52 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVUTIL_SLICETHREAD_H +#define AVUTIL_SLICETHREAD_H + +typedef struct AVSliceThread AVSliceThread; + +/** + * Create slice threading context. + * @param pctx slice threading context returned here + * @param priv private pointer to be passed to callback function + * @param worker_func callback function to be executed + * @param main_func special callback function, called from main thread, may be NULL + * @param nb_threads number of threads, 0 for automatic, must be >= 0 + * @return return number of threads or negative AVERROR on failure + */ +int avpriv_slicethread_create(AVSliceThread **pctx, void *priv, + void (*worker_func)(void *priv, int jobnr, int threadnr, int nb_jobs, int nb_threads), + void (*main_func)(void *priv), + int nb_threads); + +/** + * Execute slice threading. + * @param ctx slice threading context + * @param nb_jobs number of jobs, must be > 0 + * @param execute_main also execute main_func + */ +void avpriv_slicethread_execute(AVSliceThread *ctx, int nb_jobs, int execute_main); + +/** + * Destroy slice threading context. + * @param pctx pointer to context + */ +void avpriv_slicethread_free(AVSliceThread **pctx); + +#endif diff --git a/media/ffvpx/libavutil/thread.h b/media/ffvpx/libavutil/thread.h index 32ddf40365af..f108e2005269 100644 --- a/media/ffvpx/libavutil/thread.h +++ b/media/ffvpx/libavutil/thread.h @@ -26,8 +26,6 @@ #if HAVE_PTHREADS || HAVE_W32THREADS || HAVE_OS2THREADS -#define USE_ATOMICS 0 - #if HAVE_PTHREADS #include @@ -38,8 +36,11 @@ #define ASSERT_PTHREAD_NORET(func, ...) do { \ int ret = func(__VA_ARGS__); \ if (ret) { \ + char errbuf[AV_ERROR_MAX_STRING_SIZE] = ""; \ av_log(NULL, AV_LOG_FATAL, AV_STRINGIFY(func) \ - " failed with error: %s\n", av_err2str(AVERROR(ret))); \ + " failed with error: %s\n", \ + av_make_error_string(errbuf, AV_ERROR_MAX_STRING_SIZE, \ + AVERROR(ret))); \ abort(); \ } \ } while (0) @@ -146,8 +147,6 @@ static inline int strict_pthread_once(pthread_once_t *once_control, void (*init_ #else -#define USE_ATOMICS 1 - #define AVMutex char #define ff_mutex_init(mutex, attr) (0) diff --git a/media/ffvpx/libavutil/threadmessage.c b/media/ffvpx/libavutil/threadmessage.c index 7c5cd2463cee..872e9392b19f 100644 --- a/media/ffvpx/libavutil/threadmessage.c +++ b/media/ffvpx/libavutil/threadmessage.c @@ -69,7 +69,7 @@ int av_thread_message_queue_alloc(AVThreadMessageQueue **mq, pthread_cond_destroy(&rmq->cond_recv); pthread_mutex_destroy(&rmq->lock); av_free(rmq); - return AVERROR(ret); + return AVERROR(ENOMEM); } rmq->elsize = elsize; *mq = rmq; diff --git a/media/ffvpx/libavutil/time.c b/media/ffvpx/libavutil/time.c index 69419e6f3872..80d1faf264b4 100644 --- a/media/ffvpx/libavutil/time.c +++ b/media/ffvpx/libavutil/time.c @@ -56,17 +56,25 @@ int64_t av_gettime(void) int64_t av_gettime_relative(void) { #if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC) - struct timespec ts; - clock_gettime(CLOCK_MONOTONIC, &ts); - return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000; -#else - return av_gettime() + 42 * 60 * 60 * INT64_C(1000000); +#ifdef __APPLE__ + if (clock_gettime) #endif + { + struct timespec ts; + clock_gettime(CLOCK_MONOTONIC, &ts); + return (int64_t)ts.tv_sec * 1000000 + ts.tv_nsec / 1000; + } +#endif + return av_gettime() + 42 * 60 * 60 * INT64_C(1000000); } int av_gettime_relative_is_monotonic(void) { #if HAVE_CLOCK_GETTIME && defined(CLOCK_MONOTONIC) +#ifdef __APPLE__ + if (!clock_gettime) + return 0; +#endif return 1; #else return 0; diff --git a/media/ffvpx/libavutil/timecode.c b/media/ffvpx/libavutil/timecode.c index fa92df1ef98d..c0c67c847868 100644 --- a/media/ffvpx/libavutil/timecode.c +++ b/media/ffvpx/libavutil/timecode.c @@ -129,7 +129,8 @@ char *av_timecode_make_smpte_tc_string(char *buf, uint32_t tcsmpte, int prevent_ char *av_timecode_make_mpeg_tc_string(char *buf, uint32_t tc25bit) { - snprintf(buf, AV_TIMECODE_STR_SIZE, "%02u:%02u:%02u%c%02u", + snprintf(buf, AV_TIMECODE_STR_SIZE, + "%02"PRIu32":%02"PRIu32":%02"PRIu32"%c%02"PRIu32, tc25bit>>19 & 0x1f, // 5-bit hours tc25bit>>13 & 0x3f, // 6-bit minutes tc25bit>>6 & 0x3f, // 6-bit seconds diff --git a/media/ffvpx/libavutil/timecode.h b/media/ffvpx/libavutil/timecode.h index 56e3975fd89d..37c1361bc281 100644 --- a/media/ffvpx/libavutil/timecode.h +++ b/media/ffvpx/libavutil/timecode.h @@ -30,7 +30,7 @@ #include #include "rational.h" -#define AV_TIMECODE_STR_SIZE 16 +#define AV_TIMECODE_STR_SIZE 23 enum AVTimecodeFlag { AV_TIMECODE_FLAG_DROPFRAME = 1<<0, ///< timecode is drop frame diff --git a/media/ffvpx/libavutil/timer.h b/media/ffvpx/libavutil/timer.h index ed3b04787087..f7ab455df22f 100644 --- a/media/ffvpx/libavutil/timer.h +++ b/media/ffvpx/libavutil/timer.h @@ -26,12 +26,22 @@ #ifndef AVUTIL_TIMER_H #define AVUTIL_TIMER_H +#include "config.h" + +#if CONFIG_LINUX_PERF +# ifndef _GNU_SOURCE +# define _GNU_SOURCE +# endif +# include // read(3) +# include +# include +# include +#endif + #include #include #include -#include "config.h" - #if HAVE_MACH_MACH_TIME_H #include #endif @@ -60,23 +70,17 @@ # define FF_TIMER_UNITS "UNITS" #endif -#ifdef AV_READ_TIME -#define START_TIMER \ - uint64_t tend; \ - uint64_t tstart = AV_READ_TIME(); \ - -#define STOP_TIMER(id) \ - tend = AV_READ_TIME(); \ +#define TIMER_REPORT(id, tdiff) \ { \ static uint64_t tsum = 0; \ static int tcount = 0; \ static int tskip_count = 0; \ static int thistogram[32] = {0}; \ - thistogram[av_log2(tend - tstart)]++; \ - if (tcount < 2 || \ - tend - tstart < 8 * tsum / tcount || \ - tend - tstart < 2000) { \ - tsum+= tend - tstart; \ + thistogram[av_log2(tdiff)]++; \ + if (tcount < 2 || \ + (tdiff) < 8 * tsum / tcount || \ + (tdiff) < 2000) { \ + tsum += (tdiff); \ tcount++; \ } else \ tskip_count++; \ @@ -90,6 +94,45 @@ av_log(NULL, AV_LOG_ERROR, "\n"); \ } \ } + +#if CONFIG_LINUX_PERF + +#define START_TIMER \ + static int linux_perf_fd; \ + uint64_t tperf; \ + if (!linux_perf_fd) { \ + struct perf_event_attr attr = { \ + .type = PERF_TYPE_HARDWARE, \ + .size = sizeof(struct perf_event_attr), \ + .config = PERF_COUNT_HW_CPU_CYCLES, \ + .disabled = 1, \ + .exclude_kernel = 1, \ + .exclude_hv = 1, \ + }; \ + linux_perf_fd = syscall(__NR_perf_event_open, &attr, \ + 0, -1, -1, 0); \ + } \ + if (linux_perf_fd == -1) { \ + av_log(NULL, AV_LOG_ERROR, "perf_event_open failed: %s\n", \ + av_err2str(AVERROR(errno))); \ + } else { \ + ioctl(linux_perf_fd, PERF_EVENT_IOC_RESET, 0); \ + ioctl(linux_perf_fd, PERF_EVENT_IOC_ENABLE, 0); \ + } + +#define STOP_TIMER(id) \ + ioctl(linux_perf_fd, PERF_EVENT_IOC_DISABLE, 0); \ + read(linux_perf_fd, &tperf, sizeof(tperf)); \ + TIMER_REPORT(id, tperf) + +#elif defined(AV_READ_TIME) +#define START_TIMER \ + uint64_t tend; \ + uint64_t tstart = AV_READ_TIME(); \ + +#define STOP_TIMER(id) \ + tend = AV_READ_TIME(); \ + TIMER_REPORT(id, tend - tstart) #else #define START_TIMER #define STOP_TIMER(id) { } diff --git a/media/ffvpx/libavutil/utils.c b/media/ffvpx/libavutil/utils.c index 36e4dd5fdbe3..2c170db2e10d 100644 --- a/media/ffvpx/libavutil/utils.c +++ b/media/ffvpx/libavutil/utils.c @@ -121,6 +121,29 @@ unsigned av_int_list_length_for_size(unsigned elsize, return i; } +char *av_fourcc_make_string(char *buf, uint32_t fourcc) +{ + int i; + char *orig_buf = buf; + size_t buf_size = AV_FOURCC_MAX_STRING_SIZE; + + for (i = 0; i < 4; i++) { + const int c = fourcc & 0xff; + const int print_chr = (c >= '0' && c <= '9') || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') || + (c && strchr(". -_", c)); + const int len = snprintf(buf, buf_size, print_chr ? "%c" : "[%d]", c); + if (len < 0) + break; + buf += len; + buf_size = buf_size > len ? buf_size - len : 0; + fourcc >>= 8; + } + + return orig_buf; +} + AVRational av_get_time_base_q(void) { return (AVRational){1, AV_TIME_BASE}; @@ -129,7 +152,7 @@ AVRational av_get_time_base_q(void) void av_assert0_fpu(void) { #if HAVE_MMX_INLINE uint16_t state[14]; - __asm volatile ( + __asm__ volatile ( "fstenv %0 \n\t" : "+m" (state) : diff --git a/media/ffvpx/libavutil/version.h b/media/ffvpx/libavutil/version.h index bdd310f855e9..f594dc069185 100644 --- a/media/ffvpx/libavutil/version.h +++ b/media/ffvpx/libavutil/version.h @@ -78,8 +78,9 @@ * @{ */ + #define LIBAVUTIL_VERSION_MAJOR 55 -#define LIBAVUTIL_VERSION_MINOR 34 +#define LIBAVUTIL_VERSION_MINOR 78 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ @@ -135,6 +136,9 @@ #ifndef FF_API_PKT_PTS #define FF_API_PKT_PTS (LIBAVUTIL_VERSION_MAJOR < 56) #endif +#ifndef FF_API_CRYPTO_SIZE_T +#define FF_API_CRYPTO_SIZE_T (LIBAVUTIL_VERSION_MAJOR < 56) +#endif /** diff --git a/media/ffvpx/libavutil/x86/cpu.c b/media/ffvpx/libavutil/x86/cpu.c index f3a49c677297..f33088c8c738 100644 --- a/media/ffvpx/libavutil/x86/cpu.c +++ b/media/ffvpx/libavutil/x86/cpu.c @@ -28,7 +28,7 @@ #include "libavutil/cpu.h" #include "libavutil/cpu_internal.h" -#if HAVE_YASM +#if HAVE_X86ASM #define cpuid(index, eax, ebx, ecx, edx) \ ff_cpu_cpuid(index, &eax, &ebx, &ecx, &edx) @@ -66,7 +66,7 @@ #define cpuid_test() 1 -#elif HAVE_YASM +#elif HAVE_X86ASM #define cpuid_test ff_cpu_cpuid_test @@ -221,9 +221,42 @@ int ff_get_cpu_flags_x86(void) * functions on the Atom. */ if (family == 6 && model == 28) rval |= AV_CPU_FLAG_ATOM; + + /* Conroe has a slow shuffle unit. Check the model number to ensure not + * to include crippled low-end Penryns and Nehalems that lack SSE4. */ + if ((rval & AV_CPU_FLAG_SSSE3) && !(rval & AV_CPU_FLAG_SSE4) && + family == 6 && model < 23) + rval |= AV_CPU_FLAG_SSSE3SLOW; } #endif /* cpuid */ return rval; } + +size_t ff_get_cpu_max_align_x86(void) +{ + int flags = av_get_cpu_flags(); + + if (flags & (AV_CPU_FLAG_AVX2 | + AV_CPU_FLAG_AVX | + AV_CPU_FLAG_XOP | + AV_CPU_FLAG_FMA4 | + AV_CPU_FLAG_FMA3 | + AV_CPU_FLAG_AVXSLOW)) + return 32; + if (flags & (AV_CPU_FLAG_AESNI | + AV_CPU_FLAG_SSE42 | + AV_CPU_FLAG_SSE4 | + AV_CPU_FLAG_SSSE3 | + AV_CPU_FLAG_SSE3 | + AV_CPU_FLAG_SSE2 | + AV_CPU_FLAG_SSE | + AV_CPU_FLAG_ATOM | + AV_CPU_FLAG_SSSE3SLOW | + AV_CPU_FLAG_SSE3SLOW | + AV_CPU_FLAG_SSE2SLOW)) + return 16; + + return 8; +} diff --git a/media/ffvpx/libavutil/x86/cpu.h b/media/ffvpx/libavutil/x86/cpu.h index f171037f1c73..309b8e746c56 100644 --- a/media/ffvpx/libavutil/x86/cpu.h +++ b/media/ffvpx/libavutil/x86/cpu.h @@ -38,6 +38,8 @@ #define X86_SSE3_FAST(flags) CPUEXT_FAST(flags, SSE3) #define X86_SSE3_SLOW(flags) CPUEXT_SLOW(flags, SSE3) #define X86_SSSE3(flags) CPUEXT(flags, SSSE3) +#define X86_SSSE3_FAST(flags) CPUEXT_FAST(flags, SSSE3) +#define X86_SSSE3_SLOW(flags) CPUEXT_SLOW(flags, SSSE3) #define X86_SSE4(flags) CPUEXT(flags, SSE4) #define X86_SSE42(flags) CPUEXT(flags, SSE42) #define X86_AVX(flags) CPUEXT(flags, AVX) @@ -61,6 +63,8 @@ #define EXTERNAL_SSE3_FAST(flags) CPUEXT_SUFFIX_FAST(flags, _EXTERNAL, SSE3) #define EXTERNAL_SSE3_SLOW(flags) CPUEXT_SUFFIX_SLOW(flags, _EXTERNAL, SSE3) #define EXTERNAL_SSSE3(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, SSSE3) +#define EXTERNAL_SSSE3_FAST(flags) CPUEXT_SUFFIX_FAST(flags, _EXTERNAL, SSSE3) +#define EXTERNAL_SSSE3_SLOW(flags) CPUEXT_SUFFIX_SLOW(flags, _EXTERNAL, SSSE3) #define EXTERNAL_SSE4(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, SSE4) #define EXTERNAL_SSE42(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, SSE42) #define EXTERNAL_AVX(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX) @@ -88,6 +92,8 @@ #define INLINE_SSE3_FAST(flags) CPUEXT_SUFFIX_FAST(flags, _INLINE, SSE3) #define INLINE_SSE3_SLOW(flags) CPUEXT_SUFFIX_SLOW(flags, _INLINE, SSE3) #define INLINE_SSSE3(flags) CPUEXT_SUFFIX(flags, _INLINE, SSSE3) +#define INLINE_SSSE3_FAST(flags) CPUEXT_SUFFIX_FAST(flags, _INLINE, SSSE3) +#define INLINE_SSSE3_SLOW(flags) CPUEXT_SUFFIX_SLOW(flags, _INLINE, SSSE3) #define INLINE_SSE4(flags) CPUEXT_SUFFIX(flags, _INLINE, SSE4) #define INLINE_SSE42(flags) CPUEXT_SUFFIX(flags, _INLINE, SSE42) #define INLINE_AVX(flags) CPUEXT_SUFFIX(flags, _INLINE, AVX) diff --git a/media/ffvpx/libavutil/x86/emms.asm b/media/ffvpx/libavutil/x86/emms.asm index 0aad34af3fa8..8611762d7374 100644 --- a/media/ffvpx/libavutil/x86/emms.asm +++ b/media/ffvpx/libavutil/x86/emms.asm @@ -23,8 +23,8 @@ SECTION .text ;----------------------------------------------------------------------------- -; void avpriv_emms_yasm(void) +; void avpriv_emms_asm(void) ;----------------------------------------------------------------------------- -cvisible emms_yasm, 0, 0 +cvisible emms_asm, 0, 0 emms RET diff --git a/media/ffvpx/libavutil/x86/emms.h b/media/ffvpx/libavutil/x86/emms.h index 42c18e29536c..c21e34b4510a 100644 --- a/media/ffvpx/libavutil/x86/emms.h +++ b/media/ffvpx/libavutil/x86/emms.h @@ -23,7 +23,7 @@ #include "libavutil/attributes.h" #include "libavutil/cpu.h" -void avpriv_emms_yasm(void); +void avpriv_emms_asm(void); #if HAVE_MMX_INLINE # define emms_c emms_c @@ -49,7 +49,7 @@ static av_always_inline void emms_c(void) # include # define emms_c _mm_empty #elif HAVE_MMX_EXTERNAL -# define emms_c avpriv_emms_yasm +# define emms_c avpriv_emms_asm #endif /* HAVE_MMX_INLINE */ #endif /* AVUTIL_X86_EMMS_H */ diff --git a/media/ffvpx/libavutil/x86/float_dsp.asm b/media/ffvpx/libavutil/x86/float_dsp.asm index 021ff03c8753..06d2d2cfd1b8 100644 --- a/media/ffvpx/libavutil/x86/float_dsp.asm +++ b/media/ffvpx/libavutil/x86/float_dsp.asm @@ -22,6 +22,9 @@ %include "x86util.asm" +SECTION_RODATA 32 +pd_reverse: dd 7, 6, 5, 4, 3, 2, 1, 0 + SECTION .text ;----------------------------------------------------------------------------- @@ -148,6 +151,69 @@ cglobal vector_fmul_scalar, 4,4,3, dst, src, mul, len INIT_XMM sse VECTOR_FMUL_SCALAR +;------------------------------------------------------------------------------ +; void ff_vector_dmac_scalar(double *dst, const double *src, double mul, +; int len) +;------------------------------------------------------------------------------ + +%macro VECTOR_DMAC_SCALAR 0 +%if ARCH_X86_32 +cglobal vector_dmac_scalar, 2,4,5, dst, src, mul, len, lenaddr + mov lenq, lenaddrm + VBROADCASTSD m0, mulm +%else +%if UNIX64 +cglobal vector_dmac_scalar, 3,3,5, dst, src, len +%else +cglobal vector_dmac_scalar, 4,4,5, dst, src, mul, len + SWAP 0, 2 +%endif + movlhps xm0, xm0 +%if cpuflag(avx) + vinsertf128 m0, m0, xm0, 1 +%endif +%endif + lea lenq, [lend*8-mmsize*4] +.loop: +%if cpuflag(fma3) + movaps m1, [dstq+lenq] + movaps m2, [dstq+lenq+1*mmsize] + movaps m3, [dstq+lenq+2*mmsize] + movaps m4, [dstq+lenq+3*mmsize] + fmaddpd m1, m0, [srcq+lenq], m1 + fmaddpd m2, m0, [srcq+lenq+1*mmsize], m2 + fmaddpd m3, m0, [srcq+lenq+2*mmsize], m3 + fmaddpd m4, m0, [srcq+lenq+3*mmsize], m4 +%else ; cpuflag + mulpd m1, m0, [srcq+lenq] + mulpd m2, m0, [srcq+lenq+1*mmsize] + mulpd m3, m0, [srcq+lenq+2*mmsize] + mulpd m4, m0, [srcq+lenq+3*mmsize] + addpd m1, m1, [dstq+lenq] + addpd m2, m2, [dstq+lenq+1*mmsize] + addpd m3, m3, [dstq+lenq+2*mmsize] + addpd m4, m4, [dstq+lenq+3*mmsize] +%endif ; cpuflag + movaps [dstq+lenq], m1 + movaps [dstq+lenq+1*mmsize], m2 + movaps [dstq+lenq+2*mmsize], m3 + movaps [dstq+lenq+3*mmsize], m4 + sub lenq, mmsize*4 + jge .loop + REP_RET +%endmacro + +INIT_XMM sse2 +VECTOR_DMAC_SCALAR +%if HAVE_AVX_EXTERNAL +INIT_YMM avx +VECTOR_DMAC_SCALAR +%endif +%if HAVE_FMA3_EXTERNAL +INIT_YMM fma3 +VECTOR_DMAC_SCALAR +%endif + ;------------------------------------------------------------------------------ ; void ff_vector_dmul_scalar(double *dst, const double *src, double mul, ; int len) @@ -177,8 +243,8 @@ cglobal vector_dmul_scalar, 4,4,3, dst, src, mul, len .loop: mulpd m1, m0, [srcq+lenq ] mulpd m2, m0, [srcq+lenq+mmsize] - mova [dstq+lenq ], m1 - mova [dstq+lenq+mmsize], m2 + movaps [dstq+lenq ], m1 + movaps [dstq+lenq+mmsize], m2 sub lenq, 2*mmsize jge .loop REP_RET @@ -296,10 +362,16 @@ VECTOR_FMUL_ADD ;----------------------------------------------------------------------------- %macro VECTOR_FMUL_REVERSE 0 cglobal vector_fmul_reverse, 4,4,2, dst, src0, src1, len +%if cpuflag(avx2) + movaps m2, [pd_reverse] +%endif lea lenq, [lend*4 - 2*mmsize] ALIGN 16 .loop: -%if cpuflag(avx) +%if cpuflag(avx2) + vpermps m0, m2, [src1q] + vpermps m1, m2, [src1q+mmsize] +%elif cpuflag(avx) vmovaps xmm0, [src1q + 16] vinsertf128 m0, m0, [src1q], 1 vshufps m0, m0, m0, q0123 @@ -314,8 +386,8 @@ ALIGN 16 %endif mulps m0, m0, [src0q + lenq + mmsize] mulps m1, m1, [src0q + lenq] - mova [dstq + lenq + mmsize], m0 - mova [dstq + lenq], m1 + movaps [dstq + lenq + mmsize], m0 + movaps [dstq + lenq], m1 add src1q, 2*mmsize sub lenq, 2*mmsize jge .loop @@ -328,6 +400,10 @@ VECTOR_FMUL_REVERSE INIT_YMM avx VECTOR_FMUL_REVERSE %endif +%if HAVE_AVX2_EXTERNAL +INIT_YMM avx2 +VECTOR_FMUL_REVERSE +%endif ; float scalarproduct_float_sse(const float *v1, const float *v2, int len) INIT_XMM sse diff --git a/media/ffvpx/libavutil/x86/float_dsp_init.c b/media/ffvpx/libavutil/x86/float_dsp_init.c index c836a78e1b99..122087a1962a 100644 --- a/media/ffvpx/libavutil/x86/float_dsp_init.c +++ b/media/ffvpx/libavutil/x86/float_dsp_init.c @@ -39,6 +39,13 @@ void ff_vector_fmac_scalar_fma3(float *dst, const float *src, float mul, void ff_vector_fmul_scalar_sse(float *dst, const float *src, float mul, int len); +void ff_vector_dmac_scalar_sse2(double *dst, const double *src, double mul, + int len); +void ff_vector_dmac_scalar_avx(double *dst, const double *src, double mul, + int len); +void ff_vector_dmac_scalar_fma3(double *dst, const double *src, double mul, + int len); + void ff_vector_dmul_scalar_sse2(double *dst, const double *src, double mul, int len); void ff_vector_dmul_scalar_avx(double *dst, const double *src, @@ -60,10 +67,12 @@ void ff_vector_fmul_reverse_sse(float *dst, const float *src0, const float *src1, int len); void ff_vector_fmul_reverse_avx(float *dst, const float *src0, const float *src1, int len); +void ff_vector_fmul_reverse_avx2(float *dst, const float *src0, + const float *src1, int len); float ff_scalarproduct_float_sse(const float *v1, const float *v2, int order); -void ff_butterflies_float_sse(float *src0, float *src1, int len); +void ff_butterflies_float_sse(float *av_restrict src0, float *av_restrict src1, int len); av_cold void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp) { @@ -83,17 +92,23 @@ av_cold void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp) fdsp->butterflies_float = ff_butterflies_float_sse; } if (EXTERNAL_SSE2(cpu_flags)) { + fdsp->vector_dmac_scalar = ff_vector_dmac_scalar_sse2; fdsp->vector_dmul_scalar = ff_vector_dmul_scalar_sse2; } if (EXTERNAL_AVX_FAST(cpu_flags)) { fdsp->vector_fmul = ff_vector_fmul_avx; fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_avx; fdsp->vector_dmul_scalar = ff_vector_dmul_scalar_avx; + fdsp->vector_dmac_scalar = ff_vector_dmac_scalar_avx; fdsp->vector_fmul_add = ff_vector_fmul_add_avx; fdsp->vector_fmul_reverse = ff_vector_fmul_reverse_avx; } + if (EXTERNAL_AVX2_FAST(cpu_flags)) { + fdsp->vector_fmul_reverse = ff_vector_fmul_reverse_avx2; + } if (EXTERNAL_FMA3_FAST(cpu_flags)) { fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_fma3; fdsp->vector_fmul_add = ff_vector_fmul_add_fma3; + fdsp->vector_dmac_scalar = ff_vector_dmac_scalar_fma3; } } diff --git a/media/ffvpx/libavutil/x86/imgutils.asm b/media/ffvpx/libavutil/x86/imgutils.asm new file mode 100644 index 000000000000..3cca56cdca84 --- /dev/null +++ b/media/ffvpx/libavutil/x86/imgutils.asm @@ -0,0 +1,53 @@ +;***************************************************************************** +;* Copyright 2016 Anton Khirnov +;* +;* This file is part of FFmpeg. +;* +;* FFmpeg is free software; you can redistribute it and/or +;* modify it under the terms of the GNU Lesser General Public +;* License as published by the Free Software Foundation; either +;* version 2.1 of the License, or (at your option) any later version. +;* +;* FFmpeg is distributed in the hope that it will be useful, +;* but WITHOUT ANY WARRANTY; without even the implied warranty of +;* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +;* Lesser General Public License for more details. +;* +;* You should have received a copy of the GNU Lesser General Public +;* License along with FFmpeg; if not, write to the Free Software +;* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +;****************************************************************************** + +%include "libavutil/x86/x86util.asm" + +SECTION .text + +INIT_XMM sse4 +cglobal image_copy_plane_uc_from, 6, 7, 4, dst, dst_linesize, src, src_linesize, bw, height, rowpos + add dstq, bwq + add srcq, bwq + neg bwq + +.row_start: + mov rowposq, bwq + +.loop: + movntdqa m0, [srcq + rowposq + 0 * mmsize] + movntdqa m1, [srcq + rowposq + 1 * mmsize] + movntdqa m2, [srcq + rowposq + 2 * mmsize] + movntdqa m3, [srcq + rowposq + 3 * mmsize] + + mova [dstq + rowposq + 0 * mmsize], m0 + mova [dstq + rowposq + 1 * mmsize], m1 + mova [dstq + rowposq + 2 * mmsize], m2 + mova [dstq + rowposq + 3 * mmsize], m3 + + add rowposq, 4 * mmsize + jnz .loop + + add srcq, src_linesizeq + add dstq, dst_linesizeq + dec heightd + jnz .row_start + + RET diff --git a/media/ffvpx/libavutil/x86/imgutils_init.c b/media/ffvpx/libavutil/x86/imgutils_init.c new file mode 100644 index 000000000000..4ea398205e03 --- /dev/null +++ b/media/ffvpx/libavutil/x86/imgutils_init.c @@ -0,0 +1,49 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include +#include + +#include "libavutil/cpu.h" +#include "libavutil/error.h" +#include "libavutil/imgutils.h" +#include "libavutil/imgutils_internal.h" +#include "libavutil/internal.h" + +#include "cpu.h" + +void ff_image_copy_plane_uc_from_sse4(uint8_t *dst, ptrdiff_t dst_linesize, + const uint8_t *src, ptrdiff_t src_linesize, + ptrdiff_t bytewidth, int height); + +int ff_image_copy_plane_uc_from_x86(uint8_t *dst, ptrdiff_t dst_linesize, + const uint8_t *src, ptrdiff_t src_linesize, + ptrdiff_t bytewidth, int height) +{ + int cpu_flags = av_get_cpu_flags(); + ptrdiff_t bw_aligned = FFALIGN(bytewidth, 64); + + if (EXTERNAL_SSE4(cpu_flags) && + bw_aligned <= dst_linesize && bw_aligned <= src_linesize) + ff_image_copy_plane_uc_from_sse4(dst, dst_linesize, src, src_linesize, + bw_aligned, height); + else + return AVERROR(ENOSYS); + + return 0; +} diff --git a/media/ffvpx/libavutil/x86/moz.build b/media/ffvpx/libavutil/x86/moz.build index 1d1a6ca67734..b56ed75ead6c 100644 --- a/media/ffvpx/libavutil/x86/moz.build +++ b/media/ffvpx/libavutil/x86/moz.build @@ -12,6 +12,8 @@ SOURCES += [ 'fixed_dsp_init.c', 'float_dsp.asm', 'float_dsp_init.c', + 'imgutils.asm', + 'imgutils_init.c', 'lls.asm', 'lls_init.c' ] diff --git a/media/ffvpx/libavutil/x86/x86inc.asm b/media/ffvpx/libavutil/x86/x86inc.asm index b2e9c60195ed..6a054a3e0925 100644 --- a/media/ffvpx/libavutil/x86/x86inc.asm +++ b/media/ffvpx/libavutil/x86/x86inc.asm @@ -1,7 +1,7 @@ ;***************************************************************************** ;* x86inc.asm: x264asm abstraction layer ;***************************************************************************** -;* Copyright (C) 2005-2016 x264 project +;* Copyright (C) 2005-2017 x264 project ;* ;* Authors: Loren Merritt ;* Anton Mitrofanov @@ -87,7 +87,9 @@ ; keep supporting OS/2. %macro SECTION_RODATA 0-1 16 %ifidn __OUTPUT_FORMAT__,aout - section .text + SECTION .text + %elifidn __OUTPUT_FORMAT__,coff + SECTION .text %else SECTION .rodata align=%1 %endif @@ -385,7 +387,14 @@ DECLARE_REG_TMP_SIZE 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14 %ifnum %1 %if %1 != 0 && required_stack_alignment > STACK_ALIGNMENT %if %1 > 0 + ; Reserve an additional register for storing the original stack pointer, but avoid using + ; eax/rax for this purpose since it can potentially get overwritten as a return value. %assign regs_used (regs_used + 1) + %if ARCH_X86_64 && regs_used == 7 + %assign regs_used 8 + %elif ARCH_X86_64 == 0 && regs_used == 1 + %assign regs_used 2 + %endif %endif %if ARCH_X86_64 && regs_used < 5 + UNIX64 * 3 ; Ensure that we don't clobber any registers containing arguments. For UNIX64 we also preserve r6 (rax) @@ -419,10 +428,10 @@ DECLARE_REG 7, rdi, 64 DECLARE_REG 8, rsi, 72 DECLARE_REG 9, rbx, 80 DECLARE_REG 10, rbp, 88 -DECLARE_REG 11, R12, 96 -DECLARE_REG 12, R13, 104 -DECLARE_REG 13, R14, 112 -DECLARE_REG 14, R15, 120 +DECLARE_REG 11, R14, 96 +DECLARE_REG 12, R15, 104 +DECLARE_REG 13, R12, 112 +DECLARE_REG 14, R13, 120 %macro PROLOGUE 2-5+ 0 ; #args, #regs, #xmm_regs, [stack_size,] arg_names... %assign num_args %1 @@ -468,41 +477,42 @@ DECLARE_REG 14, R15, 120 WIN64_PUSH_XMM %endmacro -%macro WIN64_RESTORE_XMM_INTERNAL 1 +%macro WIN64_RESTORE_XMM_INTERNAL 0 %assign %%pad_size 0 %if xmm_regs_used > 8 %assign %%i xmm_regs_used %rep xmm_regs_used-8 %assign %%i %%i-1 - movaps xmm %+ %%i, [%1 + (%%i-8)*16 + stack_size + 32] + movaps xmm %+ %%i, [rsp + (%%i-8)*16 + stack_size + 32] %endrep %endif %if stack_size_padded > 0 %if stack_size > 0 && required_stack_alignment > STACK_ALIGNMENT mov rsp, rstkm %else - add %1, stack_size_padded + add rsp, stack_size_padded %assign %%pad_size stack_size_padded %endif %endif %if xmm_regs_used > 7 - movaps xmm7, [%1 + stack_offset - %%pad_size + 24] + movaps xmm7, [rsp + stack_offset - %%pad_size + 24] %endif %if xmm_regs_used > 6 - movaps xmm6, [%1 + stack_offset - %%pad_size + 8] + movaps xmm6, [rsp + stack_offset - %%pad_size + 8] %endif %endmacro -%macro WIN64_RESTORE_XMM 1 - WIN64_RESTORE_XMM_INTERNAL %1 +%macro WIN64_RESTORE_XMM 0 + WIN64_RESTORE_XMM_INTERNAL %assign stack_offset (stack_offset-stack_size_padded) + %assign stack_size_padded 0 %assign xmm_regs_used 0 %endmacro %define has_epilogue regs_used > 7 || xmm_regs_used > 6 || mmsize == 32 || stack_size > 0 %macro RET 0 - WIN64_RESTORE_XMM_INTERNAL rsp + WIN64_RESTORE_XMM_INTERNAL POP_IF_USED 14, 13, 12, 11, 10, 9, 8, 7 %if mmsize == 32 vzeroupper @@ -523,10 +533,10 @@ DECLARE_REG 7, R10, 16 DECLARE_REG 8, R11, 24 DECLARE_REG 9, rbx, 32 DECLARE_REG 10, rbp, 40 -DECLARE_REG 11, R12, 48 -DECLARE_REG 12, R13, 56 -DECLARE_REG 13, R14, 64 -DECLARE_REG 14, R15, 72 +DECLARE_REG 11, R14, 48 +DECLARE_REG 12, R15, 56 +DECLARE_REG 13, R12, 64 +DECLARE_REG 14, R13, 72 %macro PROLOGUE 2-5+ ; #args, #regs, #xmm_regs, [stack_size,] arg_names... %assign num_args %1 @@ -618,7 +628,7 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14 %if WIN64 == 0 %macro WIN64_SPILL_XMM 1 %endmacro - %macro WIN64_RESTORE_XMM 1 + %macro WIN64_RESTORE_XMM 0 %endmacro %macro WIN64_PUSH_XMM 0 %endmacro @@ -629,7 +639,7 @@ DECLARE_ARG 7, 8, 9, 10, 11, 12, 13, 14 ; We can automatically detect "follows a branch", but not a branch target. ; (SSSE3 is a sufficient condition to know that your cpu doesn't have this problem.) %macro REP_RET 0 - %if has_epilogue + %if has_epilogue || cpuflag(ssse3) RET %else rep ret @@ -780,25 +790,25 @@ BRANCH_INSTR jz, je, jnz, jne, jl, jle, jnl, jnle, jg, jge, jng, jnge, ja, jae, %assign cpuflags_sse (1<<4) | cpuflags_mmx2 %assign cpuflags_sse2 (1<<5) | cpuflags_sse %assign cpuflags_sse2slow (1<<6) | cpuflags_sse2 -%assign cpuflags_sse3 (1<<7) | cpuflags_sse2 -%assign cpuflags_ssse3 (1<<8) | cpuflags_sse3 -%assign cpuflags_sse4 (1<<9) | cpuflags_ssse3 -%assign cpuflags_sse42 (1<<10)| cpuflags_sse4 -%assign cpuflags_avx (1<<11)| cpuflags_sse42 -%assign cpuflags_xop (1<<12)| cpuflags_avx -%assign cpuflags_fma4 (1<<13)| cpuflags_avx -%assign cpuflags_fma3 (1<<14)| cpuflags_avx -%assign cpuflags_avx2 (1<<15)| cpuflags_fma3 +%assign cpuflags_lzcnt (1<<7) | cpuflags_sse2 +%assign cpuflags_sse3 (1<<8) | cpuflags_sse2 +%assign cpuflags_ssse3 (1<<9) | cpuflags_sse3 +%assign cpuflags_sse4 (1<<10)| cpuflags_ssse3 +%assign cpuflags_sse42 (1<<11)| cpuflags_sse4 +%assign cpuflags_aesni (1<<12)| cpuflags_sse42 +%assign cpuflags_avx (1<<13)| cpuflags_sse42 +%assign cpuflags_xop (1<<14)| cpuflags_avx +%assign cpuflags_fma4 (1<<15)| cpuflags_avx +%assign cpuflags_fma3 (1<<16)| cpuflags_avx +%assign cpuflags_bmi1 (1<<17)| cpuflags_avx|cpuflags_lzcnt +%assign cpuflags_bmi2 (1<<18)| cpuflags_bmi1 +%assign cpuflags_avx2 (1<<19)| cpuflags_fma3|cpuflags_bmi2 -%assign cpuflags_cache32 (1<<16) -%assign cpuflags_cache64 (1<<17) -%assign cpuflags_slowctz (1<<18) -%assign cpuflags_lzcnt (1<<19) -%assign cpuflags_aligned (1<<20) ; not a cpu feature, but a function variant -%assign cpuflags_atom (1<<21) -%assign cpuflags_bmi1 (1<<22)|cpuflags_lzcnt -%assign cpuflags_bmi2 (1<<23)|cpuflags_bmi1 -%assign cpuflags_aesni (1<<24)|cpuflags_sse42 +%assign cpuflags_cache32 (1<<20) +%assign cpuflags_cache64 (1<<21) +%assign cpuflags_slowctz (1<<22) +%assign cpuflags_aligned (1<<23) ; not a cpu feature, but a function variant +%assign cpuflags_atom (1<<24) ; Returns a boolean value expressing whether or not the specified cpuflag is enabled. %define cpuflag(x) (((((cpuflags & (cpuflags_ %+ x)) ^ (cpuflags_ %+ x)) - 1) >> 31) & 1) @@ -1030,7 +1040,11 @@ INIT_XMM ; Append cpuflags to the callee's name iff the appended name is known and the plain name isn't %macro call 1 - call_internal %1 %+ SUFFIX, %1 + %ifid %1 + call_internal %1 %+ SUFFIX, %1 + %else + call %1 + %endif %endmacro %macro call_internal 2 %xdefine %%i %2 diff --git a/media/ffvpx/libavutil/x86/x86util.asm b/media/ffvpx/libavutil/x86/x86util.asm index 44ed750ae508..e1220dfc1a43 100644 --- a/media/ffvpx/libavutil/x86/x86util.asm +++ b/media/ffvpx/libavutil/x86/x86util.asm @@ -29,6 +29,21 @@ %include "libavutil/x86/x86inc.asm" +; expands to [base],...,[base+7*stride] +%define PASS8ROWS(base, base3, stride, stride3) \ + [base], [base + stride], [base + 2*stride], [base3], \ + [base3 + stride], [base3 + 2*stride], [base3 + stride3], [base3 + stride*4] + +; Interleave low src0 with low src1 and store in src0, +; interleave high src0 with high src1 and store in src1. +; %1 - types +; %2 - index of the register with src0 +; %3 - index of the register with src1 +; %4 - index of the register for intermediate results +; example for %1 - wd: input: src0: x0 x1 x2 x3 z0 z1 z2 z3 +; src1: y0 y1 y2 y3 q0 q1 q2 q3 +; output: src0: x0 y0 x1 y1 x2 y2 x3 y3 +; src1: z0 q0 z1 q1 z2 q2 z3 q3 %macro SBUTTERFLY 4 %ifidn %1, dqqq vperm2i128 m%4, m%2, m%3, q0301 @@ -56,6 +71,12 @@ SWAP %1, %3, %2 %endmacro +%macro SBUTTERFLYPD 3 + movlhps m%3, m%1, m%2 + movhlps m%2, m%2, m%1 + SWAP %1, %3 +%endmacro + %macro TRANSPOSE4x4B 5 SBUTTERFLY bw, %1, %2, %5 SBUTTERFLY bw, %3, %4, %5 @@ -102,12 +123,9 @@ %macro TRANSPOSE4x4PS 5 SBUTTERFLYPS %1, %2, %5 SBUTTERFLYPS %3, %4, %5 - movlhps m%5, m%1, m%3 - movhlps m%3, m%1 - SWAP %5, %1 - movlhps m%5, m%2, m%4 - movhlps m%4, m%2 - SWAP %5, %2, %3 + SBUTTERFLYPD %1, %3, %5 + SBUTTERFLYPD %2, %4, %5 + SWAP %2, %3 %endmacro %macro TRANSPOSE8x4D 9-11 @@ -260,6 +278,21 @@ SWAP %12, %15 %endmacro +%macro TRANSPOSE_8X8B 8 + %if mmsize == 8 + %error "This macro does not support mmsize == 8" + %endif + punpcklbw m%1, m%2 + punpcklbw m%3, m%4 + punpcklbw m%5, m%6 + punpcklbw m%7, m%8 + TRANSPOSE4x4W %1, %3, %5, %7, %2 + MOVHL m%2, m%1 + MOVHL m%4, m%3 + MOVHL m%6, m%5 + MOVHL m%8, m%7 +%endmacro + ; PABSW macro assumes %1 != %2, while ABS1/2 macros work in-place %macro PABSW 2 %if cpuflag(ssse3) @@ -799,12 +832,25 @@ pmaxsd %1, %2 %endmacro -%macro VBROADCASTSS 2 ; dst xmm/ymm, src m32 -%if cpuflag(avx) - vbroadcastss %1, %2 -%else ; sse - movss %1, %2 - shufps %1, %1, 0 +%macro VBROADCASTSS 2 ; dst xmm/ymm, src m32/xmm +%if cpuflag(avx2) + vbroadcastss %1, %2 +%elif cpuflag(avx) + %ifnum sizeof%2 ; avx1 register + shufps xmm%1, xmm%2, xmm%2, q0000 + %if sizeof%1 >= 32 ; mmsize>=32 + vinsertf128 %1, %1, xmm%1, 1 + %endif + %else ; avx1 memory + vbroadcastss %1, %2 + %endif +%else + %ifnum sizeof%2 ; sse register + shufps %1, %2, %2, q0000 + %else ; sse memory + movss %1, %2 + shufps %1, %1, 0 + %endif %endif %endmacro @@ -819,6 +865,21 @@ %endif %endmacro +%macro VPBROADCASTD 2 ; dst xmm/ymm, src m32/xmm +%if cpuflag(avx2) + vpbroadcastd %1, %2 +%elif cpuflag(avx) && sizeof%1 >= 32 + %error vpbroadcastd not possible with ymm on avx1. try vbroadcastss +%else + %ifnum sizeof%2 ; sse2 register + pshufd %1, %2, q0000 + %else ; sse memory + movd %1, %2 + pshufd %1, %1, 0 + %endif +%endif +%endmacro + %macro SHUFFLE_MASK_W 8 %rep 8 %if %1>=0x80 @@ -871,3 +932,79 @@ psrlq %1, 8*(%2) %endif %endmacro + +%macro MOVHL 2 ; dst, src +%ifidn %1, %2 + punpckhqdq %1, %2 +%elif cpuflag(avx) + punpckhqdq %1, %2, %2 +%elif cpuflag(sse4) + pshufd %1, %2, q3232 ; pshufd is slow on some older CPUs, so only use it on more modern ones +%else + movhlps %1, %2 ; may cause an int/float domain transition and has a dependency on dst +%endif +%endmacro + +; Horizontal Sum of Packed Single precision floats +; The resulting sum is in all elements. +%macro HSUMPS 2 ; dst/src, tmp +%if cpuflag(avx) + %if sizeof%1>=32 ; avx + vperm2f128 %2, %1, %1, (0)*16+(1) + addps %1, %2 + %endif + shufps %2, %1, %1, q1032 + addps %1, %2 + shufps %2, %1, %1, q0321 + addps %1, %2 +%else ; this form is a bit faster than the short avx-like emulation. + movaps %2, %1 + shufps %1, %1, q1032 + addps %1, %2 + movaps %2, %1 + shufps %1, %1, q0321 + addps %1, %2 + ; all %1 members should be equal for as long as float a+b==b+a +%endif +%endmacro + +; Emulate blendvps if not available +; +; src_b is destroyed when using emulation with logical operands +; SSE41 blendv instruction is hard coded to use xmm0 as mask +%macro BLENDVPS 3 ; dst/src_a, src_b, mask +%if cpuflag(avx) + blendvps %1, %1, %2, %3 +%elif cpuflag(sse4) + %ifnidn %3,xmm0 + %error sse41 blendvps uses xmm0 as default 3d operand, you used %3 + %endif + blendvps %1, %2, %3 +%else + xorps %2, %1 + andps %2, %3 + xorps %1, %2 +%endif +%endmacro + +; Emulate pblendvb if not available +; +; src_b is destroyed when using emulation with logical operands +; SSE41 blendv instruction is hard coded to use xmm0 as mask +%macro PBLENDVB 3 ; dst/src_a, src_b, mask +%if cpuflag(avx) + %if cpuflag(avx) && notcpuflag(avx2) && sizeof%1 >= 32 + %error pblendb not possible with ymm on avx1, try blendvps. + %endif + pblendvb %1, %1, %2, %3 +%elif cpuflag(sse4) + %ifnidn %3,xmm0 + %error sse41 pblendvd uses xmm0 as default 3d operand, you used %3 + %endif + pblendvb %1, %2, %3 +%else + pxor %2, %1 + pand %2, %3 + pxor %1, %2 +%endif +%endmacro From 4063f638229f99470d5f300c761414238f81ed3b Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Tue, 24 Oct 2017 21:59:46 +0200 Subject: [PATCH 06/69] Bug 1366201 - P4. Remove no longer necessary files. r=gerald MozReview-Commit-ID: 8aGXFlw6sR0 --HG-- extra : rebase_source : 4d8e27ad4a81276d5a55cce11e37978fb966ac3b --- media/ffvpx/FILES | 6 - media/ffvpx/libavcodec/dct.h | 69 --------- media/ffvpx/libavutil/atomic_suncc.h | 54 ------- media/ffvpx/libavutil/avutil.symbols | 3 - media/ffvpx/libavutil/display.c | 73 --------- media/ffvpx/libavutil/display.h | 114 -------------- media/ffvpx/libavutil/lzo.c | 205 ------------------------- media/ffvpx/libavutil/lzo.h | 66 -------- media/ffvpx/libavutil/motion_vector.h | 57 ------- media/ffvpx/libavutil/moz.build | 1 - media/ffvpx/libavutil/wchar_filename.h | 45 ------ 11 files changed, 693 deletions(-) delete mode 100644 media/ffvpx/libavcodec/dct.h delete mode 100644 media/ffvpx/libavutil/atomic_suncc.h delete mode 100644 media/ffvpx/libavutil/display.c delete mode 100644 media/ffvpx/libavutil/display.h delete mode 100644 media/ffvpx/libavutil/lzo.c delete mode 100644 media/ffvpx/libavutil/lzo.h delete mode 100644 media/ffvpx/libavutil/motion_vector.h delete mode 100644 media/ffvpx/libavutil/wchar_filename.h diff --git a/media/ffvpx/FILES b/media/ffvpx/FILES index e3c43b0ab259..c404cf9c8ad4 100644 --- a/media/ffvpx/FILES +++ b/media/ffvpx/FILES @@ -102,7 +102,6 @@ ./libavcodec/blockdsp.h ./libavcodec/bytestream.h ./libavcodec/codec_desc.c -./libavcodec/dct.h ./libavcodec/dummy_funcs.c ./libavcodec/error_resilience.h ./libavcodec/flac.c @@ -193,11 +192,8 @@ ./libavutil/lls.c ./libavutil/lls.h ./libavutil/log2_tab.c -./libavutil/lzo.c -./libavutil/lzo.h ./libavutil/macros.h ./libavutil/mem_internal.h -./libavutil/motion_vector.h ./libavutil/parseutils.h ./libavutil/pixelutils.c ./libavutil/pixelutils.h @@ -207,7 +203,6 @@ ./libavutil/reverse.c ./libavutil/threadmessage.h ./libavutil/time_internal.h -./libavutil/wchar_filename.h ./libavutil/x86/bswap.h ./libavutil/x86/cpuid.asm ./libavutil/x86/fixed_dsp.asm @@ -263,7 +258,6 @@ ./libavutil/cpu.c ./libavutil/cpu.h ./libavutil/cpu_internal.h -./libavutil/display.h ./libavutil/eval.c ./libavutil/float_dsp.c ./libavutil/float_dsp.h diff --git a/media/ffvpx/libavcodec/dct.h b/media/ffvpx/libavcodec/dct.h deleted file mode 100644 index 0a03e256d136..000000000000 --- a/media/ffvpx/libavcodec/dct.h +++ /dev/null @@ -1,69 +0,0 @@ -/* - * (I)DCT Transforms - * Copyright (c) 2009 Peter Ross - * Copyright (c) 2010 Alex Converse - * Copyright (c) 2010 Vitor Sessak - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#if !defined(AVCODEC_DCT_H) && (!defined(FFT_FLOAT) || FFT_FLOAT) -#define AVCODEC_DCT_H - -#include -#include - -#include "rdft.h" - -struct DCTContext { - int nbits; - int inverse; - RDFTContext rdft; - const float *costab; - FFTSample *csc2; - void (*dct_calc)(struct DCTContext *s, FFTSample *data); - void (*dct32)(FFTSample *out, const FFTSample *in); -}; - -/** - * Set up DCT. - * @param nbits size of the input array: - * (1 << nbits) for DCT-II, DCT-III and DST-I - * (1 << nbits) + 1 for DCT-I - * - * @note the first element of the input of DST-I is ignored - */ -int ff_dct_init(DCTContext *s, int nbits, enum DCTTransformType type); -void ff_dct_end (DCTContext *s); - -void ff_dct_init_x86(DCTContext *s); - -void ff_fdct_ifast(int16_t *data); -void ff_fdct_ifast248(int16_t *data); -void ff_jpeg_fdct_islow_8(int16_t *data); -void ff_jpeg_fdct_islow_10(int16_t *data); -void ff_fdct248_islow_8(int16_t *data); -void ff_fdct248_islow_10(int16_t *data); - -void ff_j_rev_dct(int16_t *data); -void ff_j_rev_dct4(int16_t *data); -void ff_j_rev_dct2(int16_t *data); -void ff_j_rev_dct1(int16_t *data); -void ff_jref_idct_put(uint8_t *dest, ptrdiff_t line_size, int16_t *block); -void ff_jref_idct_add(uint8_t *dest, ptrdiff_t line_size, int16_t *block); - -#endif /* AVCODEC_DCT_H */ diff --git a/media/ffvpx/libavutil/atomic_suncc.h b/media/ffvpx/libavutil/atomic_suncc.h deleted file mode 100644 index a75a37b47eb7..000000000000 --- a/media/ffvpx/libavutil/atomic_suncc.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_ATOMIC_SUNCC_H -#define AVUTIL_ATOMIC_SUNCC_H - -#include -#include - -#include "atomic.h" - -#define avpriv_atomic_int_get atomic_int_get_suncc -static inline int atomic_int_get_suncc(volatile int *ptr) -{ - __machine_rw_barrier(); - return *ptr; -} - -#define avpriv_atomic_int_set atomic_int_set_suncc -static inline void atomic_int_set_suncc(volatile int *ptr, int val) -{ - *ptr = val; - __machine_rw_barrier(); -} - -#define avpriv_atomic_int_add_and_fetch atomic_int_add_and_fetch_suncc -static inline int atomic_int_add_and_fetch_suncc(volatile int *ptr, int inc) -{ - return atomic_add_int_nv(ptr, inc); -} - -#define avpriv_atomic_ptr_cas atomic_ptr_cas_suncc -static inline void *atomic_ptr_cas_suncc(void * volatile *ptr, - void *oldval, void *newval) -{ - return atomic_cas_ptr(ptr, oldval, newval); -} - -#endif /* AVUTIL_ATOMIC_SUNCC_H */ diff --git a/media/ffvpx/libavutil/avutil.symbols b/media/ffvpx/libavutil/avutil.symbols index fb93143faf1c..ba68dc33c48b 100644 --- a/media/ffvpx/libavutil/avutil.symbols +++ b/media/ffvpx/libavutil/avutil.symbols @@ -57,9 +57,6 @@ av_dict_parse_string av_dict_set av_dict_set_int av_dirname -av_display_matrix_flip -av_display_rotation_get -av_display_rotation_set av_div_q av_dynarray2_add av_dynarray_add diff --git a/media/ffvpx/libavutil/display.c b/media/ffvpx/libavutil/display.c deleted file mode 100644 index a0076e067bb3..000000000000 --- a/media/ffvpx/libavutil/display.c +++ /dev/null @@ -1,73 +0,0 @@ -/* - * Copyright (c) 2014 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include -#include -#include - -#include "display.h" -#include "mathematics.h" - -// fixed point to double -#define CONV_FP(x) ((double) (x)) / (1 << 16) - -// double to fixed point -#define CONV_DB(x) (int32_t) ((x) * (1 << 16)) - -double av_display_rotation_get(const int32_t matrix[9]) -{ - double rotation, scale[2]; - - scale[0] = hypot(CONV_FP(matrix[0]), CONV_FP(matrix[3])); - scale[1] = hypot(CONV_FP(matrix[1]), CONV_FP(matrix[4])); - - if (scale[0] == 0.0 || scale[1] == 0.0) - return NAN; - - rotation = atan2(CONV_FP(matrix[1]) / scale[1], - CONV_FP(matrix[0]) / scale[0]) * 180 / M_PI; - - return -rotation; -} - -void av_display_rotation_set(int32_t matrix[9], double angle) -{ - double radians = -angle * M_PI / 180.0f; - double c = cos(radians); - double s = sin(radians); - - memset(matrix, 0, 9 * sizeof(int32_t)); - - matrix[0] = CONV_DB(c); - matrix[1] = CONV_DB(-s); - matrix[3] = CONV_DB(s); - matrix[4] = CONV_DB(c); - matrix[8] = 1 << 30; -} - -void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip) -{ - int i; - const int flip[] = { 1 - 2 * (!!hflip), 1 - 2 * (!!vflip), 1 }; - - if (hflip || vflip) - for (i = 0; i < 9; i++) - matrix[i] *= flip[i % 3]; -} diff --git a/media/ffvpx/libavutil/display.h b/media/ffvpx/libavutil/display.h deleted file mode 100644 index 515adad795d5..000000000000 --- a/media/ffvpx/libavutil/display.h +++ /dev/null @@ -1,114 +0,0 @@ -/* - * Copyright (c) 2014 Vittorio Giovara - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * Display matrix - */ - -#ifndef AVUTIL_DISPLAY_H -#define AVUTIL_DISPLAY_H - -#include -#include "common.h" - -/** - * @addtogroup lavu_video - * @{ - * - * @defgroup lavu_video_display Display transformation matrix functions - * @{ - */ - -/** - * @addtogroup lavu_video_display - * The display transformation matrix specifies an affine transformation that - * should be applied to video frames for correct presentation. It is compatible - * with the matrices stored in the ISO/IEC 14496-12 container format. - * - * The data is a 3x3 matrix represented as a 9-element array: - * - * @code{.unparsed} - * | a b u | - * (a, b, u, c, d, v, x, y, w) -> | c d v | - * | x y w | - * @endcode - * - * All numbers are stored in native endianness, as 16.16 fixed-point values, - * except for u, v and w, which are stored as 2.30 fixed-point values. - * - * The transformation maps a point (p, q) in the source (pre-transformation) - * frame to the point (p', q') in the destination (post-transformation) frame as - * follows: - * - * @code{.unparsed} - * | a b u | - * (p, q, 1) . | c d v | = z * (p', q', 1) - * | x y w | - * @endcode - * - * The transformation can also be more explicitly written in components as - * follows: - * - * @code{.unparsed} - * p' = (a * p + c * q + x) / z; - * q' = (b * p + d * q + y) / z; - * z = u * p + v * q + w - * @endcode - */ - -/** - * Extract the rotation component of the transformation matrix. - * - * @param matrix the transformation matrix - * @return the angle (in degrees) by which the transformation rotates the frame - * counterclockwise. The angle will be in range [-180.0, 180.0], - * or NaN if the matrix is singular. - * - * @note floating point numbers are inherently inexact, so callers are - * recommended to round the return value to nearest integer before use. - */ -double av_display_rotation_get(const int32_t matrix[9]); - -/** - * Initialize a transformation matrix describing a pure counterclockwise - * rotation by the specified angle (in degrees). - * - * @param matrix an allocated transformation matrix (will be fully overwritten - * by this function) - * @param angle rotation angle in degrees. - */ -void av_display_rotation_set(int32_t matrix[9], double angle); - -/** - * Flip the input matrix horizontally and/or vertically. - * - * @param matrix an allocated transformation matrix - * @param hflip whether the matrix should be flipped horizontally - * @param vflip whether the matrix should be flipped vertically - */ -void av_display_matrix_flip(int32_t matrix[9], int hflip, int vflip); - -/** - * @} - * @} - */ - -#endif /* AVUTIL_DISPLAY_H */ diff --git a/media/ffvpx/libavutil/lzo.c b/media/ffvpx/libavutil/lzo.c deleted file mode 100644 index 1ae076e3359c..000000000000 --- a/media/ffvpx/libavutil/lzo.c +++ /dev/null @@ -1,205 +0,0 @@ -/* - * LZO 1x decompression - * Copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#include - -#include "avutil.h" -#include "avassert.h" -#include "common.h" -#include "intreadwrite.h" -#include "lzo.h" - -/// Define if we may write up to 12 bytes beyond the output buffer. -#define OUTBUF_PADDED 1 -/// Define if we may read up to 8 bytes beyond the input buffer. -#define INBUF_PADDED 1 - -typedef struct LZOContext { - const uint8_t *in, *in_end; - uint8_t *out_start, *out, *out_end; - int error; -} LZOContext; - -/** - * @brief Reads one byte from the input buffer, avoiding an overrun. - * @return byte read - */ -static inline int get_byte(LZOContext *c) -{ - if (c->in < c->in_end) - return *c->in++; - c->error |= AV_LZO_INPUT_DEPLETED; - return 1; -} - -#ifdef INBUF_PADDED -#define GETB(c) (*(c).in++) -#else -#define GETB(c) get_byte(&(c)) -#endif - -/** - * @brief Decodes a length value in the coding used by lzo. - * @param x previous byte value - * @param mask bits used from x - * @return decoded length value - */ -static inline int get_len(LZOContext *c, int x, int mask) -{ - int cnt = x & mask; - if (!cnt) { - while (!(x = get_byte(c))) { - if (cnt >= INT_MAX - 1000) { - c->error |= AV_LZO_ERROR; - break; - } - cnt += 255; - } - cnt += mask + x; - } - return cnt; -} - -/** - * @brief Copies bytes from input to output buffer with checking. - * @param cnt number of bytes to copy, must be >= 0 - */ -static inline void copy(LZOContext *c, int cnt) -{ - register const uint8_t *src = c->in; - register uint8_t *dst = c->out; - av_assert0(cnt >= 0); - if (cnt > c->in_end - src) { - cnt = FFMAX(c->in_end - src, 0); - c->error |= AV_LZO_INPUT_DEPLETED; - } - if (cnt > c->out_end - dst) { - cnt = FFMAX(c->out_end - dst, 0); - c->error |= AV_LZO_OUTPUT_FULL; - } -#if defined(INBUF_PADDED) && defined(OUTBUF_PADDED) - AV_COPY32U(dst, src); - src += 4; - dst += 4; - cnt -= 4; - if (cnt > 0) -#endif - memcpy(dst, src, cnt); - c->in = src + cnt; - c->out = dst + cnt; -} - -/** - * @brief Copies previously decoded bytes to current position. - * @param back how many bytes back we start, must be > 0 - * @param cnt number of bytes to copy, must be > 0 - * - * cnt > back is valid, this will copy the bytes we just copied, - * thus creating a repeating pattern with a period length of back. - */ -static inline void copy_backptr(LZOContext *c, int back, int cnt) -{ - register uint8_t *dst = c->out; - av_assert0(cnt > 0); - if (dst - c->out_start < back) { - c->error |= AV_LZO_INVALID_BACKPTR; - return; - } - if (cnt > c->out_end - dst) { - cnt = FFMAX(c->out_end - dst, 0); - c->error |= AV_LZO_OUTPUT_FULL; - } - av_memcpy_backptr(dst, back, cnt); - c->out = dst + cnt; -} - -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen) -{ - int state = 0; - int x; - LZOContext c; - if (*outlen <= 0 || *inlen <= 0) { - int res = 0; - if (*outlen <= 0) - res |= AV_LZO_OUTPUT_FULL; - if (*inlen <= 0) - res |= AV_LZO_INPUT_DEPLETED; - return res; - } - c.in = in; - c.in_end = (const uint8_t *)in + *inlen; - c.out = c.out_start = out; - c.out_end = (uint8_t *)out + *outlen; - c.error = 0; - x = GETB(c); - if (x > 17) { - copy(&c, x - 17); - x = GETB(c); - if (x < 16) - c.error |= AV_LZO_ERROR; - } - if (c.in > c.in_end) - c.error |= AV_LZO_INPUT_DEPLETED; - while (!c.error) { - int cnt, back; - if (x > 15) { - if (x > 63) { - cnt = (x >> 5) - 1; - back = (GETB(c) << 3) + ((x >> 2) & 7) + 1; - } else if (x > 31) { - cnt = get_len(&c, x, 31); - x = GETB(c); - back = (GETB(c) << 6) + (x >> 2) + 1; - } else { - cnt = get_len(&c, x, 7); - back = (1 << 14) + ((x & 8) << 11); - x = GETB(c); - back += (GETB(c) << 6) + (x >> 2); - if (back == (1 << 14)) { - if (cnt != 1) - c.error |= AV_LZO_ERROR; - break; - } - } - } else if (!state) { - cnt = get_len(&c, x, 15); - copy(&c, cnt + 3); - x = GETB(c); - if (x > 15) - continue; - cnt = 1; - back = (1 << 11) + (GETB(c) << 2) + (x >> 2) + 1; - } else { - cnt = 0; - back = (GETB(c) << 2) + (x >> 2) + 1; - } - copy_backptr(&c, back, cnt + 2); - state = - cnt = x & 3; - copy(&c, cnt); - x = GETB(c); - } - *inlen = c.in_end - c.in; - if (c.in > c.in_end) - *inlen = 0; - *outlen = c.out_end - c.out; - return c.error; -} diff --git a/media/ffvpx/libavutil/lzo.h b/media/ffvpx/libavutil/lzo.h deleted file mode 100644 index c03403992d5f..000000000000 --- a/media/ffvpx/libavutil/lzo.h +++ /dev/null @@ -1,66 +0,0 @@ -/* - * LZO 1x decompression - * copyright (c) 2006 Reimar Doeffinger - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_LZO_H -#define AVUTIL_LZO_H - -/** - * @defgroup lavu_lzo LZO - * @ingroup lavu_crypto - * - * @{ - */ - -#include - -/** @name Error flags returned by av_lzo1x_decode - * @{ */ -/// end of the input buffer reached before decoding finished -#define AV_LZO_INPUT_DEPLETED 1 -/// decoded data did not fit into output buffer -#define AV_LZO_OUTPUT_FULL 2 -/// a reference to previously decoded data was wrong -#define AV_LZO_INVALID_BACKPTR 4 -/// a non-specific error in the compressed bitstream -#define AV_LZO_ERROR 8 -/** @} */ - -#define AV_LZO_INPUT_PADDING 8 -#define AV_LZO_OUTPUT_PADDING 12 - -/** - * @brief Decodes LZO 1x compressed data. - * @param out output buffer - * @param outlen size of output buffer, number of bytes left are returned here - * @param in input buffer - * @param inlen size of input buffer, number of bytes left are returned here - * @return 0 on success, otherwise a combination of the error flags above - * - * Make sure all buffers are appropriately padded, in must provide - * AV_LZO_INPUT_PADDING, out must provide AV_LZO_OUTPUT_PADDING additional bytes. - */ -int av_lzo1x_decode(void *out, int *outlen, const void *in, int *inlen); - -/** - * @} - */ - -#endif /* AVUTIL_LZO_H */ diff --git a/media/ffvpx/libavutil/motion_vector.h b/media/ffvpx/libavutil/motion_vector.h deleted file mode 100644 index ec295563889a..000000000000 --- a/media/ffvpx/libavutil/motion_vector.h +++ /dev/null @@ -1,57 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_MOTION_VECTOR_H -#define AVUTIL_MOTION_VECTOR_H - -#include - -typedef struct AVMotionVector { - /** - * Where the current macroblock comes from; negative value when it comes - * from the past, positive value when it comes from the future. - * XXX: set exact relative ref frame reference instead of a +/- 1 "direction". - */ - int32_t source; - /** - * Width and height of the block. - */ - uint8_t w, h; - /** - * Absolute source position. Can be outside the frame area. - */ - int16_t src_x, src_y; - /** - * Absolute destination position. Can be outside the frame area. - */ - int16_t dst_x, dst_y; - /** - * Extra flag information. - * Currently unused. - */ - uint64_t flags; - /** - * Motion vector - * src_x = dst_x + motion_x / motion_scale - * src_y = dst_y + motion_y / motion_scale - */ - int32_t motion_x, motion_y; - uint16_t motion_scale; -} AVMotionVector; - -#endif /* AVUTIL_MOTION_VECTOR_H */ diff --git a/media/ffvpx/libavutil/moz.build b/media/ffvpx/libavutil/moz.build index 413ac3d44216..63cbe9a6f0ab 100644 --- a/media/ffvpx/libavutil/moz.build +++ b/media/ffvpx/libavutil/moz.build @@ -22,7 +22,6 @@ SOURCES += [ 'cpu.c', 'crc.c', 'dict.c', - 'display.c', 'dummy_funcs.c', 'error.c', 'eval.c', diff --git a/media/ffvpx/libavutil/wchar_filename.h b/media/ffvpx/libavutil/wchar_filename.h deleted file mode 100644 index 2ade321bedd9..000000000000 --- a/media/ffvpx/libavutil/wchar_filename.h +++ /dev/null @@ -1,45 +0,0 @@ -/* - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -#ifndef AVUTIL_WCHAR_FILENAME_H -#define AVUTIL_WCHAR_FILENAME_H - -#if defined(_WIN32) && !defined(__MINGW32CE__) -#include -#include "mem.h" - -av_warn_unused_result -static inline int utf8towchar(const char *filename_utf8, wchar_t **filename_w) -{ - int num_chars; - num_chars = MultiByteToWideChar(CP_UTF8, MB_ERR_INVALID_CHARS, filename_utf8, -1, NULL, 0); - if (num_chars <= 0) { - *filename_w = NULL; - return 0; - } - *filename_w = (wchar_t *)av_mallocz_array(num_chars, sizeof(wchar_t)); - if (!*filename_w) { - errno = ENOMEM; - return -1; - } - MultiByteToWideChar(CP_UTF8, 0, filename_utf8, -1, *filename_w, num_chars); - return 0; -} -#endif - -#endif /* AVUTIL_WCHAR_FILENAME_H */ From b7f6b46a82d356b66cc00adde158bdbbfb16c030 Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Wed, 25 Oct 2017 18:25:37 +0200 Subject: [PATCH 07/69] Bug 1366201 - P5. Get around FFmpeg bug with corrupted data. r=gerald According to FFmpeg documentation, the out parameter is "set to size of parsed buffer or zero if not yet finished. " however this is only the case if no error occurred; otherwise it is left untouched. We want the invalid content to generate a decoding error, so we set size to inputSize to ensure decoding failed later. MozReview-Commit-ID: FZeiZUdUtLG --HG-- extra : rebase_source : 2e81d730bacaea5bb968f704a36b403117dafcba --- dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp index 6acc8fef4dd8..fdee880c9e3b 100644 --- a/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp +++ b/dom/media/platforms/ffmpeg/FFmpegVideoDecoder.cpp @@ -217,8 +217,8 @@ FFmpegVideoDecoder::DoDecode(MediaRawData* aSample, bool* aGotFrame, #endif )) { while (inputSize) { - uint8_t* data; - int size; + uint8_t* data = inputData; + int size = inputSize; int len = mLib->av_parser_parse2( mCodecParser, mCodecContext, &data, &size, inputData, inputSize, aSample->mTime.ToMicroseconds(), aSample->mTimecode.ToMicroseconds(), From ee011aac6feaa261a0c675d121e493b02b066a40 Mon Sep 17 00:00:00 2001 From: maliu Date: Wed, 25 Oct 2017 21:03:02 +0800 Subject: [PATCH 08/69] Bug 1360587 - Part 1. Remove apk upload task, r=aki MozReview-Commit-ID: RhXoazDESU --HG-- extra : rebase_source : 0f0c63ac0be7c02ad419449b75ea91c159682f68 --- taskcluster/taskgraph/transforms/beetmover.py | 2 -- .../configs/releases/bouncer_fennec.py | 22 --------------- .../configs/releases/bouncer_fennec_beta.py | 22 --------------- .../release/push-candidate-to-releases.py | 1 - toolkit/mozapps/installer/upload-files-APK.mk | 28 +------------------ 5 files changed, 1 insertion(+), 74 deletions(-) delete mode 100644 testing/mozharness/configs/releases/bouncer_fennec.py delete mode 100644 testing/mozharness/configs/releases/bouncer_fennec_beta.py diff --git a/taskcluster/taskgraph/transforms/beetmover.py b/taskcluster/taskgraph/transforms/beetmover.py index 3a2dbf2ed455..06af9f8641ea 100644 --- a/taskcluster/taskgraph/transforms/beetmover.py +++ b/taskcluster/taskgraph/transforms/beetmover.py @@ -82,7 +82,6 @@ _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_EN_US = [ "en-US/target.web-platform.tests.tar.gz", "en-US/target.xpcshell.tests.zip", "en-US/target_info.txt", - "en-US/bouncer.apk", "en-US/mozharness.zip", "en-US/robocop.apk", "en-US/target.jsshell.zip", @@ -106,7 +105,6 @@ _MOBILE_UPSTREAM_ARTIFACTS_UNSIGNED_MULTI = [ "target.web-platform.tests.tar.gz", "target.xpcshell.tests.zip", "target_info.txt", - "bouncer.apk", "mozharness.zip", "robocop.apk", "target.jsshell.zip", diff --git a/testing/mozharness/configs/releases/bouncer_fennec.py b/testing/mozharness/configs/releases/bouncer_fennec.py deleted file mode 100644 index e4d33457384d..000000000000 --- a/testing/mozharness/configs/releases/bouncer_fennec.py +++ /dev/null @@ -1,22 +0,0 @@ -# lint_ignore=E501 -config = { - "products": { - "apk": { - "product-name": "Fennec-%(version)s", - "check_uptake": True, - "alias": "fennec-latest", - "ssl-only": True, - "add-locales": False, # Do not add locales to let "multi" work - "paths": { - "android-api-16": { - "path": "/mobile/releases/%(version)s/android-api-16/:lang/fennec-%(version)s.:lang.android-arm.apk", - "bouncer-platform": "android", - }, - "android-x86": { - "path": "/mobile/releases/%(version)s/android-x86/:lang/fennec-%(version)s.:lang.android-i386.apk", - "bouncer-platform": "android-x86", - }, - }, - }, - }, -} diff --git a/testing/mozharness/configs/releases/bouncer_fennec_beta.py b/testing/mozharness/configs/releases/bouncer_fennec_beta.py deleted file mode 100644 index 7d7b1c7a64ff..000000000000 --- a/testing/mozharness/configs/releases/bouncer_fennec_beta.py +++ /dev/null @@ -1,22 +0,0 @@ -# lint_ignore=E501 -config = { - "products": { - "apk": { - "product-name": "Fennec-%(version)s", - "check_uptake": True, - "alias": "fennec-beta-latest", - "ssl-only": True, - "add-locales": False, # Do not add locales to let "multi" work - "paths": { - "android-api-16": { - "path": "/mobile/releases/%(version)s/android-api-16/:lang/fennec-%(version)s.:lang.android-arm.apk", - "bouncer-platform": "android", - }, - "android-x86": { - "path": "/mobile/releases/%(version)s/android-x86/:lang/fennec-%(version)s.:lang.android-i386.apk", - "bouncer-platform": "android-x86", - }, - }, - }, - }, -} diff --git a/testing/mozharness/scripts/release/push-candidate-to-releases.py b/testing/mozharness/scripts/release/push-candidate-to-releases.py index afe41aff41ff..0a8791e070ca 100644 --- a/testing/mozharness/scripts/release/push-candidate-to-releases.py +++ b/testing/mozharness/scripts/release/push-candidate-to-releases.py @@ -48,7 +48,6 @@ class ReleasePusher(BaseScript, VirtualenvMixin): r"^.*/host.*$", r"^.*/mar-tools/.*$", r"^.*robocop.apk$", - r"^.*bouncer.apk$", r"^.*contrib.*", r"^.*/beetmover-checksums/.*$", ], diff --git a/toolkit/mozapps/installer/upload-files-APK.mk b/toolkit/mozapps/installer/upload-files-APK.mk index 2a4f6140730f..9bc3fc49cb4b 100644 --- a/toolkit/mozapps/installer/upload-files-APK.mk +++ b/toolkit/mozapps/installer/upload-files-APK.mk @@ -42,31 +42,6 @@ else INNER_ROBOCOP_PACKAGE=echo 'Testing is disabled - No Android Robocop for you' endif -ifdef MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER -INNER_INSTALL_BOUNCER_PACKAGE=true -ifdef ENABLE_TESTS -UPLOAD_EXTRA_FILES += bouncer.apk - -bouncer_package=$(ABS_DIST)/bouncer.apk - -# Package and release sign the install bouncer APK. This assumes that the main -# APK (that is, $(PACKAGE)) has already been produced, and verifies that the -# bouncer APK and the main APK define the same set of permissions. The -# intention is to avoid permission-related surprises when bouncing to the -# installation process in the Play Store. N.b.: sort -u is Posix and saves -# invoking uniq separately. diff -u is *not* Posix, so we only add -c. -INNER_INSTALL_BOUNCER_PACKAGE=\ - $(call RELEASE_SIGN_ANDROID_APK,$(topobjdir)/mobile/android/bouncer/bouncer-unsigned-unaligned.apk,$(bouncer_package)) && \ - ($(AAPT) dump permissions $(PACKAGE) | sort -u > $(PACKAGE).permissions && \ - $(AAPT) dump permissions $(bouncer_package) | sort -u > $(bouncer_package).permissions && \ - diff -c $(PACKAGE).permissions $(bouncer_package).permissions || \ - (echo "*** Error: The permissions of the bouncer package differ from the permissions of the main package. Ensure the bouncer and main package Android manifests agree, rebuild mobile/android, and re-package." && exit 1)) -else -INNER_INSTALL_BOUNCER_PACKAGE=echo 'Testing is disabled, so the install bouncer is disabled - No trampolines for you' -endif # ENABLE_TESTS -else -INNER_INSTALL_BOUNCER_PACKAGE=echo 'Install bouncer is disabled - No trampolines for you' -endif # MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER # Fennec's OMNIJAR_NAME can include a directory; for example, it might # be "assets/omni.ja". This path specifies where the omni.ja file @@ -107,8 +82,7 @@ INNER_FENNEC_PACKAGE = \ # Packaging produces many optional artifacts. package_fennec = \ $(INNER_FENNEC_PACKAGE) && \ - $(INNER_ROBOCOP_PACKAGE) && \ - $(INNER_INSTALL_BOUNCER_PACKAGE) + $(INNER_ROBOCOP_PACKAGE) # Re-packaging only replaces Android resources and the omnijar before # (re-)signing. From a2f6cf439f580de81d83d41b36a2c4bee5a10f1c Mon Sep 17 00:00:00 2001 From: maliu Date: Wed, 25 Oct 2017 22:51:44 +0800 Subject: [PATCH 09/69] Bug 1360587 - Part 2. Remove bouncer apk build config; source; docs, r=nalexander MozReview-Commit-ID: C1QJcr65yWu --HG-- extra : rebase_source : 867d143416321adc4820d488991fb4575c767cf0 --- mobile/android/app/build.gradle | 4 +- mobile/android/base/AndroidManifest.xml.in | 10 +- .../base/FennecManifest_permissions.xml.in | 8 -- mobile/android/base/moz.build | 10 +- mobile/android/bouncer/AndroidManifest.xml.in | 96 -------------- mobile/android/bouncer/Makefile.in | 20 --- .../android/bouncer/assets/example_asset.txt | 1 - mobile/android/bouncer/build.gradle | 78 ----------- .../org/mozilla/bouncer/BouncerService.java | 125 ------------------ .../java/org/mozilla/gecko/BrowserApp.java | 46 ------- mobile/android/bouncer/moz.build | 48 ------- .../android/bouncer/res/drawable-v21/logo.xml | 15 --- mobile/android/bouncer/res/drawable/logo.xml | 9 -- mobile/android/docs/bouncer.rst | 38 ------ mobile/android/docs/index.rst | 1 - .../geckoview/src/main/AndroidManifest.xml | 3 - mobile/android/moz.build | 6 - mobile/android/moz.configure | 7 - settings.gradle | 5 - 19 files changed, 9 insertions(+), 521 deletions(-) delete mode 100644 mobile/android/bouncer/AndroidManifest.xml.in delete mode 100644 mobile/android/bouncer/Makefile.in delete mode 100644 mobile/android/bouncer/assets/example_asset.txt delete mode 100644 mobile/android/bouncer/build.gradle delete mode 100644 mobile/android/bouncer/java/org/mozilla/bouncer/BouncerService.java delete mode 100644 mobile/android/bouncer/java/org/mozilla/gecko/BrowserApp.java delete mode 100644 mobile/android/bouncer/moz.build delete mode 100644 mobile/android/bouncer/res/drawable-v21/logo.xml delete mode 100644 mobile/android/bouncer/res/drawable/logo.xml delete mode 100644 mobile/android/docs/bouncer.rst diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle index c4dd087ac388..87b518ded83c 100644 --- a/mobile/android/app/build.gradle +++ b/mobile/android/app/build.gradle @@ -173,9 +173,7 @@ android { } assets { - if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY && !mozconfig.substs.MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER) { - // If we are packaging the bouncer, it will have the distribution, so don't put - // it in the main APK as well. + if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY) { srcDir "${mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY}/assets" } srcDir "${topsrcdir}/mobile/android/app/assets" diff --git a/mobile/android/base/AndroidManifest.xml.in b/mobile/android/base/AndroidManifest.xml.in index 37fbca95f88c..6dd224871af1 100644 --- a/mobile/android/base/AndroidManifest.xml.in +++ b/mobile/android/base/AndroidManifest.xml.in @@ -15,11 +15,11 @@ #endif android:targetSdkVersion="@ANDROID_TARGET_SDK@"/> - + + #include FennecManifest_permissions.xml.in , , and elements. This reduces - the likelihood of permission-related surprises when installing the main APK - on top of a pre-installed bouncer APK. Add such elements here, so that - they can be easily shared between the two APKs. --> #include ../services/manifests/FxAccountAndroidManifest_permissions.xml.in @@ -23,9 +18,6 @@ - diff --git a/mobile/android/base/moz.build b/mobile/android/base/moz.build index 2cd2376ed67d..09cad9d8ecc3 100644 --- a/mobile/android/base/moz.build +++ b/mobile/android/base/moz.build @@ -1413,13 +1413,9 @@ ANDROID_ASSETS_DIRS += [ ] if CONFIG['MOZ_ANDROID_DISTRIBUTION_DIRECTORY']: - # If you change this, also change its equivalent in mobile/android/bouncer. - if not CONFIG['MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER']: - # If we are packaging the bouncer, it will have the distribution, so don't put - # it in the main APK as well. - ANDROID_ASSETS_DIRS += [ - '%' + CONFIG['MOZ_ANDROID_DISTRIBUTION_DIRECTORY'] + '/assets', - ] + ANDROID_ASSETS_DIRS += [ + '%' + CONFIG['MOZ_ANDROID_DISTRIBUTION_DIRECTORY'] + '/assets', + ] if CONFIG['MOZ_ANDROID_SEARCH_ACTIVITY']: # The Search Activity is mostly independent of Fennec proper, but diff --git a/mobile/android/bouncer/AndroidManifest.xml.in b/mobile/android/bouncer/AndroidManifest.xml.in deleted file mode 100644 index 5669ceafd0c1..000000000000 --- a/mobile/android/bouncer/AndroidManifest.xml.in +++ /dev/null @@ -1,96 +0,0 @@ -#filter substitution - - - - - -#include ../base/FennecManifest_permissions.xml.in - - -#else - android:debuggable="false"> -#endif - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/mobile/android/bouncer/Makefile.in b/mobile/android/bouncer/Makefile.in deleted file mode 100644 index 0a971d5d66b8..000000000000 --- a/mobile/android/bouncer/Makefile.in +++ /dev/null @@ -1,20 +0,0 @@ -# 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/. - -include $(topsrcdir)/config/config.mk - -JAVAFILES := \ - java/org/mozilla/bouncer/BouncerService.java \ - java/org/mozilla/gecko/BrowserApp.java \ - $(NULL) - -ANDROID_EXTRA_JARS := \ - $(NULL) - -# Targets built very early during a Gradle build. -gradle-targets: $(abspath AndroidManifest.xml) - -.PHONY: gradle-targets - -libs:: $(ANDROID_APK_NAME).apk diff --git a/mobile/android/bouncer/assets/example_asset.txt b/mobile/android/bouncer/assets/example_asset.txt deleted file mode 100644 index 34338f983eae..000000000000 --- a/mobile/android/bouncer/assets/example_asset.txt +++ /dev/null @@ -1 +0,0 @@ -This is an example asset. diff --git a/mobile/android/bouncer/build.gradle b/mobile/android/bouncer/build.gradle deleted file mode 100644 index 1aada6dddf00..000000000000 --- a/mobile/android/bouncer/build.gradle +++ /dev/null @@ -1,78 +0,0 @@ -buildDir "${topobjdir}/gradle/build/mobile/android/bouncer" - -apply plugin: 'com.android.application' - -android { - compileSdkVersion project.ext.compileSdkVersion - buildToolsVersion project.ext.buildToolsVersion - - defaultConfig { - targetSdkVersion project.ext.targetSdkVersion - minSdkVersion project.ext.minSdkVersion - manifestPlaceholders = project.ext.manifestPlaceholders - - applicationId mozconfig.substs.ANDROID_PACKAGE_NAME - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_7 - targetCompatibility JavaVersion.VERSION_1_7 - } - - dexOptions { - javaMaxHeapSize "2g" - } - - lintOptions { - abortOnError false - } - - buildTypes { - release { - minifyEnabled false - } - } - - sourceSets { - main { - manifest.srcFile "${topobjdir}/mobile/android/bouncer/AndroidManifest.xml" - assets { - if (mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY) { - srcDir "${mozconfig.substs.MOZ_ANDROID_DISTRIBUTION_DIRECTORY}/assets" - } - } - java { - srcDir 'java' - } - res { - srcDir "${topsrcdir}/${mozconfig.substs.MOZ_BRANDING_DIRECTORY}/res" // For the icon. - srcDir 'res' - } - } - } -} - -task generateCodeAndResources(type:Exec) { - workingDir "${topobjdir}" - - commandLine mozconfig.substs.GMAKE - args '-C' - args "${topobjdir}/mobile/android/bouncer" - args 'gradle-targets' - - // Only show the output if something went wrong. - ignoreExitValue = true - standardOutput = new ByteArrayOutputStream() - errorOutput = standardOutput - doLast { - if (execResult.exitValue != 0) { - throw new GradleException("Process '${commandLine}' finished with non-zero exit value ${execResult.exitValue}:\n\n${standardOutput.toString()}") - } - } -} - -afterEvaluate { - android.applicationVariants.all { - preBuild.dependsOn generateCodeAndResources - } -} diff --git a/mobile/android/bouncer/java/org/mozilla/bouncer/BouncerService.java b/mobile/android/bouncer/java/org/mozilla/bouncer/BouncerService.java deleted file mode 100644 index c68bc62736c2..000000000000 --- a/mobile/android/bouncer/java/org/mozilla/bouncer/BouncerService.java +++ /dev/null @@ -1,125 +0,0 @@ -/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*- - * 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/. */ - -package org.mozilla.bouncer; - -import android.app.IntentService; -import android.content.Intent; -import android.util.Log; - -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; -import java.io.InputStream; -import java.io.OutputStream; -import java.util.ArrayList; -import java.util.List; - -public class BouncerService extends IntentService { - - private static final String LOGTAG = "GeckoBouncerService"; - - public BouncerService() { - super("BouncerService"); - } - - @Override - protected void onHandleIntent(Intent intent) { - final byte[] buffer = new byte[8192]; - - Log.d(LOGTAG, "Preparing to copy distribution files"); - - final List files; - try { - files = getFiles("distribution"); - } catch (IOException e) { - Log.e(LOGTAG, "Error getting distribution files from assets/distribution/**", e); - return; - } - - InputStream in = null; - for (String path : files) { - try { - Log.d(LOGTAG, "Copying distribution file: " + path); - - in = getAssets().open(path); - - final File outFile = getDataFile(path); - writeStream(in, outFile, buffer); - } catch (IOException e) { - Log.e(LOGTAG, "Error opening distribution input stream from assets", e); - } finally { - if (in != null) { - try { - in.close(); - } catch (IOException e) { - Log.e(LOGTAG, "Error closing distribution input stream", e); - } - } - } - } - } - - /** - * Recursively traverse a directory to list paths to all files. - * - * @param path Directory to traverse. - * @return List of all files in given directory. - * @throws IOException - */ - private List getFiles(String path) throws IOException { - List paths = new ArrayList<>(); - getFiles(path, paths); - return paths; - } - - /** - * Recursively traverse a directory to list paths to all files. - * - * @param path Directory to traverse. - * @param acc Accumulator of paths seen. - * @throws IOException - */ - private void getFiles(String path, List acc) throws IOException { - final String[] list = getAssets().list(path); - if (list.length > 0) { - // We're a directory -- recurse. - for (final String file : list) { - getFiles(path + "/" + file, acc); - } - } else { - // We're a file -- accumulate. - acc.add(path); - } - } - - private File getDataFile(final String path) { - File outFile = new File(getApplicationInfo().dataDir, path); - File dir = outFile.getParentFile(); - - if (dir != null && !dir.exists()) { - Log.d(LOGTAG, "Creating " + dir.getAbsolutePath()); - if (!dir.mkdirs()) { - Log.e(LOGTAG, "Unable to create directories: " + dir.getAbsolutePath()); - return null; - } - } - - return outFile; - } - - private void writeStream(InputStream fileStream, File outFile, byte[] buffer) - throws IOException { - final OutputStream outStream = new FileOutputStream(outFile); - try { - int count; - while ((count = fileStream.read(buffer)) > 0) { - outStream.write(buffer, 0, count); - } - } finally { - outStream.close(); - } - } -} diff --git a/mobile/android/bouncer/java/org/mozilla/gecko/BrowserApp.java b/mobile/android/bouncer/java/org/mozilla/gecko/BrowserApp.java deleted file mode 100644 index 8a462822f5c9..000000000000 --- a/mobile/android/bouncer/java/org/mozilla/gecko/BrowserApp.java +++ /dev/null @@ -1,46 +0,0 @@ -/* -*- Mode: Java; c-basic-offset: 4; tab-width: 4; indent-tabs-mode: nil; -*- - * 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/. */ - -package org.mozilla.gecko; - -import android.app.Activity; -import android.content.Intent; -import android.net.Uri; -import android.os.Bundle; -import android.util.Log; - -import org.mozilla.bouncer.BouncerService; - -/** - * Bouncer activity version of BrowserApp. - * - * This class has the same name as org.mozilla.gecko.BrowserApp to preserve - * shortcuts created by the bouncer app. - */ -public class BrowserApp extends Activity { - private static final String LOGTAG = "GeckoBouncerActivity"; - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - // This races distribution installation against the Play Store killing our process to - // install the update. We'll live with it. To do better, consider using an Intent to - // notify when the service has completed. - startService(new Intent(this, BouncerService.class)); - - final String appPackageName = Uri.encode(getPackageName()); - final Uri uri = Uri.parse("market://details?id=" + appPackageName); - Log.i(LOGTAG, "Lanching activity with URL: " + uri.toString()); - - // It might be more correct to catch failure in case the Play Store isn't installed. The - // fallback action is to open the Play Store website... but doing so may offer Firefox as - // browser (since even the bouncer offers to view URLs), which will be very confusing. - // Therefore, we don't try to be fancy here, and we just fail (silently). - startActivity(new Intent(Intent.ACTION_VIEW, uri)); - - finish(); - } -} diff --git a/mobile/android/bouncer/moz.build b/mobile/android/bouncer/moz.build deleted file mode 100644 index 417cdcfdc577..000000000000 --- a/mobile/android/bouncer/moz.build +++ /dev/null @@ -1,48 +0,0 @@ -# -*- 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/. - -DEFINES['ANDROID_VERSION_CODE'] = '1' - -for var in ('ANDROID_PACKAGE_NAME', - 'ANDROID_TARGET_SDK', - 'MOZ_ANDROID_BROWSER_INTENT_CLASS', - 'MOZ_APP_DISPLAYNAME', - 'MOZ_APP_VERSION'): - DEFINES[var] = CONFIG[var] - -for var in ('MOZ_ANDROID_GCM', - 'MOZ_ANDROID_MIN_SDK_VERSION', - 'MOZ_ANDROID_MAX_SDK_VERSION', - 'MOZ_ANDROID_DOWNLOADS_INTEGRATION', - 'MOZ_ANDROID_BEAM', - 'MOZ_ANDROID_SEARCH_ACTIVITY', - 'MOZ_ANDROID_MLS_STUMBLER'): - if CONFIG[var]: - DEFINES[var] = CONFIG[var] - -ANDROID_APK_NAME = 'bouncer' -ANDROID_APK_PACKAGE = CONFIG['ANDROID_PACKAGE_NAME'] - -# Putting branding earlier allows branders to override default resources. -ANDROID_RES_DIRS += [ - '/' + CONFIG['MOZ_BRANDING_DIRECTORY'] + '/res', # For the icon. - 'res', -] - -ANDROID_ASSETS_DIRS += [ - 'assets', -] - -if CONFIG['MOZ_ANDROID_DISTRIBUTION_DIRECTORY']: - # If you change this, also change its equivalent in mobile/android/base. - ANDROID_ASSETS_DIRS += [ - '%' + CONFIG['MOZ_ANDROID_DISTRIBUTION_DIRECTORY'] + '/assets', - ] - -DEFINES['MOZ_ANDROID_SHARED_ID'] = CONFIG['MOZ_ANDROID_SHARED_ID'] -OBJDIR_PP_FILES.mobile.android.bouncer += [ - 'AndroidManifest.xml.in', -] diff --git a/mobile/android/bouncer/res/drawable-v21/logo.xml b/mobile/android/bouncer/res/drawable-v21/logo.xml deleted file mode 100644 index 568cbec00e08..000000000000 --- a/mobile/android/bouncer/res/drawable-v21/logo.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - diff --git a/mobile/android/bouncer/res/drawable/logo.xml b/mobile/android/bouncer/res/drawable/logo.xml deleted file mode 100644 index e188f80dce57..000000000000 --- a/mobile/android/bouncer/res/drawable/logo.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - diff --git a/mobile/android/docs/bouncer.rst b/mobile/android/docs/bouncer.rst deleted file mode 100644 index 6ba4a5f303d8..000000000000 --- a/mobile/android/docs/bouncer.rst +++ /dev/null @@ -1,38 +0,0 @@ -.. -*- Mode: rst; fill-column: 100; -*- - -========================================= - The Firefox for Android install bouncer -========================================= - -`Bug 1234629 `_ and `Bug 1163082 -`_ combine to allow building a very small -Fennec-like "bouncer" APK that redirects (bounces) a potential Fennec user to the marketplace of -their choice -- usually the Google Play Store -- to install the real Firefox for Android application -APK. - -The real APK should install seamlessly over top of the bouncer APK. Care is taken to keep the -bouncer and application APK manifest definitions identical, and to have the bouncer APK - manifest definitions look similar to the application APK manifest definitions. - -In addition, the bouncer APK can carry a Fennec distribution, which it copies onto the device before -redirecting to the marketplace. The application APK recognizes the installed distribution and -customizes itself accordingly on first run. - -The motivation is to allow partners to pre-install the very small bouncer APK on shipping devices -and to have a smooth path to upgrade to the full application APK, with a partner-specific -distribution in place. - -Technical details -================= - -To build the bouncer APK, define ``MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER``. To pack a distribution -into the bouncer APK (and *not* into the application APK), add a line like:: - - ac_add_options --with-android-distribution-directory=/path/to/fennec-distribution-sample - -to your ``mozconfig`` file. See the `general distribution documentation on the wiki -`_ for more information. - -The ``distribution`` directory should end up in the ``assets/distribution`` directory of the bouncer -APK. It will be copied into ``/data/data/$ANDROID_PACKAGE_NAME/distribution`` when the bouncer -executes. diff --git a/mobile/android/docs/index.rst b/mobile/android/docs/index.rst index 2cf7f62e6e6b..ec94a05bc59b 100644 --- a/mobile/android/docs/index.rst +++ b/mobile/android/docs/index.rst @@ -18,7 +18,6 @@ Contents: adjust mma defaultdomains - bouncer shutdown push diff --git a/mobile/android/geckoview/src/main/AndroidManifest.xml b/mobile/android/geckoview/src/main/AndroidManifest.xml index f430f4a3e38b..4f12ebf19593 100644 --- a/mobile/android/geckoview/src/main/AndroidManifest.xml +++ b/mobile/android/geckoview/src/main/AndroidManifest.xml @@ -7,9 +7,6 @@ - diff --git a/mobile/android/moz.build b/mobile/android/moz.build index 439e6764282d..2b7076a65b35 100644 --- a/mobile/android/moz.build +++ b/mobile/android/moz.build @@ -8,9 +8,6 @@ with Files('**'): BUG_COMPONENT = ('Firefox for Android', 'Build Config & IDE Support') SCHEDULES.exclusive = ['android'] -with Files('bouncer/**'): - BUG_COMPONENT = ('Firefox for Android', 'Distributions') - with Files('branding/**'): BUG_COMPONENT = ('Firefox for Android', 'General') @@ -72,9 +69,6 @@ DIRS += [ 'fonts', ] -if CONFIG['MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER']: - DIRS += ['bouncer'] # No ordering implied with respect to base. - TEST_DIRS += [ 'tests', ] diff --git a/mobile/android/moz.configure b/mobile/android/moz.configure index d8ac8d48b3a3..e7d066d0e255 100644 --- a/mobile/android/moz.configure +++ b/mobile/android/moz.configure @@ -100,13 +100,6 @@ option(env='MOZ_ANDROID_MOZILLA_ONLINE', set_config('MOZ_ANDROID_MOZILLA_ONLINE', depends_if('MOZ_ANDROID_MOZILLA_ONLINE')(lambda _: True)) -option(env='MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER', - help='Build and package the install bouncer APK', - default=True) - -set_config('MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER', - depends_if('MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER')(lambda _: True)) - imply_option('MOZ_SOCIAL', False) imply_option('MOZ_SERVICES_HEALTHREPORT', True) imply_option('MOZ_ANDROID_HISTORY', True) diff --git a/settings.gradle b/settings.gradle index d581dcd417f3..84916a3e91c2 100644 --- a/settings.gradle +++ b/settings.gradle @@ -40,11 +40,6 @@ project(':geckoview_example').projectDir = new File("${json.topsrcdir}/mobile/an project(':omnijar').projectDir = new File("${json.topsrcdir}/mobile/android/app/omnijar") project(':thirdparty').projectDir = new File("${json.topsrcdir}/mobile/android/thirdparty") -if (json.substs.MOZ_ANDROID_PACKAGE_INSTALL_BOUNCER) { - include ':bouncer' - project(':bouncer').projectDir = new File("${json.topsrcdir}/mobile/android/bouncer") -} - // The Gradle instance is shared between settings.gradle and all the // other build.gradle files (see // http://forums.gradle.org/gradle/topics/define_extension_properties_from_settings_xml). From e78b3f56ea1663bdbd9ddecfd8e759941c7b379a Mon Sep 17 00:00:00 2001 From: Masayuki Nakano Date: Wed, 25 Oct 2017 23:51:27 +0900 Subject: [PATCH 10/69] Bug 1409155 - IMEHandler should not associate IMC with any window if active IME is ATOK 2010 or earlier with x64 build on Win8 or later r=m_kato ATOK started to be TIP of TSF since 2011. Older than it, i.e., ATOK 2010 and earlier have a lot of problems even for daily use. Perhaps, the reason is Win 8 has a lot of changes around IMM-IME support and TSF, and ATOK 2010 is released earlier than Win 8. ATOK 2006 crashes while converting a word with candidate window. ATOK 2007 doesn't paint and resize suggest window and candidate window correctly (showing white window or too big window). ATOK 2008 and ATOK 2009 crash when user just opens their open state. ATOK 2010 isn't installable newly on Win 7 or later, but we have a lot of crash reports. Note that ATOK 2006 is the first version supporting Win XP x64. So, ATOK 2005 must not support x64 apps. Unfortunately, we cannot block loading DLLs of them. Therefore, IMEHandler should disassociate IMC from active window when user changes active keyboard layout to the legacy ATOK and not associate IME with any window when SetInputContext() is called even with "enabled". Additionally, when user changes active keyboard layout from the legacy ATOK to one of the other keyboard layouts, IMEHandler should associate IMC with current window for new active IME. MozReview-Commit-ID: RVYwmYxzO7 --HG-- extra : rebase_source : c237a3aca6ceb6a1f7251bd9421e4b905be5bc6c --- widget/windows/IMMHandler.cpp | 66 ++++++++++++++++++++++++-------- widget/windows/IMMHandler.h | 23 +++++++++-- widget/windows/WinIMEHandler.cpp | 25 ++++++++++-- widget/windows/WinIMEHandler.h | 1 + widget/windows/nsWindowBase.h | 2 + 5 files changed, 94 insertions(+), 23 deletions(-) diff --git a/widget/windows/IMMHandler.cpp b/widget/windows/IMMHandler.cpp index 803a088dc4aa..597d58dd122e 100644 --- a/widget/windows/IMMHandler.cpp +++ b/widget/windows/IMMHandler.cpp @@ -16,6 +16,7 @@ #include "mozilla/CheckedInt.h" #include "mozilla/MiscEvents.h" #include "mozilla/TextEvents.h" +#include "mozilla/WindowsVersion.h" #ifndef IME_PROP_ACCEPT_WIDE_VKEY #define IME_PROP_ACCEPT_WIDE_VKEY 0x20 @@ -225,6 +226,54 @@ bool IMMHandler::sAssumeVerticalWritingModeNotSupported = false; bool IMMHandler::sHasFocus = false; bool IMMHandler::sNativeCaretIsCreatedForPlugin = false; +#define IMPL_IS_IME_ACTIVE(aReadableName, aActualName) \ +bool \ +IMMHandler::Is ## aReadableName ## Active() \ +{ \ + return sIMEName.Equals(aActualName); \ +} \ + +IMPL_IS_IME_ACTIVE(ATOK2006, u"ATOK 2006") +IMPL_IS_IME_ACTIVE(ATOK2007, u"ATOK 2007") +IMPL_IS_IME_ACTIVE(ATOK2008, u"ATOK 2008") +IMPL_IS_IME_ACTIVE(ATOK2009, u"ATOK 2009") +IMPL_IS_IME_ACTIVE(ATOK2010, u"ATOK 2010") +// NOTE: Even on Windows for en-US, the name of Google Japanese Input is +// written in Japanese. +IMPL_IS_IME_ACTIVE(GoogleJapaneseInput, + u"Google \x65E5\x672C\x8A9E\x5165\x529B " + u"IMM32 \x30E2\x30B8\x30E5\x30FC\x30EB") +IMPL_IS_IME_ACTIVE(Japanist2003, u"Japanist 2003") + +#undef IMPL_IS_IME_ACTIVE + +// static +bool +IMMHandler::IsActiveIMEInBlockList() +{ + if (sIMEName.IsEmpty()) { + return false; + } +#ifdef _WIN64 + // ATOK started to be TIP of TSF since 2011. Older than it, i.e., ATOK 2010 + // and earlier have a lot of problems even for daily use. Perhaps, the + // reason is Win 8 has a lot of changes around IMM-IME support and TSF, + // and ATOK 2010 is released earlier than Win 8. + // ATOK 2006 crashes while converting a word with candidate window. + // ATOK 2007 doesn't paint and resize suggest window and candidate window + // correctly (showing white window or too big window). + // ATOK 2008 and ATOK 2009 crash when user just opens their open state. + // ATOK 2010 isn't installable newly on Win 7 or later, but we have a lot of + // crash reports. + if (IsWin8OrLater() && + (IsATOK2006Active() || IsATOK2007Active() || IsATOK2008Active() || + IsATOK2009Active() || IsATOK2010Active())) { + return true; + } +#endif // #ifdef _WIN64 + return false; +} + // static void IMMHandler::EnsureHandlerInstance() @@ -289,23 +338,6 @@ IMMHandler::IsTopLevelWindowOfComposition(nsWindow* aWindow) return WinUtils::GetTopLevelHWND(wnd, true) == aWindow->GetWindowHandle(); } -// static -bool -IMMHandler::IsJapanist2003Active() -{ - return sIMEName.EqualsLiteral("Japanist 2003"); -} - -// static -bool -IMMHandler::IsGoogleJapaneseInputActive() -{ - // NOTE: Even on Windows for en-US, the name of Google Japanese Input is - // written in Japanese. - return sIMEName.Equals(u"Google \x65E5\x672C\x8A9E\x5165\x529B " - u"IMM32 \x30E2\x30B8\x30E5\x30FC\x30EB"); -} - // static bool IMMHandler::ShouldDrawCompositionStringOurselves() diff --git a/widget/windows/IMMHandler.h b/widget/windows/IMMHandler.h index 6fcbb2f28916..11473db48067 100644 --- a/widget/windows/IMMHandler.h +++ b/widget/windows/IMMHandler.h @@ -157,7 +157,26 @@ public: static void DefaultProcOfPluginEvent(nsWindow* aWindow, const NPEvent* aEvent); - static bool IsGoogleJapaneseInputActive(); +#define DECL_IS_IME_ACTIVE(aReadableName) \ + static bool Is ## aReadableName ## Active(); \ + + // Japanese IMEs + DECL_IS_IME_ACTIVE(ATOK2006) + DECL_IS_IME_ACTIVE(ATOK2007) + DECL_IS_IME_ACTIVE(ATOK2008) + DECL_IS_IME_ACTIVE(ATOK2009) + DECL_IS_IME_ACTIVE(ATOK2010) + DECL_IS_IME_ACTIVE(GoogleJapaneseInput) + DECL_IS_IME_ACTIVE(Japanist2003) + +#undef DECL_IS_IME_ACTIVE + + /** + * IsActiveIMEInBlockList() returns true if we know active keyboard layout's + * IME has some crash bugs or something which make some damage to us. When + * this returns true, IMC shouldn't be associated with any windows. + */ + static bool IsActiveIMEInBlockList(); protected: static void EnsureHandlerInstance(); @@ -166,8 +185,6 @@ protected: static bool IsComposingOnPlugin(); static bool IsComposingWindow(nsWindow* aWindow); - static bool IsJapanist2003Active(); - static bool ShouldDrawCompositionStringOurselves(); static bool IsVerticalWritingSupported(); // aWindow can be nullptr if it's called without receiving WM_INPUTLANGCHANGE. diff --git a/widget/windows/WinIMEHandler.cpp b/widget/windows/WinIMEHandler.cpp index 597aee0c5222..00875eb91b70 100644 --- a/widget/windows/WinIMEHandler.cpp +++ b/widget/windows/WinIMEHandler.cpp @@ -43,6 +43,7 @@ namespace widget { nsWindow* IMEHandler::sFocusedWindow = nullptr; InputContextAction::Cause IMEHandler::sLastContextActionCause = InputContextAction::CAUSE_UNKNOWN; +bool IMEHandler::sForceDisableCurrentIMM_IME = false; bool IMEHandler::sPluginHasFocus = false; #ifdef NS_ENABLE_TSF @@ -82,6 +83,8 @@ IMEHandler::Initialize() #endif // #ifdef NS_ENABLE_TSF IMMHandler::Initialize(); + + sForceDisableCurrentIMM_IME = IMMHandler::IsActiveIMEInBlockList(); } // static @@ -185,8 +188,23 @@ IMEHandler::ProcessMessage(nsWindow* aWindow, UINT aMessage, } #endif // #ifdef NS_ENABLE_TSF - return IMMHandler::ProcessMessage(aWindow, aMessage, aWParam, aLParam, - aResult); + bool keepGoing = + IMMHandler::ProcessMessage(aWindow, aMessage, aWParam, aLParam, aResult); + + // If user changes active IME to an IME which is listed in our block list, + // we should disassociate IMC from the window for preventing the IME to work + // and crash. + if (aMessage == WM_INPUTLANGCHANGE) { + bool disableIME = IMMHandler::IsActiveIMEInBlockList(); + if (disableIME != sForceDisableCurrentIMM_IME) { + bool enable = + !disableIME && WinUtils::IsIMEEnabled(aWindow->InputContextRef()); + AssociateIMEContext(aWindow, enable); + sForceDisableCurrentIMM_IME = disableIME; + } + } + + return keepGoing; } #ifdef NS_ENABLE_TSF @@ -421,7 +439,8 @@ IMEHandler::OnDestroyWindow(nsWindow* aWindow) bool IMEHandler::NeedsToAssociateIMC() { - return !sAssociateIMCOnlyWhenIMM_IMEActive || !IsIMMActive(); + return !sForceDisableCurrentIMM_IME && + (!sAssociateIMCOnlyWhenIMM_IMEActive || !IsIMMActive()); } #endif // #ifdef NS_ENABLE_TSF diff --git a/widget/windows/WinIMEHandler.h b/widget/windows/WinIMEHandler.h index 068c63115827..ae4972db0805 100644 --- a/widget/windows/WinIMEHandler.h +++ b/widget/windows/WinIMEHandler.h @@ -146,6 +146,7 @@ private: static nsWindow* sFocusedWindow; static InputContextAction::Cause sLastContextActionCause; + static bool sForceDisableCurrentIMM_IME; static bool sPluginHasFocus; #ifdef NS_ENABLE_TSF diff --git a/widget/windows/nsWindowBase.h b/widget/windows/nsWindowBase.h index 405f5b359ea2..159c4fc00c7f 100644 --- a/widget/windows/nsWindowBase.h +++ b/widget/windows/nsWindowBase.h @@ -108,6 +108,8 @@ public: virtual bool HandleAppCommandMsg(const MSG& aAppCommandMsg, LRESULT *aRetValue); + const InputContext& InputContextRef() const { return mInputContext; } + protected: virtual int32_t LogToPhys(double aValue) = 0; void ChangedDPI(); From a31b8846c2bf10048ea7d5044b49da56bb1e4247 Mon Sep 17 00:00:00 2001 From: Benjamin Forehand Jr Date: Thu, 19 Oct 2017 23:31:52 -0700 Subject: [PATCH 11/69] Bug 1408066 - Addon.js install fails if path is incorrect. r=whimboo MozReview-Commit-ID: Eu5RUGU2bY4 --HG-- extra : rebase_source : 73e46adc80d454e2d321a44b78199e3cc4fadf67 --- testing/marionette/addon.js | 8 +++++++- .../harness/marionette_harness/tests/unit/test_addons.py | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/testing/marionette/addon.js b/testing/marionette/addon.js index 18721c267574..5d87222ef456 100644 --- a/testing/marionette/addon.js +++ b/testing/marionette/addon.js @@ -88,8 +88,14 @@ async function installAddon(file) { * If there is a problem installing the addon. */ addon.install = async function(path, temporary = false) { - let file = new FileUtils.File(path); let addon; + let file; + + try { + file = new FileUtils.File(path); + } catch (e) { + throw new UnknownError(`${path} is not an absolute path.`); + } if (!file.exists()) { throw new UnknownError(`Could not find add-on at '${path}'`); diff --git a/testing/marionette/harness/marionette_harness/tests/unit/test_addons.py b/testing/marionette/harness/marionette_harness/tests/unit/test_addons.py index 58c9662ccec8..6a048fd00d43 100644 --- a/testing/marionette/harness/marionette_harness/tests/unit/test_addons.py +++ b/testing/marionette/harness/marionette_harness/tests/unit/test_addons.py @@ -97,3 +97,7 @@ class TestAddons(MarionetteTestCase): with self.assertRaisesRegexp(AddonInstallException, "Could not find add-on at"): self.addons.install(addon_path) + + def test_install_with_relative_path(self): + with self.assertRaisesRegexp(AddonInstallException, "is not an absolute path."): + self.addons.install('webextension.xpi') From fc4a02e7c739166e0154e67e8592468737c45c65 Mon Sep 17 00:00:00 2001 From: "Alfredo.Yang" Date: Thu, 19 Oct 2017 11:12:48 +0800 Subject: [PATCH 12/69] Bug 1411815 - use BufferReader instead of ByteReader in ContainerParser. r=kinetik MozReview-Commit-ID: DB2J7w8PpAJ --HG-- extra : rebase_source : 113b9832df3ac223c9adbcaa44f224d0c792892b --- dom/media/mediasource/ContainerParser.cpp | 30 ++++++++++++++--------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/dom/media/mediasource/ContainerParser.cpp b/dom/media/mediasource/ContainerParser.cpp index 3ae1a13b9052..3370d34dbac9 100644 --- a/dom/media/mediasource/ContainerParser.cpp +++ b/dom/media/mediasource/ContainerParser.cpp @@ -13,10 +13,11 @@ #include "mp4_demuxer/MoofParser.h" #include "mozilla/Logging.h" #include "mozilla/Maybe.h" +#include "mozilla/Result.h" #include "MediaData.h" #ifdef MOZ_FMP4 #include "mp4_demuxer/AtomType.h" -#include "mp4_demuxer/ByteReader.h" +#include "mp4_demuxer/BufferReader.h" #include "mp4_demuxer/Stream.h" #endif #include "nsAutoPtr.h" @@ -477,9 +478,15 @@ private: AtomParser(const MediaContainerType& aType, const MediaByteBuffer* aData, StopAt aStop = StopAt::eEnd) + { + mValid = Init(aType, aData, aStop).isOk(); + } + + Result Init(const MediaContainerType& aType, const MediaByteBuffer* aData, + StopAt aStop) { const MediaContainerType mType(aType); // for logging macro. - mp4_demuxer::ByteReader reader(aData); + mp4_demuxer::BufferReader reader(aData); mp4_demuxer::AtomType initAtom("moov"); mp4_demuxer::AtomType mediaAtom("moof"); mp4_demuxer::AtomType dataAtom("mdat"); @@ -496,9 +503,12 @@ private: }; while (reader.Remaining() >= 8) { - uint64_t size = reader.ReadU32(); + uint32_t tmp; + MOZ_TRY_VAR(tmp, reader.ReadU32()); + uint64_t size = tmp; const uint8_t* typec = reader.Peek(4); - mp4_demuxer::AtomType type(reader.ReadU32()); + MOZ_TRY_VAR(tmp, reader.ReadU32()); + mp4_demuxer::AtomType type(tmp); MSE_DEBUGV(AtomParser ,"Checking atom:'%c%c%c%c' @ %u", typec[0], typec[1], typec[2], typec[3], (uint32_t)reader.Offset() - 8); @@ -510,8 +520,7 @@ private: mLastInvalidBox[2] = typec[2]; mLastInvalidBox[3] = typec[3]; mLastInvalidBox[4] = '\0'; - mValid = false; - break; + return Err(NS_ERROR_FAILURE); } if (mInitOffset.isNothing() && mp4_demuxer::AtomType(type) == initAtom) { @@ -527,10 +536,7 @@ private: } if (size == 1) { // 64 bits size. - if (!reader.CanReadType()) { - break; - } - size = reader.ReadU64(); + MOZ_TRY_VAR(size, reader.ReadU64()); } else if (size == 0) { // Atom extends to the end of the buffer, it can't have what we're // looking for. @@ -556,6 +562,8 @@ private: break; } } + + return Ok(); } bool StartWithInitSegment() const @@ -574,7 +582,7 @@ private: Maybe mInitOffset; Maybe mMediaOffset; Maybe mDataOffset; - bool mValid = true; + bool mValid; char mLastInvalidBox[5]; }; From 8da03429786055b1889ffe2d439ebbbae61cc8ce Mon Sep 17 00:00:00 2001 From: "Alfredo.Yang" Date: Fri, 20 Oct 2017 11:54:29 +0800 Subject: [PATCH 13/69] Bug 1411821 - use BufferReader instead of ByteReader in MP3 parser. r=kinetik MozReview-Commit-ID: BpfCZUG7C6c --HG-- extra : rebase_source : 45716111d62faac68499f4c369e3cb948de190ce --- dom/media/mp3/MP3Demuxer.cpp | 9 +- dom/media/mp3/MP3FrameParser.cpp | 96 ++++++++++++------- dom/media/mp3/MP3FrameParser.h | 23 ++--- .../include/mp4_demuxer/BufferReader.h | 8 +- 4 files changed, 80 insertions(+), 56 deletions(-) diff --git a/dom/media/mp3/MP3Demuxer.cpp b/dom/media/mp3/MP3Demuxer.cpp index 1a6976ab9bb7..e5b1fcd2f764 100644 --- a/dom/media/mp3/MP3Demuxer.cpp +++ b/dom/media/mp3/MP3Demuxer.cpp @@ -24,7 +24,7 @@ extern mozilla::LazyLogModule gMediaDemuxerLog; using mozilla::media::TimeUnit; using mozilla::media::TimeInterval; using mozilla::media::TimeIntervals; -using mp4_demuxer::ByteReader; +using mp4_demuxer::BufferReader; namespace mozilla { @@ -538,9 +538,10 @@ MP3TrackDemuxer::FindNextFrame() break; } - ByteReader reader(buffer, read); + BufferReader reader(buffer, read); uint32_t bytesToSkip = 0; - foundFrame = mParser.Parse(&reader, &bytesToSkip); + auto res = mParser.Parse(&reader, &bytesToSkip); + foundFrame = res.isOk() ? res.unwrap() : false; frameHeaderOffset = mOffset + reader.Offset() - FrameParser::FrameHeader::SIZE; @@ -638,7 +639,7 @@ MP3TrackDemuxer::GetNextFrame(const MediaByteRange& aRange) if (mNumParsedFrames == 1) { // First frame parsed, let's read VBR info if available. - ByteReader reader(frame->Data(), frame->Size()); + BufferReader reader(frame->Data(), frame->Size()); mParser.ParseVBRHeader(&reader); mFirstFrameOffset = frame->mOffset; } diff --git a/dom/media/mp3/MP3FrameParser.cpp b/dom/media/mp3/MP3FrameParser.cpp index 5a365d7fb4aa..d907989f3814 100644 --- a/dom/media/mp3/MP3FrameParser.cpp +++ b/dom/media/mp3/MP3FrameParser.cpp @@ -11,6 +11,8 @@ #include "mozilla/Assertions.h" #include "mozilla/EndianUtils.h" +#include "mozilla/Pair.h" +#include "mozilla/ResultExtensions.h" #include "VideoUtils.h" extern mozilla::LazyLogModule gMediaDemuxerLog; @@ -19,7 +21,7 @@ extern mozilla::LazyLogModule gMediaDemuxerLog; #define MP3LOGV(msg, ...) \ MOZ_LOG(gMediaDemuxerLog, LogLevel::Verbose, ("MP3Demuxer " msg, ##__VA_ARGS__)) -using mp4_demuxer::ByteReader; +using mp4_demuxer::BufferReader; namespace mozilla { @@ -93,8 +95,8 @@ FrameParser::VBRInfo() const return mVBRHeader; } -bool -FrameParser::Parse(ByteReader* aReader, uint32_t* aBytesToSkip) +Result +FrameParser::Parse(BufferReader* aReader, uint32_t* aBytesToSkip) { MOZ_ASSERT(aReader && aBytesToSkip); *aBytesToSkip = 0; @@ -104,8 +106,9 @@ FrameParser::Parse(ByteReader* aReader, uint32_t* aBytesToSkip) // ID3v1 tags may only be at file end. // TODO: should we try to read ID3 tags at end of file/mid-stream, too? const size_t prevReaderOffset = aReader->Offset(); - const uint32_t tagSize = mID3Parser.Parse(aReader); - if (tagSize) { + uint32_t tagSize; + MOZ_TRY_VAR(tagSize, mID3Parser.Parse(aReader)); + if (!!tagSize) { // ID3 tag found, skip past it. const uint32_t skipSize = tagSize - ID3Parser::ID3Header::SIZE; @@ -128,7 +131,9 @@ FrameParser::Parse(ByteReader* aReader, uint32_t* aBytesToSkip) } } - while (aReader->CanRead8() && !mFrame.ParseNext(aReader->ReadU8())) { } + for (auto res = aReader->ReadU8(); + res.isOk() && !mFrame.ParseNext(res.unwrap()); res = aReader->ReadU8()) + {} if (mFrame.Length()) { // MP3 frame found. @@ -438,8 +443,8 @@ FrameParser::VBRHeader::Offset(float aDurationFac) const return offset; } -bool -FrameParser::VBRHeader::ParseXing(ByteReader* aReader) +Result +FrameParser::VBRHeader::ParseXing(BufferReader* aReader) { static const uint32_t XING_TAG = BigEndian::readUint32("Xing"); static const uint32_t INFO_TAG = BigEndian::readUint32("Info"); @@ -456,25 +461,28 @@ FrameParser::VBRHeader::ParseXing(ByteReader* aReader) const size_t prevReaderOffset = aReader->Offset(); // We have to search for the Xing header as its position can change. - while (aReader->CanRead32() && - aReader->PeekU32() != XING_TAG && aReader->PeekU32() != INFO_TAG) { + for (auto res = aReader->PeekU32(); + res.isOk() && res.unwrap() != XING_TAG && res.unwrap() != INFO_TAG;) { aReader->Read(1); + res = aReader->PeekU32(); } - if (aReader->CanRead32()) { - // Skip across the VBR header ID tag. - aReader->ReadU32(); - mType = XING; + // Skip across the VBR header ID tag. + MOZ_TRY(aReader->ReadU32()); + mType = XING; + + uint32_t flags; + MOZ_TRY_VAR(flags, aReader->ReadU32()); + + if (flags & NUM_FRAMES) { + uint32_t frames; + MOZ_TRY_VAR(frames, aReader->ReadU32()); + mNumAudioFrames = Some(frames); } - uint32_t flags = 0; - if (aReader->CanRead32()) { - flags = aReader->ReadU32(); - } - if (flags & NUM_FRAMES && aReader->CanRead32()) { - mNumAudioFrames = Some(aReader->ReadU32()); - } - if (flags & NUM_BYTES && aReader->CanRead32()) { - mNumBytes = Some(aReader->ReadU32()); + if (flags & NUM_BYTES) { + uint32_t bytes; + MOZ_TRY_VAR(bytes, aReader->ReadU32()); + mNumBytes = Some(bytes); } if (flags & TOC && aReader->Remaining() >= vbr_header::TOC_SIZE) { if (!mNumBytes) { @@ -483,21 +491,25 @@ FrameParser::VBRHeader::ParseXing(ByteReader* aReader) } else { mTOC.clear(); mTOC.reserve(vbr_header::TOC_SIZE); + uint8_t data; for (size_t i = 0; i < vbr_header::TOC_SIZE; ++i) { - mTOC.push_back(1.0f / 256.0f * aReader->ReadU8() * mNumBytes.value()); + MOZ_TRY_VAR(data, aReader->ReadU8()); + mTOC.push_back(1.0f / 256.0f * data * mNumBytes.value()); } } } - if (flags & VBR_SCALE && aReader->CanRead32()) { - mScale = Some(aReader->ReadU32()); + if (flags & VBR_SCALE) { + uint32_t scale; + MOZ_TRY_VAR(scale, aReader->ReadU32()); + mScale = Some(scale); } aReader->Seek(prevReaderOffset); return mType == XING; } -bool -FrameParser::VBRHeader::ParseVBRI(ByteReader* aReader) +Result +FrameParser::VBRHeader::ParseVBRI(BufferReader* aReader) { static const uint32_t TAG = BigEndian::readUint32("VBRI"); static const uint32_t OFFSET = 32 + FrameParser::FrameHeader::SIZE; @@ -508,15 +520,21 @@ FrameParser::VBRHeader::ParseVBRI(ByteReader* aReader) // ParseVBRI assumes that the ByteReader offset points to the beginning of a // frame, therefore as a simple check, we look for the presence of a frame // sync at that position. - MOZ_ASSERT((aReader->PeekU16() & 0xFFE0) == 0xFFE0); + auto sync = aReader->PeekU16(); + if (sync.isOk()) { // To avoid compiler complains 'set but unused'. + MOZ_ASSERT((sync.unwrap() & 0xFFE0) == 0xFFE0); + } const size_t prevReaderOffset = aReader->Offset(); // VBRI have a fixed relative position, so let's check for it there. if (aReader->Remaining() > MIN_FRAME_SIZE) { aReader->Seek(prevReaderOffset + OFFSET); - if (aReader->ReadU32() == TAG) { + uint32_t tag, frames; + MOZ_TRY_VAR(tag, aReader->ReadU32()); + if (tag == TAG) { aReader->Seek(prevReaderOffset + FRAME_COUNT_OFFSET); - mNumAudioFrames = Some(aReader->ReadU32()); + MOZ_TRY_VAR(frames, aReader->ReadU32()); + mNumAudioFrames = Some(frames); mType = VBRI; aReader->Seek(prevReaderOffset); return true; @@ -527,9 +545,11 @@ FrameParser::VBRHeader::ParseVBRI(ByteReader* aReader) } bool -FrameParser::VBRHeader::Parse(ByteReader* aReader) +FrameParser::VBRHeader::Parse(BufferReader* aReader) { - const bool rv = ParseVBRI(aReader) || ParseXing(aReader); + auto res = MakePair(ParseVBRI(aReader), ParseXing(aReader)); + const bool rv = (res.first().isOk() && res.first().unwrap()) || + (res.second().isOk() && res.second().unwrap()); if (rv) { MP3LOG("VBRHeader::Parse found valid VBR/CBR header: type=%s" " NumAudioFrames=%u NumBytes=%u Scale=%u TOC-size=%zu", @@ -574,7 +594,7 @@ FrameParser::Frame::Header() const } bool -FrameParser::ParseVBRHeader(ByteReader* aReader) +FrameParser::ParseVBRHeader(BufferReader* aReader) { return mVBRHeader.Parse(aReader); } @@ -599,12 +619,14 @@ static const uint8_t MIN_MAJOR_VER = 2; static const uint8_t MAX_MAJOR_VER = 4; } // namespace id3_header -uint32_t -ID3Parser::Parse(ByteReader* aReader) +Result +ID3Parser::Parse(BufferReader* aReader) { MOZ_ASSERT(aReader); - while (aReader->CanRead8() && !mHeader.ParseNext(aReader->ReadU8())) { } + for (auto res = aReader->ReadU8(); + res.isOk() && !mHeader.ParseNext(res.unwrap()); res = aReader->ReadU8()) + {} return mHeader.TotalTagSize(); } diff --git a/dom/media/mp3/MP3FrameParser.h b/dom/media/mp3/MP3FrameParser.h index fefd5fde5146..05a63db065f5 100644 --- a/dom/media/mp3/MP3FrameParser.h +++ b/dom/media/mp3/MP3FrameParser.h @@ -8,7 +8,8 @@ #include #include "mozilla/Maybe.h" -#include "mp4_demuxer/ByteReader.h" +#include "mozilla/Result.h" +#include "mp4_demuxer/BufferReader.h" namespace mozilla { @@ -81,9 +82,9 @@ public: // Returns the parsed ID3 header. Note: check for validity. const ID3Header& Header() const; - // Parses contents of given ByteReader for a valid ID3v2 header. + // Parses contents of given BufferReader for a valid ID3v2 header. // Returns the total ID3v2 tag size if successful and zero otherwise. - uint32_t Parse(mp4_demuxer::ByteReader* aReader); + Result Parse(mp4_demuxer::BufferReader* aReader); // Resets the state to allow for a new parsing session. void Reset(); @@ -227,20 +228,20 @@ public: // The offset of the passed ByteReader needs to point to an MPEG frame // begin, as a VBRI-style header is searched at a fixed offset relative to // frame begin. Returns whether a valid VBR header was found in the range. - bool Parse(mp4_demuxer::ByteReader* aReader); + bool Parse(mp4_demuxer::BufferReader* aReader); private: // Parses contents of given ByteReader for a valid Xing header. // The initial ByteReader offset will be preserved. // Returns whether a valid Xing header was found in the range. - bool ParseXing(mp4_demuxer::ByteReader* aReader); + Result ParseXing(mp4_demuxer::BufferReader* aReader); // Parses contents of given ByteReader for a valid VBRI header. // The initial ByteReader offset will be preserved. It also needs to point // to the beginning of a valid MPEG frame, as VBRI headers are searched // at a fixed offset relative to frame begin. // Returns whether a valid VBRI header was found in the range. - bool ParseVBRI(mp4_demuxer::ByteReader* aReader); + Result ParseVBRI(mp4_demuxer::BufferReader* aReader); // The total number of frames expected as parsed from a VBR header. Maybe mNumAudioFrames; @@ -311,17 +312,17 @@ public: // - resets ID3Header if no valid header was parsed yet void EndFrameSession(); - // Parses contents of given ByteReader for a valid frame header and returns + // Parses contents of given BufferReader for a valid frame header and returns // true if one was found. After returning, the variable passed to // 'aBytesToSkip' holds the amount of bytes to be skipped (if any) in order to // jump across a large ID3v2 tag spanning multiple buffers. - bool Parse(mp4_demuxer::ByteReader* aReader, uint32_t* aBytesToSkip); + Result Parse(mp4_demuxer::BufferReader* aReader, uint32_t* aBytesToSkip); - // Parses contents of given ByteReader for a valid VBR header. - // The offset of the passed ByteReader needs to point to an MPEG frame begin, + // Parses contents of given BufferReader for a valid VBR header. + // The offset of the passed BufferReader needs to point to an MPEG frame begin, // as a VBRI-style header is searched at a fixed offset relative to frame // begin. Returns whether a valid VBR header was found. - bool ParseVBRHeader(mp4_demuxer::ByteReader* aReader); + bool ParseVBRHeader(mp4_demuxer::BufferReader* aReader); private: // ID3 header parser. diff --git a/media/libstagefright/binding/include/mp4_demuxer/BufferReader.h b/media/libstagefright/binding/include/mp4_demuxer/BufferReader.h index 1046ba90bb2c..724013996716 100644 --- a/media/libstagefright/binding/include/mp4_demuxer/BufferReader.h +++ b/media/libstagefright/binding/include/mp4_demuxer/BufferReader.h @@ -192,12 +192,12 @@ public: return *ptr; } - uint16_t PeekU16() const + mozilla::Result PeekU16() const { auto ptr = Peek(2); if (!ptr) { NS_WARNING("Failed to peek data"); - return 0; + return mozilla::Err(NS_ERROR_FAILURE); } return mozilla::BigEndian::readUint16(ptr); } @@ -217,12 +217,12 @@ public: return (uint32_t)PeekU24(); } - uint32_t PeekU32() const + mozilla::Result PeekU32() { auto ptr = Peek(4); if (!ptr) { NS_WARNING("Failed to peek data"); - return 0; + return mozilla::Err(NS_ERROR_FAILURE); } return mozilla::BigEndian::readUint32(ptr); } From a3f0efc6565fbd05235deee30b7e326bb65c4469 Mon Sep 17 00:00:00 2001 From: "Alfredo.Yang" Date: Fri, 20 Oct 2017 15:34:32 +0800 Subject: [PATCH 14/69] Bug 1411824 - use BufferReader instead of ByteReader in wave parser. r=kinetik MozReview-Commit-ID: 1M9lbbgoBpX --HG-- extra : rebase_source : a418fe623ea1e0030a5e12b4267fd6353f752e2b --- dom/media/wave/WaveDemuxer.cpp | 46 ++++++++++++++++++++-------------- dom/media/wave/WaveDemuxer.h | 10 ++++---- 2 files changed, 32 insertions(+), 24 deletions(-) diff --git a/dom/media/wave/WaveDemuxer.cpp b/dom/media/wave/WaveDemuxer.cpp index 98d9cac555a3..19e6bbaeb031 100644 --- a/dom/media/wave/WaveDemuxer.cpp +++ b/dom/media/wave/WaveDemuxer.cpp @@ -11,7 +11,7 @@ #include "mozilla/Assertions.h" #include "mozilla/EndianUtils.h" -#include "mp4_demuxer/ByteReader.h" +#include "mp4_demuxer/BufferReader.h" #include "nsAutoPtr.h" #include "VideoUtils.h" #include "TimeUnits.h" @@ -166,8 +166,8 @@ WAVTrackDemuxer::RIFFParserInit() if (!riffHeader) { return false; } - ByteReader RIFFReader(riffHeader->Data(), 12); - mRIFFParser.Parse(RIFFReader); + BufferReader RIFFReader(riffHeader->Data(), 12); + Unused << mRIFFParser.Parse(RIFFReader); return mRIFFParser.RiffHeader().IsValid(11); } @@ -178,8 +178,8 @@ WAVTrackDemuxer::HeaderParserInit() if (!header) { return false; } - ByteReader HeaderReader(header->Data(), 8); - mHeaderParser.Parse(HeaderReader); + BufferReader HeaderReader(header->Data(), 8); + Unused << mHeaderParser.Parse(HeaderReader); return true; } @@ -190,9 +190,9 @@ WAVTrackDemuxer::FmtChunkParserInit() if (!fmtChunk) { return false; } - ByteReader fmtReader(fmtChunk->Data(), - mHeaderParser.GiveHeader().ChunkSize()); - mFmtParser.Parse(fmtReader); + BufferReader fmtReader(fmtChunk->Data(), + mHeaderParser.GiveHeader().ChunkSize()); + Unused << mFmtParser.Parse(fmtReader); return true; } @@ -205,8 +205,10 @@ WAVTrackDemuxer::ListChunkParserInit(uint32_t aChunkSize) if (!infoTag) { return false; } - ByteReader infoTagReader(infoTag->Data(), 4); - if (!infoTagReader.CanRead32() || infoTagReader.ReadU32() != INFO_CODE) { + + BufferReader infoTagReader(infoTag->Data(), 4); + auto res = infoTagReader.ReadU32(); + if (res.isErr() || (res.isOk() && res.unwrap() != INFO_CODE)) { return false; } @@ -619,10 +621,12 @@ WAVTrackDemuxer::Read(uint8_t* aBuffer, int64_t aOffset, int32_t aSize) // RIFFParser -uint32_t -RIFFParser::Parse(ByteReader& aReader) +Result +RIFFParser::Parse(BufferReader& aReader) { - while (aReader.CanRead8() && !mRiffHeader.ParseNext(aReader.ReadU8())) { } + for (auto res = aReader.ReadU8(); + res.isOk() && !mRiffHeader.ParseNext(res.unwrap()); res = aReader.ReadU8()) + {} if (mRiffHeader.IsValid()) { return RIFF_CHUNK_SIZE; @@ -698,10 +702,12 @@ RIFFParser::RIFFHeader::Update(uint8_t c) // HeaderParser -uint32_t -HeaderParser::Parse(ByteReader& aReader) +Result +HeaderParser::Parse(BufferReader& aReader) { - while (aReader.CanRead8() && !mHeader.ParseNext(aReader.ReadU8())) { } + for (auto res = aReader.ReadU8(); + res.isOk() && !mHeader.ParseNext(res.unwrap()); res = aReader.ReadU8()) + {} if (mHeader.IsValid()) { return CHUNK_HEAD_SIZE; @@ -777,10 +783,12 @@ HeaderParser::ChunkHeader::Update(uint8_t c) // FormatParser -uint32_t -FormatParser::Parse(ByteReader& aReader) +Result +FormatParser::Parse(BufferReader& aReader) { - while (aReader.CanRead8() && !mFmtChunk.ParseNext(aReader.ReadU8())) { } + for (auto res = aReader.ReadU8(); + res.isOk() && !mFmtChunk.ParseNext(res.unwrap()); res = aReader.ReadU8()) + {} if (mFmtChunk.IsValid()) { return FMT_CHUNK_MIN_SIZE; diff --git a/dom/media/wave/WaveDemuxer.h b/dom/media/wave/WaveDemuxer.h index f20b45e24771..70bf95f4836e 100644 --- a/dom/media/wave/WaveDemuxer.h +++ b/dom/media/wave/WaveDemuxer.h @@ -9,9 +9,9 @@ #include "MediaResource.h" namespace mp4_demuxer { -class ByteReader; +class BufferReader; } -using mp4_demuxer::ByteReader; +using mp4_demuxer::BufferReader; namespace mozilla { @@ -56,7 +56,7 @@ private: public: const RIFFHeader& RiffHeader() const; - uint32_t Parse(ByteReader& aReader); + Result Parse(BufferReader& aReader); void Reset(); @@ -90,7 +90,7 @@ private: public: const ChunkHeader& GiveHeader() const; - uint32_t Parse(ByteReader& aReader); + Result Parse(BufferReader& aReader); void Reset(); @@ -126,7 +126,7 @@ private: public: const FormatChunk& FmtChunk() const; - uint32_t Parse(ByteReader& aReader); + Result Parse(BufferReader& aReader); void Reset(); From 661494c52774a7facf49c9256c9eaf6c6ec9ddf0 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Wed, 18 Oct 2017 14:41:07 -0700 Subject: [PATCH 15/69] Bug 1405585 - Add telemetry to track inspector refresh time when reload a page. r=francois,jdescottes datareview=francois MozReview-Commit-ID: BetryDSSRC2 --HG-- extra : rebase_source : f750cfc351d1447b8345e83a1f25a0a56b3db065 --- devtools/client/framework/toolbox.js | 27 ++++++++++++++++++++ devtools/client/inspector/inspector.js | 10 +++++++- toolkit/components/telemetry/Histograms.json | 11 ++++++++ 3 files changed, 47 insertions(+), 1 deletion(-) diff --git a/devtools/client/framework/toolbox.js b/devtools/client/framework/toolbox.js index 6f15dfec2161..0a9cc16812d4 100644 --- a/devtools/client/framework/toolbox.js +++ b/devtools/client/framework/toolbox.js @@ -114,6 +114,7 @@ function Toolbox(target, selectedTool, hostType, contentWindow, frameId) { this._toolRegistered = this._toolRegistered.bind(this); this._toolUnregistered = this._toolUnregistered.bind(this); + this._onWillNavigate = this._onWillNavigate.bind(this); this._refreshHostTitle = this._refreshHostTitle.bind(this); this._toggleNoAutohide = this._toggleNoAutohide.bind(this); this.showFramesMenu = this.showFramesMenu.bind(this); @@ -163,6 +164,7 @@ function Toolbox(target, selectedTool, hostType, contentWindow, frameId) { EventEmitter.decorate(this); + this._target.on("will-navigate", this._onWillNavigate); this._target.on("navigate", this._refreshHostTitle); this._target.on("frame-update", this._updateFrames); this._target.on("inspect-object", this._onInspectObject); @@ -1982,6 +1984,30 @@ Toolbox.prototype = { }); }, + /** + * Fired when user just started navigating away to another web page. + */ + async _onWillNavigate() { + let toolId = this.currentToolId; + // For now, only inspector fires "reloaded" event + if (toolId != "inspector") { + return; + } + + let start = this.win.performance.now(); + let panel = this.getPanel(toolId); + // Ignore the timing if the panel is still loading + if (!panel) { + return; + } + await panel.once("reloaded"); + let delay = this.win.performance.now() - start; + + let telemetryKey = "DEVTOOLS_TOOLBOX_PAGE_RELOAD_DELAY_MS"; + let histogram = Services.telemetry.getKeyedHistogramById(telemetryKey); + histogram.add(toolId, delay); + }, + /** * Refresh the host's title. */ @@ -2555,6 +2581,7 @@ Toolbox.prototype = { this.emit("destroy"); this._target.off("inspect-object", this._onInspectObject); + this._target.off("will-navigate", this._onWillNavigate); this._target.off("navigate", this._refreshHostTitle); this._target.off("frame-update", this._updateFrames); this.off("select", this._refreshHostTitle); diff --git a/devtools/client/inspector/inspector.js b/devtools/client/inspector/inspector.js index 8d7b53feb2c5..702faa768141 100644 --- a/devtools/client/inspector/inspector.js +++ b/devtools/client/inspector/inspector.js @@ -883,7 +883,7 @@ Inspector.prototype = { return; } - this.markup.expandNode(this.selection.nodeFront); + let onExpand = this.markup.expandNode(this.selection.nodeFront); // Restore the highlighter states prior to emitting "new-root". yield Promise.all([ @@ -892,6 +892,14 @@ Inspector.prototype = { ]); this.emit("new-root"); + + // Wait for full expand of the selected node in order to ensure + // the markup view is fully emitted before firing 'reloaded'. + // 'reloaded' is used to know when the panel is fully updated + // after a page reload. + yield onExpand; + + this.emit("reloaded"); }), _selectionCssSelector: null, diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 8e8c6c3e3898..6dec67d9767e 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -8435,6 +8435,17 @@ "keyed": true, "description": "Time taken (in ms) to open all but first DevTools toolbox. This is keyed by tool ID being opened [inspector, webconsole, jsdebugger, styleeditor, shadereditor, canvasdebugger, performance, memory, netmonitor, storage, webaudioeditor, scratchpad, dom]." }, + "DEVTOOLS_TOOLBOX_PAGE_RELOAD_DELAY_MS": { + "record_in_processes": ["main"], + "alert_emails": ["dev-developer-tools@lists.mozilla.org", "hkirschner@mozilla.com"], + "bug_numbers": [1405585], + "expires_in_version": "62", + "kind": "exponential", + "high": 120000, + "n_buckets": 100, + "keyed": true, + "description": "Time taken (in ms) to update DevTools panel when reloading a page. This is keyed by tool ID being currently opened [inspector, webconsole, jsdebugger, styleeditor, shadereditor, canvasdebugger, performance, memory, netmonitor, storage, webaudioeditor, scratchpad, dom]." + }, "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS": { "record_in_processes": ["main", "content"], "expires_in_version": "never", From d147923f5d6704b02d3504bcbfd70f5298e9ad48 Mon Sep 17 00:00:00 2001 From: Alexandre Poirot Date: Mon, 23 Oct 2017 11:04:52 -0700 Subject: [PATCH 16/69] Bug 1405585 - Add telemetry to watch inspector delay between new-root event and full update. r=francois,jdescottes datareview=francois MozReview-Commit-ID: 5cWcTxPvDKF --HG-- extra : rebase_source : 9e1a2c4b6aa6eee200c4d653b951f4e5e9cd0e9a --- devtools/client/inspector/inspector.js | 15 +++++++++++++++ toolkit/components/telemetry/Histograms.json | 10 ++++++++++ 2 files changed, 25 insertions(+) diff --git a/devtools/client/inspector/inspector.js b/devtools/client/inspector/inspector.js index 702faa768141..95ad8feed0b0 100644 --- a/devtools/client/inspector/inspector.js +++ b/devtools/client/inspector/inspector.js @@ -848,6 +848,9 @@ Inspector.prototype = { * Reset the inspector on new root mutation. */ onNewRoot: function () { + // Record new-root timing for telemetry + this._newRootStart = this.panelWin.performance.now(); + this._defaultNode = null; this.selection.setNodeFront(null); this._destroyMarkup(); @@ -900,6 +903,18 @@ Inspector.prototype = { yield onExpand; this.emit("reloaded"); + + // Record the time between new-root event and inspector fully loaded. + if (this._newRootStart) { + // Only log the timing when inspector is in foreground. + if (this.toolbox.currentToolId == "inspector") { + let delay = this.panelWin.performance.now() - this._newRootStart; + let telemetryKey = "DEVTOOLS_INSPECTOR_NEW_ROOT_TO_RELOAD_DELAY_MS"; + let histogram = Services.telemetry.getHistogramById(telemetryKey); + histogram.add(delay); + } + delete this._newRootStart; + } }), _selectionCssSelector: null, diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index 6dec67d9767e..f5b82045f7d5 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -8446,6 +8446,16 @@ "keyed": true, "description": "Time taken (in ms) to update DevTools panel when reloading a page. This is keyed by tool ID being currently opened [inspector, webconsole, jsdebugger, styleeditor, shadereditor, canvasdebugger, performance, memory, netmonitor, storage, webaudioeditor, scratchpad, dom]." }, + "DEVTOOLS_INSPECTOR_NEW_ROOT_TO_RELOAD_DELAY_MS": { + "record_in_processes": ["main"], + "alert_emails": ["dev-developer-tools@lists.mozilla.org", "hkirschner@mozilla.com"], + "bug_numbers": [1405585], + "expires_in_version": "62", + "kind": "exponential", + "high": 120000, + "n_buckets": 100, + "description": "Time taken (in ms) to update the inspector during a page reload, starting from new-root event." + }, "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS": { "record_in_processes": ["main", "content"], "expires_in_version": "never", From abef3a3a96ce89e87bf625844c89b4834f7b48c4 Mon Sep 17 00:00:00 2001 From: Hiroyuki Ikezoe Date: Thu, 26 Oct 2017 18:09:32 +0900 Subject: [PATCH 17/69] Bug 1409166 - Check whether the target animating frame is scrolled out of each scrollable ancestor. r=birtles,mattwoodrow Before this patch, we had been checking each scrollable ancestor is scrolled out of its scrollable ancestor. So if the target animating frame is at the bottom of its scrollable parent and if half of the scrollable parent is scrolled out of its ancestor, the animating frame was considered as 'in-view'. MozReview-Commit-ID: BDueuF3cT4I --HG-- extra : rebase_source : de1dead6e67a44691887c8364be23734c3b1adef --- dom/animation/test/chrome/test_restyles.html | 5 ++++- layout/generic/nsFrame.cpp | 16 +++++++++------- 2 files changed, 13 insertions(+), 8 deletions(-) diff --git a/dom/animation/test/chrome/test_restyles.html b/dom/animation/test/chrome/test_restyles.html index 6068f8e39c6e..fcd25759d22f 100644 --- a/dom/animation/test/chrome/test_restyles.html +++ b/dom/animation/test/chrome/test_restyles.html @@ -322,7 +322,10 @@ waitForAllPaints(function() { var parentElement = addDiv(null, { style: 'overflow-y: scroll; height: 100px;' }); var div = addDiv(null, - { style: 'animation: background-color 100s; position: relative; top: 100px;' }); + { style: 'animation: background-color 100s; ' + + 'position: relative; ' + + 'top: 60px;' }); // This element is in-view in the parent, but + // out of view in the grandparent. grandParent.appendChild(parentElement); parentElement.appendChild(div); var animation = div.getAnimations()[0]; diff --git a/layout/generic/nsFrame.cpp b/layout/generic/nsFrame.cpp index 3a56150adc55..b5ca5080a293 100644 --- a/layout/generic/nsFrame.cpp +++ b/layout/generic/nsFrame.cpp @@ -10778,10 +10778,12 @@ nsIFrame::GetPseudoElement(CSSPseudoElementType aType) } static bool -IsFrameScrolledOutOfView(nsIFrame *aFrame) +IsFrameScrolledOutOfView(nsIFrame* aTarget, + const nsRect& aTargetRect, + nsIFrame* aParent) { nsIScrollableFrame* scrollableFrame = - nsLayoutUtils::GetNearestScrollableFrame(aFrame, + nsLayoutUtils::GetNearestScrollableFrame(aParent, nsLayoutUtils::SCROLLABLE_SAME_DOC | nsLayoutUtils::SCROLLABLE_INCLUDE_HIDDEN); if (!scrollableFrame) { @@ -10789,11 +10791,10 @@ IsFrameScrolledOutOfView(nsIFrame *aFrame) } nsIFrame *scrollableParent = do_QueryFrame(scrollableFrame); - nsRect rect = aFrame->GetVisualOverflowRectRelativeToSelf(); nsRect transformedRect = - nsLayoutUtils::TransformFrameRectToAncestor(aFrame, - rect, + nsLayoutUtils::TransformFrameRectToAncestor(aTarget, + aTargetRect, scrollableParent); nsRect scrollableRect = scrollableParent->GetVisualOverflowRect(); @@ -10815,13 +10816,14 @@ IsFrameScrolledOutOfView(nsIFrame *aFrame) return false; } - return IsFrameScrolledOutOfView(parent); + return IsFrameScrolledOutOfView(aTarget, aTargetRect, parent); } bool nsIFrame::IsScrolledOutOfView() { - return IsFrameScrolledOutOfView(this); + nsRect rect = GetVisualOverflowRectRelativeToSelf(); + return IsFrameScrolledOutOfView(this, rect, this); } gfx::Matrix From 13694f167f4662fd78c52a8ebccb70dda76eb6de Mon Sep 17 00:00:00 2001 From: Luke Chang Date: Fri, 8 Sep 2017 12:31:02 +0800 Subject: [PATCH 18/69] Bug 1395122 - [Form Autofill] Treat "cc-number-encrypted" as a computed field and compute it within the storage. r=kitcambridge,MattN,steveck MozReview-Commit-ID: K58A7Qdj4va --HG-- extra : rebase_source : 0f5ecb317bf78c6f5ce1e761e674fe8467f49220 --- .../formautofill/FormAutofillParent.jsm | 20 +- .../formautofill/MasterPassword.jsm | 92 +++- .../formautofill/ProfileStorage.jsm | 239 ++++---- .../formautofill/content/editDialog.js | 9 +- .../formautofill/content/manageDialog.js | 2 +- .../browser/browser_creditCard_doorhanger.js | 1 - .../extensions/formautofill/test/unit/head.js | 4 +- .../test/unit/test_creditCardRecords.js | 46 +- .../formautofill/test/unit/test_getRecords.js | 20 +- .../formautofill/test/unit/test_reconcile.js | 511 +++++++++++++++++- .../test/unit/test_storage_tombstones.js | 3 - .../test/unit/test_transformFields.js | 8 +- 12 files changed, 736 insertions(+), 219 deletions(-) diff --git a/browser/extensions/formautofill/FormAutofillParent.jsm b/browser/extensions/formautofill/FormAutofillParent.jsm index d1fce505efeb..b5a5dfbc0c5f 100644 --- a/browser/extensions/formautofill/FormAutofillParent.jsm +++ b/browser/extensions/formautofill/FormAutofillParent.jsm @@ -203,7 +203,12 @@ FormAutofillParent.prototype = { break; } case "FormAutofill:SaveCreditCard": { - await this.profileStorage.creditCards.normalizeCCNumberFields(data.creditcard); + // TODO: "MasterPassword.ensureLoggedIn" can be removed after the storage + // APIs are refactored to be async functions (bug 1399367). + if (!await MasterPassword.ensureLoggedIn()) { + log.warn("User canceled master password entry"); + return; + } this.profileStorage.creditCards.add(data.creditcard); break; } @@ -454,15 +459,14 @@ FormAutofillParent.prototype = { return; } - try { - await this.profileStorage.creditCards.normalizeCCNumberFields(creditCard.record); - this.profileStorage.creditCards.add(creditCard.record); - } catch (e) { - if (e.result != Cr.NS_ERROR_ABORT) { - throw e; - } + // TODO: "MasterPassword.ensureLoggedIn" can be removed after the storage + // APIs are refactored to be async functions (bug 1399367). + if (!await MasterPassword.ensureLoggedIn()) { log.warn("User canceled master password entry"); + return; } + + this.profileStorage.creditCards.add(creditCard.record); }, _onFormSubmit(data, target) { diff --git a/browser/extensions/formautofill/MasterPassword.jsm b/browser/extensions/formautofill/MasterPassword.jsm index f3ca2104616e..9ecdf5d98e76 100644 --- a/browser/extensions/formautofill/MasterPassword.jsm +++ b/browser/extensions/formautofill/MasterPassword.jsm @@ -36,19 +36,42 @@ this.MasterPassword = { }, /** - * Display the master password login prompt no matter it's logged in or not. - * If an existing MP prompt is already open, the result from it will be used instead. - * - * @returns {Promise} True if it's logged in or no password is set and false - * if it's still not logged in (prompt canceled or other error). + * @returns {boolean} True if master password is logged in and false if not. */ - async prompt() { + get isLoggedIn() { + return Services.logins.isLoggedIn; + }, + + /** + * @returns {boolean} True if there is another master password login dialog + * existing and false otherwise. + */ + get isUIBusy() { + return Services.logins.uiBusy; + }, + + /** + * Ensure the master password is logged in. It will display the master password + * login prompt or do nothing if it's logged in already. If an existing MP + * prompt is already prompted, the result from it will be used instead. + * + * @param {boolean} reauth Prompt the login dialog no matter it's logged in + * or not if it's set to true. + * @returns {Promise} True if it's logged in or no password is set + * and false if it's still not logged in (prompt + * canceled or other error). + */ + async ensureLoggedIn(reauth = false) { if (!this.isEnabled) { return true; } + if (this.isLoggedIn && !reauth) { + return true; + } + // If a prompt is already showing then wait for and focus it. - if (Services.logins.uiBusy) { + if (this.isUIBusy) { return this.waitForExistingDialog(); } @@ -81,17 +104,28 @@ this.MasterPassword = { * @returns {Promise} resolves to the decrypted string, or rejects otherwise. */ async decrypt(cipherText, reauth = false) { - let loggedIn = false; - if (reauth) { - loggedIn = await this.prompt(); - } else { - loggedIn = await this.waitForExistingDialog(); - } - - if (!loggedIn) { + if (!await this.ensureLoggedIn(reauth)) { throw Components.Exception("User canceled master password entry", Cr.NS_ERROR_ABORT); } + return cryptoSDR.decrypt(cipherText); + }, + /** + * Decrypts cipherText synchronously. "ensureLoggedIn()" needs to be called + * outside in case another dialog is showing. + * + * NOTE: This method will be removed soon once the ProfileStorage APIs are + * refactored to be async functions (bug 1399367). Please use async + * version instead. + * + * @deprecated + * @param {string} cipherText Encrypted string including the algorithm details. + * @returns {string} The decrypted string. + */ + decryptSync(cipherText) { + if (this.isUIBusy) { + throw Components.Exception("\"ensureLoggedIn()\" should be called first", Cr.NS_ERROR_UNEXPECTED); + } return cryptoSDR.decrypt(cipherText); }, @@ -102,13 +136,32 @@ this.MasterPassword = { * @returns {Promise} resolves to the encrypted string (with algorithm), otherwise rejects. */ async encrypt(plainText) { - if (Services.logins.uiBusy && !await this.waitForExistingDialog()) { + if (!await this.ensureLoggedIn()) { throw Components.Exception("User canceled master password entry", Cr.NS_ERROR_ABORT); } return cryptoSDR.encrypt(plainText); }, + /** + * Encrypts plainText synchronously. "ensureLoggedIn()" needs to be called + * outside in case another dialog is showing. + * + * NOTE: This method will be removed soon once the ProfileStorage APIs are + * refactored to be async functions (bug 1399367). Please use async + * version instead. + * + * @deprecated + * @param {string} plainText A plain string to be encrypted. + * @returns {string} The encrypted cipher string. + */ + encryptSync(plainText) { + if (this.isUIBusy) { + throw Components.Exception("\"ensureLoggedIn()\" should be called first", Cr.NS_ERROR_UNEXPECTED); + } + return cryptoSDR.encrypt(plainText); + }, + /** * Resolve when master password dialogs are closed, immediately if none are open. * @@ -118,10 +171,9 @@ this.MasterPassword = { * Resolves with whether the user is logged in to MP. */ async waitForExistingDialog() { - if (!Services.logins.uiBusy) { - log.debug("waitForExistingDialog: Dialog isn't showing. isLoggedIn:", - Services.logins.isLoggedIn); - return Services.logins.isLoggedIn; + if (!this.isUIBusy) { + log.debug("waitForExistingDialog: Dialog isn't showing. isLoggedIn:", this.isLoggedIn); + return this.isLoggedIn; } return new Promise((resolve) => { diff --git a/browser/extensions/formautofill/ProfileStorage.jsm b/browser/extensions/formautofill/ProfileStorage.jsm index 449ab725106c..2b05ab26c502 100644 --- a/browser/extensions/formautofill/ProfileStorage.jsm +++ b/browser/extensions/formautofill/ProfileStorage.jsm @@ -58,8 +58,8 @@ * * // credit card fields * cc-name, - * cc-number, // e.g. ************1234 - * cc-number-encrypted, + * cc-number, // will be stored in masked format (************1234) + * // (see details below) * cc-exp-month, * cc-exp-year, // 2-digit year will be converted to 4 digits * // upon saving @@ -69,6 +69,8 @@ * cc-given-name, * cc-additional-name, * cc-family-name, + * cc-number-encrypted, // encrypted from the original unmasked "cc-number" + * // (see details below) * cc-exp, * * // metadata @@ -81,6 +83,22 @@ * ] * } * + * + * Encrypt-related Credit Card Fields (cc-number & cc-number-encrypted): + * + * When saving or updating a credit-card record, the storage will encrypt the + * value of "cc-number", store the encrypted number in "cc-number-encrypted" + * field, and replace "cc-number" field with the masked number. These all happen + * in "_computeFields". We do reverse actions in "_stripComputedFields", which + * decrypts "cc-number-encrypted", restores it to "cc-number", and deletes + * "cc-number-encrypted". Therefore, calling "_stripComputedFields" followed by + * "_computeFields" can make sure the encrypt-related fields are up-to-date. + * + * In general, you have to decrypt the number by your own outside ProfileStorage + * when necessary. However, you will get the decrypted records when querying + * data with "rawData=true" to ensure they're ready to sync. + * + * * Sync Metadata: * * Records may also have a _sync field, which consists of: @@ -182,7 +200,6 @@ const VALID_ADDRESS_COMPUTED_FIELDS = [ const VALID_CREDIT_CARD_FIELDS = [ "cc-name", "cc-number", - "cc-number-encrypted", "cc-exp-month", "cc-exp-year", ]; @@ -191,6 +208,7 @@ const VALID_CREDIT_CARD_COMPUTED_FIELDS = [ "cc-given-name", "cc-additional-name", "cc-family-name", + "cc-number-encrypted", "cc-exp", ]; @@ -247,7 +265,7 @@ class AutofillRecords { this._schemaVersion = schemaVersion; let hasChanges = (result, record) => this._migrateRecord(record) || result; - if (this._store.data[this._collectionName].reduce(hasChanges, false)) { + if (this.data.reduce(hasChanges, false)) { this._store.saveSoon(); } } @@ -262,6 +280,16 @@ class AutofillRecords { return this._schemaVersion; } + /** + * Gets the data of this collection. + * + * @returns {array} + * The data object. + */ + get data() { + return this._store.data[this._collectionName]; + } + // Ensures that we don't try to apply synced records with newer schema // versions. This is a temporary measure to ensure we don't accidentally // bump the schema version without a syncing strategy in place (bug 1377204). @@ -292,9 +320,9 @@ class AutofillRecords { includeDeleted: true, }); if (index > -1) { - let existing = this._store.data[this._collectionName][index]; + let existing = this.data[index]; if (existing.deleted) { - this._store.data[this._collectionName].splice(index, 1); + this.data.splice(index, 1); } else { throw new Error(`Record ${record.guid} already exists`); } @@ -349,7 +377,7 @@ class AutofillRecords { sync.changeCounter = 0; } - this._store.data[this._collectionName].push(recordToSave); + this.data.push(recordToSave); this._store.saveSoon(); @@ -379,13 +407,16 @@ class AutofillRecords { update(guid, record, preserveOldProperties = false) { this.log.debug("update:", guid, record); - let recordFound = this._findByGUID(guid); - if (!recordFound) { + let recordFoundIndex = this._findIndexByGUID(guid); + if (recordFoundIndex == -1) { throw new Error("No matching record."); } - // Clone the record by Object assign API to preserve the property with empty string. - let recordToUpdate = Object.assign({}, record); + // Clone the record before modifying it to avoid exposing incomplete changes. + let recordFound = this._clone(this.data[recordFoundIndex]); + this._stripComputedFields(recordFound); + + let recordToUpdate = this._clone(record); this._normalizeRecord(recordToUpdate); for (let field of this.VALID_FIELDS) { @@ -412,8 +443,8 @@ class AutofillRecords { syncMetadata.changeCounter += 1; } - this._stripComputedFields(recordFound); this._computeFields(recordFound); + this.data[recordFoundIndex] = recordFound; this._store.saveSoon(); Services.obs.notifyObservers(null, "formautofill-storage-changed", "update"); @@ -461,7 +492,7 @@ class AutofillRecords { this.log.warn("attempting to remove non-existing entry", guid); return; } - let existing = this._store.data[this._collectionName][index]; + let existing = this.data[index]; if (existing.deleted) { return; // already a tombstone - don't touch it. } @@ -469,7 +500,7 @@ class AutofillRecords { if (existingSync) { // existing sync metadata means it has been synced. This means we must // leave a tombstone behind. - this._store.data[this._collectionName][index] = { + this.data[index] = { guid, timeLastModified: Date.now(), deleted: true, @@ -479,7 +510,7 @@ class AutofillRecords { } else { // If there's no sync meta-data, this record has never been synced, so // we can delete it. - this._store.data[this._collectionName].splice(index, 1); + this.data.splice(index, 1); } } @@ -507,7 +538,7 @@ class AutofillRecords { } // The record is cloned to avoid accidental modifications from outside. - let clonedRecord = this._clone(recordFound); + let clonedRecord = this._cloneAndCleanUp(recordFound); if (rawData) { this._stripComputedFields(clonedRecord); } else { @@ -529,9 +560,9 @@ class AutofillRecords { getAll({rawData = false, includeDeleted = false} = {}) { this.log.debug("getAll", rawData, includeDeleted); - let records = this._store.data[this._collectionName].filter(r => !r.deleted || includeDeleted); + let records = this.data.filter(r => !r.deleted || includeDeleted); // Records are cloned to avoid accidental modifications from outside. - let clonedRecords = records.map(r => this._clone(r)); + let clonedRecords = records.map(r => this._cloneAndCleanUp(r)); clonedRecords.forEach(record => { if (rawData) { this._stripComputedFields(record); @@ -595,16 +626,17 @@ class AutofillRecords { * remote record, and the shared parent that we synthesize from the last * synced fields - see _maybeStoreLastSyncedField. * - * @param {Object} localRecord - * The changed local record, currently in storage. + * @param {Object} strippedLocalRecord + * The changed local record, currently in storage. Computed fields + * are stripped. * @param {Object} remoteRecord * The remote record. * @returns {Object|null} * The merged record, or `null` if there are conflicts and the * records can't be merged. */ - _mergeSyncedRecords(localRecord, remoteRecord) { - let sync = this._getSyncMetaData(localRecord, true); + _mergeSyncedRecords(strippedLocalRecord, remoteRecord) { + let sync = this._getSyncMetaData(strippedLocalRecord, true); // Copy all internal fields from the remote record. We'll update their // values in `_replaceRecordAt`. @@ -623,30 +655,30 @@ class AutofillRecords { // determine if the local and remote values are different. Hashing is // expensive, but we don't expect this to happen frequently. let lastSyncedValue = sync.lastSyncedFields[field]; - isLocalSame = lastSyncedValue == sha512(localRecord[field]); + isLocalSame = lastSyncedValue == sha512(strippedLocalRecord[field]); isRemoteSame = lastSyncedValue == sha512(remoteRecord[field]); } else { // Otherwise, if the field hasn't changed since the last sync, we know // it's the same locally. isLocalSame = true; - isRemoteSame = localRecord[field] == remoteRecord[field]; + isRemoteSame = strippedLocalRecord[field] == remoteRecord[field]; } let value; if (isLocalSame && isRemoteSame) { // Local and remote are the same; doesn't matter which one we pick. - value = localRecord[field]; + value = strippedLocalRecord[field]; } else if (isLocalSame && !isRemoteSame) { value = remoteRecord[field]; } else if (!isLocalSame && isRemoteSame) { // We don't need to bump the change counter when taking the local // change, because the counter must already be > 0 if we're attempting // a three-way merge. - value = localRecord[field]; - } else if (localRecord[field] == remoteRecord[field]) { + value = strippedLocalRecord[field]; + } else if (strippedLocalRecord[field] == remoteRecord[field]) { // Shared parent doesn't match either local or remote, but the values // are identical, so there's no conflict. - value = localRecord[field]; + value = strippedLocalRecord[field]; } else { // Both local and remote changed to different values. We'll need to fork // the local record to resolve the conflict. @@ -676,12 +708,12 @@ class AutofillRecords { * it's uploaded. */ _replaceRecordAt(index, remoteRecord, {keepSyncMetadata = false} = {}) { - let localRecord = this._store.data[this._collectionName][index]; + let localRecord = this.data[index]; let newRecord = this._clone(remoteRecord); this._stripComputedFields(newRecord); - this._store.data[this._collectionName][index] = newRecord; + this.data[index] = newRecord; if (keepSyncMetadata) { // It's safe to move the Sync metadata from the old record to the new @@ -720,18 +752,14 @@ class AutofillRecords { * Clones a local record, giving the clone a new GUID and Sync metadata. The * original record remains unchanged in storage. * - * @param {Object} localRecord - * The local record. + * @param {Object} strippedLocalRecord + * The local record. Computed fields are stripped. * @returns {string} * A clone of the local record with a new GUID. */ - _forkLocalRecord(localRecord) { - let forkedLocalRecord = this._clone(localRecord); - - this._stripComputedFields(forkedLocalRecord); - + _forkLocalRecord(strippedLocalRecord) { + let forkedLocalRecord = this._cloneAndCleanUp(strippedLocalRecord); forkedLocalRecord.guid = this._generateGUID(); - this._store.data[this._collectionName].push(forkedLocalRecord); // Give the record fresh Sync metadata and bump its change counter as a // side effect. This also excludes the forked record from de-duping on the @@ -740,6 +768,7 @@ class AutofillRecords { this._getSyncMetaData(forkedLocalRecord, true); this._computeFields(forkedLocalRecord); + this.data.push(forkedLocalRecord); return forkedLocalRecord; } @@ -770,7 +799,7 @@ class AutofillRecords { throw new Error(`Record ${remoteRecord.guid} not found`); } - let localRecord = this._store.data[this._collectionName][localIndex]; + let localRecord = this.data[localIndex]; let sync = this._getSyncMetaData(localRecord, true); let forkedGUID = null; @@ -781,7 +810,10 @@ class AutofillRecords { keepSyncMetadata: false, }); } else { - let mergedRecord = this._mergeSyncedRecords(localRecord, remoteRecord); + let strippedLocalRecord = this._clone(localRecord); + this._stripComputedFields(strippedLocalRecord); + + let mergedRecord = this._mergeSyncedRecords(strippedLocalRecord, remoteRecord); if (mergedRecord) { // Local and remote modified, but we were able to merge. Replace the // local record with the merged record. @@ -791,7 +823,7 @@ class AutofillRecords { } else { // Merge conflict. Fork the local record, then replace the original // with the merged record. - let forkedLocalRecord = this._forkLocalRecord(localRecord); + let forkedLocalRecord = this._forkLocalRecord(strippedLocalRecord); forkedGUID = forkedLocalRecord.guid; this._replaceRecordAt(localIndex, remoteRecord, { keepSyncMetadata: false, @@ -821,11 +853,11 @@ class AutofillRecords { let sync = this._getSyncMetaData(tombstone, true); sync.changeCounter = 0; - this._store.data[this._collectionName].push(tombstone); + this.data.push(tombstone); return; } - let existing = this._store.data[this._collectionName][index]; + let existing = this.data[index]; let sync = this._getSyncMetaData(existing, true); if (sync.changeCounter > 0) { // Deleting a record with unsynced local changes. To avoid potential @@ -842,7 +874,7 @@ class AutofillRecords { // Removing a record that's not changed locally, and that's not already // deleted. Replace the record with a synced tombstone. - this._store.data[this._collectionName][index] = { + this.data[index] = { guid, timeLastModified: Date.now(), deleted: true, @@ -864,7 +896,7 @@ class AutofillRecords { pullSyncChanges() { let changes = {}; - let profiles = this._store.data[this._collectionName]; + let profiles = this.data; for (let profile of profiles) { let sync = this._getSyncMetaData(profile, true); if (sync.changeCounter < 1) { @@ -921,7 +953,7 @@ class AutofillRecords { * metadata for all items is removed. */ resetSync() { - for (let record of this._store.data[this._collectionName]) { + for (let record of this.data) { delete record._sync; } // XXX - we should probably also delete all tombstones? @@ -951,7 +983,7 @@ class AutofillRecords { } let index = this._findIndexByGUID(oldID); - let profile = this._store.data[this._collectionName][index]; + let profile = this.data[index]; if (!profile) { throw new Error("changeGUID: no source record"); } @@ -985,49 +1017,50 @@ class AutofillRecords { * fields that match incoming remote records. This avoids creating * duplicate profiles with the same information. * - * @param {Object} record + * @param {Object} remoteRecord * The remote record. * @returns {string|null} * The GUID of the matching local record, or `null` if no records * match. */ - findDuplicateGUID(record) { - if (!record.guid) { + findDuplicateGUID(remoteRecord) { + if (!remoteRecord.guid) { throw new Error("Record missing GUID"); } - this._ensureMatchingVersion(record); - if (record.deleted) { + this._ensureMatchingVersion(remoteRecord); + if (remoteRecord.deleted) { // Tombstones don't carry enough info to de-dupe, and we should have // handled them separately when applying the record. throw new Error("Tombstones can't have duplicates"); } - let records = this._store.data[this._collectionName]; - for (let profile of records) { - if (profile.deleted) { + let localRecords = this.data; + for (let localRecord of localRecords) { + if (localRecord.deleted) { continue; } - if (profile.guid == record.guid) { - throw new Error(`Record ${record.guid} already exists`); + if (localRecord.guid == remoteRecord.guid) { + throw new Error(`Record ${remoteRecord.guid} already exists`); } - if (this._getSyncMetaData(profile)) { - // This record has already been uploaded, so it can't be a dupe of + if (this._getSyncMetaData(localRecord)) { + // This local record has already been uploaded, so it can't be a dupe of // another incoming item. continue; } - let keys = new Set(Object.keys(record)); - for (let key of Object.keys(profile)) { + + // Ignore computed fields when matching records as they aren't synced at all. + let strippedLocalRecord = this._clone(localRecord); + this._stripComputedFields(strippedLocalRecord); + + let keys = new Set(Object.keys(remoteRecord)); + for (let key of Object.keys(strippedLocalRecord)) { keys.add(key); } - // Ignore internal and computed fields when matching records. Internal - // fields are synced, but almost certainly have different values than the - // local record, and we'll update them in `reconcile`. Computed fields - // aren't synced at all. + // Ignore internal fields when matching records. Internal fields are synced, + // but almost certainly have different values than the local record, and + // we'll update them in `reconcile`. for (let field of INTERNAL_FIELDS) { keys.delete(field); } - for (let field of this.VALID_COMPUTED_FIELDS) { - keys.delete(field); - } if (!keys.size) { // This shouldn't ever happen; a valid record will always have fields // that aren't computed or internal. Sync can't do anything about that, @@ -1039,13 +1072,13 @@ class AutofillRecords { // For now, we ensure that both (or neither) records have the field // with matching values. This doesn't account for the version yet // (bug 1377204). - same = key in profile == key in record && profile[key] == record[key]; + same = key in strippedLocalRecord == key in remoteRecord && strippedLocalRecord[key] == remoteRecord[key]; if (!same) { break; } } if (same) { - return profile.guid; + return strippedLocalRecord.guid; } } return null; @@ -1056,6 +1089,10 @@ class AutofillRecords { */ _clone(record) { + return Object.assign({}, record); + } + + _cloneAndCleanUp(record) { let result = {}; for (let key in record) { // Do not expose hidden fields and fields with empty value (mainly used @@ -1069,11 +1106,11 @@ class AutofillRecords { _findByGUID(guid, {includeDeleted = false} = {}) { let found = this._findIndexByGUID(guid, {includeDeleted}); - return found < 0 ? undefined : this._store.data[this._collectionName][found]; + return found < 0 ? undefined : this.data[found]; } _findIndexByGUID(guid, {includeDeleted = false} = {}) { - return this._store.data[this._collectionName].findIndex(record => { + return this.data.findIndex(record => { return record.guid == guid && (!record.deleted || includeDeleted); }); } @@ -1410,7 +1447,7 @@ class Addresses extends AutofillRecords { */ mergeToStorage(targetAddress) { let mergedGUIDs = []; - for (let address of this._store.data[this._collectionName]) { + for (let address of this.data) { if (!address.deleted && this.mergeIfPossible(address.guid, targetAddress)) { mergedGUIDs.push(address.guid); } @@ -1425,6 +1462,13 @@ class CreditCards extends AutofillRecords { super(store, "creditCards", VALID_CREDIT_CARD_FIELDS, VALID_CREDIT_CARD_COMPUTED_FIELDS, CREDIT_CARD_SCHEMA_VERSION); } + _getMaskedCCNumber(ccNumber) { + if (ccNumber.length <= 4) { + throw new Error(`Invalid credit card number`); + } + return "*".repeat(ccNumber.length - 4) + ccNumber.substr(-4); + } + _computeFields(creditCard) { // NOTE: Remember to bump the schema version number if any of the existing // computing algorithm changes. (No need to bump when just adding new @@ -1448,15 +1492,31 @@ class CreditCards extends AutofillRecords { hasNewComputedFields = true; } + // Encrypt credit card number + if (!("cc-number-encrypted" in creditCard)) { + let ccNumber = (creditCard["cc-number"] || "").replace(/\s/g, ""); + if (FormAutofillUtils.isCCNumber(ccNumber)) { + creditCard["cc-number"] = this._getMaskedCCNumber(ccNumber); + creditCard["cc-number-encrypted"] = MasterPassword.encryptSync(ccNumber); + } else { + delete creditCard["cc-number"]; + // Computed fields are always present in the storage no matter it's + // empty or not. + creditCard["cc-number-encrypted"] = ""; + } + } + return hasNewComputedFields; } - _normalizeFields(creditCard) { - // Check if cc-number is normalized(normalizeCCNumberFields should be called first). - if (!creditCard["cc-number-encrypted"] || !creditCard["cc-number"].includes("*")) { - throw new Error("Credit card number needs to be normalized first."); + _stripComputedFields(creditCard) { + if (creditCard["cc-number-encrypted"]) { + creditCard["cc-number"] = MasterPassword.decryptSync(creditCard["cc-number-encrypted"]); } + super._stripComputedFields(creditCard); + } + _normalizeFields(creditCard) { // Normalize name if (creditCard["cc-given-name"] || creditCard["cc-additional-name"] || creditCard["cc-family-name"]) { if (!creditCard["cc-name"]) { @@ -1493,31 +1553,6 @@ class CreditCards extends AutofillRecords { } } } - - /** - * Normalize credit card number related field for saving. It should always be - * called before adding/updating credit card records. - * - * @param {Object} creditCard - * The creditCard record with plaintext number only. - */ - async normalizeCCNumberFields(creditCard) { - // Fields that should not be set by content. - delete creditCard["cc-number-encrypted"]; - - // Validate and encrypt credit card numbers, and calculate the masked numbers - if (creditCard["cc-number"]) { - let ccNumber = creditCard["cc-number"].replace(/\s/g, ""); - delete creditCard["cc-number"]; - - if (!FormAutofillUtils.isCCNumber(ccNumber)) { - throw new Error("Credit card number contains invalid characters or is under 12 digits."); - } - - creditCard["cc-number-encrypted"] = await MasterPassword.encrypt(ccNumber); - creditCard["cc-number"] = "*".repeat(ccNumber.length - 4) + ccNumber.substr(-4); - } - } } function ProfileStorage(path) { diff --git a/browser/extensions/formautofill/content/editDialog.js b/browser/extensions/formautofill/content/editDialog.js index 3f57227a686e..c67853ca0220 100644 --- a/browser/extensions/formautofill/content/editDialog.js +++ b/browser/extensions/formautofill/content/editDialog.js @@ -263,9 +263,12 @@ class EditCreditCard extends EditDialog { this._elements.ccNumber.setCustomValidity(true); return; } - let storage = await this.getStorage(); - await storage.normalizeCCNumberFields(creditCard); - await this.saveRecord(creditCard, this._record ? this._record.guid : null); + + // TODO: "MasterPassword.ensureLoggedIn" can be removed after the storage + // APIs are refactored to be async functions (bug 1399367). + if (await MasterPassword.ensureLoggedIn()) { + await this.saveRecord(creditCard, this._record ? this._record.guid : null); + } window.close(); } diff --git a/browser/extensions/formautofill/content/manageDialog.js b/browser/extensions/formautofill/content/manageDialog.js index 36976592ecd4..7eb99a875f6d 100644 --- a/browser/extensions/formautofill/content/manageDialog.js +++ b/browser/extensions/formautofill/content/manageDialog.js @@ -348,7 +348,7 @@ class ManageCreditCards extends ManageRecords { async openEditDialog(creditCard) { // If master password is set, ask for password if user is trying to edit an // existing credit card. - if (!this._hasMasterPassword || !creditCard || await MasterPassword.prompt()) { + if (!creditCard || !this._hasMasterPassword || await MasterPassword.ensureLoggedIn(true)) { this.prefWin.gSubDialog.open(EDIT_CREDIT_CARD_URL, null, creditCard); } } diff --git a/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js b/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js index 1252760c4878..f9dbbd38e6ca 100644 --- a/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js +++ b/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js @@ -51,7 +51,6 @@ add_task(async function test_submit_creditCard_saved() { await promiseShown; await clickDoorhangerButton(MAIN_BUTTON); - await TestUtils.topicObserved("formautofill-storage-changed"); } ); diff --git a/browser/extensions/formautofill/test/unit/head.js b/browser/extensions/formautofill/test/unit/head.js index 5ce9d6b50156..e384368ac886 100644 --- a/browser/extensions/formautofill/test/unit/head.js +++ b/browser/extensions/formautofill/test/unit/head.js @@ -90,7 +90,7 @@ function getTempFile(leafName) { return file; } -async function initProfileStorage(fileName, records) { +async function initProfileStorage(fileName, records, collectionName = "addresses") { let {ProfileStorage} = Cu.import("resource://formautofill/ProfileStorage.jsm", {}); let path = getTempFile(fileName).path; let profileStorage = new ProfileStorage(path); @@ -103,7 +103,7 @@ async function initProfileStorage(fileName, records) { let onChanged = TestUtils.topicObserved("formautofill-storage-changed", (subject, data) => data == "add"); for (let record of records) { - do_check_true(profileStorage.addresses.add(record)); + do_check_true(profileStorage[collectionName].add(record)); await onChanged; } await profileStorage._saveImmediately(); diff --git a/browser/extensions/formautofill/test/unit/test_creditCardRecords.js b/browser/extensions/formautofill/test/unit/test_creditCardRecords.js index df1367628eaf..ffe0b5407776 100644 --- a/browser/extensions/formautofill/test/unit/test_creditCardRecords.js +++ b/browser/extensions/formautofill/test/unit/test_creditCardRecords.js @@ -52,29 +52,16 @@ const TEST_CREDIT_CARD_WITH_SPACES_BETWEEN_DIGITS = { "cc-number": "1111 2222 3333 4444", }; -const TEST_CREDIT_CARD_WITH_INVALID_NUMBERS = { - "cc-name": "John Doe", - "cc-number": "abcdefg", -}; - -const TEST_CREDIT_CARD_WITH_SHORT_NUMBERS = { - "cc-name": "John Doe", - "cc-number": "1234567890", -}; - let prepareTestCreditCards = async function(path) { let profileStorage = new ProfileStorage(path); await profileStorage.initialize(); let onChanged = TestUtils.topicObserved("formautofill-storage-changed", (subject, data) => data == "add"); - let encryptedCC_1 = Object.assign({}, TEST_CREDIT_CARD_1); - await profileStorage.creditCards.normalizeCCNumberFields(encryptedCC_1); - do_check_true(profileStorage.creditCards.add(encryptedCC_1)); + do_check_true(profileStorage.creditCards.add(TEST_CREDIT_CARD_1)); + await onChanged; + do_check_true(profileStorage.creditCards.add(TEST_CREDIT_CARD_2)); await onChanged; - let encryptedCC_2 = Object.assign({}, TEST_CREDIT_CARD_2); - await profileStorage.creditCards.normalizeCCNumberFields(encryptedCC_2); - do_check_true(profileStorage.creditCards.add(encryptedCC_2)); await profileStorage._saveImmediately(); }; @@ -87,6 +74,7 @@ let do_check_credit_card_matches = (creditCardWithMeta, creditCard) => { do_check_neq(matches, null); do_check_eq(creditCardWithMeta["cc-number"].length, creditCard["cc-number"].length); do_check_eq(creditCard["cc-number"].endsWith(matches[2]), true); + do_check_neq(creditCard["cc-number-encrypted"], ""); } else { do_check_eq(creditCardWithMeta[key], creditCard[key]); } @@ -182,9 +170,7 @@ add_task(async function test_add() { do_check_eq(creditCards[0].timeLastUsed, 0); do_check_eq(creditCards[0].timesUsed, 0); - let encryptedCC_invalid = Object.assign({}, TEST_CREDIT_CARD_WITH_INVALID_FIELD); - await profileStorage.creditCards.normalizeCCNumberFields(encryptedCC_invalid); - Assert.throws(() => profileStorage.creditCards.add(encryptedCC_invalid), + Assert.throws(() => profileStorage.creditCards.add(TEST_CREDIT_CARD_WITH_INVALID_FIELD), /"invalidField" is not a valid field\./); }); @@ -203,7 +189,6 @@ add_task(async function test_update() { (subject, data) => data == "update"); do_check_neq(creditCards[1]["cc-name"], undefined); - await profileStorage.creditCards.normalizeCCNumberFields(TEST_CREDIT_CARD_3); profileStorage.creditCards.update(guid, TEST_CREDIT_CARD_3); await onChanged; await profileStorage._saveImmediately(); @@ -222,10 +207,8 @@ add_task(async function test_update() { /No matching record\./ ); - let encryptedCC_invalid = Object.assign({}, TEST_CREDIT_CARD_WITH_INVALID_FIELD); - await profileStorage.creditCards.normalizeCCNumberFields(encryptedCC_invalid); Assert.throws( - () => profileStorage.creditCards.update(guid, encryptedCC_invalid), + () => profileStorage.creditCards.update(guid, TEST_CREDIT_CARD_WITH_INVALID_FIELD), /"invalidField" is not a valid field\./ ); }); @@ -236,11 +219,8 @@ add_task(async function test_validate() { let profileStorage = new ProfileStorage(path); await profileStorage.initialize(); - await profileStorage.creditCards.normalizeCCNumberFields(TEST_CREDIT_CARD_WITH_INVALID_EXPIRY_DATE); profileStorage.creditCards.add(TEST_CREDIT_CARD_WITH_INVALID_EXPIRY_DATE); - await profileStorage.creditCards.normalizeCCNumberFields(TEST_CREDIT_CARD_WITH_2_DIGITS_YEAR); profileStorage.creditCards.add(TEST_CREDIT_CARD_WITH_2_DIGITS_YEAR); - await profileStorage.creditCards.normalizeCCNumberFields(TEST_CREDIT_CARD_WITH_SPACES_BETWEEN_DIGITS); profileStorage.creditCards.add(TEST_CREDIT_CARD_WITH_SPACES_BETWEEN_DIGITS); let creditCards = profileStorage.creditCards.getAll(); @@ -256,20 +236,6 @@ add_task(async function test_validate() { do_check_eq(creditCards[1]["cc-exp"], year + "-" + month.toString().padStart(2, "0")); do_check_eq(creditCards[2]["cc-number"].length, 16); - - try { - await profileStorage.creditCards.normalizeCCNumberFields(TEST_CREDIT_CARD_WITH_INVALID_NUMBERS); - throw new Error("Not receiving invalid characters error"); - } catch (e) { - Assert.equal(e.message, "Credit card number contains invalid characters or is under 12 digits."); - } - - try { - await profileStorage.creditCards.normalizeCCNumberFields(TEST_CREDIT_CARD_WITH_SHORT_NUMBERS); - throw new Error("Not receiving invalid characters error"); - } catch (e) { - Assert.equal(e.message, "Credit card number contains invalid characters or is under 12 digits."); - } }); add_task(async function test_notifyUsed() { diff --git a/browser/extensions/formautofill/test/unit/test_getRecords.js b/browser/extensions/formautofill/test/unit/test_getRecords.js index 09ef2cd6b543..0a751734eec9 100644 --- a/browser/extensions/formautofill/test/unit/test_getRecords.js +++ b/browser/extensions/formautofill/test/unit/test_getRecords.js @@ -5,6 +5,7 @@ "use strict"; Cu.import("resource://formautofill/FormAutofillParent.jsm"); +Cu.import("resource://formautofill/MasterPassword.jsm"); Cu.import("resource://formautofill/ProfileStorage.jsm"); const TEST_ADDRESS_1 = { @@ -166,13 +167,16 @@ add_task(async function test_getRecords_creditCards() { await formAutofillParent.init(); await formAutofillParent.profileStorage.initialize(); let collection = profileStorage.creditCards; - let decryptedCCNumber = [TEST_CREDIT_CARD_1["cc-number"], TEST_CREDIT_CARD_2["cc-number"]]; - await collection.normalizeCCNumberFields(TEST_CREDIT_CARD_1); - await collection.normalizeCCNumberFields(TEST_CREDIT_CARD_2); - sinon.stub(collection, "getAll", () => [Object.assign({}, TEST_CREDIT_CARD_1), Object.assign({}, TEST_CREDIT_CARD_2)]); + let encryptedCCRecords = [TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2].map(record => { + let clonedRecord = Object.assign({}, record); + clonedRecord["cc-number"] = collection._getMaskedCCNumber(record["cc-number"]); + clonedRecord["cc-number-encrypted"] = MasterPassword.encryptSync(record["cc-number"]); + return clonedRecord; + }); + sinon.stub(collection, "getAll", () => [Object.assign({}, encryptedCCRecords[0]), Object.assign({}, encryptedCCRecords[1])]); let CreditCardsWithDecryptedNumber = [ - Object.assign({}, TEST_CREDIT_CARD_1, {"cc-number-decrypted": decryptedCCNumber[0]}), - Object.assign({}, TEST_CREDIT_CARD_2, {"cc-number-decrypted": decryptedCCNumber[1]}), + Object.assign({}, encryptedCCRecords[0], {"cc-number-decrypted": TEST_CREDIT_CARD_1["cc-number"]}), + Object.assign({}, encryptedCCRecords[1], {"cc-number-decrypted": TEST_CREDIT_CARD_2["cc-number"]}), ]; let testCases = [ @@ -229,7 +233,7 @@ add_task(async function test_getRecords_creditCards() { searchString: "John Doe", }, mpEnabled: true, - expectedResult: [TEST_CREDIT_CARD_1], + expectedResult: encryptedCCRecords.slice(0, 1), }, { description: "Return all creditCards if focused field is cc number (with masterpassword)", @@ -239,7 +243,7 @@ add_task(async function test_getRecords_creditCards() { searchString: "123", }, mpEnabled: true, - expectedResult: [TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2], + expectedResult: encryptedCCRecords, }, ]; diff --git a/browser/extensions/formautofill/test/unit/test_reconcile.js b/browser/extensions/formautofill/test/unit/test_reconcile.js index 0d9f9cabf978..8de3172a4210 100644 --- a/browser/extensions/formautofill/test/unit/test_reconcile.js +++ b/browser/extensions/formautofill/test/unit/test_reconcile.js @@ -11,7 +11,7 @@ const TEST_STORE_FILE_NAME = "test-profile.json"; // changed on a remote device) // // To further help understanding this, a few of the testcases are annotated. -const RECONCILE_TESTCASES = [ +const ADDRESS_RECONCILE_TESTCASES = [ { description: "Local change", parent: { @@ -464,6 +464,458 @@ const RECONCILE_TESTCASES = [ }, ]; +const CREDIT_CARD_RECONCILE_TESTCASES = [ + { + description: "Local change", + parent: { + // So when we last wrote the record to the server, it had these values. + "guid": "2bbd2d8fbc6b", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + local: [{ + // The current local record - by comparing against parent we can see that + // only the cc-number has changed locally. + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }], + remote: { + // This is the incoming record. It has the same values as "parent", so + // we can deduce the record hasn't actually been changed remotely so we + // can safely ignore the incoming record and write our local changes. + "guid": "2bbd2d8fbc6b", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + reconciled: { + "guid": "2bbd2d8fbc6b", + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }, + }, + { + description: "Remote change", + parent: { + "guid": "e3680e9f890d", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }], + remote: { + "guid": "e3680e9f890d", + "version": 1, + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }, + reconciled: { + "guid": "e3680e9f890d", + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }, + }, + + { + description: "New local field", + parent: { + "guid": "0cba738b1be0", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }], + remote: { + "guid": "0cba738b1be0", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + reconciled: { + "guid": "0cba738b1be0", + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + }, + { + description: "New remote field", + parent: { + "guid": "be3ef97f8285", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }], + remote: { + "guid": "be3ef97f8285", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + reconciled: { + "guid": "be3ef97f8285", + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + }, + { + description: "Deleted field locally", + parent: { + "guid": "9627322248ec", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }], + remote: { + "guid": "9627322248ec", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + reconciled: { + "guid": "9627322248ec", + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + }, + { + description: "Deleted field remotely", + parent: { + "guid": "7d7509f3eeb2", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }], + remote: { + "guid": "7d7509f3eeb2", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + reconciled: { + "guid": "7d7509f3eeb2", + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + }, + { + description: "Local and remote changes to unrelated fields", + parent: { + // The last time we wrote this to the server, "cc-exp-month" was 12. + "guid": "e087a06dfc57", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + local: [{ + // The current local record - so locally we've changed "cc-number". + "cc-name": "John Doe", + "cc-number": "4444333322221111", + "cc-exp-month": 12, + }], + remote: { + // Remotely, we've changed "cc-exp-month" to 1. + "guid": "e087a06dfc57", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 1, + }, + reconciled: { + "guid": "e087a06dfc57", + "cc-name": "John Doe", + "cc-number": "4444333322221111", + "cc-exp-month": 1, + }, + }, + { + description: "Multiple local changes", + parent: { + "guid": "340a078c596f", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + local: [{ + "cc-name": "Skip", + "cc-number": "1111222233334444", + }, { + "cc-name": "Skip", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }], + remote: { + "guid": "340a078c596f", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-year": 2000, + }, + reconciled: { + "guid": "340a078c596f", + "cc-name": "Skip", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + "cc-exp-year": 2000, + }, + }, + { + // Local and remote diverged from the shared parent, but the values are the + // same, so we shouldn't fork. + description: "Same change to local and remote", + parent: { + "guid": "0b3a72a1bea2", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }], + remote: { + "guid": "0b3a72a1bea2", + "version": 1, + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }, + reconciled: { + "guid": "0b3a72a1bea2", + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }, + }, + { + description: "Conflicting changes to single field", + parent: { + // This is what we last wrote to the sync server. + "guid": "62068784d089", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + local: [{ + // The current version of the local record - the cc-number has changed locally. + "cc-name": "John Doe", + "cc-number": "1111111111111111", + }], + remote: { + // An incoming record has a different cc-number than any of the above! + "guid": "62068784d089", + "version": 1, + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }, + forked: { + // So we've forked the local record to a new GUID (and the next sync is + // going to write this as a new record) + "cc-name": "John Doe", + "cc-number": "1111111111111111", + }, + reconciled: { + // And we've updated the local version of the record to be the remote version. + guid: "62068784d089", + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }, + }, + { + description: "Conflicting changes to multiple fields", + parent: { + "guid": "244dbb692e94", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111111111111111", + "cc-exp-month": 1, + }], + remote: { + "guid": "244dbb692e94", + "version": 1, + "cc-name": "John Doe", + "cc-number": "4444333322221111", + "cc-exp-month": 3, + }, + forked: { + "cc-name": "John Doe", + "cc-number": "1111111111111111", + "cc-exp-month": 1, + }, + reconciled: { + "guid": "244dbb692e94", + "cc-name": "John Doe", + "cc-number": "4444333322221111", + "cc-exp-month": 3, + }, + }, + { + description: "Field deleted locally, changed remotely", + parent: { + "guid": "6fc45e03d19a", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }], + remote: { + "guid": "6fc45e03d19a", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 3, + }, + forked: { + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + reconciled: { + "guid": "6fc45e03d19a", + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 3, + }, + }, + { + description: "Field changed locally, deleted remotely", + parent: { + "guid": "fff9fa27fa18", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 12, + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 3, + }], + remote: { + "guid": "fff9fa27fa18", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + forked: { + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "cc-exp-month": 3, + }, + reconciled: { + "guid": "fff9fa27fa18", + "cc-name": "John Doe", + "cc-number": "1111222233334444", + }, + }, + { + // Created, last modified should be synced; last used and times used should + // be local. Remote created time older than local, remote modified time + // newer than local. + description: "Created, last modified time reconciliation without local changes", + parent: { + "guid": "5113f329c42f", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "timeCreated": 1234, + "timeLastModified": 5678, + "timeLastUsed": 5678, + "timesUsed": 6, + }, + local: [], + remote: { + "guid": "5113f329c42f", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "timeCreated": 1200, + "timeLastModified": 5700, + "timeLastUsed": 5700, + "timesUsed": 3, + }, + reconciled: { + "guid": "5113f329c42f", + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "timeCreated": 1200, + "timeLastModified": 5700, + "timeLastUsed": 5678, + "timesUsed": 6, + }, + }, + { + // Local changes, remote created time newer than local, remote modified time + // older than local. + description: "Created, last modified time reconciliation with local changes", + parent: { + "guid": "791e5608b80a", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "timeCreated": 1234, + "timeLastModified": 5678, + "timeLastUsed": 5678, + "timesUsed": 6, + }, + local: [{ + "cc-name": "John Doe", + "cc-number": "4444333322221111", + }], + remote: { + "guid": "791e5608b80a", + "version": 1, + "cc-name": "John Doe", + "cc-number": "1111222233334444", + "timeCreated": 1300, + "timeLastModified": 5000, + "timeLastUsed": 5000, + "timesUsed": 3, + }, + reconciled: { + "guid": "791e5608b80a", + "cc-name": "John Doe", + "cc-number": "4444333322221111", + "timeCreated": 1234, + "timeLastUsed": 5678, + "timesUsed": 6, + }, + }, +]; + add_task(async function test_reconcile_unknown_version() { let profileStorage = await initProfileStorage(TEST_STORE_FILE_NAME); @@ -536,38 +988,47 @@ add_task(async function test_reconcile_idempotent() { }); add_task(async function test_reconcile_three_way_merge() { - let profileStorage = await initProfileStorage(TEST_STORE_FILE_NAME); + let TESTCASES = { + addresses: ADDRESS_RECONCILE_TESTCASES, + creditCards: CREDIT_CARD_RECONCILE_TESTCASES, + }; - for (let test of RECONCILE_TESTCASES) { - do_print(test.description); + for (let collectionName in TESTCASES) { + do_print(`Start to test reconcile on ${collectionName}`); - profileStorage.addresses.add(test.parent, {sourceSync: true}); + let profileStorage = await initProfileStorage(TEST_STORE_FILE_NAME, null, collectionName); - for (let updatedRecord of test.local) { - profileStorage.addresses.update(test.parent.guid, updatedRecord); - } + for (let test of TESTCASES[collectionName]) { + do_print(test.description); - let localRecord = profileStorage.addresses.get(test.parent.guid, { - rawData: true, - }); + profileStorage[collectionName].add(test.parent, {sourceSync: true}); - let {forkedGUID} = profileStorage.addresses.reconcile(test.remote); - let reconciledRecord = profileStorage.addresses.get(test.parent.guid, { - rawData: true, - }); - if (forkedGUID) { - let forkedRecord = profileStorage.addresses.get(forkedGUID, { + for (let updatedRecord of test.local) { + profileStorage[collectionName].update(test.parent.guid, updatedRecord); + } + + let localRecord = profileStorage[collectionName].get(test.parent.guid, { rawData: true, }); - notEqual(forkedRecord.guid, reconciledRecord.guid); - equal(forkedRecord.timeLastModified, localRecord.timeLastModified); - ok(objectMatches(forkedRecord, test.forked), - `${test.description} should fork record`); - } else { - ok(!test.forked, `${test.description} should not fork record`); - } + let {forkedGUID} = profileStorage[collectionName].reconcile(test.remote); + let reconciledRecord = profileStorage[collectionName].get(test.parent.guid, { + rawData: true, + }); + if (forkedGUID) { + let forkedRecord = profileStorage[collectionName].get(forkedGUID, { + rawData: true, + }); - ok(objectMatches(reconciledRecord, test.reconciled)); + notEqual(forkedRecord.guid, reconciledRecord.guid); + equal(forkedRecord.timeLastModified, localRecord.timeLastModified); + ok(objectMatches(forkedRecord, test.forked), + `${test.description} should fork record`); + } else { + ok(!test.forked, `${test.description} should not fork record`); + } + + ok(objectMatches(reconciledRecord, test.reconciled)); + } } }); diff --git a/browser/extensions/formautofill/test/unit/test_storage_tombstones.js b/browser/extensions/formautofill/test/unit/test_storage_tombstones.js index 7e7beb389950..67b6b69ed21c 100644 --- a/browser/extensions/formautofill/test/unit/test_storage_tombstones.js +++ b/browser/extensions/formautofill/test/unit/test_storage_tombstones.js @@ -45,9 +45,6 @@ function add_storage_task(test_function) { for (let [storage, record] of [[profileStorage.addresses, TEST_ADDRESS_1], [profileStorage.creditCards, testCC1]]) { - if (storage.normalizeCCNumberFields) { - await storage.normalizeCCNumberFields(record); - } await test_function(storage, record); } }); diff --git a/browser/extensions/formautofill/test/unit/test_transformFields.js b/browser/extensions/formautofill/test/unit/test_transformFields.js index d7aecfa7a5b3..52a3376ed007 100644 --- a/browser/extensions/formautofill/test/unit/test_transformFields.js +++ b/browser/extensions/formautofill/test/unit/test_transformFields.js @@ -621,9 +621,7 @@ add_task(async function test_computeCreditCardFields() { await profileStorage.initialize(); for (let testcase of CREDIT_CARD_COMPUTE_TESTCASES) { - let encryptedCC = Object.assign({}, testcase.creditCard); - await profileStorage.creditCards.normalizeCCNumberFields(encryptedCC); - profileStorage.creditCards.add(encryptedCC); + profileStorage.creditCards.add(testcase.creditCard); } await profileStorage._saveImmediately(); @@ -645,9 +643,7 @@ add_task(async function test_normalizeCreditCardFields() { await profileStorage.initialize(); for (let testcase of CREDIT_CARD_NORMALIZE_TESTCASES) { - let encryptedCC = Object.assign({}, testcase.creditCard); - await profileStorage.creditCards.normalizeCCNumberFields(encryptedCC); - profileStorage.creditCards.add(encryptedCC); + profileStorage.creditCards.add(testcase.creditCard); } await profileStorage._saveImmediately(); From e5888682177d8089dff2b4d1db593b291539c4d6 Mon Sep 17 00:00:00 2001 From: Matt Woodrow Date: Thu, 26 Oct 2017 22:02:05 +1300 Subject: [PATCH 19/69] Bug 1411856 - Make sure we add to the display list building area when marking a caret frame as invalid. r=ethlin MozReview-Commit-ID: GA3pObvoPz3 --HG-- extra : rebase_source : a39c19bd653ece832436900b14468c21dd423600 --- layout/painting/RetainedDisplayListBuilder.cpp | 12 ++++++++---- layout/painting/nsDisplayList.h | 4 +++- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/layout/painting/RetainedDisplayListBuilder.cpp b/layout/painting/RetainedDisplayListBuilder.cpp index ffe00345a1d6..cae725dc8e64 100644 --- a/layout/painting/RetainedDisplayListBuilder.cpp +++ b/layout/painting/RetainedDisplayListBuilder.cpp @@ -727,11 +727,15 @@ RetainedDisplayListBuilder::AttemptPartialUpdate(nscolor aBackstop) if (mPreviousCaret != mBuilder.GetCaretFrame()) { if (mPreviousCaret) { - mBuilder.MarkFrameModifiedDuringBuilding(mPreviousCaret); + if (mBuilder.MarkFrameModifiedDuringBuilding(mPreviousCaret)) { + modifiedFrames.AppendElement(mPreviousCaret); + } } if (mBuilder.GetCaretFrame()) { - mBuilder.MarkFrameModifiedDuringBuilding(mBuilder.GetCaretFrame()); + if (mBuilder.MarkFrameModifiedDuringBuilding(mBuilder.GetCaretFrame())) { + modifiedFrames.AppendElement(mBuilder.GetCaretFrame()); + } } mPreviousCaret = mBuilder.GetCaretFrame(); @@ -760,7 +764,7 @@ RetainedDisplayListBuilder::AttemptPartialUpdate(nscolor aBackstop) //printf_stderr("Painting --- Modified list (dirty %d,%d,%d,%d):\n", // modifiedDirty.x, modifiedDirty.y, modifiedDirty.width, modifiedDirty.height); - //nsFrame::PrintDisplayList(&builder, modifiedDL); + //nsFrame::PrintDisplayList(&mBuilder, modifiedDL); } else { // TODO: We can also skip layer building and painting if @@ -777,7 +781,7 @@ RetainedDisplayListBuilder::AttemptPartialUpdate(nscolor aBackstop) MergeDisplayLists(&modifiedDL, &mList, &mList); //printf_stderr("Painting --- Merged list:\n"); - //nsFrame::PrintDisplayList(&builder, list); + //nsFrame::PrintDisplayList(&mBuilder, mList); merged = true; } diff --git a/layout/painting/nsDisplayList.h b/layout/painting/nsDisplayList.h index 96751e2c27bc..e41ef9f9e03f 100644 --- a/layout/painting/nsDisplayList.h +++ b/layout/painting/nsDisplayList.h @@ -1599,12 +1599,14 @@ public: mBuildingInvisibleItems = aBuildingInvisibleItems; } - void MarkFrameModifiedDuringBuilding(nsIFrame* aFrame) + bool MarkFrameModifiedDuringBuilding(nsIFrame* aFrame) { if (!aFrame->IsFrameModified()) { mModifiedFramesDuringBuilding.AppendElement(aFrame); aFrame->SetFrameIsModified(true); + return true; } + return false; } /** From 884fc56be9a1d0b971cf8539b832c659970ed635 Mon Sep 17 00:00:00 2001 From: James Cheng Date: Thu, 26 Oct 2017 16:59:40 +0800 Subject: [PATCH 20/69] Bug 1411523 - Remove 'this' from lambda captures [self, this] under dom/media r=jwwang Capturing |this| only if |self| needs to appear more than twice in a lambda. MozReview-Commit-ID: 38iYDznjgBH --HG-- extra : rebase_source : 9471fd4519c5c5be6e6e10eb11db8eeb041327d1 --- dom/media/MediaFormatReader.cpp | 20 +++++------ dom/media/ipc/RemoteVideoDecoder.cpp | 12 +++---- dom/media/ipc/VideoDecoderParent.cpp | 12 +++---- dom/media/platforms/agnostic/AOMDecoder.cpp | 4 +-- dom/media/platforms/agnostic/VPXDecoder.cpp | 6 ++-- .../platforms/agnostic/VorbisDecoder.cpp | 6 ++-- .../agnostic/eme/EMEDecoderModule.cpp | 36 +++++++++---------- .../platforms/android/RemoteDataDecoder.cpp | 8 ++--- dom/media/platforms/apple/AppleATDecoder.cpp | 8 ++--- dom/media/platforms/apple/AppleVTDecoder.cpp | 4 +-- .../platforms/ffmpeg/FFmpegDataDecoder.cpp | 4 +-- dom/media/platforms/omx/OmxDataDecoder.cpp | 6 ++-- .../wrappers/MediaDataDecoderProxy.cpp | 12 +++---- 13 files changed, 69 insertions(+), 69 deletions(-) diff --git a/dom/media/MediaFormatReader.cpp b/dom/media/MediaFormatReader.cpp index dac2ca5ec950..082580daf1ad 100644 --- a/dom/media/MediaFormatReader.cpp +++ b/dom/media/MediaFormatReader.cpp @@ -2019,21 +2019,21 @@ MediaFormatReader::DecodeDemuxedSamples(TrackType aTrack, decoder.mFlushed = false; decoder.mDecoder->Decode(aSample) ->Then(mTaskQueue, __func__, - [self, this, aTrack, &decoder] + [self, aTrack, &decoder] (const MediaDataDecoder::DecodedData& aResults) { decoder.mDecodeRequest.Complete(); - NotifyNewOutput(aTrack, aResults); + self->NotifyNewOutput(aTrack, aResults); // When we recovered from a GPU crash and get the first decoded // frame, report the recovery time telemetry. if (aTrack == TrackType::kVideoTrack) { GPUProcessCrashTelemetryLogger::ReportTelemetry( - mMediaDecoderOwnerID, decoder.mDecoder.get()); + self->mMediaDecoderOwnerID, decoder.mDecoder.get()); } }, - [self, this, aTrack, &decoder](const MediaResult& aError) { + [self, aTrack, &decoder](const MediaResult& aError) { decoder.mDecodeRequest.Complete(); - NotifyError(aTrack, aError); + self->NotifyError(aTrack, aError); }) ->Track(decoder.mDecodeRequest); } @@ -2208,21 +2208,21 @@ MediaFormatReader::DrainDecoder(TrackType aTrack) RefPtr self = this; decoder.mDecoder->Drain() ->Then(mTaskQueue, __func__, - [self, this, aTrack, &decoder] + [self, aTrack, &decoder] (const MediaDataDecoder::DecodedData& aResults) { decoder.mDrainRequest.Complete(); if (aResults.IsEmpty()) { decoder.mDrainState = DrainState::DrainCompleted; } else { - NotifyNewOutput(aTrack, aResults); + self->NotifyNewOutput(aTrack, aResults); // Let's see if we have any more data available to drain. decoder.mDrainState = DrainState::PartialDrainPending; } - ScheduleUpdate(aTrack); + self->ScheduleUpdate(aTrack); }, - [self, this, aTrack, &decoder](const MediaResult& aError) { + [self, aTrack, &decoder](const MediaResult& aError) { decoder.mDrainRequest.Complete(); - NotifyError(aTrack, aError); + self->NotifyError(aTrack, aError); }) ->Track(decoder.mDrainRequest); LOG("Requesting %s decoder to drain", TrackTypeToStr(aTrack)); diff --git a/dom/media/ipc/RemoteVideoDecoder.cpp b/dom/media/ipc/RemoteVideoDecoder.cpp index 179c86cc366a..e39bd4fa13cd 100644 --- a/dom/media/ipc/RemoteVideoDecoder.cpp +++ b/dom/media/ipc/RemoteVideoDecoder.cpp @@ -56,7 +56,7 @@ RemoteVideoDecoder::Init() RefPtr self = this; return InvokeAsync(VideoDecoderManagerChild::GetManagerAbstractThread(), __func__, - [self, this]() { return mActor->Init(); }) + [self]() { return self->mActor->Init(); }) ->Then(VideoDecoderManagerChild::GetManagerAbstractThread(), __func__, [self, this](TrackType aTrack) { @@ -79,7 +79,7 @@ RemoteVideoDecoder::Decode(MediaRawData* aSample) RefPtr sample = aSample; return InvokeAsync(VideoDecoderManagerChild::GetManagerAbstractThread(), __func__, - [self, this, sample]() { return mActor->Decode(sample); }); + [self, sample]() { return self->mActor->Decode(sample); }); } RefPtr @@ -87,7 +87,7 @@ RemoteVideoDecoder::Flush() { RefPtr self = this; return InvokeAsync(VideoDecoderManagerChild::GetManagerAbstractThread(), - __func__, [self, this]() { return mActor->Flush(); }); + __func__, [self]() { return self->mActor->Flush(); }); } RefPtr @@ -95,7 +95,7 @@ RemoteVideoDecoder::Drain() { RefPtr self = this; return InvokeAsync(VideoDecoderManagerChild::GetManagerAbstractThread(), - __func__, [self, this]() { return mActor->Drain(); }); + __func__, [self]() { return self->mActor->Drain(); }); } RefPtr @@ -103,8 +103,8 @@ RemoteVideoDecoder::Shutdown() { RefPtr self = this; return InvokeAsync(VideoDecoderManagerChild::GetManagerAbstractThread(), - __func__, [self, this]() { - mActor->Shutdown(); + __func__, [self]() { + self->mActor->Shutdown(); return ShutdownPromise::CreateAndResolve(true, __func__); }); } diff --git a/dom/media/ipc/VideoDecoderParent.cpp b/dom/media/ipc/VideoDecoderParent.cpp index f1c4d1e1b8f9..1fd74d7e2765 100644 --- a/dom/media/ipc/VideoDecoderParent.cpp +++ b/dom/media/ipc/VideoDecoderParent.cpp @@ -166,7 +166,7 @@ VideoDecoderParent::RecvInput(const MediaRawDataIPDL& aData) ProcessDecodedData(aResults); Unused << SendInputExhausted(); }, - [self, this](const MediaResult& aError) { Error(aError); }); + [self](const MediaResult& aError) { self->Error(aError); }); return IPC_OK(); } @@ -224,12 +224,12 @@ VideoDecoderParent::RecvFlush() RefPtr self = this; mDecoder->Flush()->Then( mManagerTaskQueue, __func__, - [self, this]() { - if (!mDestroyed) { - Unused << SendFlushComplete(); + [self]() { + if (!self->mDestroyed) { + Unused << self->SendFlushComplete(); } }, - [self, this](const MediaResult& aError) { Error(aError); }); + [self](const MediaResult& aError) { self->Error(aError); }); return IPC_OK(); } @@ -248,7 +248,7 @@ VideoDecoderParent::RecvDrain() Unused << SendDrainComplete(); } }, - [self, this](const MediaResult& aError) { Error(aError); }); + [self](const MediaResult& aError) { self->Error(aError); }); return IPC_OK(); } diff --git a/dom/media/platforms/agnostic/AOMDecoder.cpp b/dom/media/platforms/agnostic/AOMDecoder.cpp index cdfc6470d3c6..02a6acb04351 100644 --- a/dom/media/platforms/agnostic/AOMDecoder.cpp +++ b/dom/media/platforms/agnostic/AOMDecoder.cpp @@ -80,8 +80,8 @@ RefPtr AOMDecoder::Shutdown() { RefPtr self = this; - return InvokeAsync(mTaskQueue, __func__, [self, this]() { - auto res = aom_codec_destroy(&mCodec); + return InvokeAsync(mTaskQueue, __func__, [self]() { + auto res = aom_codec_destroy(&self->mCodec); if (res != AOM_CODEC_OK) { LOG_RESULT(res, "aom_codec_destroy"); } diff --git a/dom/media/platforms/agnostic/VPXDecoder.cpp b/dom/media/platforms/agnostic/VPXDecoder.cpp index 969460c872ce..4ddfeffaee72 100644 --- a/dom/media/platforms/agnostic/VPXDecoder.cpp +++ b/dom/media/platforms/agnostic/VPXDecoder.cpp @@ -86,9 +86,9 @@ RefPtr VPXDecoder::Shutdown() { RefPtr self = this; - return InvokeAsync(mTaskQueue, __func__, [self, this]() { - vpx_codec_destroy(&mVPX); - vpx_codec_destroy(&mVPXAlpha); + return InvokeAsync(mTaskQueue, __func__, [self]() { + vpx_codec_destroy(&self->mVPX); + vpx_codec_destroy(&self->mVPXAlpha); return ShutdownPromise::CreateAndResolve(true, __func__); }); } diff --git a/dom/media/platforms/agnostic/VorbisDecoder.cpp b/dom/media/platforms/agnostic/VorbisDecoder.cpp index 0391fed0191e..c03fde8bc249 100644 --- a/dom/media/platforms/agnostic/VorbisDecoder.cpp +++ b/dom/media/platforms/agnostic/VorbisDecoder.cpp @@ -276,12 +276,12 @@ RefPtr VorbisDataDecoder::Flush() { RefPtr self = this; - return InvokeAsync(mTaskQueue, __func__, [self, this]() { + return InvokeAsync(mTaskQueue, __func__, [self]() { // Ignore failed results from vorbis_synthesis_restart. They // aren't fatal and it fails when ResetDecode is called at a // time when no vorbis data has been read. - vorbis_synthesis_restart(&mVorbisDsp); - mLastFrameTime.reset(); + vorbis_synthesis_restart(&self->mVorbisDsp); + self->mLastFrameTime.reset(); return FlushPromise::CreateAndResolve(true, __func__); }); } diff --git a/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp b/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp index dee7aa13d1e1..cb23fe80166c 100644 --- a/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp +++ b/dom/media/platforms/agnostic/eme/EMEDecoderModule.cpp @@ -57,12 +57,12 @@ public: RefPtr self = this; mSamplesWaitingForKey->WaitIfKeyNotUsable(aSample) ->Then(mTaskQueue, __func__, - [self, this](RefPtr aSample) { - mKeyRequest.Complete(); - ThrottleDecode(aSample); + [self](RefPtr aSample) { + self->mKeyRequest.Complete(); + self->ThrottleDecode(aSample); }, - [self, this]() { - mKeyRequest.Complete(); + [self]() { + self->mKeyRequest.Complete(); }) ->Track(mKeyRequest); @@ -74,12 +74,12 @@ public: RefPtr self = this; mThroughputLimiter.Throttle(aSample) ->Then(mTaskQueue, __func__, - [self, this] (RefPtr aSample) { - mThrottleRequest.Complete(); - AttemptDecode(aSample); + [self] (RefPtr aSample) { + self->mThrottleRequest.Complete(); + self->AttemptDecode(aSample); }, - [self, this]() { - mThrottleRequest.Complete(); + [self]() { + self->mThrottleRequest.Complete(); }) ->Track(mThrottleRequest); } @@ -144,13 +144,13 @@ public: RefPtr self = this; mDecoder->Decode(aDecrypted.mSample) ->Then(mTaskQueue, __func__, - [self, this](const DecodedData& aResults) { - mDecodeRequest.Complete(); - mDecodePromise.ResolveIfExists(aResults, __func__); + [self](const DecodedData& aResults) { + self->mDecodeRequest.Complete(); + self->mDecodePromise.ResolveIfExists(aResults, __func__); }, - [self, this](const MediaResult& aError) { - mDecodeRequest.Complete(); - mDecodePromise.RejectIfExists(aError, __func__); + [self](const MediaResult& aError) { + self->mDecodeRequest.Complete(); + self->mDecodePromise.RejectIfExists(aError, __func__); }) ->Track(mDecodeRequest); } @@ -286,8 +286,8 @@ EMEMediaDataDecoderProxy::Decode(MediaRawData* aSample) }) ->Track(mDecodeRequest); }, - [self, this]() { - mKeyRequest.Complete(); + [self]() { + self->mKeyRequest.Complete(); MOZ_CRASH("Should never get here"); }) ->Track(mKeyRequest); diff --git a/dom/media/platforms/android/RemoteDataDecoder.cpp b/dom/media/platforms/android/RemoteDataDecoder.cpp index fe0bc9a971cd..d4dcb473f3e0 100644 --- a/dom/media/platforms/android/RemoteDataDecoder.cpp +++ b/dom/media/platforms/android/RemoteDataDecoder.cpp @@ -550,7 +550,7 @@ RemoteDataDecoder::Decode(MediaRawData* aSample) RefPtr self = this; RefPtr sample = aSample; - return InvokeAsync(mTaskQueue, __func__, [self, sample, this]() { + return InvokeAsync(mTaskQueue, __func__, [self, sample]() { jni::ByteBuffer::LocalRef bytes = jni::ByteBuffer::New( const_cast(sample->Data()), sample->Size()); @@ -562,9 +562,9 @@ RemoteDataDecoder::Decode(MediaRawData* aSample) } bufferInfo->Set(0, sample->Size(), sample->mTime.ToMicroseconds(), 0); - mDrainStatus = DrainStatus::DRAINABLE; - return mJavaDecoder->Input(bytes, bufferInfo, GetCryptoInfoFromSample(sample)) - ? mDecodePromise.Ensure(__func__) + self->mDrainStatus = DrainStatus::DRAINABLE; + return self->mJavaDecoder->Input(bytes, bufferInfo, GetCryptoInfoFromSample(sample)) + ? self->mDecodePromise.Ensure(__func__) : DecodePromise::CreateAndReject( MediaResult(NS_ERROR_OUT_OF_MEMORY, __func__), __func__); diff --git a/dom/media/platforms/apple/AppleATDecoder.cpp b/dom/media/platforms/apple/AppleATDecoder.cpp index 8132bafad5d8..c6ea48445014 100644 --- a/dom/media/platforms/apple/AppleATDecoder.cpp +++ b/dom/media/platforms/apple/AppleATDecoder.cpp @@ -73,8 +73,8 @@ AppleATDecoder::Decode(MediaRawData* aSample) (unsigned long long)aSample->Size()); RefPtr self = this; RefPtr sample = aSample; - return InvokeAsync(mTaskQueue, __func__, [self, this, sample] { - return ProcessDecode(sample); + return InvokeAsync(mTaskQueue, __func__, [self, sample] { + return self->ProcessDecode(sample); }); } @@ -121,8 +121,8 @@ RefPtr AppleATDecoder::Shutdown() { RefPtr self = this; - return InvokeAsync(mTaskQueue, __func__, [self, this]() { - ProcessShutdown(); + return InvokeAsync(mTaskQueue, __func__, [self]() { + self->ProcessShutdown(); return ShutdownPromise::CreateAndResolve(true, __func__); }); } diff --git a/dom/media/platforms/apple/AppleVTDecoder.cpp b/dom/media/platforms/apple/AppleVTDecoder.cpp index fb927df2e6b5..a0e640ad3d30 100644 --- a/dom/media/platforms/apple/AppleVTDecoder.cpp +++ b/dom/media/platforms/apple/AppleVTDecoder.cpp @@ -113,8 +113,8 @@ AppleVTDecoder::Shutdown() { if (mTaskQueue) { RefPtr self = this; - return InvokeAsync(mTaskQueue, __func__, [self, this]() { - ProcessShutdown(); + return InvokeAsync(mTaskQueue, __func__, [self]() { + self->ProcessShutdown(); return ShutdownPromise::CreateAndResolve(true, __func__); }); } diff --git a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp index e1fe2574107c..56df215aa0b0 100644 --- a/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp +++ b/dom/media/platforms/ffmpeg/FFmpegDataDecoder.cpp @@ -90,8 +90,8 @@ FFmpegDataDecoder::Shutdown() { if (mTaskQueue) { RefPtr> self = this; - return InvokeAsync(mTaskQueue, __func__, [self, this]() { - ProcessShutdown(); + return InvokeAsync(mTaskQueue, __func__, [self]() { + self->ProcessShutdown(); return ShutdownPromise::CreateAndResolve(true, __func__); }); } diff --git a/dom/media/platforms/omx/OmxDataDecoder.cpp b/dom/media/platforms/omx/OmxDataDecoder.cpp index cbe8aeb2ff56..ab296e03ec6a 100644 --- a/dom/media/platforms/omx/OmxDataDecoder.cpp +++ b/dom/media/platforms/omx/OmxDataDecoder.cpp @@ -204,9 +204,9 @@ OmxDataDecoder::Drain() LOG(""); RefPtr self = this; - return InvokeAsync(mOmxTaskQueue, __func__, [self, this]() { - RefPtr p = mDrainPromise.Ensure(__func__); - SendEosBuffer(); + return InvokeAsync(mOmxTaskQueue, __func__, [self]() { + RefPtr p = self->mDrainPromise.Ensure(__func__); + self->SendEosBuffer(); return p; }); } diff --git a/dom/media/platforms/wrappers/MediaDataDecoderProxy.cpp b/dom/media/platforms/wrappers/MediaDataDecoderProxy.cpp index b4abdf44cb4d..06591efc6dd1 100644 --- a/dom/media/platforms/wrappers/MediaDataDecoderProxy.cpp +++ b/dom/media/platforms/wrappers/MediaDataDecoderProxy.cpp @@ -18,7 +18,7 @@ MediaDataDecoderProxy::Init() } RefPtr self = this; return InvokeAsync(mProxyThread, __func__, - [self, this]() { return mProxyDecoder->Init(); }); + [self]() { return self->mProxyDecoder->Init(); }); } RefPtr @@ -31,8 +31,8 @@ MediaDataDecoderProxy::Decode(MediaRawData* aSample) } RefPtr self = this; RefPtr sample = aSample; - return InvokeAsync(mProxyThread, __func__, [self, this, sample]() { - return mProxyDecoder->Decode(sample); + return InvokeAsync(mProxyThread, __func__, [self, sample]() { + return self->mProxyDecoder->Decode(sample); }); } @@ -46,7 +46,7 @@ MediaDataDecoderProxy::Flush() } RefPtr self = this; return InvokeAsync(mProxyThread, __func__, - [self, this]() { return mProxyDecoder->Flush(); }); + [self]() { return self->mProxyDecoder->Flush(); }); } RefPtr @@ -59,7 +59,7 @@ MediaDataDecoderProxy::Drain() } RefPtr self = this; return InvokeAsync(mProxyThread, __func__, - [self, this]() { return mProxyDecoder->Drain(); }); + [self]() { return self->mProxyDecoder->Drain(); }); } RefPtr @@ -76,7 +76,7 @@ MediaDataDecoderProxy::Shutdown() } RefPtr self = this; return InvokeAsync(mProxyThread, __func__, - [self, this]() { return mProxyDecoder->Shutdown(); }); + [self]() { return self->mProxyDecoder->Shutdown(); }); } nsCString From 44f575271b36f64d89a9821380d421a28e2f8563 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Thu, 26 Oct 2017 11:46:30 +0200 Subject: [PATCH 21/69] Bug 1411642 - Don't let window controls overlap the nav bar. r=johannh MozReview-Commit-ID: HLZoEaktNau --HG-- extra : rebase_source : 07e975b423272d3b044c691e061adad4e3a5a33f --- browser/base/content/browser-tabsintitlebar.js | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/browser/base/content/browser-tabsintitlebar.js b/browser/base/content/browser-tabsintitlebar.js index 276b62d66002..d92a0415b3b8 100644 --- a/browser/base/content/browser-tabsintitlebar.js +++ b/browser/base/content/browser-tabsintitlebar.js @@ -185,12 +185,10 @@ var TabsInTitlebar = { // On Windows 10, adjust the window controls to span the entire // tab strip height if we're not showing a menu bar. - if (AppConstants.isPlatformAndVersionAtLeast("win", "10.0")) { - if (!menuHeight) { - // Add a pixel to slightly overlap the navbar border. - titlebarContentHeight = fullTabsHeight + 1; - $("titlebar-buttonbox").style.height = titlebarContentHeight + "px"; - } + if (AppConstants.isPlatformAndVersionAtLeast("win", "10.0") && + !menuHeight) { + titlebarContentHeight = fullTabsHeight; + $("titlebar-buttonbox").style.height = titlebarContentHeight + "px"; } // If the menubar is around (menuHeight is non-zero), try to adjust From a5064a01cb91f2c8ba61f90e57acee7bc689238c Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Thu, 26 Oct 2017 12:32:20 +0200 Subject: [PATCH 22/69] Backed out 2 changesets (bug 1405585) for failing browser-chrome's browser/components/extensions/test/browser/browser_ext_devtools_panels_elements.js. r=backout on a CLOSED TREE Backed out changeset d2f7f0e9554d (bug 1405585) Backed out changeset a049959544f2 (bug 1405585) --- devtools/client/framework/toolbox.js | 27 -------------------- devtools/client/inspector/inspector.js | 25 +----------------- toolkit/components/telemetry/Histograms.json | 21 --------------- 3 files changed, 1 insertion(+), 72 deletions(-) diff --git a/devtools/client/framework/toolbox.js b/devtools/client/framework/toolbox.js index 0a9cc16812d4..6f15dfec2161 100644 --- a/devtools/client/framework/toolbox.js +++ b/devtools/client/framework/toolbox.js @@ -114,7 +114,6 @@ function Toolbox(target, selectedTool, hostType, contentWindow, frameId) { this._toolRegistered = this._toolRegistered.bind(this); this._toolUnregistered = this._toolUnregistered.bind(this); - this._onWillNavigate = this._onWillNavigate.bind(this); this._refreshHostTitle = this._refreshHostTitle.bind(this); this._toggleNoAutohide = this._toggleNoAutohide.bind(this); this.showFramesMenu = this.showFramesMenu.bind(this); @@ -164,7 +163,6 @@ function Toolbox(target, selectedTool, hostType, contentWindow, frameId) { EventEmitter.decorate(this); - this._target.on("will-navigate", this._onWillNavigate); this._target.on("navigate", this._refreshHostTitle); this._target.on("frame-update", this._updateFrames); this._target.on("inspect-object", this._onInspectObject); @@ -1984,30 +1982,6 @@ Toolbox.prototype = { }); }, - /** - * Fired when user just started navigating away to another web page. - */ - async _onWillNavigate() { - let toolId = this.currentToolId; - // For now, only inspector fires "reloaded" event - if (toolId != "inspector") { - return; - } - - let start = this.win.performance.now(); - let panel = this.getPanel(toolId); - // Ignore the timing if the panel is still loading - if (!panel) { - return; - } - await panel.once("reloaded"); - let delay = this.win.performance.now() - start; - - let telemetryKey = "DEVTOOLS_TOOLBOX_PAGE_RELOAD_DELAY_MS"; - let histogram = Services.telemetry.getKeyedHistogramById(telemetryKey); - histogram.add(toolId, delay); - }, - /** * Refresh the host's title. */ @@ -2581,7 +2555,6 @@ Toolbox.prototype = { this.emit("destroy"); this._target.off("inspect-object", this._onInspectObject); - this._target.off("will-navigate", this._onWillNavigate); this._target.off("navigate", this._refreshHostTitle); this._target.off("frame-update", this._updateFrames); this.off("select", this._refreshHostTitle); diff --git a/devtools/client/inspector/inspector.js b/devtools/client/inspector/inspector.js index 95ad8feed0b0..8d7b53feb2c5 100644 --- a/devtools/client/inspector/inspector.js +++ b/devtools/client/inspector/inspector.js @@ -848,9 +848,6 @@ Inspector.prototype = { * Reset the inspector on new root mutation. */ onNewRoot: function () { - // Record new-root timing for telemetry - this._newRootStart = this.panelWin.performance.now(); - this._defaultNode = null; this.selection.setNodeFront(null); this._destroyMarkup(); @@ -886,7 +883,7 @@ Inspector.prototype = { return; } - let onExpand = this.markup.expandNode(this.selection.nodeFront); + this.markup.expandNode(this.selection.nodeFront); // Restore the highlighter states prior to emitting "new-root". yield Promise.all([ @@ -895,26 +892,6 @@ Inspector.prototype = { ]); this.emit("new-root"); - - // Wait for full expand of the selected node in order to ensure - // the markup view is fully emitted before firing 'reloaded'. - // 'reloaded' is used to know when the panel is fully updated - // after a page reload. - yield onExpand; - - this.emit("reloaded"); - - // Record the time between new-root event and inspector fully loaded. - if (this._newRootStart) { - // Only log the timing when inspector is in foreground. - if (this.toolbox.currentToolId == "inspector") { - let delay = this.panelWin.performance.now() - this._newRootStart; - let telemetryKey = "DEVTOOLS_INSPECTOR_NEW_ROOT_TO_RELOAD_DELAY_MS"; - let histogram = Services.telemetry.getHistogramById(telemetryKey); - histogram.add(delay); - } - delete this._newRootStart; - } }), _selectionCssSelector: null, diff --git a/toolkit/components/telemetry/Histograms.json b/toolkit/components/telemetry/Histograms.json index f5b82045f7d5..8e8c6c3e3898 100644 --- a/toolkit/components/telemetry/Histograms.json +++ b/toolkit/components/telemetry/Histograms.json @@ -8435,27 +8435,6 @@ "keyed": true, "description": "Time taken (in ms) to open all but first DevTools toolbox. This is keyed by tool ID being opened [inspector, webconsole, jsdebugger, styleeditor, shadereditor, canvasdebugger, performance, memory, netmonitor, storage, webaudioeditor, scratchpad, dom]." }, - "DEVTOOLS_TOOLBOX_PAGE_RELOAD_DELAY_MS": { - "record_in_processes": ["main"], - "alert_emails": ["dev-developer-tools@lists.mozilla.org", "hkirschner@mozilla.com"], - "bug_numbers": [1405585], - "expires_in_version": "62", - "kind": "exponential", - "high": 120000, - "n_buckets": 100, - "keyed": true, - "description": "Time taken (in ms) to update DevTools panel when reloading a page. This is keyed by tool ID being currently opened [inspector, webconsole, jsdebugger, styleeditor, shadereditor, canvasdebugger, performance, memory, netmonitor, storage, webaudioeditor, scratchpad, dom]." - }, - "DEVTOOLS_INSPECTOR_NEW_ROOT_TO_RELOAD_DELAY_MS": { - "record_in_processes": ["main"], - "alert_emails": ["dev-developer-tools@lists.mozilla.org", "hkirschner@mozilla.com"], - "bug_numbers": [1405585], - "expires_in_version": "62", - "kind": "exponential", - "high": 120000, - "n_buckets": 100, - "description": "Time taken (in ms) to update the inspector during a page reload, starting from new-root event." - }, "DEVTOOLS_DEBUGGER_DISPLAY_SOURCE_LOCAL_MS": { "record_in_processes": ["main", "content"], "expires_in_version": "never", From 2295ced962b8cfd753bc3d0d43f3088b6a17231d Mon Sep 17 00:00:00 2001 From: Ray Lin Date: Wed, 25 Oct 2017 09:47:58 +0800 Subject: [PATCH 23/69] Bug 1411190 - Collect and parse only eligible fields in form autofill heuristics. r=lchang,seanlee MozReview-Commit-ID: GWp0cU5jt6k --HG-- extra : rebase_source : bc890687ff9686eb077fbc5d05e864b8e04e70b8 --- .../formautofill/FormAutofillHeuristics.jsm | 11 +++++------ .../extensions/formautofill/test/unit/test_getInfo.js | 6 ------ 2 files changed, 5 insertions(+), 12 deletions(-) diff --git a/browser/extensions/formautofill/FormAutofillHeuristics.jsm b/browser/extensions/formautofill/FormAutofillHeuristics.jsm index 420db4f4281e..515a187adb02 100644 --- a/browser/extensions/formautofill/FormAutofillHeuristics.jsm +++ b/browser/extensions/formautofill/FormAutofillHeuristics.jsm @@ -539,11 +539,14 @@ this.FormAutofillHeuristics = { * all field details in the form. */ getFormInfo(form, allowDuplicates = false) { - if (form.elements.length <= 0) { + const eligibleFields = Array.from(form.elements) + .filter(elem => FormAutofillUtils.isFieldEligibleForAutofill(elem)); + + if (eligibleFields.length <= 0) { return []; } - let fieldScanner = new FieldScanner(form.elements); + let fieldScanner = new FieldScanner(eligibleFields); while (!fieldScanner.parsingFinished) { let parsedPhoneFields = this._parsePhoneFields(fieldScanner); let parsedAddressFields = this._parseAddressFields(fieldScanner); @@ -629,10 +632,6 @@ this.FormAutofillHeuristics = { }, getInfo(element) { - if (!FormAutofillUtils.isFieldEligibleForAutofill(element)) { - return null; - } - let info = element.getAutocompleteInfo(); // An input[autocomplete="on"] will not be early return here since it stll // needs to find the field name. diff --git a/browser/extensions/formautofill/test/unit/test_getInfo.js b/browser/extensions/formautofill/test/unit/test_getInfo.js index 1c63d3ceca7c..c11d58a886c7 100644 --- a/browser/extensions/formautofill/test/unit/test_getInfo.js +++ b/browser/extensions/formautofill/test/unit/test_getInfo.js @@ -157,12 +157,6 @@ const TESTCASES = [ contactType: "", }, }, - { - description: "non-input element", - document: ``, - elementId: "targetElement", - expectedReturnValue: null, - }, { description: "input element with \"submit\" type", document: ``, From 7f7ffdecd60f36bd765a599db9cec611bfd9fdc0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Thu, 26 Oct 2017 12:28:20 +0200 Subject: [PATCH 24/69] Bug 1411007 - Fix tab-crashed icon size. r=ntim MozReview-Commit-ID: 9DBZa2ji5Z4 --HG-- extra : rebase_source : 476890eef96b72568a560064d33fd283a97af957 --- .../shared/incontent-icons/tab-crashed.svg | 26 +++++++++---------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/browser/themes/shared/incontent-icons/tab-crashed.svg b/browser/themes/shared/incontent-icons/tab-crashed.svg index 41470df5ce43..db1911737029 100644 --- a/browser/themes/shared/incontent-icons/tab-crashed.svg +++ b/browser/themes/shared/incontent-icons/tab-crashed.svg @@ -1,13 +1,13 @@ - - - - - - - - - - - + + + + + + + + + + + From ba3ed5556d301e635ce9e5bb1efd562e9cda839c Mon Sep 17 00:00:00 2001 From: Ricky Chien Date: Mon, 23 Oct 2017 15:39:47 +0800 Subject: [PATCH 25/69] Bug 1410782 - Fix props.connector is undefined when running launchpad r=Honza MozReview-Commit-ID: L0UbcaLfrOS --HG-- extra : rebase_source : de350aba1587a28e363b024be0f9ce00b32755af --- .../netmonitor/configs/development.json | 5 +- devtools/client/netmonitor/package.json | 9 +- devtools/client/netmonitor/webpack.config.js | 49 +- devtools/client/netmonitor/yarn.lock | 1077 +++++------------ package.json | 3 +- 5 files changed, 328 insertions(+), 815 deletions(-) diff --git a/devtools/client/netmonitor/configs/development.json b/devtools/client/netmonitor/configs/development.json index f3374873200e..0b1067c7c147 100644 --- a/devtools/client/netmonitor/configs/development.json +++ b/devtools/client/netmonitor/configs/development.json @@ -24,8 +24,9 @@ }, "firefox": { "webSocketConnection": false, - "proxyHost": "localhost:9000", - "webSocketHost": "localhost:6080", + "host": "localhost", + "webSocketPort": 8116, + "tcpPort": 6080, "mcPath": "./firefox" }, "development": { diff --git a/devtools/client/netmonitor/package.json b/devtools/client/netmonitor/package.json index c7d36ed8201e..93b4a11e4385 100644 --- a/devtools/client/netmonitor/package.json +++ b/devtools/client/netmonitor/package.json @@ -9,19 +9,18 @@ "codemirror": "^5.24.2", "devtools-config": "=0.0.12", "devtools-contextmenu": "=0.0.3", - "devtools-launchpad": "=0.0.96", - "devtools-modules": "=0.0.31", + "devtools-launchpad": "=0.0.103", + "devtools-modules": "=0.0.32", "devtools-source-editor": "=0.0.3", "immutable": "^3.8.1", "jszip": "^3.1.3", - "react": "=15.3.2", - "react-dom": "=15.3.2", + "react": "=15.6.1", + "react-dom": "=15.6.1", "react-redux": "=5.0.3", "redux": "^3.6.0", "reselect": "^2.5.4" }, "devDependencies": { - "babel-preset-es2015": "^6.6.0", "babel-register": "^6.24.0", "file-loader": "^0.10.1" }, diff --git a/devtools/client/netmonitor/webpack.config.js b/devtools/client/netmonitor/webpack.config.js index 18eadeda01ce..36dcb6ec1525 100644 --- a/devtools/client/netmonitor/webpack.config.js +++ b/devtools/client/netmonitor/webpack.config.js @@ -23,21 +23,18 @@ let webpackConfig = { test: /\.(png|svg)$/, loader: "file-loader?name=[path][name].[ext]", }, - { - /* - * The version of webpack used in the launchpad seems to have trouble - * with the require("raw!${file}") that we use for the properties - * file in l10.js. - * This loader goes through the whole code and remove the "raw!" prefix - * so the raw-loader declared in devtools-launchpad config can load - * those files. - */ - test: /\.js$/, - loader: "rewrite-raw", - }, { test: /\.js$/, loaders: [ + /** + * The version of webpack used in the launchpad seems to have trouble + * with the require("raw!${file}") that we use for the properties + * file in l10.js. + * This loader goes through the whole code and remove the "raw!" prefix + * so the raw-loader declared in devtools-launchpad config can load + * those files. + */ + "rewrite-raw", // Replace all references to this.browserRequire() by require() "rewrite-browser-require", // Replace all references to loader.lazyRequire() by require() @@ -49,7 +46,7 @@ let webpackConfig = { resolveLoader: { modules: [ - path.resolve("./node_modules"), + "node_modules", path.resolve("../shared/webpack"), ] }, @@ -64,8 +61,9 @@ let webpackConfig = { resolve: { modules: [ // Make sure webpack is always looking for modules in - // `webconsole/node_modules` directory first. - path.resolve(__dirname, "node_modules"), "node_modules" + // `netmonitor/node_modules` directory first. + path.resolve(__dirname, "node_modules"), + "node_modules", ], alias: { "Services": "devtools-modules/src/Services", @@ -138,9 +136,22 @@ let config = toolboxConfig(webpackConfig, getConfig(), { }); // Remove loaders from devtools-launchpad's webpack.config.js -// * For svg-inline loader: -// Netmonitor uses file loader to bundle image assets instead of svg-inline-loader -config.module.rules = config.module.rules - .filter((rule) => !["svg-inline-loader"].includes(rule.loader)); +// For svg-inline loader: +// Using file loader to bundle image assets instead of svg-inline-loader +config.module.rules = config.module.rules.filter((rule) => !["svg-inline-loader"].includes(rule.loader)); + +// For PostCSS loader: +// Disable PostCSS loader +config.module.rules.forEach(rule => { + if (Array.isArray(rule.use)) { + rule.use.some((use, idx) => { + if (use.loader === "postcss-loader") { + rule.use = rule.use.slice(0, idx); + return true; + } + return false; + }); + } +}); module.exports = config; diff --git a/devtools/client/netmonitor/yarn.lock b/devtools/client/netmonitor/yarn.lock index 6b7dfc90176d..ad79c28bee9a 100644 --- a/devtools/client/netmonitor/yarn.lock +++ b/devtools/client/netmonitor/yarn.lock @@ -29,21 +29,11 @@ acorn-globals@^3.1.0: dependencies: acorn "^4.0.4" -acorn-jsx@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz#afdf9488fb1ecefc8348f6fb22f464e32a58b36b" - dependencies: - acorn "^3.0.4" - -acorn@^3.0.4: - version "3.3.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-3.3.0.tgz#45e37fb39e8da3f25baee3ff5369e2bb5f22017a" - acorn@^4.0.3, acorn@^4.0.4: version "4.0.11" resolved "https://registry.yarnpkg.com/acorn/-/acorn-4.0.11.tgz#edcda3bd937e7556410d42ed5860f67399c794c0" -acorn@^5.0.0, acorn@^5.0.1: +acorn@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.0.3.tgz#c460df08491463f028ccb82eab3730bf01087b3d" @@ -51,7 +41,7 @@ adm-zip@0.4.7, adm-zip@^0.4.7: version "0.4.7" resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.7.tgz#8606c2cbf1c426ce8c8ec00174447fd49b6eafc1" -ajv-keywords@^1.0.0, ajv-keywords@^1.1.1: +ajv-keywords@^1.1.1: version "1.5.1" resolved "https://registry.yarnpkg.com/ajv-keywords/-/ajv-keywords-1.5.1.tgz#314dd0a4b3368fad3dfcdc54ede6171b886daf3c" @@ -95,7 +85,7 @@ amdefine@>=0.0.4: version "1.0.1" resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" -ansi-escapes@^1.1.0, ansi-escapes@^1.4.0: +ansi-escapes@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-1.4.0.tgz#d3a8a83b319aa67793662b13e761c7911422306e" @@ -171,27 +161,10 @@ array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" -array-union@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - array-unique@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.2.1.tgz#a1d97ccafcbc2625cc70fadceb36a50c58b01a53" -array.prototype.find@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/array.prototype.find/-/array.prototype.find-2.0.4.tgz#556a5c5362c08648323ddaeb9de9d14bc1864c90" - dependencies: - define-properties "^1.1.2" - es-abstract "^1.7.0" - arrify@^1.0.0, arrify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" @@ -305,7 +278,7 @@ babel-cli@^6.7.5: optionalDependencies: chokidar "^1.6.1" -babel-code-frame@^6.11.0, babel-code-frame@^6.16.0, babel-code-frame@^6.22.0: +babel-code-frame@^6.11.0, babel-code-frame@^6.22.0: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.22.0.tgz#027620bee567a88c32561574e7fd0801d33118e4" dependencies: @@ -421,15 +394,6 @@ babel-helper-call-delegate@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-define-map@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-define-map/-/babel-helper-define-map-6.24.1.tgz#7a9747f258d8947d32d515f6aa1c7bd02204a080" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" - babel-helper-explode-assignable-expression@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-explode-assignable-expression/-/babel-helper-explode-assignable-expression-6.24.1.tgz#f25b82cf7dc10433c55f70592d5746400ac22caa" @@ -462,21 +426,6 @@ babel-helper-hoist-variables@^6.24.1: babel-runtime "^6.22.0" babel-types "^6.24.1" -babel-helper-optimise-call-expression@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-optimise-call-expression/-/babel-helper-optimise-call-expression-6.24.1.tgz#f7a13427ba9f73f8f4fa993c54a97882d1244257" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-helper-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-regex/-/babel-helper-regex-6.24.1.tgz#d36e22fab1008d79d88648e32116868128456ce8" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - lodash "^4.2.0" - babel-helper-remap-async-to-generator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helper-remap-async-to-generator/-/babel-helper-remap-async-to-generator-6.24.1.tgz#5ec581827ad723fecdd381f1c928390676e4551b" @@ -487,17 +436,6 @@ babel-helper-remap-async-to-generator@^6.24.1: babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-helper-replace-supers@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-helper-replace-supers/-/babel-helper-replace-supers-6.24.1.tgz#bf6dbfe43938d17369a213ca8a8bf74b6a90ab1a" - dependencies: - babel-helper-optimise-call-expression "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - babel-helpers@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" @@ -527,12 +465,6 @@ babel-messages@^6.23.0: dependencies: babel-runtime "^6.22.0" -babel-plugin-check-es2015-constants@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-check-es2015-constants/-/babel-plugin-check-es2015-constants-6.22.0.tgz#35157b101426fd2ffd3da3f75c7d1e91835bbf8a" - dependencies: - babel-runtime "^6.22.0" - babel-plugin-istanbul@^4.0.0: version "4.1.1" resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-4.1.1.tgz#c12de0fc6fe42adfb16be56f1ad11e4a9782eca9" @@ -593,123 +525,32 @@ babel-plugin-transform-async-to-generator@^6.16.0, babel-plugin-transform-async- babel-plugin-syntax-async-functions "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-es2015-arrow-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-arrow-functions/-/babel-plugin-transform-es2015-arrow-functions-6.22.0.tgz#452692cb711d5f79dc7f85e440ce41b9f244d221" +babel-plugin-transform-es2015-block-scoping@^6.7.1: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.26.0.tgz#d70f5299c1308d05c12f463813b0a09e73b1895f" dependencies: - babel-runtime "^6.22.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + lodash "^4.17.4" -babel-plugin-transform-es2015-block-scoped-functions@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoped-functions/-/babel-plugin-transform-es2015-block-scoped-functions-6.22.0.tgz#bbc51b49f964d70cb8d8e0b94e820246ce3a6141" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-block-scoping@^6.24.1, babel-plugin-transform-es2015-block-scoping@^6.7.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-block-scoping/-/babel-plugin-transform-es2015-block-scoping-6.24.1.tgz#76c295dc3a4741b1665adfd3167215dcff32a576" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - lodash "^4.2.0" - -babel-plugin-transform-es2015-classes@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-classes/-/babel-plugin-transform-es2015-classes-6.24.1.tgz#5a4c58a50c9c9461e564b4b2a3bfabc97a2584db" - dependencies: - babel-helper-define-map "^6.24.1" - babel-helper-function-name "^6.24.1" - babel-helper-optimise-call-expression "^6.24.1" - babel-helper-replace-supers "^6.24.1" - babel-messages "^6.23.0" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-traverse "^6.24.1" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-computed-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-computed-properties/-/babel-plugin-transform-es2015-computed-properties-6.24.1.tgz#6fe2a8d16895d5634f4cd999b6d3480a308159b3" - dependencies: - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-destructuring@^6.22.0, babel-plugin-transform-es2015-destructuring@^6.6.5: +babel-plugin-transform-es2015-destructuring@^6.6.5: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-destructuring/-/babel-plugin-transform-es2015-destructuring-6.23.0.tgz#997bb1f1ab967f682d2b0876fe358d60e765c56d" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-duplicate-keys@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-duplicate-keys/-/babel-plugin-transform-es2015-duplicate-keys-6.24.1.tgz#73eb3d310ca969e3ef9ec91c53741a6f1576423e" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-for-of@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-for-of/-/babel-plugin-transform-es2015-for-of-6.23.0.tgz#f47c95b2b613df1d3ecc2fdb7573623c75248691" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-function-name@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-function-name/-/babel-plugin-transform-es2015-function-name-6.24.1.tgz#834c89853bc36b1af0f3a4c5dbaa94fd8eacaa8b" - dependencies: - babel-helper-function-name "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-literals/-/babel-plugin-transform-es2015-literals-6.22.0.tgz#4f54a02d6cd66cf915280019a31d31925377ca2e" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-modules-amd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-amd/-/babel-plugin-transform-es2015-modules-amd-6.24.1.tgz#3b3e54017239842d6d19c3011c4bd2f00a00d154" - dependencies: - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-commonjs@^6.22.0, babel-plugin-transform-es2015-modules-commonjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.24.1.tgz#d3e310b40ef664a36622200097c6d440298f2bfe" +babel-plugin-transform-es2015-modules-commonjs@^6.22.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-commonjs/-/babel-plugin-transform-es2015-modules-commonjs-6.26.0.tgz#0d8394029b7dc6abe1a97ef181e00758dd2e5d8a" dependencies: babel-plugin-transform-strict-mode "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - babel-types "^6.24.1" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-types "^6.26.0" -babel-plugin-transform-es2015-modules-systemjs@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-systemjs/-/babel-plugin-transform-es2015-modules-systemjs-6.24.1.tgz#ff89a142b9119a906195f5f106ecf305d9407d23" - dependencies: - babel-helper-hoist-variables "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-modules-umd@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-modules-umd/-/babel-plugin-transform-es2015-modules-umd-6.24.1.tgz#ac997e6285cd18ed6176adb607d602344ad38468" - dependencies: - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-runtime "^6.22.0" - babel-template "^6.24.1" - -babel-plugin-transform-es2015-object-super@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-object-super/-/babel-plugin-transform-es2015-object-super-6.24.1.tgz#24cef69ae21cb83a7f8603dad021f572eb278f8d" - dependencies: - babel-helper-replace-supers "^6.24.1" - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-parameters@^6.24.1, babel-plugin-transform-es2015-parameters@^6.7.0: +babel-plugin-transform-es2015-parameters@^6.7.0: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-parameters/-/babel-plugin-transform-es2015-parameters-6.24.1.tgz#57ac351ab49caf14a97cd13b09f66fdf0a625f2b" dependencies: @@ -720,47 +561,12 @@ babel-plugin-transform-es2015-parameters@^6.24.1, babel-plugin-transform-es2015- babel-traverse "^6.24.1" babel-types "^6.24.1" -babel-plugin-transform-es2015-shorthand-properties@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-shorthand-properties/-/babel-plugin-transform-es2015-shorthand-properties-6.24.1.tgz#24f875d6721c87661bbd99a4622e51f14de38aa0" - dependencies: - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-spread@^6.22.0, babel-plugin-transform-es2015-spread@^6.6.5: +babel-plugin-transform-es2015-spread@^6.6.5: version "6.22.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-spread/-/babel-plugin-transform-es2015-spread-6.22.0.tgz#d6d68a99f89aedc4536c81a542e8dd9f1746f8d1" dependencies: babel-runtime "^6.22.0" -babel-plugin-transform-es2015-sticky-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-sticky-regex/-/babel-plugin-transform-es2015-sticky-regex-6.24.1.tgz#00c1cdb1aca71112cdf0cf6126c2ed6b457ccdbc" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - babel-types "^6.24.1" - -babel-plugin-transform-es2015-template-literals@^6.22.0: - version "6.22.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-template-literals/-/babel-plugin-transform-es2015-template-literals-6.22.0.tgz#a84b3450f7e9f8f1f6839d6d687da84bb1236d8d" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-typeof-symbol@^6.22.0: - version "6.23.0" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-typeof-symbol/-/babel-plugin-transform-es2015-typeof-symbol-6.23.0.tgz#dec09f1cddff94b52ac73d505c84df59dcceb372" - dependencies: - babel-runtime "^6.22.0" - -babel-plugin-transform-es2015-unicode-regex@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-es2015-unicode-regex/-/babel-plugin-transform-es2015-unicode-regex-6.24.1.tgz#d38b12f42ea7323f729387f18a7c5ae1faeb35e9" - dependencies: - babel-helper-regex "^6.24.1" - babel-runtime "^6.22.0" - regexpu-core "^2.0.0" - babel-plugin-transform-exponentiation-operator@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-plugin-transform-exponentiation-operator/-/babel-plugin-transform-exponentiation-operator-6.24.1.tgz#2ab0c9c7f3098fa48907772bb813fe41e8de3a0e" @@ -783,12 +589,6 @@ babel-plugin-transform-object-rest-spread@^6.22.0: babel-plugin-syntax-object-rest-spread "^6.8.0" babel-runtime "^6.22.0" -babel-plugin-transform-regenerator@^6.24.1: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-plugin-transform-regenerator/-/babel-plugin-transform-regenerator-6.24.1.tgz#b8da305ad43c3c99b4848e4fe4037b770d23c418" - dependencies: - regenerator-transform "0.9.11" - babel-plugin-transform-runtime@^6.7.5: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-plugin-transform-runtime/-/babel-plugin-transform-runtime-6.23.0.tgz#88490d446502ea9b8e7efb0fe09ec4d99479b1ee" @@ -819,35 +619,6 @@ babel-polyfill@^6.23.0, babel-polyfill@^6.7.4: core-js "^2.4.0" regenerator-runtime "^0.10.0" -babel-preset-es2015@^6.6.0: - version "6.24.1" - resolved "https://registry.yarnpkg.com/babel-preset-es2015/-/babel-preset-es2015-6.24.1.tgz#d44050d6bc2c9feea702aaf38d727a0210538939" - dependencies: - babel-plugin-check-es2015-constants "^6.22.0" - babel-plugin-transform-es2015-arrow-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoped-functions "^6.22.0" - babel-plugin-transform-es2015-block-scoping "^6.24.1" - babel-plugin-transform-es2015-classes "^6.24.1" - babel-plugin-transform-es2015-computed-properties "^6.24.1" - babel-plugin-transform-es2015-destructuring "^6.22.0" - babel-plugin-transform-es2015-duplicate-keys "^6.24.1" - babel-plugin-transform-es2015-for-of "^6.22.0" - babel-plugin-transform-es2015-function-name "^6.24.1" - babel-plugin-transform-es2015-literals "^6.22.0" - babel-plugin-transform-es2015-modules-amd "^6.24.1" - babel-plugin-transform-es2015-modules-commonjs "^6.24.1" - babel-plugin-transform-es2015-modules-systemjs "^6.24.1" - babel-plugin-transform-es2015-modules-umd "^6.24.1" - babel-plugin-transform-es2015-object-super "^6.24.1" - babel-plugin-transform-es2015-parameters "^6.24.1" - babel-plugin-transform-es2015-shorthand-properties "^6.24.1" - babel-plugin-transform-es2015-spread "^6.22.0" - babel-plugin-transform-es2015-sticky-regex "^6.24.1" - babel-plugin-transform-es2015-template-literals "^6.22.0" - babel-plugin-transform-es2015-typeof-symbol "^6.22.0" - babel-plugin-transform-es2015-unicode-regex "^6.24.1" - babel-plugin-transform-regenerator "^6.24.1" - babel-preset-jest@^19.0.0: version "19.0.0" resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-19.0.0.tgz#22d67201d02324a195811288eb38294bb3cac396" @@ -864,7 +635,7 @@ babel-preset-stage-3@^6.22.0: babel-plugin-transform-exponentiation-operator "^6.24.1" babel-plugin-transform-object-rest-spread "^6.22.0" -babel-register@^6.18.0, babel-register@^6.24.0, babel-register@^6.24.1: +babel-register@^6.18.0, babel-register@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.24.1.tgz#7e10e13a2f71065bdfad5a1787ba45bca6ded75f" dependencies: @@ -876,7 +647,7 @@ babel-register@^6.18.0, babel-register@^6.24.0, babel-register@^6.24.1: mkdirp "^0.5.1" source-map-support "^0.4.2" -babel-register@^6.26.0: +babel-register@^6.24.0, babel-register@^6.26.0: version "6.26.0" resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" dependencies: @@ -888,7 +659,7 @@ babel-register@^6.26.0: mkdirp "^0.5.1" source-map-support "^0.4.15" -babel-runtime@^6.18.0, babel-runtime@^6.22.0: +babel-runtime@^6.22.0: version "6.23.0" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.23.0.tgz#0a9489f144de70efb3ce4300accdb329e2fc543b" dependencies: @@ -950,7 +721,7 @@ babel-traverse@^6.26.0: invariant "^2.2.2" lodash "^4.17.4" -babel-types@^6.14.0, babel-types@^6.18.0, babel-types@^6.19.0, babel-types@^6.23.0, babel-types@^6.24.1: +babel-types@^6.14.0, babel-types@^6.18.0, babel-types@^6.23.0, babel-types@^6.24.1: version "6.24.1" resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.24.1.tgz#a136879dc15b3606bda0d90c1fc74304c2ff0975" dependencies: @@ -1062,6 +833,10 @@ browser-resolve@^1.11.2: dependencies: resolve "1.1.7" +browser-stdout@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.0.tgz#f351d32969d32fa5d7a5567154263d928ae3bd1f" + browserify-aes@^1.0.0, browserify-aes@^1.0.4: version "1.0.8" resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.0.8.tgz#c8fa3b1b7585bb7ba77c5560b60996ddec6d5309" @@ -1168,20 +943,14 @@ bytes@2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/bytes/-/bytes-2.4.0.tgz#7d97196f9d5baf7f6935e25985549edd2a6c2339" -caller-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-0.1.0.tgz#94085ef63581ecd3daa92444a8fe94e82577751f" - dependencies: - callsites "^0.2.0" - -callsites@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-0.2.0.tgz#afab96262910a7f33c19a5775825c69f34e350ca" - callsites@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" +camelcase-css@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/camelcase-css/-/camelcase-css-1.0.1.tgz#157c4238265f5cf94a1dffde86446552cbf3f705" + camelcase@^1.0.2: version "1.2.1" resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-1.2.1.tgz#9bb5304d2e0b56698b2c758b08a3eaa9daa58a39" @@ -1226,7 +995,7 @@ center-align@^0.1.1: align-text "^0.1.3" lazy-cache "^1.0.3" -chalk@^1.0.0, chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: +chalk@^1.1.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" dependencies: @@ -1300,10 +1069,6 @@ cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: inherits "^2.0.1" safe-buffer "^5.0.1" -circular-json@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/circular-json/-/circular-json-0.3.1.tgz#be8b36aefccde8b3ca7aa2d6afc07a37242c0d2d" - clap@^1.0.9: version "1.1.3" resolved "https://registry.yarnpkg.com/clap/-/clap-1.1.3.tgz#b3bd36e93dd4cbfb395a3c26896352445265c05b" @@ -1314,16 +1079,6 @@ classnames@^2.2.5: version "2.2.5" resolved "https://registry.yarnpkg.com/classnames/-/classnames-2.2.5.tgz#fb3801d453467649ef3603c7d61a02bd129bde6d" -cli-cursor@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-1.0.2.tgz#64da3f7d56a54412e59794bd62dc35295e8f2987" - dependencies: - restore-cursor "^1.0.1" - -cli-width@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.1.0.tgz#b234ca209b29ef66fc518d9b98d5847b00edf00a" - cliui@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/cliui/-/cliui-2.1.0.tgz#4b475760ff80264c762c3a1719032e91c7fea0d1" @@ -1408,7 +1163,7 @@ commander@2.1.x: version "2.1.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.1.0.tgz#d121bbae860d9992a3d517ba96f56588e47c6781" -commander@^2.8.1: +commander@2.9.0, commander@^2.8.1: version "2.9.0" resolved "https://registry.yarnpkg.com/commander/-/commander-2.9.0.tgz#9c99094176e12240cb22d6c5146098400fe0f7d4" dependencies: @@ -1422,14 +1177,6 @@ concat-map@0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" -concat-stream@^1.5.2: - version "1.6.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.0.tgz#0aac662fd52be78964d5532f694784e70110acf7" - dependencies: - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - connected-domain@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/connected-domain/-/connected-domain-1.0.0.tgz#bfe77238c74be453a79f0cb6058deeb4f2358e93" @@ -1537,6 +1284,14 @@ create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: safe-buffer "^5.0.1" sha.js "^2.4.8" +create-react-class@^15.6.0: + version "15.6.2" + resolved "https://registry.yarnpkg.com/create-react-class/-/create-react-class-15.6.2.tgz#cf1ed15f12aad7f14ef5f2dfe05e6c42f91ef02a" + dependencies: + fbjs "^0.8.9" + loose-envify "^1.3.1" + object-assign "^4.1.1" + cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -1689,15 +1444,21 @@ debug@2.6.4: dependencies: ms "0.7.3" +debug@2.6.8, debug@^2.6.8: + version "2.6.8" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" + dependencies: + ms "2.0.0" + debug@^2.1.1, debug@^2.2.0: version "2.6.6" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.6.tgz#a9fa6fbe9ca43cf1e79f73b75c0189cbb7d6db5a" dependencies: ms "0.7.3" -debug@^2.6.8: - version "2.6.8" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.8.tgz#e731531ca2ede27d188222427da17821d68ff4fc" +debug@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" dependencies: ms "2.0.0" @@ -1719,29 +1480,10 @@ default-require-extensions@^1.0.0: dependencies: strip-bom "^2.0.0" -define-properties@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.2.tgz#83a73f2fea569898fb737193c8f873caf6d45c94" - dependencies: - foreach "^2.0.5" - object-keys "^1.0.8" - defined@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" -del@^2.0.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/del/-/del-2.2.2.tgz#c12c981d067846c84bcaf862cff930d907ffd1a8" - dependencies: - globby "^5.0.0" - is-path-cwd "^1.0.0" - is-path-in-cwd "^1.0.0" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - rimraf "^2.2.8" - delayed-stream@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" @@ -1789,15 +1531,15 @@ devtools-contextmenu@=0.0.3: dependencies: devtools-modules "^0.0.28" -devtools-contextmenu@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/devtools-contextmenu/-/devtools-contextmenu-0.0.6.tgz#03ebe541f283b0b7ccc00a4641e6eb1b7fff95f8" +devtools-contextmenu@^0.0.7: + version "0.0.7" + resolved "https://registry.yarnpkg.com/devtools-contextmenu/-/devtools-contextmenu-0.0.7.tgz#9c5561a1e0e2a91d3ac92f76c7ef3a972a0cb120" dependencies: - devtools-modules "^0.0.31" + devtools-modules "^0.0.32" -devtools-launchpad@=0.0.96: - version "0.0.96" - resolved "https://registry.yarnpkg.com/devtools-launchpad/-/devtools-launchpad-0.0.96.tgz#5390ccccbbe06d25f488e66d4511bc94b4807ba7" +devtools-launchpad@=0.0.103: + version "0.0.103" + resolved "https://registry.yarnpkg.com/devtools-launchpad/-/devtools-launchpad-0.0.103.tgz#4ef91204a17bbe333232d91ce4438c1a4aa9b92a" dependencies: amd-loader "0.0.8" autoprefixer "^7.1.2" @@ -1823,18 +1565,16 @@ devtools-launchpad@=0.0.96: classnames "^2.2.5" co "=4.6.0" css-loader "^0.26.1" + debug "^3.1.0" devtools-config "^0.0.15" devtools-connection "^0.0.7" - devtools-contextmenu "^0.0.6" - devtools-modules "^0.0.31" + devtools-contextmenu "^0.0.7" + devtools-mc-assets "^0.0.2" + devtools-modules "^0.0.32" devtools-sprintf-js "^1.0.3" devtools-utils "^0.0.5" - eslint "^3.12.0" - eslint-plugin-babel "^3.3.0" - eslint-plugin-flowtype "^2.20.0" - eslint-plugin-mozilla "0.2.3" - eslint-plugin-react "^6.7.1" express "^4.13.4" + express-static "^1.2.4" extract-text-webpack-plugin "^3.0.0" fs-extra "^2.0.0" fuzzaldrin-plus "^0.4.0" @@ -1846,18 +1586,20 @@ devtools-launchpad@=0.0.96: node-static "^0.7.7" postcss "^6.0.6" postcss-bidirection "^2.4.0" + postcss-class-namespace "^0.1.0" + postcss-js "^1.0.1" postcss-loader "^2.0.6" + postcss-url-mapper "^1.2.0" properties-parser "^0.3.1" ps-node "^0.1.4" raw-loader "^0.5.1" - react "=15.3.2" - react-dom "=15.3.2" - react-hot-loader "^1.3.1" react-immutable-proptypes "^2.1.0" - react-redux "4.4.5" - redux "3.5.2" + react-redux "^5.0.6" + redux "^3.7.2" selenium-webdriver "=3.3.0" style-loader "^0.18.2" + svg-inline-loader "^0.8.0" + svg-inline-react "1.0.2" url-loader "^0.5.9" webpack "^3.3.0" webpack-dev-middleware "^1.11.0" @@ -1865,9 +1607,13 @@ devtools-launchpad@=0.0.96: webpack-hot-middleware "^2.18.2" ws "^1.0.1" -devtools-modules@=0.0.31, devtools-modules@^0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/devtools-modules/-/devtools-modules-0.0.31.tgz#06749ffa7b78cf2826467ffcce9d2edbbba3ced7" +devtools-mc-assets@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/devtools-mc-assets/-/devtools-mc-assets-0.0.2.tgz#082cf3fedc8c238d6731263f836bcc5c18490caa" + +devtools-modules@=0.0.32, devtools-modules@^0.0.32: + version "0.0.32" + resolved "https://registry.yarnpkg.com/devtools-modules/-/devtools-modules-0.0.32.tgz#7432d664dba16918b92bf8e4907f2396c15980d8" dependencies: jest "^19.0.2" @@ -1893,7 +1639,7 @@ devtools-utils@^0.0.5: babel-preset-stage-3 "^6.22.0" jest "^19.0.2" -diff@^3.0.0: +diff@3.2.0, diff@^3.0.0: version "3.2.0" resolved "https://registry.yarnpkg.com/diff/-/diff-3.2.0.tgz#c9ce393a4b7cbd0b058a725c93df299027868ff9" @@ -1905,20 +1651,6 @@ diffie-hellman@^5.0.0: miller-rabin "^4.0.0" randombytes "^2.0.0" -doctrine@^1.2.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.0.0.tgz#c73d8d2909d22291e1a007a395804da8b665fe63" - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" @@ -1994,23 +1726,6 @@ error-ex@^1.2.0: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.7.0.tgz#dfade774e01bfcd97f96180298c449c8623fb94c" - dependencies: - es-to-primitive "^1.1.1" - function-bind "^1.1.0" - is-callable "^1.1.3" - is-regex "^1.0.3" - -es-to-primitive@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" - dependencies: - is-callable "^1.1.1" - is-date-object "^1.0.1" - is-symbol "^1.0.1" - es5-ext@^0.10.14, es5-ext@^0.10.9, es5-ext@~0.10.14: version "0.10.15" resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.15.tgz#c330a5934c1ee21284a7c081a86e5fd937c91ea6" @@ -2071,7 +1786,7 @@ escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" -escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: +escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" @@ -2095,82 +1810,6 @@ escope@^3.6.0: esrecurse "^4.1.0" estraverse "^4.1.1" -eslint-plugin-babel@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-babel/-/eslint-plugin-babel-3.3.0.tgz#2f494aedcf6f4aa4e75b9155980837bc1fbde193" - -eslint-plugin-flowtype@^2.20.0: - version "2.32.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-2.32.1.tgz#bbee185dedf97e5f63ec975cdcddd199bd2a2501" - dependencies: - lodash "^4.15.0" - -eslint-plugin-mozilla@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-mozilla/-/eslint-plugin-mozilla-0.2.3.tgz#4deb85afb52f3622444c59420e005dc3ef44851b" - dependencies: - escope "^3.6.0" - espree "^3.2.0" - estraverse "^4.2.0" - sax "^1.1.4" - -eslint-plugin-react@^6.7.1: - version "6.10.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-6.10.3.tgz#c5435beb06774e12c7db2f6abaddcbf900cd3f78" - dependencies: - array.prototype.find "^2.0.1" - doctrine "^1.2.2" - has "^1.0.1" - jsx-ast-utils "^1.3.4" - object.assign "^4.0.4" - -eslint@^3.12.0: - version "3.19.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-3.19.0.tgz#c8fc6201c7f40dd08941b87c085767386a679acc" - dependencies: - babel-code-frame "^6.16.0" - chalk "^1.1.3" - concat-stream "^1.5.2" - debug "^2.1.1" - doctrine "^2.0.0" - escope "^3.6.0" - espree "^3.4.0" - esquery "^1.0.0" - estraverse "^4.2.0" - esutils "^2.0.2" - file-entry-cache "^2.0.0" - glob "^7.0.3" - globals "^9.14.0" - ignore "^3.2.0" - imurmurhash "^0.1.4" - inquirer "^0.12.0" - is-my-json-valid "^2.10.0" - is-resolvable "^1.0.0" - js-yaml "^3.5.1" - json-stable-stringify "^1.0.0" - levn "^0.3.0" - lodash "^4.0.0" - mkdirp "^0.5.0" - natural-compare "^1.4.0" - optionator "^0.8.2" - path-is-inside "^1.0.1" - pluralize "^1.2.1" - progress "^1.1.8" - require-uncached "^1.0.2" - shelljs "^0.7.5" - strip-bom "^3.0.0" - strip-json-comments "~2.0.1" - table "^3.7.8" - text-table "~0.2.0" - user-home "^2.0.0" - -espree@^3.2.0, espree@^3.4.0: - version "3.4.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-3.4.2.tgz#38dbdedbedc95b8961a1fbf04734a8f6a9c8c592" - dependencies: - acorn "^5.0.1" - acorn-jsx "^3.0.0" - esprima@^2.6.0, esprima@^2.7.1: version "2.7.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" @@ -2179,12 +1818,6 @@ esprima@^3.1.1: version "3.1.3" resolved "https://registry.yarnpkg.com/esprima/-/esprima-3.1.3.tgz#fdca51cee6133895e3c88d535ce49dbff62a4633" -esquery@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.0.tgz#cfba8b57d7fba93f17298a8a006a04cda13d80fa" - dependencies: - estraverse "^4.0.0" - esrecurse@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.1.0.tgz#4713b6536adf7f2ac4f327d559e7756bff648220" @@ -2196,7 +1829,7 @@ estraverse@^1.9.1: version "1.9.3" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" -estraverse@^4.0.0, estraverse@^4.1.1, estraverse@^4.2.0: +estraverse@^4.1.1: version "4.2.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.2.0.tgz#0dee3fed31fcd469618ce7342099fc1afa0bdb13" @@ -2248,10 +1881,6 @@ execa@^0.7.0: signal-exit "^3.0.0" strip-eof "^1.0.0" -exit-hook@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/exit-hook/-/exit-hook-1.1.1.tgz#f05ca233b48c05d54fff07765df8507e95c02ff8" - expand-brackets@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-0.1.5.tgz#df07284e342a807cd733ac5af72411e581d1177b" @@ -2264,6 +1893,12 @@ expand-range@^1.8.1: dependencies: fill-range "^2.1.0" +express-static@^1.2.4: + version "1.2.4" + resolved "https://registry.yarnpkg.com/express-static/-/express-static-1.2.4.tgz#effe53be83b1372e2c0e81e68aa8ae55af76f208" + dependencies: + mail2 latest + express@^4.13.4: version "4.15.2" resolved "https://registry.yarnpkg.com/express/-/express-4.15.2.tgz#af107fc148504457f2dca9a6f2571d7129b97b35" @@ -2344,9 +1979,9 @@ fb-watchman@^2.0.0: dependencies: bser "^2.0.0" -fbjs@^0.8.4: - version "0.8.12" - resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.12.tgz#10b5d92f76d45575fd63a217d4ea02bea2f8ed04" +fbjs@^0.8.16, fbjs@^0.8.9: + version "0.8.16" + resolved "https://registry.yarnpkg.com/fbjs/-/fbjs-0.8.16.tgz#5e67432f550dc41b572bf55847b8aca64e5337db" dependencies: core-js "^1.0.0" isomorphic-fetch "^2.1.1" @@ -2356,20 +1991,6 @@ fbjs@^0.8.4: setimmediate "^1.0.5" ua-parser-js "^0.7.9" -figures@^1.3.5: - version "1.7.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-1.7.0.tgz#cbe1e3affcf1cd44b80cadfed28dc793a9701d2e" - dependencies: - escape-string-regexp "^1.0.5" - object-assign "^4.1.0" - -file-entry-cache@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz#c392990c3e684783d838b8c84a45d8a048458361" - dependencies: - flat-cache "^1.2.1" - object-assign "^4.0.1" - file-loader@^0.10.1: version "0.10.1" resolved "https://registry.yarnpkg.com/file-loader/-/file-loader-0.10.1.tgz#815034119891fc6441fb5a64c11bc93c22ddd842" @@ -2437,15 +2058,6 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" -flat-cache@^1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-1.2.2.tgz#fa86714e72c21db88601761ecf2f555d1abc6b96" - dependencies: - circular-json "^0.3.1" - del "^2.0.2" - graceful-fs "^4.1.2" - write "^0.2.1" - flatten@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/flatten/-/flatten-1.0.2.tgz#dae46a9d78fbe25292258cc1e780a41d95c03782" @@ -2460,10 +2072,6 @@ for-own@^0.1.4: dependencies: for-in "^1.0.1" -foreach@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/foreach/-/foreach-2.0.5.tgz#0bee005018aeb260d0a3af3ae658dd0136ec1b99" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" @@ -2523,7 +2131,7 @@ fstream@^1.0.0, fstream@^1.0.10, fstream@^1.0.2, fstream@^1.0.8: mkdirp ">=0.5 0" rimraf "2" -function-bind@^1.0.2, function-bind@^1.1.0: +function-bind@^1.0.2: version "1.1.0" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.0.tgz#16176714c801798e4e8f2cf7f7529467bb4a5771" @@ -2553,16 +2161,6 @@ geckodriver@=1.4.0: got "5.6.0" tar.gz "1.0.5" -generate-function@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.0.0.tgz#6858fe7c0969b7d4e9093337647ac79f60dfbe74" - -generate-object-property@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/generate-object-property/-/generate-object-property-1.2.0.tgz#9c0e1c40308ce804f4783618b937fa88f99d50d0" - dependencies: - is-property "^1.0.0" - get-caller-file@^1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.2.tgz#f702e63127e7e231c160a80c1554acb70d5047e5" @@ -2590,7 +2188,7 @@ glob-parent@^2.0.0: dependencies: is-glob "^2.0.0" -glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: +glob@7.1.1, glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.1.tgz#805211df04faaf1c63a3600306cdf5ade50b2ec8" dependencies: @@ -2601,7 +2199,7 @@ glob@^7.0.0, glob@^7.0.3, glob@^7.0.5, glob@^7.1.1: once "^1.3.0" path-is-absolute "^1.0.0" -globals@^9.0.0, globals@^9.14.0: +globals@^9.0.0: version "9.17.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.17.0.tgz#0c0ca696d9b9bb694d2e5470bd37777caad50286" @@ -2609,17 +2207,6 @@ globals@^9.18.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" -globby@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-5.0.0.tgz#ebd84667ca0dbb330b99bcfc68eac2bc54370e0d" - dependencies: - array-union "^1.0.1" - arrify "^1.0.0" - glob "^7.0.3" - object-assign "^4.0.1" - pify "^2.0.0" - pinkie-promise "^2.0.0" - got@5.6.0: version "5.6.0" resolved "https://registry.yarnpkg.com/got/-/got-5.6.0.tgz#bb1d7ee163b78082bbc8eb836f3f395004ea6fbf" @@ -2649,6 +2236,10 @@ graceful-fs@^4.1.2, graceful-fs@^4.1.4, graceful-fs@^4.1.6: version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" +growl@1.9.2: + version "1.9.2" + resolved "https://registry.yarnpkg.com/growl/-/growl-1.9.2.tgz#0ea7743715db8d8de2c5ede1775e1b45ac85c02f" + growly@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" @@ -2727,6 +2318,10 @@ hawk@~3.1.3: hoek "2.x.x" sntp "1.x.x" +he@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/he/-/he-1.1.1.tgz#93410fd21b009735151f8868c2f271f3427e23fd" + hmac-drbg@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" @@ -2743,6 +2338,10 @@ hoist-non-react-statics@^1.0.3: version "1.2.0" resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz#aa448cf0986d55cc40773b17174b7dd066cb7cfb" +hoist-non-react-statics@^2.2.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/hoist-non-react-statics/-/hoist-non-react-statics-2.3.1.tgz#343db84c6018c650778898240135a1420ee22ce0" + home-or-tmp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" @@ -2805,10 +2404,6 @@ ieee754@^1.1.4: version "1.1.8" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.8.tgz#be33d40ac10ef1926701f6f08a2d86fbfd1ad3e4" -ignore@^3.2.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-3.2.7.tgz#4810ca5f1d8eca5595213a34b94f2eb4ed926bbd" - immediate@~3.0.5: version "3.0.6" resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" @@ -2817,10 +2412,6 @@ immutable@^3.7.6, immutable@^3.8.1: version "3.8.1" resolved "https://registry.yarnpkg.com/immutable/-/immutable-3.8.1.tgz#200807f11ab0f72710ea485542de088075f68cd2" -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - indexes-of@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" @@ -2848,24 +2439,6 @@ ini@~1.3.0: version "1.3.4" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.4.tgz#0537cb79daf59b59a1a517dff706c86ec039162e" -inquirer@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-0.12.0.tgz#1ef2bfd63504df0bc75785fff8c2c41df12f077e" - dependencies: - ansi-escapes "^1.1.0" - ansi-regex "^2.0.0" - chalk "^1.0.0" - cli-cursor "^1.0.1" - cli-width "^2.0.0" - figures "^1.3.5" - lodash "^4.3.0" - readline2 "^1.0.1" - run-async "^0.1.0" - rx-lite "^3.1.2" - string-width "^1.0.1" - strip-ansi "^3.0.0" - through "^2.3.6" - interpret@^1.0.0: version "1.0.3" resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.0.3.tgz#cbc35c62eeee73f19ab7b10a801511401afc0f90" @@ -2908,20 +2481,12 @@ is-builtin-module@^1.0.0: dependencies: builtin-modules "^1.0.0" -is-callable@^1.1.1, is-callable@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.3.tgz#86eb75392805ddc33af71c92a0eedf74ee7604b2" - is-ci@^1.0.9: version "1.0.10" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-1.0.10.tgz#f739336b2632365061a9d48270cd56ae3369318e" dependencies: ci-info "^1.0.0" -is-date-object@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.1.tgz#9aa20eb6aeebbff77fbd33e74ca01b33581d3a16" - is-directory@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" @@ -2966,37 +2531,12 @@ is-glob@^2.0.0, is-glob@^2.0.1: dependencies: is-extglob "^1.0.0" -is-my-json-valid@^2.10.0: - version "2.16.0" - resolved "https://registry.yarnpkg.com/is-my-json-valid/-/is-my-json-valid-2.16.0.tgz#f079dd9bfdae65ee2038aae8acbc86ab109e3693" - dependencies: - generate-function "^2.0.0" - generate-object-property "^1.1.0" - jsonpointer "^4.0.0" - xtend "^4.0.0" - is-number@^2.0.2, is-number@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-2.1.0.tgz#01fcbbb393463a548f2f466cce16dece49db908f" dependencies: kind-of "^3.0.2" -is-path-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz#d225ec23132e89edd38fda767472e62e65f1106d" - -is-path-in-cwd@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-in-cwd/-/is-path-in-cwd-1.0.0.tgz#6477582b8214d602346094567003be8a9eac04dc" - dependencies: - is-path-inside "^1.0.0" - -is-path-inside@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-1.0.0.tgz#fc06e5a1683fbda13de667aff717bbc10a48f37f" - dependencies: - path-is-inside "^1.0.1" - is-plain-obj@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" @@ -3009,26 +2549,10 @@ is-primitive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-primitive/-/is-primitive-2.0.0.tgz#207bab91638499c07b2adf240a41a87210034575" -is-property@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-property/-/is-property-1.0.2.tgz#57fe1c4e48474edd65b09911f26b1cd4095dda84" - is-redirect@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" -is-regex@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.4.tgz#5517489b547091b0930e095654ced25ee97e9491" - dependencies: - has "^1.0.1" - -is-resolvable@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.0.0.tgz#8df57c61ea2e3c501408d100fb013cf8d6e0cc62" - dependencies: - tryit "^1.0.1" - is-retry-allowed@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.1.0.tgz#11a060568b67339444033d0125a61a20d564fb34" @@ -3043,10 +2567,6 @@ is-svg@^2.0.0: dependencies: html-comment-regex "^1.1.0" -is-symbol@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" - is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -3366,7 +2886,7 @@ js-tokens@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" -js-yaml@^3.4.3, js-yaml@^3.5.1, js-yaml@^3.7.0: +js-yaml@^3.4.3, js-yaml@^3.7.0: version "3.8.3" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.8.3.tgz#33a05ec481c850c8875929166fe1beb61c728766" dependencies: @@ -3434,7 +2954,7 @@ json-schema@0.2.3: version "0.2.3" resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" -json-stable-stringify@^1.0.0, json-stable-stringify@^1.0.1: +json-stable-stringify@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz#9a759d39c5f2ff503fd5300646ed445f88c4f9af" dependencies: @@ -3444,6 +2964,10 @@ json-stringify-safe@~5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" +json3@3.3.2: + version "3.3.2" + resolved "https://registry.yarnpkg.com/json3/-/json3-3.3.2.tgz#3c0434743df93e2f5c42aee7b19bcb483575f4e1" + json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" @@ -3458,10 +2982,6 @@ jsonify@~0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" -jsonpointer@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/jsonpointer/-/jsonpointer-4.0.1.tgz#4fd92cb34e0e9db3c89c8622ecf51f9b978c6cb9" - jsprim@^1.2.2: version "1.4.0" resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.0.tgz#a3b87e40298d8c380552d8cc7628a0bb95a22918" @@ -3471,10 +2991,6 @@ jsprim@^1.2.2: json-schema "0.2.3" verror "1.3.6" -jsx-ast-utils@^1.3.4: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-1.4.1.tgz#3867213e8dd79bf1e8f2300c0cfc1efb182c0df1" - jszip@^3.1.3: version "3.1.3" resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.1.3.tgz#8a920403b2b1651c0fc126be90192d9080957c37" @@ -3505,7 +3021,7 @@ leven@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" -levn@^0.3.0, levn@~0.3.0: +levn@~0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" dependencies: @@ -3541,7 +3057,7 @@ loader-runner@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/loader-runner/-/loader-runner-2.3.0.tgz#f482aea82d543e07921700d5a46ef26fdac6b8a2" -loader-utils@^0.2.16: +loader-utils@^0.2.11, loader-utils@^0.2.16: version "0.2.17" resolved "https://registry.yarnpkg.com/loader-utils/-/loader-utils-0.2.17.tgz#f86e6374d43205a6e6c60e9196f17c0299bfb348" dependencies: @@ -3569,6 +3085,29 @@ lodash-es@^4.2.0, lodash-es@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.4.tgz#dcc1d7552e150a0640073ba9cb31d70f032950e7" +lodash._baseassign@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/lodash._baseassign/-/lodash._baseassign-3.2.0.tgz#8c38a099500f215ad09e59f1722fd0c52bfe0a4e" + dependencies: + lodash._basecopy "^3.0.0" + lodash.keys "^3.0.0" + +lodash._basecopy@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz#8da0e6a876cf344c0ad8a54882111dd3c5c7ca36" + +lodash._basecreate@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash._basecreate/-/lodash._basecreate-3.0.3.tgz#1bc661614daa7fc311b7d03bf16806a0213cf821" + +lodash._getnative@^3.0.0: + version "3.9.1" + resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" + +lodash._isiterateecall@^3.0.0: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" + lodash._reinterpolate@~3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" @@ -3577,6 +3116,30 @@ lodash.camelcase@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" +lodash.create@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/lodash.create/-/lodash.create-3.1.1.tgz#d7f2849f0dbda7e04682bb8cd72ab022461debe7" + dependencies: + lodash._baseassign "^3.0.0" + lodash._basecreate "^3.0.0" + lodash._isiterateecall "^3.0.0" + +lodash.isarguments@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" + +lodash.isarray@^3.0.0: + version "3.0.4" + resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" + +lodash.keys@^3.0.0: + version "3.1.2" + resolved "https://registry.yarnpkg.com/lodash.keys/-/lodash.keys-3.1.2.tgz#4dbc0472b156be50a0b286855d1bd0b0c656098a" + dependencies: + lodash._getnative "^3.0.0" + lodash.isarguments "^3.0.0" + lodash.isarray "^3.0.0" + lodash.memoize@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" @@ -3602,7 +3165,7 @@ lodash.uniq@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" -lodash@^4.0.0, lodash@^4.14.0, lodash@^4.15.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1, lodash@^4.3.0: +lodash@^4.0.0, lodash@^4.13.1, lodash@^4.14.0, lodash@^4.17.4, lodash@^4.2.0, lodash@^4.2.1: version "4.17.4" resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.4.tgz#78203a4d1c328ae1d86dca6460e369b57f4055ae" @@ -3610,7 +3173,7 @@ longest@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/longest/-/longest-1.0.1.tgz#30a0b2da38f73770e8294a0d22e6625ed77d0097" -loose-envify@^1.0.0, loose-envify@^1.1.0: +loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.3.1.tgz#d1a8ad33fa9ce0e713d65fdd0ac8b748d478c848" dependencies: @@ -3631,6 +3194,12 @@ macaddress@^0.2.8: version "0.2.8" resolved "https://registry.yarnpkg.com/macaddress/-/macaddress-0.2.8.tgz#5904dc537c39ec6dbefeae902327135fa8511f12" +mail2@latest: + version "1.2.2" + resolved "https://registry.yarnpkg.com/mail2/-/mail2-1.2.2.tgz#977c6940c6fabca4c353a0d84e584fe7cd7de06d" + dependencies: + mocha "^3.2.0" + make-dir@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.0.0.tgz#97a011751e91dd87cfadef58832ebb04936de978" @@ -3754,12 +3323,29 @@ minimist@^1.1.1, minimist@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" -"mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: minimist "0.0.8" +mocha@^3.2.0: + version "3.5.3" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-3.5.3.tgz#1e0480fe36d2da5858d1eb6acc38418b26eaa20d" + dependencies: + browser-stdout "1.3.0" + commander "2.9.0" + debug "2.6.8" + diff "3.2.0" + escape-string-regexp "1.0.5" + glob "7.1.1" + growl "1.9.2" + he "1.1.1" + json3 "3.3.2" + lodash.create "3.1.1" + mkdirp "0.5.1" + supports-color "3.1.2" + mout@^0.11.0: version "0.11.1" resolved "https://registry.yarnpkg.com/mout/-/mout-0.11.1.tgz#ba3611df5f0e5b1ffbfd01166b8f02d1f5fa2b99" @@ -3780,10 +3366,6 @@ mustache@^2.2.1: version "2.3.0" resolved "https://registry.yarnpkg.com/mustache/-/mustache-2.3.0.tgz#4028f7778b17708a489930a6e52ac3bca0da41d0" -mute-stream@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.5.tgz#8fbfabb0a98a253d3184331f9e8deb7372fac6c0" - nan@^2.3.0: version "2.6.2" resolved "https://registry.yarnpkg.com/nan/-/nan-2.6.2.tgz#e4ff34e6c95fdfb5aecc08de6596f43605a7db45" @@ -3936,22 +3518,10 @@ oauth-sign@~0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.8.2.tgz#46a6ab7f0aead8deae9ec0565780b7d4efeb9d43" -object-assign@^4.0.1, object-assign@^4.1.0: +object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" -object-keys@^1.0.10, object-keys@^1.0.8: - version "1.0.11" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.0.11.tgz#c54601778ad560f1142ce0e01bcca8b56d13426d" - -object.assign@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.0.4.tgz#b1c9cc044ef1b9fe63606fc141abbb32e14730cc" - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.0" - object-keys "^1.0.10" - object.omit@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.omit/-/object.omit-2.0.1.tgz#1a9c744829f39dbb858c76ca3579ae2a54ebd1fa" @@ -3971,10 +3541,6 @@ once@^1.3.0, once@^1.3.3, once@^1.4.0: dependencies: wrappy "1" -onetime@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-1.1.0.tgz#a1f7838f8314c516f05ecefcbc4ccfe04b4ed789" - optimist@>=0.3.4, optimist@^0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.6.1.tgz#da3ea74686fa21a19a111c326e90eb15a0196686" @@ -3982,7 +3548,7 @@ optimist@>=0.3.4, optimist@^0.6.1: minimist "~0.0.1" wordwrap "~0.0.2" -optionator@^0.8.1, optionator@^0.8.2: +optionator@^0.8.1: version "0.8.2" resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.2.tgz#364c5e409d3f4d6301d6c0b4c05bba50180aeb64" dependencies: @@ -4111,10 +3677,6 @@ path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" -path-is-inside@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - path-key@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" @@ -4175,10 +3737,6 @@ pkg-dir@^2.0.0: dependencies: find-up "^2.1.0" -pluralize@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-1.2.1.tgz#d1a21483fd22bb41e58a12fa3421823140897c45" - postcss-bidirection@^2.4.0: version "2.4.0" resolved "https://registry.yarnpkg.com/postcss-bidirection/-/postcss-bidirection-2.4.0.tgz#7cfa21448630e8f8f705b8342a198de4c104687b" @@ -4193,6 +3751,13 @@ postcss-calc@^5.2.0: postcss-message-helpers "^2.0.0" reduce-css-calc "^1.2.6" +postcss-class-namespace@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/postcss-class-namespace/-/postcss-class-namespace-0.1.0.tgz#b5f7be4373c0d1458760b60cab838ca6212362ca" + dependencies: + lodash "^4.13.1" + postcss "^5.0.10" + postcss-colormin@^2.1.8: version "2.2.2" resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-2.2.2.tgz#6631417d5f0e909a3d7ec26b24c8a8d1e4f96e4b" @@ -4246,6 +3811,13 @@ postcss-filter-plugins@^2.0.0: postcss "^5.0.4" uniqid "^4.0.0" +postcss-js@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/postcss-js/-/postcss-js-1.0.1.tgz#ffaf29226e399ea74b5dce02cab1729d7addbc7b" + dependencies: + camelcase-css "^1.0.1" + postcss "^6.0.11" + postcss-load-config@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-1.2.0.tgz#539e9afc9ddc8620121ebf9d8c3673e0ce50d28a" @@ -4434,6 +4006,12 @@ postcss-unique-selectors@^2.0.2: postcss "^5.0.4" uniqs "^2.0.0" +postcss-url-mapper@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/postcss-url-mapper/-/postcss-url-mapper-1.2.0.tgz#223f311ec52989d5074101f1576f66975697c27e" + dependencies: + postcss "^6.0.13" + postcss-value-parser@^3.0.1, postcss-value-parser@^3.0.2, postcss-value-parser@^3.1.1, postcss-value-parser@^3.1.2, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.0.tgz#87f38f9f18f774a4ab4c8a232f5c5ce8872a9d15" @@ -4463,6 +4041,14 @@ postcss@^6.0.11, postcss@^6.0.2, postcss@^6.0.6: source-map "^0.5.7" supports-color "^4.4.0" +postcss@^6.0.13: + version "6.0.13" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.13.tgz#b9ecab4ee00c89db3ec931145bd9590bbf3f125f" + dependencies: + chalk "^2.1.0" + source-map "^0.6.1" + supports-color "^4.4.0" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -4493,16 +4079,20 @@ process@^0.11.0: version "0.11.10" resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" -progress@^1.1.8: - version "1.1.8" - resolved "https://registry.yarnpkg.com/progress/-/progress-1.1.8.tgz#e260c78f6161cdd9b0e56cc3e0a85de17c7a57be" - promise@^7.1.1: version "7.1.1" resolved "https://registry.yarnpkg.com/promise/-/promise-7.1.1.tgz#489654c692616b8aa55b0724fa809bb7db49c5bf" dependencies: asap "~2.0.3" +prop-types@^15.5.10: + version "15.6.0" + resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.6.0.tgz#ceaf083022fc46b4a35f69e13ef75aed0d639856" + dependencies: + fbjs "^0.8.16" + loose-envify "^1.3.1" + object-assign "^4.1.1" + properties-parser@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/properties-parser/-/properties-parser-0.3.1.tgz#1316e9539ffbfd93845e369b211022abd478771a" @@ -4609,34 +4199,19 @@ rc@^1.1.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -react-dom@=15.3.2: - version "15.3.2" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.3.2.tgz#c46b0aa5380d7b838e7a59c4a7beff2ed315531f" - -react-hot-api@^0.4.5: - version "0.4.7" - resolved "https://registry.yarnpkg.com/react-hot-api/-/react-hot-api-0.4.7.tgz#a7e22a56d252e11abd9366b61264cf4492c58171" - -react-hot-loader@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/react-hot-loader/-/react-hot-loader-1.3.1.tgz#c95647ae78b73dfceff6ec71ffcb04182ff6daf9" +react-dom@=15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-15.6.1.tgz#2cb0ed4191038e53c209eb3a79a23e2a4cf99470" dependencies: - react-hot-api "^0.4.5" - source-map "^0.4.4" + fbjs "^0.8.9" + loose-envify "^1.1.0" + object-assign "^4.1.0" + prop-types "^15.5.10" react-immutable-proptypes@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/react-immutable-proptypes/-/react-immutable-proptypes-2.1.0.tgz#023d6f39bb15c97c071e9e60d00d136eac5fa0b4" -react-redux@4.4.5: - version "4.4.5" - resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-4.4.5.tgz#f509a2981be2252d10c629ef7c559347a4aec457" - dependencies: - hoist-non-react-statics "^1.0.3" - invariant "^2.0.0" - lodash "^4.2.0" - loose-envify "^1.1.0" - react-redux@=5.0.3: version "5.0.3" resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.3.tgz#86c3b68d56e74294a42e2a740ab66117ef6c019f" @@ -4647,13 +4222,26 @@ react-redux@=5.0.3: lodash-es "^4.2.0" loose-envify "^1.1.0" -react@=15.3.2: - version "15.3.2" - resolved "https://registry.yarnpkg.com/react/-/react-15.3.2.tgz#a7bccd2fee8af126b0317e222c28d1d54528d09e" +react-redux@^5.0.6: + version "5.0.6" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-5.0.6.tgz#23ed3a4f986359d68b5212eaaa681e60d6574946" dependencies: - fbjs "^0.8.4" + hoist-non-react-statics "^2.2.1" + invariant "^2.0.0" + lodash "^4.2.0" + lodash-es "^4.2.0" + loose-envify "^1.1.0" + prop-types "^15.5.10" + +react@=15.6.1: + version "15.6.1" + resolved "https://registry.yarnpkg.com/react/-/react-15.6.1.tgz#baa8434ec6780bde997cdc380b79cd33b96393df" + dependencies: + create-react-class "^15.6.0" + fbjs "^0.8.9" loose-envify "^1.1.0" object-assign "^4.1.0" + prop-types "^15.5.10" read-all-stream@^3.0.0: version "3.1.0" @@ -4692,7 +4280,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.2, readable-stream@^2.2.6: +readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.4, readable-stream@^2.2.6: version "2.2.9" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.2.9.tgz#cf78ec6f4a6d1eb43d26488cac97f042e74b7fc8" dependencies: @@ -4724,20 +4312,6 @@ readdirp@^2.0.0: readable-stream "^2.0.2" set-immediate-shim "^1.0.1" -readline2@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - mute-stream "0.0.5" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - dependencies: - resolve "^1.1.6" - reduce-css-calc@^1.2.6: version "1.3.0" resolved "https://registry.yarnpkg.com/reduce-css-calc/-/reduce-css-calc-1.3.0.tgz#747c914e049614a4c9cfbba629871ad1d2927716" @@ -4752,15 +4326,6 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^0.4.2" -redux@3.5.2: - version "3.5.2" - resolved "https://registry.yarnpkg.com/redux/-/redux-3.5.2.tgz#4533745e970b647ec26066a83aa30e9e26faf843" - dependencies: - lodash "^4.2.1" - lodash-es "^4.2.1" - loose-envify "^1.1.0" - symbol-observable "^0.2.3" - redux@^3.6.0: version "3.6.0" resolved "https://registry.yarnpkg.com/redux/-/redux-3.6.0.tgz#887c2b3d0b9bd86eca2be70571c27654c19e188d" @@ -4770,6 +4335,15 @@ redux@^3.6.0: loose-envify "^1.1.0" symbol-observable "^1.0.2" +redux@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/redux/-/redux-3.7.2.tgz#06b73123215901d25d065be342eb026bc1c8537b" + dependencies: + lodash "^4.2.1" + lodash-es "^4.2.1" + loose-envify "^1.1.0" + symbol-observable "^1.0.3" + regenerate@^1.2.1: version "1.3.2" resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.3.2.tgz#d1941c67bad437e1be76433add5b385f95b19260" @@ -4782,14 +4356,6 @@ regenerator-runtime@^0.11.0: version "0.11.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.0.tgz#7e54fe5b5ccd5d6624ea6255c3473be090b802e1" -regenerator-transform@0.9.11: - version "0.9.11" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.9.11.tgz#3a7d067520cb7b7176769eb5ff868691befe1283" - dependencies: - babel-runtime "^6.18.0" - babel-types "^6.19.0" - private "^0.1.6" - regex-cache@^0.4.2: version "0.4.3" resolved "https://registry.yarnpkg.com/regex-cache/-/regex-cache-0.4.3.tgz#9b1a6c35d4d0dfcef5711ae651e8e9d3d7114145" @@ -4805,14 +4371,6 @@ regexpu-core@^1.0.0: regjsgen "^0.2.0" regjsparser "^0.1.4" -regexpu-core@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-2.0.0.tgz#49d038837b8dcf8bfa5b9a42139938e6ea2ae240" - dependencies: - regenerate "^1.2.1" - regjsgen "^0.2.0" - regjsparser "^0.1.4" - regjsgen@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.2.0.tgz#6c016adeac554f75823fe37ac05b92d5a4edb1f7" @@ -4880,45 +4438,27 @@ require-main-filename@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" -require-uncached@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/require-uncached/-/require-uncached-1.0.3.tgz#4e0d56d6c9662fd31e43011c4b95aa49955421d3" - dependencies: - caller-path "^0.1.0" - resolve-from "^1.0.0" - reselect@^2.5.4: version "2.5.4" resolved "https://registry.yarnpkg.com/reselect/-/reselect-2.5.4.tgz#b7d23fdf00b83fa7ad0279546f8dbbbd765c7047" -resolve-from@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-1.0.1.tgz#26cbfe935d1aeeeabb29bc3fe5aeb01e93d44226" - resolve@1.1.7: version "1.1.7" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" -resolve@^1.1.6, resolve@^1.2.0: +resolve@^1.2.0: version "1.3.3" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.3.3.tgz#655907c3469a8680dc2de3a275a8fdd69691f0e5" dependencies: path-parse "^1.0.5" -restore-cursor@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-1.0.1.tgz#34661f46886327fed2991479152252df92daa541" - dependencies: - exit-hook "^1.0.0" - onetime "^1.0.0" - right-align@^0.1.1: version "0.1.3" resolved "https://registry.yarnpkg.com/right-align/-/right-align-0.1.3.tgz#61339b722fe6a3515689210d24e14c96148613ef" dependencies: align-text "^0.1.1" -rimraf@2, rimraf@^2.2.8, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: +rimraf@2, rimraf@^2.4.4, rimraf@^2.5.1, rimraf@^2.5.4, rimraf@^2.6.1: version "2.6.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.1.tgz#c2338ec643df7a1b7fe5c54fa86f57428a55f33d" dependencies: @@ -4931,20 +4471,10 @@ ripemd160@^2.0.0, ripemd160@^2.0.1: hash-base "^2.0.0" inherits "^2.0.1" -run-async@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-0.1.0.tgz#c8ad4a5e110661e402a7d21b530e009f25f8e389" - dependencies: - once "^1.3.0" - run-parallel@^1.1.4: version "1.1.6" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.1.6.tgz#29003c9a2163e01e2d2dfc90575f2c6c1d61a039" -rx-lite@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/rx-lite/-/rx-lite-3.1.2.tgz#19ce502ca572665f3b647b10939f97fd1615f102" - safe-buffer@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.0.1.tgz#d263ca54696cd8a306b5ca6551e92de57918fbe7" @@ -4965,7 +4495,7 @@ sane@~1.5.0: walker "~1.0.5" watch "~0.10.0" -sax@>=0.6.0, sax@^1.1.4, sax@^1.2.1, sax@~1.2.1: +sax@>=0.6.0, sax@^1.2.1, sax@~1.2.1: version "1.2.2" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.2.tgz#fd8631a23bc7826bef5d871bdb87378c95647828" @@ -5047,14 +4577,6 @@ shebang-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" -shelljs@^0.7.5: - version "0.7.7" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.7.7.tgz#b2f5c77ef97148f4b4f6e22682e10bba8667cff1" - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - shellwords@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.0.tgz#66afd47b6a12932d9071cbfd98a52e785cd0ba14" @@ -5063,14 +4585,14 @@ signal-exit@^3.0.0: version "3.0.2" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" +simple-html-tokenizer@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/simple-html-tokenizer/-/simple-html-tokenizer-0.1.1.tgz#05c2eec579ffffe145a030ac26cfea61b980fabe" + slash@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" -slice-ansi@0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-0.0.4.tgz#edbf8903f66f7ce2f8eafd6ceed65e264c831b35" - sntp@1.x.x: version "1.0.9" resolved "https://registry.yarnpkg.com/sntp/-/sntp-1.0.9.tgz#6541184cc90aeea6c6e7b35e2659082443c66198" @@ -5117,6 +4639,10 @@ source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" +source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + source-map@~0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" @@ -5251,6 +4777,12 @@ style-loader@^0.18.2: loader-utils "^1.0.2" schema-utils "^0.3.0" +supports-color@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.1.2.tgz#72a262894d9d408b956ca05ff37b2ed8a6e2a2d5" + dependencies: + has-flag "^1.0.0" + supports-color@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-2.0.0.tgz#535d045ce6b6363fa40117084629995e9df324c7" @@ -5267,6 +4799,18 @@ supports-color@^4.0.0, supports-color@^4.2.1, supports-color@^4.4.0: dependencies: has-flag "^2.0.0" +svg-inline-loader@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/svg-inline-loader/-/svg-inline-loader-0.8.0.tgz#7e9d905d80d0b4e68d2df21afcd08ee9e9a3ea6e" + dependencies: + loader-utils "^0.2.11" + object-assign "^4.0.1" + simple-html-tokenizer "^0.1.1" + +svg-inline-react@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/svg-inline-react/-/svg-inline-react-1.0.2.tgz#138dfd0eb7ac52d689c3aa0a10d1d0b134a7d081" + svgo@^0.7.0: version "0.7.2" resolved "https://registry.yarnpkg.com/svgo/-/svgo-0.7.2.tgz#9f5772413952135c6fefbf40afe6a4faa88b4bb5" @@ -5279,11 +4823,7 @@ svgo@^0.7.0: sax "~1.2.1" whet.extend "~0.9.9" -symbol-observable@^0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-0.2.4.tgz#95a83db26186d6af7e7a18dbd9760a2f86d08f40" - -symbol-observable@^1.0.2: +symbol-observable@^1.0.2, symbol-observable@^1.0.3: version "1.0.4" resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d" @@ -5297,17 +4837,6 @@ table-parser@^0.1.3: dependencies: connected-domain "^1.0.0" -table@^3.7.8: - version "3.8.3" - resolved "https://registry.yarnpkg.com/table/-/table-3.8.3.tgz#2bbc542f0fda9861a755d3947fefd8b3f513855f" - dependencies: - ajv "^4.7.0" - ajv-keywords "^1.0.0" - chalk "^1.1.1" - lodash "^4.0.0" - slice-ansi "0.0.4" - string-width "^2.0.0" - tapable@^0.2.7, tapable@~0.2.5: version "0.2.8" resolved "https://registry.yarnpkg.com/tapable/-/tapable-0.2.8.tgz#99372a5c999bf2df160afc0d74bed4f47948cd22" @@ -5353,18 +4882,10 @@ test-exclude@^4.0.3: read-pkg-up "^1.0.1" require-main-filename "^1.0.1" -text-table@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - throat@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/throat/-/throat-3.0.0.tgz#e7c64c867cbb3845f10877642f7b60055b8ec0d6" -through@^2.3.6: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - time-stamp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/time-stamp/-/time-stamp-2.0.0.tgz#95c6a44530e15ba8d6f4a3ecb8c3a3fac46da357" @@ -5415,10 +4936,6 @@ trim-right@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" -tryit@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tryit/-/tryit-1.0.3.tgz#393be730a9446fd1ead6da59a014308f36c289cb" - tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -5446,10 +4963,6 @@ type-is@~1.6.14: media-typer "0.3.0" mime-types "~2.1.15" -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - ua-parser-js@^0.7.9: version "0.7.12" resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.12.tgz#04c81a99bdd5dc52263ea29d24c6bf8d4818a4bb" @@ -5538,12 +5051,6 @@ user-home@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190" -user-home@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/user-home/-/user-home-2.0.0.tgz#9c70bfd8169bc1dcbf48604e0f04b8b49cde9e9f" - dependencies: - os-homedir "^1.0.0" - util-deprecate@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" @@ -5683,7 +5190,7 @@ webpack@^2.2.1: webpack-sources "^1.0.1" yargs "^6.0.0" -webpack@^3.3.0, webpack@^3.5.6: +webpack@^3.3.0: version "3.5.6" resolved "https://registry.yarnpkg.com/webpack/-/webpack-3.5.6.tgz#a492fb6c1ed7f573816f90e00c8fbb5a20cc5c36" dependencies: @@ -5785,12 +5292,6 @@ wrappy@1: version "1.0.2" resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" -write@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/write/-/write-0.2.1.tgz#5fc03828e264cea3fe91455476f7a3c566cb0757" - dependencies: - mkdirp "^0.5.1" - ws@1.1.x, ws@^1.0.1: version "1.1.4" resolved "https://registry.yarnpkg.com/ws/-/ws-1.1.4.tgz#57f40d036832e5f5055662a397c4de76ed66bf61" diff --git a/package.json b/package.json index d4327f8b8835..e39548b5b26f 100644 --- a/package.json +++ b/package.json @@ -10,5 +10,6 @@ "eslint-plugin-no-unsanitized": "2.0.1", "eslint-plugin-react": "7.1.0", "eslint-plugin-spidermonkey-js": "file:tools/lint/eslint/eslint-plugin-spidermonkey-js" - } + }, + "devDependencies": {} } From 1445664e03b2c7e6f8ca988ed4d1f6a78074f21e Mon Sep 17 00:00:00 2001 From: steveck-chung Date: Fri, 8 Sep 2017 19:20:36 +0800 Subject: [PATCH 26/69] Bug 1395028 - Part 1: Add credit card sync checkbox in its doorhanger. r=lchang,markh MozReview-Commit-ID: 7OmFi2SWaKS --HG-- extra : rebase_source : 8cde250175791dfa5aa8cbfba728cbe46e1e5caa --- .../formautofill/FormAutofillDoorhanger.jsm | 43 +++++++++++++------ .../locales/en-US/formautofill.properties | 3 ++ 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/browser/extensions/formautofill/FormAutofillDoorhanger.jsm b/browser/extensions/formautofill/FormAutofillDoorhanger.jsm index 5564aa4b2ad7..b959bd0e1eae 100644 --- a/browser/extensions/formautofill/FormAutofillDoorhanger.jsm +++ b/browser/extensions/formautofill/FormAutofillDoorhanger.jsm @@ -123,6 +123,26 @@ const CONTENT = { persistWhileVisible: true, popupIconURL: "chrome://formautofill/content/icon-credit-card.svg", hideClose: true, + checkbox: { + get checked() { + return Services.prefs.getBoolPref("services.sync.engine.creditcards"); + }, + get label() { + // Only set the label when sync account is set and credit card sync is disabled, + // otherwise return null label to hide checkbox. + return Services.prefs.prefHasUserValue("services.sync.username") && + !Services.prefs.getBoolPref("services.sync.engine.creditcards") ? + GetStringFromName("creditCardsSyncCheckbox") : null; + }, + callback(event) { + let {secondaryButton, menubutton} = event.target.parentNode.parentNode.parentNode; + let checked = event.target.checked; + Services.prefs.setBoolPref("services.sync.engine.creditcards", checked); + secondaryButton.disabled = checked; + menubutton.disabled = checked; + log.debug("Set creditCard sync to", checked); + }, + }, }, }, }; @@ -166,6 +186,11 @@ let FormAutofillDoorhanger = { return [mainAction, secondaryActions]; }, + _getNotificationElm(browser, id) { + let notificationId = id + "-notification"; + let chromeDoc = browser.ownerDocument; + return chromeDoc.getElementById(notificationId); + }, /** * Append the link label element to the popupnotificationcontent. * @param {XULElement} browser @@ -225,26 +250,20 @@ let FormAutofillDoorhanger = { if (!options.checkbox) { return; } - let id = notificationId + "-notification"; - let chromeDoc = browser.ownerDocument; - let notification = chromeDoc.getElementById(id); - let cb = notification.checkbox; + let {checkbox} = this._getNotificationElm(browser, notificationId); - if (cb) { - cb.addEventListener("command", options.checkbox.callback); + if (checkbox && !checkbox.hidden) { + checkbox.addEventListener("command", options.checkbox.callback); } }, _removeCheckboxListener(browser, {notificationId, options}) { if (!options.checkbox) { return; } - let id = notificationId + "-notification"; - let chromeDoc = browser.ownerDocument; - let notification = chromeDoc.getElementById(id); - let cb = notification.checkbox; + let {checkbox} = this._getNotificationElm(browser, notificationId); - if (cb) { - cb.removeEventListener("command", options.checkbox.callback); + if (checkbox && !checkbox.hidden) { + checkbox.removeEventListener("command", options.checkbox.callback); } }, /** diff --git a/browser/extensions/formautofill/locales/en-US/formautofill.properties b/browser/extensions/formautofill/locales/en-US/formautofill.properties index 4d9572e51623..a1f8d764c469 100644 --- a/browser/extensions/formautofill/locales/en-US/formautofill.properties +++ b/browser/extensions/formautofill/locales/en-US/formautofill.properties @@ -20,6 +20,9 @@ changeAutofillOptionsOSX = Change Form Autofill Preferences # LOCALIZATION NOTE (addressesSyncCheckbox): If Sync is enabled, this checkbox is displayed on the doorhanger # shown when saving addresses. addressesSyncCheckbox = Share addresses with synced devices +# LOCALIZATION NOTE (creditCardsSyncCheckbox): If Sync is enabled and credit card sync is available, +# this checkbox is displayed on the doorhanger shown when saving credit card. +creditCardsSyncCheckbox = Share credit cards with synced devices # LOCALIZATION NOTE (updateAddressMessage, createAddressLabel, updateAddressLabel): Used on the doorhanger # when an address change is detected. updateAddressMessage = Would you like to update your address with this new information? From 5e0a5c9a9400b3b6ccc185f89aa7ddad28d7a8c4 Mon Sep 17 00:00:00 2001 From: steveck-chung Date: Wed, 13 Sep 2017 18:17:07 +0800 Subject: [PATCH 27/69] Bug 1395028 - Part 2: Add cc doorhanger sync checkbox mochitest. r=lchang MozReview-Commit-ID: 2eqqn19REKy --HG-- extra : rebase_source : 99d6061c8217a368206e3b9dafc404721427d3cb --- .../browser/browser_creditCard_doorhanger.js | 88 +++++++++++++++++++ .../formautofill/test/browser/head.js | 11 ++- 2 files changed, 97 insertions(+), 2 deletions(-) diff --git a/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js b/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js index f9dbbd38e6ca..2532a0bf44a5 100644 --- a/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js +++ b/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js @@ -162,3 +162,91 @@ add_task(async function test_submit_creditCard_saved_with_mp_enabled_but_cancele is(creditCards.length, 2, "Still 2 credit cards in storage"); LoginTestUtils.masterPassword.disable(); }); + +add_task(async function test_submit_creditCard_with_sync_account() { + await SpecialPowers.pushPrefEnv({ + "set": [ + [SYNC_USERNAME_PREF, "foo@bar.com"], + ], + }); + + await BrowserTestUtils.withNewTab({gBrowser, url: CREDITCARD_FORM_URL}, + async function(browser) { + let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, + "popupshown"); + await ContentTask.spawn(browser, null, async function() { + let form = content.document.getElementById("form"); + let name = form.querySelector("#cc-name"); + name.focus(); + name.setUserInput("User 2"); + + let number = form.querySelector("#cc-number"); + number.setUserInput("1234123412341234"); + + // Wait 500ms before submission to make sure the input value applied + await new Promise(resolve => setTimeout(resolve, 500)); + form.querySelector("input[type=submit]").click(); + }); + + await promiseShown; + let cb = getDoorhangerCheckbox(); + ok(!cb.hidden, "Sync checkbox should be visible"); + is(SpecialPowers.getBoolPref(SYNC_CREDITCARDS_PREF), false, + "creditCards sync should be disabled by default"); + + // Verify if the checkbox and button state is changed. + let secondaryButton = getDoorhangerButton(SECONDARY_BUTTON); + let menuButton = getDoorhangerButton(MENU_BUTTON); + is(cb.checked, false, "Checkbox state should match creditCards sync state"); + is(secondaryButton.disabled, false, "Not saving button should be enabled"); + is(menuButton.disabled, false, "Never saving menu button should be enabled"); + // Click the checkbox to enable credit card sync. + cb.click(); + is(SpecialPowers.getBoolPref(SYNC_CREDITCARDS_PREF), true, + "creditCards sync should be enabled after checked"); + is(secondaryButton.disabled, true, "Not saving button should be disabled"); + is(menuButton.disabled, true, "Never saving menu button should be disabled"); + // Click the checkbox again to disable credit card sync. + cb.click(); + is(SpecialPowers.getBoolPref(SYNC_CREDITCARDS_PREF), false, + "creditCards sync should be disabled after unchecked"); + is(secondaryButton.disabled, false, "Not saving button should be enabled again"); + is(menuButton.disabled, false, "Never saving menu button should be enabled again"); + await clickDoorhangerButton(MAIN_BUTTON); + } + ); +}); + +add_task(async function test_submit_creditCard_with_synced_already() { + await SpecialPowers.pushPrefEnv({ + "set": [ + [SYNC_CREDITCARDS_PREF, true], + [SYNC_USERNAME_PREF, "foo@bar.com"], + ], + }); + + await BrowserTestUtils.withNewTab({gBrowser, url: CREDITCARD_FORM_URL}, + async function(browser) { + let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, + "popupshown"); + await ContentTask.spawn(browser, null, async function() { + let form = content.document.getElementById("form"); + let name = form.querySelector("#cc-name"); + name.focus(); + name.setUserInput("User 2"); + + let number = form.querySelector("#cc-number"); + number.setUserInput("1234123412341234"); + + // Wait 500ms before submission to make sure the input value applied + await new Promise(resolve => setTimeout(resolve, 500)); + form.querySelector("input[type=submit]").click(); + }); + + await promiseShown; + let cb = getDoorhangerCheckbox(); + ok(cb.hidden, "Sync checkbox should be hidden"); + await clickDoorhangerButton(MAIN_BUTTON); + } + ); +}); diff --git a/browser/extensions/formautofill/test/browser/head.js b/browser/extensions/formautofill/test/browser/head.js index a52c57e3369c..05640563f92a 100644 --- a/browser/extensions/formautofill/test/browser/head.js +++ b/browser/extensions/formautofill/test/browser/head.js @@ -2,10 +2,11 @@ BASE_URL, TEST_ADDRESS_1, TEST_ADDRESS_2, TEST_ADDRESS_3, TEST_ADDRESS_4, TEST_ADDRESS_5, TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2, TEST_CREDIT_CARD_3, FORM_URL, CREDITCARD_FORM_URL, FTU_PREF, ENABLED_AUTOFILL_ADDRESSES_PREF, AUTOFILL_CREDITCARDS_AVAILABLE_PREF, ENABLED_AUTOFILL_CREDITCARDS_PREF, - SYNC_USERNAME_PREF, SYNC_ADDRESSES_PREF, + SYNC_USERNAME_PREF, SYNC_ADDRESSES_PREF, SYNC_CREDITCARDS_PREF, sleep, expectPopupOpen, openPopupOn, expectPopupClose, closePopup, clickDoorhangerButton, getAddresses, saveAddress, removeAddresses, saveCreditCard, - getDisplayedPopupItems, getDoorhangerCheckbox, waitForMasterPasswordDialog */ + getDisplayedPopupItems, getDoorhangerCheckbox, waitForMasterPasswordDialog, + getNotification, getDoorhangerButton */ "use strict"; @@ -25,6 +26,7 @@ const AUTOFILL_CREDITCARDS_AVAILABLE_PREF = "extensions.formautofill.creditCards const ENABLED_AUTOFILL_CREDITCARDS_PREF = "extensions.formautofill.creditCards.enabled"; const SYNC_USERNAME_PREF = "services.sync.username"; const SYNC_ADDRESSES_PREF = "services.sync.engine.addresses"; +const SYNC_CREDITCARDS_PREF = "services.sync.engine.creditcards"; const TEST_ADDRESS_1 = { "given-name": "John", @@ -248,10 +250,15 @@ async function clickDoorhangerButton(button, index) { await popuphidden; } + function getDoorhangerCheckbox() { return getNotification().checkbox; } +function getDoorhangerButton(button) { + return getNotification()[button]; +} + // Wait for the master password dialog to popup and enter the password to log in // if "login" is "true" or dismiss it directly if otherwise. From 6926e373961eb2d49094fd5504dae06341c5d57c Mon Sep 17 00:00:00 2001 From: steveck-chung Date: Thu, 26 Oct 2017 14:19:48 +0800 Subject: [PATCH 28/69] Bug 1395028 - Part 3: Hide the sync checkbox if credit card sync is unavailable. r=lchang MozReview-Commit-ID: KOdNkwdzWDN --HG-- extra : rebase_source : 1aaade752f7cadebd2ff1d720b3c46a777aba17e --- .../formautofill/FormAutofillDoorhanger.jsm | 8 +++- .../browser/browser_creditCard_doorhanger.js | 38 +++++++++++++++++++ .../formautofill/test/browser/head.js | 3 +- 3 files changed, 46 insertions(+), 3 deletions(-) diff --git a/browser/extensions/formautofill/FormAutofillDoorhanger.jsm b/browser/extensions/formautofill/FormAutofillDoorhanger.jsm index b959bd0e1eae..07cefdcf2f1c 100644 --- a/browser/extensions/formautofill/FormAutofillDoorhanger.jsm +++ b/browser/extensions/formautofill/FormAutofillDoorhanger.jsm @@ -128,10 +128,14 @@ const CONTENT = { return Services.prefs.getBoolPref("services.sync.engine.creditcards"); }, get label() { - // Only set the label when sync account is set and credit card sync is disabled, + // Only set the label when the fallowing conditions existed: + // - sync account is set + // - credit card sync is disabled + // - credit card sync is available // otherwise return null label to hide checkbox. return Services.prefs.prefHasUserValue("services.sync.username") && - !Services.prefs.getBoolPref("services.sync.engine.creditcards") ? + !Services.prefs.getBoolPref("services.sync.engine.creditcards") && + Services.prefs.getBoolPref("services.sync.engine.creditcards.available") ? GetStringFromName("creditCardsSyncCheckbox") : null; }, callback(event) { diff --git a/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js b/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js index 2532a0bf44a5..b32cbd8ddbfb 100644 --- a/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js +++ b/browser/extensions/formautofill/test/browser/browser_creditCard_doorhanger.js @@ -163,10 +163,47 @@ add_task(async function test_submit_creditCard_saved_with_mp_enabled_but_cancele LoginTestUtils.masterPassword.disable(); }); +add_task(async function test_submit_creditCard_unavailable_with_sync_account() { + await SpecialPowers.pushPrefEnv({ + "set": [ + [SYNC_USERNAME_PREF, "foo@bar.com"], + ], + }); + + await BrowserTestUtils.withNewTab({gBrowser, url: CREDITCARD_FORM_URL}, + async function(browser) { + let promiseShown = BrowserTestUtils.waitForEvent(PopupNotifications.panel, + "popupshown"); + is(SpecialPowers.getBoolPref(SYNC_CREDITCARDS_AVAILABLE_PREF), false, + "creditCards sync should be unavailable by default"); + await ContentTask.spawn(browser, null, async function() { + let form = content.document.getElementById("form"); + let name = form.querySelector("#cc-name"); + name.focus(); + name.setUserInput("User 2"); + + let number = form.querySelector("#cc-number"); + number.setUserInput("1234123412341234"); + + // Wait 500ms before submission to make sure the input value applied + await new Promise(resolve => setTimeout(resolve, 500)); + form.querySelector("input[type=submit]").click(); + }); + + await promiseShown; + let cb = getDoorhangerCheckbox(); + ok(cb.hidden, "Sync checkbox should be hidden"); + + await clickDoorhangerButton(SECONDARY_BUTTON); + } + ); +}); + add_task(async function test_submit_creditCard_with_sync_account() { await SpecialPowers.pushPrefEnv({ "set": [ [SYNC_USERNAME_PREF, "foo@bar.com"], + [SYNC_CREDITCARDS_AVAILABLE_PREF, true], ], }); @@ -222,6 +259,7 @@ add_task(async function test_submit_creditCard_with_synced_already() { "set": [ [SYNC_CREDITCARDS_PREF, true], [SYNC_USERNAME_PREF, "foo@bar.com"], + [SYNC_CREDITCARDS_AVAILABLE_PREF, true], ], }); diff --git a/browser/extensions/formautofill/test/browser/head.js b/browser/extensions/formautofill/test/browser/head.js index 05640563f92a..0331761574c2 100644 --- a/browser/extensions/formautofill/test/browser/head.js +++ b/browser/extensions/formautofill/test/browser/head.js @@ -2,7 +2,7 @@ BASE_URL, TEST_ADDRESS_1, TEST_ADDRESS_2, TEST_ADDRESS_3, TEST_ADDRESS_4, TEST_ADDRESS_5, TEST_CREDIT_CARD_1, TEST_CREDIT_CARD_2, TEST_CREDIT_CARD_3, FORM_URL, CREDITCARD_FORM_URL, FTU_PREF, ENABLED_AUTOFILL_ADDRESSES_PREF, AUTOFILL_CREDITCARDS_AVAILABLE_PREF, ENABLED_AUTOFILL_CREDITCARDS_PREF, - SYNC_USERNAME_PREF, SYNC_ADDRESSES_PREF, SYNC_CREDITCARDS_PREF, + SYNC_USERNAME_PREF, SYNC_ADDRESSES_PREF, SYNC_CREDITCARDS_PREF, SYNC_CREDITCARDS_AVAILABLE_PREF, sleep, expectPopupOpen, openPopupOn, expectPopupClose, closePopup, clickDoorhangerButton, getAddresses, saveAddress, removeAddresses, saveCreditCard, getDisplayedPopupItems, getDoorhangerCheckbox, waitForMasterPasswordDialog, @@ -27,6 +27,7 @@ const ENABLED_AUTOFILL_CREDITCARDS_PREF = "extensions.formautofill.creditCards.e const SYNC_USERNAME_PREF = "services.sync.username"; const SYNC_ADDRESSES_PREF = "services.sync.engine.addresses"; const SYNC_CREDITCARDS_PREF = "services.sync.engine.creditcards"; +const SYNC_CREDITCARDS_AVAILABLE_PREF = "services.sync.engine.creditcards.available"; const TEST_ADDRESS_1 = { "given-name": "John", From 029ecbb951e65ddfe4a4b241d67714b75fba9169 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Thu, 26 Oct 2017 05:17:39 -0500 Subject: [PATCH 29/69] servo: Merge #19023 - style: Remove PresentationalHintsSynthesizer (from emilio:remove-pres-hints-trait); r=KiChjang This is not really an useful abstraction, and I never knew how to spell it. Source-Repo: https://github.com/servo/servo Source-Revision: b2867c0afa8bc728c13ddfd56678170dfba98967 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : 0cc73981a77aa96cd0ce3486fc82e1f106f37496 --- servo/components/layout_thread/dom_wrapper.rs | 34 ++++++++----------- .../script_layout_interface/wrapper_traits.rs | 14 +++++--- servo/components/style/dom.rs | 21 ++++++------ servo/components/style/gecko/wrapper.rs | 33 ++++++++---------- 4 files changed, 48 insertions(+), 54 deletions(-) diff --git a/servo/components/layout_thread/dom_wrapper.rs b/servo/components/layout_thread/dom_wrapper.rs index 899c47b47478..fdf93bf66b8d 100644 --- a/servo/components/layout_thread/dom_wrapper.rs +++ b/servo/components/layout_thread/dom_wrapper.rs @@ -69,7 +69,7 @@ use style::computed_values::display; use style::context::SharedStyleContext; use style::data::ElementData; use style::dom::{DomChildren, LayoutIterator, NodeInfo, OpaqueNode}; -use style::dom::{PresentationalHintsSynthesizer, TElement, TNode}; +use style::dom::{TElement, TNode}; use style::element_state::*; use style::font_metrics::ServoMetricsProvider; use style::properties::{ComputedValues, PropertyDeclarationBlock}; @@ -338,18 +338,6 @@ impl<'le> fmt::Debug for ServoLayoutElement<'le> { } } -impl<'le> PresentationalHintsSynthesizer for ServoLayoutElement<'le> { - fn synthesize_presentational_hints_for_legacy_attributes(&self, - _visited_handling: VisitedHandlingMode, - hints: &mut V) - where V: Push - { - unsafe { - self.element.synthesize_presentational_hints_for_legacy_attributes(hints); - } - } -} - impl<'le> TElement for ServoLayoutElement<'le> { type ConcreteNode = ServoLayoutNode<'le>; type TraversalChildrenIterator = DomChildren; @@ -520,6 +508,19 @@ impl<'le> TElement for ServoLayoutElement<'le> { // FIXME(emilio): We should be able to give the right answer though! false } + + fn synthesize_presentational_hints_for_legacy_attributes( + &self, + _visited_handling: VisitedHandlingMode, + hints: &mut V, + ) + where + V: Push, + { + unsafe { + self.element.synthesize_presentational_hints_for_legacy_attributes(hints); + } + } } impl<'le> PartialEq for ServoLayoutElement<'le> { @@ -1245,10 +1246,3 @@ impl<'le> ::selectors::Element for ServoThreadSafeLayoutElement<'le> { false } } - -impl<'le> PresentationalHintsSynthesizer for ServoThreadSafeLayoutElement<'le> { - fn synthesize_presentational_hints_for_legacy_attributes(&self, - _visited_handling: VisitedHandlingMode, - _hints: &mut V) - where V: Push {} -} diff --git a/servo/components/script_layout_interface/wrapper_traits.rs b/servo/components/script_layout_interface/wrapper_traits.rs index c33e2479734c..d18da7b4f01f 100644 --- a/servo/components/script_layout_interface/wrapper_traits.rs +++ b/servo/components/script_layout_interface/wrapper_traits.rs @@ -20,7 +20,7 @@ use style::attr::AttrValue; use style::computed_values::display; use style::context::SharedStyleContext; use style::data::ElementData; -use style::dom::{LayoutIterator, NodeInfo, PresentationalHintsSynthesizer, TNode}; +use style::dom::{LayoutIterator, NodeInfo, TNode}; use style::dom::OpaqueNode; use style::font_metrics::ServoMetricsProvider; use style::properties::{CascadeFlags, ComputedValues}; @@ -290,10 +290,14 @@ pub trait DangerousThreadSafeLayoutNode: ThreadSafeLayoutNode { unsafe fn dangerous_next_sibling(&self) -> Option; } -pub trait ThreadSafeLayoutElement: Clone + Copy + Sized + Debug + - ::selectors::Element + - GetLayoutData + - PresentationalHintsSynthesizer { +pub trait ThreadSafeLayoutElement + : Clone + + Copy + + Sized + + Debug + + ::selectors::Element + + GetLayoutData +{ type ConcreteThreadSafeLayoutNode: ThreadSafeLayoutNode; fn as_node(&self) -> Self::ConcreteThreadSafeLayoutNode; diff --git a/servo/components/style/dom.rs b/servo/components/style/dom.rs index 38d75a1eedbd..a9a8897a087e 100644 --- a/servo/components/style/dom.rs +++ b/servo/components/style/dom.rs @@ -311,16 +311,6 @@ fn fmt_subtree(f: &mut fmt::Formatter, stringify: &F, n: N, indent: Ok(()) } -/// A trait used to synthesize presentational hints for HTML element attributes. -pub trait PresentationalHintsSynthesizer { - /// Generate the proper applicable declarations due to presentational hints, - /// and insert them into `hints`. - fn synthesize_presentational_hints_for_legacy_attributes(&self, - visited_handling: VisitedHandlingMode, - hints: &mut V) - where V: Push; -} - /// The element trait, the main abstraction the style crate acts over. pub trait TElement : Eq @@ -331,7 +321,6 @@ pub trait TElement + Copy + Clone + SelectorsElement - + PresentationalHintsSynthesizer { /// The concrete node type. type ConcreteNode: TNode; @@ -808,6 +797,16 @@ pub trait TElement /// Returns whether this element is the main body element of the HTML /// document it is on. fn is_html_document_body_element(&self) -> bool; + + /// Generate the proper applicable declarations due to presentational hints, + /// and insert them into `hints`. + fn synthesize_presentational_hints_for_legacy_attributes( + &self, + visited_handling: VisitedHandlingMode, + hints: &mut V, + ) + where + V: Push; } /// TNode and TElement aren't Send because we want to be careful and explicit diff --git a/servo/components/style/gecko/wrapper.rs b/servo/components/style/gecko/wrapper.rs index 9cdcdba9de4f..5f7a6ca97195 100644 --- a/servo/components/style/gecko/wrapper.rs +++ b/servo/components/style/gecko/wrapper.rs @@ -20,8 +20,7 @@ use applicable_declarations::ApplicableDeclarationBlock; use atomic_refcell::{AtomicRefCell, AtomicRef, AtomicRefMut}; use context::{QuirksMode, SharedStyleContext, PostAnimationTasks, UpdateAnimationsTasks}; use data::ElementData; -use dom::{LayoutIterator, NodeInfo, TElement, TNode}; -use dom::{OpaqueNode, PresentationalHintsSynthesizer}; +use dom::{LayoutIterator, NodeInfo, OpaqueNode, TElement, TNode}; use element_state::{ElementState, DocumentState, NS_DOCUMENT_STATE_WINDOW_INACTIVE}; use error_reporting::ParseErrorReporter; use font_metrics::{FontMetrics, FontMetricsProvider, FontMetricsQueryResult}; @@ -1526,23 +1525,7 @@ impl<'le> TElement for GeckoElement<'le> { unsafe { bindings::Gecko_IsDocumentBody(self.0) } } -} -impl<'le> PartialEq for GeckoElement<'le> { - fn eq(&self, other: &Self) -> bool { - self.0 as *const _ == other.0 as *const _ - } -} - -impl<'le> Eq for GeckoElement<'le> {} - -impl<'le> Hash for GeckoElement<'le> { - fn hash(&self, state: &mut H) { - (self.0 as *const _).hash(state); - } -} - -impl<'le> PresentationalHintsSynthesizer for GeckoElement<'le> { fn synthesize_presentational_hints_for_legacy_attributes( &self, visited_handling: VisitedHandlingMode, @@ -1690,6 +1673,20 @@ impl<'le> PresentationalHintsSynthesizer for GeckoElement<'le> { } } +impl<'le> PartialEq for GeckoElement<'le> { + fn eq(&self, other: &Self) -> bool { + self.0 as *const _ == other.0 as *const _ + } +} + +impl<'le> Eq for GeckoElement<'le> {} + +impl<'le> Hash for GeckoElement<'le> { + fn hash(&self, state: &mut H) { + (self.0 as *const _).hash(state); + } +} + impl<'le> ::selectors::Element for GeckoElement<'le> { type Impl = SelectorImpl; From 8b45fa1364624c952c464f64b1febc41407849a6 Mon Sep 17 00:00:00 2001 From: Ionut Goldan Date: Tue, 24 Oct 2017 14:20:01 +0300 Subject: [PATCH 30/69] Bug 1399800 - integrate pytest and add initial tests r=jmaher MozReview-Commit-ID: FNQwCEtM1MB --HG-- rename : testing/talos/tests/__init__.py => testing/talos/talos/unittests/__init__.py rename : testing/talos/tests/browser_output.ts.txt => testing/talos/talos/unittests/browser_output.ts.txt rename : testing/talos/tests/browser_output.tsvg.txt => testing/talos/talos/unittests/browser_output.tsvg.txt rename : testing/talos/tests/profile.tgz => testing/talos/talos/unittests/profile.tgz rename : testing/talos/tests/ps-Acj.out => testing/talos/talos/unittests/ps-Acj.out rename : testing/talos/tests/test_talosconfig_browser_config.json => testing/talos/talos/unittests/test_talosconfig_browser_config.json rename : testing/talos/tests/test_talosconfig_test_config.json => testing/talos/talos/unittests/test_talosconfig_test_config.json rename : testing/talos/tests/xrestop_output.txt => testing/talos/talos/unittests/xrestop_output.txt extra : rebase_source : 4048d8ef8f7b9352968115fb7125182b5e4e2907 --- build/virtualenv_packages.txt | 1 + moz.build | 1 + testing/talos/talos/filter.py | 61 +- testing/talos/talos/test.py | 2 + .../{tests => talos/unittests}/__init__.py | 0 .../unittests}/browser_output.ts.txt | 0 .../unittests}/browser_output.tsvg.txt | 0 testing/talos/talos/unittests/conftest.py | 17 + .../{tests => talos/unittests}/profile.tgz | Bin .../{tests => talos/unittests}/ps-Acj.out | 0 testing/talos/talos/unittests/python.ini | 6 + .../talos/talos/unittests/test_cmanager.py | 0 .../talos/unittests/test_cmanager_base.py | 0 .../talos/unittests/test_cmanager_linux.py | 0 .../talos/unittests/test_cmanager_mac.py | 0 .../talos/unittests/test_cmanger_win32.py | 0 testing/talos/talos/unittests/test_cmdline.py | 0 testing/talos/talos/unittests/test_config.py | 1169 +++++++++++++++++ testing/talos/talos/unittests/test_ffsetup.py | 90 ++ .../talos/unittests/test_gecko_profile.py | 0 .../talos/unittests/test_mainthreadio.py | 0 .../unittests/test_mitmproxy/__init__.py | 0 testing/talos/talos/unittests/test_output.py | 0 .../unittests/test_pageloader/__init__.py | 0 .../talos/unittests/test_profiler/__init__.py | 0 .../talos/talos/unittests/test_run_tests.py | 0 .../talos/unittests/test_scripts/__init__.py | 0 .../unittests/test_startup_test/__init__.py | 0 .../unittests/test_talos_powers/__init__.py | 0 .../talos/unittests/test_talos_process.py | 0 .../test_talosconfig_browser_config.json | 0 .../test_talosconfig_test_config.json | 0 testing/talos/talos/unittests/test_test.py | 206 +++ .../talos/unittests/test_tests/__init__.py | 0 testing/talos/talos/unittests/test_ttest.py | 0 .../talos/talos/unittests/test_whitelist.py | 0 .../talos/unittests/test_xtalos/__init__.py | 0 .../unittests}/xrestop_output.txt | 0 testing/talos/tests/test_browser_output.py | 192 --- testing/talos/tests/test_filter.py | 81 -- testing/talos/tests/test_heavy.py | 163 --- testing/talos/tests/test_results.py | 82 -- testing/talos/tests/test_talosconfig.py | 158 --- testing/talos/tests/test_urlsplit.py | 56 - testing/talos/tests/test_utils.py | 43 - testing/talos/tests/test_xrestop.py | 66 - 46 files changed, 1552 insertions(+), 842 deletions(-) rename testing/talos/{tests => talos/unittests}/__init__.py (100%) rename testing/talos/{tests => talos/unittests}/browser_output.ts.txt (100%) rename testing/talos/{tests => talos/unittests}/browser_output.tsvg.txt (100%) create mode 100644 testing/talos/talos/unittests/conftest.py rename testing/talos/{tests => talos/unittests}/profile.tgz (100%) rename testing/talos/{tests => talos/unittests}/ps-Acj.out (100%) create mode 100644 testing/talos/talos/unittests/python.ini create mode 100644 testing/talos/talos/unittests/test_cmanager.py create mode 100644 testing/talos/talos/unittests/test_cmanager_base.py create mode 100644 testing/talos/talos/unittests/test_cmanager_linux.py create mode 100644 testing/talos/talos/unittests/test_cmanager_mac.py create mode 100644 testing/talos/talos/unittests/test_cmanger_win32.py create mode 100644 testing/talos/talos/unittests/test_cmdline.py create mode 100644 testing/talos/talos/unittests/test_config.py create mode 100644 testing/talos/talos/unittests/test_ffsetup.py create mode 100644 testing/talos/talos/unittests/test_gecko_profile.py create mode 100644 testing/talos/talos/unittests/test_mainthreadio.py create mode 100644 testing/talos/talos/unittests/test_mitmproxy/__init__.py create mode 100644 testing/talos/talos/unittests/test_output.py create mode 100644 testing/talos/talos/unittests/test_pageloader/__init__.py create mode 100644 testing/talos/talos/unittests/test_profiler/__init__.py create mode 100644 testing/talos/talos/unittests/test_run_tests.py create mode 100644 testing/talos/talos/unittests/test_scripts/__init__.py create mode 100644 testing/talos/talos/unittests/test_startup_test/__init__.py create mode 100644 testing/talos/talos/unittests/test_talos_powers/__init__.py create mode 100644 testing/talos/talos/unittests/test_talos_process.py rename testing/talos/{tests => talos/unittests}/test_talosconfig_browser_config.json (100%) rename testing/talos/{tests => talos/unittests}/test_talosconfig_test_config.json (100%) create mode 100644 testing/talos/talos/unittests/test_test.py create mode 100644 testing/talos/talos/unittests/test_tests/__init__.py create mode 100644 testing/talos/talos/unittests/test_ttest.py create mode 100644 testing/talos/talos/unittests/test_whitelist.py create mode 100644 testing/talos/talos/unittests/test_xtalos/__init__.py rename testing/talos/{tests => talos/unittests}/xrestop_output.txt (100%) delete mode 100644 testing/talos/tests/test_browser_output.py delete mode 100755 testing/talos/tests/test_filter.py delete mode 100644 testing/talos/tests/test_heavy.py delete mode 100755 testing/talos/tests/test_results.py delete mode 100644 testing/talos/tests/test_talosconfig.py delete mode 100755 testing/talos/tests/test_urlsplit.py delete mode 100644 testing/talos/tests/test_utils.py delete mode 100755 testing/talos/tests/test_xrestop.py diff --git a/build/virtualenv_packages.txt b/build/virtualenv_packages.txt index 506875f2338f..c02a7da6d27f 100644 --- a/build/virtualenv_packages.txt +++ b/build/virtualenv_packages.txt @@ -42,6 +42,7 @@ mozilla.pth:testing/marionette/client mozilla.pth:testing/marionette/harness mozilla.pth:testing/marionette/harness/marionette_harness/runner/mixins/browsermob-proxy-py mozilla.pth:testing/marionette/puppeteer/firefox +mozilla.pth:testing/talos packages.txt:testing/mozbase/packages.txt mozilla.pth:tools mozilla.pth:testing/web-platform diff --git a/moz.build b/moz.build index 5bbaea6dfd9d..a89c8794f91d 100644 --- a/moz.build +++ b/moz.build @@ -85,6 +85,7 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] or not CONFIG['MOZ_BUILD_APP']: 'layout/tools/reftest/selftest/python.ini', 'testing/marionette/harness/marionette_harness/tests/harness_unit/python.ini', 'testing/mochitest/tests/python/python.ini', + 'testing/talos/talos/unittests/python.ini' ] CONFIGURE_SUBST_FILES += [ diff --git a/testing/talos/talos/filter.py b/testing/talos/talos/filter.py index 2880ac711dee..7e3ea2caab90 100644 --- a/testing/talos/talos/filter.py +++ b/testing/talos/talos/filter.py @@ -18,6 +18,8 @@ Each filter is a simple function, but it also have attached a special # data is filtered """ +_FILTERS = {} + class Filter(object): def __init__(self, func, *args, **kwargs): @@ -45,9 +47,54 @@ def define_filter(func): func.prepare = prepare return func + +def register_filter(func): + """ + all filters defined in this module + should be registered + """ + global _FILTERS + + _FILTERS[func.__name__] = func + return func + + +def filters(*args): + global _FILTERS + + filters_ = [_FILTERS[filter] for filter in args] + return filters_ + + +def apply(data, filters): + for filter in filters: + data = filter(data) + + return data + + +def parse(string_): + + def to_number(string_number): + try: + return int(string_number) + except ValueError: + return float(string_number) + + tokens = string_.split(":") + + func = tokens[0] + digits = [] + if len(tokens) > 1: + digits.extend(tokens[1].split(",")) + digits = [to_number(digit) for digit in digits] + + return [func, digits] + + # filters that return a scalar - +@register_filter @define_filter def mean(series): """ @@ -56,6 +103,7 @@ def mean(series): return sum(series)/float(len(series)) +@register_filter @define_filter def median(series): """ @@ -71,6 +119,7 @@ def median(series): return 0.5*(series[middle-1] + series[middle]) +@register_filter @define_filter def variance(series): """ @@ -82,6 +131,7 @@ def variance(series): return variance +@register_filter @define_filter def stddev(series): """ @@ -90,6 +140,7 @@ def stddev(series): return variance(series)**0.5 +@register_filter @define_filter def dromaeo(series): """ @@ -106,12 +157,14 @@ def dromaeo(series): return geometric_mean(means) +@register_filter @define_filter def dromaeo_chunks(series, size): for i in range(0, len(series), size): yield series[i:i+size] +@register_filter @define_filter def geometric_mean(series): """ @@ -125,6 +178,7 @@ def geometric_mean(series): # filters that return a list +@register_filter @define_filter def ignore_first(series, number=1): """ @@ -136,6 +190,7 @@ def ignore_first(series, number=1): return series[number:] +@register_filter @define_filter def ignore(series, function): """ @@ -150,6 +205,7 @@ def ignore(series, function): return series +@register_filter @define_filter def ignore_max(series): """ @@ -158,6 +214,7 @@ def ignore_max(series): return ignore(series, max) +@register_filter @define_filter def ignore_min(series): """ @@ -166,6 +223,7 @@ def ignore_min(series): return ignore(series, min) +@register_filter @define_filter def v8_subtest(series, name): """ @@ -190,6 +248,7 @@ def v8_subtest(series, name): return reference[name] / geometric_mean(series) +@register_filter @define_filter def responsiveness_Metric(val_list): return sum([float(x)*float(x) / 1000000.0 for x in val_list]) diff --git a/testing/talos/talos/test.py b/testing/talos/talos/test.py index 99648b603650..e93a24d04a55 100644 --- a/testing/talos/talos/test.py +++ b/testing/talos/talos/test.py @@ -29,6 +29,8 @@ def test_dict(): class Test(object): """abstract base class for a Talos test case""" + __test__ = False # not pytest + cycles = None # number of cycles keys = [] desktop = True diff --git a/testing/talos/tests/__init__.py b/testing/talos/talos/unittests/__init__.py similarity index 100% rename from testing/talos/tests/__init__.py rename to testing/talos/talos/unittests/__init__.py diff --git a/testing/talos/tests/browser_output.ts.txt b/testing/talos/talos/unittests/browser_output.ts.txt similarity index 100% rename from testing/talos/tests/browser_output.ts.txt rename to testing/talos/talos/unittests/browser_output.ts.txt diff --git a/testing/talos/tests/browser_output.tsvg.txt b/testing/talos/talos/unittests/browser_output.tsvg.txt similarity index 100% rename from testing/talos/tests/browser_output.tsvg.txt rename to testing/talos/talos/unittests/browser_output.tsvg.txt diff --git a/testing/talos/talos/unittests/conftest.py b/testing/talos/talos/unittests/conftest.py new file mode 100644 index 000000000000..c012037412a1 --- /dev/null +++ b/testing/talos/talos/unittests/conftest.py @@ -0,0 +1,17 @@ +import os + +import pytest + +here = os.path.realpath(__file__) +__TESTS_DIR = os.path.join(os.path.dirname(os.path.dirname(here)), 'tests') + + +def remove_develop_files(starting_dir=__TESTS_DIR): + for file_name in os.listdir(starting_dir): + + file_path = os.path.join(starting_dir, file_name) + + if file_name.endswith('.develop') and os.path.isfile(file_path): + os.remove(file_path) + elif os.path.isdir(file_path): + remove_develop_files(file_path) diff --git a/testing/talos/tests/profile.tgz b/testing/talos/talos/unittests/profile.tgz similarity index 100% rename from testing/talos/tests/profile.tgz rename to testing/talos/talos/unittests/profile.tgz diff --git a/testing/talos/tests/ps-Acj.out b/testing/talos/talos/unittests/ps-Acj.out similarity index 100% rename from testing/talos/tests/ps-Acj.out rename to testing/talos/talos/unittests/ps-Acj.out diff --git a/testing/talos/talos/unittests/python.ini b/testing/talos/talos/unittests/python.ini new file mode 100644 index 000000000000..5bfc864d7810 --- /dev/null +++ b/testing/talos/talos/unittests/python.ini @@ -0,0 +1,6 @@ +[DEFAULT] +subsuite = talos + +[test_config.py] +[test_ffsetup.py] +[test_test.py] diff --git a/testing/talos/talos/unittests/test_cmanager.py b/testing/talos/talos/unittests/test_cmanager.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_cmanager_base.py b/testing/talos/talos/unittests/test_cmanager_base.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_cmanager_linux.py b/testing/talos/talos/unittests/test_cmanager_linux.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_cmanager_mac.py b/testing/talos/talos/unittests/test_cmanager_mac.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_cmanger_win32.py b/testing/talos/talos/unittests/test_cmanger_win32.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_cmdline.py b/testing/talos/talos/unittests/test_cmdline.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_config.py b/testing/talos/talos/unittests/test_config.py new file mode 100644 index 000000000000..33a2fb6b44ca --- /dev/null +++ b/testing/talos/talos/unittests/test_config.py @@ -0,0 +1,1169 @@ +# test config['xperf_path'] doens't have double quotes +# test config['webserver'] has free port +from __future__ import absolute_import + +import copy +import os + +import mock + +import mozunit +import pytest +import conftest + +from talos.config import ( + get_active_tests, get_test, get_config, get_browser_config, + get_configs, ConfigurationError, DEFAULTS) +from talos.test import PageloaderTest +from talos import utils + +ORIGINAL_DEFAULTS = copy.deepcopy(DEFAULTS) + + +class mock_test(PageloaderTest): + keys = ['tpmanifest', 'tpcycles', 'tppagecycles', 'tprender', 'tpchrome', + 'tpmozafterpaint', 'fnbpaint', 'tploadnocache', 'firstpaint', 'userready', + 'testeventmap', 'base_vs_ref', 'mainthread', 'resolution', 'cycles', + 'gecko_profile', 'gecko_profile_interval', 'gecko_profile_entries', + 'tptimeout', 'win_counters', 'w7_counters', 'linux_counters', 'mac_counters', + 'tpscrolltest', 'xperf_counters', 'timeout', 'shutdown', 'responsiveness', + 'profile_path', 'xperf_providers', 'xperf_user_providers', 'xperf_stackwalk', + 'format_pagename', 'filters', 'preferences', 'extensions', 'setup', 'cleanup', + 'lower_is_better', 'alert_threshold', 'unit', 'webextensions', 'profile', + 'tpmozafterpaint', 'url'] + + tpmozafterpaint = 'value' + firstpaint = 'value' + userready = 'value' + fnbpaint = 'value' + + +class Test_get_active_tests(object): + def test_raises_exception_for_undefined_test(self): + with pytest.raises(ConfigurationError): + get_active_tests({'activeTests': 'undefined_test'}) + + with pytest.raises(ConfigurationError): + get_active_tests({'activeTests': ' undefined_test '}) + + with pytest.raises(ConfigurationError): + get_active_tests({'activeTests': 'undef_test:undef_test2:undef_test3'}) + + +class Test_get_test(object): + global_overrides = { + 'tpmozafterpaint': 'overriden', + 'firstpaint': 'overriden', + 'userready': 'overriden', + 'fnbpaint': 'overriden' + } + + config = {'webserver': 'test_webserver'} + + def test_doesnt_override_specific_keys_unless_they_are_null(self): + test_instance = mock_test() + test_dict = get_test({}, self.global_overrides, [], test_instance) + + assert test_dict['tpmozafterpaint'] == 'value' + assert test_dict['firstpaint'] == 'value' + assert test_dict['userready'] == 'value' + assert test_dict['fnbpaint'] == 'value' + + # nulls still get overriden + test_instance = mock_test(tpmozafterpaint=None, firstpaint=None, userready=None, fnbpaint=None) + test_dict = get_test({}, self.global_overrides, [], test_instance) + + assert test_dict['tpmozafterpaint'] == 'overriden' + assert test_dict['firstpaint'] == 'overriden' + assert test_dict['userready'] == 'overriden' + assert test_dict['fnbpaint'] == 'overriden' + + @mock.patch('talos.config.open', create=True) + def test_interpolate_keys(self, mock_open): + mock_open.return_value = mock.MagicMock(readlines=lambda: []) + + test_instance = mock_test(url='${talos}/test_page.html', + tpmanifest='${talos}/file.manifest') + + + test_dict = get_test(self.config, self.global_overrides, [], test_instance) + assert test_dict['url'].startswith('http://test_webserver/') + assert '${talos}' not in test_dict['url'] + assert '${talos}' not in test_dict['tpmanifest'] + + def test_build_tpmanifest(self, tmpdir): + manifest_file = tmpdir.join('file.manifest').ensure(file=True) + test_instance = mock_test(url='test_page.html', + tpmanifest=str(manifest_file)) + + test_dict = get_test(self.config, self.global_overrides, [], test_instance) + assert test_dict['tpmanifest'].endswith('.develop') + + def test_add_counters(self): + test_instance = mock_test(linux_counters=None, mac_counters=[], win_counters=['counter_a'], + w7_counters=['counter_a', 'counter_b'], xperf_counters=['counter_a', 'counter_extra']) + + counters = ['counter_a', 'counter_b', 'counter_c'] + test_dict = get_test( + self.config, self.global_overrides, counters, test_instance) + + assert test_dict['linux_counters'] == counters + assert test_dict['mac_counters'] == counters + assert test_dict['win_counters'] == counters + assert test_dict['w7_counters'] == counters + assert set(test_dict['xperf_counters']) == set(counters + ['counter_extra']) + + +class Test_get_browser_config(object): + required = ('preferences', 'extensions', 'browser_path', 'browser_wait', + 'extra_args', 'buildid', 'env', 'init_url', 'webserver') + optional = list({'bcontroller_config': '${talos}/bcontroller.json', + 'branch_name': '', + 'child_process': 'plugin-container', + 'develop': False, + 'e10s': False, + 'process': '', + 'framework': 'talos', + 'repository': None, + 'sourcestamp': None, + 'symbols_path': None, + 'test_timeout': 1200, + 'xperf_path': None, + 'error_filename': None, + 'no_upload_results': False, + 'enable_stylo': False, + 'disable_stylo': False, + 'stylothreads': 0, + 'subtests': None, + }.keys()) + + def test_that_contains_title(self): + config_no_optionals = dict.fromkeys(self.required, '') + config_no_optionals.update(title='is_mandatory') + + browser_config = get_browser_config(config_no_optionals) + assert browser_config['title'] == 'is_mandatory' + + def test_raises_keyerror_for_missing_title(self): + config_missing_title = dict.fromkeys(self.required, '') + + with pytest.raises(KeyError): + get_browser_config(config_missing_title) + + def test_raises_keyerror_for_required_keys(self): + config_missing_required = dict.fromkeys(self.required, '') + config_missing_required.update(title= 'is_mandatory') + del config_missing_required['preferences'] + + with pytest.raises(KeyError): + get_browser_config(config_missing_required) + + def test_doesnt_raise_on_missing_optionals(self): + config_missing_optionals = dict.fromkeys(self.required, '') + config_missing_optionals['title'] = 'is_mandatory' + + try: + get_browser_config(config_missing_optionals) + except KeyError: + pytest.fail('Must not raise exception on missing optional') + + def test_browser_keys_are_subset_from_config(self): + config_extensive = dict.fromkeys(self.required, '') + config_extensive.update(dict.fromkeys(self.optional, '')) + config_extensive['title'] = 'is_mandatory' + config_extensive['extra_custom_key'] = 'value' + + browser_config = get_browser_config(config_extensive) + assert browser_config != config_extensive + assert set(browser_config.keys()).issubset(set(config_extensive.keys())) + + +class Test_get_config(object): + @classmethod + def setup_class(cls): + cls.argv = '--suite other-e10s --mainthread -e /some/random/path'.split() + cls.argv_unprovided_tests = '-e /some/random/path'.split() + cls.argv_unknown_suite = '--suite random-unknown-suite -e /some/random/path'.split() + cls.argv_overrides_defaults = ''' + --suite other-e10s + --executablePath /some/random/path + --cycles 20 + --geckoProfile + --geckoProfileInterval 1000 + --geckoProfileEntries 1000 + --mainthread + --tpcycles 20 + --mozAfterPaint + --firstPaint + --firstNonBlankPaint + --userReady + --tppagecycles 20 + '''.split() + + cls.argv_ts_paint = '--activeTests ts_paint -e /some/random/path'.split() + cls.argv_ts_paint_webext = '--activeTests ts_paint_webext -e /some/random/path'.split() + cls.argv_ts_paint_heavy = '--activeTests ts_paint_heavy -e /some/random/path'.split() + cls.argv_sessionrestore = '--activeTests sessionrestore -e /some/random/path'.split() + cls.argv_sessionrestore_no_auto_restore = ''' + --activeTests sessionrestore_no_auto_restore + -e /some/random/path + '''.split() + cls.argv_sessionrestore_many_windows = ''' + --activeTests sessionrestore_many_windows + -e /some/random/path + '''.split() + cls.argv_tresize = '--activeTests tresize -e /some/random/path'.split() + cls.argv_tpaint = '--activeTests tpaint -e /some/random/path'.split() + cls.argv_cpstartup = '--activeTests cpstartup -e /some/random/path'.split() + cls.argv_tabpaint = '--activeTests tabpaint -e /some/random/path'.split() + cls.argv_tps = '--activeTests tps -e /some/random/path'.split() + cls.argv_tart = '--activeTests tart -e /some/random/path'.split() + cls.argv_cart = '--activeTests cart -e /some/random/path'.split() + cls.argv_damp = '--activeTests damp -e /some/random/path'.split() + cls.argv_glterrain = '--activeTests glterrain -e /some/random/path'.split() + cls.argv_glvideo = '--activeTests glvideo -e /some/random/path'.split() + cls.argv_tp5n = '--activeTests tp5n -e /some/random/path'.split() + cls.argv_tp5o = '--activeTests tp5o -e /some/random/path'.split() + cls.argv_tp5o_webext = '--activeTests tp5o_webext -e /some/random/path'.split() + cls.argv_tp5o_scroll = '--activeTests tp5o_scroll -e /some/random/path'.split() + cls.argv_v8_7 = '--activeTests v8_7 -e /some/random/path'.split() + cls.argv_kraken = '--activeTests kraken -e /some/random/path'.split() + cls.argv_basic_compositor_video = '--activeTests basic_compositor_video -e /some/random/path'.split() + cls.argv_tcanvasmark = '--activeTests tcanvasmark -e /some/random/path'.split() + cls.argv_dromaeo_css = '--activeTests dromaeo_css -e /some/random/path'.split() + cls.argv_dromaeo_dom = '--activeTests dromaeo_dom -e /some/random/path'.split() + cls.argv_tsvgm = '--activeTests tsvgm -e /some/random/path'.split() + cls.argv_tsvgx = '--activeTests tsvgx -e /some/random/path'.split() + cls.argv_tsvg_static = '--activeTests tsvg_static -e /some/random/path'.split() + cls.argv_tsvgr_opacity = '--activeTests tsvgr_opacity -e /some/random/path'.split() + cls.argv_tscrollx = '--activeTests tscrollx -e /some/random/path'.split() + cls.argv_a11yr = '--activeTests a11yr -e /some/random/path'.split() + cls.argv_speedometer = '--activeTests speedometer -e /some/random/path'.split() + cls.argv_perf_reftest = '--activeTests perf_reftest -e /some/random/path'.split() + cls.argv_perf_reftest_singletons = '--activeTests perf_reftest_singletons -e /some/random/path'.split() + cls.argv_quantum_pageload_google = '--activeTests quantum_pageload_google -e /some/random/path'.split() + cls.argv_quantum_pageload_youtube = '--activeTests quantum_pageload_youtube -e /some/random/path'.split() + cls.argv_quantum_pageload_amazon = '--activeTests quantum_pageload_amazon -e /some/random/path'.split() + cls.argv_quantum_pageload_facebook = '--activeTests quantum_pageload_facebook -e /some/random/path'.split() + cls.argv_tp6_google = '--activeTests tp6_google -e /some/random/path'.split() + cls.argv_tp6_google_heavy = '--activeTests tp6_google_heavy -e /some/random/path'.split() + cls.argv_tp6_youtube = '--activeTests tp6_youtube -e /some/random/path'.split() + cls.argv_tp6_youtube_heavy = '--activeTests tp6_youtube_heavy -e /some/random/path'.split() + cls.argv_tp6_amazon = '--activeTests tp6_amazon -e /some/random/path'.split() + cls.argv_tp6_amazon_heavy = '--activeTests tp6_amazon_heavy -e /some/random/path'.split() + cls.argv_tp6_facebook = '--activeTests tp6_facebook -e /some/random/path'.split() + cls.argv_tp6_facebook_heavy = '--activeTests tp6_facebook_heavy -e /some/random/path'.split() + + @classmethod + def teardown_class(cls): + conftest.remove_develop_files() + + def test_correctly_overrides_test_valus(self): + config = get_config(self.argv) + assert bool(config) is True + + # no null values + null_keys = [key for key, val in config.iteritems() if val is None] + assert len(null_keys) == 0 + + # expected keys are there + assert config['browser_path'] == '/some/random/path' + assert config['suite'] == 'other-e10s' + assert config['mainthread'] == True + + # default values overriden + config = get_config(self.argv_overrides_defaults) + assert config['basetest'] == ORIGINAL_DEFAULTS['basetest'] + + def test_config_has_tests(self): + config = get_config(self.argv) + assert len(config['tests']) > 0 + + def test_global_variable_isnt_modified(self): + get_config(self.argv) + assert ORIGINAL_DEFAULTS == DEFAULTS + + def test_raises_except_if_unprovided_tests_on_cli(self): + with pytest.raises(ConfigurationError): + get_config(self.argv_unprovided_tests) + + with pytest.raises(ConfigurationError): + get_config(self.argv_unknown_suite) + + def test_ts_paint_has_expected_attributes(self): + config = get_config(self.argv_ts_paint) + test_config = config['tests'][0] + + assert test_config['name'] == 'ts_paint' + assert test_config['cycles'] == 20 + assert test_config['timeout'] == 150 + assert test_config['gecko_profile_startup'] is True + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['url'] != 'startup_test/tspaint_test.html' # interpolation was done + assert test_config['shutdown'] is False + assert test_config['xperf_counters'] == [] + # TODO: these don't work; is this a bug? + # assert test_config['win7_counters'] == [] + assert test_config['filters'] is not None + assert test_config['tpmozafterpaint'] is True + # assert test_config['mainthread'] is False + # assert test_config['responsiveness'] is False + # assert test_config['unit'] == 'ms' + + def test_ts_paint_webext_has_expected_attributes(self): + config = get_config(self.argv_ts_paint_webext) + test_config = config['tests'][0] + + assert test_config['name'] == 'ts_paint_webext' + assert test_config['cycles'] == 20 + assert test_config['timeout'] == 150 + assert test_config['gecko_profile_startup'] is True + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['url'] != 'startup_test/tspaint_test.html' # interpolation was done + assert test_config['shutdown'] is False + assert test_config['xperf_counters'] == [] + # TODO: these don't work; is this a bug? + # assert test_config['win7_counters'] == [] + assert test_config['filters'] is not None + assert test_config['tpmozafterpaint'] is True + # assert test_config['mainthread'] is False + # assert test_config['responsiveness'] is False + # assert test_config['unit'] == 'ms' + # TODO: this isn't overriden + # assert test_config['webextensions'] != '${talos}/webextensions/dummy/dummy-signed.xpi' + assert test_config['preferences'] == {'xpinstall.signatures.required': False} + + def test_ts_paint_heavy_has_expected_attributes(self): + config = get_config(self.argv_ts_paint_heavy) + test_config = config['tests'][0] + + assert test_config['name'] == 'ts_paint_heavy' + assert test_config['cycles'] == 20 + assert test_config['timeout'] == 150 + assert test_config['gecko_profile_startup'] is True + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['url'] != 'startup_test/tspaint_test.html' # interpolation was done + assert test_config['shutdown'] is False + assert test_config['xperf_counters'] == [] + # TODO: this doesn't work; is this a bug? + # assert test_config['win7_counters'] == [] + assert test_config['filters'] is not None + assert test_config['tpmozafterpaint'] is True + # assert test_config['mainthread'] is False + # assert test_config['responsiveness'] is False + # assert test_config['unit'] == 'ms' + assert test_config['profile'] == 'simple' + + def test_sessionrestore_has_expected_attributes(self): + config = get_config(self.argv_sessionrestore) + test_config = config['tests'][0] + + assert test_config['name'] == 'sessionrestore' + assert test_config['cycles'] == 10 + assert test_config['timeout'] == 900 + assert test_config['gecko_profile_startup'] is True + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['shutdown'] is False + assert test_config['reinstall'] == ['sessionstore.jsonlz4', 'sessionstore.js', 'sessionCheckpoints.json'] + assert test_config['url'] == 'about:home' + assert test_config['preferences'] == {'browser.startup.page': 3} + # assert test_config['unit'] == 'ms' + + def test_sesssionrestore_no_auto_restore_has_expected_attributes(self): + config = get_config(self.argv_sessionrestore_no_auto_restore) + test_config = config['tests'][0] + + assert test_config['name'] == 'sessionrestore_no_auto_restore' + assert test_config['cycles'] == 10 + assert test_config['timeout'] == 900 + assert test_config['gecko_profile_startup'] is True + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['shutdown'] is False + assert test_config['reinstall'] == ['sessionstore.jsonlz4', 'sessionstore.js', 'sessionCheckpoints.json'] + assert test_config['url'] == 'about:home' + assert test_config['preferences'] == {'browser.startup.page': 1} + # assert test_config['unit'] == 'ms' + + def test_sessionrestore_many_windows_has_expected_attributes(self): + config = get_config(self.argv_sessionrestore_many_windows) + test_config = config['tests'][0] + + assert test_config['name'] == 'sessionrestore_many_windows' + assert test_config['cycles'] == 10 + assert test_config['timeout'] == 900 + assert test_config['gecko_profile_startup'] is True + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['shutdown'] is False + assert test_config['reinstall'] == ['sessionstore.jsonlz4', 'sessionstore.js', 'sessionCheckpoints.json'] + assert test_config['url'] == 'about:home' + assert test_config['preferences'] == {'browser.startup.page': 3} + # assert test_config['unit'] == 'ms' + + def test_tresize_has_expected_attributes(self): + config = get_config(self.argv_tresize) + test_config = config['tests'][0] + + assert test_config['name'] == 'tresize' + assert test_config['cycles'] == 20 + assert test_config['url'] != 'startup_test/tresize/addon/content/tresize-test.html' + assert test_config['timeout'] == 150 + assert test_config['gecko_profile_interval'] == 2 + assert test_config['gecko_profile_entries'] == 1000000 + assert test_config['tpmozafterpaint'] is True + assert test_config['filters'] is not None + # assert test_config['unit'] == 'ms' + + def test_tpaint_has_expected_attributes(self): + config = get_config(self.argv_tpaint) + test_config = config['tests'][0] + + assert test_config['name'] == 'tpaint' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 20 + assert test_config['timeout'] == 300 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['tpmozafterpaint'] is True + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['preferences'] == {'security.data_uri.block_toplevel_data_uri_navigations': False} + + def test_cpstartup_has_expected_attributes(self): + config = get_config(self.argv_cpstartup) + test_config = config['tests'][0] + + assert test_config['name'] == 'cpstartup' + assert test_config['tpcycles'] == 1 + assert test_config['tpmanifest'] != '${talos}/tests/cpstartup/cpstartup.manifest' + assert test_config['tppagecycles'] == 20 + assert test_config['gecko_profile_entries'] == 1000000 + assert test_config['tploadnocache'] is True + assert test_config['unit'] == 'ms' + assert test_config['preferences'] == { + 'browser.link.open_newwindow': 3, + 'browser.link.open_newwindow.restriction': 2, + } + + def test_tabpaint_has_expected_attributes(self): + config = get_config(self.argv_tabpaint) + test_config = config['tests'][0] + + assert test_config['name'] == 'tabpaint' + assert test_config['tpcycles'] == 1 + assert test_config['tpmanifest'] != '${talos}/tests/tabpaint/tabpaint.manifest' + assert test_config['tppagecycles'] == 20 + assert test_config['gecko_profile_entries'] == 1000000 + assert test_config['tploadnocache'] is True + assert test_config['unit'] == 'ms' + assert test_config['preferences'] == { + 'browser.link.open_newwindow': 3, + 'browser.link.open_newwindow.restriction': 2, + } + + def test_tps_has_expected_attributes(self): + config = get_config(self.argv_tps) + test_config = config['tests'][0] + + assert test_config['name'] == 'tps' + assert test_config['tpcycles'] == 1 + assert test_config['tpmanifest'] != '${talos}/tests/tabswitch/tps.manifest' + assert test_config['tppagecycles'] == 5 + assert test_config['gecko_profile_entries'] == 5000000 + assert test_config['tploadnocache'] is True + assert test_config['preferences'] == { + 'addon.test.tabswitch.urlfile': os.path.join('${talos}', + 'tests', + 'tp5o.html'), + 'addon.test.tabswitch.webserver': '${webserver}', + 'addon.test.tabswitch.maxurls': -1, + } + assert test_config['unit'] == 'ms' + + def test_tart_has_expected_attributes(self): + config = get_config(self.argv_tart) + test_config = config['tests'][0] + + assert test_config['name'] == 'tart' + assert test_config['tpmanifest'] != '${talos}/tests/tart/tart.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tploadnocache'] is True + assert test_config['tpmozafterpaint'] is False + assert test_config['gecko_profile_interval'] == 10 + assert test_config['gecko_profile_entries'] == 1000000 + assert 'win_counters' not in test_config + assert 'w7_counters' not in test_config + assert 'linux_counters' not in test_config + assert 'mac_counters' not in test_config + assert test_config['preferences'] == { + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'dom.send_after_paint_to_content': False + } + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_cart_has_expected_attributes(self): + config = get_config(self.argv_cart) + test_config = config['tests'][0] + + assert test_config['name'] == 'cart' + assert test_config['tpmanifest'] != '${talos}/tests/tart/cart.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tploadnocache'] is True + assert test_config['tpmozafterpaint'] is False + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 10000000 + assert 'win_counters' not in test_config + assert 'w7_counters' not in test_config + assert 'linux_counters' not in test_config + assert 'mac_counters' not in test_config + assert test_config['preferences'] == { + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'dom.send_after_paint_to_content': False + } + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_damp_has_expected_attributes(self): + config = get_config(self.argv_damp) + test_config = config['tests'][0] + + assert test_config['name'] == 'damp' + assert test_config['tpmanifest'] != '${talos}/tests/devtools/damp.manifest' + assert test_config['cycles'] == 5 + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 5 + assert test_config['tploadnocache'] is True + assert test_config['tpmozafterpaint'] is False + assert test_config['gecko_profile_interval'] == 10 + assert test_config['gecko_profile_entries'] == 1000000 + assert 'win_counters' not in test_config + assert 'w7_counters' not in test_config + assert 'linux_counters' not in test_config + assert 'mac_counters' not in test_config + assert test_config['filters'] is not None + assert test_config['preferences'] == { + 'devtools.memory.enabled': True, + 'addon.test.damp.webserver': '${webserver}' + } + assert test_config['unit'] == 'ms' + + def test_glterrain_has_expected_attributes(self): + config = get_config(self.argv_glterrain) + test_config = config['tests'][0] + + assert test_config['name'] == 'glterrain' + assert test_config['tpmanifest'] != '${talos}/tests/webgl/glterrain.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tploadnocache'] is True + assert test_config['tpmozafterpaint'] is False + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 10 + assert test_config['gecko_profile_entries'] == 2000000 + assert 'win_counters' not in test_config + assert 'w7_counters' not in test_config + assert 'linux_counters' not in test_config + assert 'mac_counters' not in test_config + assert test_config['preferences'] == { + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'dom.send_after_paint_to_content': False + } + assert test_config['filters'] is not None + assert test_config['unit'] == 'frame interval' + + def test_glvideo_has_expected_attributes(self): + config = get_config(self.argv_glvideo) + test_config = config['tests'][0] + + assert test_config['name'] == 'glvideo' + assert test_config['tpmanifest'] != '${talos}/tests/webgl/glvideo.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 5 + assert test_config['tploadnocache'] is True + assert test_config['tpmozafterpaint'] is False + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 2 + assert test_config['gecko_profile_entries'] == 2000000 + assert 'win_counters' not in test_config + assert 'w7_counters' not in test_config + assert 'linux_counters' not in test_config + assert 'mac_counters' not in test_config + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_tp5n_has_expected_attributes(self): + config = get_config(self.argv_tp5n) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp5n' + assert test_config['resolution'] == 20 + assert test_config['shutdown'] is False + assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5n.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 1 + assert test_config['cycles'] == 1 + assert test_config['tpmozafterpaint'] is True + assert test_config['tptimeout'] == 5000 + assert test_config['mainthread'] is True + assert test_config['w7_counters'] == [] + assert test_config['win_counters'] == [] + assert test_config['linux_counters'] == [] + assert test_config['mac_counters'] == [] + assert test_config['xperf_counters'] == [ + 'main_startup_fileio', 'main_startup_netio', + 'main_normal_fileio', 'main_normal_netio', + 'nonmain_startup_fileio', 'nonmain_normal_fileio', + 'nonmain_normal_netio', 'mainthread_readcount', + 'mainthread_readbytes', 'mainthread_writecount', + 'mainthread_writebytes' + ] + assert test_config['xperf_providers'] == [ + 'PROC_THREAD', 'LOADER', 'HARD_FAULTS', 'FILENAME', + 'FILE_IO', 'FILE_IO_INIT' + ] + assert test_config['xperf_user_providers'] == [ + 'Mozilla Generic Provider', + 'Microsoft-Windows-TCPIP' + ] + assert test_config['xperf_stackwalk'] == [ + 'FileCreate', 'FileRead', 'FileWrite', 'FileFlush', + 'FileClose' + ] + assert test_config['filters'] is not None + assert test_config['timeout'] == 1800 + assert test_config['preferences'] == { + 'extensions.enabledScopes': '', + 'talos.logfile': 'browser_output.txt' + } + assert test_config['unit'] == 'ms' + + def test_tp5o_has_expected_attributes(self): + config = get_config(self.argv_tp5o) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp5o' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['cycles'] == 1 + assert test_config['tpmozafterpaint'] is True + assert test_config['tptimeout'] == 5000 + assert test_config['mainthread'] is False + assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5o.manifest' + assert test_config['win_counters'] == ['% Processor Time'] + assert test_config['w7_counters'] == ['% Processor Time'] + assert test_config['linux_counters'] == ['XRes'] + assert test_config['mac_counters'] == [] + assert test_config['responsiveness'] is True + assert test_config['gecko_profile_interval'] == 2 + assert test_config['gecko_profile_entries'] == 4000000 + assert test_config['filters'] is not None + assert test_config['timeout'] == 1800 + assert test_config['unit'] == 'ms' + + def test_tp5o_webext_has_expected_attributes(self): + config = get_config(self.argv_tp5o_webext) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp5o_webext' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['cycles'] == 1 + assert test_config['tpmozafterpaint'] is True + assert test_config['tptimeout'] == 5000 + assert test_config['mainthread'] is False + assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5o.manifest' + assert test_config['win_counters'] == ['% Processor Time'] + assert test_config['w7_counters'] == ['% Processor Time'] + assert test_config['linux_counters'] == ['XRes'] + assert test_config['mac_counters'] == [] + assert test_config['responsiveness'] is True + assert test_config['gecko_profile_interval'] == 2 + assert test_config['gecko_profile_entries'] == 4000000 + assert test_config['filters'] is not None + assert test_config['timeout'] == 1800 + assert test_config['unit'] == 'ms' + assert test_config['webextensions'] == '${talos}/webextensions/dummy/dummy-signed.xpi' + assert test_config['preferences'] == {'xpinstall.signatures.required': False} + + def test_tp5o_scroll_has_expected_attributes(self): + config = get_config(self.argv_tp5o_scroll) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp5o_scroll' + assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5o.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 12 + assert test_config['gecko_profile_interval'] == 2 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['tpscrolltest'] is True + assert test_config['tpmozafterpaint'] is False + assert test_config['preferences'] == { + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'dom.send_after_paint_to_content': False, + 'layout.css.scroll-behavior.spring-constant': "'10'", + 'toolkit.framesRecording.bufferSize': 10000 + } + assert test_config['filters'] is not None + assert test_config['unit'] == '1/FPS' + + def test_v8_7_has_expected_attributes(self): + config = get_config(self.argv_v8_7) + test_config = config['tests'][0] + + assert test_config['name'] == 'v8_7' + assert test_config['tpmanifest'] != '${talos}/tests/v8_7/v8.manifest' + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 1000000 + assert test_config['tpcycles'] == 1 + assert test_config['resolution'] == 20 + assert test_config['tpmozafterpaint'] is False + assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} + assert test_config['filters'] is not None + assert test_config['unit'] == 'score' + assert test_config['lower_is_better'] is False + + def test_kraken_has_expected_attributes(self): + config = get_config(self.argv_kraken) + test_config = config['tests'][0] + + assert test_config['name'] == 'kraken' + assert test_config['tpmanifest'] != '${talos}/tests/kraken/kraken.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 1 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 5000000 + assert test_config['tpmozafterpaint'] is False + assert test_config['tpchrome'] is False + assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} + assert test_config['filters'] is not None + assert test_config['unit'] == 'score' + + def test_basic_compositor_video_has_expected_attributes(self): + config = get_config(self.argv_basic_compositor_video) + test_config = config['tests'][0] + + assert test_config['name'] == 'basic_compositor_video' + assert test_config['tpmanifest'] != '${talos}/tests/video/video.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 12 + assert test_config['tpchrome'] is False + assert test_config['timeout'] == 10000 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['preferences'] == { + 'full-screen-api.allow-trusted-requests-only': False, + 'layers.acceleration.force-enabled': False, + 'layers.acceleration.disabled': True, + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'full-screen-api.warning.timeout': 500, + 'media.ruin-av-sync.enabled': True + } + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms/frame' + assert test_config['lower_is_better'] is True + + def test_tcanvasmark_has_expected_attributes(self): + config = get_config(self.argv_tcanvasmark) + test_config = config['tests'][0] + + assert test_config['name'] == 'tcanvasmark' + assert test_config['tpmanifest'] != '${talos}/tests/canvasmark/canvasmark.manifest' + assert 'win_counters' not in test_config + assert 'w7_counters' not in test_config + assert 'linux_counters' not in test_config + assert 'mac_counters' not in test_config + assert test_config['tpcycles'] == 5 + assert test_config['tppagecycles'] == 1 + assert test_config['timeout'] == 900 + assert test_config['gecko_profile_interval'] == 10 + assert test_config['gecko_profile_entries'] == 2500000 + assert test_config['tpmozafterpaint'] is False + assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} + assert test_config['filters'] is not None + assert test_config['unit'] == 'score' + assert test_config['lower_is_better'] is False + + def test_dromaeo_css_has_expected_attributes(self): + config = get_config(self.argv_dromaeo_css) + test_config = config['tests'][0] + + assert test_config['name'] == 'dromaeo_css' + assert test_config['tpcycles'] == 1 + assert test_config['filters'] is not None + assert test_config['lower_is_better'] is False + assert test_config['alert_threshold'] == 5.0 + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 2 + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['tpmanifest'] != '${talos}/tests/dromaeo/css.manifest' + assert test_config['unit'] == 'score' + + def test_dromaeo_dom_has_expected_attributes(self): + config = get_config(self.argv_dromaeo_dom) + test_config = config['tests'][0] + + assert test_config['name'] == 'dromaeo_dom' + assert test_config['tpcycles'] == 1 + assert test_config['filters'] is not None + assert test_config['lower_is_better'] is False + assert test_config['alert_threshold'] == 5.0 + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 2 + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['tpmanifest'] != '${talos}/tests/dromaeo/dom.manifest' + assert test_config['unit'] == 'score' + + def test_tsvgm_has_expected_attributes(self): + config = get_config(self.argv_tsvgm) + test_config = config['tests'][0] + + assert test_config['name'] == 'tsvgm' + assert test_config['tpmanifest'] != '${talos}/tests/svgx/svgm.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 7 + assert test_config['tpmozafterpaint'] is False + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 10 + assert test_config['gecko_profile_entries'] == 1000000 + assert test_config['preferences'] == { + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'dom.send_after_paint_to_content': False + } + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_tsvgx_has_expected_attributes(self): + config = get_config(self.argv_tsvgx) + test_config = config['tests'][0] + + assert test_config['name'] == 'tsvgx' + assert test_config['tpmanifest'] != '${talos}/tests/svgx/svgx.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tpmozafterpaint'] is False + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 10 + assert test_config['gecko_profile_entries'] == 1000000 + assert test_config['preferences'] == { + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'dom.send_after_paint_to_content': False + } + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_tsvg_static_has_expected_attributes(self): + config = get_config(self.argv_tsvg_static) + test_config = config['tests'][0] + + assert test_config['name'] == 'tsvg_static' + assert test_config['tpmanifest'] != '${talos}/tests/svg_static/svg_static.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tpmozafterpaint'] is True + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_tsvgr_opacity_has_expected_attributes(self): + config = get_config(self.argv_tsvgr_opacity) + test_config = config['tests'][0] + + assert test_config['name'] == 'tsvgr_opacity' + assert test_config['tpmanifest'] != '${talos}/tests/svg_opacity/svg_opacity.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tpmozafterpaint'] is True + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 10000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_tscrollx_has_expected_attributes(self): + config = get_config(self.argv_tscrollx) + test_config = config['tests'][0] + + assert test_config['name'] == 'tscrollx' + assert test_config['tpmanifest'] != '${talos}/tests/scroll/scroll.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tpmozafterpaint'] is False + assert test_config['tpchrome'] is False + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 1000000 + assert test_config['preferences'] == { + 'layout.frame_rate': 0, + 'docshell.event_starvation_delay_hint': 1, + 'dom.send_after_paint_to_content': False, + 'layout.css.scroll-behavior.spring-constant': "'10'", + 'toolkit.framesRecording.bufferSize': 10000 + } + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + + def test_a11yr_has_expect_attributes(self): + config = get_config(self.argv_a11yr) + test_config = config['tests'][0] + + assert test_config['name'] == 'a11yr' + assert test_config['tpmanifest'] != '${talos}/tests/a11y/a11y.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['tpmozafterpaint'] is True + assert test_config['tpchrome'] is False + assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} + assert test_config['unit'] == 'ms' + assert test_config['alert_threshold'] == 5.0 + + def test_speedometer_has_expected_attributes(self): + config = get_config(self.argv_speedometer) + test_config = config['tests'][0] + + assert test_config['name'] == 'speedometer' + assert test_config['tpmanifest'] != '${talos}/tests/speedometer/speedometer.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 5 + assert test_config['tpmozafterpaint'] is False + assert test_config['tpchrome'] is False + assert test_config['format_pagename'] is False + assert test_config['lower_is_better'] is False + assert test_config['unit'] == 'score' + + def test_perf_reftest_has_expected_attributes(self): + config = get_config(self.argv_perf_reftest) + test_config = config['tests'][0] + + assert test_config['name'] == 'perf_reftest' + assert test_config['base_vs_ref'] is True # compare the two test pages with eachother and report comparison + assert test_config['tpmanifest'] != '${talos}/tests/perf-reftest/perf_reftest.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 10 + assert test_config['tptimeout'] == 30000 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['alert_threshold'] == 5.0 + + def test_perf_reftest_singletons_has_expected_attributes(self): + config = get_config(self.argv_perf_reftest_singletons) + test_config = config['tests'][0] + + assert test_config['name'] == 'perf_reftest_singletons' + assert test_config['tpmanifest'] != '${talos}/tests/perf-reftest-singletons/perf_reftest_singletons.manifest' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 15 + assert test_config['tptimeout'] == 30000 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['alert_threshold'] == 5.0 + + def test_quantum_pageload_google_has_expected_attributes(self): + config = get_config(self.argv_quantum_pageload_google) + test_config = config['tests'][0] + + assert test_config['name'] == 'quantum_pageload_google' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_google.manifest' + + def test_quantum_pageload_youtube_has_expected_attributes(self): + config = get_config(self.argv_quantum_pageload_youtube) + test_config = config['tests'][0] + + assert test_config['name'] == 'quantum_pageload_youtube' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_youtube.manifest' + + def test_quantum_pageload_amazon_has_expected_attributes(self): + config = get_config(self.argv_quantum_pageload_amazon) + test_config = config['tests'][0] + + assert test_config['name'] == 'quantum_pageload_amazon' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_amazon.manifest' + + def test_quantum_pageload_facebook_has_expected_attributes(self): + config = get_config(self.argv_quantum_pageload_facebook) + test_config = config['tests'][0] + + assert test_config['name'] == 'quantum_pageload_facebook' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_facebook.manifest' + + def test_tp6_google_has_expected_attributes(self): + config = get_config(self.argv_tp6_google) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_google' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_google.manifest' + + def test_tp6_google_heavy_has_expected_attributes(self): + config = get_config(self.argv_tp6_google_heavy) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_google_heavy' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['profile'] == 'simple' + + def test_tp6_youtube_has_expected_attributes(self): + config = get_config(self.argv_tp6_youtube) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_youtube' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_youtube.manifest' + + def test_tp6_youtube_heavy_has_expected_attributes(self): + config = get_config(self.argv_tp6_youtube_heavy) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_youtube_heavy' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['profile'] == 'simple' + + def test_tp6_amazon_has_expected_attributes(self): + config = get_config(self.argv_tp6_amazon) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_amazon' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_amazon.manifest' + + def test_tp6_amazon_heavy_has_expected_attributes(self): + config = get_config(self.argv_tp6_amazon_heavy) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_amazon_heavy' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['profile'] == 'simple' + + def test_tp6_facebook_has_expected_attributes(self): + config = get_config(self.argv_tp6_facebook) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_facebook' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_facebook.manifest' + + def test_tp6_facebook_heavy_has_expected_attributes(self): + config = get_config(self.argv_tp6_facebook_heavy) + test_config = config['tests'][0] + + assert test_config['name'] == 'tp6_facebook_heavy' + assert test_config['tpcycles'] == 1 + assert test_config['tppagecycles'] == 25 + assert test_config['gecko_profile_interval'] == 1 + assert test_config['gecko_profile_entries'] == 2000000 + assert test_config['filters'] is not None + assert test_config['unit'] == 'ms' + assert test_config['lower_is_better'] is True + assert test_config['fnbpaint'] is True + assert test_config['profile'] == 'simple' + + +@mock.patch('talos.config.get_browser_config') +@mock.patch('talos.config.get_config') +def test_get_configs(get_config_mock, get_browser_config_mock): + # unpacks in right order + get_config_mock.return_value = 'first' + get_browser_config_mock.return_value = 'second' + + first, second = get_configs() + assert (first, second) == ('first', 'second') + + +if __name__ == '__main__': + mozunit.main() diff --git a/testing/talos/talos/unittests/test_ffsetup.py b/testing/talos/talos/unittests/test_ffsetup.py new file mode 100644 index 000000000000..67c5ddec5d91 --- /dev/null +++ b/testing/talos/talos/unittests/test_ffsetup.py @@ -0,0 +1,90 @@ +from __future__ import absolute_import + +import os + +import mock +import mozunit + +from talos.ffsetup import FFSetup + + +class TestFFSetup(object): + + def setup_method(self, method): + self.ffsetup = FFSetup( + { # browser_config + "env": {}, + "symbols_path": "", + "preferences": {}, + "webserver": "", + "extensions": [] + }, + { #test_config + "preferences": {}, + "extensions": [], + "profile": None + } + ) + + # setup proxy logger + + def test_clean(self): + # tmp dir removed + assert self.ffsetup._tmp_dir is not None + assert os.path.exists(self.ffsetup._tmp_dir) is True + + self.ffsetup.clean() + + assert self.ffsetup._tmp_dir is not None + assert os.path.exists(self.ffsetup._tmp_dir) is False + + # gecko profile also cleaned + gecko_profile = mock.Mock() + self.ffsetup.gecko_profile = gecko_profile + + self.ffsetup.clean() + + assert gecko_profile.clean.called is True + +# def test_as_context_manager(self): +# self.ffsetup._init_env = mock.Mock() +# self.ffsetup._init_profile = mock.Mock() +# self.ffsetup._run_profile = mock.Mock() +# self.ffsetup._init_gecko_profile = mock.Mock() +# +# with self.ffsetup as setup: +# # env initiated +# self.assertIsNotNone(setup.env) +# # profile initiated +# self.assertTrue(setup._init_profile.called) +# # gecko profile initiated +# +# # except raised +# pass +# +# def test_environment_init(self): +# # self.env not empty +# # browser_config env vars in self.env +# # multiple calls return same self.env +# pass +# +# def test_profile_init(self): +# # addons get installed +# # webextensions get installed +# # preferences contain interpolated values +# # profile path is added +# pass +# +# def test_run_profile(self): +# # exception raised +# # browser process launched +# pass +# +# def test_gecko_profile_init(self): +# # complains on not provided upload_dir +# # self.gecko_profile not None +# pass + + +if __name__ == '__main__': + mozunit.main() diff --git a/testing/talos/talos/unittests/test_gecko_profile.py b/testing/talos/talos/unittests/test_gecko_profile.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_mainthreadio.py b/testing/talos/talos/unittests/test_mainthreadio.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_mitmproxy/__init__.py b/testing/talos/talos/unittests/test_mitmproxy/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_output.py b/testing/talos/talos/unittests/test_output.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_pageloader/__init__.py b/testing/talos/talos/unittests/test_pageloader/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_profiler/__init__.py b/testing/talos/talos/unittests/test_profiler/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_run_tests.py b/testing/talos/talos/unittests/test_run_tests.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_scripts/__init__.py b/testing/talos/talos/unittests/test_scripts/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_startup_test/__init__.py b/testing/talos/talos/unittests/test_startup_test/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_talos_powers/__init__.py b/testing/talos/talos/unittests/test_talos_powers/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_talos_process.py b/testing/talos/talos/unittests/test_talos_process.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/tests/test_talosconfig_browser_config.json b/testing/talos/talos/unittests/test_talosconfig_browser_config.json similarity index 100% rename from testing/talos/tests/test_talosconfig_browser_config.json rename to testing/talos/talos/unittests/test_talosconfig_browser_config.json diff --git a/testing/talos/tests/test_talosconfig_test_config.json b/testing/talos/talos/unittests/test_talosconfig_test_config.json similarity index 100% rename from testing/talos/tests/test_talosconfig_test_config.json rename to testing/talos/talos/unittests/test_talosconfig_test_config.json diff --git a/testing/talos/talos/unittests/test_test.py b/testing/talos/talos/unittests/test_test.py new file mode 100644 index 000000000000..d92cba410778 --- /dev/null +++ b/testing/talos/talos/unittests/test_test.py @@ -0,0 +1,206 @@ +from __future__ import absolute_import + +import mozunit +import pytest + +from talos.test import Test, TsBase, ts_paint +from talos.test import register_test +from talos.test import test_dict + + +class BasicTestA(Test): + pass + + +class BasicTestB(Test): + pass + + +class BasicTestC(Test): + """basic description""" + keys = [ + 'nonnull_attrib', + 'null_attrib' + ] + + nonnull_attrib = 'value' + null_attrib = None + + +class NotATest(object): + pass + + +class Test_register_test(object): + + def test_same_instance_returned(self): + decorator = register_test() + NewBasicTest = decorator(BasicTestA) + + assert BasicTestA is NewBasicTest + + def test_class_registered(self): + _TESTS = test_dict() + decorator = register_test() + + # class registered + _ = decorator(BasicTestB) + assert 'BasicTestB' in _TESTS + assert BasicTestB in _TESTS.values() + + # cannot register same class + with pytest.raises(AssertionError): + _ = decorator(BasicTestB) + + # # cannot register other class type + with pytest.raises(AssertionError): + _ = decorator(NotATest) + + +class TestTest(object): + + def test_same_class_name(self): + assert BasicTestA.name() == 'BasicTestA' + + def test_class_doc(self): + assert BasicTestA.description() is not None + assert BasicTestC.description() == 'basic description' + + def test_init(self): + basic_test = BasicTestA(new_attrib_a='value_a', new_attrib_b='value_b') + assert basic_test.new_attrib_a == 'value_a' + assert basic_test.new_attrib_b == 'value_b' + + def test_update(self): + basic_test = BasicTestA() + basic_test.update(new_attrib_a='value_a', new_attrib_b='value_b') + + assert basic_test.new_attrib_a == 'value_a' + assert basic_test.new_attrib_b == 'value_b' + + basic_test.update(new_attrib_c='value_c') + assert basic_test.new_attrib_c == 'value_c' + + def test_items(self): + basic_test = BasicTestC() + + # returns iterable + try: + items = iter(basic_test.items()) + except TypeError: + pytest.fail('Test.items() did not return iterator') + + try: + key, val = basic_test.items()[0] + except ValueError: + pytest.fail('Test.items() did not contain tuples') + + # returns not nones + assert ('nonnull_attrib', 'value') in basic_test.items() + assert ('null_attrib', None) not in basic_test.items() + + # not overriden Test instance + test_instance = Test() + assert test_instance.items() == [('name', 'Test')] + + # overriden Test instance + test_instance = Test(unregistered_attr='value') + assert ('unregistered_attr', 'value') not in test_instance.items() + + test_instance = Test() + test_instance.update(keys=['cycles', 'desktop', 'lower_is_better']) + assert dict(test_instance.items()) == {'name': 'Test', 'desktop': True, 'lower_is_better': True} + + test_instance = Test() + test_instance.update(new_attrib='some') + assert ('new_attrib', 'some') not in test_instance.items() + + test_instance = Test() + test_instance.update(keys=['new_attrib'], new_attrib='value') + assert dict(test_instance.items()) == {'name': 'Test', 'new_attrib': 'value'} + + test_instance = Test(cycles=20, desktop=False) + assert test_instance.cycles == 20 + assert test_instance.desktop == False + + test_instance = Test() + test_instance.update(cycles=20, desktop=False) + assert test_instance.cycles == 20 + assert test_instance.desktop == False + + +class TestTsBase(object): + ts_base_registered_keys = { + 'url', + 'url_timestamp', + 'timeout', + 'cycles', + 'shutdown', + 'profile_path', + 'gecko_profile', + 'gecko_profile_interval', + 'gecko_profile_entries', + 'gecko_profile_startup', + 'preferences', + 'xperf_counters', + 'xperf_providers', + 'xperf_user_providers', + 'xperf_stackwalk', + 'tpmozafterpaint', + 'fnbpaint', + 'profile', + 'firstpaint', + 'userready', + 'testeventmap', + 'base_vs_ref', + 'extensions', + 'filters', + 'setup', + 'cleanup', + 'webextensions', + 'reinstall', + } + + def setup_method(self): + self.test_instance = TsBase() + + def test_no_unknown_keys_are_somehow_added_alongside_registered_ones(self): + assert set(self.test_instance.keys) == self.ts_base_registered_keys + + self.test_instance.update(attribute_one='value', attribute_two='value') + assert set(self.test_instance.keys) == self.ts_base_registered_keys + + def test_nonnull_keys_show_up(self): + assert dict(self.test_instance.items()) == { + 'name': 'TsBase', + 'filters': self.test_instance.filters + } + + self.test_instance.update(timeout=500) + assert dict(self.test_instance.items()) == { + 'name': 'TsBase', + 'filters': self.test_instance.filters, + 'timeout': 500 + } + + +class Test_ts_paint(object): + def test_test_nonnull_keys_show_up(self): + test_instance = ts_paint() + keys = {key for key, _ in test_instance.items()} + assert keys == { + 'name', + 'cycles', + 'timeout', + 'gecko_profile_startup', + 'gecko_profile_entries', + 'url', + 'shutdown', + 'xperf_counters', + 'filters', + 'tpmozafterpaint' + } + + +if __name__ == '__main__': + mozunit.main() diff --git a/testing/talos/talos/unittests/test_tests/__init__.py b/testing/talos/talos/unittests/test_tests/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_ttest.py b/testing/talos/talos/unittests/test_ttest.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_whitelist.py b/testing/talos/talos/unittests/test_whitelist.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/talos/unittests/test_xtalos/__init__.py b/testing/talos/talos/unittests/test_xtalos/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/testing/talos/tests/xrestop_output.txt b/testing/talos/talos/unittests/xrestop_output.txt similarity index 100% rename from testing/talos/tests/xrestop_output.txt rename to testing/talos/talos/unittests/xrestop_output.txt diff --git a/testing/talos/tests/test_browser_output.py b/testing/talos/tests/test_browser_output.py deleted file mode 100644 index a030fc2db09c..000000000000 --- a/testing/talos/tests/test_browser_output.py +++ /dev/null @@ -1,192 +0,0 @@ -#!/usr/bin/env python - -""" -test talos browser output parsing -""" -from __future__ import absolute_import - -import os -import unittest - -from talos.results import BrowserLogResults -from talos.results import PageloaderResults -from talos.utils import TalosError - -here = os.path.dirname(os.path.abspath(__file__)) - - -class TestBrowserOutput(unittest.TestCase): - - def test_ts_format(self): - - # output file - browser_ts = os.path.join(here, 'browser_output.ts.txt') - - # parse the results - browser_log = BrowserLogResults(browser_ts) - - # ensure the results meet what we expect - self.assertEqual(browser_log.format, 'tsformat') - self.assertEqual(browser_log.browser_results.strip(), '392') - self.assertEqual(browser_log.startTime, 1333663595953) - self.assertEqual(browser_log.endTime, 1333663596551) - - def test_tsvg_format(self): - - # output file - browser_tsvg = os.path.join(here, 'browser_output.tsvg.txt') - - # parse the results - browser_log = BrowserLogResults(browser_tsvg) - - # ensure the results meet what we expect - self.assertEqual(browser_log.format, 'tpformat') - self.assertEqual(browser_log.startTime, 1333666702130) - self.assertEqual(browser_log.endTime, 1333666702743) - - # we won't validate the exact string because it is long - raw_report = browser_log.browser_results.strip() - raw_report.startswith('_x_x_mozilla_page_load') - raw_report.endswith('|11;hixie-007.xml;1629;1651;1648;1652;1649') - - # but we will ensure that it is parseable - pageloader_results = PageloaderResults(raw_report) - self.assertEqual(len(pageloader_results.results), 12) - indices = [i['index'] for i in pageloader_results.results] - self.assertEqual(indices, range(12)) - - # test hixie-001.xml just as a spot-check - hixie_001 = pageloader_results.results[5] - expected_values = [45643, 14976, 17807, 14971, 17235] - self.assertEqual(hixie_001['runs'], expected_values) - self.assertEqual(hixie_001['page'], 'hixie-001.xml') - - def test_garbage(self): - """ - send in garbage input and ensure the output is the - inability to find the report - """ - - garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" - self.compare_error_message(garbage, "Could not find report") - - def test_missing_end_report(self): - """what if you're not done with a report?""" - garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" - - input = self.start_report() - input += garbage - self.compare_error_message(input, "Could not find end token: '__end_report'") - - def test_double_end_report(self): - """double end report tokens""" - - garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" - input = self.start_report() + garbage + self.end_report() + self.end_report() - self.compare_error_message(input, "Unmatched number of tokens") - - def test_end_report_before_start_report(self): - """the end report token occurs before the start report token""" - - garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" - input = self.end_report() + garbage + self.start_report() - self.compare_error_message(input, - "End token '%s' occurs before start token" % - self.end_report()) - - def test_missing_timestamps(self): - """what if the timestamps are missing?""" - - # make a bogus report but missing the timestamps - garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" - input = self.start_report() + garbage + self.end_report() - - # it will fail - self.compare_error_message(input, "Could not find startTime in browser output") - - def test_wrong_order(self): - """what happens if you mix up the token order?""" - - # i've secretly put the AfterTerminationTimestamp before - # the BeforeLaunchTimestamp - # Let's see if the parser notices - bad_report = """__start_report392__end_report - -Failed to load native module at path '/home/jhammel/firefox/components/libmozgnome.so': -(80004005) libnotify.so.1: cannot open shared object file: No such file or directory -Could not read chrome manifest -'file:///home/jhammel/firefox/extensions/%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D/chrome.manifest'. -[JavaScript Warning: "Use of enablePrivilege is deprecated. -Please use code that runs with the system principal (e.g. an extension) instead. -" {file: "http://localhost:15707/startup_test/startup_test.html?begin=1333663595557" line: 0}] -__startTimestamp1333663595953__endTimestamp -__startAfterTerminationTimestamp1333663596551__endAfterTerminationTimestamp -__startBeforeLaunchTimestamp1333663595557__endBeforeLaunchTimestamp -""" - - self.compare_error_message(bad_report, "] found before " + - "('__startBeforeLaunchTimestamp', " + - "'__endBeforeLaunchTimestamp') " + - "[character position:") - - def test_multiple_reports(self): - """you're only allowed to have one report in a file""" - - # this one works fine - good_report = """__start_report392__end_report - -Failed to load native module at path '/home/jhammel/firefox/components/libmozgnome.so': -(80004005) libnotify.so.1: cannot open shared object file: No such file or directory -Could not read chrome manifest -'file:///home/jhammel/firefox/extensions/%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D/chrome.manifest'. -[JavaScript Warning: "Use of enablePrivilege is deprecated. -Please use code that runs with the system principal (e.g. an extension) instead. -" {file: "http://localhost:15707/startup_test/startup_test.html?begin=1333663595557" line: 0}] -__startTimestamp1333663595953__endTimestamp -__startBeforeLaunchTimestamp1333663595557__endBeforeLaunchTimestamp -__startAfterTerminationTimestamp1333663596551__endAfterTerminationTimestamp -""" - - # but there's no hope for this one - bad_report = good_report + good_report # interesting math - - self.compare_error_message(bad_report, "Multiple matches for %s,%s" % - (self.start_report(), self.end_report())) - - def start_report(self): - """return a start report token""" - return BrowserLogResults.report_tokens[0][1][0] # start token - - def end_report(self): - """return a start report token""" - return BrowserLogResults.report_tokens[0][1][-1] # end token - - def compare_error_message(self, browser_log, substr): - """ - ensures that exceptions give correct error messages - - browser_log : a browser log file - - substr : substring of the error message - """ - - try: - BrowserLogResults(results_raw=browser_log) - except TalosError as e: - if substr not in str(e): - import pdb - pdb.set_trace() - self.assertTrue(substr in str(e)) - - -class TestTalosError(unittest.TestCase): - """ - test TalosError class - """ - def test_browser_log_results(self): - # an example that should fail - # passing invalid value for argument result_raw - with self.assertRaises(TalosError): - BrowserLogResults(results_raw="__FAIL__FAIL") - - -if __name__ == '__main__': - unittest.main() diff --git a/testing/talos/tests/test_filter.py b/testing/talos/tests/test_filter.py deleted file mode 100755 index 7795e1853752..000000000000 --- a/testing/talos/tests/test_filter.py +++ /dev/null @@ -1,81 +0,0 @@ -#!/usr/bin/env python - -""" -test talos' filter module: - -http://hg.mozilla.org/build/talos/file/tip/talos/filter.py -""" -from __future__ import absolute_import - -import unittest - -import talos.filter - - -class TestFilter(unittest.TestCase): - - data = range(30) # test data - - def test_ignore(self): - """test the ignore filter""" - # a bit of a stub sanity test for a single filter - - filtered = talos.filter.ignore_first(self.data) - self.assertEquals(filtered, self.data[1:]) - - filtered = talos.filter.ignore_first(self.data, 10) - self.assertEquals(filtered, self.data[10:]) - - # short series won't be filtered - filtered = talos.filter.ignore_first(self.data, 50) - self.assertEquals(filtered, self.data) - - def test_getting_filters(self): - """test getting a list of filters from a string""" - - filter_names = ['ignore_max', 'ignore_max', 'max'] - - # get the filter functions - filters = talos.filter.filters(*filter_names) - self.assertEquals(len(filter_names), len(filters)) - for filter in filters: - self.assertTrue(self, hasattr(filter, '__call__')) - - # apply them on the data - filtered = talos.filter.apply(self.data, filters) - self.assertEquals(filtered, 27) - - def test_parse(self): - """test the filter name parse function""" - - # an example with no arguments - parsed = talos.filter.parse('mean') - self.assertEquals(parsed, ['mean', []]) - - # an example with one integer argument - parsed = talos.filter.parse('ignore_first:10') - self.assertEquals(parsed, ['ignore_first', [10]]) - self.assertEquals(type(parsed[1][0]), int) - self.assertNotEqual(type(parsed[1][0]), float) - - # an example with several arguments - - # temporarily add foo - # value is lambda function to mimic filter_dict key:value pair - talos.filter.scalar_filters['foo'] = lambda *args: args - parsed = talos.filter.parse('foo:10.1,2,5.0,6.') - self.assertEquals(parsed, ['foo', [10.1, 2, 5.0, 6.0]]) - for index in (2, 3): - self.assertEquals(type(parsed[1][index]), float) - self.assertNotEqual(type(parsed[1][index]), int) - - # an example that should fail - self.assertRaises(ValueError, talos.filter.parse, 'foo:bar') - self.assertRaises(ValueError, talos.filter.parse, 'foo:1,') - - # delete foo again - del talos.filter.scalar_filters['foo'] - - -if __name__ == '__main__': - unittest.main() diff --git a/testing/talos/tests/test_heavy.py b/testing/talos/tests/test_heavy.py deleted file mode 100644 index 53557781b53b..000000000000 --- a/testing/talos/tests/test_heavy.py +++ /dev/null @@ -1,163 +0,0 @@ -#!/usr/bin/env python - -""" -test talos' heavy module: - -http://hg.mozilla.org/build/talos/file/tip/talos/heavy.py -""" -from __future__ import absolute_import -import unittest -import tempfile -import shutil -import datetime -import contextlib -import os -import time - -import talos.heavy - - -archive = os.path.join(os.path.dirname(__file__), 'profile.tgz') -archive_size = os.stat(archive).st_size - - -@contextlib.contextmanager -def mock_requests(**kw): - class Session: - def mount(self, *args, **kw): - pass - - kw['Session'] = Session - old = {} - for meth, func in kw.items(): - curr = getattr(talos.heavy.requests, meth) - old[meth] = curr - setattr(talos.heavy.requests, meth, func) - setattr(Session, meth, func) - try: - yield - finally: - for meth, func in old.items(): - setattr(talos.heavy.requests, meth, func) - - -class _Response(object): - def __init__(self, code, headers=None, file=None): - if headers is None: - headers = {} - self.headers = headers - self.status_code = code - self.file = file - - def raise_for_status(self): - pass - - def iter_content(self, chunk_size): - with open(self.file, 'rb') as f: - yield f.read(chunk_size) - - -class Logger: - def __init__(self): - self.data = [] - - def info(self, msg): - self.data.append(msg) - - -class TestFilter(unittest.TestCase): - - def setUp(self): - self.temp = tempfile.mkdtemp() - self.logs = talos.heavy.LOG.logger = Logger() - - def tearDown(self): - shutil.rmtree(self.temp) - - def test_profile_age(self): - """test profile_age function""" - days = talos.heavy.profile_age(self.temp) - self.assertEqual(days, 0) - - _8_days = datetime.datetime.now() + datetime.timedelta(days=8) - days = talos.heavy.profile_age(self.temp, _8_days) - self.assertEqual(days, 8) - - def test_directory_age(self): - """make sure it detects changes in files in subdirs""" - with open(os.path.join(self.temp, 'file'), 'w') as f: - f.write('xxx') - - current_age = talos.heavy._recursive_mtime(self.temp) - time.sleep(1.1) - - with open(os.path.join(self.temp, 'file'), 'w') as f: - f.write('----') - - self.assertTrue(current_age < talos.heavy._recursive_mtime(self.temp)) - - def test_follow_redirect(self): - """test follow_redirect function""" - _8_days = datetime.datetime.now() + datetime.timedelta(days=8) - _8_days = _8_days.strftime('%a, %d %b %Y %H:%M:%S UTC') - - resps = [_Response(303, {'Location': 'blah'}), - _Response(303, {'Location': 'bli'}), - _Response(200, {'Last-Modified': _8_days})] - - class Counter: - c = 0 - - def _head(url, curr=Counter()): - curr.c += 1 - return resps[curr.c] - - with mock_requests(head=_head): - loc, lm = talos.heavy.follow_redirects('https://example.com') - days = talos.heavy.profile_age(self.temp, lm) - self.assertEqual(days, 8) - - def _test_download(self, age): - - def _days(num): - d = datetime.datetime.now() + datetime.timedelta(days=num) - return d.strftime('%a, %d %b %Y %H:%M:%S UTC') - - resps = [_Response(303, {'Location': 'blah'}), - _Response(303, {'Location': 'bli'}), - _Response(200, {'Last-Modified': _days(age)})] - - class Counter: - c = 0 - - def _head(url, curr=Counter()): - curr.c += 1 - return resps[curr.c] - - def _get(url, *args, **kw): - return _Response(200, {'Last-Modified': _days(age), - 'content-length': str(archive_size)}, - file=archive) - - with mock_requests(head=_head, get=_get): - target = talos.heavy.download_profile('simple', - profiles_dir=self.temp) - profile = os.path.join(self.temp, 'simple') - self.assertTrue(os.path.exists(profile)) - return target - - def test_download_profile(self): - """test downloading heavy profile""" - # a 12 days old profile gets updated - self._test_download(12) - - # a 8 days two - self._test_download(8) - - # a 2 days sticks - self._test_download(2) - self.assertTrue("fresh enough" in self.logs.data[-2]) - - -if __name__ == '__main__': - unittest.main() diff --git a/testing/talos/tests/test_results.py b/testing/talos/tests/test_results.py deleted file mode 100755 index ede4e4b7866e..000000000000 --- a/testing/talos/tests/test_results.py +++ /dev/null @@ -1,82 +0,0 @@ -#!/usr/bin/env 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/. - -""" -test talos results parsing - -http://hg.mozilla.org/build/talos/file/tip/talos/results.py -""" -from __future__ import absolute_import - -import unittest - -import talos.filter -import talos.results - -# example page load test results string -results_string = """_x_x_mozilla_page_load -_x_x_mozilla_page_load_details -|i|pagename|runs| -|0;gearflowers.svg;74;65;68;66;62 -|1;composite-scale.svg;43;44;35;41;41 -|2;composite-scale-opacity.svg;19;16;19;19;21 -|3;composite-scale-rotate.svg;18;19;20;20;19 -|4;composite-scale-rotate-opacity.svg;18;17;17;17;19 -|5;hixie-001.xml;71836;15057;15063;57436;15061 -|6;hixie-002.xml;53940;15057;38246;55323;31818 -|7;hixie-003.xml;5027;5026;13540;31503;5031 -|8;hixie-004.xml;5050;5054;5053;5054;5055 -|9;hixie-005.xml;4568;4569;4562;4545;4567 -|10;hixie-006.xml;5090;5165;5054;5015;5077 -|11;hixie-007.xml;1628;1623;1623;1617;1622 -""" - - -class TestPageloaderResults(unittest.TestCase): - - def test_parsing(self): - """test our ability to parse results data""" - results = talos.results.PageloaderResults(results_string) - - # ensure you got all of them - self.assertEqual(len(results.results), 12) - - # test the indices - indices = [i['index'] for i in results.results] - self.assertEqual(indices, range(12)) - - # test some pages - pages = [i['page'] for i in results.results] - comparison = ['hixie-00%d.xml' % i for i in range(1, 8)] - self.assertEqual(pages[-len(comparison):], comparison) - - # test a few values - last = [1628., 1623., 1623, 1617., 1622.] - self.assertEqual(results.results[-1]['runs'], last) - first = [74., 65., 68., 66., 62.] - self.assertEqual(results.results[0]['runs'], first) - - def test_filter(self): - """test PageloaderResults.filter function""" - - # parse the data - results = talos.results.PageloaderResults(results_string) - - # apply some filters - filters = [[talos.filter.ignore_first, [2]], [talos.filter.median]] - filtered = results.filter(*filters) - self.assertEqual(filtered[0][0], 66.) - self.assertEqual(filtered[-1][0], 1622.) - - # apply some different filters - filters = [[talos.filter.ignore_max, []], [max, []]] - filtered = results.filter(*filters) - self.assertEqual(filtered[0][0], 68.) - self.assertEqual(filtered[-1][0], 1623.) - - -if __name__ == '__main__': - unittest.main() diff --git a/testing/talos/tests/test_talosconfig.py b/testing/talos/tests/test_talosconfig.py deleted file mode 100644 index 58b13f961a90..000000000000 --- a/testing/talos/tests/test_talosconfig.py +++ /dev/null @@ -1,158 +0,0 @@ -from __future__ import absolute_import, print_function - -import json -import unittest - -from talos import talosconfig -from talos.configuration import YAML - -# globals -ffox_path = 'test/path/to/firefox' -command_args = [ffox_path, - '-profile', - 'pathtoprofile', - '-tp', - 'pathtotpmanifest', - '-tpchrome', - '-tpmozafterpaint', - '-tpnoisy', - '-rss', - '-tpcycles', - '1', - '-tppagecycles', - '1'] -with open("test_talosconfig_browser_config.json") as json_browser_config: - browser_config = json.load(json_browser_config) -with open("test_talosconfig_test_config.json") as json_test_config: - test_config = json.load(json_test_config) - - -class TestWriteConfig(unittest.TestCase): - def test_writeConfigFile(self): - obj = dict(some=123, thing='456', other=789) - - self.assertEquals( - json.loads(talosconfig.writeConfigFile(obj, ('some', 'thing'))), - dict(some=123, thing='456') - ) - - # test without keys - self.assertEquals( - json.loads(talosconfig.writeConfigFile(obj, None)), - obj - ) - - -class TalosConfigUnitTest(unittest.TestCase): - """ - A class inheriting from unittest.TestCase to test the generateTalosConfig function. - """ - - def validate(self, var1, var2): - # Function to check whether the output generated is correct or not. - # If the output generated is not correct then specify the expected output to be generated. - if var1 == var2: - return 1 - else: - print("input '%s' != expected '%s'" % (var1, var2)) - - def test_talosconfig(self): - # This function stimulates a call to generateTalosConfig in talosconfig.py . - # It is then tested whether the output generated is correct or not. - # ensure that the output generated in yaml file is as expected or not. - yaml = YAML() - content = yaml.read(browser_config['bcontroller_config']) - self.validate(content['command'], - "test/path/to/firefox " + - "-profile " + - "pathtoprofile " + - "-tp " + - "pathtotpmanifest " + - "-tpchrome " + - "-tpmozafterpaint " + - "-tpnoisy " + - "-rss " + - "-tpcycles " + - "1 " + - "-tppagecycles " + - "1") - self.validate(content['child_process'], "plugin-container") - self.validate(content['process'], "firefox.exe") - self.validate(content['browser_wait'], 5) - self.validate(content['test_timeout'], 1200) - self.validate(content['browser_log'], "browser_output.txt") - self.validate(content['browser_path'], "test/path/to/firefox") - self.validate(content['error_filename'], "pathtoerrorfile") - self.validate(content['xperf_path'], - "C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe") - self.validate(content['buildid'], 20131205075310) - self.validate(content['sourcestamp'], "39faf812aaec") - self.validate(content['repository'], "http://hg.mozilla.org/releases/mozilla-release") - self.validate(content['title'], "qm-pxp01") - self.validate(content['testname'], "tp5n") - self.validate(content['xperf_providers'], ['PROC_THREAD', - 'LOADER', - 'HARD_FAULTS', - 'FILENAME', - 'FILE_IO', - 'FILE_IO_INIT']) - self.validate(content['xperf_user_providers'], - ['Mozilla Generic Provider', 'Microsoft-Windows-TCPIP']) - self.validate(content['xperf_stackwalk'], - ['FileCreate', 'FileRead', 'FileWrite', 'FileFlush', 'FileClose']) - self.validate(content['processID'], "None") - self.validate(content['approot'], "test/path/to") - - def test_errors(self): - # Tests if errors are correctly raised. - - # Testing that error is correctly raised or not if xperf_path is missing - browser_config_copy = browser_config.copy() - test_config_copy = test_config.copy() - del browser_config_copy['xperf_path'] - talosconfig.generateTalosConfig(command_args, browser_config_copy, test_config_copy) - yaml = YAML() - content = yaml.read(browser_config['bcontroller_config']) - - with self.assertRaises(KeyError): - self.validate(content['xperf_path'], - "C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe") - - # Test to see if keyerror is raised or not for calling testname when xperf_path is missing - with self.assertRaises(KeyError): - self.validate(content['testname'], "tp5n") - - # Testing that error is correctly raised or not if xperf_providers is missing - browser_config_copy = browser_config.copy() - test_config_copy = test_config.copy() - del test_config_copy['xperf_providers'] - talosconfig.generateTalosConfig(command_args, browser_config_copy, test_config_copy) - yaml = YAML() - content = yaml.read(browser_config['bcontroller_config']) - - # Checking keyerror when calling xperf_providers - with self.assertRaises(KeyError): - self.validate(content['xperf_providers'], ['PROC_THREAD', 'LOADER', 'HARD_FAULTS', - 'FILENAME', 'FILE_IO', 'FILE_IO_INIT']) - - # Checking keyerror when calling xperf_user_providers when xperf_providers is missing - with self.assertRaises(KeyError): - self.validate(content['xperf_user_providers'], - ['Mozilla Generic Provider', 'Microsoft-Windows-TCPIP']) - - # Checking keyerror when calling xperf_stackwalk when xperf_providers is missing - with self.assertRaises(KeyError): - self.validate(content['xperf_stackwalk'], - ['FileCreate', 'FileRead', 'FileWrite', 'FileFlush', 'FileClose']) - - # Checking keyerror when calling processID when xperf_providers is missing - with self.assertRaises(KeyError): - self.validate(content['processID'], "None") - - # Checking keyerror when calling approot when xperf_providers is missing - with self.assertRaises(KeyError): - self.validate(content['approot'], "test/path/to") - - -if __name__ == '__main__': - unittest.main() diff --git a/testing/talos/tests/test_urlsplit.py b/testing/talos/tests/test_urlsplit.py deleted file mode 100755 index 4121f6d8e6d4..000000000000 --- a/testing/talos/tests/test_urlsplit.py +++ /dev/null @@ -1,56 +0,0 @@ -#!/usr/bin/env 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/. - -""" -test URL parsing; see -https://bugzilla.mozilla.org/show_bug.cgi?id=793875 -""" -from __future__ import absolute_import - -import unittest - -import talos.utils - - -class TestURLParsing(unittest.TestCase): - - def test_http_url(self): - """test parsing an HTTP URL""" - - url = 'https://www.mozilla.org/en-US/about/' - parsed = talos.utils.urlsplit(url) - self.assertEqual(parsed, - ['https', 'www.mozilla.org', '/en-US/about/', '', '']) - - def test_file_url(self): - """test parsing file:// URLs""" - - # unix-like file path - url = 'file:///foo/bar' - parsed = talos.utils.urlsplit(url) - self.assertEqual(parsed, - ['file', '', '/foo/bar', '', '']) - - # windows-like file path - url = r'file://c:\foo\bar' - parsed = talos.utils.urlsplit(url) - self.assertEqual(parsed, - ['file', '', r'c:\foo\bar', '', '']) - - def test_implicit_file_url(self): - """ - test parsing URLs with no scheme, which by default are assumed - to be file:// URLs - """ - - path = '/foo/bar' - parsed = talos.utils.urlsplit(path) - self.assertEqual(parsed, - ['file', '', '/foo/bar', '', '']) - - -if __name__ == '__main__': - unittest.main() diff --git a/testing/talos/tests/test_utils.py b/testing/talos/tests/test_utils.py deleted file mode 100644 index 61ac694f986d..000000000000 --- a/testing/talos/tests/test_utils.py +++ /dev/null @@ -1,43 +0,0 @@ -from __future__ import absolute_import - -import os -import unittest - -from talos import utils - - -class TestTimer(unittest.TestCase): - def test_timer(self): - timer = utils.Timer() - timer._start_time -= 3 # remove three seconds for the test - self.assertEquals(timer.elapsed(), '00:00:03') - - -class TestRestoreEnv(unittest.TestCase): - def test_basic(self): - env_var = 'THIS_IS_A_ENV_VAR_NOT_USED' - self.assertNotIn(env_var, os.environ) - with utils.restore_environment_vars(): - os.environ[env_var] = '1' - self.assertNotIn(env_var, os.environ) - - -class TestInterpolate(unittest.TestCase): - def test_interpolate_talos_is_always_defines(self): - self.assertEquals(utils.interpolate('${talos}'), utils.here) - - def test_interpolate_custom_placeholders(self): - self.assertEquals(utils.interpolate('${talos} ${foo} abc', foo='bar', unused=1), - utils.here + ' bar abc') - - -class TestParsePref(unittest.TestCase): - def test_parse_string(self): - self.assertEquals(utils.parse_pref('abc'), 'abc') - - def test_parse_int(self): - self.assertEquals(utils.parse_pref('12'), 12) - - def test_parse_bool(self): - self.assertEquals(utils.parse_pref('true'), True) - self.assertEquals(utils.parse_pref('false'), False) diff --git a/testing/talos/tests/test_xrestop.py b/testing/talos/tests/test_xrestop.py deleted file mode 100755 index 1c3cfc6d8c74..000000000000 --- a/testing/talos/tests/test_xrestop.py +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env python - -""" -Tests for talos.xrestop -""" -from __future__ import absolute_import - -import os -import subprocess -import unittest - -from talos.cmanager_linux import xrestop - -here = os.path.dirname(os.path.abspath(__file__)) -xrestop_output = os.path.join(here, 'xrestop_output.txt') - - -class TestXrestop(unittest.TestCase): - - def test_parsing(self): - """test parsing xrestop output from xrestop_output.txt""" - - class MockPopen(object): - """ - stub class for subprocess.Popen - We mock this to return a local static copy of xrestop output - This has the unfortunate nature of depending on implementation - details. - """ - def __init__(self, *args, **kwargs): - self.returncode = 0 - - def communicate(self): - stdout = open(xrestop_output).read() - return stdout, '' - - # monkey-patch subprocess.Popen - Popen = subprocess.Popen - subprocess.Popen = MockPopen - - # get the output - output = xrestop() - - # ensure that the parsed output is equal to what is in - # xrestop_output.txt - self.assertEqual(len(output), 7) # seven windows with PIDs - - # the first window is Thunderbird - pid = 2035 # thundrbird's pid - self.assertTrue(pid in output) - thunderbird = output[pid] - self.assertEqual(thunderbird['index'], 0) - self.assertEqual(thunderbird['total bytes'], '~4728761') - - # PID=1668 is a Terminal - pid = 1668 - self.assertTrue(pid in output) - terminal = output[pid] - self.assertEqual(terminal['pixmap bytes'], '1943716') - - # cleanup: set subprocess.Popen back - subprocess.Popen = Popen - - -if __name__ == '__main__': - unittest.main() From 1154b74148245420aa987fa5ed10c9e29738419e Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Thu, 26 Oct 2017 12:53:30 +0200 Subject: [PATCH 31/69] Bug 1411883 - P1. Copy files as-is from FFmpeg upstream. r=gerald r?gerald MozReview-Commit-ID: J8AZngUJSOb --HG-- extra : rebase_source : 887f47644b21e00b0b494a51f1f6f83f9b01ae6e --- media/ffvpx/libavcodec/bsf.c | 325 ++++++++++++++++++++++++- media/ffvpx/libavcodec/codec_desc.c | 91 ++++--- media/ffvpx/libavcodec/options_table.h | 17 +- media/ffvpx/libavcodec/profiles.c | 12 + media/ffvpx/libavcodec/profiles.h | 1 + media/ffvpx/libavutil/avconfig.h | 1 - media/ffvpx/libavutil/ffversion.h | 2 +- media/ffvpx/libavutil/opt.c | 45 +++- 8 files changed, 444 insertions(+), 50 deletions(-) diff --git a/media/ffvpx/libavcodec/bsf.c b/media/ffvpx/libavcodec/bsf.c index 88b7f29fe51c..38b423101c36 100644 --- a/media/ffvpx/libavcodec/bsf.c +++ b/media/ffvpx/libavcodec/bsf.c @@ -21,6 +21,8 @@ #include "libavutil/log.h" #include "libavutil/mem.h" #include "libavutil/opt.h" +#include "libavutil/avstring.h" +#include "libavutil/bprint.h" #include "avcodec.h" #include "bsf.h" @@ -172,7 +174,7 @@ int av_bsf_init(AVBSFContext *ctx) int av_bsf_send_packet(AVBSFContext *ctx, AVPacket *pkt) { - if (!pkt || !pkt->data) { + if (!pkt || (!pkt->data && !pkt->side_data_elems)) { ctx->internal->eof = 1; return 0; } @@ -217,3 +219,324 @@ int ff_bsf_get_packet(AVBSFContext *ctx, AVPacket **pkt) return 0; } + +int ff_bsf_get_packet_ref(AVBSFContext *ctx, AVPacket *pkt) +{ + AVBSFInternal *in = ctx->internal; + + if (in->eof) + return AVERROR_EOF; + + if (!ctx->internal->buffer_pkt->data && + !ctx->internal->buffer_pkt->side_data_elems) + return AVERROR(EAGAIN); + + av_packet_move_ref(pkt, ctx->internal->buffer_pkt); + + return 0; +} + +typedef struct BSFListContext { + const AVClass *class; + + AVBSFContext **bsfs; + int nb_bsfs; + + unsigned idx; // index of currently processed BSF + unsigned flushed_idx; // index of BSF being flushed + + char * item_name; +} BSFListContext; + + +static int bsf_list_init(AVBSFContext *bsf) +{ + BSFListContext *lst = bsf->priv_data; + int ret, i; + const AVCodecParameters *cod_par = bsf->par_in; + AVRational tb = bsf->time_base_in; + + for (i = 0; i < lst->nb_bsfs; ++i) { + ret = avcodec_parameters_copy(lst->bsfs[i]->par_in, cod_par); + if (ret < 0) + goto fail; + + lst->bsfs[i]->time_base_in = tb; + + ret = av_bsf_init(lst->bsfs[i]); + if (ret < 0) + goto fail; + + cod_par = lst->bsfs[i]->par_out; + tb = lst->bsfs[i]->time_base_out; + } + + bsf->time_base_out = tb; + ret = avcodec_parameters_copy(bsf->par_out, cod_par); + +fail: + return ret; +} + +static int bsf_list_filter(AVBSFContext *bsf, AVPacket *out) +{ + BSFListContext *lst = bsf->priv_data; + int ret; + + if (!lst->nb_bsfs) + return ff_bsf_get_packet_ref(bsf, out); + + while (1) { + if (lst->idx > lst->flushed_idx) { + ret = av_bsf_receive_packet(lst->bsfs[lst->idx-1], out); + if (ret == AVERROR(EAGAIN)) { + /* no more packets from idx-1, try with previous */ + ret = 0; + lst->idx--; + continue; + } else if (ret == AVERROR_EOF) { + /* filter idx-1 is done, continue with idx...nb_bsfs */ + lst->flushed_idx = lst->idx; + continue; + }else if (ret < 0) { + /* filtering error */ + break; + } + } else { + ret = ff_bsf_get_packet_ref(bsf, out); + if (ret == AVERROR_EOF) { + lst->idx = lst->flushed_idx; + } else if (ret < 0) + break; + } + + if (lst->idx < lst->nb_bsfs) { + AVPacket *pkt; + if (ret == AVERROR_EOF && lst->idx == lst->flushed_idx) { + /* ff_bsf_get_packet_ref returned EOF and idx is first + * filter of yet not flushed filter chain */ + pkt = NULL; + } else { + pkt = out; + } + ret = av_bsf_send_packet(lst->bsfs[lst->idx], pkt); + if (ret < 0) + break; + lst->idx++; + } else { + /* The end of filter chain, break to return result */ + break; + } + } + + if (ret < 0) + av_packet_unref(out); + + return ret; +} + +static void bsf_list_close(AVBSFContext *bsf) +{ + BSFListContext *lst = bsf->priv_data; + int i; + + for (i = 0; i < lst->nb_bsfs; ++i) + av_bsf_free(&lst->bsfs[i]); + av_freep(&lst->bsfs); + av_freep(&lst->item_name); +} + +static const char *bsf_list_item_name(void *ctx) +{ + static const char *null_filter_name = "null"; + AVBSFContext *bsf_ctx = ctx; + BSFListContext *lst = bsf_ctx->priv_data; + + if (!lst->nb_bsfs) + return null_filter_name; + + if (!lst->item_name) { + int i; + AVBPrint bp; + av_bprint_init(&bp, 16, 128); + + av_bprintf(&bp, "bsf_list("); + for (i = 0; i < lst->nb_bsfs; i++) + av_bprintf(&bp, i ? ",%s" : "%s", lst->bsfs[i]->filter->name); + av_bprintf(&bp, ")"); + + av_bprint_finalize(&bp, &lst->item_name); + } + + return lst->item_name; +} + +static const AVClass bsf_list_class = { + .class_name = "bsf_list", + .item_name = bsf_list_item_name, + .version = LIBAVUTIL_VERSION_INT, +}; + +const AVBitStreamFilter ff_list_bsf = { + .name = "bsf_list", + .priv_data_size = sizeof(BSFListContext), + .priv_class = &bsf_list_class, + .init = bsf_list_init, + .filter = bsf_list_filter, + .close = bsf_list_close, +}; + +struct AVBSFList { + AVBSFContext **bsfs; + int nb_bsfs; +}; + +AVBSFList *av_bsf_list_alloc(void) +{ + return av_mallocz(sizeof(AVBSFList)); +} + +void av_bsf_list_free(AVBSFList **lst) +{ + int i; + + if (!*lst) + return; + + for (i = 0; i < (*lst)->nb_bsfs; ++i) + av_bsf_free(&(*lst)->bsfs[i]); + av_free((*lst)->bsfs); + av_freep(lst); +} + +int av_bsf_list_append(AVBSFList *lst, AVBSFContext *bsf) +{ + return av_dynarray_add_nofree(&lst->bsfs, &lst->nb_bsfs, bsf); +} + +int av_bsf_list_append2(AVBSFList *lst, const char *bsf_name, AVDictionary ** options) +{ + int ret; + const AVBitStreamFilter *filter; + AVBSFContext *bsf; + + filter = av_bsf_get_by_name(bsf_name); + if (!filter) + return AVERROR_BSF_NOT_FOUND; + + ret = av_bsf_alloc(filter, &bsf); + if (ret < 0) + return ret; + + if (options) { + ret = av_opt_set_dict2(bsf, options, AV_OPT_SEARCH_CHILDREN); + if (ret < 0) + goto end; + } + + ret = av_bsf_list_append(lst, bsf); + +end: + if (ret < 0) + av_bsf_free(&bsf); + + return ret; +} + +int av_bsf_list_finalize(AVBSFList **lst, AVBSFContext **bsf) +{ + int ret = 0; + BSFListContext *ctx; + + if ((*lst)->nb_bsfs == 1) { + *bsf = (*lst)->bsfs[0]; + av_freep(&(*lst)->bsfs); + (*lst)->nb_bsfs = 0; + goto end; + } + + ret = av_bsf_alloc(&ff_list_bsf, bsf); + if (ret < 0) + return ret; + + ctx = (*bsf)->priv_data; + + ctx->bsfs = (*lst)->bsfs; + ctx->nb_bsfs = (*lst)->nb_bsfs; + +end: + av_freep(lst); + return ret; +} + +static int bsf_parse_single(const char *str, AVBSFList *bsf_lst) +{ + char *bsf_name, *bsf_options_str, *buf; + AVDictionary *bsf_options = NULL; + int ret = 0; + + if (!(buf = av_strdup(str))) + return AVERROR(ENOMEM); + + bsf_name = av_strtok(buf, "=", &bsf_options_str); + if (!bsf_name) { + ret = AVERROR(EINVAL); + goto end; + } + + if (bsf_options_str) { + ret = av_dict_parse_string(&bsf_options, bsf_options_str, "=", ":", 0); + if (ret < 0) + goto end; + } + + ret = av_bsf_list_append2(bsf_lst, bsf_name, &bsf_options); + + av_dict_free(&bsf_options); +end: + av_free(buf); + return ret; +} + +int av_bsf_list_parse_str(const char *str, AVBSFContext **bsf_lst) +{ + AVBSFList *lst; + char *bsf_str, *buf, *dup, *saveptr; + int ret; + + if (!str) + return av_bsf_get_null_filter(bsf_lst); + + lst = av_bsf_list_alloc(); + if (!lst) + return AVERROR(ENOMEM); + + if (!(dup = buf = av_strdup(str))) { + ret = AVERROR(ENOMEM); + goto end; + } + + while (1) { + bsf_str = av_strtok(buf, ",", &saveptr); + if (!bsf_str) + break; + + ret = bsf_parse_single(bsf_str, lst); + if (ret < 0) + goto end; + + buf = NULL; + } + + ret = av_bsf_list_finalize(&lst, bsf_lst); +end: + if (ret < 0) + av_bsf_list_free(&lst); + av_free(dup); + return ret; +} + +int av_bsf_get_null_filter(AVBSFContext **bsf) +{ + return av_bsf_alloc(&ff_list_bsf, bsf); +} diff --git a/media/ffvpx/libavcodec/codec_desc.c b/media/ffvpx/libavcodec/codec_desc.c index 660df7cd256f..6a13bbbf0ee0 100644 --- a/media/ffvpx/libavcodec/codec_desc.c +++ b/media/ffvpx/libavcodec/codec_desc.c @@ -673,6 +673,7 @@ static const AVCodecDescriptor codec_descriptors[] = { .name = "dnxhd", .long_name = NULL_IF_CONFIG_SMALL("VC3/DNxHD"), .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSY, + .profiles = NULL_IF_CONFIG_SMALL(ff_dnxhd_profiles), }, { .id = AV_CODEC_ID_THP, @@ -1318,6 +1319,41 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("innoHeim/Rsupport Screen Capture Codec"), .props = AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_MAGICYUV, + .type = AVMEDIA_TYPE_VIDEO, + .name = "magicyuv", + .long_name = NULL_IF_CONFIG_SMALL("MagicYUV video"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_TRUEMOTION2RT, + .type = AVMEDIA_TYPE_VIDEO, + .name = "truemotion2rt", + .long_name = NULL_IF_CONFIG_SMALL("Duck TrueMotion 2.0 Real Time"), + .props = AV_CODEC_PROP_LOSSY, + }, + { + .id = AV_CODEC_ID_CFHD, + .type = AVMEDIA_TYPE_VIDEO, + .name = "cfhd", + .long_name = NULL_IF_CONFIG_SMALL("Cineform HD"), + .props = AV_CODEC_PROP_LOSSY, + }, + { + .id = AV_CODEC_ID_SHEERVIDEO, + .type = AVMEDIA_TYPE_VIDEO, + .name = "sheervideo", + .long_name = NULL_IF_CONFIG_SMALL("BitJazz SheerVideo"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_YLC, + .type = AVMEDIA_TYPE_VIDEO, + .name = "ylc", + .long_name = NULL_IF_CONFIG_SMALL("YUY2 Lossless Codec"), + .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, + }, { .id = AV_CODEC_ID_PIXLET, .type = AVMEDIA_TYPE_VIDEO, @@ -1629,41 +1665,6 @@ static const AVCodecDescriptor codec_descriptors[] = { .props = AV_CODEC_PROP_LOSSLESS, .mime_types= MT("image/png"), }, - { - .id = AV_CODEC_ID_CFHD, - .type = AVMEDIA_TYPE_VIDEO, - .name = "cfhd", - .long_name = NULL_IF_CONFIG_SMALL("Cineform HD"), - .props = AV_CODEC_PROP_LOSSY, - }, - { - .id = AV_CODEC_ID_TRUEMOTION2RT, - .type = AVMEDIA_TYPE_VIDEO, - .name = "truemotion2rt", - .long_name = NULL_IF_CONFIG_SMALL("Duck TrueMotion 2.0 Real Time"), - .props = AV_CODEC_PROP_LOSSY, - }, - { - .id = AV_CODEC_ID_MAGICYUV, - .type = AVMEDIA_TYPE_VIDEO, - .name = "magicyuv", - .long_name = NULL_IF_CONFIG_SMALL("MagicYUV Lossless Video"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, - }, - { - .id = AV_CODEC_ID_SHEERVIDEO, - .type = AVMEDIA_TYPE_VIDEO, - .name = "sheervideo", - .long_name = NULL_IF_CONFIG_SMALL("BitJazz SheerVideo"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, - }, - { - .id = AV_CODEC_ID_YLC, - .type = AVMEDIA_TYPE_VIDEO, - .name = "ylc", - .long_name = NULL_IF_CONFIG_SMALL("YUY2 Lossless Codec"), - .props = AV_CODEC_PROP_INTRA_ONLY | AV_CODEC_PROP_LOSSLESS, - }, /* various PCM "codecs" */ { @@ -1736,6 +1737,20 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("PCM signed 32-bit big-endian"), .props = AV_CODEC_PROP_LOSSLESS, }, + { + .id = AV_CODEC_ID_PCM_S64LE, + .type = AVMEDIA_TYPE_AUDIO, + .name = "pcm_s64le", + .long_name = NULL_IF_CONFIG_SMALL("PCM signed 64-bit little-endian"), + .props = AV_CODEC_PROP_LOSSLESS, + }, + { + .id = AV_CODEC_ID_PCM_S64BE, + .type = AVMEDIA_TYPE_AUDIO, + .name = "pcm_s64be", + .long_name = NULL_IF_CONFIG_SMALL("PCM signed 64-bit big-endian"), + .props = AV_CODEC_PROP_LOSSLESS, + }, { .id = AV_CODEC_ID_PCM_U32LE, .type = AVMEDIA_TYPE_AUDIO, @@ -3093,6 +3108,12 @@ static const AVCodecDescriptor codec_descriptors[] = { .long_name = NULL_IF_CONFIG_SMALL("binary data"), .mime_types= MT("application/octet-stream"), }, + { + .id = AV_CODEC_ID_SCTE_35, + .type = AVMEDIA_TYPE_DATA, + .name = "scte_35", + .long_name = NULL_IF_CONFIG_SMALL("SCTE 35 Message Queue"), + }, /* deprecated codec ids */ }; diff --git a/media/ffvpx/libavcodec/options_table.h b/media/ffvpx/libavcodec/options_table.h index 607e4156614c..2ac37c3ff17e 100644 --- a/media/ffvpx/libavcodec/options_table.h +++ b/media/ffvpx/libavcodec/options_table.h @@ -275,8 +275,10 @@ static const AVOption avcodec_options[] = { {"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"}, +#if FF_API_DEBUG_MV {"vis_qp", "visualize quantization parameter (QP), lower QP are tinted greener", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_QP }, INT_MIN, INT_MAX, V|D, "debug"}, {"vis_mb_type", "visualize block types", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_VIS_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"}, +#endif {"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"}, @@ -452,7 +454,7 @@ static const AVOption avcodec_options[] = { {"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}, {"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D}, -{"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, AVCOL_PRI_NB-1, V|E|D, "color_primaries_type"}, +{"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"}, @@ -467,7 +469,7 @@ static const AVOption avcodec_options[] = { {"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"}, {"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, AVCOL_TRC_NB-1, V|E|D, "color_trc_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"}, @@ -494,7 +496,7 @@ static const AVOption avcodec_options[] = { {"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, AVCOL_SPC_NB-1, V|E|D, "colorspace_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"}, @@ -510,14 +512,14 @@ static const AVOption avcodec_options[] = { {"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, AVCOL_RANGE_NB-1, V|E|D, "color_range_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"}, -{"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, AVCHROMA_LOC_NB-1, V|E|D, "chroma_sample_location_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"}, @@ -561,6 +563,7 @@ static const AVOption avcodec_options[] = { #if FF_API_SIDEDATA_ONLY_PKT {"side_data_only_packets", NULL, OFFSET(side_data_only_packets), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, A|V|E }, #endif +{"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" }, @@ -573,6 +576,10 @@ static const AVOption avcodec_options[] = { {"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 }, +{"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"}, {NULL}, }; diff --git a/media/ffvpx/libavcodec/profiles.c b/media/ffvpx/libavcodec/profiles.c index da745e13998d..30498efedfc2 100644 --- a/media/ffvpx/libavcodec/profiles.c +++ b/media/ffvpx/libavcodec/profiles.c @@ -46,6 +46,16 @@ const AVProfile ff_dca_profiles[] = { { FF_PROFILE_UNKNOWN }, }; +const AVProfile ff_dnxhd_profiles[] = { + { FF_PROFILE_DNXHD, "DNXHD"}, + { FF_PROFILE_DNXHR_LB, "DNXHR LB"}, + { FF_PROFILE_DNXHR_SQ, "DNXHR SQ"}, + { FF_PROFILE_DNXHR_HQ, "DNXHR HQ" }, + { FF_PROFILE_DNXHR_HQX, "DNXHR HQX"}, + { FF_PROFILE_DNXHR_444, "DNXHR 444"}, + { FF_PROFILE_UNKNOWN }, +}; + const AVProfile ff_h264_profiles[] = { { FF_PROFILE_H264_BASELINE, "Baseline" }, { FF_PROFILE_H264_CONSTRAINED_BASELINE, "Constrained Baseline" }, @@ -60,6 +70,8 @@ const AVProfile ff_h264_profiles[] = { { FF_PROFILE_H264_HIGH_444_PREDICTIVE, "High 4:4:4 Predictive" }, { FF_PROFILE_H264_HIGH_444_INTRA, "High 4:4:4 Intra" }, { FF_PROFILE_H264_CAVLC_444, "CAVLC 4:4:4" }, + { FF_PROFILE_H264_MULTIVIEW_HIGH, "Multiview High" }, + { FF_PROFILE_H264_STEREO_HIGH, "Stereo High" }, { FF_PROFILE_UNKNOWN }, }; diff --git a/media/ffvpx/libavcodec/profiles.h b/media/ffvpx/libavcodec/profiles.h index c86c683ab02f..eb18b406af4c 100644 --- a/media/ffvpx/libavcodec/profiles.h +++ b/media/ffvpx/libavcodec/profiles.h @@ -23,6 +23,7 @@ extern const AVProfile ff_aac_profiles[]; extern const AVProfile ff_dca_profiles[]; +extern const AVProfile ff_dnxhd_profiles[]; extern const AVProfile ff_h264_profiles[]; extern const AVProfile ff_hevc_profiles[]; extern const AVProfile ff_jpeg2000_profiles[]; diff --git a/media/ffvpx/libavutil/avconfig.h b/media/ffvpx/libavutil/avconfig.h index 2ec333d15821..f10aa6186b4f 100644 --- a/media/ffvpx/libavutil/avconfig.h +++ b/media/ffvpx/libavutil/avconfig.h @@ -3,5 +3,4 @@ #define AVUTIL_AVCONFIG_H #define AV_HAVE_BIGENDIAN 0 #define AV_HAVE_FAST_UNALIGNED 1 -#define AV_HAVE_INCOMPATIBLE_FORK_ABI 0 #endif /* AVUTIL_AVCONFIG_H */ diff --git a/media/ffvpx/libavutil/ffversion.h b/media/ffvpx/libavutil/ffversion.h index cbeaf627bd45..08514abdbfe4 100644 --- a/media/ffvpx/libavutil/ffversion.h +++ b/media/ffvpx/libavutil/ffversion.h @@ -1,5 +1,5 @@ /* Automatically generated by version.sh, do not manually edit! */ #ifndef AVUTIL_FFVERSION_H #define AVUTIL_FFVERSION_H -#define FFMPEG_VERSION "n3.1.1-6-g86f9228" +#define FFMPEG_VERSION "n3.4-1-g587fadaef1" #endif /* AVUTIL_FFVERSION_H */ diff --git a/media/ffvpx/libavutil/opt.c b/media/ffvpx/libavutil/opt.c index cd16bd1d3f4c..df88663e3f09 100644 --- a/media/ffvpx/libavutil/opt.c +++ b/media/ffvpx/libavutil/opt.c @@ -74,6 +74,7 @@ static int read_number(const AVOption *o, const void *dst, double *num, int *den case AV_OPT_TYPE_CHANNEL_LAYOUT: case AV_OPT_TYPE_DURATION: case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: *intnum = *(int64_t *)dst; return 0; case AV_OPT_TYPE_FLOAT: @@ -96,8 +97,8 @@ static int read_number(const AVOption *o, const void *dst, double *num, int *den static int write_number(void *obj, const AVOption *o, void *dst, double num, int den, int64_t intnum) { if (o->type != AV_OPT_TYPE_FLAGS && - (o->max * den < num * intnum || o->min * den > num * intnum)) { - num = den ? num * intnum / den : (num * intnum ? INFINITY : NAN); + (!den || o->max * den < num * intnum || o->min * den > num * intnum)) { + num = den ? num * intnum / den : (num && intnum ? INFINITY : NAN); av_log(obj, AV_LOG_ERROR, "Value %f for parameter '%s' out of range [%g - %g]\n", num, o->name, o->min, o->max); return AVERROR(ERANGE); @@ -126,9 +127,27 @@ static int write_number(void *obj, const AVOption *o, void *dst, double num, int break; case AV_OPT_TYPE_DURATION: case AV_OPT_TYPE_CHANNEL_LAYOUT: - case AV_OPT_TYPE_INT64: - *(int64_t *)dst = llrint(num / den) * intnum; - break; + case AV_OPT_TYPE_INT64:{ + double d = num / den; + if (intnum == 1 && d == (double)INT64_MAX) { + *(int64_t *)dst = INT64_MAX; + } else + *(int64_t *)dst = llrint(d) * intnum; + break;} + case AV_OPT_TYPE_UINT64:{ + double d = num / den; + // We must special case uint64_t here as llrint() does not support values + // outside the int64_t range and there is no portable function which does + // "INT64_MAX + 1ULL" is used as it is representable exactly as IEEE double + // while INT64_MAX is not + if (intnum == 1 && d == (double)UINT64_MAX) { + *(uint64_t *)dst = UINT64_MAX; + } else if (d > INT64_MAX + 1ULL) { + *(uint64_t *)dst = (llrint(d - (INT64_MAX + 1ULL)) + (INT64_MAX + 1ULL))*intnum; + } else { + *(uint64_t *)dst = llrint(d) * intnum; + } + break;} case AV_OPT_TYPE_FLOAT: *(float *)dst = num * intnum / den; break; @@ -200,6 +219,7 @@ static int set_string(void *obj, const AVOption *o, const char *val, uint8_t **d } #define DEFAULT_NUMVAL(opt) ((opt->type == AV_OPT_TYPE_INT64 || \ + opt->type == AV_OPT_TYPE_UINT64 || \ opt->type == AV_OPT_TYPE_CONST || \ opt->type == AV_OPT_TYPE_FLAGS || \ opt->type == AV_OPT_TYPE_INT) \ @@ -291,8 +311,6 @@ static int set_string_number(void *obj, void *target_obj, const AVOption *o, con if (!i || !*val) return 0; } - - return 0; } static int set_string_image_size(void *obj, const AVOption *o, const char *val, int *dst) @@ -456,6 +474,7 @@ int av_opt_set(void *obj, const char *name, const char *val, int search_flags) case AV_OPT_TYPE_FLAGS: case AV_OPT_TYPE_INT: case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_FLOAT: case AV_OPT_TYPE_DOUBLE: case AV_OPT_TYPE_RATIONAL: @@ -756,6 +775,9 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) case AV_OPT_TYPE_INT64: ret = snprintf(buf, sizeof(buf), "%"PRId64, *(int64_t *)dst); break; + case AV_OPT_TYPE_UINT64: + ret = snprintf(buf, sizeof(buf), "%"PRIu64, *(uint64_t *)dst); + break; case AV_OPT_TYPE_FLOAT: ret = snprintf(buf, sizeof(buf), "%f", *(float *)dst); break; @@ -1104,6 +1126,9 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, case AV_OPT_TYPE_INT64: av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); break; + case AV_OPT_TYPE_UINT64: + av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); + break; case AV_OPT_TYPE_DOUBLE: av_log(av_log_obj, AV_LOG_INFO, "%-12s ", ""); break; @@ -1164,6 +1189,7 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, switch (opt->type) { case AV_OPT_TYPE_INT: case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_DOUBLE: case AV_OPT_TYPE_FLOAT: case AV_OPT_TYPE_RATIONAL: @@ -1208,6 +1234,7 @@ static void opt_list(void *obj, void *av_log_obj, const char *unit, break; } case AV_OPT_TYPE_INT: + case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_INT64: { const char *def_const = get_opt_const_name(obj, opt->unit, opt->default_val.i64); if (def_const) @@ -1286,6 +1313,7 @@ void av_opt_set_defaults2(void *s, int mask, int flags) case AV_OPT_TYPE_FLAGS: case AV_OPT_TYPE_INT: case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_DURATION: case AV_OPT_TYPE_CHANNEL_LAYOUT: case AV_OPT_TYPE_PIXEL_FMT: @@ -1646,6 +1674,7 @@ static int opt_size(enum AVOptionType type) case AV_OPT_TYPE_DURATION: case AV_OPT_TYPE_CHANNEL_LAYOUT: case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: return sizeof(int64_t); case AV_OPT_TYPE_DOUBLE: return sizeof(double); @@ -1775,6 +1804,7 @@ int av_opt_query_ranges_default(AVOptionRanges **ranges_arg, void *obj, const ch case AV_OPT_TYPE_BOOL: case AV_OPT_TYPE_INT: case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: case AV_OPT_TYPE_PIXEL_FMT: case AV_OPT_TYPE_SAMPLE_FMT: case AV_OPT_TYPE_FLOAT: @@ -1864,6 +1894,7 @@ int av_opt_is_set_to_default(void *obj, const AVOption *o) case AV_OPT_TYPE_CHANNEL_LAYOUT: case AV_OPT_TYPE_DURATION: case AV_OPT_TYPE_INT64: + case AV_OPT_TYPE_UINT64: read_number(o, dst, NULL, NULL, &i64); return o->default_val.i64 == i64; case AV_OPT_TYPE_STRING: From f69622c5b0d5de54c29fdc3e882ff774ae144330 Mon Sep 17 00:00:00 2001 From: Jean-Yves Avenard Date: Thu, 26 Oct 2017 12:55:35 +0200 Subject: [PATCH 32/69] Bug 1411883 - P2. Update resync documentation. r=gerald MozReview-Commit-ID: 9L6B8qPsUcR --HG-- extra : rebase_source : eba16ab6d1e0f58aa9aec6212c1916c7f2788481 --- media/ffvpx/FILES | 8 +- media/ffvpx/README_MOZILLA | 9 +- media/ffvpx/libavcodec/x86/h264_i386.h | 212 ------------------------- 3 files changed, 9 insertions(+), 220 deletions(-) delete mode 100644 media/ffvpx/libavcodec/x86/h264_i386.h diff --git a/media/ffvpx/FILES b/media/ffvpx/FILES index c404cf9c8ad4..59c81cf40715 100644 --- a/media/ffvpx/FILES +++ b/media/ffvpx/FILES @@ -2,6 +2,7 @@ ./COPYING.LGPLv3 ./compat/va_copy.h ./compat/w32pthreads.h +./compat/atomics/win32/stdatomic.h ./libavcodec/audioconvert.c ./libavcodec/audioconvert.h ./libavcodec/avpicture.c @@ -58,7 +59,6 @@ ./libavcodec/x86/vp9itxfm_16bpp.asm ./libavcodec/x86/vp9itxfm_template.asm ./libavcodec/x86/vp9mc_16bpp.asm -./libavcodec/x86/h264_i386.h ./libavcodec/x86/vp9lpf.asm ./libavcodec/x86/vp9lpf_16bpp.asm ./libavcodec/x86/constants.h @@ -82,7 +82,6 @@ ./libavcodec/bsf.h ./libavcodec/h264dsp.h ./libavcodec/imgconvert.c -./libavcodec/avcodec.symbols ./libavcodec/bsf.c ./libavcodec/decode.c ./libavcodec/decode.h @@ -102,7 +101,6 @@ ./libavcodec/blockdsp.h ./libavcodec/bytestream.h ./libavcodec/codec_desc.c -./libavcodec/dummy_funcs.c ./libavcodec/error_resilience.h ./libavcodec/flac.c ./libavcodec/flac.h @@ -172,12 +170,10 @@ ./libavutil/common.h ./libavutil/crc.c ./libavutil/dict.h -./libavutil/display.c ./libavutil/error.c ./libavutil/error.h ./libavutil/eval.h ./libavutil/ffmath.h -./libavutil/fftime.h ./libavutil/ffversion.h ./libavutil/fifo.c ./libavutil/fifo.h @@ -239,7 +235,6 @@ ./libavutil/samplefmt.h ./libavutil/timestamp.h ./libavutil/opt.c -./libavutil/dummy_funcs.c ./libavutil/imgutils_internal.h ./libavutil/reverse.h ./libavutil/slicethread.c @@ -249,7 +244,6 @@ ./libavutil/avstring.c ./libavutil/avstring.h ./libavutil/avutil.h -./libavutil/avutil.symbols ./libavutil/buffer.c ./libavutil/buffer.h ./libavutil/buffer_internal.h diff --git a/media/ffvpx/README_MOZILLA b/media/ffvpx/README_MOZILLA index f2815630df80..26b59da903f3 100644 --- a/media/ffvpx/README_MOZILLA +++ b/media/ffvpx/README_MOZILLA @@ -37,6 +37,13 @@ $ grep -E ".*_(INDEV|OUTDEV|DECODER|ENCODER|DEMUXER|MUXER|PARSER|FILTER|HWACCEL| All new decoders/muxers/encoders/... should be added in the list of dummy functions found in libavcodec/dummy_funcs.c otherwise linkage will fail on Windows. On other platforms they are optimised out and aren't necessary. +The GNU comm utility is a useful tool to compare and extract only the changes. + +To update the source tree, perform a diff on the files listed in FILES. +The diffs should typically apply to the ffvpx tree. +e.g. something like this would do: +Run in the ffmpeg original tree: +$ for i in `cat $PATH_CENTRAL/media/ffvpx/FILES`; do diff $REV_LASTSYNC HEAD >> patch.diff; done +Then apply patch.diff on the ffvpx tree. -To update the source tree, the files listed in FILES should typically be able to be copied as-is from ffmpeg tree. Compilation will reveal if any files are missing. diff --git a/media/ffvpx/libavcodec/x86/h264_i386.h b/media/ffvpx/libavcodec/x86/h264_i386.h deleted file mode 100644 index 19cd12838131..000000000000 --- a/media/ffvpx/libavcodec/x86/h264_i386.h +++ /dev/null @@ -1,212 +0,0 @@ -/* - * H.26L/H.264/AVC/JVT/14496-10/... encoder/decoder - * Copyright (c) 2003 Michael Niedermayer - * - * This file is part of FFmpeg. - * - * FFmpeg is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * FFmpeg is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with FFmpeg; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - */ - -/** - * @file - * H.264 / AVC / MPEG-4 part10 codec. - * non-MMX i386-specific optimizations for H.264 - * @author Michael Niedermayer - */ - -#ifndef AVCODEC_X86_H264_I386_H -#define AVCODEC_X86_H264_I386_H - -#include - -#include "libavcodec/cabac.h" -#include "cabac.h" - -#if HAVE_INLINE_ASM - -#if ARCH_X86_64 -#define REG64 "r" -#else -#define REG64 "m" -#endif - -//FIXME use some macros to avoid duplicating get_cabac (cannot be done yet -//as that would make optimization work hard) -#if HAVE_7REGS && !BROKEN_COMPILER -#define decode_significance decode_significance_x86 -static int decode_significance_x86(CABACContext *c, int max_coeff, - uint8_t *significant_coeff_ctx_base, - int *index, x86_reg last_off){ - void *end= significant_coeff_ctx_base + max_coeff - 1; - int minusstart= -(intptr_t)significant_coeff_ctx_base; - int minusindex= 4-(intptr_t)index; - int bit; - x86_reg coeff_count; - -#ifdef BROKEN_RELOCATIONS - void *tables; - - __asm__ volatile( - "lea "MANGLE(ff_h264_cabac_tables)", %0 \n\t" - : "=&r"(tables) - : NAMED_CONSTRAINTS_ARRAY(ff_h264_cabac_tables) - ); -#endif - - __asm__ volatile( - "3: \n\t" - - BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3", - "%5", "%q5", "%k0", "%b0", - "%c11(%6)", "%c12(%6)", - AV_STRINGIFY(H264_NORM_SHIFT_OFFSET), - AV_STRINGIFY(H264_LPS_RANGE_OFFSET), - AV_STRINGIFY(H264_MLPS_STATE_OFFSET), - "%13") - - "test $1, %4 \n\t" - " jz 4f \n\t" - "add %10, %1 \n\t" - - BRANCHLESS_GET_CABAC("%4", "%q4", "(%1)", "%3", "%w3", - "%5", "%q5", "%k0", "%b0", - "%c11(%6)", "%c12(%6)", - AV_STRINGIFY(H264_NORM_SHIFT_OFFSET), - AV_STRINGIFY(H264_LPS_RANGE_OFFSET), - AV_STRINGIFY(H264_MLPS_STATE_OFFSET), - "%13") - - "sub %10, %1 \n\t" - "mov %2, %0 \n\t" - "movl %7, %%ecx \n\t" - "add %1, %%"FF_REG_c" \n\t" - "movl %%ecx, (%0) \n\t" - - "test $1, %4 \n\t" - " jnz 5f \n\t" - - "add"FF_OPSIZE" $4, %2 \n\t" - - "4: \n\t" - "add $1, %1 \n\t" - "cmp %8, %1 \n\t" - " jb 3b \n\t" - "mov %2, %0 \n\t" - "movl %7, %%ecx \n\t" - "add %1, %%"FF_REG_c" \n\t" - "movl %%ecx, (%0) \n\t" - "5: \n\t" - "add %9, %k0 \n\t" - "shr $2, %k0 \n\t" - : "=&q"(coeff_count), "+r"(significant_coeff_ctx_base), "+m"(index), - "+&r"(c->low), "=&r"(bit), "+&r"(c->range) - : "r"(c), "m"(minusstart), "m"(end), "m"(minusindex), "m"(last_off), - "i"(offsetof(CABACContext, bytestream)), - "i"(offsetof(CABACContext, bytestream_end)) - TABLES_ARG - : "%"FF_REG_c, "memory" - ); - return coeff_count; -} - -#define decode_significance_8x8 decode_significance_8x8_x86 -static int decode_significance_8x8_x86(CABACContext *c, - uint8_t *significant_coeff_ctx_base, - int *index, uint8_t *last_coeff_ctx_base, const uint8_t *sig_off){ - int minusindex= 4-(intptr_t)index; - int bit; - x86_reg coeff_count; - x86_reg last=0; - x86_reg state; - -#ifdef BROKEN_RELOCATIONS - void *tables; - - __asm__ volatile( - "lea "MANGLE(ff_h264_cabac_tables)", %0 \n\t" - : "=&r"(tables) - : NAMED_CONSTRAINTS_ARRAY(ff_h264_cabac_tables) - ); -#endif - - __asm__ volatile( - "mov %1, %6 \n\t" - "3: \n\t" - - "mov %10, %0 \n\t" - "movzb (%0, %6), %6 \n\t" - "add %9, %6 \n\t" - - BRANCHLESS_GET_CABAC("%4", "%q4", "(%6)", "%3", "%w3", - "%5", "%q5", "%k0", "%b0", - "%c12(%7)", "%c13(%7)", - AV_STRINGIFY(H264_NORM_SHIFT_OFFSET), - AV_STRINGIFY(H264_LPS_RANGE_OFFSET), - AV_STRINGIFY(H264_MLPS_STATE_OFFSET), - "%15") - - "mov %1, %6 \n\t" - "test $1, %4 \n\t" - " jz 4f \n\t" - -#ifdef BROKEN_RELOCATIONS - "movzb %c14(%15, %q6), %6\n\t" -#else - "movzb "MANGLE(ff_h264_cabac_tables)"+%c14(%6), %6\n\t" -#endif - "add %11, %6 \n\t" - - BRANCHLESS_GET_CABAC("%4", "%q4", "(%6)", "%3", "%w3", - "%5", "%q5", "%k0", "%b0", - "%c12(%7)", "%c13(%7)", - AV_STRINGIFY(H264_NORM_SHIFT_OFFSET), - AV_STRINGIFY(H264_LPS_RANGE_OFFSET), - AV_STRINGIFY(H264_MLPS_STATE_OFFSET), - "%15") - - "mov %2, %0 \n\t" - "mov %1, %6 \n\t" - "mov %k6, (%0) \n\t" - - "test $1, %4 \n\t" - " jnz 5f \n\t" - - "add"FF_OPSIZE" $4, %2 \n\t" - - "4: \n\t" - "add $1, %6 \n\t" - "mov %6, %1 \n\t" - "cmp $63, %6 \n\t" - " jb 3b \n\t" - "mov %2, %0 \n\t" - "mov %k6, (%0) \n\t" - "5: \n\t" - "addl %8, %k0 \n\t" - "shr $2, %k0 \n\t" - : "=&q"(coeff_count), "+"REG64(last), "+"REG64(index), "+&r"(c->low), - "=&r"(bit), "+&r"(c->range), "=&r"(state) - : "r"(c), "m"(minusindex), "m"(significant_coeff_ctx_base), - REG64(sig_off), REG64(last_coeff_ctx_base), - "i"(offsetof(CABACContext, bytestream)), - "i"(offsetof(CABACContext, bytestream_end)), - "i"(H264_LAST_COEFF_FLAG_OFFSET_8x8_OFFSET) TABLES_ARG - : "%"FF_REG_c, "memory" - ); - return coeff_count; -} -#endif /* HAVE_7REGS && BROKEN_COMPILER */ - -#endif /* HAVE_INLINE_ASM */ -#endif /* AVCODEC_X86_H264_I386_H */ From 1f08f89c63e1f858326b44436e64bae37bb77e4a Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Thu, 26 Oct 2017 14:46:25 +0200 Subject: [PATCH 33/69] Bug 1411932 - rusturl_get_path should not depend on cannot-be-a-base r=baku MozReview-Commit-ID: 7iwBooZWNxW --HG-- extra : rebase_source : b6622e1c4270629f44f0d263847c47bc06ffb60f --- netwerk/base/rust-url-capi/src/lib.rs | 12 ++---------- netwerk/test/gtest/TestMozURL.cpp | 17 +++++++++++++++++ 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/netwerk/base/rust-url-capi/src/lib.rs b/netwerk/base/rust-url-capi/src/lib.rs index 5d98999fbddb..fa535b79d716 100644 --- a/netwerk/base/rust-url-capi/src/lib.rs +++ b/netwerk/base/rust-url-capi/src/lib.rs @@ -170,11 +170,7 @@ pub extern "C" fn rusturl_get_filepath(urlptr: Option<&Url>, cont: &mut nsACStri return NS_ERROR_INVALID_ARG; }; - if url.cannot_be_a_base() { - cont.assign(""); - } else { - cont.assign(&url[Position::BeforePath..Position::AfterPath]); - } + cont.assign(&url.path()); NS_OK } @@ -186,11 +182,7 @@ pub extern "C" fn rusturl_get_path(urlptr: Option<&Url>, cont: &mut nsACString) return NS_ERROR_INVALID_ARG; }; - if url.cannot_be_a_base() { - cont.assign(""); - } else { - cont.assign(&url[Position::BeforePath..]); - } + cont.assign(&url[Position::BeforePath..]); NS_OK } diff --git a/netwerk/test/gtest/TestMozURL.cpp b/netwerk/test/gtest/TestMozURL.cpp index a25e43c97721..0b29271b4e51 100644 --- a/netwerk/test/gtest/TestMozURL.cpp +++ b/netwerk/test/gtest/TestMozURL.cpp @@ -120,6 +120,23 @@ TEST(TestMozURL, InitWithBase) ASSERT_TRUE(out.EqualsLiteral("https://example.net/a/c.png")); } +TEST(TestMozURL, Path) +{ + nsAutoCString href("about:blank"); + RefPtr url; + ASSERT_EQ(MozURL::Init(getter_AddRefs(url), href), NS_OK); + nsAutoCString out; + + ASSERT_EQ(url->GetSpec(out), NS_OK); + ASSERT_TRUE(out.EqualsLiteral("about:blank")); + + ASSERT_EQ(url->GetScheme(out), NS_OK); + ASSERT_TRUE(out.EqualsLiteral("about")); + + ASSERT_EQ(url->GetFilePath(out), NS_OK); + ASSERT_TRUE(out.EqualsLiteral("blank")); +} + TEST(TestMozURL, HostPort) { nsAutoCString href("https://user:pass@example.net:1234/path?query#ref"); From b5bdcb596fa166348a6ee2eeb8d9e9d5a10f05e3 Mon Sep 17 00:00:00 2001 From: Andi-Bogdan Postelnicu Date: Thu, 26 Oct 2017 12:20:26 +0300 Subject: [PATCH 34/69] Bug 1411605 - don't memset the entire mCodecSpecificInfo. r=dminor MozReview-Commit-ID: DEJXdfAuZrl --HG-- extra : rebase_source : 6ebbf8191d02e8b55bf05e9a0df1a47586defbf6 --- .../signaling/src/media-conduit/WebrtcGmpVideoCodec.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/media/webrtc/signaling/src/media-conduit/WebrtcGmpVideoCodec.cpp b/media/webrtc/signaling/src/media-conduit/WebrtcGmpVideoCodec.cpp index d236ae29c441..d19eb998c6a0 100644 --- a/media/webrtc/signaling/src/media-conduit/WebrtcGmpVideoCodec.cpp +++ b/media/webrtc/signaling/src/media-conduit/WebrtcGmpVideoCodec.cpp @@ -164,7 +164,9 @@ WebrtcGmpVideoEncoder::InitEncode(const webrtc::VideoCodec* aCodecSettings, codecParams.mMaxFramerate = aCodecSettings->maxFramerate; mMaxPayloadSize = aMaxPayloadSize; - memset(&mCodecSpecificInfo, 0, sizeof(webrtc::CodecSpecificInfo)); + memset(&mCodecSpecificInfo.codecSpecific, + 0, + sizeof(mCodecSpecificInfo.codecSpecific)); mCodecSpecificInfo.codecType = webrtc::kVideoCodecH264; mCodecSpecificInfo.codecSpecific.H264.packetization_mode = aCodecSettings->H264().packetizationMode == 1 ? From cef9ed856aff7af06d89c5850c3695d083b1b084 Mon Sep 17 00:00:00 2001 From: Attila Craciun Date: Thu, 26 Oct 2017 16:07:39 +0300 Subject: [PATCH 35/69] Backed out changeset f80976fdf539 (bug 1399800) for failing in /builds/worker/checkouts/gecko/testing/talos/talos/unittests/conftest.py:1:1 r=backout CLOSED TREE. Backed out changeset f80976fdf539 (bug 1399800) --HG-- rename : testing/talos/talos/unittests/__init__.py => testing/talos/tests/__init__.py rename : testing/talos/talos/unittests/browser_output.ts.txt => testing/talos/tests/browser_output.ts.txt rename : testing/talos/talos/unittests/browser_output.tsvg.txt => testing/talos/tests/browser_output.tsvg.txt rename : testing/talos/talos/unittests/profile.tgz => testing/talos/tests/profile.tgz rename : testing/talos/talos/unittests/ps-Acj.out => testing/talos/tests/ps-Acj.out rename : testing/talos/talos/unittests/test_talosconfig_browser_config.json => testing/talos/tests/test_talosconfig_browser_config.json rename : testing/talos/talos/unittests/test_talosconfig_test_config.json => testing/talos/tests/test_talosconfig_test_config.json rename : testing/talos/talos/unittests/xrestop_output.txt => testing/talos/tests/xrestop_output.txt --- build/virtualenv_packages.txt | 1 - moz.build | 1 - testing/talos/talos/filter.py | 61 +- testing/talos/talos/test.py | 2 - testing/talos/talos/unittests/conftest.py | 17 - testing/talos/talos/unittests/python.ini | 6 - .../talos/talos/unittests/test_cmanager.py | 0 .../talos/unittests/test_cmanager_base.py | 0 .../talos/unittests/test_cmanager_linux.py | 0 .../talos/unittests/test_cmanager_mac.py | 0 .../talos/unittests/test_cmanger_win32.py | 0 testing/talos/talos/unittests/test_cmdline.py | 0 testing/talos/talos/unittests/test_config.py | 1169 ----------------- testing/talos/talos/unittests/test_ffsetup.py | 90 -- .../talos/unittests/test_gecko_profile.py | 0 .../talos/unittests/test_mainthreadio.py | 0 .../unittests/test_mitmproxy/__init__.py | 0 testing/talos/talos/unittests/test_output.py | 0 .../unittests/test_pageloader/__init__.py | 0 .../talos/unittests/test_profiler/__init__.py | 0 .../talos/talos/unittests/test_run_tests.py | 0 .../talos/unittests/test_scripts/__init__.py | 0 .../unittests/test_startup_test/__init__.py | 0 .../unittests/test_talos_powers/__init__.py | 0 .../talos/unittests/test_talos_process.py | 0 testing/talos/talos/unittests/test_test.py | 206 --- .../talos/unittests/test_tests/__init__.py | 0 testing/talos/talos/unittests/test_ttest.py | 0 .../talos/talos/unittests/test_whitelist.py | 0 .../talos/unittests/test_xtalos/__init__.py | 0 .../{talos/unittests => tests}/__init__.py | 0 .../unittests => tests}/browser_output.ts.txt | 0 .../browser_output.tsvg.txt | 0 .../{talos/unittests => tests}/profile.tgz | Bin .../{talos/unittests => tests}/ps-Acj.out | 0 testing/talos/tests/test_browser_output.py | 192 +++ testing/talos/tests/test_filter.py | 81 ++ testing/talos/tests/test_heavy.py | 163 +++ testing/talos/tests/test_results.py | 82 ++ testing/talos/tests/test_talosconfig.py | 158 +++ .../test_talosconfig_browser_config.json | 0 .../test_talosconfig_test_config.json | 0 testing/talos/tests/test_urlsplit.py | 56 + testing/talos/tests/test_utils.py | 43 + testing/talos/tests/test_xrestop.py | 66 + .../unittests => tests}/xrestop_output.txt | 0 46 files changed, 842 insertions(+), 1552 deletions(-) delete mode 100644 testing/talos/talos/unittests/conftest.py delete mode 100644 testing/talos/talos/unittests/python.ini delete mode 100644 testing/talos/talos/unittests/test_cmanager.py delete mode 100644 testing/talos/talos/unittests/test_cmanager_base.py delete mode 100644 testing/talos/talos/unittests/test_cmanager_linux.py delete mode 100644 testing/talos/talos/unittests/test_cmanager_mac.py delete mode 100644 testing/talos/talos/unittests/test_cmanger_win32.py delete mode 100644 testing/talos/talos/unittests/test_cmdline.py delete mode 100644 testing/talos/talos/unittests/test_config.py delete mode 100644 testing/talos/talos/unittests/test_ffsetup.py delete mode 100644 testing/talos/talos/unittests/test_gecko_profile.py delete mode 100644 testing/talos/talos/unittests/test_mainthreadio.py delete mode 100644 testing/talos/talos/unittests/test_mitmproxy/__init__.py delete mode 100644 testing/talos/talos/unittests/test_output.py delete mode 100644 testing/talos/talos/unittests/test_pageloader/__init__.py delete mode 100644 testing/talos/talos/unittests/test_profiler/__init__.py delete mode 100644 testing/talos/talos/unittests/test_run_tests.py delete mode 100644 testing/talos/talos/unittests/test_scripts/__init__.py delete mode 100644 testing/talos/talos/unittests/test_startup_test/__init__.py delete mode 100644 testing/talos/talos/unittests/test_talos_powers/__init__.py delete mode 100644 testing/talos/talos/unittests/test_talos_process.py delete mode 100644 testing/talos/talos/unittests/test_test.py delete mode 100644 testing/talos/talos/unittests/test_tests/__init__.py delete mode 100644 testing/talos/talos/unittests/test_ttest.py delete mode 100644 testing/talos/talos/unittests/test_whitelist.py delete mode 100644 testing/talos/talos/unittests/test_xtalos/__init__.py rename testing/talos/{talos/unittests => tests}/__init__.py (100%) rename testing/talos/{talos/unittests => tests}/browser_output.ts.txt (100%) rename testing/talos/{talos/unittests => tests}/browser_output.tsvg.txt (100%) rename testing/talos/{talos/unittests => tests}/profile.tgz (100%) rename testing/talos/{talos/unittests => tests}/ps-Acj.out (100%) create mode 100644 testing/talos/tests/test_browser_output.py create mode 100755 testing/talos/tests/test_filter.py create mode 100644 testing/talos/tests/test_heavy.py create mode 100755 testing/talos/tests/test_results.py create mode 100644 testing/talos/tests/test_talosconfig.py rename testing/talos/{talos/unittests => tests}/test_talosconfig_browser_config.json (100%) rename testing/talos/{talos/unittests => tests}/test_talosconfig_test_config.json (100%) create mode 100755 testing/talos/tests/test_urlsplit.py create mode 100644 testing/talos/tests/test_utils.py create mode 100755 testing/talos/tests/test_xrestop.py rename testing/talos/{talos/unittests => tests}/xrestop_output.txt (100%) diff --git a/build/virtualenv_packages.txt b/build/virtualenv_packages.txt index c02a7da6d27f..506875f2338f 100644 --- a/build/virtualenv_packages.txt +++ b/build/virtualenv_packages.txt @@ -42,7 +42,6 @@ mozilla.pth:testing/marionette/client mozilla.pth:testing/marionette/harness mozilla.pth:testing/marionette/harness/marionette_harness/runner/mixins/browsermob-proxy-py mozilla.pth:testing/marionette/puppeteer/firefox -mozilla.pth:testing/talos packages.txt:testing/mozbase/packages.txt mozilla.pth:tools mozilla.pth:testing/web-platform diff --git a/moz.build b/moz.build index a89c8794f91d..5bbaea6dfd9d 100644 --- a/moz.build +++ b/moz.build @@ -85,7 +85,6 @@ if CONFIG['MOZ_WIDGET_TOOLKIT'] or not CONFIG['MOZ_BUILD_APP']: 'layout/tools/reftest/selftest/python.ini', 'testing/marionette/harness/marionette_harness/tests/harness_unit/python.ini', 'testing/mochitest/tests/python/python.ini', - 'testing/talos/talos/unittests/python.ini' ] CONFIGURE_SUBST_FILES += [ diff --git a/testing/talos/talos/filter.py b/testing/talos/talos/filter.py index 7e3ea2caab90..2880ac711dee 100644 --- a/testing/talos/talos/filter.py +++ b/testing/talos/talos/filter.py @@ -18,8 +18,6 @@ Each filter is a simple function, but it also have attached a special # data is filtered """ -_FILTERS = {} - class Filter(object): def __init__(self, func, *args, **kwargs): @@ -47,54 +45,9 @@ def define_filter(func): func.prepare = prepare return func - -def register_filter(func): - """ - all filters defined in this module - should be registered - """ - global _FILTERS - - _FILTERS[func.__name__] = func - return func - - -def filters(*args): - global _FILTERS - - filters_ = [_FILTERS[filter] for filter in args] - return filters_ - - -def apply(data, filters): - for filter in filters: - data = filter(data) - - return data - - -def parse(string_): - - def to_number(string_number): - try: - return int(string_number) - except ValueError: - return float(string_number) - - tokens = string_.split(":") - - func = tokens[0] - digits = [] - if len(tokens) > 1: - digits.extend(tokens[1].split(",")) - digits = [to_number(digit) for digit in digits] - - return [func, digits] - - # filters that return a scalar -@register_filter + @define_filter def mean(series): """ @@ -103,7 +56,6 @@ def mean(series): return sum(series)/float(len(series)) -@register_filter @define_filter def median(series): """ @@ -119,7 +71,6 @@ def median(series): return 0.5*(series[middle-1] + series[middle]) -@register_filter @define_filter def variance(series): """ @@ -131,7 +82,6 @@ def variance(series): return variance -@register_filter @define_filter def stddev(series): """ @@ -140,7 +90,6 @@ def stddev(series): return variance(series)**0.5 -@register_filter @define_filter def dromaeo(series): """ @@ -157,14 +106,12 @@ def dromaeo(series): return geometric_mean(means) -@register_filter @define_filter def dromaeo_chunks(series, size): for i in range(0, len(series), size): yield series[i:i+size] -@register_filter @define_filter def geometric_mean(series): """ @@ -178,7 +125,6 @@ def geometric_mean(series): # filters that return a list -@register_filter @define_filter def ignore_first(series, number=1): """ @@ -190,7 +136,6 @@ def ignore_first(series, number=1): return series[number:] -@register_filter @define_filter def ignore(series, function): """ @@ -205,7 +150,6 @@ def ignore(series, function): return series -@register_filter @define_filter def ignore_max(series): """ @@ -214,7 +158,6 @@ def ignore_max(series): return ignore(series, max) -@register_filter @define_filter def ignore_min(series): """ @@ -223,7 +166,6 @@ def ignore_min(series): return ignore(series, min) -@register_filter @define_filter def v8_subtest(series, name): """ @@ -248,7 +190,6 @@ def v8_subtest(series, name): return reference[name] / geometric_mean(series) -@register_filter @define_filter def responsiveness_Metric(val_list): return sum([float(x)*float(x) / 1000000.0 for x in val_list]) diff --git a/testing/talos/talos/test.py b/testing/talos/talos/test.py index e93a24d04a55..99648b603650 100644 --- a/testing/talos/talos/test.py +++ b/testing/talos/talos/test.py @@ -29,8 +29,6 @@ def test_dict(): class Test(object): """abstract base class for a Talos test case""" - __test__ = False # not pytest - cycles = None # number of cycles keys = [] desktop = True diff --git a/testing/talos/talos/unittests/conftest.py b/testing/talos/talos/unittests/conftest.py deleted file mode 100644 index c012037412a1..000000000000 --- a/testing/talos/talos/unittests/conftest.py +++ /dev/null @@ -1,17 +0,0 @@ -import os - -import pytest - -here = os.path.realpath(__file__) -__TESTS_DIR = os.path.join(os.path.dirname(os.path.dirname(here)), 'tests') - - -def remove_develop_files(starting_dir=__TESTS_DIR): - for file_name in os.listdir(starting_dir): - - file_path = os.path.join(starting_dir, file_name) - - if file_name.endswith('.develop') and os.path.isfile(file_path): - os.remove(file_path) - elif os.path.isdir(file_path): - remove_develop_files(file_path) diff --git a/testing/talos/talos/unittests/python.ini b/testing/talos/talos/unittests/python.ini deleted file mode 100644 index 5bfc864d7810..000000000000 --- a/testing/talos/talos/unittests/python.ini +++ /dev/null @@ -1,6 +0,0 @@ -[DEFAULT] -subsuite = talos - -[test_config.py] -[test_ffsetup.py] -[test_test.py] diff --git a/testing/talos/talos/unittests/test_cmanager.py b/testing/talos/talos/unittests/test_cmanager.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_cmanager_base.py b/testing/talos/talos/unittests/test_cmanager_base.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_cmanager_linux.py b/testing/talos/talos/unittests/test_cmanager_linux.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_cmanager_mac.py b/testing/talos/talos/unittests/test_cmanager_mac.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_cmanger_win32.py b/testing/talos/talos/unittests/test_cmanger_win32.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_cmdline.py b/testing/talos/talos/unittests/test_cmdline.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_config.py b/testing/talos/talos/unittests/test_config.py deleted file mode 100644 index 33a2fb6b44ca..000000000000 --- a/testing/talos/talos/unittests/test_config.py +++ /dev/null @@ -1,1169 +0,0 @@ -# test config['xperf_path'] doens't have double quotes -# test config['webserver'] has free port -from __future__ import absolute_import - -import copy -import os - -import mock - -import mozunit -import pytest -import conftest - -from talos.config import ( - get_active_tests, get_test, get_config, get_browser_config, - get_configs, ConfigurationError, DEFAULTS) -from talos.test import PageloaderTest -from talos import utils - -ORIGINAL_DEFAULTS = copy.deepcopy(DEFAULTS) - - -class mock_test(PageloaderTest): - keys = ['tpmanifest', 'tpcycles', 'tppagecycles', 'tprender', 'tpchrome', - 'tpmozafterpaint', 'fnbpaint', 'tploadnocache', 'firstpaint', 'userready', - 'testeventmap', 'base_vs_ref', 'mainthread', 'resolution', 'cycles', - 'gecko_profile', 'gecko_profile_interval', 'gecko_profile_entries', - 'tptimeout', 'win_counters', 'w7_counters', 'linux_counters', 'mac_counters', - 'tpscrolltest', 'xperf_counters', 'timeout', 'shutdown', 'responsiveness', - 'profile_path', 'xperf_providers', 'xperf_user_providers', 'xperf_stackwalk', - 'format_pagename', 'filters', 'preferences', 'extensions', 'setup', 'cleanup', - 'lower_is_better', 'alert_threshold', 'unit', 'webextensions', 'profile', - 'tpmozafterpaint', 'url'] - - tpmozafterpaint = 'value' - firstpaint = 'value' - userready = 'value' - fnbpaint = 'value' - - -class Test_get_active_tests(object): - def test_raises_exception_for_undefined_test(self): - with pytest.raises(ConfigurationError): - get_active_tests({'activeTests': 'undefined_test'}) - - with pytest.raises(ConfigurationError): - get_active_tests({'activeTests': ' undefined_test '}) - - with pytest.raises(ConfigurationError): - get_active_tests({'activeTests': 'undef_test:undef_test2:undef_test3'}) - - -class Test_get_test(object): - global_overrides = { - 'tpmozafterpaint': 'overriden', - 'firstpaint': 'overriden', - 'userready': 'overriden', - 'fnbpaint': 'overriden' - } - - config = {'webserver': 'test_webserver'} - - def test_doesnt_override_specific_keys_unless_they_are_null(self): - test_instance = mock_test() - test_dict = get_test({}, self.global_overrides, [], test_instance) - - assert test_dict['tpmozafterpaint'] == 'value' - assert test_dict['firstpaint'] == 'value' - assert test_dict['userready'] == 'value' - assert test_dict['fnbpaint'] == 'value' - - # nulls still get overriden - test_instance = mock_test(tpmozafterpaint=None, firstpaint=None, userready=None, fnbpaint=None) - test_dict = get_test({}, self.global_overrides, [], test_instance) - - assert test_dict['tpmozafterpaint'] == 'overriden' - assert test_dict['firstpaint'] == 'overriden' - assert test_dict['userready'] == 'overriden' - assert test_dict['fnbpaint'] == 'overriden' - - @mock.patch('talos.config.open', create=True) - def test_interpolate_keys(self, mock_open): - mock_open.return_value = mock.MagicMock(readlines=lambda: []) - - test_instance = mock_test(url='${talos}/test_page.html', - tpmanifest='${talos}/file.manifest') - - - test_dict = get_test(self.config, self.global_overrides, [], test_instance) - assert test_dict['url'].startswith('http://test_webserver/') - assert '${talos}' not in test_dict['url'] - assert '${talos}' not in test_dict['tpmanifest'] - - def test_build_tpmanifest(self, tmpdir): - manifest_file = tmpdir.join('file.manifest').ensure(file=True) - test_instance = mock_test(url='test_page.html', - tpmanifest=str(manifest_file)) - - test_dict = get_test(self.config, self.global_overrides, [], test_instance) - assert test_dict['tpmanifest'].endswith('.develop') - - def test_add_counters(self): - test_instance = mock_test(linux_counters=None, mac_counters=[], win_counters=['counter_a'], - w7_counters=['counter_a', 'counter_b'], xperf_counters=['counter_a', 'counter_extra']) - - counters = ['counter_a', 'counter_b', 'counter_c'] - test_dict = get_test( - self.config, self.global_overrides, counters, test_instance) - - assert test_dict['linux_counters'] == counters - assert test_dict['mac_counters'] == counters - assert test_dict['win_counters'] == counters - assert test_dict['w7_counters'] == counters - assert set(test_dict['xperf_counters']) == set(counters + ['counter_extra']) - - -class Test_get_browser_config(object): - required = ('preferences', 'extensions', 'browser_path', 'browser_wait', - 'extra_args', 'buildid', 'env', 'init_url', 'webserver') - optional = list({'bcontroller_config': '${talos}/bcontroller.json', - 'branch_name': '', - 'child_process': 'plugin-container', - 'develop': False, - 'e10s': False, - 'process': '', - 'framework': 'talos', - 'repository': None, - 'sourcestamp': None, - 'symbols_path': None, - 'test_timeout': 1200, - 'xperf_path': None, - 'error_filename': None, - 'no_upload_results': False, - 'enable_stylo': False, - 'disable_stylo': False, - 'stylothreads': 0, - 'subtests': None, - }.keys()) - - def test_that_contains_title(self): - config_no_optionals = dict.fromkeys(self.required, '') - config_no_optionals.update(title='is_mandatory') - - browser_config = get_browser_config(config_no_optionals) - assert browser_config['title'] == 'is_mandatory' - - def test_raises_keyerror_for_missing_title(self): - config_missing_title = dict.fromkeys(self.required, '') - - with pytest.raises(KeyError): - get_browser_config(config_missing_title) - - def test_raises_keyerror_for_required_keys(self): - config_missing_required = dict.fromkeys(self.required, '') - config_missing_required.update(title= 'is_mandatory') - del config_missing_required['preferences'] - - with pytest.raises(KeyError): - get_browser_config(config_missing_required) - - def test_doesnt_raise_on_missing_optionals(self): - config_missing_optionals = dict.fromkeys(self.required, '') - config_missing_optionals['title'] = 'is_mandatory' - - try: - get_browser_config(config_missing_optionals) - except KeyError: - pytest.fail('Must not raise exception on missing optional') - - def test_browser_keys_are_subset_from_config(self): - config_extensive = dict.fromkeys(self.required, '') - config_extensive.update(dict.fromkeys(self.optional, '')) - config_extensive['title'] = 'is_mandatory' - config_extensive['extra_custom_key'] = 'value' - - browser_config = get_browser_config(config_extensive) - assert browser_config != config_extensive - assert set(browser_config.keys()).issubset(set(config_extensive.keys())) - - -class Test_get_config(object): - @classmethod - def setup_class(cls): - cls.argv = '--suite other-e10s --mainthread -e /some/random/path'.split() - cls.argv_unprovided_tests = '-e /some/random/path'.split() - cls.argv_unknown_suite = '--suite random-unknown-suite -e /some/random/path'.split() - cls.argv_overrides_defaults = ''' - --suite other-e10s - --executablePath /some/random/path - --cycles 20 - --geckoProfile - --geckoProfileInterval 1000 - --geckoProfileEntries 1000 - --mainthread - --tpcycles 20 - --mozAfterPaint - --firstPaint - --firstNonBlankPaint - --userReady - --tppagecycles 20 - '''.split() - - cls.argv_ts_paint = '--activeTests ts_paint -e /some/random/path'.split() - cls.argv_ts_paint_webext = '--activeTests ts_paint_webext -e /some/random/path'.split() - cls.argv_ts_paint_heavy = '--activeTests ts_paint_heavy -e /some/random/path'.split() - cls.argv_sessionrestore = '--activeTests sessionrestore -e /some/random/path'.split() - cls.argv_sessionrestore_no_auto_restore = ''' - --activeTests sessionrestore_no_auto_restore - -e /some/random/path - '''.split() - cls.argv_sessionrestore_many_windows = ''' - --activeTests sessionrestore_many_windows - -e /some/random/path - '''.split() - cls.argv_tresize = '--activeTests tresize -e /some/random/path'.split() - cls.argv_tpaint = '--activeTests tpaint -e /some/random/path'.split() - cls.argv_cpstartup = '--activeTests cpstartup -e /some/random/path'.split() - cls.argv_tabpaint = '--activeTests tabpaint -e /some/random/path'.split() - cls.argv_tps = '--activeTests tps -e /some/random/path'.split() - cls.argv_tart = '--activeTests tart -e /some/random/path'.split() - cls.argv_cart = '--activeTests cart -e /some/random/path'.split() - cls.argv_damp = '--activeTests damp -e /some/random/path'.split() - cls.argv_glterrain = '--activeTests glterrain -e /some/random/path'.split() - cls.argv_glvideo = '--activeTests glvideo -e /some/random/path'.split() - cls.argv_tp5n = '--activeTests tp5n -e /some/random/path'.split() - cls.argv_tp5o = '--activeTests tp5o -e /some/random/path'.split() - cls.argv_tp5o_webext = '--activeTests tp5o_webext -e /some/random/path'.split() - cls.argv_tp5o_scroll = '--activeTests tp5o_scroll -e /some/random/path'.split() - cls.argv_v8_7 = '--activeTests v8_7 -e /some/random/path'.split() - cls.argv_kraken = '--activeTests kraken -e /some/random/path'.split() - cls.argv_basic_compositor_video = '--activeTests basic_compositor_video -e /some/random/path'.split() - cls.argv_tcanvasmark = '--activeTests tcanvasmark -e /some/random/path'.split() - cls.argv_dromaeo_css = '--activeTests dromaeo_css -e /some/random/path'.split() - cls.argv_dromaeo_dom = '--activeTests dromaeo_dom -e /some/random/path'.split() - cls.argv_tsvgm = '--activeTests tsvgm -e /some/random/path'.split() - cls.argv_tsvgx = '--activeTests tsvgx -e /some/random/path'.split() - cls.argv_tsvg_static = '--activeTests tsvg_static -e /some/random/path'.split() - cls.argv_tsvgr_opacity = '--activeTests tsvgr_opacity -e /some/random/path'.split() - cls.argv_tscrollx = '--activeTests tscrollx -e /some/random/path'.split() - cls.argv_a11yr = '--activeTests a11yr -e /some/random/path'.split() - cls.argv_speedometer = '--activeTests speedometer -e /some/random/path'.split() - cls.argv_perf_reftest = '--activeTests perf_reftest -e /some/random/path'.split() - cls.argv_perf_reftest_singletons = '--activeTests perf_reftest_singletons -e /some/random/path'.split() - cls.argv_quantum_pageload_google = '--activeTests quantum_pageload_google -e /some/random/path'.split() - cls.argv_quantum_pageload_youtube = '--activeTests quantum_pageload_youtube -e /some/random/path'.split() - cls.argv_quantum_pageload_amazon = '--activeTests quantum_pageload_amazon -e /some/random/path'.split() - cls.argv_quantum_pageload_facebook = '--activeTests quantum_pageload_facebook -e /some/random/path'.split() - cls.argv_tp6_google = '--activeTests tp6_google -e /some/random/path'.split() - cls.argv_tp6_google_heavy = '--activeTests tp6_google_heavy -e /some/random/path'.split() - cls.argv_tp6_youtube = '--activeTests tp6_youtube -e /some/random/path'.split() - cls.argv_tp6_youtube_heavy = '--activeTests tp6_youtube_heavy -e /some/random/path'.split() - cls.argv_tp6_amazon = '--activeTests tp6_amazon -e /some/random/path'.split() - cls.argv_tp6_amazon_heavy = '--activeTests tp6_amazon_heavy -e /some/random/path'.split() - cls.argv_tp6_facebook = '--activeTests tp6_facebook -e /some/random/path'.split() - cls.argv_tp6_facebook_heavy = '--activeTests tp6_facebook_heavy -e /some/random/path'.split() - - @classmethod - def teardown_class(cls): - conftest.remove_develop_files() - - def test_correctly_overrides_test_valus(self): - config = get_config(self.argv) - assert bool(config) is True - - # no null values - null_keys = [key for key, val in config.iteritems() if val is None] - assert len(null_keys) == 0 - - # expected keys are there - assert config['browser_path'] == '/some/random/path' - assert config['suite'] == 'other-e10s' - assert config['mainthread'] == True - - # default values overriden - config = get_config(self.argv_overrides_defaults) - assert config['basetest'] == ORIGINAL_DEFAULTS['basetest'] - - def test_config_has_tests(self): - config = get_config(self.argv) - assert len(config['tests']) > 0 - - def test_global_variable_isnt_modified(self): - get_config(self.argv) - assert ORIGINAL_DEFAULTS == DEFAULTS - - def test_raises_except_if_unprovided_tests_on_cli(self): - with pytest.raises(ConfigurationError): - get_config(self.argv_unprovided_tests) - - with pytest.raises(ConfigurationError): - get_config(self.argv_unknown_suite) - - def test_ts_paint_has_expected_attributes(self): - config = get_config(self.argv_ts_paint) - test_config = config['tests'][0] - - assert test_config['name'] == 'ts_paint' - assert test_config['cycles'] == 20 - assert test_config['timeout'] == 150 - assert test_config['gecko_profile_startup'] is True - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['url'] != 'startup_test/tspaint_test.html' # interpolation was done - assert test_config['shutdown'] is False - assert test_config['xperf_counters'] == [] - # TODO: these don't work; is this a bug? - # assert test_config['win7_counters'] == [] - assert test_config['filters'] is not None - assert test_config['tpmozafterpaint'] is True - # assert test_config['mainthread'] is False - # assert test_config['responsiveness'] is False - # assert test_config['unit'] == 'ms' - - def test_ts_paint_webext_has_expected_attributes(self): - config = get_config(self.argv_ts_paint_webext) - test_config = config['tests'][0] - - assert test_config['name'] == 'ts_paint_webext' - assert test_config['cycles'] == 20 - assert test_config['timeout'] == 150 - assert test_config['gecko_profile_startup'] is True - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['url'] != 'startup_test/tspaint_test.html' # interpolation was done - assert test_config['shutdown'] is False - assert test_config['xperf_counters'] == [] - # TODO: these don't work; is this a bug? - # assert test_config['win7_counters'] == [] - assert test_config['filters'] is not None - assert test_config['tpmozafterpaint'] is True - # assert test_config['mainthread'] is False - # assert test_config['responsiveness'] is False - # assert test_config['unit'] == 'ms' - # TODO: this isn't overriden - # assert test_config['webextensions'] != '${talos}/webextensions/dummy/dummy-signed.xpi' - assert test_config['preferences'] == {'xpinstall.signatures.required': False} - - def test_ts_paint_heavy_has_expected_attributes(self): - config = get_config(self.argv_ts_paint_heavy) - test_config = config['tests'][0] - - assert test_config['name'] == 'ts_paint_heavy' - assert test_config['cycles'] == 20 - assert test_config['timeout'] == 150 - assert test_config['gecko_profile_startup'] is True - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['url'] != 'startup_test/tspaint_test.html' # interpolation was done - assert test_config['shutdown'] is False - assert test_config['xperf_counters'] == [] - # TODO: this doesn't work; is this a bug? - # assert test_config['win7_counters'] == [] - assert test_config['filters'] is not None - assert test_config['tpmozafterpaint'] is True - # assert test_config['mainthread'] is False - # assert test_config['responsiveness'] is False - # assert test_config['unit'] == 'ms' - assert test_config['profile'] == 'simple' - - def test_sessionrestore_has_expected_attributes(self): - config = get_config(self.argv_sessionrestore) - test_config = config['tests'][0] - - assert test_config['name'] == 'sessionrestore' - assert test_config['cycles'] == 10 - assert test_config['timeout'] == 900 - assert test_config['gecko_profile_startup'] is True - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['shutdown'] is False - assert test_config['reinstall'] == ['sessionstore.jsonlz4', 'sessionstore.js', 'sessionCheckpoints.json'] - assert test_config['url'] == 'about:home' - assert test_config['preferences'] == {'browser.startup.page': 3} - # assert test_config['unit'] == 'ms' - - def test_sesssionrestore_no_auto_restore_has_expected_attributes(self): - config = get_config(self.argv_sessionrestore_no_auto_restore) - test_config = config['tests'][0] - - assert test_config['name'] == 'sessionrestore_no_auto_restore' - assert test_config['cycles'] == 10 - assert test_config['timeout'] == 900 - assert test_config['gecko_profile_startup'] is True - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['shutdown'] is False - assert test_config['reinstall'] == ['sessionstore.jsonlz4', 'sessionstore.js', 'sessionCheckpoints.json'] - assert test_config['url'] == 'about:home' - assert test_config['preferences'] == {'browser.startup.page': 1} - # assert test_config['unit'] == 'ms' - - def test_sessionrestore_many_windows_has_expected_attributes(self): - config = get_config(self.argv_sessionrestore_many_windows) - test_config = config['tests'][0] - - assert test_config['name'] == 'sessionrestore_many_windows' - assert test_config['cycles'] == 10 - assert test_config['timeout'] == 900 - assert test_config['gecko_profile_startup'] is True - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['shutdown'] is False - assert test_config['reinstall'] == ['sessionstore.jsonlz4', 'sessionstore.js', 'sessionCheckpoints.json'] - assert test_config['url'] == 'about:home' - assert test_config['preferences'] == {'browser.startup.page': 3} - # assert test_config['unit'] == 'ms' - - def test_tresize_has_expected_attributes(self): - config = get_config(self.argv_tresize) - test_config = config['tests'][0] - - assert test_config['name'] == 'tresize' - assert test_config['cycles'] == 20 - assert test_config['url'] != 'startup_test/tresize/addon/content/tresize-test.html' - assert test_config['timeout'] == 150 - assert test_config['gecko_profile_interval'] == 2 - assert test_config['gecko_profile_entries'] == 1000000 - assert test_config['tpmozafterpaint'] is True - assert test_config['filters'] is not None - # assert test_config['unit'] == 'ms' - - def test_tpaint_has_expected_attributes(self): - config = get_config(self.argv_tpaint) - test_config = config['tests'][0] - - assert test_config['name'] == 'tpaint' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 20 - assert test_config['timeout'] == 300 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['tpmozafterpaint'] is True - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['preferences'] == {'security.data_uri.block_toplevel_data_uri_navigations': False} - - def test_cpstartup_has_expected_attributes(self): - config = get_config(self.argv_cpstartup) - test_config = config['tests'][0] - - assert test_config['name'] == 'cpstartup' - assert test_config['tpcycles'] == 1 - assert test_config['tpmanifest'] != '${talos}/tests/cpstartup/cpstartup.manifest' - assert test_config['tppagecycles'] == 20 - assert test_config['gecko_profile_entries'] == 1000000 - assert test_config['tploadnocache'] is True - assert test_config['unit'] == 'ms' - assert test_config['preferences'] == { - 'browser.link.open_newwindow': 3, - 'browser.link.open_newwindow.restriction': 2, - } - - def test_tabpaint_has_expected_attributes(self): - config = get_config(self.argv_tabpaint) - test_config = config['tests'][0] - - assert test_config['name'] == 'tabpaint' - assert test_config['tpcycles'] == 1 - assert test_config['tpmanifest'] != '${talos}/tests/tabpaint/tabpaint.manifest' - assert test_config['tppagecycles'] == 20 - assert test_config['gecko_profile_entries'] == 1000000 - assert test_config['tploadnocache'] is True - assert test_config['unit'] == 'ms' - assert test_config['preferences'] == { - 'browser.link.open_newwindow': 3, - 'browser.link.open_newwindow.restriction': 2, - } - - def test_tps_has_expected_attributes(self): - config = get_config(self.argv_tps) - test_config = config['tests'][0] - - assert test_config['name'] == 'tps' - assert test_config['tpcycles'] == 1 - assert test_config['tpmanifest'] != '${talos}/tests/tabswitch/tps.manifest' - assert test_config['tppagecycles'] == 5 - assert test_config['gecko_profile_entries'] == 5000000 - assert test_config['tploadnocache'] is True - assert test_config['preferences'] == { - 'addon.test.tabswitch.urlfile': os.path.join('${talos}', - 'tests', - 'tp5o.html'), - 'addon.test.tabswitch.webserver': '${webserver}', - 'addon.test.tabswitch.maxurls': -1, - } - assert test_config['unit'] == 'ms' - - def test_tart_has_expected_attributes(self): - config = get_config(self.argv_tart) - test_config = config['tests'][0] - - assert test_config['name'] == 'tart' - assert test_config['tpmanifest'] != '${talos}/tests/tart/tart.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tploadnocache'] is True - assert test_config['tpmozafterpaint'] is False - assert test_config['gecko_profile_interval'] == 10 - assert test_config['gecko_profile_entries'] == 1000000 - assert 'win_counters' not in test_config - assert 'w7_counters' not in test_config - assert 'linux_counters' not in test_config - assert 'mac_counters' not in test_config - assert test_config['preferences'] == { - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'dom.send_after_paint_to_content': False - } - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_cart_has_expected_attributes(self): - config = get_config(self.argv_cart) - test_config = config['tests'][0] - - assert test_config['name'] == 'cart' - assert test_config['tpmanifest'] != '${talos}/tests/tart/cart.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tploadnocache'] is True - assert test_config['tpmozafterpaint'] is False - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 10000000 - assert 'win_counters' not in test_config - assert 'w7_counters' not in test_config - assert 'linux_counters' not in test_config - assert 'mac_counters' not in test_config - assert test_config['preferences'] == { - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'dom.send_after_paint_to_content': False - } - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_damp_has_expected_attributes(self): - config = get_config(self.argv_damp) - test_config = config['tests'][0] - - assert test_config['name'] == 'damp' - assert test_config['tpmanifest'] != '${talos}/tests/devtools/damp.manifest' - assert test_config['cycles'] == 5 - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 5 - assert test_config['tploadnocache'] is True - assert test_config['tpmozafterpaint'] is False - assert test_config['gecko_profile_interval'] == 10 - assert test_config['gecko_profile_entries'] == 1000000 - assert 'win_counters' not in test_config - assert 'w7_counters' not in test_config - assert 'linux_counters' not in test_config - assert 'mac_counters' not in test_config - assert test_config['filters'] is not None - assert test_config['preferences'] == { - 'devtools.memory.enabled': True, - 'addon.test.damp.webserver': '${webserver}' - } - assert test_config['unit'] == 'ms' - - def test_glterrain_has_expected_attributes(self): - config = get_config(self.argv_glterrain) - test_config = config['tests'][0] - - assert test_config['name'] == 'glterrain' - assert test_config['tpmanifest'] != '${talos}/tests/webgl/glterrain.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tploadnocache'] is True - assert test_config['tpmozafterpaint'] is False - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 10 - assert test_config['gecko_profile_entries'] == 2000000 - assert 'win_counters' not in test_config - assert 'w7_counters' not in test_config - assert 'linux_counters' not in test_config - assert 'mac_counters' not in test_config - assert test_config['preferences'] == { - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'dom.send_after_paint_to_content': False - } - assert test_config['filters'] is not None - assert test_config['unit'] == 'frame interval' - - def test_glvideo_has_expected_attributes(self): - config = get_config(self.argv_glvideo) - test_config = config['tests'][0] - - assert test_config['name'] == 'glvideo' - assert test_config['tpmanifest'] != '${talos}/tests/webgl/glvideo.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 5 - assert test_config['tploadnocache'] is True - assert test_config['tpmozafterpaint'] is False - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 2 - assert test_config['gecko_profile_entries'] == 2000000 - assert 'win_counters' not in test_config - assert 'w7_counters' not in test_config - assert 'linux_counters' not in test_config - assert 'mac_counters' not in test_config - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_tp5n_has_expected_attributes(self): - config = get_config(self.argv_tp5n) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp5n' - assert test_config['resolution'] == 20 - assert test_config['shutdown'] is False - assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5n.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 1 - assert test_config['cycles'] == 1 - assert test_config['tpmozafterpaint'] is True - assert test_config['tptimeout'] == 5000 - assert test_config['mainthread'] is True - assert test_config['w7_counters'] == [] - assert test_config['win_counters'] == [] - assert test_config['linux_counters'] == [] - assert test_config['mac_counters'] == [] - assert test_config['xperf_counters'] == [ - 'main_startup_fileio', 'main_startup_netio', - 'main_normal_fileio', 'main_normal_netio', - 'nonmain_startup_fileio', 'nonmain_normal_fileio', - 'nonmain_normal_netio', 'mainthread_readcount', - 'mainthread_readbytes', 'mainthread_writecount', - 'mainthread_writebytes' - ] - assert test_config['xperf_providers'] == [ - 'PROC_THREAD', 'LOADER', 'HARD_FAULTS', 'FILENAME', - 'FILE_IO', 'FILE_IO_INIT' - ] - assert test_config['xperf_user_providers'] == [ - 'Mozilla Generic Provider', - 'Microsoft-Windows-TCPIP' - ] - assert test_config['xperf_stackwalk'] == [ - 'FileCreate', 'FileRead', 'FileWrite', 'FileFlush', - 'FileClose' - ] - assert test_config['filters'] is not None - assert test_config['timeout'] == 1800 - assert test_config['preferences'] == { - 'extensions.enabledScopes': '', - 'talos.logfile': 'browser_output.txt' - } - assert test_config['unit'] == 'ms' - - def test_tp5o_has_expected_attributes(self): - config = get_config(self.argv_tp5o) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp5o' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['cycles'] == 1 - assert test_config['tpmozafterpaint'] is True - assert test_config['tptimeout'] == 5000 - assert test_config['mainthread'] is False - assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5o.manifest' - assert test_config['win_counters'] == ['% Processor Time'] - assert test_config['w7_counters'] == ['% Processor Time'] - assert test_config['linux_counters'] == ['XRes'] - assert test_config['mac_counters'] == [] - assert test_config['responsiveness'] is True - assert test_config['gecko_profile_interval'] == 2 - assert test_config['gecko_profile_entries'] == 4000000 - assert test_config['filters'] is not None - assert test_config['timeout'] == 1800 - assert test_config['unit'] == 'ms' - - def test_tp5o_webext_has_expected_attributes(self): - config = get_config(self.argv_tp5o_webext) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp5o_webext' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['cycles'] == 1 - assert test_config['tpmozafterpaint'] is True - assert test_config['tptimeout'] == 5000 - assert test_config['mainthread'] is False - assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5o.manifest' - assert test_config['win_counters'] == ['% Processor Time'] - assert test_config['w7_counters'] == ['% Processor Time'] - assert test_config['linux_counters'] == ['XRes'] - assert test_config['mac_counters'] == [] - assert test_config['responsiveness'] is True - assert test_config['gecko_profile_interval'] == 2 - assert test_config['gecko_profile_entries'] == 4000000 - assert test_config['filters'] is not None - assert test_config['timeout'] == 1800 - assert test_config['unit'] == 'ms' - assert test_config['webextensions'] == '${talos}/webextensions/dummy/dummy-signed.xpi' - assert test_config['preferences'] == {'xpinstall.signatures.required': False} - - def test_tp5o_scroll_has_expected_attributes(self): - config = get_config(self.argv_tp5o_scroll) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp5o_scroll' - assert test_config['tpmanifest'] != '${talos}/tests/tp5n/tp5o.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 12 - assert test_config['gecko_profile_interval'] == 2 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['tpscrolltest'] is True - assert test_config['tpmozafterpaint'] is False - assert test_config['preferences'] == { - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'dom.send_after_paint_to_content': False, - 'layout.css.scroll-behavior.spring-constant': "'10'", - 'toolkit.framesRecording.bufferSize': 10000 - } - assert test_config['filters'] is not None - assert test_config['unit'] == '1/FPS' - - def test_v8_7_has_expected_attributes(self): - config = get_config(self.argv_v8_7) - test_config = config['tests'][0] - - assert test_config['name'] == 'v8_7' - assert test_config['tpmanifest'] != '${talos}/tests/v8_7/v8.manifest' - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 1000000 - assert test_config['tpcycles'] == 1 - assert test_config['resolution'] == 20 - assert test_config['tpmozafterpaint'] is False - assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} - assert test_config['filters'] is not None - assert test_config['unit'] == 'score' - assert test_config['lower_is_better'] is False - - def test_kraken_has_expected_attributes(self): - config = get_config(self.argv_kraken) - test_config = config['tests'][0] - - assert test_config['name'] == 'kraken' - assert test_config['tpmanifest'] != '${talos}/tests/kraken/kraken.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 1 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 5000000 - assert test_config['tpmozafterpaint'] is False - assert test_config['tpchrome'] is False - assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} - assert test_config['filters'] is not None - assert test_config['unit'] == 'score' - - def test_basic_compositor_video_has_expected_attributes(self): - config = get_config(self.argv_basic_compositor_video) - test_config = config['tests'][0] - - assert test_config['name'] == 'basic_compositor_video' - assert test_config['tpmanifest'] != '${talos}/tests/video/video.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 12 - assert test_config['tpchrome'] is False - assert test_config['timeout'] == 10000 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['preferences'] == { - 'full-screen-api.allow-trusted-requests-only': False, - 'layers.acceleration.force-enabled': False, - 'layers.acceleration.disabled': True, - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'full-screen-api.warning.timeout': 500, - 'media.ruin-av-sync.enabled': True - } - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms/frame' - assert test_config['lower_is_better'] is True - - def test_tcanvasmark_has_expected_attributes(self): - config = get_config(self.argv_tcanvasmark) - test_config = config['tests'][0] - - assert test_config['name'] == 'tcanvasmark' - assert test_config['tpmanifest'] != '${talos}/tests/canvasmark/canvasmark.manifest' - assert 'win_counters' not in test_config - assert 'w7_counters' not in test_config - assert 'linux_counters' not in test_config - assert 'mac_counters' not in test_config - assert test_config['tpcycles'] == 5 - assert test_config['tppagecycles'] == 1 - assert test_config['timeout'] == 900 - assert test_config['gecko_profile_interval'] == 10 - assert test_config['gecko_profile_entries'] == 2500000 - assert test_config['tpmozafterpaint'] is False - assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} - assert test_config['filters'] is not None - assert test_config['unit'] == 'score' - assert test_config['lower_is_better'] is False - - def test_dromaeo_css_has_expected_attributes(self): - config = get_config(self.argv_dromaeo_css) - test_config = config['tests'][0] - - assert test_config['name'] == 'dromaeo_css' - assert test_config['tpcycles'] == 1 - assert test_config['filters'] is not None - assert test_config['lower_is_better'] is False - assert test_config['alert_threshold'] == 5.0 - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 2 - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['tpmanifest'] != '${talos}/tests/dromaeo/css.manifest' - assert test_config['unit'] == 'score' - - def test_dromaeo_dom_has_expected_attributes(self): - config = get_config(self.argv_dromaeo_dom) - test_config = config['tests'][0] - - assert test_config['name'] == 'dromaeo_dom' - assert test_config['tpcycles'] == 1 - assert test_config['filters'] is not None - assert test_config['lower_is_better'] is False - assert test_config['alert_threshold'] == 5.0 - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 2 - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['tpmanifest'] != '${talos}/tests/dromaeo/dom.manifest' - assert test_config['unit'] == 'score' - - def test_tsvgm_has_expected_attributes(self): - config = get_config(self.argv_tsvgm) - test_config = config['tests'][0] - - assert test_config['name'] == 'tsvgm' - assert test_config['tpmanifest'] != '${talos}/tests/svgx/svgm.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 7 - assert test_config['tpmozafterpaint'] is False - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 10 - assert test_config['gecko_profile_entries'] == 1000000 - assert test_config['preferences'] == { - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'dom.send_after_paint_to_content': False - } - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_tsvgx_has_expected_attributes(self): - config = get_config(self.argv_tsvgx) - test_config = config['tests'][0] - - assert test_config['name'] == 'tsvgx' - assert test_config['tpmanifest'] != '${talos}/tests/svgx/svgx.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tpmozafterpaint'] is False - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 10 - assert test_config['gecko_profile_entries'] == 1000000 - assert test_config['preferences'] == { - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'dom.send_after_paint_to_content': False - } - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_tsvg_static_has_expected_attributes(self): - config = get_config(self.argv_tsvg_static) - test_config = config['tests'][0] - - assert test_config['name'] == 'tsvg_static' - assert test_config['tpmanifest'] != '${talos}/tests/svg_static/svg_static.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tpmozafterpaint'] is True - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_tsvgr_opacity_has_expected_attributes(self): - config = get_config(self.argv_tsvgr_opacity) - test_config = config['tests'][0] - - assert test_config['name'] == 'tsvgr_opacity' - assert test_config['tpmanifest'] != '${talos}/tests/svg_opacity/svg_opacity.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tpmozafterpaint'] is True - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 10000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_tscrollx_has_expected_attributes(self): - config = get_config(self.argv_tscrollx) - test_config = config['tests'][0] - - assert test_config['name'] == 'tscrollx' - assert test_config['tpmanifest'] != '${talos}/tests/scroll/scroll.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tpmozafterpaint'] is False - assert test_config['tpchrome'] is False - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 1000000 - assert test_config['preferences'] == { - 'layout.frame_rate': 0, - 'docshell.event_starvation_delay_hint': 1, - 'dom.send_after_paint_to_content': False, - 'layout.css.scroll-behavior.spring-constant': "'10'", - 'toolkit.framesRecording.bufferSize': 10000 - } - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - - def test_a11yr_has_expect_attributes(self): - config = get_config(self.argv_a11yr) - test_config = config['tests'][0] - - assert test_config['name'] == 'a11yr' - assert test_config['tpmanifest'] != '${talos}/tests/a11y/a11y.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['tpmozafterpaint'] is True - assert test_config['tpchrome'] is False - assert test_config['preferences'] == {'dom.send_after_paint_to_content': False} - assert test_config['unit'] == 'ms' - assert test_config['alert_threshold'] == 5.0 - - def test_speedometer_has_expected_attributes(self): - config = get_config(self.argv_speedometer) - test_config = config['tests'][0] - - assert test_config['name'] == 'speedometer' - assert test_config['tpmanifest'] != '${talos}/tests/speedometer/speedometer.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 5 - assert test_config['tpmozafterpaint'] is False - assert test_config['tpchrome'] is False - assert test_config['format_pagename'] is False - assert test_config['lower_is_better'] is False - assert test_config['unit'] == 'score' - - def test_perf_reftest_has_expected_attributes(self): - config = get_config(self.argv_perf_reftest) - test_config = config['tests'][0] - - assert test_config['name'] == 'perf_reftest' - assert test_config['base_vs_ref'] is True # compare the two test pages with eachother and report comparison - assert test_config['tpmanifest'] != '${talos}/tests/perf-reftest/perf_reftest.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 10 - assert test_config['tptimeout'] == 30000 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['alert_threshold'] == 5.0 - - def test_perf_reftest_singletons_has_expected_attributes(self): - config = get_config(self.argv_perf_reftest_singletons) - test_config = config['tests'][0] - - assert test_config['name'] == 'perf_reftest_singletons' - assert test_config['tpmanifest'] != '${talos}/tests/perf-reftest-singletons/perf_reftest_singletons.manifest' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 15 - assert test_config['tptimeout'] == 30000 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['alert_threshold'] == 5.0 - - def test_quantum_pageload_google_has_expected_attributes(self): - config = get_config(self.argv_quantum_pageload_google) - test_config = config['tests'][0] - - assert test_config['name'] == 'quantum_pageload_google' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_google.manifest' - - def test_quantum_pageload_youtube_has_expected_attributes(self): - config = get_config(self.argv_quantum_pageload_youtube) - test_config = config['tests'][0] - - assert test_config['name'] == 'quantum_pageload_youtube' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_youtube.manifest' - - def test_quantum_pageload_amazon_has_expected_attributes(self): - config = get_config(self.argv_quantum_pageload_amazon) - test_config = config['tests'][0] - - assert test_config['name'] == 'quantum_pageload_amazon' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_amazon.manifest' - - def test_quantum_pageload_facebook_has_expected_attributes(self): - config = get_config(self.argv_quantum_pageload_facebook) - test_config = config['tests'][0] - - assert test_config['name'] == 'quantum_pageload_facebook' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_facebook.manifest' - - def test_tp6_google_has_expected_attributes(self): - config = get_config(self.argv_tp6_google) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_google' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_google.manifest' - - def test_tp6_google_heavy_has_expected_attributes(self): - config = get_config(self.argv_tp6_google_heavy) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_google_heavy' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['profile'] == 'simple' - - def test_tp6_youtube_has_expected_attributes(self): - config = get_config(self.argv_tp6_youtube) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_youtube' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_youtube.manifest' - - def test_tp6_youtube_heavy_has_expected_attributes(self): - config = get_config(self.argv_tp6_youtube_heavy) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_youtube_heavy' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['profile'] == 'simple' - - def test_tp6_amazon_has_expected_attributes(self): - config = get_config(self.argv_tp6_amazon) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_amazon' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_amazon.manifest' - - def test_tp6_amazon_heavy_has_expected_attributes(self): - config = get_config(self.argv_tp6_amazon_heavy) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_amazon_heavy' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['profile'] == 'simple' - - def test_tp6_facebook_has_expected_attributes(self): - config = get_config(self.argv_tp6_facebook) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_facebook' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['tpmanifest'] != '${talos}/tests/quantum_pageload/quantum_pageload_facebook.manifest' - - def test_tp6_facebook_heavy_has_expected_attributes(self): - config = get_config(self.argv_tp6_facebook_heavy) - test_config = config['tests'][0] - - assert test_config['name'] == 'tp6_facebook_heavy' - assert test_config['tpcycles'] == 1 - assert test_config['tppagecycles'] == 25 - assert test_config['gecko_profile_interval'] == 1 - assert test_config['gecko_profile_entries'] == 2000000 - assert test_config['filters'] is not None - assert test_config['unit'] == 'ms' - assert test_config['lower_is_better'] is True - assert test_config['fnbpaint'] is True - assert test_config['profile'] == 'simple' - - -@mock.patch('talos.config.get_browser_config') -@mock.patch('talos.config.get_config') -def test_get_configs(get_config_mock, get_browser_config_mock): - # unpacks in right order - get_config_mock.return_value = 'first' - get_browser_config_mock.return_value = 'second' - - first, second = get_configs() - assert (first, second) == ('first', 'second') - - -if __name__ == '__main__': - mozunit.main() diff --git a/testing/talos/talos/unittests/test_ffsetup.py b/testing/talos/talos/unittests/test_ffsetup.py deleted file mode 100644 index 67c5ddec5d91..000000000000 --- a/testing/talos/talos/unittests/test_ffsetup.py +++ /dev/null @@ -1,90 +0,0 @@ -from __future__ import absolute_import - -import os - -import mock -import mozunit - -from talos.ffsetup import FFSetup - - -class TestFFSetup(object): - - def setup_method(self, method): - self.ffsetup = FFSetup( - { # browser_config - "env": {}, - "symbols_path": "", - "preferences": {}, - "webserver": "", - "extensions": [] - }, - { #test_config - "preferences": {}, - "extensions": [], - "profile": None - } - ) - - # setup proxy logger - - def test_clean(self): - # tmp dir removed - assert self.ffsetup._tmp_dir is not None - assert os.path.exists(self.ffsetup._tmp_dir) is True - - self.ffsetup.clean() - - assert self.ffsetup._tmp_dir is not None - assert os.path.exists(self.ffsetup._tmp_dir) is False - - # gecko profile also cleaned - gecko_profile = mock.Mock() - self.ffsetup.gecko_profile = gecko_profile - - self.ffsetup.clean() - - assert gecko_profile.clean.called is True - -# def test_as_context_manager(self): -# self.ffsetup._init_env = mock.Mock() -# self.ffsetup._init_profile = mock.Mock() -# self.ffsetup._run_profile = mock.Mock() -# self.ffsetup._init_gecko_profile = mock.Mock() -# -# with self.ffsetup as setup: -# # env initiated -# self.assertIsNotNone(setup.env) -# # profile initiated -# self.assertTrue(setup._init_profile.called) -# # gecko profile initiated -# -# # except raised -# pass -# -# def test_environment_init(self): -# # self.env not empty -# # browser_config env vars in self.env -# # multiple calls return same self.env -# pass -# -# def test_profile_init(self): -# # addons get installed -# # webextensions get installed -# # preferences contain interpolated values -# # profile path is added -# pass -# -# def test_run_profile(self): -# # exception raised -# # browser process launched -# pass -# -# def test_gecko_profile_init(self): -# # complains on not provided upload_dir -# # self.gecko_profile not None -# pass - - -if __name__ == '__main__': - mozunit.main() diff --git a/testing/talos/talos/unittests/test_gecko_profile.py b/testing/talos/talos/unittests/test_gecko_profile.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_mainthreadio.py b/testing/talos/talos/unittests/test_mainthreadio.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_mitmproxy/__init__.py b/testing/talos/talos/unittests/test_mitmproxy/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_output.py b/testing/talos/talos/unittests/test_output.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_pageloader/__init__.py b/testing/talos/talos/unittests/test_pageloader/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_profiler/__init__.py b/testing/talos/talos/unittests/test_profiler/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_run_tests.py b/testing/talos/talos/unittests/test_run_tests.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_scripts/__init__.py b/testing/talos/talos/unittests/test_scripts/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_startup_test/__init__.py b/testing/talos/talos/unittests/test_startup_test/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_talos_powers/__init__.py b/testing/talos/talos/unittests/test_talos_powers/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_talos_process.py b/testing/talos/talos/unittests/test_talos_process.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_test.py b/testing/talos/talos/unittests/test_test.py deleted file mode 100644 index d92cba410778..000000000000 --- a/testing/talos/talos/unittests/test_test.py +++ /dev/null @@ -1,206 +0,0 @@ -from __future__ import absolute_import - -import mozunit -import pytest - -from talos.test import Test, TsBase, ts_paint -from talos.test import register_test -from talos.test import test_dict - - -class BasicTestA(Test): - pass - - -class BasicTestB(Test): - pass - - -class BasicTestC(Test): - """basic description""" - keys = [ - 'nonnull_attrib', - 'null_attrib' - ] - - nonnull_attrib = 'value' - null_attrib = None - - -class NotATest(object): - pass - - -class Test_register_test(object): - - def test_same_instance_returned(self): - decorator = register_test() - NewBasicTest = decorator(BasicTestA) - - assert BasicTestA is NewBasicTest - - def test_class_registered(self): - _TESTS = test_dict() - decorator = register_test() - - # class registered - _ = decorator(BasicTestB) - assert 'BasicTestB' in _TESTS - assert BasicTestB in _TESTS.values() - - # cannot register same class - with pytest.raises(AssertionError): - _ = decorator(BasicTestB) - - # # cannot register other class type - with pytest.raises(AssertionError): - _ = decorator(NotATest) - - -class TestTest(object): - - def test_same_class_name(self): - assert BasicTestA.name() == 'BasicTestA' - - def test_class_doc(self): - assert BasicTestA.description() is not None - assert BasicTestC.description() == 'basic description' - - def test_init(self): - basic_test = BasicTestA(new_attrib_a='value_a', new_attrib_b='value_b') - assert basic_test.new_attrib_a == 'value_a' - assert basic_test.new_attrib_b == 'value_b' - - def test_update(self): - basic_test = BasicTestA() - basic_test.update(new_attrib_a='value_a', new_attrib_b='value_b') - - assert basic_test.new_attrib_a == 'value_a' - assert basic_test.new_attrib_b == 'value_b' - - basic_test.update(new_attrib_c='value_c') - assert basic_test.new_attrib_c == 'value_c' - - def test_items(self): - basic_test = BasicTestC() - - # returns iterable - try: - items = iter(basic_test.items()) - except TypeError: - pytest.fail('Test.items() did not return iterator') - - try: - key, val = basic_test.items()[0] - except ValueError: - pytest.fail('Test.items() did not contain tuples') - - # returns not nones - assert ('nonnull_attrib', 'value') in basic_test.items() - assert ('null_attrib', None) not in basic_test.items() - - # not overriden Test instance - test_instance = Test() - assert test_instance.items() == [('name', 'Test')] - - # overriden Test instance - test_instance = Test(unregistered_attr='value') - assert ('unregistered_attr', 'value') not in test_instance.items() - - test_instance = Test() - test_instance.update(keys=['cycles', 'desktop', 'lower_is_better']) - assert dict(test_instance.items()) == {'name': 'Test', 'desktop': True, 'lower_is_better': True} - - test_instance = Test() - test_instance.update(new_attrib='some') - assert ('new_attrib', 'some') not in test_instance.items() - - test_instance = Test() - test_instance.update(keys=['new_attrib'], new_attrib='value') - assert dict(test_instance.items()) == {'name': 'Test', 'new_attrib': 'value'} - - test_instance = Test(cycles=20, desktop=False) - assert test_instance.cycles == 20 - assert test_instance.desktop == False - - test_instance = Test() - test_instance.update(cycles=20, desktop=False) - assert test_instance.cycles == 20 - assert test_instance.desktop == False - - -class TestTsBase(object): - ts_base_registered_keys = { - 'url', - 'url_timestamp', - 'timeout', - 'cycles', - 'shutdown', - 'profile_path', - 'gecko_profile', - 'gecko_profile_interval', - 'gecko_profile_entries', - 'gecko_profile_startup', - 'preferences', - 'xperf_counters', - 'xperf_providers', - 'xperf_user_providers', - 'xperf_stackwalk', - 'tpmozafterpaint', - 'fnbpaint', - 'profile', - 'firstpaint', - 'userready', - 'testeventmap', - 'base_vs_ref', - 'extensions', - 'filters', - 'setup', - 'cleanup', - 'webextensions', - 'reinstall', - } - - def setup_method(self): - self.test_instance = TsBase() - - def test_no_unknown_keys_are_somehow_added_alongside_registered_ones(self): - assert set(self.test_instance.keys) == self.ts_base_registered_keys - - self.test_instance.update(attribute_one='value', attribute_two='value') - assert set(self.test_instance.keys) == self.ts_base_registered_keys - - def test_nonnull_keys_show_up(self): - assert dict(self.test_instance.items()) == { - 'name': 'TsBase', - 'filters': self.test_instance.filters - } - - self.test_instance.update(timeout=500) - assert dict(self.test_instance.items()) == { - 'name': 'TsBase', - 'filters': self.test_instance.filters, - 'timeout': 500 - } - - -class Test_ts_paint(object): - def test_test_nonnull_keys_show_up(self): - test_instance = ts_paint() - keys = {key for key, _ in test_instance.items()} - assert keys == { - 'name', - 'cycles', - 'timeout', - 'gecko_profile_startup', - 'gecko_profile_entries', - 'url', - 'shutdown', - 'xperf_counters', - 'filters', - 'tpmozafterpaint' - } - - -if __name__ == '__main__': - mozunit.main() diff --git a/testing/talos/talos/unittests/test_tests/__init__.py b/testing/talos/talos/unittests/test_tests/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_ttest.py b/testing/talos/talos/unittests/test_ttest.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_whitelist.py b/testing/talos/talos/unittests/test_whitelist.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/test_xtalos/__init__.py b/testing/talos/talos/unittests/test_xtalos/__init__.py deleted file mode 100644 index e69de29bb2d1..000000000000 diff --git a/testing/talos/talos/unittests/__init__.py b/testing/talos/tests/__init__.py similarity index 100% rename from testing/talos/talos/unittests/__init__.py rename to testing/talos/tests/__init__.py diff --git a/testing/talos/talos/unittests/browser_output.ts.txt b/testing/talos/tests/browser_output.ts.txt similarity index 100% rename from testing/talos/talos/unittests/browser_output.ts.txt rename to testing/talos/tests/browser_output.ts.txt diff --git a/testing/talos/talos/unittests/browser_output.tsvg.txt b/testing/talos/tests/browser_output.tsvg.txt similarity index 100% rename from testing/talos/talos/unittests/browser_output.tsvg.txt rename to testing/talos/tests/browser_output.tsvg.txt diff --git a/testing/talos/talos/unittests/profile.tgz b/testing/talos/tests/profile.tgz similarity index 100% rename from testing/talos/talos/unittests/profile.tgz rename to testing/talos/tests/profile.tgz diff --git a/testing/talos/talos/unittests/ps-Acj.out b/testing/talos/tests/ps-Acj.out similarity index 100% rename from testing/talos/talos/unittests/ps-Acj.out rename to testing/talos/tests/ps-Acj.out diff --git a/testing/talos/tests/test_browser_output.py b/testing/talos/tests/test_browser_output.py new file mode 100644 index 000000000000..a030fc2db09c --- /dev/null +++ b/testing/talos/tests/test_browser_output.py @@ -0,0 +1,192 @@ +#!/usr/bin/env python + +""" +test talos browser output parsing +""" +from __future__ import absolute_import + +import os +import unittest + +from talos.results import BrowserLogResults +from talos.results import PageloaderResults +from talos.utils import TalosError + +here = os.path.dirname(os.path.abspath(__file__)) + + +class TestBrowserOutput(unittest.TestCase): + + def test_ts_format(self): + + # output file + browser_ts = os.path.join(here, 'browser_output.ts.txt') + + # parse the results + browser_log = BrowserLogResults(browser_ts) + + # ensure the results meet what we expect + self.assertEqual(browser_log.format, 'tsformat') + self.assertEqual(browser_log.browser_results.strip(), '392') + self.assertEqual(browser_log.startTime, 1333663595953) + self.assertEqual(browser_log.endTime, 1333663596551) + + def test_tsvg_format(self): + + # output file + browser_tsvg = os.path.join(here, 'browser_output.tsvg.txt') + + # parse the results + browser_log = BrowserLogResults(browser_tsvg) + + # ensure the results meet what we expect + self.assertEqual(browser_log.format, 'tpformat') + self.assertEqual(browser_log.startTime, 1333666702130) + self.assertEqual(browser_log.endTime, 1333666702743) + + # we won't validate the exact string because it is long + raw_report = browser_log.browser_results.strip() + raw_report.startswith('_x_x_mozilla_page_load') + raw_report.endswith('|11;hixie-007.xml;1629;1651;1648;1652;1649') + + # but we will ensure that it is parseable + pageloader_results = PageloaderResults(raw_report) + self.assertEqual(len(pageloader_results.results), 12) + indices = [i['index'] for i in pageloader_results.results] + self.assertEqual(indices, range(12)) + + # test hixie-001.xml just as a spot-check + hixie_001 = pageloader_results.results[5] + expected_values = [45643, 14976, 17807, 14971, 17235] + self.assertEqual(hixie_001['runs'], expected_values) + self.assertEqual(hixie_001['page'], 'hixie-001.xml') + + def test_garbage(self): + """ + send in garbage input and ensure the output is the + inability to find the report + """ + + garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" + self.compare_error_message(garbage, "Could not find report") + + def test_missing_end_report(self): + """what if you're not done with a report?""" + garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" + + input = self.start_report() + input += garbage + self.compare_error_message(input, "Could not find end token: '__end_report'") + + def test_double_end_report(self): + """double end report tokens""" + + garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" + input = self.start_report() + garbage + self.end_report() + self.end_report() + self.compare_error_message(input, "Unmatched number of tokens") + + def test_end_report_before_start_report(self): + """the end report token occurs before the start report token""" + + garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" + input = self.end_report() + garbage + self.start_report() + self.compare_error_message(input, + "End token '%s' occurs before start token" % + self.end_report()) + + def test_missing_timestamps(self): + """what if the timestamps are missing?""" + + # make a bogus report but missing the timestamps + garbage = "hjksdfhkhasdfjkhsdfkhdfjklasd" + input = self.start_report() + garbage + self.end_report() + + # it will fail + self.compare_error_message(input, "Could not find startTime in browser output") + + def test_wrong_order(self): + """what happens if you mix up the token order?""" + + # i've secretly put the AfterTerminationTimestamp before + # the BeforeLaunchTimestamp + # Let's see if the parser notices + bad_report = """__start_report392__end_report + +Failed to load native module at path '/home/jhammel/firefox/components/libmozgnome.so': +(80004005) libnotify.so.1: cannot open shared object file: No such file or directory +Could not read chrome manifest +'file:///home/jhammel/firefox/extensions/%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D/chrome.manifest'. +[JavaScript Warning: "Use of enablePrivilege is deprecated. +Please use code that runs with the system principal (e.g. an extension) instead. +" {file: "http://localhost:15707/startup_test/startup_test.html?begin=1333663595557" line: 0}] +__startTimestamp1333663595953__endTimestamp +__startAfterTerminationTimestamp1333663596551__endAfterTerminationTimestamp +__startBeforeLaunchTimestamp1333663595557__endBeforeLaunchTimestamp +""" + + self.compare_error_message(bad_report, "] found before " + + "('__startBeforeLaunchTimestamp', " + + "'__endBeforeLaunchTimestamp') " + + "[character position:") + + def test_multiple_reports(self): + """you're only allowed to have one report in a file""" + + # this one works fine + good_report = """__start_report392__end_report + +Failed to load native module at path '/home/jhammel/firefox/components/libmozgnome.so': +(80004005) libnotify.so.1: cannot open shared object file: No such file or directory +Could not read chrome manifest +'file:///home/jhammel/firefox/extensions/%7B972ce4c6-7e08-4474-a285-3208198ce6fd%7D/chrome.manifest'. +[JavaScript Warning: "Use of enablePrivilege is deprecated. +Please use code that runs with the system principal (e.g. an extension) instead. +" {file: "http://localhost:15707/startup_test/startup_test.html?begin=1333663595557" line: 0}] +__startTimestamp1333663595953__endTimestamp +__startBeforeLaunchTimestamp1333663595557__endBeforeLaunchTimestamp +__startAfterTerminationTimestamp1333663596551__endAfterTerminationTimestamp +""" + + # but there's no hope for this one + bad_report = good_report + good_report # interesting math + + self.compare_error_message(bad_report, "Multiple matches for %s,%s" % + (self.start_report(), self.end_report())) + + def start_report(self): + """return a start report token""" + return BrowserLogResults.report_tokens[0][1][0] # start token + + def end_report(self): + """return a start report token""" + return BrowserLogResults.report_tokens[0][1][-1] # end token + + def compare_error_message(self, browser_log, substr): + """ + ensures that exceptions give correct error messages + - browser_log : a browser log file + - substr : substring of the error message + """ + + try: + BrowserLogResults(results_raw=browser_log) + except TalosError as e: + if substr not in str(e): + import pdb + pdb.set_trace() + self.assertTrue(substr in str(e)) + + +class TestTalosError(unittest.TestCase): + """ + test TalosError class + """ + def test_browser_log_results(self): + # an example that should fail + # passing invalid value for argument result_raw + with self.assertRaises(TalosError): + BrowserLogResults(results_raw="__FAIL__FAIL") + + +if __name__ == '__main__': + unittest.main() diff --git a/testing/talos/tests/test_filter.py b/testing/talos/tests/test_filter.py new file mode 100755 index 000000000000..7795e1853752 --- /dev/null +++ b/testing/talos/tests/test_filter.py @@ -0,0 +1,81 @@ +#!/usr/bin/env python + +""" +test talos' filter module: + +http://hg.mozilla.org/build/talos/file/tip/talos/filter.py +""" +from __future__ import absolute_import + +import unittest + +import talos.filter + + +class TestFilter(unittest.TestCase): + + data = range(30) # test data + + def test_ignore(self): + """test the ignore filter""" + # a bit of a stub sanity test for a single filter + + filtered = talos.filter.ignore_first(self.data) + self.assertEquals(filtered, self.data[1:]) + + filtered = talos.filter.ignore_first(self.data, 10) + self.assertEquals(filtered, self.data[10:]) + + # short series won't be filtered + filtered = talos.filter.ignore_first(self.data, 50) + self.assertEquals(filtered, self.data) + + def test_getting_filters(self): + """test getting a list of filters from a string""" + + filter_names = ['ignore_max', 'ignore_max', 'max'] + + # get the filter functions + filters = talos.filter.filters(*filter_names) + self.assertEquals(len(filter_names), len(filters)) + for filter in filters: + self.assertTrue(self, hasattr(filter, '__call__')) + + # apply them on the data + filtered = talos.filter.apply(self.data, filters) + self.assertEquals(filtered, 27) + + def test_parse(self): + """test the filter name parse function""" + + # an example with no arguments + parsed = talos.filter.parse('mean') + self.assertEquals(parsed, ['mean', []]) + + # an example with one integer argument + parsed = talos.filter.parse('ignore_first:10') + self.assertEquals(parsed, ['ignore_first', [10]]) + self.assertEquals(type(parsed[1][0]), int) + self.assertNotEqual(type(parsed[1][0]), float) + + # an example with several arguments + + # temporarily add foo + # value is lambda function to mimic filter_dict key:value pair + talos.filter.scalar_filters['foo'] = lambda *args: args + parsed = talos.filter.parse('foo:10.1,2,5.0,6.') + self.assertEquals(parsed, ['foo', [10.1, 2, 5.0, 6.0]]) + for index in (2, 3): + self.assertEquals(type(parsed[1][index]), float) + self.assertNotEqual(type(parsed[1][index]), int) + + # an example that should fail + self.assertRaises(ValueError, talos.filter.parse, 'foo:bar') + self.assertRaises(ValueError, talos.filter.parse, 'foo:1,') + + # delete foo again + del talos.filter.scalar_filters['foo'] + + +if __name__ == '__main__': + unittest.main() diff --git a/testing/talos/tests/test_heavy.py b/testing/talos/tests/test_heavy.py new file mode 100644 index 000000000000..53557781b53b --- /dev/null +++ b/testing/talos/tests/test_heavy.py @@ -0,0 +1,163 @@ +#!/usr/bin/env python + +""" +test talos' heavy module: + +http://hg.mozilla.org/build/talos/file/tip/talos/heavy.py +""" +from __future__ import absolute_import +import unittest +import tempfile +import shutil +import datetime +import contextlib +import os +import time + +import talos.heavy + + +archive = os.path.join(os.path.dirname(__file__), 'profile.tgz') +archive_size = os.stat(archive).st_size + + +@contextlib.contextmanager +def mock_requests(**kw): + class Session: + def mount(self, *args, **kw): + pass + + kw['Session'] = Session + old = {} + for meth, func in kw.items(): + curr = getattr(talos.heavy.requests, meth) + old[meth] = curr + setattr(talos.heavy.requests, meth, func) + setattr(Session, meth, func) + try: + yield + finally: + for meth, func in old.items(): + setattr(talos.heavy.requests, meth, func) + + +class _Response(object): + def __init__(self, code, headers=None, file=None): + if headers is None: + headers = {} + self.headers = headers + self.status_code = code + self.file = file + + def raise_for_status(self): + pass + + def iter_content(self, chunk_size): + with open(self.file, 'rb') as f: + yield f.read(chunk_size) + + +class Logger: + def __init__(self): + self.data = [] + + def info(self, msg): + self.data.append(msg) + + +class TestFilter(unittest.TestCase): + + def setUp(self): + self.temp = tempfile.mkdtemp() + self.logs = talos.heavy.LOG.logger = Logger() + + def tearDown(self): + shutil.rmtree(self.temp) + + def test_profile_age(self): + """test profile_age function""" + days = talos.heavy.profile_age(self.temp) + self.assertEqual(days, 0) + + _8_days = datetime.datetime.now() + datetime.timedelta(days=8) + days = talos.heavy.profile_age(self.temp, _8_days) + self.assertEqual(days, 8) + + def test_directory_age(self): + """make sure it detects changes in files in subdirs""" + with open(os.path.join(self.temp, 'file'), 'w') as f: + f.write('xxx') + + current_age = talos.heavy._recursive_mtime(self.temp) + time.sleep(1.1) + + with open(os.path.join(self.temp, 'file'), 'w') as f: + f.write('----') + + self.assertTrue(current_age < talos.heavy._recursive_mtime(self.temp)) + + def test_follow_redirect(self): + """test follow_redirect function""" + _8_days = datetime.datetime.now() + datetime.timedelta(days=8) + _8_days = _8_days.strftime('%a, %d %b %Y %H:%M:%S UTC') + + resps = [_Response(303, {'Location': 'blah'}), + _Response(303, {'Location': 'bli'}), + _Response(200, {'Last-Modified': _8_days})] + + class Counter: + c = 0 + + def _head(url, curr=Counter()): + curr.c += 1 + return resps[curr.c] + + with mock_requests(head=_head): + loc, lm = talos.heavy.follow_redirects('https://example.com') + days = talos.heavy.profile_age(self.temp, lm) + self.assertEqual(days, 8) + + def _test_download(self, age): + + def _days(num): + d = datetime.datetime.now() + datetime.timedelta(days=num) + return d.strftime('%a, %d %b %Y %H:%M:%S UTC') + + resps = [_Response(303, {'Location': 'blah'}), + _Response(303, {'Location': 'bli'}), + _Response(200, {'Last-Modified': _days(age)})] + + class Counter: + c = 0 + + def _head(url, curr=Counter()): + curr.c += 1 + return resps[curr.c] + + def _get(url, *args, **kw): + return _Response(200, {'Last-Modified': _days(age), + 'content-length': str(archive_size)}, + file=archive) + + with mock_requests(head=_head, get=_get): + target = talos.heavy.download_profile('simple', + profiles_dir=self.temp) + profile = os.path.join(self.temp, 'simple') + self.assertTrue(os.path.exists(profile)) + return target + + def test_download_profile(self): + """test downloading heavy profile""" + # a 12 days old profile gets updated + self._test_download(12) + + # a 8 days two + self._test_download(8) + + # a 2 days sticks + self._test_download(2) + self.assertTrue("fresh enough" in self.logs.data[-2]) + + +if __name__ == '__main__': + unittest.main() diff --git a/testing/talos/tests/test_results.py b/testing/talos/tests/test_results.py new file mode 100755 index 000000000000..ede4e4b7866e --- /dev/null +++ b/testing/talos/tests/test_results.py @@ -0,0 +1,82 @@ +#!/usr/bin/env 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/. + +""" +test talos results parsing + +http://hg.mozilla.org/build/talos/file/tip/talos/results.py +""" +from __future__ import absolute_import + +import unittest + +import talos.filter +import talos.results + +# example page load test results string +results_string = """_x_x_mozilla_page_load +_x_x_mozilla_page_load_details +|i|pagename|runs| +|0;gearflowers.svg;74;65;68;66;62 +|1;composite-scale.svg;43;44;35;41;41 +|2;composite-scale-opacity.svg;19;16;19;19;21 +|3;composite-scale-rotate.svg;18;19;20;20;19 +|4;composite-scale-rotate-opacity.svg;18;17;17;17;19 +|5;hixie-001.xml;71836;15057;15063;57436;15061 +|6;hixie-002.xml;53940;15057;38246;55323;31818 +|7;hixie-003.xml;5027;5026;13540;31503;5031 +|8;hixie-004.xml;5050;5054;5053;5054;5055 +|9;hixie-005.xml;4568;4569;4562;4545;4567 +|10;hixie-006.xml;5090;5165;5054;5015;5077 +|11;hixie-007.xml;1628;1623;1623;1617;1622 +""" + + +class TestPageloaderResults(unittest.TestCase): + + def test_parsing(self): + """test our ability to parse results data""" + results = talos.results.PageloaderResults(results_string) + + # ensure you got all of them + self.assertEqual(len(results.results), 12) + + # test the indices + indices = [i['index'] for i in results.results] + self.assertEqual(indices, range(12)) + + # test some pages + pages = [i['page'] for i in results.results] + comparison = ['hixie-00%d.xml' % i for i in range(1, 8)] + self.assertEqual(pages[-len(comparison):], comparison) + + # test a few values + last = [1628., 1623., 1623, 1617., 1622.] + self.assertEqual(results.results[-1]['runs'], last) + first = [74., 65., 68., 66., 62.] + self.assertEqual(results.results[0]['runs'], first) + + def test_filter(self): + """test PageloaderResults.filter function""" + + # parse the data + results = talos.results.PageloaderResults(results_string) + + # apply some filters + filters = [[talos.filter.ignore_first, [2]], [talos.filter.median]] + filtered = results.filter(*filters) + self.assertEqual(filtered[0][0], 66.) + self.assertEqual(filtered[-1][0], 1622.) + + # apply some different filters + filters = [[talos.filter.ignore_max, []], [max, []]] + filtered = results.filter(*filters) + self.assertEqual(filtered[0][0], 68.) + self.assertEqual(filtered[-1][0], 1623.) + + +if __name__ == '__main__': + unittest.main() diff --git a/testing/talos/tests/test_talosconfig.py b/testing/talos/tests/test_talosconfig.py new file mode 100644 index 000000000000..58b13f961a90 --- /dev/null +++ b/testing/talos/tests/test_talosconfig.py @@ -0,0 +1,158 @@ +from __future__ import absolute_import, print_function + +import json +import unittest + +from talos import talosconfig +from talos.configuration import YAML + +# globals +ffox_path = 'test/path/to/firefox' +command_args = [ffox_path, + '-profile', + 'pathtoprofile', + '-tp', + 'pathtotpmanifest', + '-tpchrome', + '-tpmozafterpaint', + '-tpnoisy', + '-rss', + '-tpcycles', + '1', + '-tppagecycles', + '1'] +with open("test_talosconfig_browser_config.json") as json_browser_config: + browser_config = json.load(json_browser_config) +with open("test_talosconfig_test_config.json") as json_test_config: + test_config = json.load(json_test_config) + + +class TestWriteConfig(unittest.TestCase): + def test_writeConfigFile(self): + obj = dict(some=123, thing='456', other=789) + + self.assertEquals( + json.loads(talosconfig.writeConfigFile(obj, ('some', 'thing'))), + dict(some=123, thing='456') + ) + + # test without keys + self.assertEquals( + json.loads(talosconfig.writeConfigFile(obj, None)), + obj + ) + + +class TalosConfigUnitTest(unittest.TestCase): + """ + A class inheriting from unittest.TestCase to test the generateTalosConfig function. + """ + + def validate(self, var1, var2): + # Function to check whether the output generated is correct or not. + # If the output generated is not correct then specify the expected output to be generated. + if var1 == var2: + return 1 + else: + print("input '%s' != expected '%s'" % (var1, var2)) + + def test_talosconfig(self): + # This function stimulates a call to generateTalosConfig in talosconfig.py . + # It is then tested whether the output generated is correct or not. + # ensure that the output generated in yaml file is as expected or not. + yaml = YAML() + content = yaml.read(browser_config['bcontroller_config']) + self.validate(content['command'], + "test/path/to/firefox " + + "-profile " + + "pathtoprofile " + + "-tp " + + "pathtotpmanifest " + + "-tpchrome " + + "-tpmozafterpaint " + + "-tpnoisy " + + "-rss " + + "-tpcycles " + + "1 " + + "-tppagecycles " + + "1") + self.validate(content['child_process'], "plugin-container") + self.validate(content['process'], "firefox.exe") + self.validate(content['browser_wait'], 5) + self.validate(content['test_timeout'], 1200) + self.validate(content['browser_log'], "browser_output.txt") + self.validate(content['browser_path'], "test/path/to/firefox") + self.validate(content['error_filename'], "pathtoerrorfile") + self.validate(content['xperf_path'], + "C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe") + self.validate(content['buildid'], 20131205075310) + self.validate(content['sourcestamp'], "39faf812aaec") + self.validate(content['repository'], "http://hg.mozilla.org/releases/mozilla-release") + self.validate(content['title'], "qm-pxp01") + self.validate(content['testname'], "tp5n") + self.validate(content['xperf_providers'], ['PROC_THREAD', + 'LOADER', + 'HARD_FAULTS', + 'FILENAME', + 'FILE_IO', + 'FILE_IO_INIT']) + self.validate(content['xperf_user_providers'], + ['Mozilla Generic Provider', 'Microsoft-Windows-TCPIP']) + self.validate(content['xperf_stackwalk'], + ['FileCreate', 'FileRead', 'FileWrite', 'FileFlush', 'FileClose']) + self.validate(content['processID'], "None") + self.validate(content['approot'], "test/path/to") + + def test_errors(self): + # Tests if errors are correctly raised. + + # Testing that error is correctly raised or not if xperf_path is missing + browser_config_copy = browser_config.copy() + test_config_copy = test_config.copy() + del browser_config_copy['xperf_path'] + talosconfig.generateTalosConfig(command_args, browser_config_copy, test_config_copy) + yaml = YAML() + content = yaml.read(browser_config['bcontroller_config']) + + with self.assertRaises(KeyError): + self.validate(content['xperf_path'], + "C:/Program Files/Microsoft Windows Performance Toolkit/xperf.exe") + + # Test to see if keyerror is raised or not for calling testname when xperf_path is missing + with self.assertRaises(KeyError): + self.validate(content['testname'], "tp5n") + + # Testing that error is correctly raised or not if xperf_providers is missing + browser_config_copy = browser_config.copy() + test_config_copy = test_config.copy() + del test_config_copy['xperf_providers'] + talosconfig.generateTalosConfig(command_args, browser_config_copy, test_config_copy) + yaml = YAML() + content = yaml.read(browser_config['bcontroller_config']) + + # Checking keyerror when calling xperf_providers + with self.assertRaises(KeyError): + self.validate(content['xperf_providers'], ['PROC_THREAD', 'LOADER', 'HARD_FAULTS', + 'FILENAME', 'FILE_IO', 'FILE_IO_INIT']) + + # Checking keyerror when calling xperf_user_providers when xperf_providers is missing + with self.assertRaises(KeyError): + self.validate(content['xperf_user_providers'], + ['Mozilla Generic Provider', 'Microsoft-Windows-TCPIP']) + + # Checking keyerror when calling xperf_stackwalk when xperf_providers is missing + with self.assertRaises(KeyError): + self.validate(content['xperf_stackwalk'], + ['FileCreate', 'FileRead', 'FileWrite', 'FileFlush', 'FileClose']) + + # Checking keyerror when calling processID when xperf_providers is missing + with self.assertRaises(KeyError): + self.validate(content['processID'], "None") + + # Checking keyerror when calling approot when xperf_providers is missing + with self.assertRaises(KeyError): + self.validate(content['approot'], "test/path/to") + + +if __name__ == '__main__': + unittest.main() diff --git a/testing/talos/talos/unittests/test_talosconfig_browser_config.json b/testing/talos/tests/test_talosconfig_browser_config.json similarity index 100% rename from testing/talos/talos/unittests/test_talosconfig_browser_config.json rename to testing/talos/tests/test_talosconfig_browser_config.json diff --git a/testing/talos/talos/unittests/test_talosconfig_test_config.json b/testing/talos/tests/test_talosconfig_test_config.json similarity index 100% rename from testing/talos/talos/unittests/test_talosconfig_test_config.json rename to testing/talos/tests/test_talosconfig_test_config.json diff --git a/testing/talos/tests/test_urlsplit.py b/testing/talos/tests/test_urlsplit.py new file mode 100755 index 000000000000..4121f6d8e6d4 --- /dev/null +++ b/testing/talos/tests/test_urlsplit.py @@ -0,0 +1,56 @@ +#!/usr/bin/env 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/. + +""" +test URL parsing; see +https://bugzilla.mozilla.org/show_bug.cgi?id=793875 +""" +from __future__ import absolute_import + +import unittest + +import talos.utils + + +class TestURLParsing(unittest.TestCase): + + def test_http_url(self): + """test parsing an HTTP URL""" + + url = 'https://www.mozilla.org/en-US/about/' + parsed = talos.utils.urlsplit(url) + self.assertEqual(parsed, + ['https', 'www.mozilla.org', '/en-US/about/', '', '']) + + def test_file_url(self): + """test parsing file:// URLs""" + + # unix-like file path + url = 'file:///foo/bar' + parsed = talos.utils.urlsplit(url) + self.assertEqual(parsed, + ['file', '', '/foo/bar', '', '']) + + # windows-like file path + url = r'file://c:\foo\bar' + parsed = talos.utils.urlsplit(url) + self.assertEqual(parsed, + ['file', '', r'c:\foo\bar', '', '']) + + def test_implicit_file_url(self): + """ + test parsing URLs with no scheme, which by default are assumed + to be file:// URLs + """ + + path = '/foo/bar' + parsed = talos.utils.urlsplit(path) + self.assertEqual(parsed, + ['file', '', '/foo/bar', '', '']) + + +if __name__ == '__main__': + unittest.main() diff --git a/testing/talos/tests/test_utils.py b/testing/talos/tests/test_utils.py new file mode 100644 index 000000000000..61ac694f986d --- /dev/null +++ b/testing/talos/tests/test_utils.py @@ -0,0 +1,43 @@ +from __future__ import absolute_import + +import os +import unittest + +from talos import utils + + +class TestTimer(unittest.TestCase): + def test_timer(self): + timer = utils.Timer() + timer._start_time -= 3 # remove three seconds for the test + self.assertEquals(timer.elapsed(), '00:00:03') + + +class TestRestoreEnv(unittest.TestCase): + def test_basic(self): + env_var = 'THIS_IS_A_ENV_VAR_NOT_USED' + self.assertNotIn(env_var, os.environ) + with utils.restore_environment_vars(): + os.environ[env_var] = '1' + self.assertNotIn(env_var, os.environ) + + +class TestInterpolate(unittest.TestCase): + def test_interpolate_talos_is_always_defines(self): + self.assertEquals(utils.interpolate('${talos}'), utils.here) + + def test_interpolate_custom_placeholders(self): + self.assertEquals(utils.interpolate('${talos} ${foo} abc', foo='bar', unused=1), + utils.here + ' bar abc') + + +class TestParsePref(unittest.TestCase): + def test_parse_string(self): + self.assertEquals(utils.parse_pref('abc'), 'abc') + + def test_parse_int(self): + self.assertEquals(utils.parse_pref('12'), 12) + + def test_parse_bool(self): + self.assertEquals(utils.parse_pref('true'), True) + self.assertEquals(utils.parse_pref('false'), False) diff --git a/testing/talos/tests/test_xrestop.py b/testing/talos/tests/test_xrestop.py new file mode 100755 index 000000000000..1c3cfc6d8c74 --- /dev/null +++ b/testing/talos/tests/test_xrestop.py @@ -0,0 +1,66 @@ +#!/usr/bin/env python + +""" +Tests for talos.xrestop +""" +from __future__ import absolute_import + +import os +import subprocess +import unittest + +from talos.cmanager_linux import xrestop + +here = os.path.dirname(os.path.abspath(__file__)) +xrestop_output = os.path.join(here, 'xrestop_output.txt') + + +class TestXrestop(unittest.TestCase): + + def test_parsing(self): + """test parsing xrestop output from xrestop_output.txt""" + + class MockPopen(object): + """ + stub class for subprocess.Popen + We mock this to return a local static copy of xrestop output + This has the unfortunate nature of depending on implementation + details. + """ + def __init__(self, *args, **kwargs): + self.returncode = 0 + + def communicate(self): + stdout = open(xrestop_output).read() + return stdout, '' + + # monkey-patch subprocess.Popen + Popen = subprocess.Popen + subprocess.Popen = MockPopen + + # get the output + output = xrestop() + + # ensure that the parsed output is equal to what is in + # xrestop_output.txt + self.assertEqual(len(output), 7) # seven windows with PIDs + + # the first window is Thunderbird + pid = 2035 # thundrbird's pid + self.assertTrue(pid in output) + thunderbird = output[pid] + self.assertEqual(thunderbird['index'], 0) + self.assertEqual(thunderbird['total bytes'], '~4728761') + + # PID=1668 is a Terminal + pid = 1668 + self.assertTrue(pid in output) + terminal = output[pid] + self.assertEqual(terminal['pixmap bytes'], '1943716') + + # cleanup: set subprocess.Popen back + subprocess.Popen = Popen + + +if __name__ == '__main__': + unittest.main() diff --git a/testing/talos/talos/unittests/xrestop_output.txt b/testing/talos/tests/xrestop_output.txt similarity index 100% rename from testing/talos/talos/unittests/xrestop_output.txt rename to testing/talos/tests/xrestop_output.txt From b470a9a92921504c90cf58d3b1892e791b440f18 Mon Sep 17 00:00:00 2001 From: Sylvestre Ledru Date: Thu, 26 Oct 2017 15:09:54 +0200 Subject: [PATCH 36/69] Bug 1411960 - Enable modernize-avoid-bind to recommend using lambda instead of std::bind r=andi MozReview-Commit-ID: C9bOP9SxFan --HG-- extra : rebase_source : 352bf343efeb26593b451bee4863e08838a93a5b --- tools/clang-tidy/config.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/tools/clang-tidy/config.yaml b/tools/clang-tidy/config.yaml index 7983d3f2d71b..54641affe3b6 100644 --- a/tools/clang-tidy/config.yaml +++ b/tools/clang-tidy/config.yaml @@ -16,6 +16,8 @@ clang_checkers: publish: !!bool yes - name: misc-suspicious-semicolon publish: !!bool yes + - name: modernize-avoid-bind + publish: !!bool yes - name: modernize-loop-convert publish: !!bool yes - name: modernize-raw-string-literal From 540f4760076b1e9f8dfa40de22a526f8db81aa47 Mon Sep 17 00:00:00 2001 From: Oriol Brufau Date: Tue, 24 Oct 2017 03:55:07 +0200 Subject: [PATCH 37/69] Bug 1377677 - Remember expanded objects when switching panel in JSON Viewer r=Honza MozReview-Commit-ID: AB9SUV2FY8s --HG-- extra : rebase_source : 3391bc5bb59451a4a66ecad355bd6ea7ce9a045a --- .../client/jsonview/components/JsonPanel.js | 18 +++--------------- .../jsonview/components/MainTabbedArea.js | 5 +++-- devtools/client/jsonview/json-viewer.js | 13 +++++++++++++ .../test/browser_jsonview_valid_json.js | 5 +++++ 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/devtools/client/jsonview/components/JsonPanel.js b/devtools/client/jsonview/components/JsonPanel.js index cc85db2f16bb..9f90fcc5cdbe 100644 --- a/devtools/client/jsonview/components/JsonPanel.js +++ b/devtools/client/jsonview/components/JsonPanel.js @@ -8,8 +8,7 @@ define(function (require, exports, module) { const { DOM: dom, createFactory, createClass, PropTypes } = require("devtools/client/shared/vendor/react"); - const TreeViewClass = require("devtools/client/shared/components/tree/TreeView"); - const TreeView = createFactory(TreeViewClass); + const TreeView = createFactory(require("devtools/client/shared/components/tree/TreeView")); const { REPS, MODE } = require("devtools/client/shared/components/reps/reps"); const { createFactories } = require("devtools/client/shared/react-utils"); @@ -19,8 +18,6 @@ define(function (require, exports, module) { const { Toolbar, ToolbarButton } = createFactories(require("./reps/Toolbar")); const { div } = dom; - const AUTO_EXPAND_MAX_SIZE = 100 * 1024; - const AUTO_EXPAND_MAX_LEVEL = 7; function isObject(value) { return Object(value) === value; @@ -42,7 +39,7 @@ define(function (require, exports, module) { PropTypes.bool, PropTypes.number ]), - jsonTextLength: PropTypes.number, + expandedNodes: PropTypes.instanceOf(Set), searchFilter: PropTypes.string, actions: PropTypes.object, }, @@ -96,15 +93,6 @@ define(function (require, exports, module) { width: "100%" }]; - // Expand the document by default if its size isn't bigger than 100KB. - let expandedNodes = new Set(); - if (this.props.jsonTextLength <= AUTO_EXPAND_MAX_SIZE) { - expandedNodes = TreeViewClass.getExpandedNodes( - this.props.data, - {maxLevel: AUTO_EXPAND_MAX_LEVEL} - ); - } - // Render tree component. return TreeView({ object: this.props.data, @@ -112,7 +100,7 @@ define(function (require, exports, module) { onFilter: this.onFilter, columns: columns, renderValue: this.renderValue, - expandedNodes: expandedNodes, + expandedNodes: this.props.expandedNodes, }); }, diff --git a/devtools/client/jsonview/components/MainTabbedArea.js b/devtools/client/jsonview/components/MainTabbedArea.js index 7aa201117c40..962605dcf521 100644 --- a/devtools/client/jsonview/components/MainTabbedArea.js +++ b/devtools/client/jsonview/components/MainTabbedArea.js @@ -34,7 +34,8 @@ define(function (require, exports, module) { PropTypes.array, PropTypes.bool, PropTypes.number - ]) + ]), + expandedNodes: PropTypes.instanceOf(Set), }, getInitialState: function () { @@ -60,7 +61,7 @@ define(function (require, exports, module) { title: JSONView.Locale.$STR("jsonViewer.tab.JSON")}, JsonPanel({ data: this.props.json, - jsonTextLength: this.props.jsonText.length, + expandedNodes: this.props.expandedNodes, actions: this.props.actions, searchFilter: this.state.searchFilter }) diff --git a/devtools/client/jsonview/json-viewer.js b/devtools/client/jsonview/json-viewer.js index d1017826f534..e8c6c2536b14 100644 --- a/devtools/client/jsonview/json-viewer.js +++ b/devtools/client/jsonview/json-viewer.js @@ -10,8 +10,11 @@ define(function (require, exports, module) { const { render } = require("devtools/client/shared/vendor/react-dom"); const { createFactories } = require("devtools/client/shared/react-utils"); const { MainTabbedArea } = createFactories(require("./components/MainTabbedArea")); + const TreeViewClass = require("devtools/client/shared/components/tree/TreeView"); const json = document.getElementById("json"); + const AUTO_EXPAND_MAX_SIZE = 100 * 1024; + const AUTO_EXPAND_MAX_LEVEL = 7; let prettyURL; @@ -35,6 +38,16 @@ define(function (require, exports, module) { input.json = err; } + // Expand the document by default if its size isn't bigger than 100KB. + if (!(input.json instanceof Error) && input.jsonText.length <= AUTO_EXPAND_MAX_SIZE) { + input.expandedNodes = TreeViewClass.getExpandedNodes( + input.json, + {maxLevel: AUTO_EXPAND_MAX_LEVEL} + ); + } else { + input.expandedNodes = new Set(); + } + json.remove(); /** diff --git a/devtools/client/jsonview/test/browser_jsonview_valid_json.js b/devtools/client/jsonview/test/browser_jsonview_valid_json.js index 9a34873ecc82..78a6fae4429e 100644 --- a/devtools/client/jsonview/test/browser_jsonview_valid_json.js +++ b/devtools/client/jsonview/test/browser_jsonview_valid_json.js @@ -31,6 +31,11 @@ add_task(function* () { // Clicking the label collapses the auto-expanded node. yield clickJsonNode(".jsonPanelBox .treeTable .treeLabel"); is(yield countRows(), 1, "There must be one row"); + + // Collapsed nodes are preserved when switching panels. + yield selectJsonViewContentTab("headers"); + yield selectJsonViewContentTab("json"); + is(yield countRows(), 1, "There must still be one row"); }); function countRows() { From 3df49e38ba1327c06955b2779ffd6a5c9ed98fa6 Mon Sep 17 00:00:00 2001 From: Oriol Brufau Date: Mon, 23 Oct 2017 01:11:22 +0200 Subject: [PATCH 38/69] Bug 1388335 - Load JSON Viewer for all application/*+json content types. r=Honza MozReview-Commit-ID: CPKRDm6q6yw --HG-- extra : rebase_source : e33ecab98fdf002d4bb1186760944bd995162c6d --- devtools/client/jsonview/converter-child.js | 17 ++-- .../client/jsonview/converter-observer.js | 3 +- devtools/client/jsonview/test/browser.ini | 1 + .../test/browser_jsonview_content_type.js | 80 +++++++++++++++++++ .../client/jsonview/test/doc_frame_script.js | 5 ++ devtools/client/jsonview/test/head.js | 11 +++ 6 files changed, 106 insertions(+), 11 deletions(-) create mode 100644 devtools/client/jsonview/test/browser_jsonview_content_type.js diff --git a/devtools/client/jsonview/converter-child.js b/devtools/client/jsonview/converter-child.js index ad151252185d..fd1ebddd9d1d 100644 --- a/devtools/client/jsonview/converter-child.js +++ b/devtools/client/jsonview/converter-child.js @@ -201,24 +201,23 @@ Converter.prototype = { // To save with the proper extension we need the original content type, // which has been replaced by application/vnd.mozilla.json.view function fixSave(request) { - let originalType; + let match; if (request instanceof Ci.nsIHttpChannel) { try { let header = request.getResponseHeader("Content-Type"); - originalType = header.split(";")[0]; + match = header.match(/^(application\/(?:[^;]+\+)?json)(?:;|$)/); } catch (err) { // Handled below } } else { let uri = request.QueryInterface(Ci.nsIChannel).URI.spec; - let match = uri.match(/^data:(.*?)[,;]/); - if (match) { - originalType = match[1]; - } + match = uri.match(/^data:(application\/(?:[^;,]+\+)?json)[;,]/); } - const JSON_TYPES = ["application/json", "application/manifest+json"]; - if (!JSON_TYPES.includes(originalType)) { - originalType = JSON_TYPES[0]; + let originalType; + if (match) { + originalType = match[1]; + } else { + originalType = "application/json"; } request.QueryInterface(Ci.nsIWritablePropertyBag); request.setProperty("contentType", originalType); diff --git a/devtools/client/jsonview/converter-observer.js b/devtools/client/jsonview/converter-observer.js index 31f70a3dfc53..d067db46ba1f 100644 --- a/devtools/client/jsonview/converter-observer.js +++ b/devtools/client/jsonview/converter-observer.js @@ -90,8 +90,7 @@ JsonViewSniffer.prototype = { // Check the response content type and if it's a valid type // such as application/json or application/manifest+json // change it to new internal type consumed by JSON View. - const JSON_TYPES = ["application/json", "application/manifest+json"]; - if (JSON_TYPES.includes(request.contentType)) { + if (/^application\/(?:.+\+)?json$/.test(request.contentType)) { return JSON_VIEW_MIME_TYPE; } } diff --git a/devtools/client/jsonview/test/browser.ini b/devtools/client/jsonview/test/browser.ini index 1a2c574f0720..6bfc4eda5c84 100644 --- a/devtools/client/jsonview/test/browser.ini +++ b/devtools/client/jsonview/test/browser.ini @@ -22,6 +22,7 @@ support-files = [browser_jsonview_bug_1380828.js] [browser_jsonview_ignore_charset.js] +[browser_jsonview_content_type.js] [browser_jsonview_copy_headers.js] subsuite = clipboard skip-if = (os == 'linux' && bits == 32 && debug) # bug 1328915, disable linux32 debug devtools for timeouts diff --git a/devtools/client/jsonview/test/browser_jsonview_content_type.js b/devtools/client/jsonview/test/browser_jsonview_content_type.js new file mode 100644 index 000000000000..d8d55a9a2204 --- /dev/null +++ b/devtools/client/jsonview/test/browser_jsonview_content_type.js @@ -0,0 +1,80 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +const mimeSvc = Cc["@mozilla.org/mime;1"].getService(Ci.nsIMIMEService); +const handlerSvc = Cc["@mozilla.org/uriloader/handler-service;1"] + .getService(Ci.nsIHandlerService); + +let contentTypes = { + valid: [ + "application/json", + "application/manifest+json", + "application/vnd.api+json", + "application/hal+json", + "application/json+json", + "application/whatever+json", + ], + invalid: [ + "text/json", + "text/hal+json", + "application/jsona", + "application/whatever+jsona", + ], +}; + +add_task(function* () { + info("Test JSON content types started"); + + // Prevent saving files to disk. + let useDownloadDir = SpecialPowers.getBoolPref("browser.download.useDownloadDir"); + SpecialPowers.setBoolPref("browser.download.useDownloadDir", false); + let { MockFilePicker } = SpecialPowers; + MockFilePicker.init(window); + MockFilePicker.returnValue = MockFilePicker.returnCancel; + + for (let kind of Object.keys(contentTypes)) { + let isValid = kind === "valid"; + for (let type of contentTypes[kind]) { + // Prevent "Open or Save" dialogs, which would make the test fail. + let mimeInfo = mimeSvc.getFromTypeAndExtension(type, null); + let exists = handlerSvc.exists(mimeInfo); + let {alwaysAskBeforeHandling} = mimeInfo; + mimeInfo.alwaysAskBeforeHandling = false; + handlerSvc.store(mimeInfo); + + yield testType(isValid, type); + yield testType(isValid, type, ";foo=bar+json"); + + // Restore old nsIMIMEInfo + if (exists) { + Object.assign(mimeInfo, {alwaysAskBeforeHandling}); + handlerSvc.store(mimeInfo); + } else { + handlerSvc.remove(mimeInfo); + } + } + } + + // Restore old pref + registerCleanupFunction(function () { + MockFilePicker.cleanup(); + SpecialPowers.setBoolPref("browser.download.useDownloadDir", useDownloadDir); + }); +}); + +function testType(isValid, type, params = "") { + const TEST_JSON_URL = "data:" + type + params + ",[1,2,3]"; + return addJsonViewTab(TEST_JSON_URL).then(async function () { + ok(isValid, "The JSON Viewer should only load for valid content types."); + is(await evalInContent("document.contentType"), type, "Got the right content type"); + + let count = await getElementCount(".jsonPanelBox .treeTable .treeRow"); + is(count, 3, "There must be expected number of rows"); + }, function () { + ok(!isValid, "The JSON Viewer should only not load for invalid content types."); + }); +} diff --git a/devtools/client/jsonview/test/doc_frame_script.js b/devtools/client/jsonview/test/doc_frame_script.js index 626f8ac99b21..372cff7168d0 100644 --- a/devtools/client/jsonview/test/doc_frame_script.js +++ b/devtools/client/jsonview/test/doc_frame_script.js @@ -114,3 +114,8 @@ addMessageListener("Test:JsonView:WaitForFilter", function (msg) { observer.observe(firstRow, { attributes: true }); }); + +addMessageListener("Test:JsonView:Eval", function (msg) { + let result = content.eval(msg.data.code); + sendAsyncMessage(msg.name, {result}); +}); diff --git a/devtools/client/jsonview/test/head.js b/devtools/client/jsonview/test/head.js index d5ea9b3fffca..736fa85188d3 100644 --- a/devtools/client/jsonview/test/head.js +++ b/devtools/client/jsonview/test/head.js @@ -47,6 +47,12 @@ function addJsonViewTab(url, timeout = -1) { let frameScriptUrl = rootDir + "doc_frame_script.js"; browser.messageManager.loadFrameScript(frameScriptUrl, false); + // Check if there is a JSONView object. + if (!content.window.wrappedJSObject.JSONView) { + deferred.reject("JSON Viewer did not load."); + return; + } + // Resolve if the JSONView is fully loaded or wait // for an initialization event. if (content.window.wrappedJSObject.JSONView.initialized) { @@ -171,3 +177,8 @@ function waitForFilter() { function normalizeNewLines(value) { return value.replace("(\r\n|\n)", "\n"); } + +function evalInContent(code) { + return executeInContent("Test:JsonView:Eval", {code}) + .then(result => result.result); +} From 0536030df8e2fbfb3e900b38fe7409e5f1f5215d Mon Sep 17 00:00:00 2001 From: Ray Lin Date: Thu, 12 Oct 2017 17:44:47 +0800 Subject: [PATCH 39/69] Bug 1402877 - Part 1. Refactor mochitest test_videocontrols.html to use add_task(). r=jaws MozReview-Commit-ID: AZGgwLDUoZD --HG-- extra : rebase_source : fc0614a67601b74de0a951119a256e87d4d68c93 --- .../tests/widgets/test_videocontrols.html | 640 +++++++----------- 1 file changed, 257 insertions(+), 383 deletions(-) diff --git a/toolkit/content/tests/widgets/test_videocontrols.html b/toolkit/content/tests/widgets/test_videocontrols.html index d5ee4aa26c3e..b9fdfae550ea 100644 --- a/toolkit/content/tests/widgets/test_videocontrols.html +++ b/toolkit/content/tests/widgets/test_videocontrols.html @@ -4,6 +4,8 @@ Video controls test + + @@ -40,7 +42,6 @@ const scrubberMargin = 9; const scrubberWidth = videoWidth - controlBarMargin - playButtonWidth - scrubberMargin * 2 - positionAndDurationWidth - muteButtonWidth - volumeSliderMarginStart - volumeSliderWidth - volumeSliderMarginEnd - fullscreenButtonWidth - controlBarMargin; const scrubberHeight = 40; - // Play button is on the bottom-left const playButtonCenterX = 0 + Math.round(playButtonWidth / 2); const playButtonCenterY = videoHeight - Math.round(playButtonHeight / 2); @@ -55,28 +56,21 @@ const fullscreenButtonCenterY = videoHeight - Math.round(fullscreenButtonHeight const scrubberOffsetX = controlBarMargin + playButtonWidth + scrubberMargin; const scrubberCenterY = videoHeight - Math.round(scrubberHeight / 2); -var testnum = 1; -var video = document.getElementById("video"); +const video = document.getElementById("video"); -const domUtil = SpecialPowers.Cc["@mozilla.org/inspector/dom-utils;1"] - .getService(SpecialPowers.Ci.inIDOMUtils); +let expectingEvents; +let expectingEventPromise; -function getButtonByAttribute(aName, aValue) { - var kids = domUtil.getChildrenForNode(video, true); - var videocontrols = kids[1]; - return SpecialPowers.wrap(document) - .getAnonymousElementByAttribute(videocontrols, aName, aValue); -} - -function isMuteButtonMuted() { - var muteButton = getButtonByAttribute("anonid", "muteButton"); +async function isMuteButtonMuted() { + const muteButton = getAnonElementWithinVideoByAttribute(video, "anonid", "muteButton"); + await new Promise(SimpleTest.executeSoon); return muteButton.getAttribute("muted") === "true"; } -function isVolumeSliderShowingCorrectVolume(expectedVolume) { - var volumeControl = getButtonByAttribute("anonid", "volumeControl"); - is(+volumeControl.value, expectedVolume * 100, - "volume slider should match expected volume"); +async function isVolumeSliderShowingCorrectVolume(expectedVolume) { + const volumeControl = getAnonElementWithinVideoByAttribute(video, "anonid", "volumeControl"); + await new Promise(SimpleTest.executeSoon); + is(+volumeControl.value, expectedVolume * 100, "volume slider should match expected volume"); } function forceReframe() { @@ -88,382 +82,262 @@ function forceReframe() { video.getBoundingClientRect(); } -function runTest(event) { - ok(true, "----- test #" + testnum + " -----"); +function verifyExpectedEvent(event) { + const checkingEvent = expectingEvents.shift(); - switch (testnum) { - /* - * Check operation of play/pause/mute/unmute buttons. - */ - case 1: - // Check initial state upon load - is(event.type, "canplaythrough", "checking event type"); - is(video.paused, true, "checking video play state"); - is(video.muted, false, "checking video mute state"); - - // Click the play button - SimpleTest.executeSoon(() => { - synthesizeMouse(video, playButtonCenterX, playButtonCenterY, { }); - }); - break; - - case 2: - is(event.type, "play", "checking event type"); - is(video.paused, false, "checking video play state"); - is(video.muted, false, "checking video mute state"); - - // Click the pause button - SimpleTest.executeSoon(() => { - synthesizeMouse(video, playButtonCenterX, playButtonCenterY, { }); - }); - break; - - case 3: - is(event.type, "pause", "checking event type"); - is(video.paused, true, "checking video play state"); - is(video.muted, false, "checking video mute state"); - - SimpleTest.executeSoon(() => { - synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, { }); // Mute. - }); - break; - - case 4: - is(event.type, "volumechange", "checking event type"); - is(video.paused, true, "checking video play state"); - is(video.muted, true, "checking video mute state"); - - SimpleTest.executeSoon(() => { - synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, { }); // Unmute. - }); - break; - - /* - * Bug 470596: Make sure that having CSS border or padding doesn't - * break the controls (though it should move them) - */ - case 5: - is(event.type, "volumechange", "checking event type"); - is(video.paused, true, "checking video play state"); - is(video.muted, false, "checking video mute state"); - - video.style.border = "medium solid purple"; - video.style.borderWidth = "30px 40px 50px 60px"; - video.style.padding = "10px 20px 30px 40px"; - // totals: top: 40px, right: 60px, bottom: 80px, left: 100px - - // Click the play button - SimpleTest.executeSoon(() => { - synthesizeMouse(video, 100 + playButtonCenterX, 40 + playButtonCenterY, { }); - }); - break; - - case 6: - is(event.type, "play", "checking event type"); - is(video.paused, false, "checking video play state"); - is(video.muted, false, "checking video mute state"); - video.pause(); - break; - - case 7: - is(event.type, "pause", "checking event type"); - is(video.paused, true, "checking video play state"); - is(video.muted, false, "checking video mute state"); - - // Click the mute button - SimpleTest.executeSoon(() => { - synthesizeMouse(video, 100 + muteButtonCenterX, 40 + muteButtonCenterY, { }); - }); - break; - - case 8: - is(event.type, "volumechange", "checking event type"); - is(video.paused, true, "checking video play state"); - is(video.muted, true, "checking video mute state"); - // Clear the style set in test 5. - video.style.border = ""; - video.style.borderWidth = ""; - video.style.padding = ""; - - video.muted = false; - break; - - /* - * Previous tests have moved playback postion, reset it to 0. - */ - case 9: - is(event.type, "volumechange", "checking event type"); - is(video.paused, true, "checking video play state"); - is(video.muted, false, "checking video mute state"); - ok(true, "video position is at " + video.currentTime); - video.currentTime = 0.0; - break; - - case 10: - is(event.type, "seeking", "checking event type"); - ok(true, "video position is at " + video.currentTime); - break; - - /* - * Drag the slider's thumb to the halfway point with the mouse. - */ - case 11: - is(event.type, "seeked", "checking event type"); - ok(true, "video position is at " + video.currentTime); - // Bug 477434 -- sometimes we get 0.098999 here instead of 0! - // is(video.currentTime, 0.0, "checking playback position"); - - SimpleTest.executeSoon(() => { - var beginDragX = scrubberOffsetX; - var endDragX = scrubberOffsetX + (scrubberWidth / 2); - synthesizeMouse(video, beginDragX, scrubberCenterY, { type: "mousedown", button: 0 }); - synthesizeMouse(video, endDragX, scrubberCenterY, { type: "mousemove", button: 0 }); - synthesizeMouse(video, endDragX, scrubberCenterY, { type: "mouseup", button: 0 }); - }); - break; - - case 12: - is(event.type, "seeking", "checking event type"); - ok(true, "video position is at " + video.currentTime); - break; - - /* - * Click the slider at the 1/4 point with the mouse (jump backwards) - */ - case 13: - is(event.type, "seeked", "checking event type"); - ok(true, "video position is at " + video.currentTime); - var expectedTime = videoDuration / 2; - // The width of srubber is not equal in every platform as we use system default font - // in duration and position box. We can not precisely drag to expected position, so - // we just make sure the difference is within 10% of video duration. - ok(Math.abs(video.currentTime - expectedTime) < videoDuration / 10, "checking expected playback position"); - - SimpleTest.executeSoon(() => { - synthesizeMouse(video, scrubberOffsetX + (scrubberWidth / 4), scrubberCenterY, { }); - }); - break; - - case 14: - is(event.type, "seeking", "checking event type"); - ok(true, "video position is at " + video.currentTime); - break; - - case 15: - is(event.type, "seeked", "checking event type"); - ok(true, "video position is at " + video.currentTime); - // The scrubber currently just jumps towards the nearest pageIncrement point, not - // precisely to the point clicked. So, expectedTime isn't (videoDuration / 4). - // We should end up at 1.733, but sometimes we end up at 1.498. I guess - // it's timing depending if the things it's click-and-hold, or a - // single click. So, just make sure we end up less that the previous - // position. - var lastPosition = (videoDuration / 2) - 0.1; - ok(video.currentTime < lastPosition, "checking expected playback position"); - - // Set volume to 0.1 so one down arrow hit will decrease it to 0. - video.volume = 0.1; - break; - - // See bug 694696. - case 16: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0.1, "Volume should be set."); - ok(!video.muted, "Video is not muted."); - - video.focus(); - SimpleTest.executeSoon(() => synthesizeKey("VK_DOWN", {})); - break; - - case 17: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0, "Volume should be 0."); - ok(!video.muted, "Video is not muted."); - - SimpleTest.executeSoon(() => { - ok(isMuteButtonMuted(), "Mute button says it's muted"); - synthesizeKey("VK_UP", {}); - }); - break; - - case 18: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0.1, "Volume is increased."); - ok(!video.muted, "Video is not muted."); - - SimpleTest.executeSoon(() => { - ok(!isMuteButtonMuted(), "Mute button says it's not muted"); - synthesizeKey("VK_DOWN", {}); - }); - break; - - case 19: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0, "Volume should be 0."); - ok(!video.muted, "Video is not muted."); - - SimpleTest.executeSoon(() => { - ok(isMuteButtonMuted(), "Mute button says it's muted"); - synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, { }); - }); - break; - - case 20: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0.5, "Volume should be 0.5."); - ok(!video.muted, "Video is not muted."); - - SimpleTest.executeSoon(() => synthesizeKey("VK_UP", {})); - break; - - case 21: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0.6, "Volume should be 0.6."); - ok(!video.muted, "Video is not muted."); - - SimpleTest.executeSoon(() => { - synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, { }); - }); - break; - - case 22: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0.6, "Volume should be 0.6."); - ok(video.muted, "Video is muted."); - - SimpleTest.executeSoon(() => { - ok(isMuteButtonMuted(), "Mute button says it's muted"); - synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, { }); - }); - break; - - case 23: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0.6, "Volume should be 0.6."); - ok(!video.muted, "Video is not muted."); - - SimpleTest.executeSoon(() => { - ok(!isMuteButtonMuted(), "Mute button says it's not muted"); - synthesizeMouse(video, fullscreenButtonCenterX, fullscreenButtonCenterY, { }); - }); - break; - - case 24: - is(event.type, "mozfullscreenchange", "checking event type"); - is(video.volume, 0.6, "Volume should still be 0.6"); - SimpleTest.executeSoon(function() { - isVolumeSliderShowingCorrectVolume(video.volume); - synthesizeKey("VK_ESCAPE", {}); - }); - break; - - case 25: - is(event.type, "mozfullscreenchange", "checking event type"); - is(video.volume, 0.6, "Volume should still be 0.6"); - SimpleTest.executeSoon(function() { - isVolumeSliderShowingCorrectVolume(video.volume); - forceReframe(); - video.focus(); - synthesizeKey("VK_DOWN", {}); - }); - break; - - case 26: - is(event.type, "volumechange", "checking event type"); - is(video.volume, 0.5, "Volume should be decreased by 0.1"); - SimpleTest.executeSoon(function() { - isVolumeSliderShowingCorrectVolume(video.volume); - synthesizeMouse(video, playButtonCenterX, playButtonCenterY, { }); - }); - break; - - case 27: - is(event.type, "play", "checking event type"); - - SimpleTest.executeSoon(() => { - synthesizeKey(" ", {}); - }); - break; - - case 28: - is(event.type, "pause", "checking event type"); - - SimpleTest.executeSoon(() => { - synthesizeMouse(video, playButtonCenterX, playButtonCenterY, { }); - }); - break; - - case 29: - is(event.type, "play", "checking event type"); - - SimpleTest.executeSoon(() => { - // Bug 1352724: Click and hold on timeline should pause video immediately. - synthesizeMouse(video, scrubberOffsetX + 10, scrubberCenterY, { type: "mousedown", button: 0 }); - }); - break; - - case 30: - is(event.type, "pause", "checking event type"); - break; - - case 31: - is(event.type, "seeking", "checking event type"); - ok(true, "video position is at " + video.currentTime); - break; - - case 32: - is(event.type, "seeked", "checking event type"); - ok(true, "video position is at " + video.currentTime); - synthesizeMouse(video, scrubberOffsetX + 10, scrubberCenterY, {}); - break; - - case 33: - is(event.type, "play", "checking event type"); - ok(true, "video resume after mouseup"); - synthesizeMouse(video, playButtonCenterX, playButtonCenterY, { }); - break; - - // Bug 1367194: Always ensure video is paused before calling SimpleTest.finish(). - case 34: - is(event.type, "pause", "checking event type"); - SimpleTest.finish(); - break; - - default: - throw "unexpected test #" + testnum + " w/ event " + event.type; + if (event.type == checkingEvent) { + ok(true, "checking event type: ", checkingEvent); + } else { + expectingEventPromise.reject(new Error(`Got event: ${event.type}, expected: ${checkingEvent}`)); } - testnum++; + if (expectingEvents.length == 0) { + expectingEventPromise.resolve(); + } } +async function waitForEvent(...eventTypes) { + expectingEvents = eventTypes; - -function canplaythroughevent(event) { - video.removeEventListener("canplaythrough", canplaythroughevent); - // Other events expected by the test. - video.addEventListener("play", runTest); - video.addEventListener("pause", runTest); - video.addEventListener("volumechange", runTest); - video.addEventListener("seeking", runTest); - video.addEventListener("seeked", runTest); - document.addEventListener("mozfullscreenchange", runTest); - // Begin the test. - runTest(event); + return new Promise((resolve, reject) => expectingEventPromise = {resolve, reject}).catch(e => { + // Throw error here to get the caller in error stack. + ok(false, e); + }); } -function startMediaLoad() { - // Kick off test once video has loaded, in its canplaythrough event handler. - video.src = "seek_with_sound.ogg"; - video.addEventListener("canplaythrough", canplaythroughevent); -} +add_task(async function setup() { + await SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}); + await new Promise(resolve => { + video.addEventListener("canplaythrough", resolve, {once: true}); + video.src = "seek_with_sound.ogg"; + }) -function loadevent(event) { - SpecialPowers.pushPrefEnv({"set": [["media.cache_size", 40000]]}, startMediaLoad); -} + video.addEventListener("play", verifyExpectedEvent); + video.addEventListener("pause", verifyExpectedEvent); + video.addEventListener("volumechange", verifyExpectedEvent); + video.addEventListener("seeking", verifyExpectedEvent); + video.addEventListener("seeked", verifyExpectedEvent); + document.addEventListener("mozfullscreenchange", verifyExpectedEvent); -window.addEventListener("load", loadevent); + // Check initial state upon load + is(video.paused, true, "checking video play state"); + is(video.muted, false, "checking video mute state"); +}); -SimpleTest.waitForExplicitFinish(); +add_task(async function click_playbutton() { + synthesizeMouse(video, playButtonCenterX, playButtonCenterY, {}); + await waitForEvent("play"); + is(video.paused, false, "checking video play state"); + is(video.muted, false, "checking video mute state"); +}); + +add_task(async function click_pausebutton() { + synthesizeMouse(video, playButtonCenterX, playButtonCenterY, {}) + await waitForEvent("pause"); + is(video.paused, true, "checking video play state"); + is(video.muted, false, "checking video mute state"); +}); + +add_task(async function mute_volume() { + synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, {}); + await waitForEvent("volumechange"); + is(video.paused, true, "checking video play state"); + is(video.muted, true, "checking video mute state"); +}); + +add_task(async function unmute_volume() { + synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, {}); + await waitForEvent("volumechange"); + is(video.paused, true, "checking video play state"); + is(video.muted, false, "checking video mute state"); +}); + +/* + * Bug 470596: Make sure that having CSS border or padding doesn't + * break the controls (though it should move them) + */ +add_task(async function styled_video() { + video.style.border = "medium solid purple"; + video.style.borderWidth = "30px 40px 50px 60px"; + video.style.padding = "10px 20px 30px 40px"; + // totals: top: 40px, right: 60px, bottom: 80px, left: 100px + + // Click the play button + synthesizeMouse(video, 100 + playButtonCenterX, 40 + playButtonCenterY, { }); + await waitForEvent("play"); + is(video.paused, false, "checking video play state"); + is(video.muted, false, "checking video mute state"); + + // Pause the video + video.pause(); + await waitForEvent("pause"); + is(video.paused, true, "checking video play state"); + is(video.muted, false, "checking video mute state"); + + // Click the mute button + synthesizeMouse(video, 100 + muteButtonCenterX, 40 + muteButtonCenterY, {}); + await waitForEvent("volumechange"); + is(video.paused, true, "checking video play state"); + is(video.muted, true, "checking video mute state"); + + // Clear the style set + video.style.border = ""; + video.style.borderWidth = ""; + video.style.padding = ""; + + // Unmute the video + video.muted = false; + await waitForEvent("volumechange"); + is(video.paused, true, "checking video play state"); + is(video.muted, false, "checking video mute state"); +}); + +/* + * Previous tests have moved playback postion, reset it to 0. + */ +add_task(async function reset_currentTime() { + ok(true, "video position is at " + video.currentTime); + video.currentTime = 0.0; + await waitForEvent("seeking", "seeked"); + // Bug 477434 -- sometimes we get 0.098999 here instead of 0! + // is(video.currentTime, 0.0, "checking playback position"); + ok(true, "video position is at " + video.currentTime); +}); + +/* + * Drag the slider's thumb to the halfway point with the mouse. + */ +add_task(async function drag_slider() { + const beginDragX = scrubberOffsetX; + const endDragX = scrubberOffsetX + (scrubberWidth / 2); + const expectedTime = videoDuration / 2; + + synthesizeMouse(video, beginDragX, scrubberCenterY, {type: "mousedown", button: 0}); + synthesizeMouse(video, endDragX, scrubberCenterY, {type: "mousemove", button: 0}); + synthesizeMouse(video, endDragX, scrubberCenterY, {type: "mouseup", button: 0}); + await waitForEvent("seeking", "seeked"); + ok(true, "video position is at " + video.currentTime); + // The width of srubber is not equal in every platform as we use system default font + // in duration and position box. We can not precisely drag to expected position, so + // we just make sure the difference is within 10% of video duration. + ok(Math.abs(video.currentTime - expectedTime) < videoDuration / 10, "checking expected playback position"); +}); + +/* + * Click the slider at the 1/4 point with the mouse (jump backwards) + */ +add_task(async function click_slider() { + synthesizeMouse(video, scrubberOffsetX + (scrubberWidth / 4), scrubberCenterY, {}); + await waitForEvent("seeking", "seeked"); + ok(true, "video position is at " + video.currentTime); + // The scrubber currently just jumps towards the nearest pageIncrement point, not + // precisely to the point clicked. So, expectedTime isn't (videoDuration / 4). + // We should end up at 1.733, but sometimes we end up at 1.498. I guess + // it's timing depending if the things it's click-and-hold, or a + // single click. So, just make sure we end up less that the previous + // position. + const lastPosition = (videoDuration / 2) - 0.1; + ok(video.currentTime < lastPosition, "checking expected playback position"); + + // Set volume to 0.1 so one down arrow hit will decrease it to 0. + video.volume = 0.1; + await waitForEvent("volumechange"); + is(video.volume, 0.1, "Volume should be set."); + ok(!video.muted, "Video is not muted."); +}); + +// See bug 694696. +add_task(async function change_volume() { + video.focus(); + + synthesizeKey("VK_DOWN", {}); + await waitForEvent("volumechange"); + is(video.volume, 0, "Volume should be 0."); + ok(!video.muted, "Video is not muted."); + ok(await isMuteButtonMuted(), "Mute button says it's muted"); + + synthesizeKey("VK_UP", {}); + await waitForEvent("volumechange"); + is(video.volume, 0.1, "Volume is increased."); + ok(!video.muted, "Video is not muted."); + ok(!(await isMuteButtonMuted()), "Mute button says it's not muted"); + + synthesizeKey("VK_DOWN", {}); + await waitForEvent("volumechange"); + is(video.volume, 0, "Volume should be 0."); + ok(!video.muted, "Video is not muted."); + ok(await isMuteButtonMuted(), "Mute button says it's muted"); + + synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, {}); + await waitForEvent("volumechange"); + is(video.volume, 0.5, "Volume should be 0.5."); + ok(!video.muted, "Video is not muted."); + + synthesizeKey("VK_UP", {}); + await waitForEvent("volumechange"); + is(video.volume, 0.6, "Volume should be 0.6."); + ok(!video.muted, "Video is not muted."); + + synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, {}); + await waitForEvent("volumechange"); + is(video.volume, 0.6, "Volume should be 0.6."); + ok(video.muted, "Video is muted."); + ok(await isMuteButtonMuted(), "Mute button says it's muted"); + + synthesizeMouse(video, muteButtonCenterX, muteButtonCenterY, {}); + await waitForEvent("volumechange"); + is(video.volume, 0.6, "Volume should be 0.6."); + ok(!video.muted, "Video is not muted."); + ok(!(await isMuteButtonMuted()), "Mute button says it's not muted"); + + synthesizeMouse(video, fullscreenButtonCenterX, fullscreenButtonCenterY, {}); + await waitForEvent("mozfullscreenchange"); + is(video.volume, 0.6, "Volume should still be 0.6"); + await isVolumeSliderShowingCorrectVolume(video.volume); + + synthesizeKey("VK_ESCAPE", {}); + await waitForEvent("mozfullscreenchange"); + is(video.volume, 0.6, "Volume should still be 0.6"); + await isVolumeSliderShowingCorrectVolume(video.volume); + forceReframe(); + + video.focus(); + synthesizeKey("VK_DOWN", {}); + await waitForEvent("volumechange"); + is(video.volume, 0.5, "Volume should be decreased by 0.1"); + await isVolumeSliderShowingCorrectVolume(video.volume); +}); + +add_task(async function whitespace_pause_video() { + synthesizeMouse(video, playButtonCenterX, playButtonCenterY, {}); + await waitForEvent("play"); + + video.focus(); + synthesizeKey(" ", {}); + await waitForEvent("pause"); + + synthesizeMouse(video, playButtonCenterX, playButtonCenterY, {}); + await waitForEvent("play"); +}); + +/* + * Bug 1352724: Click and hold on timeline should pause video immediately. + */ +add_task(async function click_and_hold_slider() { + synthesizeMouse(video, scrubberOffsetX + 10, scrubberCenterY, {type: "mousedown", button: 0}); + await waitForEvent("pause", "seeking", "seeked"); + + synthesizeMouse(video, scrubberOffsetX + 10, scrubberCenterY, {}); + await waitForEvent("play"); +}); + +// Bug 1367194: Always ensure video is paused before finishing the test. +add_task(async function ensure_video_pause() { + if (!video.paused) { + video.pause(); + await waitForEvent("pause"); + } +}); From 8db0d7b2675720661985d4ffef580c8bf8e44121 Mon Sep 17 00:00:00 2001 From: Ray Lin Date: Tue, 26 Sep 2017 16:19:10 +0800 Subject: [PATCH 40/69] Bug 1402877 - Part 2. Don't let click event dispatch through media controls to video element. r=jaws MozReview-Commit-ID: BUW9PDxCSAY --HG-- extra : rebase_source : f00e6095065f429f7ea2dd227d3135623c074522 --- .../tests/widgets/test_videocontrols.html | 20 ++++++++++++++++++ toolkit/content/widgets/videocontrols.xml | 21 +++++++++++++------ 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/toolkit/content/tests/widgets/test_videocontrols.html b/toolkit/content/tests/widgets/test_videocontrols.html index b9fdfae550ea..d769248ce646 100644 --- a/toolkit/content/tests/widgets/test_videocontrols.html +++ b/toolkit/content/tests/widgets/test_videocontrols.html @@ -331,6 +331,26 @@ add_task(async function click_and_hold_slider() { await waitForEvent("play"); }); +/* + * Bug 1402877: Don't let click event dispatch through media controls to video element. + */ +add_task(async function click_event_dispatch() { + const clientScriptClickHandler = (e) => { + ok(false, "Should not receive the event"); + }; + video.addEventListener("click", clientScriptClickHandler); + + video.pause(); + await waitForEvent("pause"); + video.currentTime = 0.0; + await waitForEvent("seeking", "seeked"); + is(video.paused, true, "checking video play state"); + synthesizeMouse(video, scrubberOffsetX + 10, scrubberCenterY, {}); + await waitForEvent("seeking", "seeked"); + + video.removeEventListener("click", clientScriptClickHandler); +}); + // Bug 1367194: Always ensure video is paused before finishing the test. add_task(async function ensure_video_pause() { if (!video.paused) { diff --git a/toolkit/content/widgets/videocontrols.xml b/toolkit/content/widgets/videocontrols.xml index 59299b876476..19ce34fc605b 100644 --- a/toolkit/content/widgets/videocontrols.xml +++ b/toolkit/content/widgets/videocontrols.xml @@ -710,7 +710,7 @@ for (let element of this.controlListeners) { try { element.item.removeEventListener(element.event, element.func, - { mozSystemGroup: true, capture: element.capture }); + { mozSystemGroup: element.mozSystemGroup, capture: element.capture }); } catch (ex) {} } @@ -1818,10 +1818,16 @@ // Due to this helper function, "Utils" is made available to the event // listener functions. Hence declare it as a global for ESLint. /* global Utils */ - function addListener(elem, eventName, func, capture = false) { + function addListener(elem, eventName, func, {capture = false, mozSystemGroup = true} = {}) { let boundFunc = func.bind(self); - self.controlListeners.push({ item: elem, event: eventName, func: boundFunc, capture }); - elem.addEventListener(eventName, boundFunc, { mozSystemGroup: true, capture }); + self.controlListeners.push({ + item: elem, + event: eventName, + func: boundFunc, + capture, + mozSystemGroup, + }); + elem.addEventListener(eventName, boundFunc, {mozSystemGroup, capture}); } addListener(this.muteButton, "click", this.toggleMute); @@ -1837,8 +1843,11 @@ addListener(this.video.ownerDocument, "mozfullscreenchange", this.onFullscreenChange); addListener(this.controlBar, "transitionend", this.onControlBarTransitioned); addListener(this.video.ownerDocument, "fullscreenchange", this.onFullscreenChange); - addListener(this.video, "keypress", this.keyHandler, true); - + addListener(this.video, "keypress", this.keyHandler, {capture: true}); + // Prevent any click event within media controls from dispatching through to video. + addListener(this.videocontrols, "click", function(event) { + event.stopPropagation(); + }, {mozSystemGroup: false}); addListener(this.videocontrols, "dragstart", function(event) { event.preventDefault(); // prevent dragging of controls image (bug 517114) }); From acca96596954e98515644dc1ba18a8489c8a85c8 Mon Sep 17 00:00:00 2001 From: Ray Lin Date: Wed, 25 Oct 2017 15:24:40 +0800 Subject: [PATCH 41/69] Bug 1402877 - Part 3. Don't wait for click event being dispatched to media when media controls is present. r=surkov MozReview-Commit-ID: DSQREXSyEWk --HG-- extra : rebase_source : 3ff37c873dc5ebb594ac7f2d56cb6765a44f09ba --- accessible/tests/mochitest/actions/test_media.html | 2 -- 1 file changed, 2 deletions(-) diff --git a/accessible/tests/mochitest/actions/test_media.html b/accessible/tests/mochitest/actions/test_media.html index ae35deeee3d6..af139054adc2 100644 --- a/accessible/tests/mochitest/actions/test_media.html +++ b/accessible/tests/mochitest/actions/test_media.html @@ -64,7 +64,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=483573 { ID: muteBtn, actionName: "press", - events: CLICK_EVENTS, eventSeq: [ // new focusChecker(muteBtn), new nameChecker(muteBtn, "Unmute"), @@ -81,7 +80,6 @@ https://bugzilla.mozilla.org/show_bug.cgi?id=483573 { ID: playBtn, actionName: "press", - events: CLICK_EVENTS, eventSeq: [ // new focusChecker(playBtn), new nameChecker(playBtn, "Pause"), From eaeac4ff9726551d3a782f9a11b2468057625789 Mon Sep 17 00:00:00 2001 From: Jared Wein Date: Tue, 24 Oct 2017 14:59:34 -0400 Subject: [PATCH 42/69] Bug 1383207 - Using the keyboard shortcut to select-all in the Cookies dialog should select all the visible cookies. r=evanxd MozReview-Commit-ID: KmIapWrr0Zm --HG-- extra : rebase_source : b5417adbcd1ad3bfaff96693f0076edc86193d63 --- browser/components/preferences/cookies.js | 8 ++++++++ browser/components/preferences/cookies.xul | 8 +++++++- 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/browser/components/preferences/cookies.js b/browser/components/preferences/cookies.js index 96ee55faea05..27ad1b20e3e8 100644 --- a/browser/components/preferences/cookies.js +++ b/browser/components/preferences/cookies.js @@ -726,6 +726,14 @@ var gCookiesWindow = { aEvent.keyCode == KeyEvent.DOM_VK_BACK_SPACE)) { this.deleteCookie(); aEvent.preventDefault(); + } else if (aEvent.getModifierState("Accel") && + document.getElementById("key_selectAll") + .getAttribute("key") + .toLocaleLowerCase() + .charCodeAt(0) == aEvent.charCode) { + let view = gCookiesWindow._view; + view.selection.selectAll(); + aEvent.preventDefault(); } }, diff --git a/browser/components/preferences/cookies.xul b/browser/components/preferences/cookies.xul index 64617811ee8b..172f731bd45f 100644 --- a/browser/components/preferences/cookies.xul +++ b/browser/components/preferences/cookies.xul @@ -8,7 +8,12 @@ - + +%browserDTD; + +%cookiesDTD; +]> + From f99705311c35732bbb6a7014f185f9a02db3c132 Mon Sep 17 00:00:00 2001 From: Patrick McManus Date: Fri, 20 Oct 2017 13:39:49 -0400 Subject: [PATCH 43/69] Bug 1409858 - H2 CONNECT Tunnel Marked Plaintext Too Late r=nwgh MozReview-Commit-ID: IjuYDuvufRd --HG-- extra : rebase_source : ab7773dc015c31d6ba1eb8c933efc79c38b29d06 --- netwerk/protocol/http/Http2Session.cpp | 11 ++++++++++- netwerk/protocol/http/Http2Stream.cpp | 6 ++---- netwerk/protocol/http/TunnelUtils.cpp | 7 ++++--- 3 files changed, 16 insertions(+), 8 deletions(-) diff --git a/netwerk/protocol/http/Http2Session.cpp b/netwerk/protocol/http/Http2Session.cpp index e7f6b20f4e91..11ab8f17e385 100644 --- a/netwerk/protocol/http/Http2Session.cpp +++ b/netwerk/protocol/http/Http2Session.cpp @@ -595,9 +595,18 @@ void Http2Session::DontReuse() { LOG3(("Http2Session::DontReuse %p\n", this)); + if (!OnSocketThread()) { + LOG3(("Http2Session %p not on socket thread\n", this)); + nsCOMPtr event = NewRunnableMethod( + "Http2Session::DontReuse", this, &Http2Session::DontReuse); + gSocketTransportService->Dispatch(event, NS_DISPATCH_NORMAL); + return; + } + mShouldGoAway = true; - if (!mStreamTransactionHash.Count()) + if (!mClosed && !mStreamTransactionHash.Count()) { Close(NS_OK); + } } uint32_t diff --git a/netwerk/protocol/http/Http2Stream.cpp b/netwerk/protocol/http/Http2Stream.cpp index dec7db67726f..7498e992946a 100644 --- a/netwerk/protocol/http/Http2Stream.cpp +++ b/netwerk/protocol/http/Http2Stream.cpp @@ -1052,6 +1052,8 @@ Http2Stream::ConvertResponseHeaders(Http2Decompressor *decompressor, if ((httpResponseCode / 100) != 2) { MapStreamToPlainText(); } + MapStreamToHttpConnection(); + ClearTransactionsBlockedOnTunnel(); } if (httpResponseCode == 101) { @@ -1161,10 +1163,6 @@ Http2Stream::SetAllHeadersReceived() } mAllHeadersReceived = 1; - if (mIsTunnel) { - MapStreamToHttpConnection(); - ClearTransactionsBlockedOnTunnel(); - } } bool diff --git a/netwerk/protocol/http/TunnelUtils.cpp b/netwerk/protocol/http/TunnelUtils.cpp index c0db66095765..bef00fb11f0d 100644 --- a/netwerk/protocol/http/TunnelUtils.cpp +++ b/netwerk/protocol/http/TunnelUtils.cpp @@ -392,14 +392,15 @@ TLSFilterTransaction::NudgeTunnel(NudgeTunnelCallback *aCallback) return NS_ERROR_FAILURE; } - uint32_t notUsed; - int32_t written = PR_Write(mFD, "", 0); - if ((written < 0) && (PR_GetError() != PR_WOULD_BLOCK_ERROR)) { + nsCOMPtr ssl(do_QueryInterface(mSecInfo)); + nsresult rv = ssl ? ssl->DriveHandshake() : NS_ERROR_FAILURE; + if (NS_FAILED(rv) && rv != NS_BASE_STREAM_WOULD_BLOCK) { // fatal handshake failure LOG(("TLSFilterTransaction %p Fatal Handshake Failure: %d\n", this, PR_GetError())); return NS_ERROR_FAILURE; } + uint32_t notUsed; Unused << OnReadSegment("", 0, ¬Used); // The SSL Layer does some unusual things with PR_Poll that makes it a bad From 2e36aa6222aad4ba27cd0ef42a0000fc775977f8 Mon Sep 17 00:00:00 2001 From: Fred Lin Date: Thu, 26 Oct 2017 17:27:31 +0800 Subject: [PATCH 44/69] Bug 1410763 - Backout bug 1390055;r=Fischer MozReview-Commit-ID: 56hnjzgri0x --HG-- extra : rebase_source : ffd87274c9b564e6e91700f91c57a1b5ae18ce4c --- browser/components/uitour/UITour.jsm | 16 ++------- .../components/uitour/test/browser_UITour5.js | 36 ------------------- .../test/browser/browser_onboarding_uitour.js | 7 ++-- 3 files changed, 6 insertions(+), 53 deletions(-) diff --git a/browser/components/uitour/UITour.jsm b/browser/components/uitour/UITour.jsm index f4710a255304..80ca51e96bfe 100644 --- a/browser/components/uitour/UITour.jsm +++ b/browser/components/uitour/UITour.jsm @@ -115,13 +115,7 @@ this.UITour = { // to automatically open the appMenu when annotating this target. widgetName: "appMenu-fxa-label", }], - ["addons", { - query: (aDocument) => { - // select toolbar icon if exist, fallback to appMenu item - let node = aDocument.getElementById("add-ons-button"); - return node ? node : aDocument.getElementById("appMenu-addons-button"); - }, - }], + ["addons", {query: "#appMenu-addons-button"}], ["appMenu", { addTargetListener: (aDocument, aCallback) => { let panelPopup = aDocument.defaultView.PanelUI.panel; @@ -152,13 +146,7 @@ this.UITour = { }], ["help", {query: "#appMenu-help-button"}], ["home", {query: "#home-button"}], - ["library", { - query: (aDocument) => { - // select toolbar icon if exist, fallback to appMenu item - let node = aDocument.getElementById("library-button"); - return node ? node : aDocument.getElementById("appMenu-library-button"); - }, - }], + ["library", {query: "#appMenu-library-button"}], ["pocket", { allowAdd: true, query: (aDocument) => { diff --git a/browser/components/uitour/test/browser_UITour5.js b/browser/components/uitour/test/browser_UITour5.js index be1962136475..97422da86819 100644 --- a/browser/components/uitour/test/browser_UITour5.js +++ b/browser/components/uitour/test/browser_UITour5.js @@ -6,41 +6,7 @@ var gContentWindow; add_task(setup_UITourTest); -add_UITour_task(async function test_highlight_library_icon_in_toolbar() { - let highlight = document.getElementById("UITourHighlight"); - is_element_hidden(highlight, "Highlight should initially be hidden"); - - // Test highlighting the library button - let highlightVisiblePromise = elementVisiblePromise(highlight, "Should show highlight"); - gContentAPI.showHighlight("library"); - await highlightVisiblePromise; - UITour.getTarget(window, "library").then((target) => { - is("library-button", target.node.id, "Should highlight the right target"); - }); -}); - -add_UITour_task(async function test_highlight_addons_icon_in_toolbar() { - CustomizableUI.addWidgetToArea("add-ons-button", CustomizableUI.AREA_NAVBAR, 0); - ok(!UITour.availableTargetsCache.has(window), - "Targets should be evicted from cache after widget change"); - let highlight = document.getElementById("UITourHighlight"); - is_element_hidden(highlight, "Highlight should initially be hidden"); - - // Test highlighting the addons button on toolbar - let highlightVisiblePromise = elementVisiblePromise(highlight, "Should show highlight"); - gContentAPI.showHighlight("addons"); - await highlightVisiblePromise; - UITour.getTarget(window, "addons").then((target) => { - is("add-ons-button", target.node.id, "Should highlight the right target"); - CustomizableUI.removeWidgetFromArea("add-ons-button"); - }); -}); - add_UITour_task(async function test_highlight_library_and_show_library_subview() { - CustomizableUI.removeWidgetFromArea("library-button"); - - ok(!UITour.availableTargetsCache.has(window), - "Targets should be evicted from cache after widget change"); let highlight = document.getElementById("UITourHighlight"); is_element_hidden(highlight, "Highlight should initially be hidden"); @@ -71,6 +37,4 @@ add_UITour_task(async function test_highlight_library_and_show_library_subview() gContentAPI.hideMenu("appMenu"); await appMenuHiddenPromise; is(appMenu.state, "closed", "Should close the app menu"); - CustomizableUI.addWidgetToArea("library", CustomizableUI.AREA_NAVBAR, 0); }); - diff --git a/browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js b/browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js index 80c9317092a0..b089da0841e3 100644 --- a/browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js +++ b/browser/extensions/onboarding/test/browser/browser_onboarding_uitour.js @@ -53,12 +53,13 @@ add_task(async function test_clean_up_uitour_after_closing_overlay() { is(highlight.state, "open", "Should show UITour highlight"); is(highlight.getAttribute("targetName"), "library", "UITour should highlight library"); - // Close the overlay by clicking the overlay close button + // Close the overlay by clicking the overlay + // Should not click the close button here since the close button is hovered by appmenu and can't be clicked on win7 highlightClosePromise = promisePopupChange(highlight, "closed"); - BrowserTestUtils.synthesizeMouseAtCenter("#onboarding-overlay-close-btn", {}, tab.linkedBrowser); + BrowserTestUtils.synthesizeMouseAtPoint(2, 2, {}, tab.linkedBrowser); await promiseOnboardingOverlayClosed(tab.linkedBrowser); await highlightClosePromise; - is(highlight.state, "closed", "Should close UITour highlight after closing the overlay by clicking the overlay close button"); + is(highlight.state, "closed", "Should close UITour highlight after closing the overlay by clicking the overlay"); // Trigger UITour showHighlight again highlightOpenPromise = promisePopupChange(highlight, "open"); From 5318d77e13b8b9e7abcfe0fd95c837695cfb3fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?D=C3=A3o=20Gottwald?= Date: Thu, 26 Oct 2017 14:25:27 +0200 Subject: [PATCH 45/69] Bug 1411648 - Remove leftover z-index and bogus border from the nav bar. r=nhnt11 MozReview-Commit-ID: 5rdVAEHczZd --HG-- extra : rebase_source : db20d7ac8da7f31e6e6c565e2945b80949d5014a --- browser/themes/osx/browser.css | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/browser/themes/osx/browser.css b/browser/themes/osx/browser.css index 6751a5c92d8b..528706535549 100644 --- a/browser/themes/osx/browser.css +++ b/browser/themes/osx/browser.css @@ -132,9 +132,6 @@ #main-window:not([tabsintitlebar]) #TabsToolbar:not([collapsed="true"]) + #nav-bar, #TabsToolbar:not([collapsed="true"]) + #nav-bar:-moz-lwtheme { box-shadow: 0 calc(-1 * var(--tab-toolbar-navbar-overlap)) 0 var(--tabs-border); - /* Position the toolbar above the bottom of background tabs */ - position: relative; - z-index: 1; } /* Always draw a border on Yosemite to ensure the border is well-defined there @@ -148,11 +145,7 @@ } #main-window[tabsintitlebar] #TabsToolbar:not([collapsed="true"]) + #nav-bar:not(:-moz-lwtheme) { - border-top: 1px solid var(--tabs-border); - background-clip: padding-box; - /* Position the toolbar above the bottom of background tabs */ - position: relative; - z-index: 1; + box-shadow: 0 calc(-1 * var(--tab-toolbar-navbar-overlap)) 0 var(--tabs-border); } } From c4d18817413f9420b6b871e705540fb6984f64ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Thu, 26 Oct 2017 07:51:21 -0500 Subject: [PATCH 46/69] servo: Merge #19024 - Introduce style::dom::TDocument (from emilio:document); r=KiChjang The secret plan is introducing a `get_elements_with_id` for use by `querySelector` / `querySelectorAll`. But this allows also to make some code look a bit nicer. Source-Repo: https://github.com/servo/servo Source-Revision: ee4e371c73b265946146947bb16042360cb2fa41 --HG-- extra : subtree_source : https%3A//hg.mozilla.org/projects/converted-servo-linear extra : subtree_revision : 2e34bb4dd31ca9cdafc0756d5366f4ad196f73bd --- servo/components/layout_thread/dom_wrapper.rs | 39 +++++++--- servo/components/script/dom/element.rs | 9 +-- servo/components/style/dom.rs | 26 ++++++- servo/components/style/dom_apis.rs | 4 +- servo/components/style/gecko/wrapper.rs | 72 +++++++++++++------ servo/ports/geckolib/glue.rs | 14 ++-- 6 files changed, 117 insertions(+), 47 deletions(-) diff --git a/servo/components/layout_thread/dom_wrapper.rs b/servo/components/layout_thread/dom_wrapper.rs index fdf93bf66b8d..e5e6277b013f 100644 --- a/servo/components/layout_thread/dom_wrapper.rs +++ b/servo/components/layout_thread/dom_wrapper.rs @@ -51,7 +51,7 @@ use script_layout_interface::{OpaqueStyleAndLayoutData, StyleData}; use script_layout_interface::wrapper_traits::{DangerousThreadSafeLayoutNode, GetLayoutData, LayoutNode}; use script_layout_interface::wrapper_traits::{PseudoElementType, ThreadSafeLayoutElement, ThreadSafeLayoutNode}; use selectors::attr::{AttrSelectorOperation, NamespaceConstraint, CaseSensitivity}; -use selectors::matching::{ElementSelectorFlags, MatchingContext, RelevantLinkStatus}; +use selectors::matching::{ElementSelectorFlags, MatchingContext, QuirksMode, RelevantLinkStatus}; use selectors::matching::VisitedHandlingMode; use selectors::sink::Push; use servo_arc::{Arc, ArcBorrow}; @@ -69,7 +69,7 @@ use style::computed_values::display; use style::context::SharedStyleContext; use style::data::ElementData; use style::dom::{DomChildren, LayoutIterator, NodeInfo, OpaqueNode}; -use style::dom::{TElement, TNode}; +use style::dom::{TDocument, TElement, TNode}; use style::element_state::*; use style::font_metrics::ServoMetricsProvider; use style::properties::{ComputedValues, PropertyDeclarationBlock}; @@ -139,10 +139,6 @@ impl<'ln> ServoLayoutNode<'ln> { self.node.type_id_for_layout() } } - - pub fn as_document(&self) -> Option> { - self.node.downcast().map(ServoLayoutDocument::from_layout_js) - } } impl<'ln> NodeInfo for ServoLayoutNode<'ln> { @@ -158,6 +154,7 @@ impl<'ln> NodeInfo for ServoLayoutNode<'ln> { } impl<'ln> TNode for ServoLayoutNode<'ln> { + type ConcreteDocument = ServoLayoutDocument<'ln>; type ConcreteElement = ServoLayoutElement<'ln>; fn parent_node(&self) -> Option { @@ -190,6 +187,10 @@ impl<'ln> TNode for ServoLayoutNode<'ln> { } } + fn owner_doc(&self) -> Self::ConcreteDocument { + ServoLayoutDocument::from_layout_js(unsafe { self.node.owner_doc_for_layout() }) + } + fn traversal_parent(&self) -> Option> { self.parent_element() } @@ -206,6 +207,10 @@ impl<'ln> TNode for ServoLayoutNode<'ln> { as_element(self.node) } + fn as_document(&self) -> Option> { + self.node.downcast().map(ServoLayoutDocument::from_layout_js) + } + fn can_be_fragmented(&self) -> bool { unsafe { self.node.get_flag(CAN_BE_FRAGMENTED) } } @@ -287,11 +292,23 @@ pub struct ServoLayoutDocument<'ld> { chain: PhantomData<&'ld ()>, } -impl<'ld> ServoLayoutDocument<'ld> { - fn as_node(&self) -> ServoLayoutNode<'ld> { +impl<'ld> TDocument for ServoLayoutDocument<'ld> { + type ConcreteNode = ServoLayoutNode<'ld>; + + fn as_node(&self) -> Self::ConcreteNode { ServoLayoutNode::from_layout_js(self.document.upcast()) } + fn quirks_mode(&self) -> QuirksMode { + unsafe { self.document.quirks_mode() } + } + + fn is_html_document(&self) -> bool { + unsafe { self.document.is_html_document_for_layout() } + } +} + +impl<'ld> ServoLayoutDocument<'ld> { pub fn root_element(&self) -> Option> { self.as_node().dom_children().flat_map(|n| n.as_element()).next() } @@ -773,8 +790,12 @@ impl<'le> ::selectors::Element for ServoLayoutElement<'le> { fn is_html_element_in_html_document(&self) -> bool { unsafe { - self.element.html_element_in_html_document_for_layout() + if !self.element.is_html_element() { + return false; + } } + + self.as_node().owner_doc().is_html_document() } } diff --git a/servo/components/script/dom/element.rs b/servo/components/script/dom/element.rs index 66d18e1d0aa7..13f2bf7ae787 100644 --- a/servo/components/script/dom/element.rs +++ b/servo/components/script/dom/element.rs @@ -446,7 +446,7 @@ pub trait LayoutElementHelpers { #[allow(unsafe_code)] unsafe fn get_rowspan(self) -> u32; #[allow(unsafe_code)] - unsafe fn html_element_in_html_document_for_layout(&self) -> bool; + unsafe fn is_html_element(&self) -> bool; fn id_attribute(&self) -> *const Option; fn style_attribute(&self) -> *const Option>>; fn local_name(&self) -> &LocalName; @@ -781,11 +781,8 @@ impl LayoutElementHelpers for LayoutDom { #[inline] #[allow(unsafe_code)] - unsafe fn html_element_in_html_document_for_layout(&self) -> bool { - if (*self.unsafe_get()).namespace != ns!(html) { - return false; - } - self.upcast::().owner_doc_for_layout().is_html_document_for_layout() + unsafe fn is_html_element(&self) -> bool { + (*self.unsafe_get()).namespace == ns!(html) } #[allow(unsafe_code)] diff --git a/servo/components/style/dom.rs b/servo/components/style/dom.rs index a9a8897a087e..c58433fe377b 100644 --- a/servo/components/style/dom.rs +++ b/servo/components/style/dom.rs @@ -22,7 +22,7 @@ use properties::{AnimationRules, ComputedValues, PropertyDeclarationBlock}; use rule_tree::CascadeLevel; use selector_parser::{AttrValue, PseudoClassStringArg, PseudoElement, SelectorImpl}; use selectors::Element as SelectorsElement; -use selectors::matching::{ElementSelectorFlags, VisitedHandlingMode}; +use selectors::matching::{ElementSelectorFlags, QuirksMode, VisitedHandlingMode}; use selectors::sink::Push; use servo_arc::{Arc, ArcBorrow}; use shared_lock::Locked; @@ -133,12 +133,30 @@ where } } +/// The `TDocument` trait, to represent a document node. +pub trait TDocument : Sized + Copy + Clone { + /// The concrete `TNode` type. + type ConcreteNode: TNode; + + /// Get this document as a `TNode`. + fn as_node(&self) -> Self::ConcreteNode; + + /// Returns whether this document is an HTML document. + fn is_html_document(&self) -> bool; + + /// Returns the quirks mode of this document. + fn quirks_mode(&self) -> QuirksMode; +} + /// The `TNode` trait. This is the main generic trait over which the style /// system can be implemented. pub trait TNode : Sized + Copy + Clone + Debug + NodeInfo + PartialEq { /// The concrete `TElement` type. type ConcreteElement: TElement; + /// The concrete `TDocument` type. + type ConcreteDocument: TDocument; + /// Get this node's parent node. fn parent_node(&self) -> Option; @@ -154,6 +172,9 @@ pub trait TNode : Sized + Copy + Clone + Debug + NodeInfo + PartialEq { /// Get this node's next sibling. fn next_sibling(&self) -> Option; + /// Get the owner document of this node. + fn owner_doc(&self) -> Self::ConcreteDocument; + /// Iterate over the DOM children of a node. fn dom_children(&self) -> DomChildren { DomChildren(self.first_child()) @@ -211,6 +232,9 @@ pub trait TNode : Sized + Copy + Clone + Debug + NodeInfo + PartialEq { /// Get this node as an element, if it's one. fn as_element(&self) -> Option; + /// Get this node as a document, if it's one. + fn as_document(&self) -> Option; + /// Whether this node can be fragmented. This is used for multicol, and only /// for Servo. fn can_be_fragmented(&self) -> bool; diff --git a/servo/components/style/dom_apis.rs b/servo/components/style/dom_apis.rs index c1aafed6b74a..495cfa950960 100644 --- a/servo/components/style/dom_apis.rs +++ b/servo/components/style/dom_apis.rs @@ -6,7 +6,7 @@ //! and Gecko. use context::QuirksMode; -use dom::{TElement, TNode}; +use dom::{TDocument, TElement, TNode}; use invalidation::element::invalidator::{Invalidation, InvalidationProcessor, InvalidationVector}; use selectors::{Element, NthIndexCache, SelectorList}; use selectors::matching::{self, MatchingContext, MatchingMode}; @@ -308,7 +308,6 @@ pub fn query_selector( root: E::ConcreteNode, selector_list: &SelectorList, results: &mut Q::Output, - quirks_mode: QuirksMode, ) where E: TElement, @@ -316,6 +315,7 @@ where { use invalidation::element::invalidator::TreeStyleInvalidator; + let quirks_mode = root.owner_doc().quirks_mode(); let fast_result = query_selector_fast::( root, selector_list, diff --git a/servo/components/style/gecko/wrapper.rs b/servo/components/style/gecko/wrapper.rs index 5f7a6ca97195..c10cb3875b95 100644 --- a/servo/components/style/gecko/wrapper.rs +++ b/servo/components/style/gecko/wrapper.rs @@ -20,7 +20,7 @@ use applicable_declarations::ApplicableDeclarationBlock; use atomic_refcell::{AtomicRefCell, AtomicRef, AtomicRefMut}; use context::{QuirksMode, SharedStyleContext, PostAnimationTasks, UpdateAnimationsTasks}; use data::ElementData; -use dom::{LayoutIterator, NodeInfo, OpaqueNode, TElement, TNode}; +use dom::{LayoutIterator, NodeInfo, OpaqueNode, TElement, TDocument, TNode}; use element_state::{ElementState, DocumentState, NS_DOCUMENT_STATE_WINDOW_INACTIVE}; use error_reporting::ParseErrorReporter; use font_metrics::{FontMetrics, FontMetricsProvider, FontMetricsQueryResult}; @@ -92,6 +92,26 @@ use string_cache::{Atom, Namespace, WeakAtom, WeakNamespace}; use stylesheets::UrlExtraData; use stylist::Stylist; +/// A simple wrapper over `nsIDocument`. +#[derive(Clone, Copy)] +pub struct GeckoDocument<'ld>(pub &'ld structs::nsIDocument); + +impl<'ld> TDocument for GeckoDocument<'ld> { + type ConcreteNode = GeckoNode<'ld>; + + fn as_node(&self) -> Self::ConcreteNode { + GeckoNode(&self.0._base) + } + + fn is_html_document(&self) -> bool { + self.0.mType == structs::root::nsIDocument_Type::eHTML + } + + fn quirks_mode(&self) -> QuirksMode { + self.0.mCompatMode.into() + } +} + /// A simple wrapper over a non-null Gecko node (`nsINode`) pointer. /// /// Important: We don't currently refcount the DOM, because the wrapper lifetime @@ -124,6 +144,13 @@ impl<'ln> fmt::Debug for GeckoNode<'ln> { } impl<'ln> GeckoNode<'ln> { + #[inline] + fn is_document(&self) -> bool { + // This is a DOM constant that isn't going to change. + const DOCUMENT_NODE: u16 = 9; + self.node_info().mInner.mNodeType == DOCUMENT_NODE + } + #[inline] fn from_content(content: &'ln nsIContent) -> Self { GeckoNode(&content._base) @@ -153,22 +180,11 @@ impl<'ln> GeckoNode<'ln> { (self.0).mBoolFlags } - /// Owner document quirks mode getter. - #[inline] - pub fn owner_document_quirks_mode(&self) -> QuirksMode { - self.owner_doc().mCompatMode.into() - } - #[inline] fn get_bool_flag(&self, flag: nsINode_BooleanFlag) -> bool { self.bool_flags() & (1u32 << flag as u32) != 0 } - fn owner_doc(&self) -> &structs::nsIDocument { - debug_assert!(!self.node_info().mDocument.is_null()); - unsafe { &*self.node_info().mDocument } - } - /// WARNING: This logic is duplicated in Gecko's FlattenedTreeParentIsParent. /// Make sure to mirror any modifications in both places. fn flattened_tree_parent_is_parent(&self) -> bool { @@ -223,6 +239,7 @@ impl<'ln> NodeInfo for GeckoNode<'ln> { } impl<'ln> TNode for GeckoNode<'ln> { + type ConcreteDocument = GeckoDocument<'ln>; type ConcreteElement = GeckoElement<'ln>; fn parent_node(&self) -> Option { @@ -249,6 +266,12 @@ impl<'ln> TNode for GeckoNode<'ln> { unsafe { self.0.mNextSibling.as_ref().map(GeckoNode::from_content) } } + #[inline] + fn owner_doc(&self) -> Self::ConcreteDocument { + debug_assert!(!self.node_info().mDocument.is_null()); + GeckoDocument(unsafe { &*self.node_info().mDocument }) + } + fn traversal_parent(&self) -> Option> { self.flattened_tree_parent().and_then(|n| n.as_element()) } @@ -271,6 +294,15 @@ impl<'ln> TNode for GeckoNode<'ln> { } } + #[inline] + fn as_document(&self) -> Option { + if self.is_document() { + Some(self.owner_doc()) + } else { + None + } + } + fn can_be_fragmented(&self) -> bool { // FIXME(SimonSapin): Servo uses this to implement CSS multicol / fragmentation // Maybe this isn’t useful for Gecko? @@ -596,7 +628,7 @@ impl<'le> GeckoElement<'le> { fn document_state(&self) -> DocumentState { let node = self.as_node(); unsafe { - let states = Gecko_DocumentState(node.owner_doc()); + let states = Gecko_DocumentState(node.owner_doc().0); DocumentState::from_bits_truncate(states) } } @@ -632,13 +664,7 @@ impl<'le> GeckoElement<'le> { #[inline] fn get_document_theme(&self) -> DocumentTheme { let node = self.as_node(); - unsafe { Gecko_GetDocumentLWTheme(node.owner_doc()) } - } - - /// Owner document quirks mode getter. - #[inline] - pub fn owner_document_quirks_mode(&self) -> QuirksMode { - self.as_node().owner_document_quirks_mode() + unsafe { Gecko_GetDocumentLWTheme(node.owner_doc().0) } } /// Only safe to call on the main thread, with exclusive access to the element and @@ -949,7 +975,7 @@ impl<'le> TElement for GeckoElement<'le> { } fn owner_doc_matches_for_testing(&self, device: &Device) -> bool { - self.as_node().owner_doc() as *const structs::nsIDocument == + self.as_node().owner_doc().0 as *const structs::nsIDocument == device.pres_context().mDocument.raw::() } @@ -1584,7 +1610,7 @@ impl<'le> TElement for GeckoElement<'le> { if self.get_local_name().as_ptr() == atom!("th").as_ptr() { hints.push(TH_RULE.clone()); } else if self.get_local_name().as_ptr() == atom!("table").as_ptr() && - self.as_node().owner_doc().mCompatMode == structs::nsCompatibility::eCompatibility_NavQuirks { + self.as_node().owner_doc().quirks_mode() == QuirksMode::Quirks { hints.push(TABLE_COLOR_RULE.clone()); } } @@ -2031,7 +2057,7 @@ impl<'le> ::selectors::Element for GeckoElement<'le> { fn is_html_element_in_html_document(&self) -> bool { self.is_html_element() && - self.as_node().owner_doc().mType == structs::root::nsIDocument_Type::eHTML + self.as_node().owner_doc().is_html_document() } fn ignores_nth_child_selectors(&self) -> bool { diff --git a/servo/ports/geckolib/glue.rs b/servo/ports/geckolib/glue.rs index 1e9743df9eac..901a06bfe147 100644 --- a/servo/ports/geckolib/glue.rs +++ b/servo/ports/geckolib/glue.rs @@ -19,7 +19,7 @@ use style::applicable_declarations::ApplicableDeclarationBlock; use style::context::{CascadeInputs, QuirksMode, SharedStyleContext, StyleContext}; use style::context::ThreadLocalStyleContext; use style::data::{ElementStyles, self}; -use style::dom::{ShowSubtreeData, TElement, TNode}; +use style::dom::{ShowSubtreeData, TDocument, TElement, TNode}; use style::driver; use style::element_state::{DocumentState, ElementState}; use style::error_reporting::{NullReporter, ParseErrorReporter}; @@ -1577,7 +1577,9 @@ pub extern "C" fn Servo_StyleRule_SelectorMatchesElement(rule: RawServoStyleRule }; let element = GeckoElement(element); - let mut ctx = MatchingContext::new(matching_mode, None, None, element.owner_document_quirks_mode()); + let quirks_mode = element.as_node().owner_doc().quirks_mode(); + let mut ctx = + MatchingContext::new(matching_mode, None, None, quirks_mode); matches_selector(selector, 0, None, &element, &mut ctx, &mut |_, _| {}) }) } @@ -1591,9 +1593,10 @@ pub unsafe extern "C" fn Servo_SelectorList_Closest( use style::dom_apis; let element = GeckoElement(element); + let quirks_mode = element.as_node().owner_doc().quirks_mode(); let selectors = ::selectors::SelectorList::from_ffi(selectors).borrow(); - dom_apis::element_closest(element, &selectors, element.owner_document_quirks_mode()) + dom_apis::element_closest(element, &selectors, quirks_mode) .map_or(ptr::null(), |e| e.0) } @@ -1606,11 +1609,12 @@ pub unsafe extern "C" fn Servo_SelectorList_Matches( use style::dom_apis; let element = GeckoElement(element); + let quirks_mode = element.as_node().owner_doc().quirks_mode(); let selectors = ::selectors::SelectorList::from_ffi(selectors).borrow(); dom_apis::element_matches( &element, &selectors, - element.owner_document_quirks_mode(), + quirks_mode, ) } @@ -1629,7 +1633,6 @@ pub unsafe extern "C" fn Servo_SelectorList_QueryFirst( node, &selectors, &mut result, - node.owner_document_quirks_mode(), ); result.map_or(ptr::null(), |e| e.0) @@ -1653,7 +1656,6 @@ pub unsafe extern "C" fn Servo_SelectorList_QueryAll( node, &selectors, &mut result, - node.owner_document_quirks_mode(), ); if !result.is_empty() { From 996793e8e83e02ffdd30db3081474fdbc92c55c5 Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Thu, 26 Oct 2017 15:54:37 +0200 Subject: [PATCH 47/69] Bug 1411697 - Make sure to SendDocumentChannelCleanup even when mPreferredCachedAltDataType is set r=michal MozReview-Commit-ID: ApXNqS9tcfh --HG-- extra : rebase_source : 6ef619331af3f3dd3424c5ac932a2c828bd9d50f --- netwerk/protocol/http/HttpChannelChild.cpp | 8 +++++--- netwerk/protocol/http/HttpChannelParent.cpp | 6 ++++-- netwerk/protocol/http/HttpChannelParent.h | 2 +- netwerk/protocol/http/PHttpChannel.ipdl | 2 +- 4 files changed, 11 insertions(+), 7 deletions(-) diff --git a/netwerk/protocol/http/HttpChannelChild.cpp b/netwerk/protocol/http/HttpChannelChild.cpp index 75054c911cae..9779a7dd610e 100644 --- a/netwerk/protocol/http/HttpChannelChild.cpp +++ b/netwerk/protocol/http/HttpChannelChild.cpp @@ -1096,10 +1096,12 @@ HttpChannelChild::OnStopRequest(const nsresult& channelStatus, CleanupBackgroundChannel(); - // DocumentChannelCleanup actually nulls out mCacheEntry in the parent, which - // we might need later to open the Alt-Data output stream, so just return here + // If there is a possibility we might want to write alt data to the cache + // entry, we keep the channel alive. We still send the DocumentChannelCleanup + // message but request the cache entry to be kept by the parent. if (!mPreferredCachedAltDataType.IsEmpty()) { mKeptAlive = true; + SendDocumentChannelCleanup(false); // don't clear cache entry return; } @@ -1108,7 +1110,7 @@ HttpChannelChild::OnStopRequest(const nsresult& channelStatus, // If IPDL is already closed, then do nothing. if (mIPCOpen) { mKeptAlive = true; - SendDocumentChannelCleanup(); + SendDocumentChannelCleanup(true); } } else { // The parent process will respond by sending a DeleteSelf message and diff --git a/netwerk/protocol/http/HttpChannelParent.cpp b/netwerk/protocol/http/HttpChannelParent.cpp index f0f2dcdaeae5..23a2837075ed 100644 --- a/netwerk/protocol/http/HttpChannelParent.cpp +++ b/netwerk/protocol/http/HttpChannelParent.cpp @@ -1121,12 +1121,14 @@ HttpChannelParent::ContinueRedirect2Verify(const nsresult& aResult) } mozilla::ipc::IPCResult -HttpChannelParent::RecvDocumentChannelCleanup() +HttpChannelParent::RecvDocumentChannelCleanup(const bool& clearCacheEntry) { // From now on only using mAssociatedContentSecurity. Free everything else. CleanupBackgroundChannel(); // Background channel can be closed. mChannel = nullptr; // Reclaim some memory sooner. - mCacheEntry = nullptr; // Else we'll block other channels reading same URI + if (clearCacheEntry) { + mCacheEntry = nullptr; // Else we'll block other channels reading same URI + } return IPC_OK(); } diff --git a/netwerk/protocol/http/HttpChannelParent.h b/netwerk/protocol/http/HttpChannelParent.h index 3e2a5d842d43..bb0e188408fc 100644 --- a/netwerk/protocol/http/HttpChannelParent.h +++ b/netwerk/protocol/http/HttpChannelParent.h @@ -193,7 +193,7 @@ protected: const bool& aChooseAppcache) override; virtual mozilla::ipc::IPCResult RecvUpdateAssociatedContentSecurity(const int32_t& broken, const int32_t& no) override; - virtual mozilla::ipc::IPCResult RecvDocumentChannelCleanup() override; + virtual mozilla::ipc::IPCResult RecvDocumentChannelCleanup(const bool& clearCacheEntry) override; virtual mozilla::ipc::IPCResult RecvMarkOfflineCacheEntryAsForeign() override; virtual mozilla::ipc::IPCResult RecvDivertOnDataAvailable(const nsCString& data, const uint64_t& offset, diff --git a/netwerk/protocol/http/PHttpChannel.ipdl b/netwerk/protocol/http/PHttpChannel.ipdl index badf90fda50b..9d2cf33e41ff 100644 --- a/netwerk/protocol/http/PHttpChannel.ipdl +++ b/netwerk/protocol/http/PHttpChannel.ipdl @@ -53,7 +53,7 @@ parent: // For document loads we keep this protocol open after child's // OnStopRequest, and send this msg (instead of __delete__) to allow // partial cleanup on parent. - async DocumentChannelCleanup(); + async DocumentChannelCleanup(bool clearCacheEntry); // This might have to be sync. If this fails we must fail the document load // to avoid endless loop. From af5a0ad5e86879e7230e9d5c1c88b92ee3446280 Mon Sep 17 00:00:00 2001 From: Mike Shal Date: Mon, 23 Oct 2017 10:44:11 -0400 Subject: [PATCH 48/69] Bug 1407403 - Handle IPDL code generation in the tup backend; r=gps IPDL generation consists of a single ipdl.py invocation on all the *.ipdl and *.ipdlh files in the tree. Unfortunately the headers that are generated are placed into directories corresponding to the namespaces declared within the IDPL, and can't be determined solely based on the input filename. As such, we have to do a quick parsing of the AST in order to grab the namespaces and calculate the filenames for the .h files. The downside of this approach is that all *.ipdl/*.ipdlh files are considered inputs for the tup backend, so editing one will perform moz.build generation before running ipdl.py. This could be fixed by either standardizing the generated header layout, or fixing tup to somehow allow unspecified outputs. MozReview-Commit-ID: DzF2ryLEsrg --HG-- extra : rebase_source : b2d6ed3f7f47b2d568aea0c7e4bd476ce432181f --- python/mozbuild/mozbuild/backend/tup.py | 51 +++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/python/mozbuild/mozbuild/backend/tup.py b/python/mozbuild/mozbuild/backend/tup.py index a82a2023fb42..47bce10ce346 100644 --- a/python/mozbuild/mozbuild/backend/tup.py +++ b/python/mozbuild/mozbuild/backend/tup.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, unicode_literals import os +import sys import mozpack.path as mozpath from mozbuild.base import MozbuildObject @@ -445,9 +446,53 @@ class TupOnly(CommonBackend, PartialBackend): def _handle_ipdl_sources(self, ipdl_dir, sorted_ipdl_sources, unified_ipdl_cppsrcs_mapping): - # TODO: This isn't implemented yet in the tup backend, but it is called - # by the CommonBackend. - pass + # Preferably we wouldn't have to import ipdl, but we need to parse the + # ast in order to determine the namespaces since they are used in the + # header output paths. + sys.path.append(mozpath.join(self.environment.topsrcdir, 'ipc', 'ipdl')) + import ipdl + + backend_file = self._get_backend_file('ipc/ipdl') + outheaderdir = '_ipdlheaders' + cmd = [ + '$(PYTHON_PATH)', + '$(PLY_INCLUDE)', + '%s/ipdl.py' % backend_file.srcdir, + '--sync-msg-list=%s/sync-messages.ini' % backend_file.srcdir, + '--msg-metadata=%s/message-metadata.ini' % backend_file.srcdir, + '--outheaders-dir=%s' % outheaderdir, + '--outcpp-dir=.', + ] + ipdldirs = sorted(set(mozpath.dirname(p) for p in sorted_ipdl_sources)) + cmd.extend(['-I%s' % d for d in ipdldirs]) + cmd.extend(sorted_ipdl_sources) + + outputs = ['IPCMessageTypeName.cpp', mozpath.join(outheaderdir, 'IPCMessageStart.h'), 'ipdl_lextab.py', 'ipdl_yacctab.py'] + + for filename in sorted_ipdl_sources: + filepath, ext = os.path.splitext(filename) + dirname, basename = os.path.split(filepath) + dirname = mozpath.relpath(dirname, self.environment.topsrcdir) + + extensions = [''] + if ext == '.ipdl': + extensions.extend(['Child', 'Parent']) + + with open(filename) as f: + ast = ipdl.parse(f.read(), filename, includedirs=ipdldirs) + self.backend_input_files.add(filename) + headerdir = os.path.join(outheaderdir, *([ns.name for ns in ast.namespaces])) + + for extension in extensions: + outputs.append("%s%s.cpp" % (basename, extension)) + outputs.append(mozpath.join(headerdir, '%s%s.h' % (basename, extension))) + + backend_file.rule( + display='IPDL code generation', + cmd=cmd, + outputs=outputs, + check_unchanged=True, + ) def _handle_webidl_build(self, bindings_dir, unified_source_mapping, webidls, expected_build_output_files, From d36ed8080b3419f491945850c59813c49b1e4050 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Thu, 26 Oct 2017 16:23:40 +0200 Subject: [PATCH 49/69] Backed out changeset 26c1d50db1c1 (bug 1407403) for py-compat failure: python/mozbuild/mozbuild/backend/tup.py:470:124 | inconsistent use of tabs and spaces in indentation. r=backout --HG-- extra : amend_source : 4b5508ad7750f60710ce3cfde44b718d4a1d2880 --- python/mozbuild/mozbuild/backend/tup.py | 51 ++----------------------- 1 file changed, 3 insertions(+), 48 deletions(-) diff --git a/python/mozbuild/mozbuild/backend/tup.py b/python/mozbuild/mozbuild/backend/tup.py index 47bce10ce346..a82a2023fb42 100644 --- a/python/mozbuild/mozbuild/backend/tup.py +++ b/python/mozbuild/mozbuild/backend/tup.py @@ -5,7 +5,6 @@ from __future__ import absolute_import, unicode_literals import os -import sys import mozpack.path as mozpath from mozbuild.base import MozbuildObject @@ -446,53 +445,9 @@ class TupOnly(CommonBackend, PartialBackend): def _handle_ipdl_sources(self, ipdl_dir, sorted_ipdl_sources, unified_ipdl_cppsrcs_mapping): - # Preferably we wouldn't have to import ipdl, but we need to parse the - # ast in order to determine the namespaces since they are used in the - # header output paths. - sys.path.append(mozpath.join(self.environment.topsrcdir, 'ipc', 'ipdl')) - import ipdl - - backend_file = self._get_backend_file('ipc/ipdl') - outheaderdir = '_ipdlheaders' - cmd = [ - '$(PYTHON_PATH)', - '$(PLY_INCLUDE)', - '%s/ipdl.py' % backend_file.srcdir, - '--sync-msg-list=%s/sync-messages.ini' % backend_file.srcdir, - '--msg-metadata=%s/message-metadata.ini' % backend_file.srcdir, - '--outheaders-dir=%s' % outheaderdir, - '--outcpp-dir=.', - ] - ipdldirs = sorted(set(mozpath.dirname(p) for p in sorted_ipdl_sources)) - cmd.extend(['-I%s' % d for d in ipdldirs]) - cmd.extend(sorted_ipdl_sources) - - outputs = ['IPCMessageTypeName.cpp', mozpath.join(outheaderdir, 'IPCMessageStart.h'), 'ipdl_lextab.py', 'ipdl_yacctab.py'] - - for filename in sorted_ipdl_sources: - filepath, ext = os.path.splitext(filename) - dirname, basename = os.path.split(filepath) - dirname = mozpath.relpath(dirname, self.environment.topsrcdir) - - extensions = [''] - if ext == '.ipdl': - extensions.extend(['Child', 'Parent']) - - with open(filename) as f: - ast = ipdl.parse(f.read(), filename, includedirs=ipdldirs) - self.backend_input_files.add(filename) - headerdir = os.path.join(outheaderdir, *([ns.name for ns in ast.namespaces])) - - for extension in extensions: - outputs.append("%s%s.cpp" % (basename, extension)) - outputs.append(mozpath.join(headerdir, '%s%s.h' % (basename, extension))) - - backend_file.rule( - display='IPDL code generation', - cmd=cmd, - outputs=outputs, - check_unchanged=True, - ) + # TODO: This isn't implemented yet in the tup backend, but it is called + # by the CommonBackend. + pass def _handle_webidl_build(self, bindings_dir, unified_source_mapping, webidls, expected_build_output_files, From c1bf47f3f25e8e3c0555123b7545f0edbe2b4b86 Mon Sep 17 00:00:00 2001 From: Marco Bonardo Date: Tue, 24 Oct 2017 01:35:07 +0200 Subject: [PATCH 50/69] Bug 1376149 - Speed up orphan favicons cleanups on history removals. r=Paolo MozReview-Commit-ID: 1XTmpvdUnLm --HG-- extra : rebase_source : 86b9289d24874f8a10160b00778298ae537ded29 --- toolkit/components/places/History.jsm | 66 +++++++++++-------- toolkit/components/places/PlacesDBUtils.jsm | 6 +- .../components/places/nsPlacesExpiration.js | 5 +- 3 files changed, 46 insertions(+), 31 deletions(-) diff --git a/toolkit/components/places/History.jsm b/toolkit/components/places/History.jsm index 76283488ea50..6e4b546e11d9 100644 --- a/toolkit/components/places/History.jsm +++ b/toolkit/components/places/History.jsm @@ -774,8 +774,11 @@ var clear = async function(db) { // Expire orphan icons. await db.executeCached(`DELETE FROM moz_pages_w_icons WHERE page_url_hash NOT IN (SELECT url_hash FROM moz_places)`); - await db.executeCached(`DELETE FROM moz_icons - WHERE root = 0 AND id NOT IN (SELECT icon_id FROM moz_icons_to_pages)`); + await db.executeCached(`DELETE FROM moz_icons WHERE id IN ( + SELECT id FROM moz_icons WHERE root = 0 + EXCEPT + SELECT icon_id FROM moz_icons_to_pages + )`); // Expire annotations. await db.execute(`DELETE FROM moz_items_annos WHERE expiration = :expire_session`, @@ -843,28 +846,34 @@ var clear = async function(db) { var cleanupPages = async function(db, pages) { await invalidateFrecencies(db, pages.filter(p => p.hasForeign || p.hasVisits).map(p => p.id)); - let pageIdsToRemove = pages.filter(p => !p.hasForeign && !p.hasVisits).map(p => p.id); - if (pageIdsToRemove.length > 0) { - let idsList = sqlList(pageIdsToRemove); - // Note, we are already in a transaction, since callers create it. - // Check relations regardless, to avoid creating orphans in case of - // async race conditions. - await db.execute(`DELETE FROM moz_places WHERE id IN ( ${ idsList } ) - AND foreign_count = 0 AND last_visit_date ISNULL`); - // Hosts accumulated during the places delete are updated through a trigger - // (see nsPlacesTriggers.h). - await db.executeCached(`DELETE FROM moz_updatehosts_temp`); + let pagesToRemove = pages.filter(p => !p.hasForeign && !p.hasVisits); + if (pagesToRemove.length == 0) + return; - // Expire orphans. - await db.executeCached(`DELETE FROM moz_pages_w_icons - WHERE page_url_hash NOT IN (SELECT url_hash FROM moz_places)`); - await db.executeCached(`DELETE FROM moz_icons - WHERE root = 0 AND id NOT IN (SELECT icon_id FROM moz_icons_to_pages)`); - await db.execute(`DELETE FROM moz_annos - WHERE place_id IN ( ${ idsList } )`); - await db.execute(`DELETE FROM moz_inputhistory - WHERE place_id IN ( ${ idsList } )`); - } + let idsList = sqlList(pagesToRemove.map(p => p.id)); + // Note, we are already in a transaction, since callers create it. + // Check relations regardless, to avoid creating orphans in case of + // async race conditions. + await db.execute(`DELETE FROM moz_places WHERE id IN ( ${ idsList } ) + AND foreign_count = 0 AND last_visit_date ISNULL`); + // Hosts accumulated during the places delete are updated through a trigger + // (see nsPlacesTriggers.h). + await db.executeCached(`DELETE FROM moz_updatehosts_temp`); + + // Expire orphans. + let hashesToRemove = pagesToRemove.map(p => p.hash); + await db.executeCached(`DELETE FROM moz_pages_w_icons + WHERE page_url_hash IN (${sqlList(hashesToRemove)})`); + await db.executeCached(`DELETE FROM moz_icons WHERE id IN ( + SELECT id FROM moz_icons WHERE root = 0 + EXCEPT + SELECT icon_id FROM moz_icons_to_pages + )`); + + await db.execute(`DELETE FROM moz_annos + WHERE place_id IN ( ${ idsList } )`); + await db.execute(`DELETE FROM moz_inputhistory + WHERE place_id IN ( ${ idsList } )`); }; /** @@ -1082,7 +1091,7 @@ var removeVisitsByFilter = async function(db, filter, onResult = null) { // 3. Find out which pages have been orphaned await db.execute( - `SELECT id, url, guid, + `SELECT id, url, url_hash, guid, (foreign_count != 0) AS has_foreign, (last_visit_date NOTNULL) as has_visits FROM moz_places @@ -1095,6 +1104,7 @@ var removeVisitsByFilter = async function(db, filter, onResult = null) { hasForeign: row.getResultByName("has_foreign"), hasVisits: row.getResultByName("has_visits"), url: new URL(row.getResultByName("url")), + hash: row.getResultByName("url_hash"), }; pages.push(page); }); @@ -1161,7 +1171,7 @@ var removeByFilter = async function(db, filter, onResult = null) { // 3. Find out what needs to be removed let fragmentArray = [hostFilterSQLFragment, dateFilterSQLFragment]; let query = - `SELECT h.id, url, rev_host, guid, title, frecency, foreign_count + `SELECT h.id, url, url_hash, rev_host, guid, title, frecency, foreign_count FROM moz_places h WHERE (${ fragmentArray.filter(f => f !== "").join(") AND (") })`; let onResultData = onResult ? [] : null; @@ -1184,7 +1194,8 @@ var removeByFilter = async function(db, filter, onResult = null) { guid, hasForeign, hasVisits: false, - url: new URL(url) + url: new URL(url), + hash: row.getResultByName("url_hash"), }; pages.push(page); if (onResult) { @@ -1224,7 +1235,7 @@ var removeByFilter = async function(db, filter, onResult = null) { var remove = async function(db, {guids, urls}, onResult = null) { // 1. Find out what needs to be removed let query = - `SELECT id, url, guid, foreign_count, title, frecency + `SELECT id, url, url_hash, guid, foreign_count, title, frecency FROM moz_places WHERE guid IN (${ sqlList(guids) }) OR (url_hash IN (${ urls.map(u => "hash(" + JSON.stringify(u) + ")").join(",") }) @@ -1248,6 +1259,7 @@ var remove = async function(db, {guids, urls}, onResult = null) { hasForeign, hasVisits: false, url: new URL(url), + hash: row.getResultByName("url_hash"), }; pages.push(page); if (onResult) { diff --git a/toolkit/components/places/PlacesDBUtils.jsm b/toolkit/components/places/PlacesDBUtils.jsm index 331d8e432e34..7fae736f349a 100644 --- a/toolkit/components/places/PlacesDBUtils.jsm +++ b/toolkit/components/places/PlacesDBUtils.jsm @@ -714,8 +714,10 @@ this.PlacesDBUtils = { let deleteOrphanIcons = { query: - `DELETE FROM moz_icons WHERE root = 0 AND id NOT IN ( - SELECT icon_id FROM moz_icons_to_pages + `DELETE FROM moz_icons WHERE id IN ( + SELECT id FROM moz_icons WHERE root = 0 + EXCEPT + SELECT icon_id FROM moz_icons_to_pages )` }; cleanupStatements.push(deleteOrphanIcons); diff --git a/toolkit/components/places/nsPlacesExpiration.js b/toolkit/components/places/nsPlacesExpiration.js index f0cc4fd77e05..b49722bb2f9d 100644 --- a/toolkit/components/places/nsPlacesExpiration.js +++ b/toolkit/components/places/nsPlacesExpiration.js @@ -252,8 +252,9 @@ const EXPIRATION_QUERIES = { // Expire orphan icons from the database. QUERY_EXPIRE_FAVICONS: { - sql: `DELETE FROM moz_icons - WHERE root = 0 AND id NOT IN ( + sql: `DELETE FROM moz_icons WHERE id IN ( + SELECT id FROM moz_icons WHERE root = 0 + EXCEPT SELECT icon_id FROM moz_icons_to_pages )`, actions: ACTION.TIMED_OVERLIMIT | ACTION.SHUTDOWN_DIRTY | From bf4ff12d81f897647a0a7fa3db1b07f7a8933f7e Mon Sep 17 00:00:00 2001 From: Mike Shal Date: Mon, 23 Oct 2017 10:44:11 -0400 Subject: [PATCH 51/69] Bug 1407403 - Handle IPDL code generation in the tup backend; r=gps IPDL generation consists of a single ipdl.py invocation on all the *.ipdl and *.ipdlh files in the tree. Unfortunately the headers that are generated are placed into directories corresponding to the namespaces declared within the IDPL, and can't be determined solely based on the input filename. As such, we have to do a quick parsing of the AST in order to grab the namespaces and calculate the filenames for the .h files. The downside of this approach is that all *.ipdl/*.ipdlh files are considered inputs for the tup backend, so editing one will perform moz.build generation before running ipdl.py. This could be fixed by either standardizing the generated header layout, or fixing tup to somehow allow unspecified outputs. MozReview-Commit-ID: DzF2ryLEsrg --HG-- extra : rebase_source : 9297c7532b59e453dd2e985c7d2d5a1e78571893 --- python/mozbuild/mozbuild/backend/tup.py | 51 +++++++++++++++++++++++-- 1 file changed, 48 insertions(+), 3 deletions(-) diff --git a/python/mozbuild/mozbuild/backend/tup.py b/python/mozbuild/mozbuild/backend/tup.py index a82a2023fb42..8aeab66a9b7c 100644 --- a/python/mozbuild/mozbuild/backend/tup.py +++ b/python/mozbuild/mozbuild/backend/tup.py @@ -5,6 +5,7 @@ from __future__ import absolute_import, unicode_literals import os +import sys import mozpack.path as mozpath from mozbuild.base import MozbuildObject @@ -445,9 +446,53 @@ class TupOnly(CommonBackend, PartialBackend): def _handle_ipdl_sources(self, ipdl_dir, sorted_ipdl_sources, unified_ipdl_cppsrcs_mapping): - # TODO: This isn't implemented yet in the tup backend, but it is called - # by the CommonBackend. - pass + # Preferably we wouldn't have to import ipdl, but we need to parse the + # ast in order to determine the namespaces since they are used in the + # header output paths. + sys.path.append(mozpath.join(self.environment.topsrcdir, 'ipc', 'ipdl')) + import ipdl + + backend_file = self._get_backend_file('ipc/ipdl') + outheaderdir = '_ipdlheaders' + cmd = [ + '$(PYTHON_PATH)', + '$(PLY_INCLUDE)', + '%s/ipdl.py' % backend_file.srcdir, + '--sync-msg-list=%s/sync-messages.ini' % backend_file.srcdir, + '--msg-metadata=%s/message-metadata.ini' % backend_file.srcdir, + '--outheaders-dir=%s' % outheaderdir, + '--outcpp-dir=.', + ] + ipdldirs = sorted(set(mozpath.dirname(p) for p in sorted_ipdl_sources)) + cmd.extend(['-I%s' % d for d in ipdldirs]) + cmd.extend(sorted_ipdl_sources) + + outputs = ['IPCMessageTypeName.cpp', mozpath.join(outheaderdir, 'IPCMessageStart.h'), 'ipdl_lextab.py', 'ipdl_yacctab.py'] + + for filename in sorted_ipdl_sources: + filepath, ext = os.path.splitext(filename) + dirname, basename = os.path.split(filepath) + dirname = mozpath.relpath(dirname, self.environment.topsrcdir) + + extensions = [''] + if ext == '.ipdl': + extensions.extend(['Child', 'Parent']) + + with open(filename) as f: + ast = ipdl.parse(f.read(), filename, includedirs=ipdldirs) + self.backend_input_files.add(filename) + headerdir = os.path.join(outheaderdir, *([ns.name for ns in ast.namespaces])) + + for extension in extensions: + outputs.append("%s%s.cpp" % (basename, extension)) + outputs.append(mozpath.join(headerdir, '%s%s.h' % (basename, extension))) + + backend_file.rule( + display='IPDL code generation', + cmd=cmd, + outputs=outputs, + check_unchanged=True, + ) def _handle_webidl_build(self, bindings_dir, unified_source_mapping, webidls, expected_build_output_files, From c91c991524954d74ad50a50e47b1701feb35e1f2 Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Wed, 25 Oct 2017 20:27:17 -0400 Subject: [PATCH 52/69] Bug 1411796 - [taskgraph] Skip parameters.rst doc verification if parameters.strict is False, r=dustin This is needed to prevent parameter mismatch errors when using |mach try fuzzy| from an older revision. This can happen if the parameters.yml is being downloaded from a commit with a recently added parameter. MozReview-Commit-ID: 4NxCM7i8B4W --HG-- extra : rebase_source : 4d2052aae33292fbd7928a79bfedba76426206b9 --- taskcluster/taskgraph/generator.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/taskcluster/taskgraph/generator.py b/taskcluster/taskgraph/generator.py index 7c231d6b769f..487dc00bd094 100644 --- a/taskcluster/taskgraph/generator.py +++ b/taskcluster/taskgraph/generator.py @@ -291,6 +291,9 @@ class TaskGraphGenerator(object): return self._run_results[name] def verify_parameters(self, parameters): + if not parameters.strict: + return + parameters_dict = dict(**parameters) verify_docs( filename="parameters.rst", From 020b588ced5d7f13f725cb16ebc7d4330920797e Mon Sep 17 00:00:00 2001 From: Nicolas Chevobbe Date: Wed, 25 Oct 2017 11:59:02 +0200 Subject: [PATCH 53/69] Bug 1408921 - Split browser_webconsole_autocomplete_keys.js in the new console frontend; r=bgrins. The test was very long and tested different bugs. Splitting it make all the test case clearer. MozReview-Commit-ID: 4z45RE3eJoC --HG-- rename : devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js => devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js rename : devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js => devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js rename : devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js => devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js rename : devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js => devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js rename : devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js => devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js rename : devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js => devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js extra : rebase_source : c9c12ee909d843bf5f3b9c1312057c5552e23df8 --- .../test/mochitest/browser.ini | 8 +- ...wser_jsterm_autocomplete_array_no_index.js | 49 +++ .../browser_jsterm_autocomplete_escape_key.js | 61 +++ ...browser_jsterm_autocomplete_inside_text.js | 68 ++++ ...ser_jsterm_autocomplete_nav_and_tab_key.js | 115 ++++++ .../browser_jsterm_autocomplete_return_key.js | 86 ++++ ...rm_autocomplete_return_key_no_selection.js | 55 +++ .../browser_webconsole_autocomplete_keys.js | 369 ------------------ 8 files changed, 440 insertions(+), 371 deletions(-) create mode 100644 devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js create mode 100644 devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js create mode 100644 devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js create mode 100644 devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js create mode 100644 devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js create mode 100644 devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js delete mode 100644 devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini index a7b7cd845cbc..431b90af7147 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser.ini @@ -196,7 +196,13 @@ skip-if = true # Bug 1403188 # old console skip-if = e10s # Bug 1042253 - webconsole e10s tests [browser_jsterm_accessibility.js] [browser_jsterm_add_edited_input_to_history.js] +[browser_jsterm_autocomplete_array_no_index.js] +[browser_jsterm_autocomplete_escape_key.js] [browser_jsterm_autocomplete_helpers.js] +[browser_jsterm_autocomplete_inside_text.js] +[browser_jsterm_autocomplete_nav_and_tab_key.js] +[browser_jsterm_autocomplete_return_key_no_selection.js] +[browser_jsterm_autocomplete_return_key.js] [browser_jsterm_autocomplete-properties-with-non-alphanumeric-names.js] [browser_jsterm_copy_command.js] [browser_jsterm_dollar.js] @@ -218,8 +224,6 @@ skip-if = true # Bug 1404850 skip-if = true # Bug 1408919 [browser_webconsole_autocomplete_in_debugger_stackframe.js] skip-if = true # Bug 1408920 -[browser_webconsole_autocomplete_keys.js] -skip-if = true # Bug 1408921 [browser_webconsole_autocomplete_popup.js] skip-if = true # Bug 1408922 [browser_webconsole_autocomplete_popup_close_on_tab_switch.js] diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js new file mode 100644 index 000000000000..d8b2ef4e440c --- /dev/null +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js @@ -0,0 +1,49 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// See Bug 585991. + +const TEST_URI = `data:text/html;charset=utf-8, + + + +bug 585991 - Autocomplete popup on array`; + +add_task(async function () { + let { jsterm } = await openNewTabAndConsole(TEST_URI); + + // Clearing history that might have been set in previous tests. + await jsterm.clearHistory(); + + const { + autocompletePopup: popup, + completeNode, + inputNode, + } = jsterm; + + let onPopUpOpen = popup.once("popup-opened"); + + info("wait for popup to show"); + jsterm.setInputValue("foo"); + EventUtils.synthesizeKey(".", {}); + + await onPopUpOpen; + + let popupItems = popup.getItems().map(e => e.label); + is(popupItems.includes("0"), false, "Completing on an array doesn't show numbers."); + + info("press Escape to close the popup"); + const onPopupClose = popup.once("popup-closed"); + EventUtils.synthesizeKey("VK_ESCAPE", {}); + + await onPopupClose; + + // Cleaning history. + await jsterm.clearHistory(); +}); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js new file mode 100644 index 000000000000..b1bb17fc2d10 --- /dev/null +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js @@ -0,0 +1,61 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// See Bug 585991. + +const TEST_URI = `data:text/html;charset=utf-8, + + + +bug 585991 - autocomplete popup escape key usage test`; + +add_task(async function () { + let { jsterm } = await openNewTabAndConsole(TEST_URI); + info("web console opened"); + + // Clearing history that might have been set in previous tests. + await jsterm.clearHistory(); + + const { + autocompletePopup: popup, + completeNode, + inputNode, + } = jsterm; + + let onPopUpOpen = popup.once("popup-opened"); + + info("wait for completion: window.foo."); + jsterm.setInputValue("window.foo"); + EventUtils.synthesizeKey(".", {}); + + await onPopUpOpen; + + ok(popup.isOpen, "popup is open"); + ok(popup.itemCount, "popup has items"); + + info("press Escape to close the popup"); + const onPopupClose = popup.once("popup-closed"); + EventUtils.synthesizeKey("VK_ESCAPE", {}); + + await onPopupClose; + + ok(!popup.isOpen, "popup is not open after VK_ESCAPE"); + is(jsterm.getInputValue(), "window.foo.", "completion was cancelled"); + ok(!completeNode.value, "completeNode is empty"); + + // Cleaning history. + await jsterm.clearHistory(); +}); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js new file mode 100644 index 000000000000..79024551455f --- /dev/null +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js @@ -0,0 +1,68 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// See Bug 812618. + +const TEST_URI = `data:text/html;charset=utf-8, + + + +bug 812618 - test completion inside text`; + +add_task(async function () { + let { jsterm } = await openNewTabAndConsole(TEST_URI); + info("web console opened"); + + // Clearing history that might have been set in previous tests. + await jsterm.clearHistory(); + + const { + autocompletePopup: popup, + completeNode, + inputNode, + } = jsterm; + + const onPopUpOpen = popup.once("popup-opened"); + + const dumpString = "dump(window.testBu)"; + jsterm.setInputValue(dumpString); + inputNode.selectionStart = inputNode.selectionEnd = dumpString.indexOf(")"); + EventUtils.synthesizeKey("g", {}); + + await onPopUpOpen; + + ok(popup.isOpen, "popup is open"); + is(popup.itemCount, 2, "popup.itemCount is correct"); + + EventUtils.synthesizeKey("VK_DOWN", {}); + is(popup.selectedIndex, 0, "popup.selectedIndex is correct"); + ok(!completeNode.value, "completeNode.value is empty"); + + let items = popup.getItems().map(e => e.label); + let expectedItems = ["testBugB", "testBugA"]; + is(items.join("-"), expectedItems.join("-"), "getItems returns the items we expect"); + + info("press Tab and wait for popup to hide"); + const onPopupClose = popup.once("popup-closed"); + EventUtils.synthesizeKey("VK_TAB", {}); + + await onPopupClose; + + // At this point the completion suggestion should be accepted. + ok(!popup.isOpen, "popup is not open"); + const expectedInput = "dump(window.testBugB)"; + is(jsterm.getInputValue(), expectedInput, "completion was successful after VK_TAB"); + is(inputNode.selectionStart, expectedInput.length - 1, "cursor location is correct"); + is(inputNode.selectionStart, inputNode.selectionEnd, "cursor location (confirmed)"); + ok(!completeNode.value, "completeNode is empty"); + + // Cleaning history. + await jsterm.clearHistory(); +}); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js new file mode 100644 index 000000000000..b0252a9005e4 --- /dev/null +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js @@ -0,0 +1,115 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// See Bug 585991. + +const TEST_URI = `data:text/html;charset=utf-8, + + + +bug 585991 - autocomplete popup navigation and tab key usage test`; + +add_task(async function () { + let { jsterm } = await openNewTabAndConsole(TEST_URI); + info("web console opened"); + + // Clearing history that might have been set in previous tests. + await jsterm.clearHistory(); + + const { + autocompletePopup: popup, + completeNode, + inputNode, + } = jsterm; + + ok(!popup.isOpen, "popup is not open"); + + const onPopUpOpen = popup.once("popup-opened"); + jsterm.setInputValue("window.foo"); + + // Shows the popup + EventUtils.synthesizeKey(".", {}); + await onPopUpOpen; + + ok(popup.isOpen, "popup is open"); + + const popupItems = popup.getItems().map(e => e.label); + const expectedPopupItems = [ + "item3", + "item2", + "item1", + "item0", + ]; + + is(popup.itemCount, expectedPopupItems.length, "popup.itemCount is correct"); + is(popupItems.join("-"), expectedPopupItems.join("-"), + "getItems returns the items we expect"); + is(popup.selectedIndex, expectedPopupItems.length - 1, + "Index of the first item from bottom is selected."); + + EventUtils.synthesizeKey("VK_DOWN", {}); + + let prefix = jsterm.getInputValue().replace(/[\S]/g, " "); + is(popup.selectedIndex, 0, "index 0 is selected"); + is(popup.selectedItem.label, "item3", "item3 is selected"); + is(completeNode.value, prefix + "item3", "completeNode.value holds item3"); + + EventUtils.synthesizeKey("VK_DOWN", {}); + + is(popup.selectedIndex, 1, "index 1 is selected"); + is(popup.selectedItem.label, "item2", "item2 is selected"); + is(completeNode.value, prefix + "item2", "completeNode.value holds item2"); + + EventUtils.synthesizeKey("VK_UP", {}); + + is(popup.selectedIndex, 0, "index 0 is selected"); + is(popup.selectedItem.label, "item3", "item3 is selected"); + is(completeNode.value, prefix + "item3", "completeNode.value holds item3"); + + let currentSelectionIndex = popup.selectedIndex; + + EventUtils.synthesizeKey("VK_PAGE_DOWN", {}); + + ok(popup.selectedIndex > currentSelectionIndex, "Index is greater after PGDN"); + + currentSelectionIndex = popup.selectedIndex; + EventUtils.synthesizeKey("VK_PAGE_UP", {}); + + ok(popup.selectedIndex < currentSelectionIndex, "Index is less after Page UP"); + + EventUtils.synthesizeKey("VK_END", {}); + is(popup.selectedIndex, expectedPopupItems.length - 1, "index is last after End"); + + EventUtils.synthesizeKey("VK_HOME", {}); + is(popup.selectedIndex, 0, "index is first after Home"); + + info("press Tab and wait for popup to hide"); + const onPopupClose = popup.once("popup-closed"); + EventUtils.synthesizeKey("VK_TAB", {}); + + await onPopupClose; + + // At this point the completion suggestion should be accepted. + ok(!popup.isOpen, "popup is not open"); + is(jsterm.getInputValue(), "window.foo.item3", + "completion was successful after VK_TAB"); + ok(!completeNode.value, "completeNode is empty"); + + // Cleaning history. + await jsterm.clearHistory(); +}); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js new file mode 100644 index 000000000000..c7c97f7a35d4 --- /dev/null +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js @@ -0,0 +1,86 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// See Bug 585991. + +const TEST_URI = `data:text/html;charset=utf-8, + + + +bug 585991 - test pressing return with open popup`; + +// We should turn off auto-multiline editing during these tests +const PREF_AUTO_MULTILINE = "devtools.webconsole.autoMultiline"; + +add_task(async function () { + Services.prefs.setBoolPref(PREF_AUTO_MULTILINE, false); + + let { jsterm } = await openNewTabAndConsole(TEST_URI); + // Clearing history that might have been set in previous tests. + await jsterm.clearHistory(); + + const { + autocompletePopup: popup, + completeNode, + inputNode, + } = jsterm; + + let onPopUpOpen = popup.once("popup-opened"); + + info("wait for completion suggestions: window.foobar."); + + jsterm.setInputValue("window.fooba"); + EventUtils.synthesizeKey("r", {}); + EventUtils.synthesizeKey(".", {}); + + await onPopUpOpen; + + ok(popup.isOpen, "popup is open"); + + const expectedPopupItems = [ + "item3", + "item2", + "item1", + "item0", + ]; + is(popup.itemCount, expectedPopupItems.length, "popup.itemCount is correct"); + is(popup.selectedIndex, expectedPopupItems.length - 1, + "First index from bottom is selected"); + + EventUtils.synthesizeKey("VK_DOWN", {}); + + is(popup.selectedIndex, 0, "index 0 is selected"); + is(popup.selectedItem.label, "item3", "item3 is selected"); + let prefix = jsterm.getInputValue().replace(/[\S]/g, " "); + is(completeNode.value, prefix + "item3", "completeNode.value holds item3"); + + info("press Return to accept suggestion. wait for popup to hide"); + const onPopupClose = popup.once("popup-closed"); + EventUtils.synthesizeKey("VK_RETURN", {}); + + await onPopupClose; + + ok(!popup.isOpen, "popup is not open after VK_RETURN"); + is(jsterm.getInputValue(), "window.foobar.item3", + "completion was successful after VK_RETURN"); + ok(!completeNode.value, "completeNode is empty"); + + // Cleaning history. + await jsterm.clearHistory(); + Services.prefs.clearUserPref(PREF_AUTO_MULTILINE); +}); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js new file mode 100644 index 000000000000..fadbadc9748c --- /dev/null +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js @@ -0,0 +1,55 @@ +/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ +/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ + +"use strict"; + +// See Bug 873250. + +const TEST_URI = `data:text/html;charset=utf-8, + + + +bug 873250 - test pressing return with open popup, but no selection`; + +add_task(async function () { + let { jsterm } = await openNewTabAndConsole(TEST_URI); + // Clearing history that might have been set in previous tests. + await jsterm.clearHistory(); + + const { + autocompletePopup: popup, + completeNode, + inputNode, + } = jsterm; + + const onPopUpOpen = popup.once("popup-opened"); + + info("wait for popup to show"); + jsterm.setInputValue("window.testBu"); + EventUtils.synthesizeKey("g", {}); + + await onPopUpOpen; + + ok(popup.isOpen, "popup is open"); + is(popup.itemCount, 2, "popup.itemCount is correct"); + isnot(popup.selectedIndex, -1, "popup.selectedIndex is correct"); + + info("press Return and wait for popup to hide"); + const onPopUpClose = popup.once("popup-closed"); + executeSoon(() => EventUtils.synthesizeKey("VK_RETURN", {})); + await onPopUpClose; + + ok(!popup.isOpen, "popup is not open after VK_RETURN"); + is(jsterm.getInputValue(), "", "inputNode is empty after VK_RETURN"); + is(completeNode.value, "", "completeNode is empty"); + is(jsterm.history[jsterm.history.length - 1], "window.testBug", + "jsterm history is correct"); + + // Cleaning history. + await jsterm.clearHistory(); +}); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js deleted file mode 100644 index 2f3997a0d7e8..000000000000 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_autocomplete_keys.js +++ /dev/null @@ -1,369 +0,0 @@ -/* -*- indent-tabs-mode: nil; js-indent-level: 2 -*- */ -/* vim: set ft=javascript ts=2 et sw=2 tw=80: */ -/* Any copyright is dedicated to the Public Domain. - * http://creativecommons.org/publicdomain/zero/1.0/ */ - -"use strict"; - -// See Bug 585991. - -const TEST_URI = "data:text/html;charset=utf-8,

bug 585991 - autocomplete " + - "popup keyboard usage test"; - -// We should turn off auto-multiline editing during these tests -const PREF_AUTO_MULTILINE = "devtools.webconsole.autoMultiline"; -var HUD, popup, jsterm, inputNode, completeNode; - -add_task(function* () { - Services.prefs.setBoolPref(PREF_AUTO_MULTILINE, false); - yield loadTab(TEST_URI); - let hud = yield openConsole(); - - yield consoleOpened(hud); - yield popupHideAfterTab(); - yield testReturnKey(); - yield dontShowArrayNumbers(); - yield testReturnWithNoSelection(); - yield popupHideAfterReturnWithNoSelection(); - yield testCompletionInText(); - yield popupHideAfterCompletionInText(); - - HUD = popup = jsterm = inputNode = completeNode = null; - Services.prefs.setBoolPref(PREF_AUTO_MULTILINE, true); -}); - -var consoleOpened = Task.async(function* (hud) { - let deferred = defer(); - HUD = hud; - info("web console opened"); - - jsterm = HUD.jsterm; - - yield jsterm.execute("window.foobarBug585991={" + - "'item0': 'value0'," + - "'item1': 'value1'," + - "'item2': 'value2'," + - "'item3': 'value3'" + - "}"); - yield jsterm.execute("window.testBug873250a = 'hello world';" - + "window.testBug873250b = 'hello world 2';"); - popup = jsterm.autocompletePopup; - completeNode = jsterm.completeNode; - inputNode = jsterm.inputNode; - - ok(!popup.isOpen, "popup is not open"); - - popup.once("popup-opened", () => { - ok(popup.isOpen, "popup is open"); - - // 4 values, and the following properties: - // __defineGetter__ __defineSetter__ __lookupGetter__ __lookupSetter__ - // __proto__ hasOwnProperty isPrototypeOf propertyIsEnumerable - // toLocaleString toString toSource unwatch valueOf watch constructor. - is(popup.itemCount, 19, "popup.itemCount is correct"); - - let sameItems = popup.getItems().reverse().map(function (e) { - return e.label; - }); - - ok(sameItems.every(function (prop, index) { - return [ - "__defineGetter__", - "__defineSetter__", - "__lookupGetter__", - "__lookupSetter__", - "__proto__", - "constructor", - "hasOwnProperty", - "isPrototypeOf", - "item0", - "item1", - "item2", - "item3", - "propertyIsEnumerable", - "toLocaleString", - "toSource", - "toString", - "unwatch", - "valueOf", - "watch", - ][index] === prop; - }), "getItems returns the items we expect"); - - is(popup.selectedIndex, 18, - "Index of the first item from bottom is selected."); - EventUtils.synthesizeKey("VK_DOWN", {}); - - let prefix = jsterm.getInputValue().replace(/[\S]/g, " "); - - is(popup.selectedIndex, 0, "index 0 is selected"); - is(popup.selectedItem.label, "watch", "watch is selected"); - is(completeNode.value, prefix + "watch", - "completeNode.value holds watch"); - - EventUtils.synthesizeKey("VK_DOWN", {}); - - is(popup.selectedIndex, 1, "index 1 is selected"); - is(popup.selectedItem.label, "valueOf", "valueOf is selected"); - is(completeNode.value, prefix + "valueOf", - "completeNode.value holds valueOf"); - - EventUtils.synthesizeKey("VK_UP", {}); - - is(popup.selectedIndex, 0, "index 0 is selected"); - is(popup.selectedItem.label, "watch", "watch is selected"); - is(completeNode.value, prefix + "watch", - "completeNode.value holds watch"); - - let currentSelectionIndex = popup.selectedIndex; - - EventUtils.synthesizeKey("VK_PAGE_DOWN", {}); - - ok(popup.selectedIndex > currentSelectionIndex, - "Index is greater after PGDN"); - - currentSelectionIndex = popup.selectedIndex; - EventUtils.synthesizeKey("VK_PAGE_UP", {}); - - ok(popup.selectedIndex < currentSelectionIndex, - "Index is less after Page UP"); - - EventUtils.synthesizeKey("VK_END", {}); - is(popup.selectedIndex, 18, "index is last after End"); - - EventUtils.synthesizeKey("VK_HOME", {}); - is(popup.selectedIndex, 0, "index is first after Home"); - - info("press Tab and wait for popup to hide"); - popup.once("popup-closed", () => { - deferred.resolve(); - }); - EventUtils.synthesizeKey("VK_TAB", {}); - }); - - jsterm.setInputValue("window.foobarBug585991"); - EventUtils.synthesizeKey(".", {}); - - return deferred.promise; -}); - -function popupHideAfterTab() { - let deferred = defer(); - - // At this point the completion suggestion should be accepted. - ok(!popup.isOpen, "popup is not open"); - - is(jsterm.getInputValue(), "window.foobarBug585991.watch", - "completion was successful after VK_TAB"); - - ok(!completeNode.value, "completeNode is empty"); - - popup.once("popup-opened", function onShown() { - ok(popup.isOpen, "popup is open"); - - is(popup.itemCount, 19, "popup.itemCount is correct"); - - is(popup.selectedIndex, 18, "First index from bottom is selected"); - EventUtils.synthesizeKey("VK_DOWN", {}); - - let prefix = jsterm.getInputValue().replace(/[\S]/g, " "); - - is(popup.selectedIndex, 0, "index 0 is selected"); - is(popup.selectedItem.label, "watch", "watch is selected"); - is(completeNode.value, prefix + "watch", - "completeNode.value holds watch"); - - popup.once("popup-closed", function onHidden() { - ok(!popup.isOpen, "popup is not open after VK_ESCAPE"); - - is(jsterm.getInputValue(), "window.foobarBug585991.", - "completion was cancelled"); - - ok(!completeNode.value, "completeNode is empty"); - - deferred.resolve(); - }, false); - - info("press Escape to close the popup"); - executeSoon(function () { - EventUtils.synthesizeKey("VK_ESCAPE", {}); - }); - }, false); - - info("wait for completion: window.foobarBug585991."); - executeSoon(function () { - jsterm.setInputValue("window.foobarBug585991"); - EventUtils.synthesizeKey(".", {}); - }); - - return deferred.promise; -} - -function testReturnKey() { - let deferred = defer(); - - popup.once("popup-opened", function onShown() { - ok(popup.isOpen, "popup is open"); - - is(popup.itemCount, 19, "popup.itemCount is correct"); - - is(popup.selectedIndex, 18, "First index from bottom is selected"); - EventUtils.synthesizeKey("VK_DOWN", {}); - - let prefix = jsterm.getInputValue().replace(/[\S]/g, " "); - - is(popup.selectedIndex, 0, "index 0 is selected"); - is(popup.selectedItem.label, "watch", "watch is selected"); - is(completeNode.value, prefix + "watch", - "completeNode.value holds watch"); - - EventUtils.synthesizeKey("VK_DOWN", {}); - - is(popup.selectedIndex, 1, "index 1 is selected"); - is(popup.selectedItem.label, "valueOf", "valueOf is selected"); - is(completeNode.value, prefix + "valueOf", - "completeNode.value holds valueOf"); - - popup.once("popup-closed", function onHidden() { - ok(!popup.isOpen, "popup is not open after VK_RETURN"); - - is(jsterm.getInputValue(), "window.foobarBug585991.valueOf", - "completion was successful after VK_RETURN"); - - ok(!completeNode.value, "completeNode is empty"); - - deferred.resolve(); - }, false); - - info("press Return to accept suggestion. wait for popup to hide"); - - executeSoon(() => EventUtils.synthesizeKey("VK_RETURN", {})); - }, false); - - info("wait for completion suggestions: window.foobarBug585991."); - - executeSoon(function () { - jsterm.setInputValue("window.foobarBug58599"); - EventUtils.synthesizeKey("1", {}); - EventUtils.synthesizeKey(".", {}); - }); - - return deferred.promise; -} - -function* dontShowArrayNumbers() { - let deferred = defer(); - - info("dontShowArrayNumbers"); - yield ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () { - content.wrappedJSObject.foobarBug585991 = ["Sherlock Holmes"]; - }); - - jsterm = HUD.jsterm; - popup = jsterm.autocompletePopup; - - popup.once("popup-opened", function onShown() { - let sameItems = popup.getItems().map(function (e) { - return e.label; - }); - ok(!sameItems.some(function (prop) { - prop === "0"; - }), "Completing on an array doesn't show numbers."); - - popup.once("popup-closed", function popupHidden() { - deferred.resolve(); - }, false); - - info("wait for popup to hide"); - executeSoon(() => EventUtils.synthesizeKey("VK_ESCAPE", {})); - }, false); - - info("wait for popup to show"); - executeSoon(() => { - jsterm.setInputValue("window.foobarBug585991"); - EventUtils.synthesizeKey(".", {}); - }); - - return deferred.promise; -} - -function testReturnWithNoSelection() { - let deferred = defer(); - - info("test pressing return with open popup, but no selection, see bug 873250"); - - popup.once("popup-opened", function onShown() { - ok(popup.isOpen, "popup is open"); - is(popup.itemCount, 2, "popup.itemCount is correct"); - isnot(popup.selectedIndex, -1, "popup.selectedIndex is correct"); - - info("press Return and wait for popup to hide"); - popup.once("popup-closed", function popupHidden() { - deferred.resolve(); - }); - executeSoon(() => EventUtils.synthesizeKey("VK_RETURN", {})); - }); - - executeSoon(() => { - info("wait for popup to show"); - jsterm.setInputValue("window.testBu"); - EventUtils.synthesizeKey("g", {}); - }); - - return deferred.promise; -} - -function popupHideAfterReturnWithNoSelection() { - ok(!popup.isOpen, "popup is not open after VK_RETURN"); - - is(jsterm.getInputValue(), "", "inputNode is empty after VK_RETURN"); - is(completeNode.value, "", "completeNode is empty"); - is(jsterm.history[jsterm.history.length - 1], "window.testBug", - "jsterm history is correct"); - - return promise.resolve(); -} - -function testCompletionInText() { - info("test that completion works inside text, see bug 812618"); - - let deferred = defer(); - - popup.once("popup-opened", function onShown() { - ok(popup.isOpen, "popup is open"); - is(popup.itemCount, 2, "popup.itemCount is correct"); - - EventUtils.synthesizeKey("VK_DOWN", {}); - is(popup.selectedIndex, 0, "popup.selectedIndex is correct"); - ok(!completeNode.value, "completeNode.value is empty"); - - let items = popup.getItems().reverse().map(e => e.label); - let sameItems = items.every((prop, index) => - ["testBug873250a", "testBug873250b"][index] === prop); - ok(sameItems, "getItems returns the items we expect"); - - info("press Tab and wait for popup to hide"); - popup.once("popup-closed", function popupHidden() { - deferred.resolve(); - }); - EventUtils.synthesizeKey("VK_TAB", {}); - }); - - jsterm.setInputValue("dump(window.testBu)"); - inputNode.selectionStart = inputNode.selectionEnd = 18; - EventUtils.synthesizeKey("g", {}); - return deferred.promise; -} - -function popupHideAfterCompletionInText() { - // At this point the completion suggestion should be accepted. - ok(!popup.isOpen, "popup is not open"); - is(jsterm.getInputValue(), "dump(window.testBug873250b)", - "completion was successful after VK_TAB"); - is(inputNode.selectionStart, 26, "cursor location is correct"); - is(inputNode.selectionStart, inputNode.selectionEnd, - "cursor location (confirmed)"); - ok(!completeNode.value, "completeNode is empty"); - - return promise.resolve(); -} From f72a32763efb2f183d562a2336a51e0937512453 Mon Sep 17 00:00:00 2001 From: Nicolas Chevobbe Date: Thu, 26 Oct 2017 10:21:45 +0200 Subject: [PATCH 54/69] Bug 1411863 - Cleanup new console tests; r=bgrins. Move clear jsterm history to openNewTabAndConsole. Switch openNewTabAndConsole to an async function (instead of using Task.async). Switch openNewTabAndConsole consumers to async as well. MozReview-Commit-ID: KgMXowGYIJ5 --HG-- extra : rebase_source : 1406adc1e0afca07f92118370b402e314cb51fc1 --- ...wser_jsterm_add_edited_input_to_history.js | 7 +- ...wser_jsterm_autocomplete_array_no_index.js | 6 -- .../browser_jsterm_autocomplete_escape_key.js | 6 -- ...browser_jsterm_autocomplete_inside_text.js | 6 -- ...ser_jsterm_autocomplete_nav_and_tab_key.js | 6 -- .../browser_jsterm_autocomplete_return_key.js | 5 -- ...rm_autocomplete_return_key_no_selection.js | 6 -- .../test/mochitest/browser_jsterm_dollar.js | 11 ++-- .../browser_jsterm_history_persist.js | 25 ++++---- ..._no_autocompletion_on_defined_variables.js | 4 +- ...ser_jsterm_no_input_and_tab_key_pressed.js | 4 +- ...erm_no_input_change_and_tab_key_pressed.js | 4 +- .../mochitest/browser_webconsole_batching.js | 20 +++--- ...onsole_context_menu_copy_entire_message.js | 32 +++++----- ...console_context_menu_copy_link_location.js | 24 +++---- ...ser_webconsole_context_menu_copy_object.js | 64 +++++++++---------- ...rowser_webconsole_context_menu_open_url.js | 24 +++---- ...webconsole_context_menu_store_as_global.js | 34 +++++----- .../mochitest/browser_webconsole_filters.js | 22 ++++--- .../browser_webconsole_filters_persist.js | 27 ++++---- .../browser_webconsole_input_focus.js | 12 ++-- ...owser_webconsole_keyboard_accessibility.js | 8 +-- ...owser_webconsole_location_debugger_link.js | 20 +++--- ...er_webconsole_location_styleeditor_link.js | 28 ++++---- .../browser_webconsole_nodes_highlight.js | 12 ++-- ...owser_webconsole_observer_notifications.js | 10 +-- .../browser_webconsole_sourcemap_css.js | 12 ++-- .../browser_webconsole_sourcemap_invalid.js | 8 +-- .../browser_webconsole_sourcemap_nosource.js | 16 ++--- ...nsole_stacktrace_location_debugger_link.js | 18 +++--- .../mochitest/browser_webconsole_string.js | 12 ++-- .../browser_webconsole_timestamps.js | 26 ++++---- .../new-console-output/test/mochitest/head.js | 24 ++++--- 33 files changed, 255 insertions(+), 288 deletions(-) diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_add_edited_input_to_history.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_add_edited_input_to_history.js index d8019b82efc4..c93734a97d84 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_add_edited_input_to_history.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_add_edited_input_to_history.js @@ -11,12 +11,9 @@ const TEST_URI = "data:text/html;charset=utf-8,Web Console test for bug 817834"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); - // Clearing history that might have been set in previous tests. - yield hud.jsterm.clearHistory(); +add_task(async function () { + let hud = await openNewTabAndConsole(TEST_URI); testEditedInputHistory(hud); - yield hud.jsterm.clearHistory(); }); function testEditedInputHistory(hud) { diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js index d8b2ef4e440c..18ac8d223d44 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_array_no_index.js @@ -18,9 +18,6 @@ const TEST_URI = `data:text/html;charset=utf-8, add_task(async function () { let { jsterm } = await openNewTabAndConsole(TEST_URI); - // Clearing history that might have been set in previous tests. - await jsterm.clearHistory(); - const { autocompletePopup: popup, completeNode, @@ -43,7 +40,4 @@ add_task(async function () { EventUtils.synthesizeKey("VK_ESCAPE", {}); await onPopupClose; - - // Cleaning history. - await jsterm.clearHistory(); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js index b1bb17fc2d10..d5f61ef9c8d8 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_escape_key.js @@ -26,9 +26,6 @@ add_task(async function () { let { jsterm } = await openNewTabAndConsole(TEST_URI); info("web console opened"); - // Clearing history that might have been set in previous tests. - await jsterm.clearHistory(); - const { autocompletePopup: popup, completeNode, @@ -55,7 +52,4 @@ add_task(async function () { ok(!popup.isOpen, "popup is not open after VK_ESCAPE"); is(jsterm.getInputValue(), "window.foo.", "completion was cancelled"); ok(!completeNode.value, "completeNode is empty"); - - // Cleaning history. - await jsterm.clearHistory(); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js index 79024551455f..41e25f177f5c 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_inside_text.js @@ -20,9 +20,6 @@ add_task(async function () { let { jsterm } = await openNewTabAndConsole(TEST_URI); info("web console opened"); - // Clearing history that might have been set in previous tests. - await jsterm.clearHistory(); - const { autocompletePopup: popup, completeNode, @@ -62,7 +59,4 @@ add_task(async function () { is(inputNode.selectionStart, expectedInput.length - 1, "cursor location is correct"); is(inputNode.selectionStart, inputNode.selectionEnd, "cursor location (confirmed)"); ok(!completeNode.value, "completeNode is empty"); - - // Cleaning history. - await jsterm.clearHistory(); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js index b0252a9005e4..a26563796f58 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_nav_and_tab_key.js @@ -28,9 +28,6 @@ add_task(async function () { let { jsterm } = await openNewTabAndConsole(TEST_URI); info("web console opened"); - // Clearing history that might have been set in previous tests. - await jsterm.clearHistory(); - const { autocompletePopup: popup, completeNode, @@ -109,7 +106,4 @@ add_task(async function () { is(jsterm.getInputValue(), "window.foo.item3", "completion was successful after VK_TAB"); ok(!completeNode.value, "completeNode is empty"); - - // Cleaning history. - await jsterm.clearHistory(); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js index c7c97f7a35d4..b3c267ce3e64 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key.js @@ -31,9 +31,6 @@ add_task(async function () { Services.prefs.setBoolPref(PREF_AUTO_MULTILINE, false); let { jsterm } = await openNewTabAndConsole(TEST_URI); - // Clearing history that might have been set in previous tests. - await jsterm.clearHistory(); - const { autocompletePopup: popup, completeNode, @@ -80,7 +77,5 @@ add_task(async function () { "completion was successful after VK_RETURN"); ok(!completeNode.value, "completeNode is empty"); - // Cleaning history. - await jsterm.clearHistory(); Services.prefs.clearUserPref(PREF_AUTO_MULTILINE); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js index fadbadc9748c..7de4b32260e3 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_autocomplete_return_key_no_selection.js @@ -18,9 +18,6 @@ const TEST_URI = `data:text/html;charset=utf-8, add_task(async function () { let { jsterm } = await openNewTabAndConsole(TEST_URI); - // Clearing history that might have been set in previous tests. - await jsterm.clearHistory(); - const { autocompletePopup: popup, completeNode, @@ -49,7 +46,4 @@ add_task(async function () { is(completeNode.value, "", "completeNode is empty"); is(jsterm.history[jsterm.history.length - 1], "window.testBug", "jsterm history is correct"); - - // Cleaning history. - await jsterm.clearHistory(); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_dollar.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_dollar.js index afca627d5868..9566f7ccc54c 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_dollar.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_dollar.js @@ -11,13 +11,10 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" + "new-console-output/test/mochitest/test-jsterm-dollar.html"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); - yield test$(hud); - yield test$$(hud); - - // Clear history to not affect next tests. - yield hud.jsterm.clearHistory(); +add_task(async function () { + let hud = await openNewTabAndConsole(TEST_URI); + await test$(hud); + await test$$(hud); }); async function test$(hud) { diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_history_persist.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_history_persist.js index 89d0e1d2914c..42de2ef4a1ff 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_history_persist.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_history_persist.js @@ -14,37 +14,34 @@ const TEST_URI = "data:text/html;charset=utf-8,Web Console test for " + "persisting history - bug 943306"; const INPUT_HISTORY_COUNT = 10; -add_task(function* () { +add_task(async function() { info("Setting custom input history pref to " + INPUT_HISTORY_COUNT); Services.prefs.setIntPref("devtools.webconsole.inputHistoryCount", INPUT_HISTORY_COUNT); // First tab: run a bunch of commands and then make sure that you can // navigate through their history. - let hud1 = yield openNewTabAndConsole(TEST_URI); - - // Clearing history that might have been set in previous tests. - yield hud1.jsterm.clearHistory(); + let hud1 = await openNewTabAndConsole(TEST_URI); is(JSON.stringify(hud1.jsterm.history), "[]", "No history on first tab initially"); - yield populateInputHistory(hud1); + await populateInputHistory(hud1); is(JSON.stringify(hud1.jsterm.history), '["0","1","2","3","4","5","6","7","8","9"]', "First tab has populated history"); // Second tab: Just make sure that you can navigate through the history // generated by the first tab. - let hud2 = yield openNewTabAndConsole(TEST_URI); + let hud2 = await openNewTabAndConsole(TEST_URI, false); is(JSON.stringify(hud2.jsterm.history), '["0","1","2","3","4","5","6","7","8","9"]', "Second tab has populated history"); - yield testNavigatingHistoryInUI(hud2); + await testNavigatingHistoryInUI(hud2); is(JSON.stringify(hud2.jsterm.history), '["0","1","2","3","4","5","6","7","8","9",""]', "An empty entry has been added in the second tab due to history perusal"); // Third tab: Should have the same history as first tab, but if we run a // command, then the history of the first and second shouldn't be affected - let hud3 = yield openNewTabAndConsole(TEST_URI); + let hud3 = await openNewTabAndConsole(TEST_URI, false); is(JSON.stringify(hud3.jsterm.history), '["0","1","2","3","4","5","6","7","8","9"]', "Third tab has populated history"); @@ -67,15 +64,15 @@ add_task(function* () { // Fourth tab: Should have the latest command from the third tab, followed // by the rest of the history from the first tab. - let hud4 = yield openNewTabAndConsole(TEST_URI); + let hud4 = await openNewTabAndConsole(TEST_URI, false); is(JSON.stringify(hud4.jsterm.history), '["1","2","3","4","5","6","7","8","9","\\"hello from third tab\\""]', "Fourth tab has most recent history"); - yield hud4.jsterm.clearHistory(); + await hud4.jsterm.clearHistory(); is(JSON.stringify(hud4.jsterm.history), "[]", "Clearing history for a tab works"); - let hud5 = yield openNewTabAndConsole(TEST_URI); + let hud5 = await openNewTabAndConsole(TEST_URI, false); is(JSON.stringify(hud5.jsterm.history), "[]", "Clearing history carries over to a new tab"); @@ -87,14 +84,14 @@ add_task(function* () { * Populate the history by running the following commands: * [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] */ -function* populateInputHistory(hud) { +async function populateInputHistory(hud) { let jsterm = hud.jsterm; for (let i = 0; i < INPUT_HISTORY_COUNT; i++) { // Set input value separately from execute so UP arrow accurately navigates // history. jsterm.setInputValue(i); - yield jsterm.execute(); + await jsterm.execute(); } } diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_autocompletion_on_defined_variables.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_autocompletion_on_defined_variables.js index aec9d1a10190..250bfa240a50 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_autocompletion_on_defined_variables.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_autocompletion_on_defined_variables.js @@ -10,8 +10,8 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" + "test/test-console.html"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function () { + let hud = await openNewTabAndConsole(TEST_URI); testCompletion(hud); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_and_tab_key_pressed.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_and_tab_key_pressed.js index 46d339423715..a1efc3a1b263 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_and_tab_key_pressed.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_and_tab_key_pressed.js @@ -9,8 +9,8 @@ const TEST_URI = "data:text/html,Testing jsterm with no input"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); testCompletion(hud); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_change_and_tab_key_pressed.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_change_and_tab_key_pressed.js index 6a3ca6d1cbac..866379aabfb6 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_change_and_tab_key_pressed.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_jsterm_no_input_change_and_tab_key_pressed.js @@ -9,8 +9,8 @@ const TEST_URI = "data:text/html,Testing jsterm focus"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); let jsterm = hud.jsterm; let input = jsterm.inputNode; diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_batching.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_batching.js index 0bfdccc3cdd1..5872d6b98a3d 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_batching.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_batching.js @@ -10,33 +10,33 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/test-batching.html"; const { l10n } = require("devtools/client/webconsole/new-console-output/utils/messages"); -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); const messageNumber = 100; - yield testSimpleBatchLogging(hud, messageNumber); - yield testBatchLoggingAndClear(hud, messageNumber); + await testSimpleBatchLogging(hud, messageNumber); + await testBatchLoggingAndClear(hud, messageNumber); }); -function* testSimpleBatchLogging(hud, messageNumber) { - yield ContentTask.spawn(gBrowser.selectedBrowser, messageNumber, +async function testSimpleBatchLogging(hud, messageNumber) { + await ContentTask.spawn(gBrowser.selectedBrowser, messageNumber, function (numMessages) { content.wrappedJSObject.batchLog(numMessages); } ); for (let i = 0; i < messageNumber; i++) { - let node = yield waitFor(() => findMessageAtIndex(hud, i, i)); + let node = await waitFor(() => findMessageAtIndex(hud, i, i)); is(node.textContent, i.toString(), `message at index "${i}" is the expected one`); } } -function* testBatchLoggingAndClear(hud, messageNumber) { - yield ContentTask.spawn(gBrowser.selectedBrowser, messageNumber, +async function testBatchLoggingAndClear(hud, messageNumber) { + await ContentTask.spawn(gBrowser.selectedBrowser, messageNumber, function (numMessages) { content.wrappedJSObject.batchLogAndClear(numMessages); } ); - yield waitFor(() => findMessage(hud, l10n.getStr("consoleCleared"))); + await waitFor(() => findMessage(hud, l10n.getStr("consoleCleared"))); ok(true, "console cleared message is displayed"); // Passing the text argument as an empty string will returns all the message, diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_copy_entire_message.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_copy_entire_message.js index 79ad9a6e66c8..8fdf98ad06d9 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_copy_entire_message.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_copy_entire_message.js @@ -28,23 +28,23 @@ const TEST_URI = `data:text/html;charset=utf-8,`; const copyObjectMenuItemId = "#console-menu-copy-object"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); let [msgWithText, msgWithObj, msgNested] = - yield waitFor(() => findMessages(hud, "foo")); + await waitFor(() => findMessages(hud, "foo")); ok(msgWithText && msgWithObj && msgNested, "Three messages should have appeared"); - let [groupMsgObj] = yield waitFor(() => findMessages(hud, "group", ".message-body")); - let [collapsedGroupMsgObj] = yield waitFor(() => + let [groupMsgObj] = await waitFor(() => findMessages(hud, "group", ".message-body")); + let [collapsedGroupMsgObj] = await waitFor(() => findMessages(hud, "collapsed", ".message-body")); - let [numberMsgObj] = yield waitFor(() => findMessages(hud, `532`, ".message-body")); - let [trueMsgObj] = yield waitFor(() => findMessages(hud, `true`, ".message-body")); - let [falseMsgObj] = yield waitFor(() => findMessages(hud, `false`, ".message-body")); - let [undefinedMsgObj] = yield waitFor(() => findMessages(hud, `undefined`, + let [numberMsgObj] = await waitFor(() => findMessages(hud, `532`, ".message-body")); + let [trueMsgObj] = await waitFor(() => findMessages(hud, `true`, ".message-body")); + let [falseMsgObj] = await waitFor(() => findMessages(hud, `false`, ".message-body")); + let [undefinedMsgObj] = await waitFor(() => findMessages(hud, `undefined`, ".message-body")); - let [nullMsgObj] = yield waitFor(() => findMessages(hud, `null`, ".message-body")); + let [nullMsgObj] = await waitFor(() => findMessages(hud, `null`, ".message-body")); ok(nullMsgObj, "One message with null value should have appeared"); let text = msgWithText.querySelector(".objectBox-string"); @@ -49,50 +49,50 @@ add_task(function* () { let topObjInMsg = msgNested.querySelector(".objectBox-array"); let nestedObjInMsg = msgNested.querySelector(".objectBox-object"); - let consoleMessages = yield waitFor(() => findMessages(hud, "console.log(\"foo\");", + let consoleMessages = await waitFor(() => findMessages(hud, "console.log(\"foo\");", ".message-location")); - yield testCopyObjectMenuItemDisabled(hud, consoleMessages[0]); + await testCopyObjectMenuItemDisabled(hud, consoleMessages[0]); info(`Check "Copy object" is enabled for text only messages thus copying the text`); - yield testCopyObject(hud, text, `foo`, false); + await testCopyObject(hud, text, `foo`, false); info(`Check "Copy object" is enabled for text in complex messages thus copying the text`); - yield testCopyObject(hud, textInMsgWithObj, `foo`, false); + await testCopyObject(hud, textInMsgWithObj, `foo`, false); info("Check `Copy object` is enabled for objects in complex messages"); - yield testCopyObject(hud, objInMsgWithObj, `{"baz":1}`, true); + await testCopyObject(hud, objInMsgWithObj, `{"baz":1}`, true); info("Check `Copy object` is enabled for top object in nested messages"); - yield testCopyObject(hud, topObjInMsg, `["foo",{"baz":1},2]`, true); + await testCopyObject(hud, topObjInMsg, `["foo",{"baz":1},2]`, true); info("Check `Copy object` is enabled for nested object in nested messages"); - yield testCopyObject(hud, nestedObjInMsg, `{"baz":1}`, true); + await testCopyObject(hud, nestedObjInMsg, `{"baz":1}`, true); info("Check `Copy object` is disabled on `console.group('group')` messages"); - yield testCopyObjectMenuItemDisabled(hud, groupMsgObj); + await testCopyObjectMenuItemDisabled(hud, groupMsgObj); info(`Check "Copy object" is disabled in "console.groupCollapsed('collapsed')" messages`); - yield testCopyObjectMenuItemDisabled(hud, collapsedGroupMsgObj); + await testCopyObjectMenuItemDisabled(hud, collapsedGroupMsgObj); // Check for primitive objects info("Check `Copy object` is enabled for numbers"); - yield testCopyObject(hud, numberMsgObj, `532`, false); + await testCopyObject(hud, numberMsgObj, `532`, false); info("Check `Copy object` is enabled for booleans"); - yield testCopyObject(hud, trueMsgObj, `true`, false); - yield testCopyObject(hud, falseMsgObj, `false`, false); + await testCopyObject(hud, trueMsgObj, `true`, false); + await testCopyObject(hud, falseMsgObj, `false`, false); info("Check `Copy object` is enabled for undefined and null"); - yield testCopyObject(hud, undefinedMsgObj, `undefined`, false); - yield testCopyObject(hud, nullMsgObj, `null`, false); + await testCopyObject(hud, undefinedMsgObj, `undefined`, false); + await testCopyObject(hud, nullMsgObj, `null`, false); }); -function* testCopyObject(hud, element, expectedMessage, objectInput) { +async function testCopyObject(hud, element, expectedMessage, objectInput) { info("Check `Copy object` is enabled"); - let menuPopup = yield openContextMenu(hud, element); + let menuPopup = await openContextMenu(hud, element); let copyObjectMenuItem = menuPopup.querySelector(copyObjectMenuItemId); ok(!copyObjectMenuItem.disabled, "`Copy object` is enabled for object in complex message"); @@ -103,19 +103,19 @@ function* testCopyObject(hud, element, expectedMessage, objectInput) { }; info("Click on `Copy object`"); - yield waitForClipboardPromise(() => copyObjectMenuItem.click(), validatorFn); + await waitForClipboardPromise(() => copyObjectMenuItem.click(), validatorFn); info("`Copy object` by using the access-key O"); - menuPopup = yield openContextMenu(hud, element); - yield waitForClipboardPromise(() => synthesizeKeyShortcut("O"), validatorFn); + menuPopup = await openContextMenu(hud, element); + await waitForClipboardPromise(() => synthesizeKeyShortcut("O"), validatorFn); } -function* testCopyObjectMenuItemDisabled(hud, element) { - let menuPopup = yield openContextMenu(hud, element); +async function testCopyObjectMenuItemDisabled(hud, element) { + let menuPopup = await openContextMenu(hud, element); let copyObjectMenuItem = menuPopup.querySelector(copyObjectMenuItemId); ok(copyObjectMenuItem.disabled, `"Copy object" is disabled for messages with no variables/objects`); - yield hideContextMenu(hud); + await hideContextMenu(hud); } function prettyPrintMessage(message, isObject) { diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_open_url.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_open_url.js index 98f9dc7379dd..5cdb179a5adc 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_open_url.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_open_url.js @@ -11,41 +11,41 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" + "new-console-output/test/mochitest/test-console.html"; -add_task(function* () { +add_task(async function() { // Enable net messages in the console for this test. - yield pushPref("devtools.webconsole.filter.net", true); + await pushPref("devtools.webconsole.filter.net", true); - let hud = yield openNewTabAndConsole(TEST_URI); + let hud = await openNewTabAndConsole(TEST_URI); hud.jsterm.clearOutput(); info("Test Open URL menu item for text log"); info("Logging a text message in the content window"); - yield ContentTask.spawn(gBrowser.selectedBrowser, null, () => { + await ContentTask.spawn(gBrowser.selectedBrowser, null, () => { content.wrappedJSObject.console.log("simple text message"); }); - let message = yield waitFor(() => findMessage(hud, "simple text message")); + let message = await waitFor(() => findMessage(hud, "simple text message")); ok(message, "Text log found in the console"); info("Open and check the context menu for the logged text message"); - let menuPopup = yield openContextMenu(hud, message); + let menuPopup = await openContextMenu(hud, message); let openUrlItem = menuPopup.querySelector("#console-menu-open-url"); ok(!openUrlItem, "Open URL menu item is not available"); - yield hideContextMenu(hud); + await hideContextMenu(hud); hud.jsterm.clearOutput(); info("Test Open URL menu item for network log"); info("Reload the content window to produce a network log"); - yield ContentTask.spawn(gBrowser.selectedBrowser, null, () => { + await ContentTask.spawn(gBrowser.selectedBrowser, null, () => { content.wrappedJSObject.location.reload(); }); - message = yield waitFor(() => findMessage(hud, "test-console.html")); + message = await waitFor(() => findMessage(hud, "test-console.html")); ok(message, "Network log found in the console"); info("Open and check the context menu for the logged network message"); - menuPopup = yield openContextMenu(hud, message); + menuPopup = await openContextMenu(hud, message); openUrlItem = menuPopup.querySelector("#console-menu-open-url"); ok(openUrlItem, "Open URL menu item is available"); @@ -53,8 +53,8 @@ add_task(function* () { let tabLoaded = listenToTabLoad(); info("Click on Open URL menu item and wait for new tab to open"); openUrlItem.click(); - yield hideContextMenu(hud); - let newTab = yield tabLoaded; + await hideContextMenu(hud); + let newTab = await tabLoaded; let newTabHref = newTab.linkedBrowser._contentWindow.location.href; is(newTabHref, TEST_URI, "Tab was opened with the expected URL"); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_store_as_global.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_store_as_global.js index 8b8d553ec92f..539f98451c06 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_store_as_global.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_context_menu_store_as_global.js @@ -15,11 +15,11 @@ const TEST_URI = `data:text/html;charset=utf-8,`; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); let [msgWithText, msgWithObj, msgNested] = - yield waitFor(() => findMessages(hud, "foo")); + await waitFor(() => findMessages(hud, "foo")); ok(msgWithText && msgWithObj && msgNested, "Three messages should have appeared"); let text = msgWithText.querySelector(".objectBox-string"); @@ -32,49 +32,49 @@ add_task(function* () { let nestedObjInMsg = msgNested.querySelector(".objectBox-object"); info("Check store as global variable is disabled for text only messages"); - let menuPopup = yield openContextMenu(hud, text); + let menuPopup = await openContextMenu(hud, text); let storeMenuItem = menuPopup.querySelector("#console-menu-store"); ok(storeMenuItem.disabled, "store as global variable is disabled for text message"); - yield hideContextMenu(hud); + await hideContextMenu(hud); info("Check store as global variable is disabled for text in complex messages"); - menuPopup = yield openContextMenu(hud, textInMsgWithObj); + menuPopup = await openContextMenu(hud, textInMsgWithObj); storeMenuItem = menuPopup.querySelector("#console-menu-store"); ok(storeMenuItem.disabled, "store as global variable is disabled for text in complex message"); - yield hideContextMenu(hud); + await hideContextMenu(hud); info("Check store as global variable is enabled for objects in complex messages"); - yield storeAsVariable(hud, objInMsgWithObj); + await storeAsVariable(hud, objInMsgWithObj); is(hud.jsterm.getInputValue(), "temp0", "Input was set"); - let executedResult = yield hud.jsterm.execute(); + let executedResult = await hud.jsterm.execute(); ok(executedResult.textContent.includes("{ baz: 1 }"), "Correct variable assigned into console"); info("Check store as global variable is enabled for top object in nested messages"); - yield storeAsVariable(hud, topObjInMsg); + await storeAsVariable(hud, topObjInMsg); is(hud.jsterm.getInputValue(), "temp1", "Input was set"); - executedResult = yield hud.jsterm.execute(); + executedResult = await hud.jsterm.execute(); ok(executedResult.textContent.includes(`[ "foo", {\u2026}, 2 ]`), "Correct variable assigned into console " + executedResult.textContent); info("Check store as global variable is enabled for nested object in nested messages"); - yield storeAsVariable(hud, nestedObjInMsg); + await storeAsVariable(hud, nestedObjInMsg); is(hud.jsterm.getInputValue(), "temp2", "Input was set"); - executedResult = yield hud.jsterm.execute(); + executedResult = await hud.jsterm.execute(); ok(executedResult.textContent.includes("{ baz: 1 }"), "Correct variable assigned into console " + executedResult.textContent); }); -function* storeAsVariable(hud, element) { +async function storeAsVariable(hud, element) { info("Check store as global variable is enabled"); - let menuPopup = yield openContextMenu(hud, element); + let menuPopup = await openContextMenu(hud, element); let storeMenuItem = menuPopup.querySelector("#console-menu-store"); ok(!storeMenuItem.disabled, "store as global variable is enabled for object in complex message"); @@ -84,8 +84,8 @@ function* storeAsVariable(hud, element) { storeMenuItem.click(); info("Wait for console input to be updated with the temp variable"); - yield onceInputSet; + await onceInputSet; info("Wait for context menu to be hidden"); - yield hideContextMenu(hud); + await hideContextMenu(hud); } diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters.js index e50491e26e35..9d613925f305 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters.js @@ -8,16 +8,16 @@ "use strict"; const { MESSAGE_LEVEL } = require("devtools/client/webconsole/new-console-output/constants"); const TEST_URI = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/test-console-filters.html"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function () { + let hud = await openNewTabAndConsole(TEST_URI); const outputNode = hud.ui.outputNode; - const toolbar = yield waitFor(() => { + const toolbar = await waitFor(() => { return outputNode.querySelector(".webconsole-filterbar-primary"); }); ok(toolbar, "Toolbar found"); // Show the filter bar toolbar.querySelector(".devtools-filter-icon").click(); - const filterBar = yield waitFor(() => { + const filterBar = await waitFor(() => { return outputNode.querySelector(".webconsole-filterbar-secondary"); }); ok(filterBar, "Filter bar is shown when filter icon is clicked."); @@ -39,20 +39,22 @@ add_task(function* () { // Check that messages are not shown when their filter is turned off. filterBar.querySelector(".error").click(); - yield waitFor(() => findMessages(hud, "").length == 4); + await waitFor(() => findMessages(hud, "").length == 4); ok(true, "When a filter is turned off, its messages are not shown."); // Check that the ui settings were persisted. - yield closeTabAndToolbox(); - yield testFilterPersistence(); + await closeTabAndToolbox(); + await testFilterPersistence(); }); + function filterIsEnabled(button) { return button.classList.contains("checked"); } -function* testFilterPersistence() { - let hud = yield openNewTabAndConsole(TEST_URI); + +async function testFilterPersistence() { + let hud = await openNewTabAndConsole(TEST_URI); const outputNode = hud.ui.outputNode; - const filterBar = yield waitFor(() => { + const filterBar = await waitFor(() => { return outputNode.querySelector(".webconsole-filterbar-secondary"); }); ok(filterBar, "Filter bar ui setting is persisted."); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters_persist.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters_persist.js index a62bbed19e81..d888fc4301fa 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters_persist.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_filters_persist.js @@ -9,10 +9,10 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/test-console-filters.html"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); - let filterButtons = yield getFilterButtons(hud); + let filterButtons = await getFilterButtons(hud); info("Disable all filters"); filterButtons.forEach(filterButton => { if (filterIsEnabled(filterButton)) { @@ -21,32 +21,33 @@ add_task(function* () { }); info("Close and re-open the console"); - yield closeTabAndToolbox(); - hud = yield openNewTabAndConsole(TEST_URI); + await closeTabAndToolbox(); + hud = await openNewTabAndConsole(TEST_URI); info("Check that all filters are disabled, and enable them"); - filterButtons = yield getFilterButtons(hud); + filterButtons = await getFilterButtons(hud); filterButtons.forEach(filterButton => { ok(!filterIsEnabled(filterButton), "filter is disabled"); filterButton.click(); }); info("Close and re-open the console"); - yield closeTabAndToolbox(); - hud = yield openNewTabAndConsole(TEST_URI); + await closeTabAndToolbox(); + hud = await openNewTabAndConsole(TEST_URI); info("Check that all filters are enabled"); - filterButtons = yield getFilterButtons(hud); + filterButtons = await getFilterButtons(hud); filterButtons.forEach(filterButton => { ok(filterIsEnabled(filterButton), "filter is enabled"); }); // Check that the ui settings were persisted. - yield closeTabAndToolbox(); + await closeTabAndToolbox(); }); -function* getFilterButtons(hud) { + +async function getFilterButtons(hud) { const outputNode = hud.ui.outputNode; info("Wait for console toolbar to appear"); - const toolbar = yield waitFor(() => { + const toolbar = await waitFor(() => { return outputNode.querySelector(".webconsole-filterbar-primary"); }); // Show the filter bar if it is hidden @@ -55,7 +56,7 @@ function* getFilterButtons(hud) { } info("Wait for console filterbar to appear"); - const filterBar = yield waitFor(() => { + const filterBar = await waitFor(() => { return outputNode.querySelector(".webconsole-filterbar-secondary"); }); ok(filterBar, "Filter bar is shown when filter icon is clicked."); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_input_focus.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_input_focus.js index 00380f750151..b345b188db90 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_input_focus.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_input_focus.js @@ -13,8 +13,8 @@ const TEST_URI = console.log("console message 1"); `; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); let inputNode = hud.jsterm.inputNode; info("Focus after console is opened"); @@ -24,19 +24,19 @@ add_task(function* () { ok(hasFocus(inputNode), "input node is focused after output is cleared"); info("Focus during message logging"); - ContentTask.spawn(gBrowser.selectedBrowser, {}, function* () { + ContentTask.spawn(gBrowser.selectedBrowser, {}, function() { content.wrappedJSObject.console.log("console message 2"); }); - let msg = yield waitFor(() => findMessage(hud, "console message 2")); + let msg = await waitFor(() => findMessage(hud, "console message 2")); ok(hasFocus(inputNode, "input node is focused, first time")); info("Focus after clicking in the output area"); - yield waitForBlurredInput(hud); + await waitForBlurredInput(hud); EventUtils.sendMouseEvent({type: "click"}, msg); ok(hasFocus(inputNode), "input node is focused, second time"); info("Setting a text selection and making sure a click does not re-focus"); - yield waitForBlurredInput(hud); + await waitForBlurredInput(hud); let selection = hud.iframeWindow.getSelection(); selection.selectAllChildren(msg.querySelector(".message-body")); EventUtils.sendMouseEvent({type: "click"}, msg); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_keyboard_accessibility.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_keyboard_accessibility.js index 7dfd834a7d86..f13ca384aa4e 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_keyboard_accessibility.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_keyboard_accessibility.js @@ -16,11 +16,11 @@ const TEST_URI = `; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function () { + let hud = await openNewTabAndConsole(TEST_URI); info("Web Console opened"); const outputScroller = hud.ui.outputScroller; - yield waitFor(() => findMessages(hud, "").length == 100); + await waitFor(() => findMessages(hud, "").length == 100); let currentPosition = outputScroller.scrollTop; const bottom = currentPosition; hud.jsterm.inputNode.focus(); @@ -53,7 +53,7 @@ add_task(function* () { clearShortcut = WCUL10n.getStr("webconsole.clear.key"); } synthesizeKeyShortcut(clearShortcut); - yield waitFor(() => findMessages(hud, "").length == 0); + await waitFor(() => findMessages(hud, "").length == 0); ok(hasFocus(hud.jsterm.inputNode), "jsterm input is focused"); // Focus filter diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_debugger_link.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_debugger_link.js index 36f61146b19a..b441d31b3f0e 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_debugger_link.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_debugger_link.js @@ -12,12 +12,12 @@ requestLongerTimeout(2); const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" + "new-console-output/test/mochitest/test-location-debugger-link.html"; -add_task(function* () { +add_task(async function() { // Force the new debugger UI, in case this gets uplifted with the old // debugger still turned on - yield pushPref("devtools.debugger.new-debugger-frontend", true); - yield pushPref("devtools.webconsole.filter.error", true); - yield pushPref("devtools.webconsole.filter.log", true); + await pushPref("devtools.debugger.new-debugger-frontend", true); + await pushPref("devtools.webconsole.filter.error", true); + await pushPref("devtools.webconsole.filter.log", true); // On e10s, the exception thrown in test-location-debugger-link-errors.js // is triggered in child process and is ignored by test harness @@ -25,18 +25,18 @@ add_task(function* () { expectUncaughtException(); } - let hud = yield openNewTabAndConsole(TEST_URI); + let hud = await openNewTabAndConsole(TEST_URI); let target = TargetFactory.forTab(gBrowser.selectedTab); let toolbox = gDevTools.getToolbox(target); - yield testOpenInDebugger(hud, toolbox, "document.bar"); + await testOpenInDebugger(hud, toolbox, "document.bar"); info("Selecting the console again"); - yield toolbox.selectTool("webconsole"); - yield testOpenInDebugger(hud, toolbox, "Blah Blah"); + await toolbox.selectTool("webconsole"); + await testOpenInDebugger(hud, toolbox, "Blah Blah"); // // check again the first node. info("Selecting the console again"); - yield toolbox.selectTool("webconsole"); - yield testOpenInDebugger(hud, toolbox, "document.bar"); + await toolbox.selectTool("webconsole"); + await testOpenInDebugger(hud, toolbox, "document.bar"); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_styleeditor_link.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_styleeditor_link.js index d0ee81991336..7d401f7cbf4e 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_styleeditor_link.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_location_styleeditor_link.js @@ -7,22 +7,22 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/test-location-styleeditor-link.html"; -add_task(function* () { - yield pushPref("devtools.webconsole.filter.css", true); - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function () { + await pushPref("devtools.webconsole.filter.css", true); + let hud = await openNewTabAndConsole(TEST_URI); let target = TargetFactory.forTab(gBrowser.selectedTab); let toolbox = gDevTools.getToolbox(target); - yield testViewSource(hud, toolbox, "\u2018font-weight\u2019"); + await testViewSource(hud, toolbox, "\u2018font-weight\u2019"); info("Selecting the console again"); - yield toolbox.selectTool("webconsole"); - yield testViewSource(hud, toolbox, "\u2018color\u2019"); + await toolbox.selectTool("webconsole"); + await testViewSource(hud, toolbox, "\u2018color\u2019"); }); -function* testViewSource(hud, toolbox, text) { +async function testViewSource(hud, toolbox, text) { info(`Testing message with text "${text}"`); - let messageNode = yield waitFor(() => findMessage(hud, text)); + let messageNode = await waitFor(() => findMessage(hud, text)); let frameLinkNode = messageNode.querySelector(".message-location .frame-link"); ok(frameLinkNode, "The message does have a location link"); @@ -35,10 +35,10 @@ function* testViewSource(hud, toolbox, text) { EventUtils.sendMouseEvent({ type: "click" }, messageNode.querySelector(".frame-link-filename")); - let panel = yield onStyleEditorSelected; + let panel = await onStyleEditorSelected; ok(true, "The style editor is selected when clicking on the location element"); - yield onStyleEditorReady(panel); + await onStyleEditorReady(panel); info("style editor window focused"); let href = frameLinkNode.getAttribute("data-url"); @@ -47,10 +47,10 @@ function* testViewSource(hud, toolbox, text) { let editor = getEditorForHref(panel.UI, href); ok(editor, "found style editor for " + href); - yield performLineCheck(panel.UI, editor, line - 1); + await performLineCheck(panel.UI, editor, line - 1); } -function* onStyleEditorReady(panel) { +async function onStyleEditorReady(panel) { let win = panel.panelWindow; ok(win, "Style Editor Window is defined"); ok(panel.UI, "Style Editor UI is defined"); @@ -74,10 +74,10 @@ function getEditorForHref(styleEditorUI, href) { return foundEditor; } -function* performLineCheck(styleEditorUI, editor, line) { +async function performLineCheck(styleEditorUI, editor, line) { info("wait for source editor to load"); // Get out of the styleeditor-selected event loop. - yield waitForTick(); + await waitForTick(); is(editor.sourceEditor.getCursor().line, line, "correct line is selected"); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_nodes_highlight.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_nodes_highlight.js index a8c9a382e5ff..49493cd0bf58 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_nodes_highlight.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_nodes_highlight.js @@ -21,15 +21,15 @@ const HTML = ` `; const TEST_URI = "data:text/html;charset=utf-8," + encodeURI(HTML); -add_task(function* () { - const hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + const hud = await openNewTabAndConsole(TEST_URI); const toolbox = gDevTools.getToolbox(hud.target); - yield ContentTask.spawn(gBrowser.selectedBrowser, null, () => { + await ContentTask.spawn(gBrowser.selectedBrowser, null, () => { content.wrappedJSObject.logNode("h1"); }); - let msg = yield waitFor(() => findMessage(hud, "

")); + let msg = await waitFor(() => findMessage(hud, "

")); let node = msg.querySelector(".objectBox-node"); ok(node !== null, "Node was logged as expected"); const view = node.ownerDocument.defaultView; @@ -38,7 +38,7 @@ add_task(function* () { let onNodeHighlight = toolbox.once("node-highlight"); EventUtils.synthesizeMouseAtCenter(node, {type: "mousemove"}, view); - let nodeFront = yield onNodeHighlight; + let nodeFront = await onNodeHighlight; is(nodeFront.displayName, "h1", "The correct node was highlighted"); info("Unhighlight the node by moving away from the node"); @@ -46,6 +46,6 @@ add_task(function* () { let btn = toolbox.doc.querySelector(".toolbox-dock-button"); EventUtils.synthesizeMouseAtCenter(btn, {type: "mousemove"}, view); - yield onNodeUnhighlight; + await onNodeUnhighlight; ok(true, "node-unhighlight event was fired when moving away from the node"); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_observer_notifications.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_observer_notifications.js index f305244ef37d..8879ed6d9742 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_observer_notifications.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_observer_notifications.js @@ -11,13 +11,13 @@ const TEST_URI = "data:text/html;charset=utf-8,

Web Console test for " + let created = false; let destroyed = false; -add_task(function* () { +add_task(async function() { setupObserver(); - yield openNewTabAndConsole(TEST_URI); - yield waitFor(() => created); + await openNewTabAndConsole(TEST_URI); + await waitFor(() => created); - yield closeTabAndToolbox(gBrowser.selectedTab); - yield waitFor(() => destroyed); + await closeTabAndToolbox(gBrowser.selectedTab); + await waitFor(() => destroyed); }); function setupObserver() { diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_css.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_css.js index c4a048e00a5e..8bb5545f5172 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_css.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_css.js @@ -27,18 +27,18 @@ const PAGE_URL = `data:text/html, `; -add_task(function* () { - yield pushPref("devtools.source-map.client-service.enabled", true); - yield pushPref("devtools.webconsole.filter.css", true); +add_task(async function() { + await pushPref("devtools.source-map.client-service.enabled", true); + await pushPref("devtools.webconsole.filter.css", true); - const hud = yield openNewTabAndConsole(PAGE_URL); + const hud = await openNewTabAndConsole(PAGE_URL); info("Waiting for css warning"); - let node = yield waitFor(() => findMessage(hud, "octopus")); + let node = await waitFor(() => findMessage(hud, "octopus")); ok(!!node, "css warning seen"); info("Waiting for source map to be applied"); - let found = yield waitFor(() => { + let found = await waitFor(() => { let frameLinkNode = node.querySelector(".message-location .frame-link"); let url = frameLinkNode.getAttribute("data-url"); return url.includes("scss"); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_invalid.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_invalid.js index 199448fca803..04fda3d0f862 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_invalid.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_invalid.js @@ -24,11 +24,11 @@ const PAGE_URL = `data:text/html, `; -add_task(function* () { - yield pushPref("devtools.source-map.client-service.enabled", true); +add_task(async function() { + await pushPref("devtools.source-map.client-service.enabled", true); - const hud = yield openNewTabAndConsole(PAGE_URL); + const hud = await openNewTabAndConsole(PAGE_URL); - const node = yield waitFor(() => findMessage(hud, "Source map error")); + const node = await waitFor(() => findMessage(hud, "Source map error")); ok(node, "source map error is displayed in web console"); }); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_nosource.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_nosource.js index aec393a50fe5..8b8e74037f17 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_nosource.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_sourcemap_nosource.js @@ -24,17 +24,17 @@ const PAGE_URL = `data:text/html, `; -add_task(function* () { +add_task(async function() { // Force the new debugger UI, in case this gets uplifted with the old // debugger still turned on - yield pushPref("devtools.debugger.new-debugger-frontend", true); - yield pushPref("devtools.source-map.client-service.enabled", true); + await pushPref("devtools.debugger.new-debugger-frontend", true); + await pushPref("devtools.source-map.client-service.enabled", true); - const hud = yield openNewTabAndConsole(PAGE_URL); + const hud = await openNewTabAndConsole(PAGE_URL); const toolbox = hud.ui.newConsoleOutput.toolbox; info("Finding \"here\" message and waiting for source map to be applied"); - yield waitFor(() => { + await waitFor(() => { let node = findMessage(hud, "here"); if (!node) { return false; @@ -44,12 +44,12 @@ add_task(function* () { return url.includes("nosuchfile"); }); - yield testOpenInDebugger(hud, toolbox, "here"); + await testOpenInDebugger(hud, toolbox, "here"); info("Selecting the console again"); - yield toolbox.selectTool("webconsole"); + await toolbox.selectTool("webconsole"); - const node = yield waitFor(() => findMessage(hud, "original source")); + const node = await waitFor(() => findMessage(hud, "original source")); ok(node, "source map error is displayed in web console"); ok(!!node.querySelector(".learn-more-link"), "source map error has learn more link"); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_stacktrace_location_debugger_link.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_stacktrace_location_debugger_link.js index ab2e26d0e571..4bf2251eb15b 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_stacktrace_location_debugger_link.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_stacktrace_location_debugger_link.js @@ -11,7 +11,7 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/" + "new-console-output/test/mochitest/test-stacktrace-location-debugger-link.html"; -add_task(function* () { +add_task(async function() { // Force the new debugger UI, in case this gets uplifted with the old // debugger still turned on Services.prefs.setBoolPref("devtools.debugger.new-debugger-frontend", true); @@ -21,29 +21,29 @@ add_task(function* () { Services.prefs.clearUserPref("devtools.webconsole.filter.log"); }); - let hud = yield openNewTabAndConsole(TEST_URI); + let hud = await openNewTabAndConsole(TEST_URI); let target = TargetFactory.forTab(gBrowser.selectedTab); let toolbox = gDevTools.getToolbox(target); - yield testOpenInDebugger(hud, toolbox, "console.trace()"); + await testOpenInDebugger(hud, toolbox, "console.trace()"); }); -function* testOpenInDebugger(hud, toolbox, text) { +async function testOpenInDebugger(hud, toolbox, text) { info(`Testing message with text "${text}"`); - let messageNode = yield waitFor(() => findMessage(hud, text)); + let messageNode = await waitFor(() => findMessage(hud, text)); let frameLinksNode = messageNode.querySelectorAll(".stack-trace .frame-link"); is(frameLinksNode.length, 3, "The message does have the expected number of frames in the stacktrace"); for (let frameLinkNode of frameLinksNode) { - yield checkClickOnNode(hud, toolbox, frameLinkNode); + await checkClickOnNode(hud, toolbox, frameLinkNode); info("Selecting the console again"); - yield toolbox.selectTool("webconsole"); + await toolbox.selectTool("webconsole"); } } -function* checkClickOnNode(hud, toolbox, frameLinkNode) { +async function checkClickOnNode(hud, toolbox, frameLinkNode) { info("checking click on node location"); let onSourceInDebuggerOpened = once(hud.ui, "source-in-debugger-opened"); @@ -51,7 +51,7 @@ function* checkClickOnNode(hud, toolbox, frameLinkNode) { EventUtils.sendMouseEvent({ type: "click" }, frameLinkNode.querySelector(".frame-link-source")); - yield onSourceInDebuggerOpened; + await onSourceInDebuggerOpened; let url = frameLinkNode.getAttribute("data-url"); let dbg = toolbox.getPanel("jsdebugger"); diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_string.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_string.js index a84679b53d1c..bde67c6f5e2f 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_string.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_string.js @@ -7,8 +7,8 @@ const TEST_URI = "http://example.com/browser/devtools/client/webconsole/new-console-output/test/mochitest/test-console.html"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); info("console.log with a string argument"); let receivedMessages = waitForMessages({ @@ -19,16 +19,16 @@ add_task(function* () { }], }); - yield ContentTask.spawn(gBrowser.selectedBrowser, {}, function () { + await ContentTask.spawn(gBrowser.selectedBrowser, {}, function () { content.wrappedJSObject.stringLog(); }); - yield receivedMessages; + await receivedMessages; info("evaluating a string constant"); let jsterm = hud.jsterm; - yield jsterm.execute("\"string\\nconstant\""); - let msg = yield waitFor(() => findMessage(hud, "constant")); + await jsterm.execute("\"string\\nconstant\""); + let msg = await waitFor(() => findMessage(hud, "constant")); let body = msg.querySelector(".message-body"); // On the other hand, a string constant result should be quoted, but // newlines should be let through. diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_timestamps.js b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_timestamps.js index ed584f540ff3..4b8c43f8ab94 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_timestamps.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/browser_webconsole_timestamps.js @@ -19,36 +19,36 @@ const TEST_URI = `data:text/html;charset=utf-8, `; const PREF_MESSAGE_TIMESTAMP = "devtools.webconsole.timestampMessages"; -add_task(function* () { - let hud = yield openNewTabAndConsole(TEST_URI); +add_task(async function() { + let hud = await openNewTabAndConsole(TEST_URI); info("Call the log function defined in the test page"); - yield ContentTask.spawn(gBrowser.selectedBrowser, null, () => { + await ContentTask.spawn(gBrowser.selectedBrowser, null, () => { content.wrappedJSObject.logMessage(); }); - yield testPrefDefaults(hud); + await testPrefDefaults(hud); let observer = new PrefObserver(""); let toolbox = gDevTools.getToolbox(hud.target); - let optionsPanel = yield toolbox.selectTool("options"); - yield togglePref(optionsPanel, observer); + let optionsPanel = await toolbox.selectTool("options"); + await togglePref(optionsPanel, observer); observer.destroy(); - yield testChangedPref(hud); + await testChangedPref(hud); Services.prefs.clearUserPref(PREF_MESSAGE_TIMESTAMP); }); -function* testPrefDefaults(hud) { +async function testPrefDefaults(hud) { let prefValue = Services.prefs.getBoolPref(PREF_MESSAGE_TIMESTAMP); ok(!prefValue, "Messages should have no timestamp by default (pref check)"); - let message = yield waitFor(() => findMessage(hud, "simple text message")); + let message = await waitFor(() => findMessage(hud, "simple text message")); is(message.querySelectorAll(".timestamp").length, 0, "Messages should have no timestamp by default (element check)"); } -function* togglePref(panel, observer) { +async function togglePref(panel, observer) { info("Options panel opened"); info("Changing pref"); @@ -56,13 +56,13 @@ function* togglePref(panel, observer) { let checkbox = panel.panelDoc.getElementById("webconsole-timestamp-messages"); checkbox.click(); - yield prefChanged; + await prefChanged; } -function* testChangedPref(hud) { +async function testChangedPref(hud) { let prefValue = Services.prefs.getBoolPref(PREF_MESSAGE_TIMESTAMP); ok(prefValue, "Messages should have timestamps (pref check)"); - let message = yield waitFor(() => findMessage(hud, "simple text message")); + let message = await waitFor(() => findMessage(hud, "simple text message")); is(message.querySelectorAll(".timestamp").length, 1, "Messages should have timestamp (element check)"); } diff --git a/devtools/client/webconsole/new-console-output/test/mochitest/head.js b/devtools/client/webconsole/new-console-output/test/mochitest/head.js index fc9063232246..d83e91698435 100644 --- a/devtools/client/webconsole/new-console-output/test/mochitest/head.js +++ b/devtools/client/webconsole/new-console-output/test/mochitest/head.js @@ -42,16 +42,24 @@ registerCleanupFunction(function* () { * * @param string url * The URL for the tab to be opened. + * @param Boolean clearJstermHistory + * true (default) if the jsterm history should be cleared. * @return Promise * Resolves when the tab has been added, loaded and the toolbox has been opened. * Resolves to the toolbox. */ -var openNewTabAndConsole = Task.async(function* (url) { - let toolbox = yield openNewTabAndToolbox(url, "webconsole"); +async function openNewTabAndConsole(url, clearJstermHistory = true) { + let toolbox = await openNewTabAndToolbox(url, "webconsole"); let hud = toolbox.getCurrentPanel().hud; hud.jsterm._lazyVariablesView = false; + + if (clearJstermHistory) { + // Clearing history that might have been set in previous tests. + await hud.jsterm.clearHistory(); + } + return hud; -}); +} /** * Wait for messages in the web console output, resolving once they are received. @@ -220,18 +228,18 @@ function waitForNodeMutation(node, observeConfig = {}) { * The text to search for. This should be contained in the * message. The searching is done with @see findMessage. */ -function* testOpenInDebugger(hud, toolbox, text) { +async function testOpenInDebugger(hud, toolbox, text) { info(`Finding message for open-in-debugger test; text is "${text}"`); - let messageNode = yield waitFor(() => findMessage(hud, text)); + let messageNode = await waitFor(() => findMessage(hud, text)); let frameLinkNode = messageNode.querySelector(".message-location .frame-link"); ok(frameLinkNode, "The message does have a location link"); - yield checkClickOnNode(hud, toolbox, frameLinkNode); + await checkClickOnNode(hud, toolbox, frameLinkNode); } /** * Helper function for testOpenInDebugger. */ -function* checkClickOnNode(hud, toolbox, frameLinkNode) { +async function checkClickOnNode(hud, toolbox, frameLinkNode) { info("checking click on node location"); let url = frameLinkNode.getAttribute("data-url"); @@ -245,7 +253,7 @@ function* checkClickOnNode(hud, toolbox, frameLinkNode) { EventUtils.sendMouseEvent({ type: "click" }, frameLinkNode.querySelector(".frame-link-filename")); - yield onSourceInDebuggerOpened; + await onSourceInDebuggerOpened; let dbg = toolbox.getPanel("jsdebugger"); is( From afdc499baccb0f45c76428b0f42677a82d3a3f91 Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Fri, 20 Oct 2017 11:53:44 -0400 Subject: [PATCH 55/69] Bug 1410459 - [mozharness] Upgrade from optparse to argparse in config.py, r=jlund Upgrade from optparse to argparse: 1. 'type' field now needs to be callable (deleted if type was 'string' as that is the default) 2. 'extend' action re-implemented for argparse 3. 'callback' action no longer exists, re-implemented as a custom argparse action (only used in buildbase.py) 4. minor api changes, e.g 'add_option' -> 'add_argument' MozReview-Commit-ID: HcKowF13Da3 --HG-- extra : rebase_source : e5e8160d91263fb273f790dbda5e2c2b2e02eaf6 --- .../examples/action_config_script.py | 4 +- testing/mozharness/mozharness/base/config.py | 151 +++++++----------- .../mozharness/mozilla/building/buildbase.py | 62 ++++--- .../mozilla/l10n/multi_locale_build.py | 7 - .../mozharness/mozilla/testing/device.py | 2 - .../mozharness/mozilla/testing/talos.py | 3 +- .../mozharness/mozilla/testing/testbase.py | 1 - testing/mozharness/scripts/desktop_l10n.py | 15 +- .../mozharness/scripts/desktop_unittest.py | 8 - .../mozharness/scripts/fx_desktop_build.py | 3 +- testing/mozharness/scripts/marionette.py | 1 - .../scripts/merge_day/gecko_migration.py | 5 - testing/mozharness/scripts/mobile_l10n.py | 11 +- .../scripts/mobile_partner_repack.py | 10 +- .../mozharness/scripts/release/antivirus.py | 4 +- .../mozharness/scripts/release/beet_mover.py | 3 +- .../release/postrelease_version_bump.py | 8 - .../release/push-candidate-to-releases.py | 2 +- testing/mozharness/scripts/release/updates.py | 3 - testing/mozharness/test/test_base_config.py | 5 + 20 files changed, 105 insertions(+), 203 deletions(-) diff --git a/testing/mozharness/examples/action_config_script.py b/testing/mozharness/examples/action_config_script.py index e1135771e035..18bd037bc330 100755 --- a/testing/mozharness/examples/action_config_script.py +++ b/testing/mozharness/examples/action_config_script.py @@ -19,14 +19,12 @@ class ActionsConfigExample(BaseScript): ['--beverage', ], {"action": "store", "dest": "beverage", - "type": "string", "help": "Specify your beverage of choice", } ], [ ['--ship-style', ], {"action": "store", "dest": "ship_style", - "type": "choice", "choices": ["1", "2", "3"], "help": "Specify the type of ship", } @@ -34,7 +32,7 @@ class ActionsConfigExample(BaseScript): ['--long-sleep-time', ], {"action": "store", "dest": "long_sleep_time", - "type": "int", + "type": int, "help": "Specify how long to sleep", } ]] diff --git a/testing/mozharness/mozharness/base/config.py b/testing/mozharness/mozharness/base/config.py index 2e45c34f026e..ea291befc0ec 100644 --- a/testing/mozharness/mozharness/base/config.py +++ b/testing/mozharness/mozharness/base/config.py @@ -8,7 +8,7 @@ gone by. The config should be built from script-level defaults, overlaid by -config-file defaults, overlaid by command line options. +config-file defaults, overlaid by command line arguments. (For buildbot-analogues that would be factory-level defaults, builder-level defaults, and build request/scheduler settings.) @@ -24,8 +24,8 @@ TODO: these settings are set. """ +from argparse import ArgumentParser, Action from copy import deepcopy -from optparse import OptionParser, Option, OptionGroup import os import sys import urllib2 @@ -39,29 +39,12 @@ except ImportError: from mozharness.base.log import DEBUG, INFO, WARNING, ERROR, CRITICAL, FATAL -# optparse {{{1 -class ExtendedOptionParser(OptionParser): - """OptionParser, but with ExtendOption as the option_class. - """ - def __init__(self, **kwargs): - kwargs['option_class'] = ExtendOption - OptionParser.__init__(self, **kwargs) - - -class ExtendOption(Option): - """from http://docs.python.org/library/optparse.html?highlight=optparse#adding-new-actions""" - ACTIONS = Option.ACTIONS + ("extend",) - STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",) - TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",) - ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",) - - def take_action(self, action, dest, opt, value, values, parser): - if action == "extend": - lvalue = value.split(",") - values.ensure_value(dest, []).extend(lvalue) - else: - Option.take_action( - self, action, dest, opt, value, values, parser) +# argparse {{{1 +class ExtendAction(Action): + def __call__(self, parser, namespace, values, option_string=None): + items = getattr(namespace, self.dest) or [] + items.extend(values.split(',')) + setattr(namespace, self.dest, items) def make_immutable(item): @@ -213,7 +196,7 @@ class BaseConfig(object): volatile_config=None, option_args=None, require_config_file=False, append_env_variables_from_configs=False, - usage="usage: %prog [options]"): + usage=None): self._config = {} self.all_cfg_files_and_dicts = [] self.actions = [] @@ -248,16 +231,10 @@ class BaseConfig(object): ) self.set_config(initial_config) # Since initial_config_file is only set when running unit tests, - # if no option_args have been specified, then the parser will - # parse sys.argv which in this case would be the command line - # options specified to run the tests, e.g. nosetests -v. Clearly, - # the options passed to nosetests (such as -v) should not be - # interpreted by mozharness as mozharness options, so we specify - # a dummy command line with no options, so that the parser does - # not add anything from the test invocation command line - # arguments to the mozharness options. + # default option_args to [] to avoid parsing sys.argv (which are + # specified for nosetests). if option_args is None: - option_args=['dummy_mozharness_script_with_no_command_line_options.py'] + option_args = [] if config_options is None: config_options = [] self._create_config_parser(config_options, usage) @@ -268,36 +245,33 @@ class BaseConfig(object): return ReadOnlyDict(self._config) def _create_config_parser(self, config_options, usage): - self.config_parser = ExtendedOptionParser(usage=usage) - self.config_parser.add_option( - "--work-dir", action="store", dest="work_dir", - type="string", default="build", + self.config_parser = ArgumentParser(usage=usage) + self.config_parser.register('action', 'extend', ExtendAction) + self.config_parser.add_argument( + "--work-dir", default="build", help="Specify the work_dir (subdir of base_work_dir)" ) - self.config_parser.add_option( - "--base-work-dir", action="store", dest="base_work_dir", - type="string", default=os.getcwd(), + self.config_parser.add_argument( + "--base-work-dir", default=os.getcwd(), help="Specify the absolute path of the parent of the working directory" ) - self.config_parser.add_option( + self.config_parser.add_argument( "-c", "--config-file", "--cfg", action="extend", dest="config_files", - type="string", help="Specify a config file; can be repeated" + help="Specify a config file; can be repeated" ) - self.config_parser.add_option( + self.config_parser.add_argument( "-C", "--opt-config-file", "--opt-cfg", action="extend", - dest="opt_config_files", type="string", default=[], + dest="opt_config_files", default=[], help="Specify an optional config file, like --config-file but with no " "error if the file is missing; can be repeated" ) - self.config_parser.add_option( + self.config_parser.add_argument( "--dump-config", action="store_true", - dest="dump_config", help="List and dump the config generated from this run to " "a JSON file." ) - self.config_parser.add_option( + self.config_parser.add_argument( "--dump-config-hierarchy", action="store_true", - dest="dump_config_hierarchy", help="Like --dump-config but will list and dump which config " "files were used making up the config and specify their own " "keys/values that were not overwritten by another cfg -- " @@ -305,75 +279,69 @@ class BaseConfig(object): ) # Logging - log_option_group = OptionGroup(self.config_parser, "Logging") - log_option_group.add_option( - "--log-level", action="store", - type="choice", dest="log_level", default=INFO, + log_option_group = self.config_parser.add_argument_group("Logging") + log_option_group.add_argument( + "--log-level", default=INFO, choices=[DEBUG, INFO, WARNING, ERROR, CRITICAL, FATAL], help="Set log level (debug|info|warning|error|critical|fatal)" ) - log_option_group.add_option( + log_option_group.add_argument( "-q", "--quiet", action="store_false", dest="log_to_console", default=True, help="Don't log to the console" ) - log_option_group.add_option( - "--append-to-log", action="store_true", - dest="append_to_log", default=False, + log_option_group.add_argument( + "--append-to-log", action="store_true", default=False, help="Append to the log" ) - log_option_group.add_option( + log_option_group.add_argument( "--multi-log", action="store_const", const="multi", dest="log_type", help="Log using MultiFileLogger" ) - log_option_group.add_option( + log_option_group.add_argument( "--simple-log", action="store_const", const="simple", dest="log_type", help="Log using SimpleFileLogger" ) - self.config_parser.add_option_group(log_option_group) # Actions - action_option_group = OptionGroup( - self.config_parser, "Actions", - "Use these options to list or enable/disable actions." - ) - action_option_group.add_option( + action_option_group = self.config_parser.add_argument_group( + "Actions", "Use these options to list or enable/disable actions.") + action_option_group.add_argument( "--list-actions", action="store_true", - dest="list_actions", help="List all available actions, then exit" ) - action_option_group.add_option( + action_option_group.add_argument( "--add-action", action="extend", dest="add_actions", metavar="ACTIONS", help="Add action %s to the list of actions" % self.all_actions ) - action_option_group.add_option( + action_option_group.add_argument( "--no-action", action="extend", dest="no_actions", metavar="ACTIONS", help="Don't perform action" ) for action in self.all_actions: - action_option_group.add_option( + action_option_group.add_argument( "--%s" % action, action="append_const", dest="actions", const=action, help="Add %s to the limited list of actions" % action ) - action_option_group.add_option( + action_option_group.add_argument( "--no-%s" % action, action="append_const", dest="no_actions", const=action, help="Remove %s from the list of actions to perform" % action ) - self.config_parser.add_option_group(action_option_group) + # Child-specified options # TODO error checking for overlapping options if config_options: for option in config_options: - self.config_parser.add_option(*option[0], **option[1]) + self.config_parser.add_argument(*option[0], **option[1]) # Initial-config-specified options config_options = self._config.get('config_options', None) if config_options: for option in config_options: - self.config_parser.add_option(*option[0], **option[1]) + self.config_parser.add_argument(*option[0], **option[1]) def set_config(self, config, overwrite=False): """This is probably doable some other way.""" @@ -414,15 +382,15 @@ class BaseConfig(object): print " " + ("*" if a in self.default_actions else " "), a raise SystemExit(0) - def get_cfgs_from_files(self, all_config_files, options): + def get_cfgs_from_files(self, all_config_files, args): """Returns the configuration derived from the list of configuration files. The result is represented as a list of `(filename, config_dict)` tuples; they will be combined with keys in later dictionaries taking precedence over earlier. `all_config_files` is all files specified with `--config-file` and - `--opt-config-file`; `options` is the argparse options object giving - access to any other command-line options. + `--opt-config-file`; `args` is the argparse Namespace object giving + access to any other command-line arguments. This function is also responsible for downloading any configuration files specified by URL. It uses ``parse_config_file`` in this module @@ -445,7 +413,7 @@ class BaseConfig(object): else: all_cfg_files_and_dicts.append((cf, parse_config_file(cf))) except Exception: - if cf in options.opt_config_files: + if cf in args.opt_config_files: print( "WARNING: optional config file not found %s" % cf ) @@ -455,19 +423,17 @@ class BaseConfig(object): def parse_args(self, args=None): """Parse command line arguments in a generic way. - Return the parser object after adding the basic options, so + Return the parser object after adding the basic arguments, so child objects can manipulate it. """ self.command_line = ' '.join(sys.argv) if args is None: args = sys.argv[1:] - (options, args) = self.config_parser.parse_args(args) + args = self.config_parser.parse_args(args) - defaults = self.config_parser.defaults.copy() - - if not options.config_files: + if not args.config_files: if self.require_config_file: - if options.list_actions: + if args.list_actions: self.list_actions() print("Required config file not set! (use --config-file option)") raise SystemExit(-1) @@ -478,7 +444,7 @@ class BaseConfig(object): # let's store this to self for things like --interpret-config-files self.all_cfg_files_and_dicts.extend(self.get_cfgs_from_files( # append opt_config to allow them to overwrite previous configs - options.config_files + options.opt_config_files, options=options + args.config_files + args.opt_config_files, args )) config = {} if self.append_env_variables_from_configs: @@ -499,33 +465,32 @@ class BaseConfig(object): # as the keys/values that make up that instance. Ultimately, # this becomes self.config during BaseScript's init self.set_config(config) - for key in defaults.keys(): - value = getattr(options, key) + + for key, value in vars(args).items(): if value is None: continue # Don't override config_file defaults with config_parser defaults - if key in defaults and value == defaults[key] and key in self._config: + if value == self.config_parser.get_default(key) and key in self._config: continue self._config[key] = value # The idea behind the volatile_config is we don't want to save this # info over multiple runs. This defaults to the action-specific - # config options, but can be anything. + # config args, but can be anything. for key in self.volatile_config.keys(): if self._config.get(key) is not None: self.volatile_config[key] = self._config[key] del(self._config[key]) self.update_actions() - if options.list_actions: + if args.list_actions: self.list_actions() # Keep? This is for saving the volatile config in the dump_config self._config['volatile_config'] = self.volatile_config - self.options = options self.args = args - return (self.options, self.args) + return self.args def update_actions(self): """ Update actions after reading in config. @@ -535,7 +500,7 @@ class BaseConfig(object): First, if default_actions is specified in the config, set our default actions even if the script specifies other default actions. - Without any other action-specific options, run with default actions. + Without any other action-specific arguments, run with default actions. If we specify --ACTION or --only-ACTION once or multiple times, we want to override the default_actions list with the one(s) we list. diff --git a/testing/mozharness/mozharness/mozilla/building/buildbase.py b/testing/mozharness/mozharness/mozilla/building/buildbase.py index abb8e0d41e14..0338349f89fd 100755 --- a/testing/mozharness/mozharness/mozilla/building/buildbase.py +++ b/testing/mozharness/mozharness/mozilla/building/buildbase.py @@ -20,6 +20,7 @@ import uuid import copy import glob import shlex +from argparse import Action from itertools import chain # import the power of mozharness ;) @@ -327,7 +328,7 @@ class BuildingConfig(BaseConfig): # noinspection PyUnusedLocal -class BuildOptionParser(object): +class BuildOptionParser(Action): # TODO add nosetests for this class platform = None bits = None @@ -388,6 +389,11 @@ class BuildOptionParser(object): build_pool_cfg_file = 'builds/build_pool_specifics.py' branch_cfg_file = 'builds/branch_specifics.py' + def __call__(self, parser, namespace, values, option_string=None): + func = getattr(self, 'set_{}'.format(self.dest)) + func(self, namespace, values) + + @classmethod def _query_pltfrm_and_bits(cls, target_option, options): """ determine platform and bits @@ -439,11 +445,11 @@ class BuildOptionParser(object): return cls.bits, cls.platform @classmethod - def find_variant_cfg_path(cls, opt, value, parser): + def find_variant_cfg_path(cls, opt, value, namespace): valid_variant_cfg_path = None # first let's see if we were given a valid short-name if cls.build_variants.get(value): - bits, pltfrm = cls._query_pltfrm_and_bits(opt, parser.values) + bits, pltfrm = cls._query_pltfrm_and_bits(opt, namespace) prospective_cfg_path = cls.build_variants[value] % (pltfrm, bits) else: # this is either an incomplete path or an invalid key in @@ -465,14 +471,14 @@ class BuildOptionParser(object): return valid_variant_cfg_path, prospective_cfg_path @classmethod - def set_build_variant(cls, option, opt, value, parser): + def set_build_variant(cls, option, namespace, value): """ sets an extra config file. This is done by either taking an existing filepath or by taking a valid shortname coupled with known platform/bits. """ valid_variant_cfg_path, prospective_cfg_path = cls.find_variant_cfg_path( - '--custom-build-variant-cfg', value, parser) + '--custom-build-variant-cfg', value, namespace) if not valid_variant_cfg_path: # either the value was an indeterminable path or an invalid short @@ -485,32 +491,32 @@ class BuildOptionParser(object): prospective_cfg_path, str(cls.build_variants.keys()), str(cls.config_file_search_path))) - parser.values.config_files.append(valid_variant_cfg_path) - setattr(parser.values, option.dest, value) # the pool + namespace.config_files.append(valid_variant_cfg_path) + setattr(namespace, option.dest, value) # the pool @classmethod - def set_build_pool(cls, option, opt, value, parser): + def set_build_pool(cls, option, namespace, value): # first let's add the build pool file where there may be pool # specific keys/values. Then let's store the pool name - parser.values.config_files.append(cls.build_pool_cfg_file) - setattr(parser.values, option.dest, value) # the pool + namespace.config_files.append(cls.build_pool_cfg_file) + setattr(namespace, option.dest, value) # the pool @classmethod - def set_build_branch(cls, option, opt, value, parser): + def set_branch(cls, option, namespace, value): # first let's add the branch_specific file where there may be branch # specific keys/values. Then let's store the branch name we are using - parser.values.config_files.append(cls.branch_cfg_file) - setattr(parser.values, option.dest, value) # the branch name + namespace.config_files.append(cls.branch_cfg_file) + setattr(namespace, option.dest, value) # the branch name @classmethod - def set_platform(cls, option, opt, value, parser): + def set_platform(cls, option, namespace, value): cls.platform = value - setattr(parser.values, option.dest, value) + setattr(namespace, option.dest, value) @classmethod - def set_bits(cls, option, opt, value, parser): + def set_bits(cls, option, namespace, value): cls.bits = value - setattr(parser.values, option.dest, value) + setattr(namespace, option.dest, value) # this global depends on BuildOptionParser and therefore can not go at the @@ -524,41 +530,31 @@ BUILD_BASE_CONFIG_OPTIONS = [ "infrastructure, use this option. It ignores actions" "that are not needed and adds config checks."}], [['--platform'], { - "action": "callback", - "callback": BuildOptionParser.set_platform, - "type": "string", + "action": BuildOptionParser, "dest": "platform", "help": "Sets the platform we are running this against" " valid values: 'windows', 'mac', 'linux'"}], [['--bits'], { - "action": "callback", - "callback": BuildOptionParser.set_bits, - "type": "string", + "action": BuildOptionParser, "dest": "bits", "help": "Sets which bits we are building this against" " valid values: '32', '64'"}], [['--custom-build-variant-cfg'], { - "action": "callback", - "callback": BuildOptionParser.set_build_variant, - "type": "string", + "action": BuildOptionParser, "dest": "build_variant", "help": "Sets the build type and will determine appropriate" " additional config to use. Either pass a config path" " or use a valid shortname from: " "%s" % (BuildOptionParser.build_variants.keys(),)}], [['--build-pool'], { - "action": "callback", - "callback": BuildOptionParser.set_build_pool, - "type": "string", + "action": BuildOptionParser, "dest": "build_pool", "help": "This will update the config with specific pool" " environment keys/values. The dicts for this are" " in %s\nValid values: staging or" " production" % ('builds/build_pool_specifics.py',)}], [['--branch'], { - "action": "callback", - "callback": BuildOptionParser.set_build_branch, - "type": "string", + "action": BuildOptionParser, "dest": "branch", "help": "This sets the branch we will be building this for." " If this branch is in branch_specifics.py, update our" @@ -568,7 +564,7 @@ BUILD_BASE_CONFIG_OPTIONS = [ )}], [['--scm-level'], { "action": "store", - "type": "int", + "type": int, "dest": "scm_level", "default": 1, "help": "This sets the SCM level for the branch being built." diff --git a/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py b/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py index aa476ce7941f..f82db3ace6ff 100755 --- a/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py +++ b/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py @@ -31,14 +31,12 @@ class MultiLocaleBuild(LocalesMixin, MercurialScript): ["--locale"], {"action": "extend", "dest": "locales", - "type": "string", "help": "Specify the locale(s) to repack" } ], [ ["--objdir"], {"action": "store", "dest": "objdir", - "type": "string", "default": "objdir", "help": "Specify the objdir" } @@ -46,35 +44,30 @@ class MultiLocaleBuild(LocalesMixin, MercurialScript): ["--l10n-base"], {"action": "store", "dest": "hg_l10n_base", - "type": "string", "help": "Specify the L10n repo base directory" } ], [ ["--l10n-tag"], {"action": "store", "dest": "hg_l10n_tag", - "type": "string", "help": "Specify the L10n tag" } ], [ ["--tag-override"], {"action": "store", "dest": "tag_override", - "type": "string", "help": "Override the tags set for all repos" } ], [ ["--user-repo-override"], {"action": "store", "dest": "user_repo_override", - "type": "string", "help": "Override the user repo path for all repos" } ], [ ["--l10n-dir"], {"action": "store", "dest": "l10n_dir", - "type": "string", "default": "l10n", "help": "Specify the l10n dir name" } diff --git a/testing/mozharness/mozharness/mozilla/testing/device.py b/testing/mozharness/mozharness/mozilla/testing/device.py index 12c7a55ae18b..900b9f6c2c78 100644 --- a/testing/mozharness/mozharness/mozilla/testing/device.py +++ b/testing/mozharness/mozharness/mozilla/testing/device.py @@ -440,7 +440,6 @@ device_config_options = [[ ], [ ["--device-protocol"], {"action": "store", - "type": "choice", "dest": "device_protocol", "choices": DEVICE_PROTOCOL_DICT.keys(), "help": "Specify the device communication protocol." @@ -450,7 +449,6 @@ device_config_options = [[ # A bit useless atm, but we can add new device types as we add support # for them. {"action": "store", - "type": "choice", "choices": ["non-tegra", "tegra250"], "default": "non-tegra", "dest": "device_type", diff --git a/testing/mozharness/mozharness/mozilla/testing/talos.py b/testing/mozharness/mozharness/mozilla/testing/talos.py index be0c51e6bcd3..982239570f4b 100755 --- a/testing/mozharness/mozharness/mozilla/testing/talos.py +++ b/testing/mozharness/mozharness/mozilla/testing/talos.py @@ -119,7 +119,6 @@ class Talos(TestingMixin, MercurialScript, BlobUploadMixin, TooltoolMixin, [["--system-bits"], {"action": "store", "dest": "system_bits", - "type": "choice", "default": "32", "choices": ['32', '64'], "help": "Testing 32 or 64 (for talos json plugins)" @@ -138,7 +137,7 @@ class Talos(TestingMixin, MercurialScript, BlobUploadMixin, TooltoolMixin, }], [["--geckoProfileInterval"], { "dest": "gecko_profile_interval", - "type": "int", + "type": int, "default": 0, "help": "The interval between samples taken by the profiler (milliseconds)" }], diff --git a/testing/mozharness/mozharness/mozilla/testing/testbase.py b/testing/mozharness/mozharness/mozilla/testing/testbase.py index be5e9256858e..efcb7668ea2b 100755 --- a/testing/mozharness/mozharness/mozilla/testing/testbase.py +++ b/testing/mozharness/mozharness/mozilla/testing/testbase.py @@ -95,7 +95,6 @@ testing_config_options = [ [["--download-symbols"], {"action": "store", "dest": "download_symbols", - "type": "choice", "choices": ['ondemand', 'true'], "help": "Download and extract crash reporter symbols.", }], diff --git a/testing/mozharness/scripts/desktop_l10n.py b/testing/mozharness/scripts/desktop_l10n.py index d65af6b33776..1bea97415bbd 100755 --- a/testing/mozharness/scripts/desktop_l10n.py +++ b/testing/mozharness/scripts/desktop_l10n.py @@ -79,81 +79,70 @@ class DesktopSingleLocale(LocalesMixin, ReleaseMixin, MockMixin, BuildbotMixin, ['--balrog-config', ], {"action": "extend", "dest": "config_files", - "type": "string", "help": "Specify the balrog configuration file"} ], [ ['--branch-config', ], {"action": "extend", "dest": "config_files", - "type": "string", "help": "Specify the branch configuration file"} ], [ ['--environment-config', ], {"action": "extend", "dest": "config_files", - "type": "string", "help": "Specify the environment (staging, production, ...) configuration file"} ], [ ['--platform-config', ], {"action": "extend", "dest": "config_files", - "type": "string", "help": "Specify the platform configuration file"} ], [ ['--locale', ], {"action": "extend", "dest": "locales", - "type": "string", "help": "Specify the locale(s) to sign and update. Optionally pass" " revision separated by colon, en-GB:default."} ], [ ['--locales-file', ], {"action": "store", "dest": "locales_file", - "type": "string", "help": "Specify a file to determine which locales to sign and update"} ], [ ['--tag-override', ], {"action": "store", "dest": "tag_override", - "type": "string", "help": "Override the tags set for all repos"} ], [ ['--revision', ], {"action": "store", "dest": "revision", - "type": "string", "help": "Override the gecko revision to use (otherwise use buildbot supplied" " value, or en-US revision) "} ], [ ['--user-repo-override', ], {"action": "store", "dest": "user_repo_override", - "type": "string", "help": "Override the user repo path for all repos"} ], [ ['--release-config-file', ], {"action": "store", "dest": "release_config_file", - "type": "string", "help": "Specify the release config file to use"} ], [ ['--this-chunk', ], {"action": "store", "dest": "this_locale_chunk", - "type": "int", + "type": int, "help": "Specify which chunk of locales to run"} ], [ ['--total-chunks', ], {"action": "store", "dest": "total_locale_chunks", - "type": "int", + "type": int, "help": "Specify the total number of chunks of locales"} ], [ ['--en-us-installer-url', ], {"action": "store", "dest": "en_us_installer_url", - "type": "string", "help": "Specify the url of the en-us binary"} ], [ ["--disable-mock"], { diff --git a/testing/mozharness/scripts/desktop_unittest.py b/testing/mozharness/scripts/desktop_unittest.py index 6f1b4a05eb57..6c02bf426747 100755 --- a/testing/mozharness/scripts/desktop_unittest.py +++ b/testing/mozharness/scripts/desktop_unittest.py @@ -53,7 +53,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--mochitest-suite', ], { "action": "extend", "dest": "specified_mochitest_suites", - "type": "string", "help": "Specify which mochi suite to run. " "Suites are defined in the config file.\n" "Examples: 'all', 'plain1', 'plain5', 'chrome', or 'a11y'"} @@ -61,7 +60,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--reftest-suite', ], { "action": "extend", "dest": "specified_reftest_suites", - "type": "string", "help": "Specify which reftest suite to run. " "Suites are defined in the config file.\n" "Examples: 'all', 'crashplan', or 'jsreftest'"} @@ -69,7 +67,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--xpcshell-suite', ], { "action": "extend", "dest": "specified_xpcshell_suites", - "type": "string", "help": "Specify which xpcshell suite to run. " "Suites are defined in the config file\n." "Examples: 'xpcshell'"} @@ -77,7 +74,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--cppunittest-suite', ], { "action": "extend", "dest": "specified_cppunittest_suites", - "type": "string", "help": "Specify which cpp unittest suite to run. " "Suites are defined in the config file\n." "Examples: 'cppunittest'"} @@ -85,7 +81,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--gtest-suite', ], { "action": "extend", "dest": "specified_gtest_suites", - "type": "string", "help": "Specify which gtest suite to run. " "Suites are defined in the config file\n." "Examples: 'gtest'"} @@ -93,7 +88,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--jittest-suite', ], { "action": "extend", "dest": "specified_jittest_suites", - "type": "string", "help": "Specify which jit-test suite to run. " "Suites are defined in the config file\n." "Examples: 'jittest'"} @@ -101,7 +95,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--mozbase-suite', ], { "action": "extend", "dest": "specified_mozbase_suites", - "type": "string", "help": "Specify which mozbase suite to run. " "Suites are defined in the config file\n." "Examples: 'mozbase'"} @@ -109,7 +102,6 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--mozmill-suite', ], { "action": "extend", "dest": "specified_mozmill_suites", - "type": "string", "help": "Specify which mozmill suite to run. " "Suites are defined in the config file\n." "Examples: 'mozmill'"} diff --git a/testing/mozharness/scripts/fx_desktop_build.py b/testing/mozharness/scripts/fx_desktop_build.py index 07e1717581b6..7ff32cc7ad9b 100755 --- a/testing/mozharness/scripts/fx_desktop_build.py +++ b/testing/mozharness/scripts/fx_desktop_build.py @@ -17,6 +17,7 @@ import copy import pprint import sys import os +from argparse import Namespace # load modules from parent dir sys.path.insert(1, os.path.dirname(sys.path[0])) @@ -168,7 +169,7 @@ class FxDesktopBuild(BuildScript, TryToolsMixin, object): variant_cfg_path, _ = BuildOptionParser.find_variant_cfg_path( '--custom-build-variant-cfg', variant, - rw_config.config_parser + Namespace(**rw_config._config) ) if not variant_cfg_path: self.fatal('Could not find appropriate config file for variant %s' % variant) diff --git a/testing/mozharness/scripts/marionette.py b/testing/mozharness/scripts/marionette.py index 6363f44cc294..9eddcda28bc2 100755 --- a/testing/mozharness/scripts/marionette.py +++ b/testing/mozharness/scripts/marionette.py @@ -60,7 +60,6 @@ class MarionetteTest(TestingMixin, MercurialScript, BlobUploadMixin, TransferMix ], [ ["--emulator"], {"action": "store", - "type": "choice", "choices": ['arm', 'x86'], "dest": "emulator", "default": None, diff --git a/testing/mozharness/scripts/merge_day/gecko_migration.py b/testing/mozharness/scripts/merge_day/gecko_migration.py index 5462851d0fe6..16ec4ac63c49 100755 --- a/testing/mozharness/scripts/merge_day/gecko_migration.py +++ b/testing/mozharness/scripts/merge_day/gecko_migration.py @@ -42,32 +42,27 @@ class GeckoMigration(MercurialScript, BalrogMixin, VirtualenvMixin, [['--hg-user', ], { "action": "store", "dest": "hg_user", - "type": "string", "default": "ffxbld ", "help": "Specify what user to use to commit to hg.", }], [['--balrog-api-root', ], { "action": "store", "dest": "balrog_api_root", - "type": "string", "help": "Specify Balrog API root URL.", }], [['--balrog-username', ], { "action": "store", "dest": "balrog_username", - "type": "string", "help": "Specify what user to connect to Balrog with.", }], [['--balrog-credentials-file', ], { "action": "store", "dest": "balrog_credentials_file", - "type": "string", "help": "The file containing the Balrog credentials.", }], [['--remove-locale', ], { "action": "extend", "dest": "remove_locales", - "type": "string", "help": "Comma separated list of locales to remove from the 'to' repo.", }], ] diff --git a/testing/mozharness/scripts/mobile_l10n.py b/testing/mozharness/scripts/mobile_l10n.py index 168a29acf95b..87a0c237c209 100755 --- a/testing/mozharness/scripts/mobile_l10n.py +++ b/testing/mozharness/scripts/mobile_l10n.py @@ -52,42 +52,36 @@ class MobileSingleLocale(MockMixin, LocalesMixin, ReleaseMixin, ['--locale', ], {"action": "extend", "dest": "locales", - "type": "string", "help": "Specify the locale(s) to sign and update" } ], [ ['--locales-file', ], {"action": "store", "dest": "locales_file", - "type": "string", "help": "Specify a file to determine which locales to sign and update" } ], [ ['--tag-override', ], {"action": "store", "dest": "tag_override", - "type": "string", "help": "Override the tags set for all repos" } ], [ ['--user-repo-override', ], {"action": "store", "dest": "user_repo_override", - "type": "string", "help": "Override the user repo path for all repos" } ], [ ['--release-config-file', ], {"action": "store", "dest": "release_config_file", - "type": "string", "help": "Specify the release config file to use" } ], [ ['--key-alias', ], {"action": "store", "dest": "key_alias", - "type": "choice", "default": "nightly", "choices": ["nightly", "release"], "help": "Specify the signing key alias" @@ -96,14 +90,14 @@ class MobileSingleLocale(MockMixin, LocalesMixin, ReleaseMixin, ['--this-chunk', ], {"action": "store", "dest": "this_locale_chunk", - "type": "int", + "type": int, "help": "Specify which chunk of locales to run" } ], [ ['--total-chunks', ], {"action": "store", "dest": "total_locale_chunks", - "type": "int", + "type": int, "help": "Specify the total number of chunks of locales" } ], [ @@ -116,7 +110,6 @@ class MobileSingleLocale(MockMixin, LocalesMixin, ReleaseMixin, ['--revision', ], {"action": "store", "dest": "revision", - "type": "string", "help": "Override the gecko revision to use (otherwise use buildbot supplied" " value, or en-US revision) "} ]] diff --git a/testing/mozharness/scripts/mobile_partner_repack.py b/testing/mozharness/scripts/mobile_partner_repack.py index d138eba7fd4c..8b08670e875c 100755 --- a/testing/mozharness/scripts/mobile_partner_repack.py +++ b/testing/mozharness/scripts/mobile_partner_repack.py @@ -33,35 +33,30 @@ class MobilePartnerRepack(LocalesMixin, ReleaseMixin, MobileSigningMixin, ['--locale', ], {"action": "extend", "dest": "locales", - "type": "string", "help": "Specify the locale(s) to repack" } ], [ ['--partner', ], {"action": "extend", "dest": "partners", - "type": "string", "help": "Specify the partner(s) to repack" } ], [ ['--locales-file', ], {"action": "store", "dest": "locales_file", - "type": "string", "help": "Specify a json file to determine which locales to repack" } ], [ ['--tag-override', ], {"action": "store", "dest": "tag_override", - "type": "string", "help": "Override the tags set for all repos" } ], [ ['--platform', ], {"action": "extend", "dest": "platforms", - "type": "choice", "choices": SUPPORTED_PLATFORMS, "help": "Specify the platform(s) to repack" } @@ -69,28 +64,25 @@ class MobilePartnerRepack(LocalesMixin, ReleaseMixin, MobileSigningMixin, ['--user-repo-override', ], {"action": "store", "dest": "user_repo_override", - "type": "string", "help": "Override the user repo path for all repos" } ], [ ['--release-config-file', ], {"action": "store", "dest": "release_config_file", - "type": "string", "help": "Specify the release config file to use" } ], [ ['--version', ], {"action": "store", "dest": "version", - "type": "string", "help": "Specify the current version" } ], [ ['--buildnum', ], {"action": "store", "dest": "buildnum", - "type": "int", + "type": int, "default": 1, "metavar": "INT", "help": "Specify the current release build num (e.g. build1, build2)" diff --git a/testing/mozharness/scripts/release/antivirus.py b/testing/mozharness/scripts/release/antivirus.py index 2c5791afbe30..6e548f469907 100644 --- a/testing/mozharness/scripts/release/antivirus.py +++ b/testing/mozharness/scripts/release/antivirus.py @@ -36,13 +36,13 @@ class AntivirusScan(BaseScript, VirtualenvMixin): [["-d", "--download-parallelization"], { "dest": "download_parallelization", "default": 6, - "type": "int", + "type": int, "help": "Number of concurrent file downloads", }], [["-s", "--scan-parallelization"], { "dest": "scan_parallelization", "default": 4, - "type": "int", + "type": int, "help": "Number of concurrent file scans", }], [["--tools-repo"], { diff --git a/testing/mozharness/scripts/release/beet_mover.py b/testing/mozharness/scripts/release/beet_mover.py index 2115ca9c90d8..e8e822c61297 100755 --- a/testing/mozharness/scripts/release/beet_mover.py +++ b/testing/mozharness/scripts/release/beet_mover.py @@ -41,7 +41,6 @@ CONFIG_OPTIONS = [ [['--locale', ], { "action": "extend", "dest": "locales", - "type": "string", "help": "Specify the locale(s) to upload."}], [["--platform"], { "dest": "platform", @@ -88,7 +87,7 @@ CONFIG_OPTIONS = [ [["-s", "--scan-parallelization"], { "dest": "scan_parallelization", "default": 4, - "type": "int", + "type": int, "help": "Number of concurrent file scans", }], ] diff --git a/testing/mozharness/scripts/release/postrelease_version_bump.py b/testing/mozharness/scripts/release/postrelease_version_bump.py index b06aca9f4187..0e093880d3b1 100644 --- a/testing/mozharness/scripts/release/postrelease_version_bump.py +++ b/testing/mozharness/scripts/release/postrelease_version_bump.py @@ -27,50 +27,42 @@ class PostReleaseVersionBump(MercurialScript, BuildbotMixin, [['--hg-user', ], { "action": "store", "dest": "hg_user", - "type": "string", "default": "ffxbld ", "help": "Specify what user to use to commit to hg.", }], [['--next-version', ], { "action": "store", "dest": "next_version", - "type": "string", "help": "Next version used in version bump", }], [['--ssh-user', ], { "action": "store", "dest": "ssh_user", - "type": "string", "help": "SSH username with hg.mozilla.org permissions", }], [['--ssh-key', ], { "action": "store", "dest": "ssh_key", - "type": "string", "help": "Path to SSH key.", }], [['--product', ], { "action": "store", "dest": "product", - "type": "string", "help": "Product name", }], [['--version', ], { "action": "store", "dest": "version", - "type": "string", "help": "Version", }], [['--build-number', ], { "action": "store", "dest": "build_number", - "type": "string", "help": "Build number", }], [['--revision', ], { "action": "store", "dest": "revision", - "type": "string", "help": "HG revision to tag", }], ] diff --git a/testing/mozharness/scripts/release/push-candidate-to-releases.py b/testing/mozharness/scripts/release/push-candidate-to-releases.py index 0a8791e070ca..0107e447acae 100644 --- a/testing/mozharness/scripts/release/push-candidate-to-releases.py +++ b/testing/mozharness/scripts/release/push-candidate-to-releases.py @@ -58,7 +58,7 @@ class ReleasePusher(BaseScript, VirtualenvMixin): [["-j", "--parallelization"], { "dest": "parallelization", "default": 20, - "type": "int", + "type": int, "help": "Number of copy requests to run concurrently", }], ] + virtualenv_config_options diff --git a/testing/mozharness/scripts/release/updates.py b/testing/mozharness/scripts/release/updates.py index ef11db3c2c39..0e6e89c8a1b0 100755 --- a/testing/mozharness/scripts/release/updates.py +++ b/testing/mozharness/scripts/release/updates.py @@ -35,20 +35,17 @@ class UpdatesBumper(MercurialScript, BuildbotMixin, [['--hg-user', ], { "action": "store", "dest": "hg_user", - "type": "string", "default": "ffxbld ", "help": "Specify what user to use to commit to hg.", }], [['--ssh-user', ], { "action": "store", "dest": "ssh_user", - "type": "string", "help": "SSH username with hg.mozilla.org permissions", }], [['--ssh-key', ], { "action": "store", "dest": "ssh_key", - "type": "string", "help": "Path to SSH key.", }], ] diff --git a/testing/mozharness/test/test_base_config.py b/testing/mozharness/test/test_base_config.py index 42ec7a641dd8..b10eabeca705 100644 --- a/testing/mozharness/test/test_base_config.py +++ b/testing/mozharness/test/test_base_config.py @@ -250,6 +250,7 @@ class TestReadOnlyDict(unittest.TestCase): class TestActions(unittest.TestCase): all_actions = ['a', 'b', 'c', 'd', 'e'] + config_options = [[['args'], {'nargs': '*'}]] default_actions = ['b', 'c', 'd'] def test_verify_actions(self): @@ -275,6 +276,7 @@ class TestActions(unittest.TestCase): def test_no_action1(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, + config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--no-action', 'a']) self.assertEqual(self.default_actions, c.get_actions(), @@ -283,6 +285,7 @@ class TestActions(unittest.TestCase): def test_no_action2(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, + config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--no-c']) self.assertEqual(['b', 'd'], c.get_actions(), @@ -291,6 +294,7 @@ class TestActions(unittest.TestCase): def test_add_action(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, + config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--add-action', 'e']) self.assertEqual(['b', 'c', 'd', 'e'], c.get_actions(), @@ -299,6 +303,7 @@ class TestActions(unittest.TestCase): def test_only_action(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, + config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--a', '--e']) self.assertEqual(['a', 'e'], c.get_actions(), From 9305f47839e91543d927940f7c5d931bc1539269 Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Thu, 26 Oct 2017 10:13:53 -0400 Subject: [PATCH 56/69] Bug 1411776 - [mozdebug] Fix 'module has no attribute' error when using --debugger, r=jmaher This fixes a regression from bug 1397849. MozReview-Commit-ID: 4JrnkYVwTo --HG-- extra : rebase_source : 70d37791a35fd2f6877ad1556ca9cd92804f52e0 --- testing/mozbase/mozdebug/mozdebug/__init__.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/mozbase/mozdebug/mozdebug/__init__.py b/testing/mozbase/mozdebug/mozdebug/__init__.py index 7921b852cc82..add9214a6f42 100644 --- a/testing/mozbase/mozdebug/mozdebug/__init__.py +++ b/testing/mozbase/mozdebug/mozdebug/__init__.py @@ -29,4 +29,4 @@ debugger-specific arguments: """ from __future__ import absolute_import -from mozdebug import * +from .mozdebug import * From 0328fc03b2b9463977cdc90dcde57c1add5b47d4 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Thu, 26 Oct 2017 17:39:25 +0200 Subject: [PATCH 57/69] Backed out changeset 6f205bfdd139 (bug 1411796) for failing e.g. taskgraph's taskcluster/taskgraph/test/test_generator.py::TestGenerator::test_full_task_graph. r=backout on a CLOSED TREE --- taskcluster/taskgraph/generator.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/taskcluster/taskgraph/generator.py b/taskcluster/taskgraph/generator.py index 487dc00bd094..7c231d6b769f 100644 --- a/taskcluster/taskgraph/generator.py +++ b/taskcluster/taskgraph/generator.py @@ -291,9 +291,6 @@ class TaskGraphGenerator(object): return self._run_results[name] def verify_parameters(self, parameters): - if not parameters.strict: - return - parameters_dict = dict(**parameters) verify_docs( filename="parameters.rst", From 2a15cd599083f3e6e4871c08f14d1f2a12619fbb Mon Sep 17 00:00:00 2001 From: Andi-Bogdan Postelnicu Date: Thu, 26 Oct 2017 17:50:26 +0300 Subject: [PATCH 58/69] Bug 1411615 - make nsScannerIterator a trivial type in order to use memset. r=hsivonen MozReview-Commit-ID: 2YpZE8Rryyl --HG-- extra : rebase_source : 2f8beb81d40d73caaf70f935cbbcb1fbfb2da535 --- parser/htmlparser/nsScannerString.h | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/parser/htmlparser/nsScannerString.h b/parser/htmlparser/nsScannerString.h index d2b4800675eb..b3cb82002b1d 100644 --- a/parser/htmlparser/nsScannerString.h +++ b/parser/htmlparser/nsScannerString.h @@ -21,7 +21,7 @@ * to live in xpcom/string. Now that nsAString is limited to representing * only single fragment strings, nsSlidingString can no longer be used. * - * An advantage to this design is that it does not employ any virtual + * An advantage to this design is that it does not employ any virtual * functions. * * This file uses SCC-style indenting in deference to the nsSlidingString @@ -103,12 +103,12 @@ class nsScannerBufferList public: Position() {} - + Position( Buffer* buffer, char16_t* position ) : mBuffer(buffer) , mPosition(position) {} - + inline explicit Position( const nsScannerIterator& aIter ); @@ -133,7 +133,7 @@ class nsScannerBufferList void AddRef() { ++mRefCnt; } void Release() { if (--mRefCnt == 0) delete this; } - void Append( Buffer* buf ) { mBuffers.insertBack(buf); } + void Append( Buffer* buf ) { mBuffers.insertBack(buf); } void InsertAfter( Buffer* buf, Buffer* prev ) { prev->setNext(buf); } void SplitBuffer( const Position& ); void DiscardUnreferencedPrefix( Buffer* ); @@ -223,7 +223,7 @@ class nsScannerSubstring mBufferList->Release(); } } - + void init_range_from_buffer_list() { mStart.mBuffer = mBufferList->Head(); @@ -340,7 +340,7 @@ class nsScannerIterator friend class nsScannerSharedSubstring; public: - nsScannerIterator() {} + // nsScannerIterator(); // auto-generate default constructor is OK // nsScannerIterator( const nsScannerIterator& ); // auto-generated copy-constructor OK // nsScannerIterator& operator=( const nsScannerIterator& ); // auto-generated copy-assignment operator OK @@ -351,7 +351,7 @@ class nsScannerIterator { return mPosition; } - + char16_t operator*() const { return *get(); @@ -467,7 +467,7 @@ struct nsCharSourceTraits { return iter.get(); } - + static void advance( nsScannerIterator& s, difference_type n ) @@ -593,7 +593,7 @@ RFindInReadable( const nsAString& aPattern, inline bool -CaseInsensitiveFindInReadable( const nsAString& aPattern, +CaseInsensitiveFindInReadable( const nsAString& aPattern, nsScannerIterator& aStart, nsScannerIterator& aEnd ) { From 164eee4b73125a6c6687834fc4c02842d64711f6 Mon Sep 17 00:00:00 2001 From: Andrew Halberstadt Date: Wed, 25 Oct 2017 20:27:17 -0400 Subject: [PATCH 59/69] Bug 1411796 - [taskgraph] Skip parameters.rst doc verification if parameters.strict is False, r=dustin This is needed to prevent parameter mismatch errors when using |mach try fuzzy| from an older revision. This can happen if the parameters.yml is being downloaded from a commit with a recently added parameter. MozReview-Commit-ID: 4NxCM7i8B4W --HG-- extra : rebase_source : c47de38ad295e14c80c99806ea430fa641ae2be6 --- taskcluster/taskgraph/generator.py | 3 +++ taskcluster/taskgraph/test/test_generator.py | 8 ++++++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/taskcluster/taskgraph/generator.py b/taskcluster/taskgraph/generator.py index 7c231d6b769f..487dc00bd094 100644 --- a/taskcluster/taskgraph/generator.py +++ b/taskcluster/taskgraph/generator.py @@ -291,6 +291,9 @@ class TaskGraphGenerator(object): return self._run_results[name] def verify_parameters(self, parameters): + if not parameters.strict: + return + parameters_dict = dict(**parameters) verify_docs( filename="parameters.rst", diff --git a/taskcluster/taskgraph/test/test_generator.py b/taskcluster/taskgraph/test/test_generator.py index b105041874ef..638e440d747d 100644 --- a/taskcluster/taskgraph/test/test_generator.py +++ b/taskcluster/taskgraph/test/test_generator.py @@ -45,6 +45,10 @@ class WithFakeKind(TaskGraphGenerator): yield FakeKind(kind_name, '/fake', config) +class FakeParameters(dict): + strict = True + + class TestGenerator(unittest.TestCase): def maketgg(self, target_tasks=None, kinds=[('_fake', [])]): @@ -56,11 +60,11 @@ class TestGenerator(unittest.TestCase): target_tasks_mod._target_task_methods['test_method'] = target_tasks_method - parameters = { + parameters = FakeParameters({ '_kinds': kinds, 'target_tasks_method': 'test_method', 'try_mode': None, - } + }) return WithFakeKind('/root', parameters) From bb00fb759739fb08b0ebad0d5bc9c2fbfcbccd3c Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Thu, 26 Oct 2017 18:24:41 +0200 Subject: [PATCH 60/69] Backed out changeset e1455a5d2e05 (bug 1410459) for breaking Talos. r=backout on a CLOSED TREE --- .../examples/action_config_script.py | 4 +- testing/mozharness/mozharness/base/config.py | 151 +++++++++++------- .../mozharness/mozilla/building/buildbase.py | 62 +++---- .../mozilla/l10n/multi_locale_build.py | 7 + .../mozharness/mozilla/testing/device.py | 2 + .../mozharness/mozilla/testing/talos.py | 3 +- .../mozharness/mozilla/testing/testbase.py | 1 + testing/mozharness/scripts/desktop_l10n.py | 15 +- .../mozharness/scripts/desktop_unittest.py | 8 + .../mozharness/scripts/fx_desktop_build.py | 3 +- testing/mozharness/scripts/marionette.py | 1 + .../scripts/merge_day/gecko_migration.py | 5 + testing/mozharness/scripts/mobile_l10n.py | 11 +- .../scripts/mobile_partner_repack.py | 10 +- .../mozharness/scripts/release/antivirus.py | 4 +- .../mozharness/scripts/release/beet_mover.py | 3 +- .../release/postrelease_version_bump.py | 8 + .../release/push-candidate-to-releases.py | 2 +- testing/mozharness/scripts/release/updates.py | 3 + testing/mozharness/test/test_base_config.py | 5 - 20 files changed, 203 insertions(+), 105 deletions(-) diff --git a/testing/mozharness/examples/action_config_script.py b/testing/mozharness/examples/action_config_script.py index 18bd037bc330..e1135771e035 100755 --- a/testing/mozharness/examples/action_config_script.py +++ b/testing/mozharness/examples/action_config_script.py @@ -19,12 +19,14 @@ class ActionsConfigExample(BaseScript): ['--beverage', ], {"action": "store", "dest": "beverage", + "type": "string", "help": "Specify your beverage of choice", } ], [ ['--ship-style', ], {"action": "store", "dest": "ship_style", + "type": "choice", "choices": ["1", "2", "3"], "help": "Specify the type of ship", } @@ -32,7 +34,7 @@ class ActionsConfigExample(BaseScript): ['--long-sleep-time', ], {"action": "store", "dest": "long_sleep_time", - "type": int, + "type": "int", "help": "Specify how long to sleep", } ]] diff --git a/testing/mozharness/mozharness/base/config.py b/testing/mozharness/mozharness/base/config.py index ea291befc0ec..2e45c34f026e 100644 --- a/testing/mozharness/mozharness/base/config.py +++ b/testing/mozharness/mozharness/base/config.py @@ -8,7 +8,7 @@ gone by. The config should be built from script-level defaults, overlaid by -config-file defaults, overlaid by command line arguments. +config-file defaults, overlaid by command line options. (For buildbot-analogues that would be factory-level defaults, builder-level defaults, and build request/scheduler settings.) @@ -24,8 +24,8 @@ TODO: these settings are set. """ -from argparse import ArgumentParser, Action from copy import deepcopy +from optparse import OptionParser, Option, OptionGroup import os import sys import urllib2 @@ -39,12 +39,29 @@ except ImportError: from mozharness.base.log import DEBUG, INFO, WARNING, ERROR, CRITICAL, FATAL -# argparse {{{1 -class ExtendAction(Action): - def __call__(self, parser, namespace, values, option_string=None): - items = getattr(namespace, self.dest) or [] - items.extend(values.split(',')) - setattr(namespace, self.dest, items) +# optparse {{{1 +class ExtendedOptionParser(OptionParser): + """OptionParser, but with ExtendOption as the option_class. + """ + def __init__(self, **kwargs): + kwargs['option_class'] = ExtendOption + OptionParser.__init__(self, **kwargs) + + +class ExtendOption(Option): + """from http://docs.python.org/library/optparse.html?highlight=optparse#adding-new-actions""" + ACTIONS = Option.ACTIONS + ("extend",) + STORE_ACTIONS = Option.STORE_ACTIONS + ("extend",) + TYPED_ACTIONS = Option.TYPED_ACTIONS + ("extend",) + ALWAYS_TYPED_ACTIONS = Option.ALWAYS_TYPED_ACTIONS + ("extend",) + + def take_action(self, action, dest, opt, value, values, parser): + if action == "extend": + lvalue = value.split(",") + values.ensure_value(dest, []).extend(lvalue) + else: + Option.take_action( + self, action, dest, opt, value, values, parser) def make_immutable(item): @@ -196,7 +213,7 @@ class BaseConfig(object): volatile_config=None, option_args=None, require_config_file=False, append_env_variables_from_configs=False, - usage=None): + usage="usage: %prog [options]"): self._config = {} self.all_cfg_files_and_dicts = [] self.actions = [] @@ -231,10 +248,16 @@ class BaseConfig(object): ) self.set_config(initial_config) # Since initial_config_file is only set when running unit tests, - # default option_args to [] to avoid parsing sys.argv (which are - # specified for nosetests). + # if no option_args have been specified, then the parser will + # parse sys.argv which in this case would be the command line + # options specified to run the tests, e.g. nosetests -v. Clearly, + # the options passed to nosetests (such as -v) should not be + # interpreted by mozharness as mozharness options, so we specify + # a dummy command line with no options, so that the parser does + # not add anything from the test invocation command line + # arguments to the mozharness options. if option_args is None: - option_args = [] + option_args=['dummy_mozharness_script_with_no_command_line_options.py'] if config_options is None: config_options = [] self._create_config_parser(config_options, usage) @@ -245,33 +268,36 @@ class BaseConfig(object): return ReadOnlyDict(self._config) def _create_config_parser(self, config_options, usage): - self.config_parser = ArgumentParser(usage=usage) - self.config_parser.register('action', 'extend', ExtendAction) - self.config_parser.add_argument( - "--work-dir", default="build", + self.config_parser = ExtendedOptionParser(usage=usage) + self.config_parser.add_option( + "--work-dir", action="store", dest="work_dir", + type="string", default="build", help="Specify the work_dir (subdir of base_work_dir)" ) - self.config_parser.add_argument( - "--base-work-dir", default=os.getcwd(), + self.config_parser.add_option( + "--base-work-dir", action="store", dest="base_work_dir", + type="string", default=os.getcwd(), help="Specify the absolute path of the parent of the working directory" ) - self.config_parser.add_argument( + self.config_parser.add_option( "-c", "--config-file", "--cfg", action="extend", dest="config_files", - help="Specify a config file; can be repeated" + type="string", help="Specify a config file; can be repeated" ) - self.config_parser.add_argument( + self.config_parser.add_option( "-C", "--opt-config-file", "--opt-cfg", action="extend", - dest="opt_config_files", default=[], + dest="opt_config_files", type="string", default=[], help="Specify an optional config file, like --config-file but with no " "error if the file is missing; can be repeated" ) - self.config_parser.add_argument( + self.config_parser.add_option( "--dump-config", action="store_true", + dest="dump_config", help="List and dump the config generated from this run to " "a JSON file." ) - self.config_parser.add_argument( + self.config_parser.add_option( "--dump-config-hierarchy", action="store_true", + dest="dump_config_hierarchy", help="Like --dump-config but will list and dump which config " "files were used making up the config and specify their own " "keys/values that were not overwritten by another cfg -- " @@ -279,69 +305,75 @@ class BaseConfig(object): ) # Logging - log_option_group = self.config_parser.add_argument_group("Logging") - log_option_group.add_argument( - "--log-level", default=INFO, + log_option_group = OptionGroup(self.config_parser, "Logging") + log_option_group.add_option( + "--log-level", action="store", + type="choice", dest="log_level", default=INFO, choices=[DEBUG, INFO, WARNING, ERROR, CRITICAL, FATAL], help="Set log level (debug|info|warning|error|critical|fatal)" ) - log_option_group.add_argument( + log_option_group.add_option( "-q", "--quiet", action="store_false", dest="log_to_console", default=True, help="Don't log to the console" ) - log_option_group.add_argument( - "--append-to-log", action="store_true", default=False, + log_option_group.add_option( + "--append-to-log", action="store_true", + dest="append_to_log", default=False, help="Append to the log" ) - log_option_group.add_argument( + log_option_group.add_option( "--multi-log", action="store_const", const="multi", dest="log_type", help="Log using MultiFileLogger" ) - log_option_group.add_argument( + log_option_group.add_option( "--simple-log", action="store_const", const="simple", dest="log_type", help="Log using SimpleFileLogger" ) + self.config_parser.add_option_group(log_option_group) # Actions - action_option_group = self.config_parser.add_argument_group( - "Actions", "Use these options to list or enable/disable actions.") - action_option_group.add_argument( + action_option_group = OptionGroup( + self.config_parser, "Actions", + "Use these options to list or enable/disable actions." + ) + action_option_group.add_option( "--list-actions", action="store_true", + dest="list_actions", help="List all available actions, then exit" ) - action_option_group.add_argument( + action_option_group.add_option( "--add-action", action="extend", dest="add_actions", metavar="ACTIONS", help="Add action %s to the list of actions" % self.all_actions ) - action_option_group.add_argument( + action_option_group.add_option( "--no-action", action="extend", dest="no_actions", metavar="ACTIONS", help="Don't perform action" ) for action in self.all_actions: - action_option_group.add_argument( + action_option_group.add_option( "--%s" % action, action="append_const", dest="actions", const=action, help="Add %s to the limited list of actions" % action ) - action_option_group.add_argument( + action_option_group.add_option( "--no-%s" % action, action="append_const", dest="no_actions", const=action, help="Remove %s from the list of actions to perform" % action ) - + self.config_parser.add_option_group(action_option_group) # Child-specified options # TODO error checking for overlapping options if config_options: for option in config_options: - self.config_parser.add_argument(*option[0], **option[1]) + self.config_parser.add_option(*option[0], **option[1]) # Initial-config-specified options config_options = self._config.get('config_options', None) if config_options: for option in config_options: - self.config_parser.add_argument(*option[0], **option[1]) + self.config_parser.add_option(*option[0], **option[1]) def set_config(self, config, overwrite=False): """This is probably doable some other way.""" @@ -382,15 +414,15 @@ class BaseConfig(object): print " " + ("*" if a in self.default_actions else " "), a raise SystemExit(0) - def get_cfgs_from_files(self, all_config_files, args): + def get_cfgs_from_files(self, all_config_files, options): """Returns the configuration derived from the list of configuration files. The result is represented as a list of `(filename, config_dict)` tuples; they will be combined with keys in later dictionaries taking precedence over earlier. `all_config_files` is all files specified with `--config-file` and - `--opt-config-file`; `args` is the argparse Namespace object giving - access to any other command-line arguments. + `--opt-config-file`; `options` is the argparse options object giving + access to any other command-line options. This function is also responsible for downloading any configuration files specified by URL. It uses ``parse_config_file`` in this module @@ -413,7 +445,7 @@ class BaseConfig(object): else: all_cfg_files_and_dicts.append((cf, parse_config_file(cf))) except Exception: - if cf in args.opt_config_files: + if cf in options.opt_config_files: print( "WARNING: optional config file not found %s" % cf ) @@ -423,17 +455,19 @@ class BaseConfig(object): def parse_args(self, args=None): """Parse command line arguments in a generic way. - Return the parser object after adding the basic arguments, so + Return the parser object after adding the basic options, so child objects can manipulate it. """ self.command_line = ' '.join(sys.argv) if args is None: args = sys.argv[1:] - args = self.config_parser.parse_args(args) + (options, args) = self.config_parser.parse_args(args) - if not args.config_files: + defaults = self.config_parser.defaults.copy() + + if not options.config_files: if self.require_config_file: - if args.list_actions: + if options.list_actions: self.list_actions() print("Required config file not set! (use --config-file option)") raise SystemExit(-1) @@ -444,7 +478,7 @@ class BaseConfig(object): # let's store this to self for things like --interpret-config-files self.all_cfg_files_and_dicts.extend(self.get_cfgs_from_files( # append opt_config to allow them to overwrite previous configs - args.config_files + args.opt_config_files, args + options.config_files + options.opt_config_files, options=options )) config = {} if self.append_env_variables_from_configs: @@ -465,32 +499,33 @@ class BaseConfig(object): # as the keys/values that make up that instance. Ultimately, # this becomes self.config during BaseScript's init self.set_config(config) - - for key, value in vars(args).items(): + for key in defaults.keys(): + value = getattr(options, key) if value is None: continue # Don't override config_file defaults with config_parser defaults - if value == self.config_parser.get_default(key) and key in self._config: + if key in defaults and value == defaults[key] and key in self._config: continue self._config[key] = value # The idea behind the volatile_config is we don't want to save this # info over multiple runs. This defaults to the action-specific - # config args, but can be anything. + # config options, but can be anything. for key in self.volatile_config.keys(): if self._config.get(key) is not None: self.volatile_config[key] = self._config[key] del(self._config[key]) self.update_actions() - if args.list_actions: + if options.list_actions: self.list_actions() # Keep? This is for saving the volatile config in the dump_config self._config['volatile_config'] = self.volatile_config + self.options = options self.args = args - return self.args + return (self.options, self.args) def update_actions(self): """ Update actions after reading in config. @@ -500,7 +535,7 @@ class BaseConfig(object): First, if default_actions is specified in the config, set our default actions even if the script specifies other default actions. - Without any other action-specific arguments, run with default actions. + Without any other action-specific options, run with default actions. If we specify --ACTION or --only-ACTION once or multiple times, we want to override the default_actions list with the one(s) we list. diff --git a/testing/mozharness/mozharness/mozilla/building/buildbase.py b/testing/mozharness/mozharness/mozilla/building/buildbase.py index 0338349f89fd..abb8e0d41e14 100755 --- a/testing/mozharness/mozharness/mozilla/building/buildbase.py +++ b/testing/mozharness/mozharness/mozilla/building/buildbase.py @@ -20,7 +20,6 @@ import uuid import copy import glob import shlex -from argparse import Action from itertools import chain # import the power of mozharness ;) @@ -328,7 +327,7 @@ class BuildingConfig(BaseConfig): # noinspection PyUnusedLocal -class BuildOptionParser(Action): +class BuildOptionParser(object): # TODO add nosetests for this class platform = None bits = None @@ -389,11 +388,6 @@ class BuildOptionParser(Action): build_pool_cfg_file = 'builds/build_pool_specifics.py' branch_cfg_file = 'builds/branch_specifics.py' - def __call__(self, parser, namespace, values, option_string=None): - func = getattr(self, 'set_{}'.format(self.dest)) - func(self, namespace, values) - - @classmethod def _query_pltfrm_and_bits(cls, target_option, options): """ determine platform and bits @@ -445,11 +439,11 @@ class BuildOptionParser(Action): return cls.bits, cls.platform @classmethod - def find_variant_cfg_path(cls, opt, value, namespace): + def find_variant_cfg_path(cls, opt, value, parser): valid_variant_cfg_path = None # first let's see if we were given a valid short-name if cls.build_variants.get(value): - bits, pltfrm = cls._query_pltfrm_and_bits(opt, namespace) + bits, pltfrm = cls._query_pltfrm_and_bits(opt, parser.values) prospective_cfg_path = cls.build_variants[value] % (pltfrm, bits) else: # this is either an incomplete path or an invalid key in @@ -471,14 +465,14 @@ class BuildOptionParser(Action): return valid_variant_cfg_path, prospective_cfg_path @classmethod - def set_build_variant(cls, option, namespace, value): + def set_build_variant(cls, option, opt, value, parser): """ sets an extra config file. This is done by either taking an existing filepath or by taking a valid shortname coupled with known platform/bits. """ valid_variant_cfg_path, prospective_cfg_path = cls.find_variant_cfg_path( - '--custom-build-variant-cfg', value, namespace) + '--custom-build-variant-cfg', value, parser) if not valid_variant_cfg_path: # either the value was an indeterminable path or an invalid short @@ -491,32 +485,32 @@ class BuildOptionParser(Action): prospective_cfg_path, str(cls.build_variants.keys()), str(cls.config_file_search_path))) - namespace.config_files.append(valid_variant_cfg_path) - setattr(namespace, option.dest, value) # the pool + parser.values.config_files.append(valid_variant_cfg_path) + setattr(parser.values, option.dest, value) # the pool @classmethod - def set_build_pool(cls, option, namespace, value): + def set_build_pool(cls, option, opt, value, parser): # first let's add the build pool file where there may be pool # specific keys/values. Then let's store the pool name - namespace.config_files.append(cls.build_pool_cfg_file) - setattr(namespace, option.dest, value) # the pool + parser.values.config_files.append(cls.build_pool_cfg_file) + setattr(parser.values, option.dest, value) # the pool @classmethod - def set_branch(cls, option, namespace, value): + def set_build_branch(cls, option, opt, value, parser): # first let's add the branch_specific file where there may be branch # specific keys/values. Then let's store the branch name we are using - namespace.config_files.append(cls.branch_cfg_file) - setattr(namespace, option.dest, value) # the branch name + parser.values.config_files.append(cls.branch_cfg_file) + setattr(parser.values, option.dest, value) # the branch name @classmethod - def set_platform(cls, option, namespace, value): + def set_platform(cls, option, opt, value, parser): cls.platform = value - setattr(namespace, option.dest, value) + setattr(parser.values, option.dest, value) @classmethod - def set_bits(cls, option, namespace, value): + def set_bits(cls, option, opt, value, parser): cls.bits = value - setattr(namespace, option.dest, value) + setattr(parser.values, option.dest, value) # this global depends on BuildOptionParser and therefore can not go at the @@ -530,31 +524,41 @@ BUILD_BASE_CONFIG_OPTIONS = [ "infrastructure, use this option. It ignores actions" "that are not needed and adds config checks."}], [['--platform'], { - "action": BuildOptionParser, + "action": "callback", + "callback": BuildOptionParser.set_platform, + "type": "string", "dest": "platform", "help": "Sets the platform we are running this against" " valid values: 'windows', 'mac', 'linux'"}], [['--bits'], { - "action": BuildOptionParser, + "action": "callback", + "callback": BuildOptionParser.set_bits, + "type": "string", "dest": "bits", "help": "Sets which bits we are building this against" " valid values: '32', '64'"}], [['--custom-build-variant-cfg'], { - "action": BuildOptionParser, + "action": "callback", + "callback": BuildOptionParser.set_build_variant, + "type": "string", "dest": "build_variant", "help": "Sets the build type and will determine appropriate" " additional config to use. Either pass a config path" " or use a valid shortname from: " "%s" % (BuildOptionParser.build_variants.keys(),)}], [['--build-pool'], { - "action": BuildOptionParser, + "action": "callback", + "callback": BuildOptionParser.set_build_pool, + "type": "string", "dest": "build_pool", "help": "This will update the config with specific pool" " environment keys/values. The dicts for this are" " in %s\nValid values: staging or" " production" % ('builds/build_pool_specifics.py',)}], [['--branch'], { - "action": BuildOptionParser, + "action": "callback", + "callback": BuildOptionParser.set_build_branch, + "type": "string", "dest": "branch", "help": "This sets the branch we will be building this for." " If this branch is in branch_specifics.py, update our" @@ -564,7 +568,7 @@ BUILD_BASE_CONFIG_OPTIONS = [ )}], [['--scm-level'], { "action": "store", - "type": int, + "type": "int", "dest": "scm_level", "default": 1, "help": "This sets the SCM level for the branch being built." diff --git a/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py b/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py index f82db3ace6ff..aa476ce7941f 100755 --- a/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py +++ b/testing/mozharness/mozharness/mozilla/l10n/multi_locale_build.py @@ -31,12 +31,14 @@ class MultiLocaleBuild(LocalesMixin, MercurialScript): ["--locale"], {"action": "extend", "dest": "locales", + "type": "string", "help": "Specify the locale(s) to repack" } ], [ ["--objdir"], {"action": "store", "dest": "objdir", + "type": "string", "default": "objdir", "help": "Specify the objdir" } @@ -44,30 +46,35 @@ class MultiLocaleBuild(LocalesMixin, MercurialScript): ["--l10n-base"], {"action": "store", "dest": "hg_l10n_base", + "type": "string", "help": "Specify the L10n repo base directory" } ], [ ["--l10n-tag"], {"action": "store", "dest": "hg_l10n_tag", + "type": "string", "help": "Specify the L10n tag" } ], [ ["--tag-override"], {"action": "store", "dest": "tag_override", + "type": "string", "help": "Override the tags set for all repos" } ], [ ["--user-repo-override"], {"action": "store", "dest": "user_repo_override", + "type": "string", "help": "Override the user repo path for all repos" } ], [ ["--l10n-dir"], {"action": "store", "dest": "l10n_dir", + "type": "string", "default": "l10n", "help": "Specify the l10n dir name" } diff --git a/testing/mozharness/mozharness/mozilla/testing/device.py b/testing/mozharness/mozharness/mozilla/testing/device.py index 900b9f6c2c78..12c7a55ae18b 100644 --- a/testing/mozharness/mozharness/mozilla/testing/device.py +++ b/testing/mozharness/mozharness/mozilla/testing/device.py @@ -440,6 +440,7 @@ device_config_options = [[ ], [ ["--device-protocol"], {"action": "store", + "type": "choice", "dest": "device_protocol", "choices": DEVICE_PROTOCOL_DICT.keys(), "help": "Specify the device communication protocol." @@ -449,6 +450,7 @@ device_config_options = [[ # A bit useless atm, but we can add new device types as we add support # for them. {"action": "store", + "type": "choice", "choices": ["non-tegra", "tegra250"], "default": "non-tegra", "dest": "device_type", diff --git a/testing/mozharness/mozharness/mozilla/testing/talos.py b/testing/mozharness/mozharness/mozilla/testing/talos.py index 982239570f4b..be0c51e6bcd3 100755 --- a/testing/mozharness/mozharness/mozilla/testing/talos.py +++ b/testing/mozharness/mozharness/mozilla/testing/talos.py @@ -119,6 +119,7 @@ class Talos(TestingMixin, MercurialScript, BlobUploadMixin, TooltoolMixin, [["--system-bits"], {"action": "store", "dest": "system_bits", + "type": "choice", "default": "32", "choices": ['32', '64'], "help": "Testing 32 or 64 (for talos json plugins)" @@ -137,7 +138,7 @@ class Talos(TestingMixin, MercurialScript, BlobUploadMixin, TooltoolMixin, }], [["--geckoProfileInterval"], { "dest": "gecko_profile_interval", - "type": int, + "type": "int", "default": 0, "help": "The interval between samples taken by the profiler (milliseconds)" }], diff --git a/testing/mozharness/mozharness/mozilla/testing/testbase.py b/testing/mozharness/mozharness/mozilla/testing/testbase.py index efcb7668ea2b..be5e9256858e 100755 --- a/testing/mozharness/mozharness/mozilla/testing/testbase.py +++ b/testing/mozharness/mozharness/mozilla/testing/testbase.py @@ -95,6 +95,7 @@ testing_config_options = [ [["--download-symbols"], {"action": "store", "dest": "download_symbols", + "type": "choice", "choices": ['ondemand', 'true'], "help": "Download and extract crash reporter symbols.", }], diff --git a/testing/mozharness/scripts/desktop_l10n.py b/testing/mozharness/scripts/desktop_l10n.py index 1bea97415bbd..d65af6b33776 100755 --- a/testing/mozharness/scripts/desktop_l10n.py +++ b/testing/mozharness/scripts/desktop_l10n.py @@ -79,70 +79,81 @@ class DesktopSingleLocale(LocalesMixin, ReleaseMixin, MockMixin, BuildbotMixin, ['--balrog-config', ], {"action": "extend", "dest": "config_files", + "type": "string", "help": "Specify the balrog configuration file"} ], [ ['--branch-config', ], {"action": "extend", "dest": "config_files", + "type": "string", "help": "Specify the branch configuration file"} ], [ ['--environment-config', ], {"action": "extend", "dest": "config_files", + "type": "string", "help": "Specify the environment (staging, production, ...) configuration file"} ], [ ['--platform-config', ], {"action": "extend", "dest": "config_files", + "type": "string", "help": "Specify the platform configuration file"} ], [ ['--locale', ], {"action": "extend", "dest": "locales", + "type": "string", "help": "Specify the locale(s) to sign and update. Optionally pass" " revision separated by colon, en-GB:default."} ], [ ['--locales-file', ], {"action": "store", "dest": "locales_file", + "type": "string", "help": "Specify a file to determine which locales to sign and update"} ], [ ['--tag-override', ], {"action": "store", "dest": "tag_override", + "type": "string", "help": "Override the tags set for all repos"} ], [ ['--revision', ], {"action": "store", "dest": "revision", + "type": "string", "help": "Override the gecko revision to use (otherwise use buildbot supplied" " value, or en-US revision) "} ], [ ['--user-repo-override', ], {"action": "store", "dest": "user_repo_override", + "type": "string", "help": "Override the user repo path for all repos"} ], [ ['--release-config-file', ], {"action": "store", "dest": "release_config_file", + "type": "string", "help": "Specify the release config file to use"} ], [ ['--this-chunk', ], {"action": "store", "dest": "this_locale_chunk", - "type": int, + "type": "int", "help": "Specify which chunk of locales to run"} ], [ ['--total-chunks', ], {"action": "store", "dest": "total_locale_chunks", - "type": int, + "type": "int", "help": "Specify the total number of chunks of locales"} ], [ ['--en-us-installer-url', ], {"action": "store", "dest": "en_us_installer_url", + "type": "string", "help": "Specify the url of the en-us binary"} ], [ ["--disable-mock"], { diff --git a/testing/mozharness/scripts/desktop_unittest.py b/testing/mozharness/scripts/desktop_unittest.py index 6c02bf426747..6f1b4a05eb57 100755 --- a/testing/mozharness/scripts/desktop_unittest.py +++ b/testing/mozharness/scripts/desktop_unittest.py @@ -53,6 +53,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--mochitest-suite', ], { "action": "extend", "dest": "specified_mochitest_suites", + "type": "string", "help": "Specify which mochi suite to run. " "Suites are defined in the config file.\n" "Examples: 'all', 'plain1', 'plain5', 'chrome', or 'a11y'"} @@ -60,6 +61,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--reftest-suite', ], { "action": "extend", "dest": "specified_reftest_suites", + "type": "string", "help": "Specify which reftest suite to run. " "Suites are defined in the config file.\n" "Examples: 'all', 'crashplan', or 'jsreftest'"} @@ -67,6 +69,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--xpcshell-suite', ], { "action": "extend", "dest": "specified_xpcshell_suites", + "type": "string", "help": "Specify which xpcshell suite to run. " "Suites are defined in the config file\n." "Examples: 'xpcshell'"} @@ -74,6 +77,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--cppunittest-suite', ], { "action": "extend", "dest": "specified_cppunittest_suites", + "type": "string", "help": "Specify which cpp unittest suite to run. " "Suites are defined in the config file\n." "Examples: 'cppunittest'"} @@ -81,6 +85,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--gtest-suite', ], { "action": "extend", "dest": "specified_gtest_suites", + "type": "string", "help": "Specify which gtest suite to run. " "Suites are defined in the config file\n." "Examples: 'gtest'"} @@ -88,6 +93,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--jittest-suite', ], { "action": "extend", "dest": "specified_jittest_suites", + "type": "string", "help": "Specify which jit-test suite to run. " "Suites are defined in the config file\n." "Examples: 'jittest'"} @@ -95,6 +101,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--mozbase-suite', ], { "action": "extend", "dest": "specified_mozbase_suites", + "type": "string", "help": "Specify which mozbase suite to run. " "Suites are defined in the config file\n." "Examples: 'mozbase'"} @@ -102,6 +109,7 @@ class DesktopUnittest(TestingMixin, MercurialScript, BlobUploadMixin, MozbaseMix [['--mozmill-suite', ], { "action": "extend", "dest": "specified_mozmill_suites", + "type": "string", "help": "Specify which mozmill suite to run. " "Suites are defined in the config file\n." "Examples: 'mozmill'"} diff --git a/testing/mozharness/scripts/fx_desktop_build.py b/testing/mozharness/scripts/fx_desktop_build.py index 7ff32cc7ad9b..07e1717581b6 100755 --- a/testing/mozharness/scripts/fx_desktop_build.py +++ b/testing/mozharness/scripts/fx_desktop_build.py @@ -17,7 +17,6 @@ import copy import pprint import sys import os -from argparse import Namespace # load modules from parent dir sys.path.insert(1, os.path.dirname(sys.path[0])) @@ -169,7 +168,7 @@ class FxDesktopBuild(BuildScript, TryToolsMixin, object): variant_cfg_path, _ = BuildOptionParser.find_variant_cfg_path( '--custom-build-variant-cfg', variant, - Namespace(**rw_config._config) + rw_config.config_parser ) if not variant_cfg_path: self.fatal('Could not find appropriate config file for variant %s' % variant) diff --git a/testing/mozharness/scripts/marionette.py b/testing/mozharness/scripts/marionette.py index 9eddcda28bc2..6363f44cc294 100755 --- a/testing/mozharness/scripts/marionette.py +++ b/testing/mozharness/scripts/marionette.py @@ -60,6 +60,7 @@ class MarionetteTest(TestingMixin, MercurialScript, BlobUploadMixin, TransferMix ], [ ["--emulator"], {"action": "store", + "type": "choice", "choices": ['arm', 'x86'], "dest": "emulator", "default": None, diff --git a/testing/mozharness/scripts/merge_day/gecko_migration.py b/testing/mozharness/scripts/merge_day/gecko_migration.py index 16ec4ac63c49..5462851d0fe6 100755 --- a/testing/mozharness/scripts/merge_day/gecko_migration.py +++ b/testing/mozharness/scripts/merge_day/gecko_migration.py @@ -42,27 +42,32 @@ class GeckoMigration(MercurialScript, BalrogMixin, VirtualenvMixin, [['--hg-user', ], { "action": "store", "dest": "hg_user", + "type": "string", "default": "ffxbld ", "help": "Specify what user to use to commit to hg.", }], [['--balrog-api-root', ], { "action": "store", "dest": "balrog_api_root", + "type": "string", "help": "Specify Balrog API root URL.", }], [['--balrog-username', ], { "action": "store", "dest": "balrog_username", + "type": "string", "help": "Specify what user to connect to Balrog with.", }], [['--balrog-credentials-file', ], { "action": "store", "dest": "balrog_credentials_file", + "type": "string", "help": "The file containing the Balrog credentials.", }], [['--remove-locale', ], { "action": "extend", "dest": "remove_locales", + "type": "string", "help": "Comma separated list of locales to remove from the 'to' repo.", }], ] diff --git a/testing/mozharness/scripts/mobile_l10n.py b/testing/mozharness/scripts/mobile_l10n.py index 87a0c237c209..168a29acf95b 100755 --- a/testing/mozharness/scripts/mobile_l10n.py +++ b/testing/mozharness/scripts/mobile_l10n.py @@ -52,36 +52,42 @@ class MobileSingleLocale(MockMixin, LocalesMixin, ReleaseMixin, ['--locale', ], {"action": "extend", "dest": "locales", + "type": "string", "help": "Specify the locale(s) to sign and update" } ], [ ['--locales-file', ], {"action": "store", "dest": "locales_file", + "type": "string", "help": "Specify a file to determine which locales to sign and update" } ], [ ['--tag-override', ], {"action": "store", "dest": "tag_override", + "type": "string", "help": "Override the tags set for all repos" } ], [ ['--user-repo-override', ], {"action": "store", "dest": "user_repo_override", + "type": "string", "help": "Override the user repo path for all repos" } ], [ ['--release-config-file', ], {"action": "store", "dest": "release_config_file", + "type": "string", "help": "Specify the release config file to use" } ], [ ['--key-alias', ], {"action": "store", "dest": "key_alias", + "type": "choice", "default": "nightly", "choices": ["nightly", "release"], "help": "Specify the signing key alias" @@ -90,14 +96,14 @@ class MobileSingleLocale(MockMixin, LocalesMixin, ReleaseMixin, ['--this-chunk', ], {"action": "store", "dest": "this_locale_chunk", - "type": int, + "type": "int", "help": "Specify which chunk of locales to run" } ], [ ['--total-chunks', ], {"action": "store", "dest": "total_locale_chunks", - "type": int, + "type": "int", "help": "Specify the total number of chunks of locales" } ], [ @@ -110,6 +116,7 @@ class MobileSingleLocale(MockMixin, LocalesMixin, ReleaseMixin, ['--revision', ], {"action": "store", "dest": "revision", + "type": "string", "help": "Override the gecko revision to use (otherwise use buildbot supplied" " value, or en-US revision) "} ]] diff --git a/testing/mozharness/scripts/mobile_partner_repack.py b/testing/mozharness/scripts/mobile_partner_repack.py index 8b08670e875c..d138eba7fd4c 100755 --- a/testing/mozharness/scripts/mobile_partner_repack.py +++ b/testing/mozharness/scripts/mobile_partner_repack.py @@ -33,30 +33,35 @@ class MobilePartnerRepack(LocalesMixin, ReleaseMixin, MobileSigningMixin, ['--locale', ], {"action": "extend", "dest": "locales", + "type": "string", "help": "Specify the locale(s) to repack" } ], [ ['--partner', ], {"action": "extend", "dest": "partners", + "type": "string", "help": "Specify the partner(s) to repack" } ], [ ['--locales-file', ], {"action": "store", "dest": "locales_file", + "type": "string", "help": "Specify a json file to determine which locales to repack" } ], [ ['--tag-override', ], {"action": "store", "dest": "tag_override", + "type": "string", "help": "Override the tags set for all repos" } ], [ ['--platform', ], {"action": "extend", "dest": "platforms", + "type": "choice", "choices": SUPPORTED_PLATFORMS, "help": "Specify the platform(s) to repack" } @@ -64,25 +69,28 @@ class MobilePartnerRepack(LocalesMixin, ReleaseMixin, MobileSigningMixin, ['--user-repo-override', ], {"action": "store", "dest": "user_repo_override", + "type": "string", "help": "Override the user repo path for all repos" } ], [ ['--release-config-file', ], {"action": "store", "dest": "release_config_file", + "type": "string", "help": "Specify the release config file to use" } ], [ ['--version', ], {"action": "store", "dest": "version", + "type": "string", "help": "Specify the current version" } ], [ ['--buildnum', ], {"action": "store", "dest": "buildnum", - "type": int, + "type": "int", "default": 1, "metavar": "INT", "help": "Specify the current release build num (e.g. build1, build2)" diff --git a/testing/mozharness/scripts/release/antivirus.py b/testing/mozharness/scripts/release/antivirus.py index 6e548f469907..2c5791afbe30 100644 --- a/testing/mozharness/scripts/release/antivirus.py +++ b/testing/mozharness/scripts/release/antivirus.py @@ -36,13 +36,13 @@ class AntivirusScan(BaseScript, VirtualenvMixin): [["-d", "--download-parallelization"], { "dest": "download_parallelization", "default": 6, - "type": int, + "type": "int", "help": "Number of concurrent file downloads", }], [["-s", "--scan-parallelization"], { "dest": "scan_parallelization", "default": 4, - "type": int, + "type": "int", "help": "Number of concurrent file scans", }], [["--tools-repo"], { diff --git a/testing/mozharness/scripts/release/beet_mover.py b/testing/mozharness/scripts/release/beet_mover.py index e8e822c61297..2115ca9c90d8 100755 --- a/testing/mozharness/scripts/release/beet_mover.py +++ b/testing/mozharness/scripts/release/beet_mover.py @@ -41,6 +41,7 @@ CONFIG_OPTIONS = [ [['--locale', ], { "action": "extend", "dest": "locales", + "type": "string", "help": "Specify the locale(s) to upload."}], [["--platform"], { "dest": "platform", @@ -87,7 +88,7 @@ CONFIG_OPTIONS = [ [["-s", "--scan-parallelization"], { "dest": "scan_parallelization", "default": 4, - "type": int, + "type": "int", "help": "Number of concurrent file scans", }], ] diff --git a/testing/mozharness/scripts/release/postrelease_version_bump.py b/testing/mozharness/scripts/release/postrelease_version_bump.py index 0e093880d3b1..b06aca9f4187 100644 --- a/testing/mozharness/scripts/release/postrelease_version_bump.py +++ b/testing/mozharness/scripts/release/postrelease_version_bump.py @@ -27,42 +27,50 @@ class PostReleaseVersionBump(MercurialScript, BuildbotMixin, [['--hg-user', ], { "action": "store", "dest": "hg_user", + "type": "string", "default": "ffxbld ", "help": "Specify what user to use to commit to hg.", }], [['--next-version', ], { "action": "store", "dest": "next_version", + "type": "string", "help": "Next version used in version bump", }], [['--ssh-user', ], { "action": "store", "dest": "ssh_user", + "type": "string", "help": "SSH username with hg.mozilla.org permissions", }], [['--ssh-key', ], { "action": "store", "dest": "ssh_key", + "type": "string", "help": "Path to SSH key.", }], [['--product', ], { "action": "store", "dest": "product", + "type": "string", "help": "Product name", }], [['--version', ], { "action": "store", "dest": "version", + "type": "string", "help": "Version", }], [['--build-number', ], { "action": "store", "dest": "build_number", + "type": "string", "help": "Build number", }], [['--revision', ], { "action": "store", "dest": "revision", + "type": "string", "help": "HG revision to tag", }], ] diff --git a/testing/mozharness/scripts/release/push-candidate-to-releases.py b/testing/mozharness/scripts/release/push-candidate-to-releases.py index 0107e447acae..0a8791e070ca 100644 --- a/testing/mozharness/scripts/release/push-candidate-to-releases.py +++ b/testing/mozharness/scripts/release/push-candidate-to-releases.py @@ -58,7 +58,7 @@ class ReleasePusher(BaseScript, VirtualenvMixin): [["-j", "--parallelization"], { "dest": "parallelization", "default": 20, - "type": int, + "type": "int", "help": "Number of copy requests to run concurrently", }], ] + virtualenv_config_options diff --git a/testing/mozharness/scripts/release/updates.py b/testing/mozharness/scripts/release/updates.py index 0e6e89c8a1b0..ef11db3c2c39 100755 --- a/testing/mozharness/scripts/release/updates.py +++ b/testing/mozharness/scripts/release/updates.py @@ -35,17 +35,20 @@ class UpdatesBumper(MercurialScript, BuildbotMixin, [['--hg-user', ], { "action": "store", "dest": "hg_user", + "type": "string", "default": "ffxbld ", "help": "Specify what user to use to commit to hg.", }], [['--ssh-user', ], { "action": "store", "dest": "ssh_user", + "type": "string", "help": "SSH username with hg.mozilla.org permissions", }], [['--ssh-key', ], { "action": "store", "dest": "ssh_key", + "type": "string", "help": "Path to SSH key.", }], ] diff --git a/testing/mozharness/test/test_base_config.py b/testing/mozharness/test/test_base_config.py index b10eabeca705..42ec7a641dd8 100644 --- a/testing/mozharness/test/test_base_config.py +++ b/testing/mozharness/test/test_base_config.py @@ -250,7 +250,6 @@ class TestReadOnlyDict(unittest.TestCase): class TestActions(unittest.TestCase): all_actions = ['a', 'b', 'c', 'd', 'e'] - config_options = [[['args'], {'nargs': '*'}]] default_actions = ['b', 'c', 'd'] def test_verify_actions(self): @@ -276,7 +275,6 @@ class TestActions(unittest.TestCase): def test_no_action1(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, - config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--no-action', 'a']) self.assertEqual(self.default_actions, c.get_actions(), @@ -285,7 +283,6 @@ class TestActions(unittest.TestCase): def test_no_action2(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, - config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--no-c']) self.assertEqual(['b', 'd'], c.get_actions(), @@ -294,7 +291,6 @@ class TestActions(unittest.TestCase): def test_add_action(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, - config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--add-action', 'e']) self.assertEqual(['b', 'c', 'd', 'e'], c.get_actions(), @@ -303,7 +299,6 @@ class TestActions(unittest.TestCase): def test_only_action(self): c = config.BaseConfig(default_actions=self.default_actions, all_actions=self.all_actions, - config_options=self.config_options, initial_config_file='test/test.json') c.parse_args(args=['foo', '--a', '--e']) self.assertEqual(['a', 'e'], c.get_actions(), From 016e88352f656783dda9aa41c8d1ee86bf3c2ce4 Mon Sep 17 00:00:00 2001 From: Valentin Gosu Date: Wed, 25 Oct 2017 21:41:48 +0200 Subject: [PATCH 61/69] Bug 1411703 - test_original_sent_received_head_wrap.js fails locally r=dragana Test fails when running locally: ./mach test netwerk/test/unit_ipc/test_original_sent_received_head_wrap.js Error: cannot open file '/home/user/mozilla-central/obj-ff-dbg/_tests/xpcshell/netwerk/test/unit/test_original_sent_received_head.js' for reading at /home/icecold/mozilla-central/testing/xpcshell/head.js:648 MozReview-Commit-ID: DcOWOWlH5ch --HG-- extra : rebase_source : 30c5e28c61adace06cd49ca216108a277e37d58d --- netwerk/test/unit_ipc/xpcshell.ini | 1 + 1 file changed, 1 insertion(+) diff --git a/netwerk/test/unit_ipc/xpcshell.ini b/netwerk/test/unit_ipc/xpcshell.ini index 78701f0455ee..3bb8721fb770 100644 --- a/netwerk/test/unit_ipc/xpcshell.ini +++ b/netwerk/test/unit_ipc/xpcshell.ini @@ -58,6 +58,7 @@ support-files = !/netwerk/test/unit/test_alt-data_stream.js !/netwerk/test/unit/test_channel_priority.js !/netwerk/test/unit/test_multipart_streamconv.js + !/netwerk/test/unit/test_original_sent_received_head.js [test_bug528292_wrap.js] [test_bug248970_cookie_wrap.js] From e3c38148bec0f014f5007c31f76361f508159f37 Mon Sep 17 00:00:00 2001 From: Henrik Skupin Date: Thu, 26 Oct 2017 13:05:17 +0200 Subject: [PATCH 62/69] Bug 1411913 - Enable Marionette trace log for mochitest/reftest by default. r=jmaher MozReview-Commit-ID: 1cGy3YlJml1 --HG-- extra : rebase_source : 23106578640a64848c164121a96cdddebd13cad8 --- layout/tools/reftest/runreftest.py | 4 ++++ testing/mochitest/runtests.py | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/layout/tools/reftest/runreftest.py b/layout/tools/reftest/runreftest.py index d39e0097388e..7586941198a4 100644 --- a/layout/tools/reftest/runreftest.py +++ b/layout/tools/reftest/runreftest.py @@ -327,6 +327,10 @@ class RefTest(object): port = options.marionette.split(':')[1] prefs['marionette.defaultPrefs.port'] = int(port) + # Enable tracing output for detailed failures in case of + # failing connection attempts, and hangs (bug 1397201) + prefs['marionette.logging'] = "TRACE" + preference_file = os.path.join(here, 'reftest-preferences.js') prefs.update(mozprofile.Preferences.read_prefs(preference_file)) diff --git a/testing/mochitest/runtests.py b/testing/mochitest/runtests.py index 914f17368e3f..e537d041ca2f 100644 --- a/testing/mochitest/runtests.py +++ b/testing/mochitest/runtests.py @@ -1805,6 +1805,12 @@ toolbar#nav-bar { "idle.lastDailyNotification=%d" % int(time.time())) + # Enable tracing output for detailed failures in case of + # failing connection attempts, and hangs (bug 1397201) + options.extraPrefs.append( + "marionette.logging=%s" % + "TRACE") + # get extensions to install extensions = self.getExtensionsToInstall(options) From cf842bfc0deff99f86098dc4029c91a70069ce76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Delphine=20Leb=C3=A9del?= Date: Wed, 25 Oct 2017 19:47:16 -0700 Subject: [PATCH 63/69] Bug 1411109- [ach] Search engine setup for Firefox Mobile for Acholi, r=flod MozReview-Commit-ID: 6vFXKBYolqj --HG-- extra : rebase_source : bbe37f6d4d68db5f073abaf48a7f196b3269e84e --- mobile/locales/search/list.json | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mobile/locales/search/list.json b/mobile/locales/search/list.json index a77ab2450e2e..d0edc01f10b5 100644 --- a/mobile/locales/search/list.json +++ b/mobile/locales/search/list.json @@ -37,6 +37,13 @@ } }, "locales": { + "ach": { + "default": { + "visibleDefaultEngines": [ + "google", "yahoo", "bing", "wikipedia" + ] + } + }, "an": { "default": { "visibleDefaultEngines": [ From 926bb25028cbdc7805478601a0aa7e27a666ce85 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 25 Oct 2017 16:58:37 -0700 Subject: [PATCH 64/69] Bug 1409876 - Record cache history to aid failure analysis; r=dustin We introduce a per-cache .cachelog file containing important events in the cache's history such as creation, requirements adjusting, and utilization. If cache validation fails, we print the cache log. If a previous task was responsible for getting the cache in a bad state, its TASK_ID should be printed, allowing us to more easily identify mis-configured tasks. MozReview-Commit-ID: BJun5Hi5w0s --HG-- extra : rebase_source : f4758741ee294a0de53882b6891b473c01463e28 --- taskcluster/docker/recipes/run-task | 32 +++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/taskcluster/docker/recipes/run-task b/taskcluster/docker/recipes/run-task index 5aedb11396fa..b0690f440e14 100755 --- a/taskcluster/docker/recipes/run-task +++ b/taskcluster/docker/recipes/run-task @@ -295,6 +295,9 @@ def main(args): # execution in aggregate. Without monitoring for this, people may not notice # the problem and tasks would be slower than they could be. We follow the # principle of "fail fast" to ensure optimal task execution. + # + # We also write an audit log of who used the caches. This log is printed + # during failures to help aid debugging. if 'TASKCLUSTER_CACHES' in os.environ: caches = os.environ['TASKCLUSTER_CACHES'].split(';') @@ -321,6 +324,12 @@ def main(args): b'gid=%d' % gid, } + def write_audit_entry(path, msg): + now = datetime.datetime.utcnow().isoformat() + with open(path, 'ab') as fh: + fh.write(b'[%sZ %s] %s\n' % ( + now, os.environ.get('TASK_ID', 'UNKNOWN'), msg)) + for cache in caches: if not os.path.isdir(cache): print('error: cache %s is not a directory; this should never ' @@ -328,6 +337,7 @@ def main(args): return 1 requires_path = os.path.join(cache, '.cacherequires') + audit_path = os.path.join(cache, '.cachelog') # The cache is empty. Configure it. if not os.listdir(cache): @@ -342,6 +352,10 @@ def main(args): # And make it read-only as a precaution against deletion. os.chmod(requires_path, stat.S_IRUSR | stat.S_IRGRP | stat.S_IROTH) + write_audit_entry(audit_path, + 'created; requirements: %s' % + ', '.join(sorted(our_requirements))) + set_dir_permissions(cache, uid, gid) # The cache has content and we have a requirements file. Validate @@ -374,6 +388,10 @@ def main(args): with open(requires_path, 'wb') as fh: fh.write(b'\n'.join(sorted(our_requirements))) + write_audit_entry(audit_path, + 'chown; requirements: %s' % + ', '.join(sorted(our_requirements))) + elif missing: print('error: requirements for populated cache %s differ from ' 'this task' % cache) @@ -383,7 +401,19 @@ def main(args): our_requirements))) if any(s.startswith(('uid=', 'gid=')) for s in missing): print(CACHE_UID_GID_MISMATCH) + + write_audit_entry(audit_path, + 'requirements mismatch; wanted: %s' % + ', '.join(sorted(our_requirements))) + + print('') + print('audit log:') + with open(audit_path, 'rb') as fh: + print(fh.read()) + return 1 + else: + write_audit_entry(audit_path, 'used') # We don't need to adjust permissions here because the cache is # associated with a uid/gid and the first task should have set @@ -397,6 +427,8 @@ def main(args): '.cacherequires file; the cache names for this task are ' 'likely mis-configured or TASKCLUSTER_CACHES is not set ' 'properly' % cache) + + write_audit_entry(audit_path, 'missing .cacherequires') return 1 if 'TASKCLUSTER_VOLUMES' in os.environ: From a953b72db5fc23d9fc195f26adec9ccaf3095eb3 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 25 Oct 2017 17:23:16 -0700 Subject: [PATCH 65/69] Bug 1409876 - Refuse to perform a VCS checkout into a cache root; r=dustin This seems like a reasonable thing to enforce. MozReview-Commit-ID: 3BZQSkwRYeN --HG-- extra : rebase_source : 8dae62edb35202da0f0e90ddec3eacb212ada371 --- taskcluster/docker/recipes/run-task | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/taskcluster/docker/recipes/run-task b/taskcluster/docker/recipes/run-task index b0690f440e14..65c33af7f5ed 100755 --- a/taskcluster/docker/recipes/run-task +++ b/taskcluster/docker/recipes/run-task @@ -471,6 +471,14 @@ def main(args): if not checkout: return + # The checkout path becomes the working directory. Since there are + # special cache files in the cache's root directory and working + # directory purging could blow them away, disallow this scenario. + if os.path.exists(os.path.join(checkout, '.cacherequires')): + print('error: cannot perform vcs checkout into cache root: %s' % + checkout) + sys.exit(1) + # Ensure the directory for the source checkout exists. try: os.makedirs(os.path.dirname(checkout)) From 2b1deb45e510d3874825c69474d3edce33151821 Mon Sep 17 00:00:00 2001 From: Gregory Szorc Date: Wed, 25 Oct 2017 17:38:35 -0700 Subject: [PATCH 66/69] Bug 1409876 - Print warning when vcs operations aren't running on a cache or volume; r=dustin A lot of effort has been spent optimizing VCS operations for peak performance. But not utilizing caches or volumes for the VCS store or checkouts can undermine that work. Let's print a warning when VCS is configured sub-optimally. I'm pretty sure we still have some rogue tasks not using caches or volumes. We can convert this to a fatal error once those are fixed. MozReview-Commit-ID: C6CT1zViy75 --HG-- extra : rebase_source : 91760250bed263c789b95d16cc0542a53ca2bfbf --- taskcluster/docker/recipes/run-task | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/taskcluster/docker/recipes/run-task b/taskcluster/docker/recipes/run-task index 65c33af7f5ed..e1d251bedf1f 100755 --- a/taskcluster/docker/recipes/run-task +++ b/taskcluster/docker/recipes/run-task @@ -467,6 +467,22 @@ def main(args): b'to %d:%d\n' % (volume, uid, gid)) set_dir_permissions(volume, uid, gid) + all_caches_and_volumes = set(map(os.path.normpath, caches)) + all_caches_and_volumes |= set(map(os.path.normpath, volumes)) + + def path_in_cache_or_volume(path): + path = os.path.normpath(path) + + while path: + if path in all_caches_and_volumes: + return True + + path, child = os.path.split(path) + if not child: + break + + return False + def prepare_checkout_dir(checkout): if not checkout: return @@ -479,6 +495,13 @@ def main(args): checkout) sys.exit(1) + # TODO given the performance implications, consider making this a fatal + # error. + if not path_in_cache_or_volume(checkout): + print_line(b'vcs', b'WARNING: vcs checkout path (%s) not in cache ' + b'or volume; performance will likely suffer\n' % + checkout) + # Ensure the directory for the source checkout exists. try: os.makedirs(os.path.dirname(checkout)) @@ -497,6 +520,12 @@ def main(args): sys.exit(1) store_path = os.environ['HG_STORE_PATH'] + + if not path_in_cache_or_volume(store_path): + print_line(b'vcs', b'WARNING: HG_STORE_PATH (%s) not in cache or ' + b'volume; performance will likely suffer\n' % + store_path) + try: os.makedirs(store_path) except OSError as e: From 40e8eb46609dcb8780764774ec550afff1eed3a5 Mon Sep 17 00:00:00 2001 From: Ryan VanderMeulen Date: Wed, 25 Oct 2017 22:10:11 -0400 Subject: [PATCH 67/69] Backed out changeset 2c36f41ed77c (bug 1410123) for causing frequent Windows mochitest-gl leaks. MozReview-Commit-ID: LyBJTmVOJmE --HG-- extra : transplant_source : %1B%FA%EA%0C%03%EC%2B%00%EC%E8%F7ir%0F%F8%16%D6%83%2C%A9 --- js/src/gc/GCRuntime.h | 5 --- js/src/jsapi-tests/testGCFinalizeCallback.cpp | 14 +++---- js/src/jsgc.cpp | 39 ++++++------------- 3 files changed, 19 insertions(+), 39 deletions(-) diff --git a/js/src/gc/GCRuntime.h b/js/src/gc/GCRuntime.h index e26fc78ee484..01f4733f95b4 100644 --- a/js/src/gc/GCRuntime.h +++ b/js/src/gc/GCRuntime.h @@ -909,8 +909,6 @@ class GCRuntime bool fullGCForAtomsRequested() const { return fullGCForAtomsRequested_; } - bool shouldSweepAtomsZone() { return shouldSweepAtomsZone_; } - double computeHeapGrowthFactor(size_t lastBytes); size_t computeTriggerBytes(double growthFactor, size_t lastBytes); @@ -1303,9 +1301,6 @@ class GCRuntime /* Whether observed type information is being released in the current GC. */ ActiveThreadData releaseObservedTypes; - /* Whether the atoms table will be swept. */ - ActiveThreadOrGCTaskData shouldSweepAtomsZone_; - /* Singly linked list of zones to be swept in the background. */ ActiveThreadOrGCTaskData backgroundSweepZones; diff --git a/js/src/jsapi-tests/testGCFinalizeCallback.cpp b/js/src/jsapi-tests/testGCFinalizeCallback.cpp index f7b26649cd6d..14204b3923d0 100644 --- a/js/src/jsapi-tests/testGCFinalizeCallback.cpp +++ b/js/src/jsapi-tests/testGCFinalizeCallback.cpp @@ -4,7 +4,7 @@ #include "jsapi-tests/tests.h" -static const unsigned BufferSize = 32; +static const unsigned BufferSize = 20; static unsigned FinalizeCalls = 0; static JSFinalizeStatus StatusBuffer[BufferSize]; @@ -16,7 +16,7 @@ BEGIN_TEST(testGCFinalizeCallback) FinalizeCalls = 0; JS_GC(cx); CHECK(cx->runtime()->gc.isFullGc()); - CHECK(checkGroupCount(1)); + CHECK(checkSingleGroup()); CHECK(checkFinalizeStatus()); /* Full GC, incremental. */ @@ -50,7 +50,7 @@ BEGIN_TEST(testGCFinalizeCallback) JS::PrepareZoneForGC(global1->zone()); JS::GCForReason(cx, GC_NORMAL, JS::gcreason::API); CHECK(!cx->runtime()->gc.isFullGc()); - CHECK(checkGroupCount(1)); + CHECK(checkSingleGroup()); CHECK(checkFinalizeStatus()); /* Zone GC, non-incremental, multiple zones. */ @@ -60,7 +60,7 @@ BEGIN_TEST(testGCFinalizeCallback) JS::PrepareZoneForGC(global3->zone()); JS::GCForReason(cx, GC_NORMAL, JS::gcreason::API); CHECK(!cx->runtime()->gc.isFullGc()); - CHECK(checkGroupCount(1)); + CHECK(checkSingleGroup()); CHECK(checkFinalizeStatus()); /* Zone GC, incremental, single zone. */ @@ -73,7 +73,7 @@ BEGIN_TEST(testGCFinalizeCallback) } CHECK(!cx->runtime()->gc.isIncrementalGCInProgress()); CHECK(!cx->runtime()->gc.isFullGc()); - CHECK(checkGroupCount(2)); // One for our zone, one for the atoms zone. + CHECK(checkSingleGroup()); CHECK(checkFinalizeStatus()); /* Zone GC, incremental, multiple zones. */ @@ -152,10 +152,10 @@ virtual void uninit() override JSAPITest::uninit(); } -bool checkGroupCount(size_t count) +bool checkSingleGroup() { CHECK(FinalizeCalls < BufferSize); - CHECK(FinalizeCalls == count * 3 + 1); + CHECK(FinalizeCalls == 4); return true; } diff --git a/js/src/jsgc.cpp b/js/src/jsgc.cpp index 801465eeb234..e7e10293487e 100644 --- a/js/src/jsgc.cpp +++ b/js/src/jsgc.cpp @@ -4039,6 +4039,10 @@ ShouldCollectZone(Zone* zone, JS::gcreason::Reason reason) // Off-thread parsing is inhibited after the start of GC which prevents // races between creating atoms during parsing and sweeping atoms on the // active thread. + // + // Otherwise, we always schedule a GC in the atoms zone so that atoms which + // the other collected zones are using are marked, and we can update the + // set of atoms in use by the other collected zones at the end of the GC. if (zone->isAtomsZone()) return TlsContext.get()->canCollectAtoms(); @@ -5233,11 +5237,9 @@ UpdateAtomsBitmap(JSRuntime* runtime) // For convenience sweep these tables non-incrementally as part of bitmap // sweeping; they are likely to be much smaller than the main atoms table. - if (runtime->gc.shouldSweepAtomsZone()) { - runtime->unsafeSymbolRegistry().sweep(); - for (CompartmentsIter comp(runtime, SkipAtoms); !comp.done(); comp.next()) - comp->sweepVarNames(); - } + runtime->unsafeSymbolRegistry().sweep(); + for (CompartmentsIter comp(runtime, SkipAtoms); !comp.done(); comp.next()) + comp->sweepVarNames(); } static void @@ -5493,7 +5495,7 @@ GCRuntime::beginSweepingSweepGroup(FreeOp* fop, SliceBudget& budget) AutoSCC scc(stats(), sweepGroupIndex); - bool groupIncludesAtomsZone = false; + bool sweepingAtoms = false; for (SweepGroupZonesIter zone(rt); !zone.done(); zone.next()) { /* Set the GC state to sweeping. */ zone->changeGCState(Zone::Mark, Zone::Sweep); @@ -5502,7 +5504,7 @@ GCRuntime::beginSweepingSweepGroup(FreeOp* fop, SliceBudget& budget) zone->arenas.purge(); if (zone->isAtomsZone()) - groupIncludesAtomsZone = true; + sweepingAtoms = true; #ifdef DEBUG zone->gcLastSweepGroupIndex = sweepGroupIndex; @@ -5534,7 +5536,7 @@ GCRuntime::beginSweepingSweepGroup(FreeOp* fop, SliceBudget& budget) AutoLockHelperThreadState lock; Maybe updateAtomsBitmap; - if (groupIncludesAtomsZone) + if (sweepingAtoms) updateAtomsBitmap.emplace(rt, UpdateAtomsBitmap, PhaseKind::UPDATE_ATOMS_BITMAP, lock); AutoPhase ap(stats(), PhaseKind::SWEEP_COMPARTMENTS); @@ -5563,15 +5565,13 @@ GCRuntime::beginSweepingSweepGroup(FreeOp* fop, SliceBudget& budget) joinTask(task, PhaseKind::SWEEP_WEAK_CACHES, lock); } - if (groupIncludesAtomsZone && shouldSweepAtomsZone()) + if (sweepingAtoms) startSweepingAtomsTable(); // Queue all GC things in all zones for sweeping, either on the foreground // or on the background thread. for (SweepGroupZonesIter zone(rt); !zone.done(); zone.next()) { - if (zone->isAtomsZone() && !shouldSweepAtomsZone()) - continue; zone->arenas.queueForForegroundSweep(fop, ForegroundObjectFinalizePhase); zone->arenas.queueForForegroundSweep(fop, ForegroundNonObjectFinalizePhase); @@ -5655,9 +5655,6 @@ GCRuntime::beginSweepPhase(JS::gcreason::Reason reason, AutoLockForExclusiveAcce MOZ_ASSERT(!abortSweepAfterCurrentGroup); - MOZ_ASSERT(maybeAtomsToSweep.ref().isNothing()); - MOZ_ASSERT(!rt->atomsAddedWhileSweeping()); - AutoSetThreadIsSweeping threadIsSweeping; releaseHeldRelocatedArenas(); @@ -5832,7 +5829,7 @@ GCRuntime::startSweepingAtomsTable() IncrementalProgress GCRuntime::sweepAtomsTable(FreeOp* fop, SliceBudget& budget) { - if (!atomsZone->isGCSweeping() || !shouldSweepAtomsZone()) + if (!atomsZone->isGCSweeping()) return Finished; gcstats::AutoPhase ap(stats(), gcstats::PhaseKind::SWEEP_ATOMS_TABLE); @@ -6478,9 +6475,6 @@ GCRuntime::endSweepPhase(bool destroyingRuntime, AutoLockForExclusiveAccess& loc #endif AssertNoWrappersInGrayList(rt); - - MOZ_ASSERT(maybeAtomsToSweep.ref().isNothing()); - MOZ_ASSERT(!rt->atomsAddedWhileSweeping()); } void @@ -7244,15 +7238,6 @@ GCRuntime::gcCycle(bool nonincrementalByAPI, SliceBudget& budget, JS::gcreason:: // Note that GC callbacks are allowed to re-enter GC. AutoCallGCCallbacks callCallbacks(*this); - // We always schedule a GC in the atoms zone so that atoms which the other - // collected zones are using are marked, and we can update the set of atoms - // in use by the other collected zones at the end of the GC. However we - // only collect the atoms table if the atoms zone was actually scheduled. - if (!isIncrementalGCInProgress()) { - shouldSweepAtomsZone_ = atomsZone->isGCScheduled(); - atomsZone->scheduleGC(); - } - gcstats::AutoGCSlice agc(stats(), scanZonesBeforeGC(), invocationKind, budget, reason); minorGC(reason, gcstats::PhaseKind::EVICT_NURSERY_FOR_MAJOR_GC); From 13bc938b90a050e8664324742a7fb4b2966a2f89 Mon Sep 17 00:00:00 2001 From: ffxbld Date: Thu, 26 Oct 2017 11:32:58 -0700 Subject: [PATCH 68/69] No bug, Automated HSTS preload list update from host bld-linux64-spot-038 - a=hsts-update --- security/manager/ssl/nsSTSPreloadList.errors | 355 +++++++++---------- security/manager/ssl/nsSTSPreloadList.inc | 112 ++++-- 2 files changed, 246 insertions(+), 221 deletions(-) diff --git a/security/manager/ssl/nsSTSPreloadList.errors b/security/manager/ssl/nsSTSPreloadList.errors index b2d18bdd0846..064e1bafa011 100644 --- a/security/manager/ssl/nsSTSPreloadList.errors +++ b/security/manager/ssl/nsSTSPreloadList.errors @@ -12,18 +12,17 @@ 8t88.biz: could not connect to host 91-freedom.com: could not connect to host aaronmcguire.me: could not connect to host -abcdentalcare.com: could not connect to host abolition.co: could not connect to host accwing.com: could not connect to host acrossgw.com: could not connect to host aevpn.org: could not connect to host -afonso.io: could not connect to host afrikarl.de: could not connect to host agowa.eu: could not connect to host akiba-server.info: could not connect to host akoww.de: could not connect to host akul.co.in: could not connect to host al-f.net: could not connect to host +alauda-home.de: could not connect to host alexmol.tk: could not connect to host alexperry.io: could not connect to host alilialili.ga: could not connect to host @@ -33,6 +32,7 @@ altahrim.net: could not connect to host ameho.me: could not connect to host amua.fr: could not connect to host andrei-coman.com: could not connect to host +andrepicard.de: could not connect to host andrewhowden.com: could not connect to host anoneko.com: could not connect to host aoku3d.com: could not connect to host @@ -40,21 +40,21 @@ arent.kz: could not connect to host arksan.com.tr: could not connect to host artisense.de: could not connect to host artyland.ru: could not connect to host -asdyx.de: could not connect to host askmagicconch.com: could not connect to host assdecoeur.org: could not connect to host athi.pl: could not connect to host australiancattle.dog: could not connect to host +auto-anleitung.de: could not connect to host autostop-occasions.be: could not connect to host avi9526.pp.ua: could not connect to host awan.tech: could not connect to host awf0.xyz: could not connect to host +bacon-monitoring.org: could not connect to host baitulongbaycruises.com: could not connect to host balonmano.co: could not connect to host bandarifamily.com: could not connect to host bbdos.ru: could not connect to host beasel.biz: could not connect to host -bedrocklinux.org: could not connect to host belua.com: could not connect to host bencorby.com: could not connect to host benjamin-horvath.com: could not connect to host @@ -62,14 +62,15 @@ benzou-space.com: could not connect to host berna.fr: could not connect to host berthelier.me: could not connect to host bey.io: could not connect to host +billdestler.com: could not connect to host biou.me: could not connect to host bip.gov.sa: could not connect to host blumen-garage.de: could not connect to host -blumiges-fischbachtal.de: could not connect to host bm-i.ch: could not connect to host bodrumfarm.com: could not connect to host bolwerk.com.br: could not connect to host -botserver.de: could not connect to host +boomsaki.com: could not connect to host +boomsakis.com: could not connect to host bouncourseplanner.net: could not connect to host brentnewbury.com: could not connect to host brettabel.com: could not connect to host @@ -87,7 +88,6 @@ callabs.net: could not connect to host cannarobotics.com: could not connect to host carlandfaith.com: could not connect to host catgirl.me: could not connect to host -caulong-ao.net: could not connect to host centos.pub: could not connect to host challengeskins.com: could not connect to host cheah.xyz: could not connect to host @@ -107,12 +107,12 @@ cnlic.com: could not connect to host cocaine-import.agency: could not connect to host codercross.com: could not connect to host coffeetocode.me: could not connect to host +coincolors.co: could not connect to host colleencornez.com: could not connect to host colo-tech.com: could not connect to host comprehensiveihc.com: could not connect to host conception.sk: could not connect to host conniesacademy.com: could not connect to host -cooko.at: could not connect to host corinnanese.de: could not connect to host cosmeticasimple.com: could not connect to host cosplayer.com: could not connect to host @@ -132,6 +132,7 @@ dannyrohde.de: could not connect to host darlo.co.uk: could not connect to host datorb.com: could not connect to host dawnsonb.com: could not connect to host +dbcom.ru: could not connect to host dcc.moe: could not connect to host de-servers.de: could not connect to host deadsoul.net: could not connect to host @@ -148,20 +149,23 @@ dijks.com: could not connect to host dirtycat.ru: could not connect to host disadattamentolavorativo.it: could not connect to host disco-crazy-world.de: could not connect to host +disorderboutique.com: could not connect to host djangogolf.com: could not connect to host +dkn.go.id: could not connect to host dojifish.space: could not connect to host domengrad.ru: could not connect to host +dorianmuthig.com: could not connect to host dreizwosechs.de: could not connect to host droomhuis-in-zuid-holland-kopen.nl: could not connect to host duch.cloud: could not connect to host duelsow.eu: could not connect to host duks.com.br: could not connect to host duo.money: could not connect to host +dynamicsnetwork.net: could not connect to host eagleridgecampground.com: could not connect to host eatfitoutlet.com.br: could not connect to host eeb98.com: could not connect to host eez.ee: could not connect to host -egbert.net: could not connect to host ehuber.info: could not connect to host eled.io: could not connect to host elexel.ru: could not connect to host @@ -175,16 +179,20 @@ eveshaiwu.com: could not connect to host evio.com: could not connect to host exceed.global: could not connect to host expatads.com: could not connect to host +extreme-gaming.de: could not connect to host +extreme-gaming.us: could not connect to host ezhik-din.ru: could not connect to host fabrysociety.org: could not connect to host +factureenlinea.com: could not connect to host +faithwatch.org: could not connect to host farm24.co.uk: could not connect to host fernangp.com: could not connect to host +festival.house: could not connect to host filhomes.ph: could not connect to host findmybottleshop.com.au: could not connect to host firebaseio.com: could not connect to host firexarxa.de: could not connect to host first-time-offender.com: could not connect to host -fiws.net: could not connect to host fixmyglitch.com: could not connect to host flam.io: could not connect to host foodserve.in: could not connect to host @@ -212,26 +220,30 @@ gam3rs.de: could not connect to host game-gentle.com: could not connect to host gasbarkenora.com: could not connect to host gasnews.net: could not connect to host +gautham.it: could not connect to host gaygeeks.de: could not connect to host +gbcsummercamps.com: could not connect to host gdhzcgs.com: could not connect to host geeks.berlin: could not connect to host geneve.guide: could not connect to host -geoffreyrichard.com: could not connect to host georgmayer.eu: could not connect to host -geri.be: could not connect to host geti2p.com: could not connect to host +getsubs.net: could not connect to host getwarden.net: could not connect to host gevaulug.fr: could not connect to host gfoss.gr: could not connect to host ggss.cf: could not connect to host glasgestaltung.biz: could not connect to host gnom.me: could not connect to host +godrealms.com: could not connect to host google: could not connect to host gottfridsberg.org: could not connect to host gozadentro.com: could not connect to host gradsm-ci.net: could not connect to host +graffen.dk: could not connect to host greboid.co.uk: could not connect to host greboid.com: could not connect to host +greenpartyofnewmilford.org: could not connect to host greenroach.ru: could not connect to host griesser2.de: could not connect to host gritte.net: could not connect to host @@ -250,11 +262,9 @@ hentaimaster.net: could not connect to host here.ml: could not connect to host hg881.com: could not connect to host hiraku.me: could not connect to host -homezhi.com.tw: could not connect to host hoodoo.io: could not connect to host hoodoo.tech: could not connect to host horvathd.eu: could not connect to host -hundter.com: could not connect to host ibase.com: could not connect to host iemb.tk: could not connect to host ifxnet.com: could not connect to host @@ -268,6 +278,7 @@ injust.me: could not connect to host insouciant.org: could not connect to host investorloanshub.com: could not connect to host is-sw.net: could not connect to host +isaacman.tech: could not connect to host islief.com: could not connect to host issuesofconcern.in: could not connect to host itpro-mg.de: could not connect to host @@ -279,9 +290,12 @@ jamesj.me: could not connect to host janaundgeorgsagenja.eu: could not connect to host jaredfraser.com: could not connect to host javascriptlab.fr: could not connect to host +jessevictors.com: could not connect to host jhburton.co.uk: could not connect to host jie.dance: could not connect to host jobmedic.com: could not connect to host +joecod.es: could not connect to host +johannes.wtf: could not connect to host jonathansanchez.pro: could not connect to host jonpads.com: could not connect to host joostbovee.nl: could not connect to host @@ -290,6 +304,7 @@ justmy.website: could not connect to host k-wallet.com: could not connect to host k82.org: could not connect to host kamikaichimaru.com: could not connect to host +kanaanonline.org: could not connect to host kanjo.de: could not connect to host kapo.info: could not connect to host karanlyons.com: could not connect to host @@ -299,7 +314,6 @@ kawaiiku.com: could not connect to host kawaiiku.de: could not connect to host kenrogers.co: could not connect to host kenvix.com: could not connect to host -keyerror.com: could not connect to host kieranweightman.me: could not connect to host kinepolis-studio.ga: could not connect to host kjoglum.me: could not connect to host @@ -308,7 +322,6 @@ kollawat.me: could not connect to host konventseliten.se: could not connect to host kousaku.jp: could not connect to host kozmik.co: could not connect to host -kram.nz: could not connect to host kteen.info: could not connect to host kylling.io: could not connect to host lacasa.fr: could not connect to host @@ -327,6 +340,8 @@ lezdomsm.com: could not connect to host lheinrich.org: could not connect to host libbitcoin.org: could not connect to host lifenexto.com: could not connect to host +linan.blog: could not connect to host +lingerieonline.com.br: could not connect to host linksanitizer.com: could not connect to host linksextremist.at: could not connect to host linuxcommand.ru: could not connect to host @@ -346,8 +361,10 @@ luenwarneke.com: could not connect to host maartenterpstra.xyz: could not connect to host macedopesca.com.br: could not connect to host madrants.net: could not connect to host +magnacumlaude.co: could not connect to host mahefa.co.uk: could not connect to host mail4geek.com: could not connect to host +maritim.go.id: could not connect to host markoh.co.uk: could not connect to host markus-ullmann.de: could not connect to host martin-mattel.com: could not connect to host @@ -359,15 +376,16 @@ meanevo.com: could not connect to host mecanicadom.com: could not connect to host mediadandy.com: could not connect to host melonstudios.net: could not connect to host -mensagensperfeitas.com.br: could not connect to host mentax.net: could not connect to host metachris.com: could not connect to host metrobriefs.com: could not connect to host +michaelcullen.name: could not connect to host mingy.ddns.net: could not connect to host miyugirls.com: could not connect to host modalogi.com: could not connect to host modded-minecraft-server-list.com: could not connect to host moe-max.jp: could not connect to host +mofohome.dyndns.org: could not connect to host monloyer.quebec: could not connect to host mosaique-lachenaie.fr: could not connect to host moskva.guide: could not connect to host @@ -381,6 +399,7 @@ munduch.cz: could not connect to host myrent.quebec: could not connect to host naphex.rocks: could not connect to host narodsovety.ru: could not connect to host +nbl.org.tw: could not connect to host ncdesigns-studio.com: could not connect to host nedcf.org.uk: could not connect to host negai.moe: could not connect to host @@ -395,10 +414,12 @@ niouininon.eu: could not connect to host niva.synology.me: could not connect to host nkb.in.th: could not connect to host nnote.net: could not connect to host +nolag.host: could not connect to host notcompletelycorrect.com: could not connect to host notesforpebble.com: could not connect to host novascan.net: could not connect to host novelabs.eu: could not connect to host +nowcost.com: could not connect to host nowremindme.com: could not connect to host nrnjn.xyz: could not connect to host nup.pw: could not connect to host @@ -425,17 +446,19 @@ pear2pear.de: could not connect to host perkbrian.com: could not connect to host persjrp.ca: could not connect to host persoform.ch: could not connect to host +petko.me: could not connect to host pgpmail.cc: could not connect to host philippa.cool: could not connect to host +php-tuning.de: could not connect to host picallo.es: could not connect to host pinebaylibrary.org: could not connect to host +pitfire.io: could not connect to host plaasprodukte.com: could not connect to host planbox.info: could not connect to host -playform.cloud: could not connect to host -playmaza.live: could not connect to host plussizereviews.com: could not connect to host pointagri.com: could not connect to host polit.im: could not connect to host +polkam.go.id: could not connect to host poolinstallers.co.za: could not connect to host pouets.ovh: could not connect to host powerentertainment.tv: could not connect to host @@ -448,13 +471,12 @@ qoqo.us: could not connect to host qrforex.com: could not connect to host qto.net: could not connect to host rainbin.com: could not connect to host -rasebo.ro: could not connect to host real-compare.com: could not connect to host realwoo.com: could not connect to host +reichl-online.net: could not connect to host reignsphere.net: could not connect to host reinaertvandecruys.me: could not connect to host reismil.ch: could not connect to host -relsak.cz: could not connect to host repaxan.com: could not connect to host reqognize.com: could not connect to host reth.ch: could not connect to host @@ -478,14 +500,18 @@ salzamt.tk: could not connect to host samaritan.tech: could not connect to host sanatrans.com: could not connect to host sanmuding.com: could not connect to host -sanpham-balea.org: could not connect to host sarndipity.com: could not connect to host +savecashindia.com: could not connect to host schamlosharmlos.de: could not connect to host scm-2017.org: could not connect to host +seanstrout.com: could not connect to host +sebastian-lutsch.de: could not connect to host sectest.ml: could not connect to host +security.love: could not connect to host securitymap.wiki: could not connect to host sellmoretires.com: could not connect to host semantheme.fr: could not connect to host +seproco.com: could not connect to host servecrypt.com: could not connect to host servfefe.com: could not connect to host sesha.co.za: could not connect to host @@ -494,7 +520,6 @@ shadowplus.net: could not connect to host shadowrocket.net: could not connect to host sharevari.com: could not connect to host shavingks.com: could not connect to host -shellday.cc: could not connect to host sheratan.web.id: could not connect to host sheying.tm: could not connect to host shirakaba-cc.com: could not connect to host @@ -504,8 +529,12 @@ sigsegv.run: could not connect to host siliconchip.me: could not connect to host simbolo.co.uk: could not connect to host simplerses.com: could not connect to host +sinfulforums.net: could not connect to host siqi.wang: could not connect to host sky-aroma.com: could not connect to host +skylocker.net: could not connect to host +skylocker.nl: could not connect to host +slovoice.org: could not connect to host smith.is: could not connect to host socialworkout.com: could not connect to host socialworkout.net: could not connect to host @@ -513,18 +542,21 @@ socialworkout.org: could not connect to host socialworkout.tv: could not connect to host socketize.com: could not connect to host solos.im: could not connect to host -somali-derp.com: could not connect to host soulema.com: could not connect to host sowingseasons.com: could not connect to host spacountryexplorer.org.au: could not connect to host +spdf.net: could not connect to host spicywombat.com: could not connect to host spom.net: could not connect to host +stadtgartenla.com: could not connect to host statgram.me: could not connect to host static-assets.io: could not connect to host stickswag.cf: could not connect to host stpip.com: could not connect to host stylle.me: could not connect to host +surdam.casa: could not connect to host sviz.pro: could not connect to host +szamitogepdepo.com: could not connect to host takusan.ru: could not connect to host talktwincities.com: could not connect to host tdsb.cf: could not connect to host @@ -533,7 +565,6 @@ techask.it: could not connect to host techpit.us: could not connect to host telugu4u.net: could not connect to host tenispopular.com: could not connect to host -themillerslive.com: could not connect to host theprivacysolution.com: could not connect to host theresa-mayer.eu: could not connect to host thesehighsandlows.com: could not connect to host @@ -542,7 +573,9 @@ thinktux.net: could not connect to host tierarztpraxis-weinert.de: could not connect to host tiliaze.info: could not connect to host tiliaze.net: could not connect to host +tniad.mil.id: could not connect to host tobi-mayer.de: could not connect to host +tortugan.com.br: could not connect to host totallynotaserver.com: could not connect to host totch.de: could not connect to host totot.net: could not connect to host @@ -552,7 +585,6 @@ tucnak.eu: could not connect to host turn-sticks.com: could not connect to host tusb.ml: could not connect to host tuts4you.com: could not connect to host -tuxcloud.net: could not connect to host twiri.net: could not connect to host twotube.ie: could not connect to host tyil.work: could not connect to host @@ -565,19 +597,16 @@ uwimonacs.org.jm: could not connect to host vadik.me: could not connect to host valshamar.is: could not connect to host vanderstraeten.dynv6.net: could not connect to host +vanohaker.ru: could not connect to host vapeshopsupply.com: could not connect to host varta.io: could not connect to host venmos.com: could not connect to host versfin.net: could not connect to host verteilergetriebe.info: could not connect to host viditut.com: could not connect to host -vilog.me: could not connect to host visiontree.eu: could not connect to host vlogge.com: could not connect to host -vmgirls.com: could not connect to host vmug.pl: could not connect to host -vomitb.in: could not connect to host -wangjiatun.com.tw: could not connect to host warlions.info: could not connect to host watashi.bid: could not connect to host watchweasel.com: could not connect to host @@ -587,8 +616,6 @@ webdesigneauclaire.com: could not connect to host webtech.com.br: could not connect to host webthings.com.br: could not connect to host wecanvisit.com: could not connect to host -weed.ren: could not connect to host -weicn.org: could not connect to host welby.cat: could not connect to host werhatunsverraten.eu: could not connect to host werkinc.de: could not connect to host @@ -606,7 +633,6 @@ xia100.xyz: could not connect to host xiaoyu.net: could not connect to host xing.ml: could not connect to host xqin.net: could not connect to host -xtom.com.hk: could not connect to host xtremenutrition.com.br: could not connect to host yarogneva.ru: could not connect to host yffengshi.ml: could not connect to host @@ -615,13 +641,12 @@ yobbelwobbel.de: could not connect to host youyoulemon.com: could not connect to host yum0.cn: could not connect to host yux.fr: could not connect to host +z33.ch: could not connect to host zaoext.com: could not connect to host +zberger.com: could not connect to host zellari.ru: could not connect to host zenfusion.fr: could not connect to host -zenghx.tk: could not connect to host zerosource.net: could not connect to host -zhaochen.xyz: could not connect to host -zifb.in: could not connect to host zorz.info: could not connect to host ztytian.com: could not connect to host zulu7.com: could not connect to host @@ -673,7 +698,7 @@ zzw.ca: could not connect to host 166166.com: could not connect to host 16deza.com: did not receive HSTS header 16packets.com: could not connect to host -173vpn.cn: did not receive HSTS header +173vpn.cn: could not connect to host 173vpns.com: did not receive HSTS header 188betwarriors.co.uk: could not connect to host 188trafalgar.ca: did not receive HSTS header @@ -718,7 +743,7 @@ zzw.ca: could not connect to host 33338522.com: could not connect to host 3338522.com: could not connect to host 33drugstore.com: did not receive HSTS header -341.mg: could not connect to host +341.mg: did not receive HSTS header 3555aa.com: could not connect to host 35792.de: could not connect to host 360gradus.com: did not receive HSTS header @@ -804,7 +829,6 @@ zzw.ca: could not connect to host 8522z.com: could not connect to host 88.to: could not connect to host 8888av.co: did not receive HSTS header -888azino.com: did not receive HSTS header 888lu.co: could not connect to host 89955.com: could not connect to host 899699.com: did not receive HSTS header @@ -837,6 +861,7 @@ aaron-gustafson.com: did not receive HSTS header aaronkimmig.de: could not connect to host aati.info: did not receive HSTS header abareplace.com: did not receive HSTS header +abcdentalcare.com: did not receive HSTS header abcheck.se: could not connect to host abearofsoap.com: could not connect to host abecodes.net: did not receive HSTS header @@ -875,7 +900,7 @@ accounts-p.com: could not connect to host accuritconsulting.com: did not receive HSTS header accuritpresence.com: did not receive HSTS header acgmoon.org: did not receive HSTS header -acheirj.com.br: did not receive HSTS header +acheirj.com.br: could not connect to host acheritage.co.uk: could not connect to host acisonline.net: did not receive HSTS header acoffeeshops.com: could not connect to host @@ -908,12 +933,13 @@ adesa-asesoria.com: did not receive HSTS header adfa-1.com: could not connect to host adhs-chaoten.net: did not receive HSTS header adindexr.com: could not connect to host +adiponectinsupplement.net: did not receive HSTS header admin.google.com: did not receive HSTS header (error ignored - included regardless) admiral.dp.ua: did not receive HSTS header admitcard.co.in: did not receive HSTS header admsel.ec: could not connect to host adoge.me: could not connect to host -adonairelogios.com.br: did not receive HSTS header +adonairelogios.com.br: could not connect to host adopteunsiteflash.com: could not connect to host adquisitio.de: could not connect to host adquisitio.in: could not connect to host @@ -1012,7 +1038,6 @@ alessandro.pw: did not receive HSTS header alessandroz.pro: could not connect to host alethearose.com: did not receive HSTS header alexandre.sh: did not receive HSTS header -alexbaker.org: did not receive HSTS header alexdodge.ca: could not connect to host alexvetter.de: could not connect to host alfa24.pro: could not connect to host @@ -1079,7 +1104,7 @@ amo-entreprise-et-commerce.fr: could not connect to host amoory.com: could not connect to host amoozesh98.com: did not receive HSTS header amoozesh98.ir: did not receive HSTS header -amorimendes.com.br: did not receive HSTS header +amorimendes.com.br: could not connect to host amri.nl: did not receive HSTS header anabol.nl: could not connect to host anadoluefessporkulubu.org: could not connect to host @@ -1160,10 +1185,11 @@ anycoin.me: could not connect to host anymetrix.io: did not receive HSTS header aocast.info: could not connect to host aojf.fr: could not connect to host +aomberg.com: did not receive HSTS header aov.io: could not connect to host aozora.moe: could not connect to host apachelounge.com: did not receive HSTS header -apaginastore.com.br: did not receive HSTS header +apaginastore.com.br: could not connect to host apeasternpower.com: could not connect to host api.cloudflare.com: max-age too low: 300 api.mega.co.nz: could not connect to host @@ -1193,7 +1219,7 @@ apps-for-fishing.com: could not connect to host appsbystudio.co.uk: did not receive HSTS header appsdash.io: could not connect to host appuro.com: did not receive HSTS header -aquariumaccessories.shop: did not receive HSTS header +aquariumaccessories.shop: could not connect to host aquilalab.com: could not connect to host arabdigitalexpression.org: did not receive HSTS header aradulconteaza.ro: could not connect to host @@ -1219,7 +1245,7 @@ armory.consulting: could not connect to host armory.supplies: could not connect to host armsday.com: could not connect to host armytricka.cz: did not receive HSTS header -arod.tk: could not connect to host +arod.tk: did not receive HSTS header aromaclub.nl: did not receive HSTS header aroundme.org: did not receive HSTS header arpa.ph: did not receive HSTS header @@ -1230,7 +1256,7 @@ arrow-cloud.nl: could not connect to host arrowfunction.com: could not connect to host ars-design.net: could not connect to host art2web.net: could not connect to host -artartefatos.com.br: did not receive HSTS header +artartefatos.com.br: could not connect to host artesupra.com: did not receive HSTS header arthan.me: could not connect to host artifex21.com: could not connect to host @@ -1346,7 +1372,6 @@ ayahuascaadvisor.com: could not connect to host ayor.jp: could not connect to host ayor.tech: could not connect to host ayuru.info: could not connect to host -az.search.yahoo.com: max-age too low: 86400 azazy.net: max-age too low: 2592000 azino777.ru: did not receive HSTS header azprep.us: could not connect to host @@ -1383,7 +1408,7 @@ baleares.party: could not connect to host balloonphp.com: could not connect to host balnearionaturaspa.com: did not receive HSTS header bambooforest.nl: could not connect to host -bambumania.com.br: did not receive HSTS header +bambumania.com.br: could not connect to host bananabandy.com: could not connect to host banbanchs.com: could not connect to host banchethai.com: did not receive HSTS header @@ -1428,11 +1453,9 @@ bcweightlifting.ca: could not connect to host bddemir.com: could not connect to host bde-epitech.fr: could not connect to host be-real.life: did not receive HSTS header -be.search.yahoo.com: max-age too low: 86400 beach-inspector.com: did not receive HSTS header beachi.es: could not connect to host beaglewatch.com: could not connect to host -beanjuice.me: could not connect to host beardydave.com: did not receive HSTS header beastlog.tk: could not connect to host beastowner.com: did not receive HSTS header @@ -1444,7 +1467,7 @@ bedabox.com: max-age too low: 0 bedeta.de: could not connect to host bedreid.dk: did not receive HSTS header bedrijvenadministratie.nl: could not connect to host -beerboutique.com.br: did not receive HSTS header +beerboutique.com.br: could not connect to host beetleroadstories.com: could not connect to host befundup.com: could not connect to host behere.be: could not connect to host @@ -1517,7 +1540,6 @@ bffm.biz: could not connect to host bgcparkstad.nl: did not receive HSTS header bgmn.net: max-age too low: 0 bhatia.at: [Exception... "Component returned failure code: 0x80004005 (NS_ERROR_FAILURE) [nsISiteSecurityService.processHeader]" nsresult: "0x80004005 (NS_ERROR_FAILURE)" location: "JS frame :: /builds/slave/m-cen-l64-periodicupdate-00000/getHSTSPreloadList.js :: processStsHeader :: line 119" data: no] -bi.search.yahoo.com: max-age too low: 86400 biblerhymes.com: did not receive HSTS header bidon.ca: did not receive HSTS header bieberium.de: could not connect to host @@ -1531,7 +1553,7 @@ bigbrownpromotions.com.au: did not receive HSTS header biglou.com: max-age too low: 3153600 bigshinylock.minazo.net: could not connect to host biguixhe.net: did not receive HSTS header -bijouxdegriffe.com.br: did not receive HSTS header +bijouxdegriffe.com.br: could not connect to host bikermusic.net: could not connect to host bildiri.ci: did not receive HSTS header bildschirmflackern.de: did not receive HSTS header @@ -1607,7 +1629,7 @@ bloomzoomy.ru: max-age too low: 172800 blowjs.com: could not connect to host bltc.co: could not connect to host blubbablasen.de: could not connect to host -blucas.org: did not receive HSTS header +blucas.org: could not connect to host blue17.co.uk: did not receive HSTS header bluebill.net: did not receive HSTS header bluecon.eu: did not receive HSTS header @@ -1829,7 +1851,7 @@ camashop.de: did not receive HSTS header cambridgeanalytica.net: could not connect to host cambridgeanalytica.org: did not receive HSTS header camelservers.com: did not receive HSTS header -camisadotorcedor.com.br: did not receive HSTS header +camisadotorcedor.com.br: could not connect to host camjackson.net: did not receive HSTS header cammarkets.com: could not connect to host camolist.com: could not connect to host @@ -1838,6 +1860,7 @@ campbellsoftware.co.uk: could not connect to host campfire.co.il: did not receive HSTS header campusdrugprevention.gov: did not receive HSTS header camsanalytics.com: could not connect to host +canadiangamblingchoice.com: did not receive HSTS header candicontrols.com: did not receive HSTS header candratech.com: could not connect to host candygirl.shop: could not connect to host @@ -1885,16 +1908,14 @@ cavaleria.ro: did not receive HSTS header caveclan.org: did not receive HSTS header cavedevs.de: could not connect to host cavedroid.xyz: could not connect to host -cbengineeringinc.com: did not receive HSTS header +cbengineeringinc.com: could not connect to host cbhq.net: could not connect to host ccblog.de: did not receive HSTS header ccretreatandfarm.com: did not receive HSTS header ccsys.com: could not connect to host cctech.ph: could not connect to host -cd.search.yahoo.com: max-age too low: 86400 cd0.us: could not connect to host cdcpartners.gov: could not connect to host -cdeck.net: did not receive HSTS header cdnb.co: could not connect to host cdndepo.com: could not connect to host cdreporting.co.uk: did not receive HSTS header @@ -1922,7 +1943,6 @@ cfcnexus.org: max-age too low: 2 cfcproperties.com: did not receive HSTS header cfetengineering.com: could not connect to host cfoitplaybook.com: could not connect to host -cg.search.yahoo.com: max-age too low: 86400 cganx.org: could not connect to host cgerstner.eu: could not connect to host cgsshelper.tk: could not connect to host @@ -1933,7 +1953,7 @@ chancat.blog: max-age too low: 2592000 chandlerredding.com: did not receive HSTS header changetip.com: did not receive HSTS header chaos.fail: could not connect to host -chaoswebs.net: did not receive HSTS header +chaoswebs.net: could not connect to host charityclear.com: did not receive HSTS header charitystreet.co.uk: could not connect to host charliemcneive.com: could not connect to host @@ -1955,7 +1975,7 @@ checkout.google.com: did not receive HSTS header (error ignored - included regar cheerflow.com: could not connect to host cheesetart.my: could not connect to host cheetah85.de: could not connect to host -chefgalles.com.br: did not receive HSTS header +chefgalles.com.br: could not connect to host chejianer.cn: could not connect to host chenfengyi.com: could not connect to host chensir.net: could not connect to host @@ -2059,7 +2079,6 @@ cloudimag.es: could not connect to host cloudimprovedtest.com: could not connect to host cloudlink.club: could not connect to host cloudns.com.au: could not connect to host -cloudopt.net: did not receive HSTS header clouds.webcam: could not connect to host cloudspotterapp.com: did not receive HSTS header cloudstoragemaus.com: could not connect to host @@ -2080,7 +2099,6 @@ cmci.dk: did not receive HSTS header cmsbattle.com: could not connect to host cmscafe.ru: did not receive HSTS header cmso-cal.com: could not connect to host -cn.search.yahoo.com: max-age too low: 86400 cncn.us: did not receive HSTS header co-driversphoto.se: could not connect to host co50.com: did not receive HSTS header @@ -2129,7 +2147,7 @@ colmexpro.com: did not receive HSTS header colognegaming.net: could not connect to host coloradocomputernetworking.net: could not connect to host colorlib.com: did not receive HSTS header -colorunhas.com.br: did not receive HSTS header +colorunhas.com.br: could not connect to host comfortdom.ua: did not receive HSTS header comfortticket.de: did not receive HSTS header comfy.cafe: did not receive HSTS header @@ -2186,7 +2204,7 @@ coolchevy.org.ua: did not receive HSTS header coole-meister.de: could not connect to host coolrc.me: could not connect to host cooxa.com: could not connect to host -copshop.com.br: did not receive HSTS header +copshop.com.br: could not connect to host cor-ser.es: could not connect to host coralproject.net: did not receive HSTS header coralrosado.com.br: did not receive HSTS header @@ -2200,9 +2218,9 @@ corgicloud.com: could not connect to host corkyoga.site: could not connect to host cormactagging.ie: could not connect to host cormilu.com.br: did not receive HSTS header -coroasdefloresonline.com.br: did not receive HSTS header +coroasdefloresonline.com.br: could not connect to host corozanu.ro: did not receive HSTS header -corpoatletico.com.br: did not receive HSTS header +corpoatletico.com.br: could not connect to host corporateencryption.com: could not connect to host correctpaardbatterijnietje.nl: did not receive HSTS header corruption-mc.net: could not connect to host @@ -2218,7 +2236,6 @@ covenantbank.net: could not connect to host coverdat.com: did not receive HSTS header coverduck.ru: could not connect to host cpuvinf.eu.org: could not connect to host -cr.search.yahoo.com: max-age too low: 86400 cracking.org: did not receive HSTS header craftbeerbarn.co.uk: could not connect to host craftedge.xyz: could not connect to host @@ -2295,7 +2312,6 @@ csvalpha.nl: did not receive HSTS header csvape.com: did not receive HSTS header ct-status.org: could not connect to host ct-watches.dk: did not receive HSTS header -ct.search.yahoo.com: max-age too low: 86400 cthulhuden.com: could not connect to host ctrl.blog: did not receive HSTS header cubecart-demo.co.uk: did not receive HSTS header @@ -2342,7 +2358,7 @@ d4rkdeagle.tk: could not connect to host dabbot.org: did not receive HSTS header dad256.tk: could not connect to host dadtheimpaler.com: could not connect to host -dah5.com: could not connect to host +dah5.com: did not receive HSTS header dahl-pind.dk: did not receive HSTS header dai-rin.co.jp: could not connect to host dailystormerpodcasts.com: could not connect to host @@ -2386,7 +2402,6 @@ darkpony.ru: could not connect to host darksideof.it: could not connect to host darkstance.org: could not connect to host darktree.in: could not connect to host -darkwater.info: did not receive HSTS header daropia.org: could not connect to host darrenellis.xyz: did not receive HSTS header dash-board.jp: did not receive HSTS header @@ -2451,6 +2466,7 @@ deight.co: could not connect to host deinserverhost.de: did not receive HSTS header dekasan.ru: could not connect to host delayrefunds.co.uk: could not connect to host +delbrouck.ch: did not receive HSTS header deliverance.co.uk: could not connect to host deltaconcepts.de: did not receive HSTS header delvj.org: could not connect to host @@ -2507,14 +2523,14 @@ devtub.com: did not receive HSTS header devuan.org: did not receive HSTS header dewebwerf.nl: did not receive HSTS header dewin.io: could not connect to host -dfrance.com.br: did not receive HSTS header +dfrance.com.br: could not connect to host dfviana.com.br: max-age too low: 2592000 dhaynes.xyz: could not connect to host dhpcs.com: did not receive HSTS header dhpiggott.net: did not receive HSTS header diablotine.rocks: could not connect to host diagnosia.com: did not receive HSTS header -diamondcare.com.br: did not receive HSTS header +diamondcare.com.br: could not connect to host dianlujitao.com: did not receive HSTS header diannaobos.com: did not receive HSTS header dicando.com: max-age too low: 2592000 @@ -2557,6 +2573,7 @@ distractionco.de: did not receive HSTS header ditrutoancau.vn: could not connect to host dittvertshus.no: could not connect to host diva-ey.com: could not connect to host +diversityflags.com.au: did not receive HSTS header divvymonkey.com: did not receive HSTS header divvyradio.com: did not receive HSTS header dixiediner.com: did not receive HSTS header @@ -2581,7 +2598,6 @@ dnsbird.net: could not connect to host dnsbird.org: could not connect to host dnsknowledge.com: did not receive HSTS header do-do.tk: could not connect to host -do.search.yahoo.com: max-age too low: 86400 doak.io: could not connect to host dobet.in: could not connect to host docid.io: could not connect to host @@ -2636,7 +2652,6 @@ dosenbierrepublik.com: did not receive HSTS header dot42.no: could not connect to host dotadata.me: could not connect to host dotspaperie.com: could not connect to host -dougferris.id.au: could not connect to host doujin.nagoya: could not connect to host dovecotadmin.org: could not connect to host doveholesband.co.uk: did not receive HSTS header @@ -2653,7 +2668,7 @@ dragonstower.net: could not connect to host dragonteam.ninja: could not connect to host drakefortreasurer.sexy: could not connect to host drakenson.de: did not receive HSTS header -drastosasports.com.br: did not receive HSTS header +drastosasports.com.br: could not connect to host draw.uy: could not connect to host drdevil.ru: could not connect to host dreadbyte.com: could not connect to host @@ -2699,7 +2714,6 @@ dullsir.com: did not receive HSTS header dungi.org: could not connect to host duongpho.com: did not receive HSTS header duskopy.top: could not connect to host -dutchessuganda.com: did not receive HSTS header dutchrank.com: did not receive HSTS header duuu.ch: could not connect to host dycontrol.de: could not connect to host @@ -2851,7 +2865,7 @@ emanga.su: did not receive HSTS header embroidered-stuff.com: could not connect to host emeldi-commerce.com: max-age too low: 0 emesolutions.net: did not receive HSTS header -emiele.com.br: did not receive HSTS header +emiele.com.br: could not connect to host emilyhorsman.com: did not receive HSTS header eminovic.me: could not connect to host emjainteractive.com: did not receive HSTS header @@ -2901,7 +2915,7 @@ entourneebeetle.com: could not connect to host entrepreneur.or.id: did not receive HSTS header enum.eu.org: could not connect to host enumify.com: could not connect to host -enviapresentes.com.br: did not receive HSTS header +enviapresentes.com.br: could not connect to host envygeeks.com: could not connect to host eol34.com: could not connect to host eoldb.org: could not connect to host @@ -2951,7 +2965,7 @@ especificosba.com.mx: could not connect to host espo.com.ua: did not receive HSTS header espra.com: could not connect to host esquonic.com: could not connect to host -essenzialeenxovais.com.br: did not receive HSTS header +essenzialeenxovais.com.br: could not connect to host essexghosthunters.co.uk: did not receive HSTS header estaciona.guru: could not connect to host estebanborges.com: did not receive HSTS header @@ -3000,6 +3014,7 @@ evi.be: did not receive HSTS header evilsay.com: could not connect to host evin.ml: could not connect to host evites.me: could not connect to host +evoludis.net: did not receive HSTS header evomon.com: could not connect to host evossd.tk: could not connect to host evowl.com: could not connect to host @@ -3069,7 +3084,6 @@ fanflow.com: did not receive HSTS header fantasyfootballpundit.com: did not receive HSTS header fanyl.cn: could not connect to host farces.com: did not receive HSTS header -farhadexchange.com: did not receive HSTS header farwat.ru: did not receive HSTS header fashion.net: did not receive HSTS header fashioncare.cz: did not receive HSTS header @@ -3116,7 +3130,6 @@ fettbrot.tk: did not receive HSTS header fexmen.com: could not connect to host ff-getzersdorf.at: did not receive HSTS header ffmradio.de: did not receive HSTS header -fhg90.com: did not receive HSTS header fics-twosigma.com: could not connect to host fideleslaici.com: did not receive HSTS header fiendishmasterplan.com: did not receive HSTS header @@ -3160,7 +3173,7 @@ fitea.cz: did not receive HSTS header fitiapp.com: could not connect to host fitness.gov: could not connect to host fitnesswerk.de: could not connect to host -fitshop.com.br: did not receive HSTS header +fitshop.com.br: could not connect to host fitsw.com: did not receive HSTS header five.vn: did not receive HSTS header fivestarsitters.com: did not receive HSTS header @@ -3168,9 +3181,9 @@ fivezerocreative.com: did not receive HSTS header fixico-staging.nl: could not connect to host fixingdns.com: could not connect to host fixtectools.co.za: could not connect to host -fj.search.yahoo.com: max-age too low: 86400 fjruiz.es: did not receive HSTS header fkcovering.be: could not connect to host +fktpm.ru: did not receive HSTS header flags.ninja: could not connect to host flairbros.at: could not connect to host flajshans.cz: did not receive HSTS header @@ -3270,7 +3283,7 @@ freshfind.xyz: could not connect to host freshlymind.com: did not receive HSTS header frezbo.com: could not connect to host frforms.com: did not receive HSTS header -fridaperfumaria.com.br: did not receive HSTS header +fridaperfumaria.com.br: could not connect to host fridolinka.cz: could not connect to host friendica.ch: could not connect to host friendlyfiregameshow.com: could not connect to host @@ -3343,7 +3356,7 @@ gakkainavi4.net: did not receive HSTS header galardi.org: could not connect to host galena.io: could not connect to host galenskap.eu: could not connect to host -galeriadobimba.com.br: did not receive HSTS header +galeriadobimba.com.br: could not connect to host gallery44.org: did not receive HSTS header galoisvpn.xyz: could not connect to host gambitcloud.net: could not connect to host @@ -3401,13 +3414,15 @@ genuxation.com: could not connect to host genyaa.com: could not connect to host genyhitch.com: did not receive HSTS header geoffdev.com: could not connect to host +geoffreyrichard.com: did not receive HSTS header geopals.net: did not receive HSTS header george-brighton.co.uk: could not connect to host georgebrighton.co.uk: could not connect to host georgesonarthurs.com.au: did not receive HSTS header -gereja.ga: did not receive HSTS header +gereja.ga: could not connect to host gerencianet.com.br: did not receive HSTS header gereon.ch: could not connect to host +geri.be: did not receive HSTS header gesiwista.net: could not connect to host gesunde-smoothies.de: did not receive HSTS header get-cctv.com: could not connect to host @@ -3423,7 +3438,7 @@ getfestify.com: did not receive HSTS header getfirepress.com: could not connect to host getgeek.eu: did not receive HSTS header getgeek.se: did not receive HSTS header -getinternet.de: max-age too low: 0 +getinternet.de: did not receive HSTS header getkai.co.nz: did not receive HSTS header getlantern.org: did not receive HSTS header getlifti.com: could not connect to host @@ -3447,7 +3462,6 @@ gheorghesarcov.ga: could not connect to host gheorghesarcov.tk: could not connect to host ghkim.net: could not connect to host ghostcir.com: could not connect to host -ghrelinblocker.org: did not receive HSTS header giakki.eu: could not connect to host gianlucapartengo.photography: did not receive HSTS header gibraltar-firma.com: did not receive HSTS header @@ -3474,7 +3488,6 @@ git-stuff.tk: could not connect to host github.party: did not receive HSTS header givemyanswer.com: could not connect to host gizzo.sk: could not connect to host -gl.search.yahoo.com: max-age too low: 86400 glass.google.com: did not receive HSTS header (error ignored - included regardless) glasslikes.com: did not receive HSTS header glentakahashi.com: max-age too low: 0 @@ -3493,7 +3506,6 @@ gloucesterphotographer.com: did not receive HSTS header glubbforum.de: did not receive HSTS header glws.org: did not receive HSTS header gm-assicurazioni.it: could not connect to host -gm.search.yahoo.com: max-age too low: 86400 gmail.com: did not receive HSTS header (error ignored - included regardless) gmat.ovh: could not connect to host gmoes.at: max-age too low: 600000 @@ -3540,7 +3552,6 @@ gorilla-gym.site: could not connect to host gorillow.com: could not connect to host goshop.cz: did not receive HSTS header gotgenes.com: could not connect to host -gotirupati.com: did not receive HSTS header goto.google.com: did not receive HSTS header (error ignored - included regardless) goto.msk.ru: did not receive HSTS header gotocloud.ru: did not receive HSTS header @@ -3701,6 +3712,7 @@ haku.moe: could not connect to host hakugin.org: could not connect to host halo.red: could not connect to host haman.nl: could not connect to host +hammer-corp.com: did not receive HSTS header hancc.net: could not connect to host handenafvanhetmedischdossier.nl: could not connect to host handicapindeles.nl: did not receive HSTS header @@ -3709,7 +3721,7 @@ handiworker.com: could not connect to host handleidingkwijt.com: did not receive HSTS header handsandall.com: did not receive HSTS header hanfu.la: could not connect to host -hangar18-modelismo.com.br: did not receive HSTS header +hangar18-modelismo.com.br: could not connect to host hanimalis.fr: could not connect to host hans-natur.de: did not receive HSTS header hao2taiwan.com: max-age too low: 0 @@ -3844,7 +3856,6 @@ hjw-kunstwerk.de: could not connect to host hlyue.com: did not receive HSTS header hm1ch.ovh: could not connect to host hmm.nyc: could not connect to host -hn.search.yahoo.com: max-age too low: 86400 hoast.xyz: could not connect to host hobaugh.social: could not connect to host hodne.io: could not connect to host @@ -3915,7 +3926,6 @@ http418.xyz: could not connect to host httphacker.com: could not connect to host https.ps: could not connect to host httpstatuscode418.xyz: could not connect to host -hu.search.yahoo.com: max-age too low: 86400 huangh.com: could not connect to host huarongdao.com: did not receive HSTS header hubert.systems: did not receive HSTS header @@ -3932,7 +3942,7 @@ huodongweb.com: could not connect to host hup.blue: could not connect to host huskybutt.dog: could not connect to host hyatt.com: did not receive HSTS header -hydra.ws: could not connect to host +hydra.ws: did not receive HSTS header hydrodipcenter.nl: did not receive HSTS header hydronium.cf: could not connect to host hydronium.ga: could not connect to host @@ -3960,7 +3970,7 @@ ibnuwebhost.com: could not connect to host icabanken.se: did not receive HSTS header icaforsakring.se: did not receive HSTS header ice.yt: could not connect to host -icepink.com.br: did not receive HSTS header +icepink.com.br: could not connect to host icfl.com.br: could not connect to host ich-find-den-g.net: could not connect to host ich-mach-druck.eu: did not receive HSTS header @@ -3987,7 +3997,6 @@ idgsupply.com: did not receive HSTS header idisplay.es: did not receive HSTS header idlekernel.com: could not connect to host idontexist.me: did not receive HSTS header -ie.search.yahoo.com: max-age too low: 86400 ieeesb.nl: did not receive HSTS header ieeesbe.nl: did not receive HSTS header ierna.com: did not receive HSTS header @@ -4411,7 +4420,7 @@ jumbster.com: max-age too low: 2592000 jumping-duck.com: could not connect to host junaos.com: did not receive HSTS header junaos.xyz: did not receive HSTS header -jundimax.com.br: did not receive HSTS header +jundimax.com.br: could not connect to host junge-selbsthilfe.info: could not connect to host junglegoat.xyz: did not receive HSTS header junjung.me: max-age too low: 0 @@ -4563,7 +4572,7 @@ kletterkater.com: did not receive HSTS header klicktojob.de: could not connect to host klunkergarten.org: could not connect to host knapen.io: max-age too low: 604800 -knccloud.com: could not connect to host +knccloud.com: did not receive HSTS header kngk-transavto.ru: could not connect to host knigadel.com: did not receive HSTS header knightsbridgegroup.org: could not connect to host @@ -4603,7 +4612,6 @@ kotovstyle.ru: could not connect to host koukni.cz: did not receive HSTS header kourpe.online: could not connect to host kprog.net: could not connect to host -kr.search.yahoo.com: max-age too low: 86400 kraigwalker.com: did not receive HSTS header kralik.xyz: could not connect to host kravelindo-adventure.com: could not connect to host @@ -4642,7 +4650,7 @@ kuro346.moe: could not connect to host kurrietv.nl: did not receive HSTS header kurtmclester.com: did not receive HSTS header kurz.pw: could not connect to host -kurzonline.com.br: did not receive HSTS header +kurzonline.com.br: could not connect to host kweddingplanning.com: did not receive HSTS header kwok.cc: did not receive HSTS header kwok.tv: could not connect to host @@ -4651,7 +4659,6 @@ kxind.cn: did not receive HSTS header kyanite.co: could not connect to host kylapps.com: did not receive HSTS header kyochon.fr: could not connect to host -kz.search.yahoo.com: max-age too low: 86400 kzjnet.com: could not connect to host l-rickroll-i.pw: could not connect to host la-flora-negra.de: could not connect to host @@ -4680,7 +4687,6 @@ lagier.xyz: could not connect to host lagoza.name: could not connect to host lainchan.org: did not receive HSTS header laisashop.com.br: could not connect to host -lakhesis.net: could not connect to host lamaland.ru: did not receive HSTS header lambda-complex.org: could not connect to host lambdafive.co.uk: could not connect to host @@ -4788,7 +4794,6 @@ lg21.co: could not connect to host lgiswa.com.au: did not receive HSTS header lgrs.com.au: did not receive HSTS header lgts.se: could not connect to host -li.search.yahoo.com: max-age too low: 86400 liaillustr.at: did not receive HSTS header liam-w.com: did not receive HSTS header liamjack.fr: could not connect to host @@ -4861,9 +4866,10 @@ littleqiu.net: could not connect to host liujunyang.com: could not connect to host livedemo.io: could not connect to host livej.am: could not connect to host +livekortti.com: did not receive HSTS header liverewrite.com: could not connect to host livi.co: could not connect to host -liviababynet.com.br: did not receive HSTS header +liviababynet.com.br: could not connect to host lixiang.one: could not connect to host lixingcong.com: could not connect to host lkp111138.me: could not connect to host @@ -4893,7 +4899,7 @@ logymedia.com: could not connect to host loisircreatif.net: did not receive HSTS header lojadocristaozinho.com.br: could not connect to host lojafilipaper.com.br: did not receive HSTS header -lojashowdecozinha.com.br: did not receive HSTS header +lojashowdecozinha.com.br: could not connect to host lojasviavento.com.br: could not connect to host lojavalcapelli.com.br: could not connect to host loli.bz: did not receive HSTS header @@ -4925,7 +4931,6 @@ lotuscloud.de: could not connect to host lotuscloud.org: could not connect to host louiewatch.com: could not connect to host loveable.de: could not connect to host -loveandadoreboutique.com: did not receive HSTS header lovelifelovelive.com: could not connect to host lovelyblogacademy.com: did not receive HSTS header lovelycorral.com: did not receive HSTS header @@ -4940,11 +4945,9 @@ lrhstsa.com: could not connect to host ls-a.org: did not receive HSTS header lsky.cn: did not receive HSTS header lsp-sports.de: did not receive HSTS header -lt.search.yahoo.com: max-age too low: 86400 ltbytes.com: could not connect to host ltechnologygroup.com: did not receive HSTS header ltu.social: could not connect to host -lu.search.yahoo.com: max-age too low: 86400 lucas-garte.com: did not receive HSTS header lucaterzini.com: could not connect to host luclu7.pw: could not connect to host @@ -4972,7 +4975,6 @@ lusis.net: did not receive HSTS header lustrumxi.nl: could not connect to host luther.fi: did not receive HSTS header luxus-russen.de: did not receive HSTS header -lv.search.yahoo.com: max-age too low: 86400 lycly.top: did not receive HSTS header lydia-und-simon.de: could not connect to host lydiagorstein.com: could not connect to host @@ -5019,7 +5021,7 @@ mailing-femprendedores.com: did not receive HSTS header mailing-jbgg.com: did not receive HSTS header main-street-seo.com: did not receive HSTS header maintainerheaven.ch: could not connect to host -maisalto.ind.br: did not receive HSTS header +maisalto.ind.br: could not connect to host majesnix.org: did not receive HSTS header majncloud.tk: could not connect to host make-pizza.info: could not connect to host @@ -5128,6 +5130,7 @@ maternalsafety.org: did not receive HSTS header mateusmeyer.com.br: did not receive HSTS header mathers.ovh: did not receive HSTS header matillat.ovh: did not receive HSTS header +matlabjo.ir: did not receive HSTS header matomeplus.co: could not connect to host matrict.com: could not connect to host matrip.de: could not connect to host @@ -5168,6 +5171,7 @@ mcga.media: could not connect to host mclab.su: could not connect to host mclist.it: could not connect to host mclyr.com: max-age too low: 7776000 +mcmillansedationdentistry.com: did not receive HSTS header mcooperlaw.com: did not receive HSTS header mcuexchange.com: did not receive HSTS header mdfnet.se: did not receive HSTS header @@ -5190,7 +5194,6 @@ medienservice-fritz.de: did not receive HSTS header medirich.co: could not connect to host meditek-dv.ru: could not connect to host medm-test.com: could not connect to host -medyotan.ga: max-age too low: 0 medzinenews.com: did not receive HSTS header meedoennoordkop.nl: did not receive HSTS header meedoenzaanstad.nl: did not receive HSTS header @@ -5227,7 +5230,6 @@ meredithkm.info: did not receive HSTS header meritz.rocks: could not connect to host mersinunivercity.com: did not receive HSTS header merson.me: could not connect to host -mes10doigts.ovh: could not connect to host meshlab.co: could not connect to host mesmoque.com: could not connect to host metagrader.com: could not connect to host @@ -5241,7 +5243,7 @@ metis.pw: could not connect to host metrans-spedition.de: could not connect to host metricaid.com: did not receive HSTS header metzgerei-birkenhof.de: could not connect to host -meucosmetico.com.br: did not receive HSTS header +meucosmetico.com.br: could not connect to host meuemail.pro: could not connect to host mexbt.com: could not connect to host mexicanbusinessweb.mx: did not receive HSTS header @@ -5424,6 +5426,7 @@ montanacures.org: could not connect to host montanwerk.de: could not connect to host montonicms.com: could not connect to host moon.lc: could not connect to host +moonchart.co.uk: did not receive HSTS header moonless.net: could not connect to host moonloupe.com: could not connect to host moosemanstudios.com: could not connect to host @@ -5456,7 +5459,7 @@ mountainmusicpromotions.com: did not receive HSTS header moviedollars.com: did not receive HSTS header moviesabout.net: could not connect to host moy-gorod.od.ua: did not receive HSTS header -moy.cat: could not connect to host +moy.cat: did not receive HSTS header mozoa.net: could not connect to host mp3juices.is: could not connect to host mpkossen.com: did not receive HSTS header @@ -5464,7 +5467,7 @@ mqas.net: could not connect to host mr-hosting.com: could not connect to host mrawe.com: could not connect to host mrdani.net: could not connect to host -mredsanders.net: could not connect to host +mredsanders.net: did not receive HSTS header mrettich.org: did not receive HSTS header mrhack.cz: did not receive HSTS header mrning.com: did not receive HSTS header @@ -5476,11 +5479,9 @@ mstd.tokyo: did not receive HSTS header mstdn-tech.jp: could not connect to host mszaki.com: did not receive HSTS header mt.me.uk: could not connect to host -mt.search.yahoo.com: max-age too low: 86400 mtamaki.com: could not connect to host mtdn.jp: could not connect to host mtg-esport.de: did not receive HSTS header -mu.search.yahoo.com: max-age too low: 86400 mujadin.se: did not receive HSTS header mullen.net.au: did not receive HSTS header mundodapoesia.com: did not receive HSTS header @@ -5508,7 +5509,6 @@ muzgra.in: did not receive HSTS header muzykaprzeszladoplay.pl: could not connect to host mvanmarketing.nl: did not receive HSTS header mvsecurity.nl: could not connect to host -mw.search.yahoo.com: max-age too low: 86400 mwohlfarth.de: did not receive HSTS header my-owncloud.com: could not connect to host my-voice.nl: did not receive HSTS header @@ -5572,7 +5572,7 @@ nabru.co.uk: did not receive HSTS header nabytko.cz: could not connect to host nacktetatsachen.at: did not receive HSTS header nadia.pt: could not connect to host -nagios.by: could not connect to host +nagios.by: did not receive HSTS header nagoya-kyuyo.com: could not connect to host naiharngym.com: did not receive HSTS header najedlo.sk: could not connect to host @@ -5692,7 +5692,6 @@ ngine.ch: did not receive HSTS header nginxnudes.com: could not connect to host nglr.org: could not connect to host ngt-service.ru: did not receive HSTS header -ni.search.yahoo.com: max-age too low: 86400 niagarafalls.ca: did not receive HSTS header nibiisclaim.com: could not connect to host nicestresser.fr: could not connect to host @@ -5742,11 +5741,13 @@ nolimitsbook.de: did not receive HSTS header nolte.work: could not connect to host nomorebytes.de: could not connect to host noodlesandwich.com: did not receive HSTS header +nootropicsource.com: did not receive HSTS header nope.website: could not connect to host nopex.no: could not connect to host nopol.de: could not connect to host norandom.com: could not connect to host norb.at: could not connect to host +nordic-survival.de: did not receive HSTS header nordlicht.photography: did not receive HSTS header norge.guide: could not connect to host northcutt.com: did not receive HSTS header @@ -5766,7 +5767,6 @@ nou.si: could not connect to host nouvelle-vague-saint-cast.fr: did not receive HSTS header nova-elearning.com: did not receive HSTS header novaco.in: max-age too low: 3600 -novacoast.com: did not receive HSTS header novacraft.me: did not receive HSTS header novatrucking.de: could not connect to host novavoidhowl.com: did not receive HSTS header @@ -5776,7 +5776,6 @@ nowak.ninja: did not receive HSTS header noworrywp.com: could not connect to host nowprotein.com: did not receive HSTS header nozoe.jp: could not connect to host -np.search.yahoo.com: max-age too low: 86400 npol.de: could not connect to host nq7.pl: could not connect to host nrd.li: could not connect to host @@ -5850,7 +5849,7 @@ offshore-firma.org: could not connect to host offshore-unternehmen.com: could not connect to host offshorefirma-gruenden.com: could not connect to host offshoremarineparts.com: did not receive HSTS header -oficinadocelular.com.br: did not receive HSTS header +oficinadocelular.com.br: could not connect to host oganek.ie: could not connect to host ogogoshop.com: could not connect to host ohling.org: could not connect to host @@ -5874,7 +5873,7 @@ ollehbizev.co.kr: could not connect to host olswangtrainees.com: could not connect to host omacostudio.com: could not connect to host omgaanmetidealen.com: could not connect to host -ominto.com: max-age too low: 0 +ominto.com: did not receive HSTS header omniscimus.net: could not connect to host omniti.com: max-age too low: 1 omquote.gq: could not connect to host @@ -5908,7 +5907,6 @@ onlinecompliance.org: did not receive HSTS header onlinedemo.hu: could not connect to host onlinedeposit.us: could not connect to host onlinekasino.de: did not receive HSTS header -onlinepokerspelen.be: did not receive HSTS header onlinepollsph.com: could not connect to host onlineschadestaat.nl: did not receive HSTS header onlinespielothek.com: did not receive HSTS header @@ -5974,6 +5972,7 @@ oroweatorganic.com: could not connect to host orthodoxy.lt: did not receive HSTS header orwell1984.today: did not receive HSTS header osaiyuwu.com: could not connect to host +osborneinn.com: did not receive HSTS header oscloud.com: could not connect to host oscloud.com.ua: could not connect to host oscreen.me: could not connect to host @@ -6020,7 +6019,6 @@ p1c.pw: could not connect to host p3.marketing: did not receive HSTS header p3in.com: did not receive HSTS header p8r.de: could not connect to host -pa.search.yahoo.com: max-age too low: 86400 paavolastudio.com: could not connect to host pablocamino.tk: could not connect to host packlane.com: did not receive HSTS header @@ -6053,7 +6051,7 @@ pants-off.xyz: could not connect to host pantsu.cat: did not receive HSTS header papalytics.com: could not connect to host papeda.net: could not connect to host -papelariadante.com.br: did not receive HSTS header +papelariadante.com.br: could not connect to host papercard.co.uk: did not receive HSTS header papercrunch.io: could not connect to host papierniak.net: could not connect to host @@ -6098,7 +6096,7 @@ paulbunyanmls.com: did not receive HSTS header paulproell.at: could not connect to host paulyang.cn: did not receive HSTS header pavelfojt.cz: did not receive HSTS header -paxdei.com.br: did not receive HSTS header +paxdei.com.br: could not connect to host paxwinkel.nl: did not receive HSTS header pay.gigahost.dk: did not receive HSTS header paybro.eu: did not receive HSTS header @@ -6157,7 +6155,7 @@ personaldatabasen.no: could not connect to host personalinjurylist.com: did not receive HSTS header personalizedtouch.co: could not connect to host perthdevicelab.com: did not receive HSTS header -pestalozzishop.com.br: did not receive HSTS header +pestalozzishop.com.br: could not connect to host pet-nsk.ru: could not connect to host petchart.net: could not connect to host peterkshultz.com: did not receive HSTS header @@ -6167,14 +6165,14 @@ petit.site: could not connect to host petplum.com: could not connect to host petravdbos.nl: did not receive HSTS header petrkrapek.cz: did not receive HSTS header -petrolplus.ru: did not receive HSTS header +petrolplus.ru: max-age too low: 7776000 petrovsky.pro: could not connect to host petsittersservices.com: could not connect to host pettsy.com: could not connect to host pewboards.com: could not connect to host pexieapp.com: did not receive HSTS header peytonfarrar.com: did not receive HSTS header -pfgshop.com.br: did not receive HSTS header +pfgshop.com.br: could not connect to host pflegedienst-gratia.de: max-age too low: 300 pgcpbc.com: could not connect to host pgpm.io: could not connect to host @@ -6182,6 +6180,7 @@ pgtb.be: did not receive HSTS header phalconist.com: could not connect to host pharmgkb.org: could not connect to host phdsupply.com: did not receive HSTS header +philadelphiacandies.com: did not receive HSTS header phillipgoldfarb.com: did not receive HSTS header phillmoore.com: did not receive HSTS header philpropertygroup.com: could not connect to host @@ -6242,7 +6241,6 @@ pixi.chat: could not connect to host pixi.me: did not receive HSTS header pizzadoc.ch: could not connect to host pjbet.mg: did not receive HSTS header -pk.search.yahoo.com: max-age too low: 86400 pkautodesign.com: did not receive HSTS header pkschat.com: could not connect to host placefade.com: could not connect to host @@ -6342,7 +6340,6 @@ pozyczka-bez-zaswiadczen.pl: did not receive HSTS header ppr-truby.ru: could not connect to host ppuu.org: did not receive HSTS header ppy3.com: did not receive HSTS header -pr.search.yahoo.com: max-age too low: 86400 pr2studio.com: could not connect to host practicallabs.com: could not connect to host practodev.com: could not connect to host @@ -6400,7 +6397,7 @@ projectascension.io: could not connect to host projectdp.net: could not connect to host projectherogames.xyz: did not receive HSTS header projectmercury.space: could not connect to host -projetoresecia.com: did not receive HSTS header +projetoresecia.com: could not connect to host promecon-gmbh.de: did not receive HSTS header prontocleaners.co.uk: could not connect to host prontolight.com: did not receive HSTS header @@ -6448,13 +6445,12 @@ purewebmasters.com: could not connect to host purplebricks.com: did not receive HSTS header purplemoon.mobi: did not receive HSTS header purplestar.mobi: did not receive HSTS header -purpoz.com.br: did not receive HSTS header +purpoz.com.br: could not connect to host push.world: did not receive HSTS header pushapp.org: did not receive HSTS header pwd.ovh: could not connect to host pwm.jp: could not connect to host pwnsdx.pw: could not connect to host -py.search.yahoo.com: max-age too low: 86400 pyol.org: could not connect to host pypi-mirrors.org: did not receive HSTS header pypi-status.org: could not connect to host @@ -6529,11 +6525,11 @@ ramarka.de: could not connect to host ramatola.uk: did not receive HSTS header ramon-c.nl: could not connect to host ramonj.nl: could not connect to host -ramshair.jp: did not receive HSTS header randomcage.com: did not receive HSTS header randomcloud.net: could not connect to host randomhero.cloud: could not connect to host randomwinpicker.de: could not connect to host +randstaddirect.nl: did not receive HSTS header randy.pw: could not connect to host ranegroup.hosting: could not connect to host rankthespot.com: could not connect to host @@ -6594,6 +6590,7 @@ recommended.reviews: could not connect to host redair.es: did not receive HSTS header redar.xyz: could not connect to host reddit.com: did not receive HSTS header +reddit2kindle.com: did not receive HSTS header rede.ca: did not receive HSTS header redhorsemountainranch.com: did not receive HSTS header redicabo.de: could not connect to host @@ -6702,7 +6699,7 @@ rijnmondeg.nl: did not receive HSTS header rika.me: could not connect to host ring0.xyz: did not receive HSTS header ringh.am: could not connect to host -rionewyork.com.br: did not receive HSTS header +rionewyork.com.br: could not connect to host ripa.io: did not receive HSTS header rippleunion.com: could not connect to host riskmgt.com.au: could not connect to host @@ -6784,7 +6781,7 @@ rugs.ca: did not receive HSTS header ruig.jp: could not connect to host ruiming.me: did not receive HSTS header ruitershoponline.nl: did not receive HSTS header -rumoterra.com.br: did not receive HSTS header +rumoterra.com.br: could not connect to host runawebinar.nl: could not connect to host runhardt.eu: did not receive HSTS header runtl.com: did not receive HSTS header @@ -6797,7 +6794,6 @@ rusl.me: could not connect to host russmarshall.com: could not connect to host ruxit.com: did not receive HSTS header rw-solutions.tech: could not connect to host -rw.search.yahoo.com: max-age too low: 86400 rww.name: max-age too low: 0 rx-contact.com: could not connect to host rxprep.com: did not receive HSTS header @@ -6821,12 +6817,13 @@ sah3.net: could not connect to host saharalondon.com: max-age too low: 0 saharmassachi.com: could not connect to host sail-nyc.com: did not receive HSTS header +saintjohnlutheran.church: did not receive HSTS header sairai.bid: did not receive HSTS header sakaki.anime.my: max-age too low: 5184000 sakaserver.com: did not receive HSTS header sakib.ninja: did not receive HSTS header sakurabuff.com: could not connect to host -salserocafe.com: could not connect to host +salserocafe.com: did not receive HSTS header salserototal.com: could not connect to host saltedskies.com: could not connect to host saltra.online: did not receive HSTS header @@ -6844,7 +6841,7 @@ sandviks.com: did not receive HSTS header sanex.ca: could not connect to host sanguoxiu.com: could not connect to host sanhei.ch: did not receive HSTS header -sansage.com.br: did not receive HSTS header +sansage.com.br: could not connect to host sansdev.com: could not connect to host sansemea.com: did not receive HSTS header santing.net: did not receive HSTS header @@ -6924,7 +6921,7 @@ scribbleserver.com: could not connect to host scribe.systems: could not connect to host scrion.com: could not connect to host script.google.com: did not receive HSTS header (error ignored - included regardless) -scriptenforcer.net: did not receive HSTS header +scriptenforcer.net: could not connect to host scriptict.nl: could not connect to host scrollstory.com: did not receive HSTS header sdhmanagementgroup.com: could not connect to host @@ -7228,7 +7225,6 @@ smusg.com: did not receive HSTS header smzsq.com: could not connect to host snailing.org: could not connect to host snakehosting.dk: did not receive HSTS header -snapappts.com: could not connect to host snapworks.net: did not receive HSTS header snekchat.moe: could not connect to host snel4u.nl: could not connect to host @@ -7259,8 +7255,8 @@ software.rocks: could not connect to host sogeek.me: could not connect to host sokolka.tv: did not receive HSTS header sol-3.de: did not receive HSTS header -solarcom.com.br: did not receive HSTS header -solentes.com.br: did not receive HSTS header +solarcom.com.br: could not connect to host +solentes.com.br: could not connect to host solidfuelappliancespares.co.uk: did not receive HSTS header solidus.systems: did not receive HSTS header soljem.com: did not receive HSTS header @@ -7278,11 +7274,12 @@ soply.com: did not receive HSTS header soporte.cc: could not connect to host sorensen-online.com: could not connect to host sosaka.ml: could not connect to host -sosiolog.com: could not connect to host +sosiolog.com: did not receive HSTS header sotor.de: did not receive HSTS header soucorneteiro.com.br: could not connect to host soulfulglamour.uk: could not connect to host soundforsound.co.uk: did not receive HSTS header +soundtalks.be: max-age too low: 0 sourcelair.com: did not receive HSTS header southcoastswords.com: did not receive HSTS header southernjamusa.com: did not receive HSTS header @@ -7305,6 +7302,7 @@ spamloco.net: did not receive HSTS header sparelib.com: could not connect to host spark.team: could not connect to host sparklingsparklers.com: did not receive HSTS header +sparmedo.de: did not receive HSTS header sparsa.army: could not connect to host sparta-trade.com: could not connect to host spauted.com: could not connect to host @@ -7334,7 +7332,7 @@ sponsortobias.com: could not connect to host sportchirp-internal.azurewebsites.net: did not receive HSTS header sporthit.ru: did not receive HSTS header sportifik.com: did not receive HSTS header -sportingoods.com.br: did not receive HSTS header +sportingoods.com.br: could not connect to host sportscollection.com.br: did not receive HSTS header sportwette.eu: did not receive HSTS header spot-events.com: could not connect to host @@ -7475,6 +7473,7 @@ subwayz.de: did not receive HSTS header sudo.li: did not receive HSTS header sudokian.io: did not receive HSTS header sugarcitycon.com: could not connect to host +sugarsweetorsour.com: did not receive HSTS header suian.or.jp: max-age too low: 86400 suite73.org: could not connect to host summitbankofkc.com: did not receive HSTS header @@ -7501,7 +7500,7 @@ supereight.net: did not receive HSTS header superiorfloridavacation.com: did not receive HSTS header superklima.ro: did not receive HSTS header superlandnetwork.de: did not receive HSTS header -superlentes.com.br: did not receive HSTS header +superlentes.com.br: could not connect to host supersalescontest.nl: did not receive HSTS header superschnappchen.de: could not connect to host supersecurefancydomain.com: could not connect to host @@ -7515,9 +7514,8 @@ supweb.ovh: did not receive HSTS header surfeasy.com: did not receive HSTS header surfone-leucate.com: did not receive HSTS header survivalistplanet.com: could not connect to host -sussexwebdesigns.info: could not connect to host +sussexwebdesigns.info: did not receive HSTS header suzukikenichi.com: did not receive HSTS header -sv.search.yahoo.com: max-age too low: 86400 svatba-frantovi.cz: could not connect to host svenluijten.com: did not receive HSTS header svenskacasino.com: did not receive HSTS header @@ -7589,7 +7587,6 @@ tamex.xyz: could not connect to host tandarts-haarlem.nl: did not receive HSTS header tangel.me: could not connect to host tangibilizing.com: could not connect to host -tangzhao.net: could not connect to host taniesianie.pl: did not receive HSTS header tankfreunde.de: did not receive HSTS header tante-bugil.net: could not connect to host @@ -7616,6 +7613,7 @@ tauchkater.de: could not connect to host tavoittaja.fi: did not receive HSTS header tavopica.lt: did not receive HSTS header taxbench.com: could not connect to host +taxi-24std.de: did not receive HSTS header taxiindenbosch.nl: did not receive HSTS header taxsnaps.co.nz: did not receive HSTS header tazz.in: could not connect to host @@ -7685,7 +7683,7 @@ tellingua.com: did not receive HSTS header temehu.com: did not receive HSTS header tempcraft.net: could not connect to host tempo.co: did not receive HSTS header -tempodecolheita.com.br: did not receive HSTS header +tempodecolheita.com.br: could not connect to host tempus-aquilae.de: could not connect to host tendertool.nl: could not connect to host tenerife-villas.com: did not receive HSTS header @@ -7698,11 +7696,12 @@ teos.online: could not connect to host terra.by: did not receive HSTS header terrax.berlin: could not connect to host terrax.info: could not connect to host -teru.com.br: did not receive HSTS header +teru.com.br: could not connect to host testandroid.xyz: could not connect to host tetramax.eu: did not receive HSTS header teufelsystem.de: could not connect to host teulon.eu: could not connect to host +text-shirt.com: did not receive HSTS header texte-zur-taufe.de: did not receive HSTS header textoplano.xyz: could not connect to host textracer.dk: could not connect to host @@ -7884,7 +7883,6 @@ tjeckien.guide: could not connect to host tjullrich.de: could not connect to host tkappertjedemetamorfose.nl: could not connect to host tkonstantopoulos.tk: could not connect to host -tlach.cz: did not receive HSTS header tlcdn.net: could not connect to host tlo.hosting: could not connect to host tlo.link: could not connect to host @@ -7901,7 +7899,7 @@ tncnanet.com.br: could not connect to host tno.io: could not connect to host tnrsca.jp: did not receive HSTS header toast.al: could not connect to host -tobaby.com.br: did not receive HSTS header +tobaby.com.br: could not connect to host tobias-bielefeld.de: did not receive HSTS header tobiasmathes.com: could not connect to host tobiasmathes.name: could not connect to host @@ -7941,7 +7939,7 @@ top-stage.net: could not connect to host topdeskdev.net: could not connect to host topmarine.se: could not connect to host topnewstoday.org: could not connect to host -toppik.com.br: did not receive HSTS header +toppik.com.br: could not connect to host topshelfguild.com: could not connect to host toptranslation.com: did not receive HSTS header torahanytime.com: did not receive HSTS header @@ -7956,7 +7954,7 @@ torv.rocks: did not receive HSTS header tosecure.link: could not connect to host toshnix.com: could not connect to host toshub.com: could not connect to host -totalle.com.br: did not receive HSTS header +totalle.com.br: could not connect to host totalworkout.fitness: did not receive HSTS header totem-eshop.cz: could not connect to host toucedo.de: could not connect to host @@ -8012,7 +8010,7 @@ trinitycore.org: max-age too low: 2592000 tripdelta.com: did not receive HSTS header tripinsider.club: did not receive HSTS header trixies-wish.nz: could not connect to host -trixy.com.br: did not receive HSTS header +trixy.com.br: could not connect to host troi.de: did not receive HSTS header trollme.me: could not connect to host trollscave.xyz: could not connect to host @@ -8032,7 +8030,7 @@ tsrstore.gq: could not connect to host tssouthernpower.com: max-age too low: 0 tsurimap.com: could not connect to host tsutsumi-kogyo.jp: could not connect to host -ttackmedical.com.br: did not receive HSTS header +ttackmedical.com.br: could not connect to host tts.co.nz: did not receive HSTS header tuamoronline.com: could not connect to host tubbutec.de: did not receive HSTS header @@ -8088,6 +8086,8 @@ tx041cap.org: did not receive HSTS header txclimbers.com: could not connect to host txf.pw: could not connect to host ty2u.com: did not receive HSTS header +tylerharcourt.ca: did not receive HSTS header +tylerharcourt.net: did not receive HSTS header tylian.net: max-age too low: 0 typeofweb.com: did not receive HSTS header typingrevolution.com: did not receive HSTS header @@ -8098,7 +8098,6 @@ tyroremotes.no: did not receive HSTS header tyskland.guide: could not connect to host tzappa.net: could not connect to host u-blox.com: max-age too low: 0 -ua.search.yahoo.com: max-age too low: 86400 uadp.pw: did not receive HSTS header uber.com.au: did not receive HSTS header uberfunction.com: did not receive HSTS header @@ -8117,7 +8116,7 @@ ukk.dk: did not receive HSTS header ukrgadget.com: could not connect to host ulabox.cat: did not receive HSTS header ulabox.es: did not receive HSTS header -ullamodaintima.com.br: did not receive HSTS header +ullamodaintima.com.br: could not connect to host ulmo.dk: could not connect to host ulti.gq: did not receive HSTS header ultieme.be: did not receive HSTS header @@ -8215,7 +8214,6 @@ ustr.gov: max-age too low: 86400 utilitronium-shockwave.com: could not connect to host utleieplassen.no: could not connect to host utopiagalaxy.space: could not connect to host -utopialgb.org.uk: did not receive HSTS header utopian-surgery.com: could not connect to host utopianconcept.com: did not receive HSTS header utopianhomespa.com: did not receive HSTS header @@ -8227,9 +8225,7 @@ utvbloggen.se: did not receive HSTS header uvarov.pw: did not receive HSTS header uwstartups.com: could not connect to host uxux.pl: could not connect to host -uy.search.yahoo.com: max-age too low: 86400 uyym.com: could not connect to host -uz.search.yahoo.com: max-age too low: 86400 uzmandroid.com: did not receive HSTS header uzmandroid.net: could not connect to host uzmandroid.top: could not connect to host @@ -8262,16 +8258,15 @@ vanacht.co.za: did not receive HSTS header vanajahosting.com: did not receive HSTS header vande-walle.eu: did not receive HSTS header vanderkley.it: could not connect to host -vanessabalibridal.com: did not receive HSTS header vanestack.com: could not connect to host vanetv.com: could not connect to host vanitas.xyz: could not connect to host vanitynailworkz.com: could not connect to host vansieleghem.com: could not connect to host vapordepot.jp: did not receive HSTS header +vasa-webstranka.sk: did not receive HSTS header vasanth.org: could not connect to host vbest.net: could not connect to host -vbh2o.com: did not receive HSTS header vbhelp.org: could not connect to host vbulletin-russia.com: could not connect to host vbulletinrussia.com: could not connect to host @@ -8311,7 +8306,7 @@ vhost.co.id: could not connect to host viadeux.com: could not connect to host viasinc.com: did not receive HSTS header vicianovi.cz: could not connect to host -victorenxovais.com.br: did not receive HSTS header +victorenxovais.com.br: could not connect to host victoriapemberton.com: did not receive HSTS header vidbuchanan.co.uk: did not receive HSTS header viddiaz.com: did not receive HSTS header @@ -8358,7 +8353,7 @@ vitalita.cz: did not receive HSTS header vitalorange.com: max-age too low: 7889238 vitta.me: did not receive HSTS header viva-french.com: did not receive HSTS header -vivasports.com.br: did not receive HSTS header +vivasports.com.br: could not connect to host vivocloud.com: could not connect to host vizeat.com: did not receive HSTS header vizional.com: max-age too low: 0 @@ -8405,14 +8400,14 @@ vrijstaandhuisverkopen.nl: could not connect to host vrobert.fr: could not connect to host vsc-don-stocksport.de: did not receive HSTS header vsestiralnie.com: did not receive HSTS header -vvl.me: could not connect to host +vvl.me: did not receive HSTS header vxml.club: could not connect to host vxstream-sandbox.com: did not receive HSTS header vyncke.org: max-age too low: 2678400 vyvybean.cf: could not connect to host vyvygen.com: did not receive HSTS header vzk.io: could not connect to host -w2gshop.com.br: did not receive HSTS header +w2gshop.com.br: could not connect to host w4a.fr: did not receive HSTS header w4xzr.top: could not connect to host w4xzr.xyz: could not connect to host @@ -8449,7 +8444,7 @@ warsentech.com: could not connect to host warsh.moe: did not receive HSTS header watchium.com: did not receive HSTS header waterforlife.net.au: did not receive HSTS header -waterpoint.com.br: did not receive HSTS header +waterpoint.com.br: could not connect to host watersportmarkt.net: did not receive HSTS header watsonhall.uk: could not connect to host wattechweb.com: did not receive HSTS header @@ -8510,6 +8505,7 @@ wellastore.ru: did not receive HSTS header wellcomp.com.br: did not receive HSTS header wellies.com.au: max-age too low: 7889238 wellness.so: could not connect to host +wellproducedwines.com: did not receive HSTS header welpy.com: could not connect to host weltentreff.com: could not connect to host weltmeisterschaft.net: could not connect to host @@ -8704,7 +8700,6 @@ x2w.io: could not connect to host x3led.com: could not connect to host x509.pub: could not connect to host x509.pw: could not connect to host -xa.search.yahoo.com: max-age too low: 86400 xandocs.com: could not connect to host xat.re: could not connect to host xavierbarroso.com: could not connect to host @@ -8723,6 +8718,7 @@ xfive.de: could not connect to host xgusto.com: did not receive HSTS header xiangqiushi.com: did not receive HSTS header xiaody.me: could not connect to host +xiaolan.me: did not receive HSTS header xiaolvmu.com: could not connect to host xiaolvmu.me: could not connect to host xiaoxiao.im: could not connect to host @@ -8774,13 +8770,11 @@ xn--neb-tma3u8u.xyz: could not connect to host xn--pck4e3a2ex597b4ml.xyz: did not receive HSTS header xn--qckqc0nxbyc4cdb4527err7c.biz: did not receive HSTS header xn--xdtx3pfzbiw3ar8e7yedqrhui.com: could not connect to host -xn--ykrp42k.com: did not receive HSTS header xn--yoamomisuasbcn-ynb.com: could not connect to host xn--zck9a4b352yuua.jp: did not receive HSTS header xobox.me: could not connect to host xoffy.com: did not receive HSTS header xom.party: could not connect to host -xombra.com: did not receive HSTS header xor-a.net: could not connect to host xperiacodes.com: did not receive HSTS header xpi.fr: could not connect to host @@ -8862,7 +8856,7 @@ ypiresia.fr: could not connect to host ytcuber.xyz: could not connect to host ytvwld.de: did not receive HSTS header yu7.jp: did not receive HSTS header -yudan.com.br: did not receive HSTS header +yudan.com.br: could not connect to host yugege.cf: could not connect to host yuhen.ru: did not receive HSTS header yukiminami.net: could not connect to host @@ -8883,7 +8877,6 @@ ywyz.tech: did not receive HSTS header yzal.io: could not connect to host z3liff.com: could not connect to host z3liff.net: could not connect to host -za.search.yahoo.com: max-age too low: 86400 zadieheimlich.com: did not receive HSTS header zahyantechnologies.com: could not connect to host zakoncontrol.com: did not receive HSTS header @@ -8925,10 +8918,8 @@ zerudi.com: did not receive HSTS header zeto365.pl: did not receive HSTS header zett4.me: could not connect to host zeytin.pro: could not connect to host -zh.search.yahoo.com: max-age too low: 86400 zh1.li: could not connect to host zhang.wtf: could not connect to host -zhangge.net: did not receive HSTS header zhangruilin.com: did not receive HSTS header zhaojin97.cn: could not connect to host zhendingresources.com: did not receive HSTS header diff --git a/security/manager/ssl/nsSTSPreloadList.inc b/security/manager/ssl/nsSTSPreloadList.inc index b2202dd9c4b6..c3f39f8a4de3 100644 --- a/security/manager/ssl/nsSTSPreloadList.inc +++ b/security/manager/ssl/nsSTSPreloadList.inc @@ -8,7 +8,7 @@ /*****************************************************************************/ #include -const PRTime gPreloadListExpirationTime = INT64_C(1519841961104000); +const PRTime gPreloadListExpirationTime = INT64_C(1519928969373000); %% 0.me.uk, 1 00001.am, 1 @@ -413,6 +413,7 @@ const PRTime gPreloadListExpirationTime = INT64_C(1519841961104000); 87577.com, 1 8833445.com, 1 8887999.com, 0 +888azino.com, 1 888msc.vip, 1 888sport.dk, 1 888sport.it, 1 @@ -491,7 +492,6 @@ abbruch-star.de, 1 abc-rz.de, 1 abc.li, 1 abcdef.be, 1 -abcdentalcare.com, 1 abdullah.pw, 1 abe-elektro.de, 1 abe.cloud, 0 @@ -723,7 +723,6 @@ adigitali.biz, 1 adimaja.com, 1 adinariversloveschool.com, 1 adiponectinsupplement.info, 1 -adiponectinsupplement.net, 1 adjagu.org, 1 adlershop.ch, 1 adlerweb.info, 1 @@ -1090,6 +1089,7 @@ alexanderschimpf.de, 1 alexandra-schulze.de, 1 alexandre-blond.fr, 1 alexandros.io, 1 +alexbaker.org, 1 alexberts.ch, 1 alexcoman.com, 1 alexdaniel.org, 1 @@ -1628,7 +1628,6 @@ ao2.it, 1 aojiao.org, 0 aoku3d.com, 1 aolabs.nz, 1 -aomberg.com, 1 aooobo.com, 1 aopedeure.nl, 1 aosc.io, 0 @@ -2337,6 +2336,7 @@ ayothemes.com, 1 ayurveda-mantry.com, 1 ayurveda101.com, 0 az-vinyl-boden.de, 1 +az.search.yahoo.com, 0 azabani.com, 1 azamra.com, 1 azia.info, 1 @@ -2674,11 +2674,13 @@ bdsmxxxpics.com, 1 bdvg.org, 1 be-ka-tec.de, 1 be-webdesign.com, 1 +be.search.yahoo.com, 0 be2cloud.de, 1 beacinsight.com, 1 beadare.com, 1 beagreenbean.co.uk, 1 beamitapp.com, 1 +beanjuice.me, 1 beans-one.com, 0 beanworks.ca, 1 bearcosports.com.br, 1 @@ -3003,6 +3005,7 @@ bhodisoft.com, 1 bhost.net, 1 bhtelecom.ba, 1 bhuntr.com, 1 +bi.search.yahoo.com, 0 bia.gov, 0 biaggeo.com, 1 bianinapiccanovias.com, 1 @@ -4230,7 +4233,6 @@ canadalife.de, 1 canadasmotorcycle.ca, 1 canadian.dating, 1 canadianchristianity.com, 0 -canadiangamblingchoice.com, 0 canadiantouristboard.com, 1 canalsidehouse.be, 1 canalsidehouse.com, 1 @@ -4490,11 +4492,13 @@ ccv.ch, 1 ccv.eu, 1 ccv.nl, 1 cd-sport.com, 1 +cd.search.yahoo.com, 0 cda-aigle.ch, 1 cdasiaonline.com, 1 cdbf.ch, 1 cdburnerxp.se, 1 cdda.ch, 1 +cdeck.net, 1 cdepot.eu, 1 cdkeykopen.com, 1 cdkeyworld.de, 1 @@ -4610,6 +4614,7 @@ cfo.gov, 1 cftcarouge.com, 1 cfxdesign.com, 1 cg-systems.hu, 1 +cg.search.yahoo.com, 0 cgan.de, 1 cgan.pw, 1 cgbassurances.ch, 1 @@ -5173,6 +5178,7 @@ cloudimproved.com, 1 cloudlight.biz, 1 cloudmigrator365.com, 1 cloudnote.cc, 1 +cloudopt.net, 0 cloudoptimizedsmb.com, 1 cloudoptimus.com, 1 cloudpagesforwork.com, 1 @@ -5239,6 +5245,7 @@ cmskeyholding.com, 1 cmskh.co.uk, 1 cmweller.com, 1 cmylife.nl, 1 +cn.search.yahoo.com, 0 cnam-idf.fr, 1 cnam.net, 1 cnbs.ch, 1 @@ -5780,6 +5787,7 @@ cpvmatch.eu, 1 cpy.pt, 1 cqchome.com, 1 cqn.ch, 1 +cr.search.yahoo.com, 0 crackcat.de, 1 cracker.in.th, 1 crackingking.com, 0 @@ -5987,6 +5995,7 @@ cssaunion.com, 1 cstb.ch, 1 cstp-marketing.com, 1 csuw.net, 1 +ct.search.yahoo.com, 0 cthomas.work, 1 ctj.im, 1 ctliu.com, 1 @@ -6243,7 +6252,7 @@ dalaran.city, 1 dalb.in, 1 dale-electric.com, 1 dalek.co.nz, 1 -dalfiume.it, 0 +dalfiume.it, 1 dalfsennet.nl, 1 dalingk.com, 1 dallaslu.com, 1 @@ -6354,6 +6363,7 @@ darkshop.nl, 1 darkside.re, 1 darkspacelab.com, 1 darktime.ru, 1 +darkwater.info, 1 darkx.me, 1 darlastudio66.com, 1 darlo.co.uk, 0 @@ -6665,7 +6675,6 @@ dejw.cz, 1 dekasiba.com, 1 delahrzolder.nl, 1 delbecqvo.be, 1 -delbrouck.ch, 1 deleidscheflesch.nl, 1 delfic.org, 1 delhionlinegifts.com, 1 @@ -7159,7 +7168,6 @@ diveplan.org, 1 divergenz.org, 1 diversity-spielzeug.de, 1 diversityflags.com, 1 -diversityflags.com.au, 1 diversityflags.nz, 1 divertiagua.com.br, 1 divinegames.studio, 1 @@ -7236,6 +7244,7 @@ dnstwister.report, 1 do-it.cz, 1 do-prod.com, 1 do.gd, 1 +do.search.yahoo.com, 0 do13.net, 1 do67.de, 1 do67.net, 1 @@ -7425,6 +7434,7 @@ doublethink.online, 1 doubleup.com.au, 1 doubleyummy.uk, 1 doucheba.gs, 1 +dougferris.id.au, 1 doujinshi.info, 1 dounats.com, 1 douzer.de, 1 @@ -7673,6 +7683,7 @@ dustygroove.com, 1 dustyspokesbnb.ca, 1 dutch.desi, 1 dutch1.nl, 1 +dutchessuganda.com, 1 dutchrank.nl, 1 dutchwanderers.nl, 1 dutchweballiance.nl, 1 @@ -8416,7 +8427,7 @@ epistas.de, 1 epizentrum.work, 1 epizentrum.works, 1 epmcentroitalia.it, 1 -epoch.com, 0 +epoch.com, 1 epolitiker.com, 1 epos-distributor.co.uk, 1 eposbirmingham.co.uk, 1 @@ -8786,7 +8797,6 @@ evlear.com, 1 evodation.com, 1 evodation.org, 1 evok.com.co, 0 -evoludis.net, 1 evolutionexpeditions.com, 1 evolutionlending.co.uk, 1 evolutionpets.com, 1 @@ -9073,6 +9083,7 @@ faretravel.co.uk, 1 farfallapets.com.br, 1 farfetchos.com, 1 fargtorget.se, 1 +farhadexchange.com, 1 farhood.org, 1 farid.is, 1 farkas.bz, 1 @@ -9272,6 +9283,7 @@ fhconseil.fr, 1 fhdhelp.de, 0 fhdhilft.de, 0 fhfaoig.gov, 1 +fhg90.com, 1 fhsseniormens.club, 1 fi-sanki.co.jp, 1 fi.google.com, 1 @@ -9448,11 +9460,11 @@ fixthetimeline.com, 1 fixthetimeline.org, 1 fixvoltage.ru, 1 fizz.buzz, 0 +fj.search.yahoo.com, 0 fj.simple.com, 0 fjharcu.com, 1 fkcdn.de, 1 fkfev.de, 1 -fktpm.ru, 1 fl0000.com, 1 fl010.com, 1 fl0111.com, 1 @@ -10438,7 +10450,6 @@ genxbeats.com, 1 genxnotes.com, 1 geoffanderinmyers.com, 1 geoffmyers.com, 1 -geoffreyrichard.com, 1 geofox.org, 1 geoip.fedoraproject.org, 1 geoip.stg.fedoraproject.org, 1 @@ -10464,7 +10475,6 @@ gerald-zojer.com, 1 geraldsonrealty.com, 1 gerardobsd.com, 1 gerardozamudio.mx, 1 -geri.be, 1 germandarknes.net, 1 germansoldiers.net, 1 germanssky.de, 1 @@ -10572,6 +10582,7 @@ ghi.gov, 1 ghislainphu.fr, 1 ghostblog.info, 1 ghrelinblocker.info, 1 +ghrelinblocker.org, 1 giacomodrago.com, 1 giacomodrago.it, 1 giacomopelagatti.it, 1 @@ -10660,6 +10671,7 @@ gjengset.com, 1 gjspunk.de, 0 gjung.com, 0 gkralik.eu, 1 +gl.search.yahoo.com, 0 glahcks.com, 1 glamguru.co.il, 1 glamguru.world, 1 @@ -10715,6 +10727,7 @@ glueckskindter.de, 1 glutenfreelife.co.nz, 1 glyph.ws, 1 glyxins.com, 1 +gm.search.yahoo.com, 0 gmail.com, 0 gmantra.org, 1 gmanukyan.com, 1 @@ -10848,6 +10861,7 @@ gosuland.org, 1 gotech.com.eg, 0 gothamlimo.com, 1 gothic.dating, 1 +gotirupati.com, 0 goto.google.com, 1 goto.world, 1 gotomi.info, 1 @@ -11301,7 +11315,6 @@ hamacho-kyudo.com, 1 hamali.bg, 1 hamking.tk, 1 hammamsayad.com, 1 -hammer-corp.com, 1 hammer-schnaps.com, 1 hammer-sms.com, 1 hampl.tv, 1 @@ -11861,6 +11874,7 @@ hmksq.ae, 1 hmoegirl.com, 1 hms-waldmann.de, 1 hmsseahawk.com, 1 +hn.search.yahoo.com, 0 hobby-drechselei.de, 1 hobby-gamerz-community.de, 1 hobbyspeed.com, 1 @@ -12149,6 +12163,7 @@ httpsnow.org, 1 httpswatch.ca, 1 httpswatch.com, 1 httptest.net, 1 +hu.search.yahoo.com, 0 hua-in.com, 1 huagati.com, 1 huahinpropertylisting.com, 1 @@ -12425,6 +12440,7 @@ idtheft.gov, 1 idubaj.cz, 1 idunno.org, 1 idvl.de, 1 +ie.search.yahoo.com, 0 iec.pe, 1 ieeespmb.org, 1 ieji.de, 0 @@ -14775,6 +14791,7 @@ kpop.re, 1 kpumuk.info, 1 kpvpn.com, 1 kpx1.de, 1 +kr.search.yahoo.com, 0 krachtinverbinding.nl, 1 kradalby.no, 1 kraft.blog, 1 @@ -14965,6 +14982,7 @@ kyujin-office.net, 1 kyunyuki.com, 1 kyusyu.org, 1 kyy.me, 1 +kz.search.yahoo.com, 0 kzsdabas.hu, 1 l-lab.org, 1 l0re.com, 1 @@ -15044,6 +15062,7 @@ lakehavasuhouserentals.com, 1 lakehavasuhouses.com, 1 lakehavasuwebsites.com, 1 lakewoodcomputerservices.com, 1 +lakhesis.net, 1 lakonia.com.br, 1 lalaya.fr, 1 laled.ch, 1 @@ -15492,6 +15511,7 @@ lheinrich.com, 1 lheinrich.de, 1 lheinrich.org, 1 li-ke.co.jp, 1 +li.search.yahoo.com, 0 liangji.com.tw, 0 lianwen.kim, 1 lianye1.cc, 1 @@ -15751,7 +15771,6 @@ livekort.com, 1 livekort.dk, 1 livekort.no, 1 livekort.se, 1 -livekortti.com, 1 livekortti.fi, 1 livelexi.com, 1 livepaperhelp.com, 1 @@ -15964,6 +15983,7 @@ loune.net, 1 love-schna.jp, 1 love4taylor.eu.org, 1 love4taylor.me, 1 +loveandadoreboutique.com, 1 loveandloyalty.se, 1 loveislandgames.com, 1 loveismore.de, 0 @@ -16019,11 +16039,13 @@ lsquo.com, 1 lstma.com, 1 lsys.ac, 1 lszj.com, 1 +lt.search.yahoo.com, 0 ltba.org, 1 ltecode.com, 1 ltls.org, 1 ltn-tom-morel.fr, 1 ltransferts.com, 1 +lu.search.yahoo.com, 0 luav.org, 1 lubar.me, 1 lubbockyounglawyers.org, 1 @@ -16136,6 +16158,7 @@ luxwatch.com, 1 luzat.com, 1 luzeshomologadas.com.br, 1 luzfaltex.com, 1 +lv.search.yahoo.com, 0 lv0.it, 1 lvmoo.com, 1 lvrsystems.com, 1 @@ -16689,7 +16712,6 @@ maths.network, 1 mathspace.co, 1 matildajaneclothing.com, 1 matjaz.it, 1 -matlabjo.ir, 1 matlss.com, 1 matomeathena.com, 1 matriterie-sdv.ro, 1 @@ -16833,7 +16855,6 @@ mckinley.school, 1 mckinley1.com, 1 mckinleytk.com, 1 mcl.gg, 1 -mcmillansedationdentistry.com, 1 mcmillanskiclub.com.au, 1 mcneill.io, 1 mcnext.net, 1 @@ -16930,6 +16951,7 @@ medtehnika.ua, 1 medusa.wtf, 1 meduza.io, 1 medy-me.com, 1 +medyotan.ga, 1 meedoenhartvanwestbrabant.nl, 1 meehle.com, 1 meeko.cc, 1 @@ -17080,6 +17102,7 @@ mertak.cz, 1 mertarauh.com, 1 mertcangokgoz.com, 1 meruri.com, 1 +mes10doigts.ovh, 1 mescaline.com, 1 mescaline.org, 1 mesh.gov, 1 @@ -17685,7 +17708,6 @@ moodfoods.com, 1 moodzshop.com, 1 moojp.co.jp, 1 moonagic.com, 1 -moonchart.co.uk, 1 moondrop.org, 1 moonmelo.com, 1 moonraptor.co.uk, 1 @@ -17816,7 +17838,7 @@ mplicka.cz, 1 mplusm.eu, 1 mpn.poker, 1 mpnpokertour.com, 1 -mpreserver.com, 1 +mpreserver.com, 0 mpserver12.org, 1 mpsgarage.com.au, 1 mpsoundcraft.com, 1 @@ -17877,6 +17899,7 @@ msv-limpezas.pt, 1 msx.org, 1 msz-fotografie.de, 1 mszavodumiru.cz, 1 +mt.search.yahoo.com, 0 mt2414.com, 1 mtasa.com, 1 mtau.com, 1 @@ -17898,6 +17921,7 @@ mtrock.ru, 1 mts-energia.eu, 1 mts-server.com, 1 mtsolar.es, 1 +mu.search.yahoo.com, 0 muabannhanh.com, 0 muahahahaha.co.uk, 1 mubiflex.nl, 1 @@ -18021,6 +18045,7 @@ mvbits.com, 1 mvnet.com.br, 1 mvno.io, 1 mvp-stars.com, 1 +mw.search.yahoo.com, 0 mwainc.org, 1 mware-staging.azurewebsites.net, 1 mwavuli.co.ke, 1 @@ -18209,7 +18234,7 @@ mysize-condooms.nl, 1 mysmelly.com, 1 mysocialporn.com, 1 mysocrat.com, 1 -mysoundtalks.com, 1 +mysoundtalks.com, 0 myspicer.com, 1 mysqldump-secure.org, 1 myssl.com, 1 @@ -18784,6 +18809,7 @@ nhimf.org, 1 nhliberty.org, 1 nhome.ba, 1 ni-mate.com, 1 +ni.search.yahoo.com, 0 niadd.com, 1 niagara.ru, 0 niagarafallsmuseums.ca, 1 @@ -19014,11 +19040,9 @@ noop.ch, 1 noordsee.de, 1 noorsolidarity.com, 1 nootropic.com, 1 -nootropicsource.com, 1 nopaste.xyz, 1 nord-sud.be, 1 nordakademie.de, 1 -nordic-survival.de, 1 nordiccasinocommunity.com, 1 nordinfo.fi, 1 nordmoregatebilklubb.com, 1 @@ -19097,6 +19121,7 @@ nova-dess.ch, 1 nova-wd.org.uk, 1 nova.live, 1 novabench.com, 1 +novacoast.com, 0 novafreixo.pt, 1 novaopcaofestas.com.br, 1 novascan.net, 1 @@ -19118,6 +19143,7 @@ nowloading.co, 1 nowremindme.com, 1 noxlogic.nl, 1 noyocenter.org, 1 +np.search.yahoo.com, 0 npath.de, 1 npm.li, 1 npmcdn.com, 1 @@ -19528,6 +19554,7 @@ onlinelegalmarketing.com, 1 onlinelegalmedia.com, 1 onlinelighting.com.au, 1 onlinemarketingtraining.co.uk, 1 +onlinepokerspelen.be, 1 onlinerollout.de, 1 onlinestoreninjas.com, 1 onlineth.com, 1 @@ -19724,7 +19751,6 @@ osacrypt.studio, 1 osakeannit.fi, 1 osao.org, 1 osbi.pl, 1 -osborneinn.com, 1 osburn.com, 1 oscamp.eu, 1 oscarvk.ch, 1 @@ -19851,6 +19877,7 @@ p1984.nl, 0 p3ter.fr, 1 p4chivtac.com, 1 pa-w.de, 1 +pa.search.yahoo.com, 0 paarberatung-hn.de, 1 paazmaya.fi, 1 pabuzo.vn, 1 @@ -20447,7 +20474,6 @@ phialo.de, 1 phil-phillies.com, 1 phil.tw, 1 philadelphia.com.mx, 1 -philadelphiacandies.com, 1 philadelphiadancefoundation.org, 1 philia-sa.com, 1 philipdb.com, 1 @@ -20683,6 +20709,7 @@ pj539999.com, 1 pj83.duckdns.org, 1 pjili.com, 1 pjuu.com, 0 +pk.search.yahoo.com, 0 pkgt.de, 0 pko.ch, 1 pkov.cz, 1 @@ -21049,6 +21076,7 @@ ppoozl.com, 1 ppro.com, 1 pptavmdata.org, 1 ppy.sh, 1 +pr.search.yahoo.com, 0 pr1sm.com, 1 prac.to, 1 pracowniatkanin.com, 1 @@ -21513,6 +21541,7 @@ pwntr.com, 1 pwolk.com, 1 pxx.io, 1 py-amf.org, 1 +py.search.yahoo.com, 0 pycrypto.org, 1 pygarage.com, 1 pyopenssl.org, 1 @@ -21785,7 +21814,6 @@ randomdysfunctions.com, 1 randomkoalafacts.com, 1 randomprecision.co.uk, 1 randomquotesapp.com, 1 -randstaddirect.nl, 1 randy.su, 1 rangde.org, 1 ranking-deli.jp, 1 @@ -21990,7 +22018,6 @@ reddingo.nl, 1 reddingo.nz, 1 reddingsbrigade-zwolle.nl, 1 reddiseals.com, 1 -reddit2kindle.com, 1 rede-reim.de, 1 redeemingbeautyminerals.com, 1 redessantaluzia.com.br, 1 @@ -22796,6 +22823,7 @@ rvolve.net, 1 rvsa2bevestigingen.nl, 1 rvsa4bevestigingen.nl, 1 rvsbevestigingen.nl, 1 +rw.search.yahoo.com, 0 rwanderlust.com, 0 rwky.net, 1 rws-vertriebsportal.de, 1 @@ -22905,7 +22933,6 @@ saint-astier-triathlon.com, 1 saintaardvarkthecarpeted.com, 1 saintanthonyscorner.com, 1 sainth.de, 1 -saintjohnlutheran.church, 1 saintsrobotics.com, 1 saipariwar.com, 1 saiputra.com, 1 @@ -23080,7 +23107,7 @@ sastd.com, 1 sasyabapi.com, 1 sat.rent, 1 sat4all.com, 1 -sat7a-riyadh.com, 0 +sat7a-riyadh.com, 1 satai.dk, 1 saterdalen.net, 1 satinn.pl, 1 @@ -24467,6 +24494,7 @@ snakafya.com, 1 snake.dog, 1 snap.com, 1 snapappointments.com, 1 +snapappts.com, 1 snapfinance.com, 1 snapserv.ch, 1 snapserv.net, 1 @@ -24706,7 +24734,6 @@ soundeo.net, 1 soundgasm.net, 1 soundhunter.xyz, 1 soundsecurity.io, 1 -soundtalks.be, 1 soundtalks.com, 1 sour.is, 1 souravsaha.com, 1 @@ -24760,7 +24787,6 @@ sparkbase.cn, 1 sparkforautism.org, 1 sparklebastard.com, 1 sparkwood.org, 1 -sparmedo.de, 1 sparta-solutions.de, 1 spartaconsulting.fi, 1 spartantheatre.org, 1 @@ -25404,7 +25430,6 @@ sufix.cz, 1 sugarandcloth.com, 1 sugarbrother.com, 1 sugarshin.net, 1 -sugarsweetorsour.com, 1 suggestim.ch, 1 suiranfes.com, 1 suitocracy.com, 1 @@ -25512,6 +25537,7 @@ suzi3d.com, 1 suzukimarinepress.com, 1 sv-1966-medenbach.de, 1 sv-turm-hohenlimburg.de, 1 +sv.search.yahoo.com, 0 svadobkajuvi.sk, 1 svager.cz, 1 svarnyjunak.cz, 1 @@ -25772,6 +25798,7 @@ tango-cats.de, 1 tango-ouest.com, 1 tangoalpha.co.uk, 1 tangyue.date, 1 +tangzhao.net, 1 tanhit.com, 1 taniku-succulent.com, 1 tankski.co.uk, 1 @@ -25821,7 +25848,6 @@ tattvaayoga.com, 1 tavolaquadrada.com.br, 1 tavsys.net, 1 taxaroo.com, 1 -taxi-24std.de, 1 taxi-chamonix.fr, 1 taxi-collectif.ch, 1 taxicollectif.ch, 1 @@ -26126,7 +26152,6 @@ texasllcpros.com, 1 texastwostepdivorce.com, 1 texby.com, 1 texhnolyze.net, 1 -text-shirt.com, 1 textburst.com, 1 texter-linz.at, 1 texter.at, 1 @@ -26673,6 +26698,7 @@ tkn.tokyo, 1 tkts.cl, 1 tkusano.jp, 1 tkw01536.de, 1 +tlach.cz, 1 tlca.org, 1 tlcnet.info, 1 tlehseasyads.com, 1 @@ -27421,8 +27447,6 @@ tyl.io, 1 tyler.rs, 1 tylerdavies.net, 1 tylerfreedman.com, 1 -tylerharcourt.ca, 1 -tylerharcourt.net, 1 tyleromeara.com, 1 tylerschmidtke.com, 1 type1joe.com, 1 @@ -27460,6 +27484,7 @@ u4mh-dev-accesscontroller.azurewebsites.net, 1 u4mh-dev-portal.azurewebsites.net, 1 u5b.de, 0 u5r.nl, 1 +ua.search.yahoo.com, 0 uae-company-service.com, 1 uangteman.com, 1 uasmi.com, 1 @@ -27802,6 +27827,7 @@ utilitronium.com, 1 utilityapi.com, 1 utitreatment.com, 1 utonia.ch, 1 +utopialgb.org.uk, 1 utopicestudios.com, 1 utox.io, 1 utugnn.ru, 1 @@ -27812,7 +27838,9 @@ uwesander.de, 1 uwfreelanceopticien.nl, 1 uwimonacs.org.jm, 1 uxtechnologist.com, 1 +uy.search.yahoo.com, 0 uygindir.ml, 1 +uz.search.yahoo.com, 0 uzaymedya.com.tr, 1 v-d-p.net, 1 v-u-z.ru, 1 @@ -27897,6 +27925,7 @@ vandermeer.frl, 1 vanderrijt.nl, 1 vanderstraeten.dynv6.net, 1 vanderziel.org, 1 +vanessabalibridal.com, 1 vangeluwedeberlaere.be, 1 vanhoudt-usedcars.be, 1 vanhoutte.be, 0 @@ -27936,7 +27965,6 @@ varta.io, 1 varunagw.com, 0 varunpriolkar.com, 1 varvy.com, 1 -vasa-webstranka.sk, 1 vashel.us, 1 vasileruscior.ro, 1 vaskulitis-info.de, 1 @@ -27959,6 +27987,7 @@ vazue.com, 1 vbazile.com, 1 vbcdn.com, 1 vbestreviews.com, 1 +vbh2o.com, 1 vc.gg, 1 vcam.org, 1 vccmurah.net, 1 @@ -28795,7 +28824,6 @@ weller.pm, 1 wellness-gutschein.de, 1 wellnesscheck.net, 1 wellopp.com, 1 -wellproducedwines.com, 1 wellsolveit.com, 1 wellspringcamps.com, 1 welovejobs.com, 1 @@ -29410,6 +29438,7 @@ www.gov.uk, 0 www.grc.com, 0 www.healthcare.gov, 0 www.heliosnet.com, 1 +www.history.pe, 1 www.hyatt.com, 0 www.icann.org, 0 www.intercom.io, 1 @@ -29475,6 +29504,7 @@ x64architecture.com, 1 x69.biz, 1 x69x.net, 1 x7plus.com, 1 +xa.search.yahoo.com, 0 xa1.uk, 1 xalqbank-online.az, 1 xanderweaver.com, 1 @@ -29526,7 +29556,6 @@ xiangweiqing.co.uk, 1 xiangwenquan.me, 1 xiaofengsky.com, 1 xiaoguo.net, 0 -xiaolan.me, 1 xiaolanglang.net, 1 xiaomi.eu, 1 xiaoniaoyou.com, 1 @@ -29668,6 +29697,7 @@ xn--y8j148r.xn--q9jyb4c, 1 xn--y8j2eb5631a4qf5n0h.com, 1 xn--y8j5gq14rbdd.net, 1 xn--yj8h0m.ws, 1 +xn--ykrp42k.com, 1 xn--zettlmeil-n1a.de, 1 xn5.de, 1 xnaas.info, 1 @@ -29680,6 +29710,7 @@ xoda.pw, 1 xolphin.nl, 1 xombitgames.com, 1 xombitmusic.com, 1 +xombra.com, 1 xonn.de, 1 xotika.tv, 1 xp2.de, 1 @@ -29916,7 +29947,7 @@ youcancraft.de, 1 youcanfuckoff.xyz, 1 youcanmakeit.at, 1 youcruit.com, 1 -youdamom.com, 1 +youdamom.com, 0 youdowell.com, 1 youdungoofd.com, 1 yougee.ml, 1 @@ -30058,6 +30089,7 @@ z1h.de, 1 z33.ch, 1 z4k.de, 1 z99944x.xyz, 1 +za.search.yahoo.com, 0 zaalleatherwear.nl, 0 zabszk.net, 1 zacarias.com.ar, 1 @@ -30180,9 +30212,11 @@ zfly.me, 1 zfo.gg, 1 zfree.co.nz, 1 zgrep.org, 1 +zh.search.yahoo.com, 0 zhang-hao.com, 1 zhang.nz, 1 zhangfangzhou.com, 1 +zhangge.net, 1 zhanghao.me, 1 zhangsidan.com, 1 zhangsir.net, 1 From 7c460507ae7b810ef34c0b48526a0288275d02e3 Mon Sep 17 00:00:00 2001 From: ffxbld Date: Thu, 26 Oct 2017 11:33:02 -0700 Subject: [PATCH 69/69] No bug, Automated HPKP preload list update from host bld-linux64-spot-038 - a=hpkp-update --- security/manager/ssl/StaticHPKPins.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/security/manager/ssl/StaticHPKPins.h b/security/manager/ssl/StaticHPKPins.h index a4a81f25efdf..b277e592b7f5 100644 --- a/security/manager/ssl/StaticHPKPins.h +++ b/security/manager/ssl/StaticHPKPins.h @@ -1158,4 +1158,4 @@ static const TransportSecurityPreload kPublicKeyPinningPreloadList[] = { static const int32_t kUnknownId = -1; -static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1517422774057000); +static const PRTime kPreloadPKPinsExpirationTime = INT64_C(1517509782352000);