From 39290f271550c762cb4553e7c8405d344d630d36 Mon Sep 17 00:00:00 2001 From: Matthieu Bouron Date: Wed, 25 Nov 2015 10:30:15 +0100 Subject: fate: add FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM tests --- tests/api/Makefile | 1 + tests/api/api-codec-param-test.c | 252 +++++++++++++++++++++++++++++ tests/fate/api.mak | 8 + tests/ref/fate/api-jpeg-codec-param | 310 ++++++++++++++++++++++++++++++++++++ tests/ref/fate/api-png-codec-param | 310 ++++++++++++++++++++++++++++++++++++ 5 files changed, 881 insertions(+) create mode 100644 tests/api/api-codec-param-test.c create mode 100644 tests/ref/fate/api-jpeg-codec-param create mode 100644 tests/ref/fate/api-png-codec-param (limited to 'tests') diff --git a/tests/api/Makefile b/tests/api/Makefile index 27f499fd4e..c48c34a413 100644 --- a/tests/api/Makefile +++ b/tests/api/Makefile @@ -1,6 +1,7 @@ APITESTPROGS-$(call ENCDEC, FLAC, FLAC) += api-flac APITESTPROGS-$(call DEMDEC, H264, H264) += api-h264 APITESTPROGS-yes += api-seek +APITESTPROGS-yes += api-codec-param APITESTPROGS-$(call DEMDEC, H263, H263) += api-band APITESTPROGS += $(APITESTPROGS-yes) diff --git a/tests/api/api-codec-param-test.c b/tests/api/api-codec-param-test.c new file mode 100644 index 0000000000..9989825895 --- /dev/null +++ b/tests/api/api-codec-param-test.c @@ -0,0 +1,252 @@ +/* + * Copyright (c) 2015 Matthieu Bouron + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + */ + +#include +#include "libavformat/avformat.h" +#include "libavutil/pixdesc.h" +#include "libavcodec/internal.h" +#include "libavutil/avassert.h" +#include "libavutil/opt.h" + +static int try_decode_video_frame(AVCodecContext *codec_ctx, AVPacket *pkt, int decode) +{ + int ret = 0; + int got_frame = 0; + AVFrame *frame = NULL; + int skip_frame = codec_ctx->skip_frame; + + if (!avcodec_is_open(codec_ctx)) { + const AVCodec *codec = avcodec_find_decoder(codec_ctx->codec_id); + + ret = avcodec_open2(codec_ctx, codec, NULL); + if (ret < 0) { + av_log(codec_ctx, AV_LOG_ERROR, "Failed to open codec\n"); + goto end; + } + } + + frame = av_frame_alloc(); + if (!frame) { + av_log(NULL, AV_LOG_ERROR, "Failed to allocate frame\n"); + goto end; + } + + if (!decode && codec_ctx->codec->caps_internal & FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM) { + codec_ctx->skip_frame = AVDISCARD_ALL; + } + + do { + ret = avcodec_decode_video2(codec_ctx, frame, &got_frame, pkt); + av_assert0(decode || (!decode && !got_frame)); + if (ret < 0) + break; + pkt->data += ret; + pkt->size -= ret; + + if (got_frame) { + break; + } + } while (pkt->size > 0); + +end: + codec_ctx->skip_frame = skip_frame; + + av_frame_free(&frame); + return ret; +} + +static int find_video_stream_info(AVFormatContext *fmt_ctx, int decode) +{ + int ret = 0; + int i, done = 0; + AVPacket pkt; + + av_init_packet(&pkt); + + while (!done) { + AVCodecContext *codec_ctx = NULL; + AVStream *st; + + if ((ret = av_read_frame(fmt_ctx, &pkt)) < 0) { + av_log(fmt_ctx, AV_LOG_ERROR, "Failed to read frame\n"); + goto end; + } + + st = fmt_ctx->streams[pkt.stream_index]; + codec_ctx = st->codec; + + /* Writing to AVStream.codec_info_nb_frames must not be done by + * user applications. It is done here for testing purposing as + * find_video_stream_info tries to mimic avformat_find_stream_info + * which writes to this field. + * */ + if (codec_ctx->codec_type != AVMEDIA_TYPE_VIDEO || + st->codec_info_nb_frames++ > 0) { + av_packet_unref(&pkt); + continue; + } + + ret = try_decode_video_frame(codec_ctx, &pkt, decode); + if (ret < 0) { + av_log(fmt_ctx, AV_LOG_ERROR, "Failed to decode video frame\n"); + goto end; + } + + av_packet_unref(&pkt); + + /* check if all video streams have demuxed a packet */ + done = 1; + for (i = 0; i < fmt_ctx->nb_streams; i++) { + st = fmt_ctx->streams[i]; + codec_ctx = st->codec; + + if (codec_ctx->codec_type != AVMEDIA_TYPE_VIDEO) + continue; + + done &= st->codec_info_nb_frames > 0; + } + } + +end: + av_packet_unref(&pkt); + + return ret < 0; +} + +static void dump_video_streams(const AVFormatContext *fmt_ctx, int decode) +{ + int i; + + for (i = 0; i < fmt_ctx->nb_streams; i++) { + const AVOption *opt = NULL; + const AVStream *st = fmt_ctx->streams[i]; + AVCodecContext *codec_ctx = st->codec; + + printf("stream=%d, decode=%d\n", i, decode); + while (opt = av_opt_next(codec_ctx, opt)) { + uint8_t *str; + + if (opt->type == AV_OPT_TYPE_CONST) + continue; + + if (!strcmp(opt->name, "frame_number")) + continue; + + if (av_opt_get(codec_ctx, opt->name, 0, &str) >= 0) { + printf(" %s=%s\n", opt->name, str); + av_free(str); + } + } + } +} + +static int open_and_probe_video_streams(AVFormatContext **fmt_ctx, const char *filename, int decode) +{ + int ret = 0; + + ret = avformat_open_input(fmt_ctx, filename, NULL, NULL); + if (ret < 0) { + av_log(NULL, AV_LOG_ERROR, "Failed to open input '%s'", filename); + goto end; + } + + ret = find_video_stream_info(*fmt_ctx, decode); + if (ret < 0) { + goto end; + } + + dump_video_streams(*fmt_ctx, decode); + +end: + return ret; +} + +static int check_video_streams(const AVFormatContext *fmt_ctx1, const AVFormatContext *fmt_ctx2) +{ + int i; + int ret = 0; + + av_assert0(fmt_ctx1->nb_streams == fmt_ctx2->nb_streams); + for (i = 0; i < fmt_ctx1->nb_streams; i++) { + const AVOption *opt = NULL; + const AVStream *st1 = fmt_ctx1->streams[i]; + const AVStream *st2 = fmt_ctx2->streams[i]; + AVCodecContext *codec_ctx1 = st1->codec; + AVCodecContext *codec_ctx2 = st2->codec; + + if (codec_ctx1->codec_type != AVMEDIA_TYPE_VIDEO) + continue; + + while (opt = av_opt_next(codec_ctx1, opt)) { + uint8_t *str1 = NULL, *str2 = NULL; + + if (opt->type == AV_OPT_TYPE_CONST) + continue; + + if (!strcmp(opt->name, "frame_number")) + continue; + + av_assert0(av_opt_get(codec_ctx1, opt->name, 0, &str1) >= 0); + av_assert0(av_opt_get(codec_ctx2, opt->name, 0, &str2) >= 0); + if (strcmp(str1, str2)) { + av_log(NULL, AV_LOG_ERROR, "Field %s differs: %s %s", opt->name, str1, str2); + ret = AVERROR(EINVAL); + } + av_free(str1); + av_free(str2); + } + } + + return ret; +} + +int main(int argc, char* argv[]) +{ + int ret = 0; + AVFormatContext *fmt_ctx = NULL; + AVFormatContext *fmt_ctx_no_decode = NULL; + + av_register_all(); + + if (argc < 2) { + av_log(NULL, AV_LOG_ERROR, "Usage: %s \n", argv[0]); + return -1; + } + + if ((ret = open_and_probe_video_streams(&fmt_ctx_no_decode, argv[1], 0)) < 0) { + av_log(NULL, AV_LOG_ERROR, "Failed to probe '%s' without frame decoding\n", argv[1]); + goto end; + } + + if ((ret = open_and_probe_video_streams(&fmt_ctx, argv[1], 1)) < 0) { + av_log(NULL, AV_LOG_ERROR, "Failed to probe '%s' with frame decoding\n", argv[1]); + goto end; + } + + ret = check_video_streams(fmt_ctx, fmt_ctx_no_decode); + +end: + avformat_close_input(&fmt_ctx); + avformat_close_input(&fmt_ctx_no_decode); + + return ret; +} diff --git a/tests/fate/api.mak b/tests/fate/api.mak index 1d1865337d..325f64a108 100644 --- a/tests/fate/api.mak +++ b/tests/fate/api.mak @@ -20,6 +20,14 @@ fate-api-seek: CMD = run $(APITESTSDIR)/api-seek-test $(TARGET_PATH)/tests/data/ fate-api-seek: CMP = null fate-api-seek: REF = /dev/null +FATE_API_SAMPLES_LIBAVFORMAT-yes += fate-api-png-codec-param +fate-api-png-codec-param: $(APITESTSDIR)/api-codec-param-test$(EXESUF) +fate-api-png-codec-param: CMD = run $(APITESTSDIR)/api-codec-param-test $(TARGET_SAMPLES)/png1/lena-rgba.png + +FATE_API_SAMPLES_LIBAVFORMAT-yes += fate-api-jpeg-codec-param +fate-api-jpeg-codec-param: $(APITESTSDIR)/api-codec-param-test$(EXESUF) +fate-api-jpeg-codec-param: CMD = run $(APITESTSDIR)/api-codec-param-test $(TARGET_SAMPLES)/exif/image_small.jpg + FATE_API_SAMPLES-$(CONFIG_AVFORMAT) += $(FATE_API_SAMPLES_LIBAVFORMAT-yes) ifdef SAMPLES diff --git a/tests/ref/fate/api-jpeg-codec-param b/tests/ref/fate/api-jpeg-codec-param new file mode 100644 index 0000000000..6f8da74a76 --- /dev/null +++ b/tests/ref/fate/api-jpeg-codec-param @@ -0,0 +1,310 @@ +stream=0, decode=0 + b=0 + ab=0 + bt=4000000 + flags=0x00000000 + me_method=5 + time_base=0/1 + g=12 + ar=0 + ac=0 + cutoff=0 + frame_size=0 + delay=0 + qcomp=0.500000 + qblur=0.500000 + qmin=2 + qmax=31 + qdiff=3 + bf=0 + b_qfactor=1.250000 + rc_strategy=0 + b_strategy=0 + ps=0 + mv_bits=0 + header_bits=0 + i_tex_bits=0 + p_tex_bits=0 + i_count=0 + p_count=0 + skip_count=0 + misc_bits=0 + frame_bits=0 + codec_tag=0 + bug=0x00000001 + strict=0 + b_qoffset=1.250000 + err_detect=0x00000000 + has_b_frames=0 + block_align=0 + mpeg_quant=0 + qsquish=0.000000 + rc_qmod_amp=0.000000 + rc_qmod_freq=0 + rc_override_count=0 + rc_eq= + maxrate=0 + minrate=0 + bufsize=0 + rc_buf_aggressivity=1.000000 + i_qfactor=-0.800000 + i_qoffset=0.000000 + rc_init_cplx=0.000000 + dct=0 + lumi_mask=0.000000 + tcplx_mask=0.000000 + scplx_mask=0.000000 + p_mask=0.000000 + dark_mask=0.000000 + idct=0 + slice_count=0 + ec=0x00000003 + bits_per_coded_sample=0 + pred=0 + aspect=180/180 + debug=0x00000000 + vismv=0x00000000 + cmp=0 + subcmp=0 + mbcmp=0 + ildctcmp=8 + dia_size=0 + last_pred=0 + preme=0 + precmp=0 + pre_dia_size=0 + subq=8 + dtg_active_format=0 + me_range=0 + ibias=999999 + pbias=999999 + global_quality=0 + coder=0 + context=0 + slice_flags=0 + xvmc_acceleration=0 + mbd=0 + stream_codec_tag=0 + sc_threshold=0 + lmin=0 + lmax=0 + nr=0 + rc_init_occupancy=0 + flags2=0x00000000 + error=0 + threads=1 + me_threshold=0 + mb_threshold=0 + dc=0 + nssew=8 + skip_top=0 + skip_bottom=0 + profile=-99 + level=-99 + lowres=0 + skip_threshold=0 + skip_factor=0 + skip_exp=0 + skipcmp=13 + border_mask=0.000000 + mblmin=236 + mblmax=3658 + mepc=256 + skip_loop_filter=0 + skip_idct=0 + skip_frame=0 + bidir_refine=1 + brd_scale=0 + keyint_min=25 + refs=1 + chromaoffset=0 + trellis=0 + sc_factor=6 + mv0_threshold=256 + b_sensitivity=40 + compression_level=-1 + min_prediction_order=-1 + max_prediction_order=-1 + timecode_frame_start=-1 + bits_per_raw_sample=8 + channel_layout=0 + request_channel_layout=0 + rc_max_vbv_use=0.000000 + rc_min_vbv_use=3.000000 + ticks_per_frame=1 + color_primaries=2 + color_trc=2 + colorspace=5 + color_range=2 + chroma_sample_location=2 + log_level_offset=0 + slices=0 + thread_type=0x00000003 + audio_service_type=0 + request_sample_fmt=none + pkt_timebase=1/25 + sub_charenc= + sub_charenc_mode=0x00000000 + refcounted_frames=false + side_data_only_packets=true + skip_alpha=false + field_order=0 + dump_separator= + codec_whitelist= + pixel_format=yuvj422p + video_size=400x225 +stream=0, decode=1 + b=0 + ab=0 + bt=4000000 + flags=0x00000000 + me_method=5 + time_base=0/1 + g=12 + ar=0 + ac=0 + cutoff=0 + frame_size=0 + delay=0 + qcomp=0.500000 + qblur=0.500000 + qmin=2 + qmax=31 + qdiff=3 + bf=0 + b_qfactor=1.250000 + rc_strategy=0 + b_strategy=0 + ps=0 + mv_bits=0 + header_bits=0 + i_tex_bits=0 + p_tex_bits=0 + i_count=0 + p_count=0 + skip_count=0 + misc_bits=0 + frame_bits=0 + codec_tag=0 + bug=0x00000001 + strict=0 + b_qoffset=1.250000 + err_detect=0x00000000 + has_b_frames=0 + block_align=0 + mpeg_quant=0 + qsquish=0.000000 + rc_qmod_amp=0.000000 + rc_qmod_freq=0 + rc_override_count=0 + rc_eq= + maxrate=0 + minrate=0 + bufsize=0 + rc_buf_aggressivity=1.000000 + i_qfactor=-0.800000 + i_qoffset=0.000000 + rc_init_cplx=0.000000 + dct=0 + lumi_mask=0.000000 + tcplx_mask=0.000000 + scplx_mask=0.000000 + p_mask=0.000000 + dark_mask=0.000000 + idct=0 + slice_count=0 + ec=0x00000003 + bits_per_coded_sample=0 + pred=0 + aspect=180/180 + debug=0x00000000 + vismv=0x00000000 + cmp=0 + subcmp=0 + mbcmp=0 + ildctcmp=8 + dia_size=0 + last_pred=0 + preme=0 + precmp=0 + pre_dia_size=0 + subq=8 + dtg_active_format=0 + me_range=0 + ibias=999999 + pbias=999999 + global_quality=0 + coder=0 + context=0 + slice_flags=0 + xvmc_acceleration=0 + mbd=0 + stream_codec_tag=0 + sc_threshold=0 + lmin=0 + lmax=0 + nr=0 + rc_init_occupancy=0 + flags2=0x00000000 + error=0 + threads=1 + me_threshold=0 + mb_threshold=0 + dc=0 + nssew=8 + skip_top=0 + skip_bottom=0 + profile=-99 + level=-99 + lowres=0 + skip_threshold=0 + skip_factor=0 + skip_exp=0 + skipcmp=13 + border_mask=0.000000 + mblmin=236 + mblmax=3658 + mepc=256 + skip_loop_filter=0 + skip_idct=0 + skip_frame=0 + bidir_refine=1 + brd_scale=0 + keyint_min=25 + refs=1 + chromaoffset=0 + trellis=0 + sc_factor=6 + mv0_threshold=256 + b_sensitivity=40 + compression_level=-1 + min_prediction_order=-1 + max_prediction_order=-1 + timecode_frame_start=-1 + bits_per_raw_sample=8 + channel_layout=0 + request_channel_layout=0 + rc_max_vbv_use=0.000000 + rc_min_vbv_use=3.000000 + ticks_per_frame=1 + color_primaries=2 + color_trc=2 + colorspace=5 + color_range=2 + chroma_sample_location=2 + log_level_offset=0 + slices=0 + thread_type=0x00000003 + audio_service_type=0 + request_sample_fmt=none + pkt_timebase=1/25 + sub_charenc= + sub_charenc_mode=0x00000000 + refcounted_frames=false + side_data_only_packets=true + skip_alpha=false + field_order=0 + dump_separator= + codec_whitelist= + pixel_format=yuvj422p + video_size=400x225 diff --git a/tests/ref/fate/api-png-codec-param b/tests/ref/fate/api-png-codec-param new file mode 100644 index 0000000000..22637741f6 --- /dev/null +++ b/tests/ref/fate/api-png-codec-param @@ -0,0 +1,310 @@ +stream=0, decode=0 + b=0 + ab=0 + bt=4000000 + flags=0x00000000 + me_method=5 + time_base=0/1 + g=12 + ar=0 + ac=0 + cutoff=0 + frame_size=0 + delay=0 + qcomp=0.500000 + qblur=0.500000 + qmin=2 + qmax=31 + qdiff=3 + bf=0 + b_qfactor=1.250000 + rc_strategy=0 + b_strategy=0 + ps=0 + mv_bits=0 + header_bits=0 + i_tex_bits=0 + p_tex_bits=0 + i_count=0 + p_count=0 + skip_count=0 + misc_bits=0 + frame_bits=0 + codec_tag=0 + bug=0x00000001 + strict=0 + b_qoffset=1.250000 + err_detect=0x00000000 + has_b_frames=0 + block_align=0 + mpeg_quant=0 + qsquish=0.000000 + rc_qmod_amp=0.000000 + rc_qmod_freq=0 + rc_override_count=0 + rc_eq= + maxrate=0 + minrate=0 + bufsize=0 + rc_buf_aggressivity=1.000000 + i_qfactor=-0.800000 + i_qoffset=0.000000 + rc_init_cplx=0.000000 + dct=0 + lumi_mask=0.000000 + tcplx_mask=0.000000 + scplx_mask=0.000000 + p_mask=0.000000 + dark_mask=0.000000 + idct=0 + slice_count=0 + ec=0x00000003 + bits_per_coded_sample=0 + pred=0 + aspect=2835/2835 + debug=0x00000000 + vismv=0x00000000 + cmp=0 + subcmp=0 + mbcmp=0 + ildctcmp=8 + dia_size=0 + last_pred=0 + preme=0 + precmp=0 + pre_dia_size=0 + subq=8 + dtg_active_format=0 + me_range=0 + ibias=999999 + pbias=999999 + global_quality=0 + coder=0 + context=0 + slice_flags=0 + xvmc_acceleration=0 + mbd=0 + stream_codec_tag=0 + sc_threshold=0 + lmin=0 + lmax=0 + nr=0 + rc_init_occupancy=0 + flags2=0x00000000 + error=0 + threads=1 + me_threshold=0 + mb_threshold=0 + dc=0 + nssew=8 + skip_top=0 + skip_bottom=0 + profile=-99 + level=-99 + lowres=0 + skip_threshold=0 + skip_factor=0 + skip_exp=0 + skipcmp=13 + border_mask=0.000000 + mblmin=236 + mblmax=3658 + mepc=256 + skip_loop_filter=0 + skip_idct=0 + skip_frame=0 + bidir_refine=1 + brd_scale=0 + keyint_min=25 + refs=1 + chromaoffset=0 + trellis=0 + sc_factor=6 + mv0_threshold=256 + b_sensitivity=40 + compression_level=-1 + min_prediction_order=-1 + max_prediction_order=-1 + timecode_frame_start=-1 + bits_per_raw_sample=0 + channel_layout=0 + request_channel_layout=0 + rc_max_vbv_use=0.000000 + rc_min_vbv_use=3.000000 + ticks_per_frame=1 + color_primaries=2 + color_trc=2 + colorspace=2 + color_range=2 + chroma_sample_location=0 + log_level_offset=0 + slices=0 + thread_type=0x00000003 + audio_service_type=0 + request_sample_fmt=none + pkt_timebase=1/25 + sub_charenc= + sub_charenc_mode=0x00000000 + refcounted_frames=false + side_data_only_packets=true + skip_alpha=false + field_order=0 + dump_separator= + codec_whitelist= + pixel_format=rgba + video_size=128x128 +stream=0, decode=1 + b=0 + ab=0 + bt=4000000 + flags=0x00000000 + me_method=5 + time_base=0/1 + g=12 + ar=0 + ac=0 + cutoff=0 + frame_size=0 + delay=0 + qcomp=0.500000 + qblur=0.500000 + qmin=2 + qmax=31 + qdiff=3 + bf=0 + b_qfactor=1.250000 + rc_strategy=0 + b_strategy=0 + ps=0 + mv_bits=0 + header_bits=0 + i_tex_bits=0 + p_tex_bits=0 + i_count=0 + p_count=0 + skip_count=0 + misc_bits=0 + frame_bits=0 + codec_tag=0 + bug=0x00000001 + strict=0 + b_qoffset=1.250000 + err_detect=0x00000000 + has_b_frames=0 + block_align=0 + mpeg_quant=0 + qsquish=0.000000 + rc_qmod_amp=0.000000 + rc_qmod_freq=0 + rc_override_count=0 + rc_eq= + maxrate=0 + minrate=0 + bufsize=0 + rc_buf_aggressivity=1.000000 + i_qfactor=-0.800000 + i_qoffset=0.000000 + rc_init_cplx=0.000000 + dct=0 + lumi_mask=0.000000 + tcplx_mask=0.000000 + scplx_mask=0.000000 + p_mask=0.000000 + dark_mask=0.000000 + idct=0 + slice_count=0 + ec=0x00000003 + bits_per_coded_sample=0 + pred=0 + aspect=2835/2835 + debug=0x00000000 + vismv=0x00000000 + cmp=0 + subcmp=0 + mbcmp=0 + ildctcmp=8 + dia_size=0 + last_pred=0 + preme=0 + precmp=0 + pre_dia_size=0 + subq=8 + dtg_active_format=0 + me_range=0 + ibias=999999 + pbias=999999 + global_quality=0 + coder=0 + context=0 + slice_flags=0 + xvmc_acceleration=0 + mbd=0 + stream_codec_tag=0 + sc_threshold=0 + lmin=0 + lmax=0 + nr=0 + rc_init_occupancy=0 + flags2=0x00000000 + error=0 + threads=1 + me_threshold=0 + mb_threshold=0 + dc=0 + nssew=8 + skip_top=0 + skip_bottom=0 + profile=-99 + level=-99 + lowres=0 + skip_threshold=0 + skip_factor=0 + skip_exp=0 + skipcmp=13 + border_mask=0.000000 + mblmin=236 + mblmax=3658 + mepc=256 + skip_loop_filter=0 + skip_idct=0 + skip_frame=0 + bidir_refine=1 + brd_scale=0 + keyint_min=25 + refs=1 + chromaoffset=0 + trellis=0 + sc_factor=6 + mv0_threshold=256 + b_sensitivity=40 + compression_level=-1 + min_prediction_order=-1 + max_prediction_order=-1 + timecode_frame_start=-1 + bits_per_raw_sample=0 + channel_layout=0 + request_channel_layout=0 + rc_max_vbv_use=0.000000 + rc_min_vbv_use=3.000000 + ticks_per_frame=1 + color_primaries=2 + color_trc=2 + colorspace=2 + color_range=2 + chroma_sample_location=0 + log_level_offset=0 + slices=0 + thread_type=0x00000003 + audio_service_type=0 + request_sample_fmt=none + pkt_timebase=1/25 + sub_charenc= + sub_charenc_mode=0x00000000 + refcounted_frames=false + side_data_only_packets=true + skip_alpha=false + field_order=0 + dump_separator= + codec_whitelist= + pixel_format=rgba + video_size=128x128 -- cgit v1.2.3