This will pick the "best" simple idct compatible idct Signed-off-by: Michael Niedermayer <michaelni@gmx.at>tags/n2.3
| @@ -394,6 +394,9 @@ Possible values: | |||||
| @item simplemmx | @item simplemmx | ||||
| @item simpleauto | |||||
| Automatically pick a IDCT compatible with the simple one | |||||
| @item arm | @item arm | ||||
| @item altivec | @item altivec | ||||
| @@ -34,6 +34,7 @@ av_cold void ff_dsputil_init_armv5te(DSPContext *c, AVCodecContext *avctx, | |||||
| { | { | ||||
| if (!avctx->lowres && !high_bit_depth && | if (!avctx->lowres && !high_bit_depth && | ||||
| (avctx->idct_algo == FF_IDCT_AUTO || | (avctx->idct_algo == FF_IDCT_AUTO || | ||||
| avctx->idct_algo == FF_IDCT_SIMPLEAUTO || | |||||
| avctx->idct_algo == FF_IDCT_SIMPLEARMV5TE)) { | avctx->idct_algo == FF_IDCT_SIMPLEARMV5TE)) { | ||||
| c->idct_put = ff_simple_idct_put_armv5te; | c->idct_put = ff_simple_idct_put_armv5te; | ||||
| c->idct_add = ff_simple_idct_add_armv5te; | c->idct_add = ff_simple_idct_add_armv5te; | ||||
| @@ -46,6 +46,7 @@ av_cold void ff_dsputil_init_neon(DSPContext *c, AVCodecContext *avctx, | |||||
| { | { | ||||
| if (!avctx->lowres && !high_bit_depth) { | if (!avctx->lowres && !high_bit_depth) { | ||||
| if (avctx->idct_algo == FF_IDCT_AUTO || | if (avctx->idct_algo == FF_IDCT_AUTO || | ||||
| avctx->idct_algo == FF_IDCT_SIMPLEAUTO || | |||||
| avctx->idct_algo == FF_IDCT_SIMPLENEON) { | avctx->idct_algo == FF_IDCT_SIMPLENEON) { | ||||
| c->idct_put = ff_simple_idct_put_neon; | c->idct_put = ff_simple_idct_put_neon; | ||||
| c->idct_add = ff_simple_idct_add_neon; | c->idct_add = ff_simple_idct_add_neon; | ||||
| @@ -2667,6 +2667,7 @@ typedef struct AVCodecContext { | |||||
| #if FF_API_ARCH_ALPHA | #if FF_API_ARCH_ALPHA | ||||
| #define FF_IDCT_SIMPLEALPHA 23 | #define FF_IDCT_SIMPLEALPHA 23 | ||||
| #endif | #endif | ||||
| #define FF_IDCT_SIMPLEAUTO 128 | |||||
| /** | /** | ||||
| * bits per sample/pixel from the demuxer (needed for huffyuv). | * bits per sample/pixel from the demuxer (needed for huffyuv). | ||||
| @@ -219,6 +219,7 @@ static const AVOption avcodec_options[] = { | |||||
| {"ipp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_IPP }, INT_MIN, INT_MAX, V|E|D, "idct"}, | {"ipp", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_IPP }, INT_MIN, INT_MAX, V|E|D, "idct"}, | ||||
| {"xvidmmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVIDMMX }, INT_MIN, INT_MAX, V|E|D, "idct"}, | {"xvidmmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVIDMMX }, 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"}, | {"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}, | {"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"}, | {"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"}, | {"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"}, | ||||
| @@ -60,6 +60,7 @@ static av_cold void dsputil_init_mmx(DSPContext *c, AVCodecContext *avctx, | |||||
| if (avctx->lowres == 0 && !high_bit_depth) { | if (avctx->lowres == 0 && !high_bit_depth) { | ||||
| switch (avctx->idct_algo) { | switch (avctx->idct_algo) { | ||||
| case FF_IDCT_AUTO: | case FF_IDCT_AUTO: | ||||
| case FF_IDCT_SIMPLEAUTO: | |||||
| case FF_IDCT_SIMPLEMMX: | case FF_IDCT_SIMPLEMMX: | ||||
| c->idct_put = ff_simple_idct_put_mmx; | c->idct_put = ff_simple_idct_put_mmx; | ||||
| c->idct_add = ff_simple_idct_add_mmx; | c->idct_add = ff_simple_idct_add_mmx; | ||||