diff -Nru ffmpeg-2.8.6/arch.mak ffmpeg-3.3.3/arch.mak --- ffmpeg-2.8.6/arch.mak 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/arch.mak 2017-06-07 02:03:51.000000000 +0000 @@ -5,7 +5,7 @@ OBJS-$(HAVE_NEON) += $(NEON-OBJS) $(NEON-OBJS-yes) OBJS-$(HAVE_MIPSFPU) += $(MIPSFPU-OBJS) $(MIPSFPU-OBJS-yes) -OBJS-$(HAVE_MIPSDSPR1) += $(MIPSDSPR1-OBJS) $(MIPSDSPR1-OBJS-yes) +OBJS-$(HAVE_MIPSDSP) += $(MIPSDSP-OBJS) $(MIPSDSP-OBJS-yes) OBJS-$(HAVE_MIPSDSPR2) += $(MIPSDSPR2-OBJS) $(MIPSDSPR2-OBJS-yes) OBJS-$(HAVE_MSA) += $(MSA-OBJS) $(MSA-OBJS-yes) OBJS-$(HAVE_MMI) += $(MMI-OBJS) $(MMI-OBJS-yes) diff -Nru ffmpeg-2.8.6/Changelog ffmpeg-3.3.3/Changelog --- ffmpeg-2.8.6/Changelog 2016-02-01 00:52:41.000000000 +0000 +++ ffmpeg-3.3.3/Changelog 2017-07-29 17:49:39.000000000 +0000 @@ -2,285 +2,520 @@ releases are sorted from youngest to oldest. -version 2.8.6 -- avcodec/jpeg2000dec: More completely check cdef -- avutil/opt: check for and handle errors in av_opt_set_dict2() -- avcodec/flacenc: fix calculation of bits required in case of custom sample rate -- avformat: Document urls a bit -- avformat/libquvi: Set default demuxer and protocol limitations -- avformat/concat: Check protocol prefix -- doc/demuxers: Document enable_drefs and use_absolute_path -- avcodec/mjpegdec: Check for end for both bytes in unescaping -- avcodec/mpegvideo_enc: Check for integer overflow in ff_mpv_reallocate_putbitbuffer() -- avformat/avformat: Replace some references to filenames by urls -- avcodec/wmaenc: Check ff_wma_init() for failure -- avcodec/mpeg12enc: Move high resolution thread check to before initializing threads -- avformat/img2dec: Use AVOpenCallback -- avformat/avio: Limit url option parsing to the documented cases -- avformat/img2dec: do not interpret the filename by default if a IO context has been opened -- avcodec/ass_split: Fix null pointer dereference in ff_ass_style_get() -- mov: Add an option to toggle dref opening -- avcodec/gif: Fix lzw buffer size -- avcodec/put_bits: Assert buf_ptr in flush_put_bits() -- avcodec/tiff: Check subsample & rps values more completely -- swscale/swscale: Add some sanity checks for srcSlice* parameters -- swscale/x86/rgb2rgb_template: Fix planar2x() for short width -- swscale/swscale_unscaled: Fix odd height inputs for bayer_to_yv12_wrapper() -- swscale/swscale_unscaled: Fix odd height inputs for bayer_to_rgb24_wrapper() -- avcodec/aacenc: Check both channels for finiteness -- asfdec_o: check for too small size in asf_read_unknown -- asfdec_o: break if EOF is reached after asf_read_packet_header -- asfdec_o: make sure packet_size is non-zero before seeking -- asfdec_o: prevent overflow causing seekback -- asfdec_o: check avio_skip in asf_read_simple_index -- asfdec_o: reject size > INT64_MAX in asf_read_unknown -- asfdec_o: only set asf_pkt->data_size after sanity checks -- Merge commit '8375dc1dd101d51baa430f34c0bcadfa37873896' -- dca: fix misaligned access in avpriv_dca_convert_bitstream -- brstm: fix missing closing brace -- brstm: also allocate b->table in read_packet -- brstm: make sure an ADPC chunk was read for adpcm_thp -- vorbisdec: reject rangebits 0 with non-0 partitions -- vorbisdec: reject channel mapping with less than two channels -- ffmdec: reset packet_end in case of failure -- avformat/ipmovie: put video decoding_map_size into packet and use it in decoder -- avformat/brstm: fix overflow - - -version 2.8.5 -- avformat/hls: Even stricter URL checks -- avformat/hls: More strict url checks -- avcodec/pngenc: Fix mixed up linesizes -- avcodec/pngenc: Replace memcpy by av_image_copy() -- swscale/vscale: Check that 2 tap filters are bilinear before using bilinear code -- swscale: Move VScalerContext into vscale.c -- swscale/utils: Detect and skip unneeded sws_setColorspaceDetails() calls -- swscale/yuv2rgb: Increase YUV2RGB table headroom -- swscale/yuv2rgb: Factor YUVRGB_TABLE_LUMA_HEADROOM out -- avformat/hls: forbid all protocols except http(s) & file -- avformat/aviobuf: Fix end check in put_str16() -- avformat/asfenc: Check pts -- avcodec/mpeg4video: Check time_incr -- avcodec/wavpackenc: Check the number of channels -- avcodec/wavpackenc: Headers are per channel -- avcodec/aacdec_template: Check id_map -- avcodec/dvdec: Fix "left shift of negative value -254" -- avcodec/g2meet: Check for ff_els_decode_bit() failure in epic_decode_run_length() -- avcodec/mjpegdec: Fix negative shift -- avcodec/mss2: Check for repeat overflow -- avformat: Add integer fps from 31 to 60 to get_std_framerate() -- avformat/ivfenc: fix division by zero -- avcodec/mpegvideo_enc: Clip bits_per_raw_sample within valid range -- avfilter/vf_scale: set proper out frame color range -- avcodec/motion_est: Fix mv_penalty table size -- avcodec/h264_slice: Fix integer overflow in implicit weight computation -- swscale/utils: Use normal bilinear scaler if fast cannot be used due to tiny dimensions -- avcodec/put_bits: Always check buffer end before writing -- mjpegdec: extend check for incompatible values of s->rgb and s->ls -- swscale/utils: Fix intermediate format for cascaded alpha downscaling -- avformat/mov: Update handbrake_version threshold for full mp3 parsing -- x86/float_dsp: zero extend offset from ff_scalarproduct_float_sse -- avfilter/vf_zoompan: do not free frame we pushed to lavfi -- nuv: sanitize negative fps rate -- nutdec: reject negative value_len in read_sm_data -- xwddec: prevent overflow of lsize * avctx->height -- nutdec: only copy the header if it exists -- exr: fix out of bounds read in get_code -- on2avc: limit number of bits to 30 in get_egolomb - - -version 2.8.4 -- rawdec: only exempt BIT0 with need_copy from buffer sanity check -- mlvdec: check that index_entries exist -- avcodec/mpeg4videodec: also for empty partitioned slices -- avcodec/h264_refs: Fix long_idx check -- avcodec/h264_mc_template: prefetch list1 only if it is used in the MB -- avcodec/h264_slice: Simplify ref2frm indexing -- avfilter/vf_mpdecimate: Add missing emms_c() -- sonic: make sure num_taps * channels is not larger than frame_size -- opus_silk: fix typo causing overflow in silk_stabilize_lsf -- ffm: reject invalid codec_id and codec_type -- golomb: always check for invalid UE golomb codes in get_ue_golomb -- sbr_qmf_analysis: sanitize input for 32-bit imdct -- sbrdsp_fixed: assert that input values are in the valid range -- aacsbr: ensure strictly monotone time borders -- aacenc: update max_sfb when num_swb changes -- aaccoder: prevent crash of anmr coder -- ffmdec: reject zero-sized chunks -- swscale/x86/rgb2rgb_template: Fallback to mmx in interleaveBytes() if the alignment is insufficient for SSE* -- swscale/x86/rgb2rgb_template: Do not crash on misaligend stride -- avformat/mxfenc: Do not crash if there is no packet in the first stream -- lavf/tee: fix side data double free. -- avformat/hlsenc: Check the return code of avformat_write_header() -- avformat/mov: Enable parser for mp3s by old HandBrake -- avformat/mxfenc: Fix integer overflow in length computation -- avformat/utils: estimate_timings_from_pts - increase retry counter, fixes invalid duration for ts files with hevc codec -- avformat/matroskaenc: Check codecdelay before use -- avutil/mathematics: Fix division by 0 -- mjpegdec: consider chroma subsampling in size check -- libvpxenc: remove some unused ctrl id mappings -- avcodec/vp3: ensure header is parsed successfully before tables -- avcodec/jpeg2000dec: Check bpno in decode_cblk() -- avcodec/pgssubdec: Fix left shift of 255 by 24 places cannot be represented in type int -- swscale/utils: Fix for runtime error: left shift of negative value -1 -- avcodec/hevc: Fix integer overflow of entry_point_offset -- avcodec/dirac_parser: Check that there is a previous PU before accessing it -- avcodec/dirac_parser: Add basic validity checks for next_pu_offset and prev_pu_offset -- avcodec/dirac_parser: Fix potential overflows in pointer checks -- avcodec/wmaprodec: Check bits per sample to be within the range not causing integer overflows -- avcodec/wmaprodec: Fix overflow of cutoff -- avformat/smacker: fix integer overflow with pts_inc -- avcodec/vp3: Fix "runtime error: left shift of negative value" -- avformat/riffdec: Initialize bitrate -- mpegencts: Fix overflow in cbr mode period calculations -- avutil/timecode: Fix fps check -- avutil/mathematics: return INT64_MIN (=AV_NOPTS_VALUE) from av_rescale_rnd() for overflows -- avcodec/apedec: Check length in long_filter_high_3800() -- avcodec/vp3: always set pix_fmt in theora_decode_header() -- avcodec/mpeg4videodec: Check available data before reading custom matrix -- avutil/mathematics: Do not treat INT64_MIN as positive in av_rescale_rnd -- avutil/integer: Fix av_mod_i() with negative dividend -- avformat/dump: Fix integer overflow in av_dump_format() -- avcodec/h264_refs: Check that long references match before use -- avcodec/utils: Clear dimensions in ff_get_buffer() on failure -- avcodec/utils: Use 64bit for aspect ratio calculation in avcodec_string() -- avcodec/hevc: Check max ctb addresses for WPP -- avcodec/vp3: Clear context on reinitialization failure -- avcodec/hevc: allocate entries unconditionally -- avcodec/hevc_cabac: Fix multiple integer overflows -- avcodec/jpeg2000dwt: Check ndeclevels before calling dwt_encode*() -- avcodec/jpeg2000dwt: Check ndeclevels before calling dwt_decode*() -- avcodec/hevc: Check entry_point_offsets -- lavf/rtpenc_jpeg: Less strict check for standard Huffman tables. -- avcodec/ffv1dec: Clear quant_table_count if its invalid -- avcodec/ffv1dec: Print an error if the quant table count is invalid -- doc/filters/drawtext: fix centering example - - -version 2.8.3 -- avcodec/cabac: Check initial cabac decoder state -- avcodec/cabac_functions: Fix "left shift of negative value -31767" -- avcodec/h264_slice: Limit max_contexts when slice_context_count is initialized -- rtmpcrypt: Do the xtea decryption in little endian mode -- avformat/matroskadec: Check subtitle stream before dereferencing -- avcodec/pngdec: Replace assert by request for sample for unsupported TRNS cases -- avformat/utils: Do not init parser if probing is unfinished -- avcodec/jpeg2000dec: Fix potential integer overflow with tile dimensions -- avcodec/jpeg2000: Use av_image_check_size() in ff_jpeg2000_init_component() -- avcodec/wmaprodec: Check for overread in decode_packet() -- avcodec/smacker: Check that the data size is a multiple of a sample vector -- avcodec/takdec: Skip last p2 sample (which is unused) -- avcodec/dxtory: Fix input size check in dxtory_decode_v1_410() -- avcodec/dxtory: Fix input size check in dxtory_decode_v1_420() -- avcodec/error_resilience: avoid accessing previous or next frames tables beyond height -- avcodec/dpx: Move need_align to act per line -- avcodec/flashsv: Check size before updating it -- avcodec/ivi: Check image dimensions -- avcodec/utils: Better check for channels in av_get_audio_frame_duration() -- avcodec/jpeg2000dec: Check for duplicate SIZ marker -- aacsbr: don't call sbr_dequant twice without intermediate read_sbr_data -- hqx: correct type and size check of info_offset -- mxfdec: check edit_rate also for physical_track -- avcodec/jpeg2000: Change coord to 32bit to support larger than 32k width or height -- avcodec/jpeg2000dec: Check SIZ dimensions to be within the supported range -- avcodec/jpeg2000: Check comp coords to be within the supported size -- mpegvideo: clear overread in clear_context -- avcodec/avrndec: Use the AVFrame format instead of the context -- dds: disable palette flag for compressed images -- dds: validate compressed source buffer size -- dds: validate source buffer size before copying -- dvdsubdec: validate offset2 similar to offset1 -- brstm: reject negative sample rate -- aacps: avoid division by zero in stereo_processing -- softfloat: assert when the argument of av_sqrt_sf is negative - -version 2.8.2 -- various fixes in the aac_fixed decoder -- various fixes in softfloat -- swresample/resample: increase precision for compensation -- lavf/mov: add support for sidx fragment indexes -- avformat/mxfenc: Only store user comment related tags when needed -- tests/fate/avformat: Fix fate-lavf -- doc/ffmpeg: Clarify that the sdp_file option requires an rtp output. -- ffmpeg: Don't try and write sdp info if none of the outputs had an rtp format. -- apng: use correct size for output buffer -- jvdec: avoid unsigned overflow in comparison -- avcodec/jpeg2000dec: Clip all tile coordinates -- avcodec/microdvddec: Check for string end in 'P' case -- avcodec/dirac_parser: Fix undefined memcpy() use -- avformat/xmv: Discard remainder of packet on error -- avformat/xmv: factor return check out of if/else -- avcodec/mpeg12dec: Do not call show_bits() with invalid bits -- avcodec/faxcompr: Add missing runs check in decode_uncompressed() -- libavutil/channel_layout: Check strtol*() for failure -- avformat/mpegts: Only start probing data streams within probe_packets -- avcodec/hevc_ps: Check chroma_format_idc -- avcodec/ffv1dec: Check for 0 quant tables -- avcodec/mjpegdec: Reinitialize IDCT on BPP changes -- avcodec/mjpegdec: Check index in ljpeg_decode_yuv_scan() before using it -- avutil/file_open: avoid file handle inheritance on Windows -- avcodec/h264_slice: Disable slice threads if there are multiple access units in a packet -- avformat/hls: update cookies on setcookie response -- opusdec: Don't run vector_fmul_scalar on zero length arrays -- avcodec/opusdec: Fix extra samples read index -- avcodec/ffv1: Initialize vlc_state on allocation -- avcodec/ffv1dec: update progress in case of broken pointer chains -- avcodec/ffv1dec: Clear slice coordinates if they are invalid or slice header decoding fails for other reasons -- rtsp: Allow $ as interleaved packet indicator before a complete response header -- videodsp: don't overread edges in vfix3 emu_edge. -- avformat/mp3dec: improve junk skipping heuristic -- concatdec: fix file_start_time calculation regression -- avcodec: loongson optimize h264dsp idct and loop filter with mmi -- avcodec/jpeg2000dec: Clear properties in jpeg2000_dec_cleanup() too -- avformat/hls: add support for EXT-X-MAP -- avformat/hls: fix segment selection regression on track changes of live streams -- configure: Require libkvazaar < 0.7. -- avcodec/vp8: Do not use num_coeff_partitions in thread/buffer setup - - -version 2.8.1: -- swscale: fix ticket #4881 -- doc: fix spelling errors -- hls: only seek if there is an offset -- asfdec: add more checks for size left in asf packet buffer -- asfdec: alloc enough space for storing name in asf_read_metadata_obj -- avcodec/pngdec: Check blend_op. -- h264_mp4toannexb: fix pps offfset fault when there are more than one sps in avcc -- avcodec/h264_mp4toannexb_bsf: Use av_freep() to free spspps_buf -- avformat/avidec: Workaround broken initial frame -- avformat/hls: fix some cases of HLS streams which require cookies -- avcodec/pngdec: reset has_trns after every decode_frame_png() -- lavf/img2dec: Fix memory leak -- avcodec/mp3: fix skipping zeros -- avformat/srtdec: make sure we probe a number -- configure: check for ID3D11VideoContext -- avformat/vobsub: compare correct packet stream IDs -- avformat/srtdec: more lenient first line probing -- avformat/srtdec: fix number check for the first character -- avcodec/mips: build fix for MSA 64bit -- avcodec/mips: build fix for MSA -- avformat/httpauth: Add space after commas in HTTP/RTSP auth header -- libavformat/hlsenc: Use of uninitialized memory unlinking old files -- avcodec/x86/sbrdsp: Fix using uninitialized upper 32bit of noise -- avcodec/ffv1dec: Fix off by 1 error in quant_table_count check -- avcodec/ffv1dec: Explicitly check read_quant_table() return value -- dnxhddata: correct weight tables -- dnxhddec: decode and use interlace mb flag -- swscale: fix ticket #4877 -- avcodec/rangecoder: Check e -- avcodec/ffv1: separate slice_count from max_slice_count -- swscale: fix ticket 4850 -- cmdutils: Filter dst/srcw/h -- avutil/log: fix zero length gnu_printf format string warning -- lavf/webvttenc: Require webvtt file to contain exactly one WebVTT stream. -- swscale/swscale: Fix "unused variable" warning -- avcodec/mjpegdec: Fix decoding RGBA RCT LJPEG -- MAINTAINERS: add 2.8, drop 2.2 -- doc: mention libavcodec can decode Opus natively -- hevc: properly handle no_rasl_output_flag when removing pictures from the DPB -- avfilter/af_ladspa: process all channels for nb_handles > 1 -- configure: add libsoxr to swresample's pkgconfig -- lavc: Fix compilation with --disable-everything --enable-parser=mpeg4video. +version 3.3.3: +- avcodec/dirac_dwt: Fix multiple integer overflows in COMPOSE_DD97iH0() +- avcodec/diracdec: Fix integer overflow in divide3() +- avcodec/takdec: Fix integer overflow in decode_subframe() +- avformat/rtmppkt: Convert ff_amf_get_field_value() to bytestream2 +- avformat/rtmppkt: Convert ff_amf_tag_size() to bytestream2 +- avcodec/diracdec: Fix integer overflow in signed multiplication in UNPACK_ARITH() +- avcodec/pixlet: Simplify nbits computation +- avcodec/dnxhddec: Move mb height check out of non hr branch +- avcodec/hevc_ps: fix integer overflow in log2_parallel_merge_level_minus2 +- avformat/oggparsecelt: Do not re-allocate os->private +- avcodec/ylc: Fix shift overflow +- avcodec/aacps: Fix multiple integer overflow in map_val_34_to_20() +- avcodec/aacdec_fixed: fix: left shift of negative value -1 +- avcodec/dirac_vlc: Fix undefined shift +- doc/filters: typo in frei0r +- avcodec/cfhd: Fix decoding regression due to height check +- avcodec/aacdec_template (fixed point): Check gain in decode_cce() to avoid undefined shifts later +- avcodec/ffv1dec_template: Fix signed integer overflow +- avcodec/aacdec_template: Fix undefined integer overflow in apply_tns() +- avcodec/magicyuv: Check that vlc len is not too large +- avcodec/mjpegdec: Clip DC also on the negative side. +- avcodec/aacps (fixed point): Fix multiple signed integer overflows +- avcodec/ylc: Fix vlc of 31 bits +- avcodec/sbrdsp_fixed: Fix integer overflow in sbr_hf_apply_noise() +- avcodec/hevcdec: do not let updated extradata corrupt state +- avcodec/wavpack: Fix invalid shift +- avcodec/h264_slice: Fix signed integer overflow +- avcodec/hevc_ps: Fix integer overflow with beta/tc offsets +- avcodec/cfhd: Fix invalid left shift of negative value +- avcodec/vb: Check vertical GMC component before multiply +- avcodec/hevcdec: do basic validity check on delta_chroma_weight and offset +- avcodec/jpeg2000dwt: Fix integer overflow in dwt_decode97_int() +- avcodec/apedec: Fix integer overflow +- avcodec/wavpack: Fix integer overflow in wv_unpack_stereo() +- avcodec/hevc_ps: Fix max_dec_buffer check +- avcodec/mpeg4videodec: Fix GMC with videos of dimension 1 +- avcodec/wavpack: Fix integer overflow +- avcodec/takdec: Fix integer overflow +- avcodec/tiff: Update pointer only when the result is used +- avcodec/cfhd: Check bpc before setting bpc in context +- avcodec/cfhd: Fix undefined shift +- avcodec/hevc_filter: Fix invalid shift +- avcodec/mpeg4videodec: Fix overflow in virtual_ref computation +- avcodec/lpc: signed integer overflow in compute_lpc_coefs() (aacdec_fixed) +- avcodec/wavpack: Fix undefined integer negation +- avcodec/aacdec_fixed: Check s for being too small +- avcodec/htmlsubtitles: Replace very slow redundant sscanf() calls by cleaner and faster code +- avcodec/h264: Fix mix of lossless and lossy MBs decoding +- avcodec/h264_mb: Fix 8x8dct in lossless for new versions of x264 +- avcodec/h264_cabac: Fix CABAC+8x8dct in 4:4:4 +- avcodec/takdec: Fixes: integer overflow in AV_SAMPLE_FMT_U8P output +- avcodec/jpeg2000dsp: Reorder operations in ict_int() to avoid 2 integer overflows +- avcodec/hevcpred_template: Fix left shift of negative value +- avcodec/hevcdec: Fix signed integer overflow in decode_lt_rps() +- avcodec/jpeg2000dec: Check nonzerobits more completely +- avcodec/shorten: Sanity check maxnlpc +- avcodec/truemotion2: Move skip computation after checks +- avcodec/jpeg2000: Fixes integer overflow in ff_jpeg2000_ceildivpow2() +- avcodec/dnxhd_parser: Do not return invalid value from dnxhd_find_frame_end() on error +- avcodec/hevcdec: Check nb_sps +- avcodec/hevc_refs: Check nb_refs in add_candidate_ref() +- avcodec/mpeg4videodec: Check sprite delta upshift against overflowing. +- avcodec/mpeg4videodec: Fix integer overflow in num_sprite_warping_points=2 case +- avcodec/aacsbr_fixed: Check shift in sbr_hf_assemble() +- avcodec/sbrdsp_fixed: Return an error from sbr_hf_apply_noise() if operations are impossible +- avcodec/libvpxdec: Check that display dimensions fit in the storage dimensions +- avcodec/jpeg2000dwt: Fix runtime error: left shift of negative value -123 +- avcodec/wavpack: Fix runtime error: signed integer overflow: 1886191616 + 277872640 cannot be represented in type 'int' +- avcodec/snowdec: Fix runtime error: left shift of negative value -1 +- avcodec/aacdec_fixed: Fix runtime error: left shift of negative value -1297616 +- avcodec/tiff: Fix leak of geotags[].val +- avcodec/ra144: Fix runtime error: signed integer overflow: -2200 * 1033073 cannot be represented in type 'int' +- avcodec/flicvideo: Fix runtime error: signed integer overflow: 4864 * 459296 cannot be represented in type 'int' +- avcodec/cfhd: Check band parameters before storing them +- avcodec/h264_parse: Check picture structure when initializig weight table +- avcodec/indeo4: Check remaining data in Pic hdr extension parsing code +- avcodec/ac3dec_fixed: Fix multiple runtime error: signed integer overflow: -39271008 * 59 cannot be represented in type 'int' +- lavc/aarch64/simple_idct: fix idct_col4_top coefficient + + +version 3.3.2: +- avcodec/mpeg4videodec: Fix runtime error: signed integer overflow: 53098 * 40448 cannot be represented in type 'int' +- avcodec/pafvideo: Fix assertion failure +- avcodec/takdec: Fix multiple runtime error: signed integer overflow: 637072 * 4096 cannot be represented in type 'int' +- avcodec/mjpegdec: Check that reference frame matches the current frame +- avcodec/tiff: Avoid loosing allocated geotag values +- avcodec/cavs: Fix runtime error: signed integer overflow: -12648062 * 256 cannot be represented in type 'int' +- avformat/hls: Check local file extensions +- avcodec/qdrw: Fix null pointer dereference +- avutil/softfloat: Fix sign error in and improve documentation of av_int2sf() +- avcodec/hevc_ps: Fix runtime error: index 32 out of bounds for type 'uint8_t [32]' +- avcodec/dxv: Check remaining bytes in dxv_decompress_raw() +- avcodec/pafvideo: Check packet size and frame code before ff_reget_buffer() +- avcodec/ac3dec_fixed: Fix runtime error: left shift of 419 by 23 places cannot be represented in type 'int' +- avformat/options: log filename on open +- avcodec/aacps: Fix runtime error: left shift of 1073741824 by 1 places cannot be represented in type 'INTFLOAT' (aka 'int') +- avcodec/wavpack: Fix runtime error: shift exponent 32 is too large for 32-bit type 'int' +- avcodec/cfhd: Fix runtime error: signed integer overflow: 65280 * 65288 cannot be represented in type 'int' +- avcodec/wavpack: Fix runtime error: signed integer overflow: 2013265955 - -134217694 cannot be represented in type 'int' +- avcodec/cinepak: Check input packet size before frame reallocation +- avcodec/hevc_ps: Fix runtime error: signed integer overflow: 2147483628 + 256 cannot be represented in type 'int' +- avcodec/ra144: Fixes runtime error: signed integer overflow: 7160 * 327138 cannot be represented in type 'int' +- avcodec/pnm: Use ff_set_dimensions() +- avcodec/cavsdec: Fix runtime error: signed integer overflow: 59 + 2147483600 cannot be represented in type 'int' +- avcodec/nvenc: fix hw accelerated transcode with bframes +- libavformat/hls: Observe Set-Cookie headers +- libavformat/http: Ignore expired cookies +- avformat/avidec: Limit formats in gab2 to srt and ass/ssa +- avcodec/acelp_pitch_delay: Fix runtime error: value 4.83233e+39 is outside the range of representable values of type 'float' +- avcodec/wavpack: Check float_shift +- avcodec/wavpack: Fix runtime error: signed integer overflow: 24 * -2147483648 cannot be represented in type 'int' +- avcodec/ansi: Fix frame memleak +- avcodec/dds: Fix runtime error: left shift of 145 by 24 places cannot be represented in type 'int' +- avcodec/jpeg2000dec: Use ff_set_dimensions() +- avcodec/truemotion2: Fix passing null pointer to memset() +- avcodec/truemotion2: Fix runtime error: left shift of 1 by 31 places cannot be represented in type 'int' +- avcodec/ra144: Fix runtime error: signed integer overflow: -2449 * 1398101 cannot be represented in type 'int' +- avcodec/ra144: Fix runtime error: signed integer overflow: 11184810 * 404 cannot be represented in type 'int' +- avcodec/aac_defines: Add missing () to AAC_HALF_SUM() macro +- avcodec/webp: Fixes null pointer dereference +- avcodec/aacdec_fixed: Fix runtime error: left shift of 1 by 31 places cannot be represented in type 'int' +- avcodec/ylc: Check count in build_vlc() +- avcodec/snow: Fix runtime error: signed integer overflow: 1086573993 + 1086573994 cannot be represented in type 'int' +- avcodec/jpeg2000: Fix runtime error: signed integer overflow: 4185 + 2147483394 cannot be represented in type 'int' +- avcodec/jpeg2000dec: Check tile offsets more completely +- avcodec/sheervideo: Check input buffer size before allocating and decoding +- avcodec/aacdec_fixed: Fix multiple runtime error: shift exponent 127 is too large for 32-bit type 'int' +- avcodec/wnv1: More strict buffer size check +- avcodec/libfdk-aacdec: Correct buffer_size parameter +- avcodec/sbrdsp_template: Fix: runtime error: signed integer overflow: 849815297 + 1315389781 cannot be represented in type 'int' +- avcodec/ivi_dsp: Fix runtime error: left shift of negative value -2 +- doc/filters: Clarify scale2ref example +- avcodec/mlpdec: Do not leave invalid values in matrix_out_ch[] on error +- avcodec/ra144dec: Fix runtime error: left shift of negative value -17 +- avcodec/pixlet: Fix runtime error: signed integer overflow: 2147483647 + 32 cannot be represented in type 'int' +- avformat/mux: Fix copy an paste typo +- avutil/internal: Do not enable CHECKED with DEBUG +- avcodec/clearvideo: Check buf_size before decoding frame +- avcodec/aacdec_fixed: Fix runtime error: signed integer overflow: -2147483648 * -1 cannot be represented in type 'int' +- avcodec/smc: Check remaining input +- avcodec/diracdec: Fix off by 1 error in quant check +- avcodec/jpeg2000dec: Fix copy and paste error +- avcodec/jpeg2000dec: Check tile offsets +- avcodec/sanm: Fix uninitialized reference frames +- avcodec/jpeglsdec: Check get_bits_left() before decoding a picture +- avcodec/fmvc: Fix use of uninitialized memory when the first frame is not a keyframe +- avcodec/ivi_dsp: Fix multiple runtime error: left shift of negative value -71 +- avcodec/mjpegdec: Fix runtime error: signed integer overflow: -32767 * 130560 cannot be represented in type 'int' +- avcodec/aacdec_fixed: Fix runtime error: shift exponent 34 is too large for 32-bit type 'int' +- avcodec/mpeg4videodec: Check for multiple VOL headers +- avcodec/vp9block: fix runtime error: signed integer overflow: 196675 * 20670 cannot be represented in type 'int' +- avcodec/vmnc: Check location before use +- avcodec/takdec: Fix runtime error: signed integer overflow: 8192 * 524308 cannot be represented in type 'int' +- avcodec/aac_defines: Fix: runtime error: left shift of negative value -2 +- avcodec/takdec: Fix runtime error: left shift of negative value -63 +- avcodec/mlpdsp: Fix runtime error: signed integer overflow: -24419392 * 128 cannot be represented in type 'int' +- avcodec/sbrdsp_fixed: fix runtime error: left shift of 1 by 31 places cannot be represented in type 'int' +- avcodec/aacsbr_fixed: Fix multiple runtime error: shift exponent 170 is too large for 32-bit type 'int' +- avcodec/mlpdec: Do not leave a invalid num_primitive_matrices in the context +- avcodec/aacsbr_fixed: Fix multiple runtime error: shift exponent 150 is too large for 32-bit type 'int' +- avcodec/mimic: Use ff_set_dimensions() to set the dimensions +- avcodec/fic: Fix multiple runtime error: signed integer overflow: 5793 * 419752 cannot be represented in type 'int' +- avcodec/pixlet: Fix reading invalid numbers of bits +- avcodec/mlpdec: Fix: runtime error: left shift of negative value -8 +- avcodec/dfa: Fix: runtime error: signed integer overflow: -14202 * 196877 cannot be represented in type 'int' +- avcodec/aacdec: Fix runtime error: signed integer overflow: 2147483520 + 255 cannot be represented in type 'int' +- avcodec/aacdec_template: Fix fixed point scale in decode_cce() +- avcodec/fmvc: Fix off by 1 error +- avcodec/flicvideo: Check frame_size before decrementing +- avcodec/mlpdec: Fix runtime error: left shift of negative value -1 +- avcodec/takdec: Fix runtime error: left shift of negative value -42 +- avcodec/hq_hqa: Fix: runtime error: signed integer overflow: -255 * 10180917 cannot be represented in type 'int' +- avcodec/scpr: mask bits to prevent out of array read +- avcodec/truemotion1: Fix multiple runtime error: signed integer overflow: 1246906962 * 2 cannot be represented in type 'int' +- avcodec/svq3: Fix runtime error: left shift of negative value -6 +- avcodec/tiff: reset sampling[] if its invalid +- configure: Fix the msvcrt version check for mingw32 +- lavf/mov: make invalid m{d,v}hd time_scale default to 1 instead of erroring out +- lavc/ffjni: add missing '\n' +- lavc/mediacodec_wrapper: do not declare JNIAMedia{Codec,CodecList,Format}Fields on the stack +- lavc/mediacodec_wrapper: fix local reference leaks +- avcodec/nvenc: remove unnecessary alignment +- Use AVOnce as a static variable consistently +- avfilter: take_samples: do not directly return frame when samples are skipped +- avutil/hwcontext_dxva2: Don't improperly free IDirect3DSurface9 objects + +version 3.3.1: +- libswscale/tests/swscale: Fix uninitialized variables +- avcodec/ffv1dec: Fix runtime error: signed integer overflow: 1550964438 + 1550964438 cannot be represented in type 'int' +- avcodec/webp: Fix signedness in prefix_code check +- avcodec/svq3: Fix runtime error: signed integer overflow: 169 * 12717677 cannot be represented in type 'int' +- avcodec/mlpdec: Check that there is enough data for headers +- avcodec/ac3dec: Keep track of band structure +- avcodec/webp: Add missing input padding +- avcodec/aacdec_fixed: Fix runtime error: left shift of negative value -1 +- avcodec/aacsbr_template: Do not change bs_num_env before its checked +- avcodec/scpr: Fix multiple runtime error: index 256 out of bounds for type 'unsigned int [256]' +- avcodec/mlp: Fix multiple runtime error: left shift of negative value -1 +- avcodec/xpmdec: Fix multiple pointer/memory issues +- avcodec/vp8dsp: vp7_luma_dc_wht_c: Fix multiple runtime error: signed integer overflow: -1366381240 + -1262413604 cannot be represented in type 'int' +- avcodec/avcodec: Limit the number of side data elements per packet +- avcodec/texturedsp: Fix runtime error: left shift of 255 by 24 places cannot be represented in type 'int' +- avcodec/g723_1dec: Fix runtime error: left shift of negative value -1 +- avcodec/wmv2dsp: Fix runtime error: signed integer overflow: 181 * -17047030 cannot be represented in type 'int' +- avcodec/diracdec: Fix Assertion frame->buf[0] failed at libavcodec/decode.c:610 +- avcodec/msmpeg4dec: Check for cbpy VLC errors +- avcodec/cllc: Check num_bits +- avcodec/cllc: Factor VLC_BITS/DEPTH out, do not use repeated literal numbers +- avcodec/scpr: Check y in first line loop in decompress_i() +- avcodec/dvbsubdec: Check entry_id +- avcodec/aacdec_fixed: Fix multiple shift exponent 33 is too large for 32-bit type 'int' +- avcodec/mpeg12dec: Fixes runtime error: division by zero +- avcodec/pixlet: Fix runtime error: signed integer overflow: 436207616 * -5160230545260541 cannot be represented in type 'long' +- avcodec/webp: Always set pix_fmt +- avfilter/vf_uspp: Fix currently unused input frame dimensions +- avcodec/truemotion1: Fix multiple runtime error: left shift of negative value -1 +- avcodec/eatqi: Fix runtime error: signed integer overflow: 4466147 * 1075 cannot be represented in type 'int' +- avcodec/dss_sp: Fix runtime error: signed integer overflow: 2147481189 + 4096 cannot be represented in type 'int' +- avformat/wavdec: Check chunk_size +- avcodec/cavs: Check updated MV +- avcodec/y41pdec: Fix width in input buffer size check +- avcodec/svq3: Fix multiple runtime error: signed integer overflow: -237341 * 24552 cannot be represented in type 'int' +- avcodec/texturedsp: Fix runtime error: left shift of 218 by 24 places cannot be represented in type 'int' +- avcodec/lagarith: Check scale_factor +- avcodec/lagarith: Fix runtime error: left shift of negative value -1 +- avcodec/takdec: Fix multiple runtime error: left shift of negative value -1 +- avcodec/indeo2: Check for invalid VLCs +- avcodec/g723_1dec: Fix several integer related cases of undefined behaviour +- avcodec/htmlsubtitles: Check for string truncation and return error +- avcodec/bmvvideo: Fix runtime error: left shift of 137 by 24 places cannot be represented in type 'int' +- avcodec/dss_sp: Fix multiple runtime error: signed integer overflow: -15699 * -164039 cannot be represented in type 'int' +- avcodec/dvbsubdec: check region dimensions +- avcodec/vp8dsp: Fixes: runtime error: signed integer overflow: 1330143360 - -1023040530 cannot be represented in type 'int' +- avcodec/hqxdsp: Fix multiple runtime error: signed integer overflow: 248220 * 21407 cannot be represented in type 'int' in idct_col() +- avcodec/cavsdec: Check sym_factor +- avcodec/cdxl: Check format for BGR24 +- avcodec/ffv1dec: Fix copying planes of paletted formats +- avcodec/wmv2dsp: Fix runtime error: signed integer overflow: 181 * -12156865 cannot be represented in type 'int' +- avcodec/xwddec: Check bpp more completely +- avcodec/aacdec_template: Do not decode 2nd PCE if it will lead to failure +- avcodec/s302m: Fix left shift of 8 by 28 places cannot be represented in type 'int' +- avcodec/eamad: Fix runtime error: signed integer overflow: 49674 * 49858 cannot be represented in type 'int' +- avcodec/g726: Fix runtime error: left shift of negative value -2 +- avcodec/magicyuv: Check len to be supported +- avcodec/ra144: Fix runtime error: left shift of negative value -798 +- avcodec/mss34dsp: Fix multiple signed integer overflow +- avcodec/targa_y216dec: Fix width type +- avcodec/texturedsp: Fix multiple runtime error: left shift of 255 by 24 places cannot be represented in type 'int' +- avcodec/ivi_dsp: Fix multiple left shift of negative value -2 +- avcodec/svq3: Fix multiple runtime error: signed integer overflow: 44161 * 61694 cannot be represented in type 'int' +- avcodec/msmpeg4dec: Correct table depth +- avcodec/dds: Fix runtime error: left shift of 1 by 31 places cannot be represented in type 'int' +- avcodec/cdxl: Check format parameter +- avutil/softfloat: Fix overflow in av_div_sf() +- avcodec/hq_hqa: Fix runtime error: left shift of negative value -207 +- avcodec/mss3: Change types in rac_get_model_sym() to match the types they are initialized from +- avcodec/shorten: Check k in get_uint() +- avcodec/webp: Fix null pointer dereference +- avcodec/dfa: Fix signed integer overflow: -2147483648 - 1 cannot be represented in type 'int' +- avcodec/g723_1: Fix multiple runtime error: left shift of negative value +- avcodec/mimic: Fix runtime error: left shift of negative value -1 +- avcodec/clearvideo: Fix multiple runtime error: left shift of negative value -1024 +- avcodec/fic: Fix multiple left shift of negative value -15 +- avcodec/mlpdec: Fix runtime error: left shift of negative value -22 +- avcodec/snowdec: Check qbias +- avutil/softfloat: Fix multiple runtime error: left shift of negative value -8 +- avcodec/aacsbr_template: Do not leave bs_num_env invalid +- avcodec/mdec: Fix signed integer overflow: 28835400 * 83 cannot be represented in type 'int' +- avcodec/dfa: Fix off by 1 error +- avcodec/nellymoser: Fix multiple left shift of negative value -8591 +- avcodec/cdxl: Fix signed integer overflow: 14243456 * 164 cannot be represented in type 'int' +- avcodec/g722: Fix multiple runtime error: left shift of negative value -1 +- avcodec/dss_sp: Fix multiple left shift of negative value -466 +- avcodec/wnv1: Fix runtime error: left shift of negative value -1 +- avcodec/tiertexseqv: set the fixed dimenasions, do not depend on the demuxer doing so +- avcodec/mjpegdec: Fix runtime error: signed integer overflow: -24543 * 2031616 cannot be represented in type 'int' +- avcodec/cavsdec: Fix undefined behavior from integer overflow +- avcodec/dvdsubdec: Fix runtime error: left shift of 242 by 24 places cannot be represented in type 'int' +- libavcodec/mpeg4videodec: Convert sprite_offset to 64bit +- avcodec/pngdec: Use ff_set_dimensions() +- avcodec/msvideo1: Check buffer size before re-getting the frame +- avcodec/h264_cavlc: Fix undefined behavior on qscale overflow +- avcodec/dcadsp: Fix runtime error: signed integer overflow +- avcodec/svq3: Reject dx/dy beyond 16bit +- avcodec/svq3: Increase offsets to prevent integer overflows +- avcodec/indeo2: Check remaining bits in ir2_decode_plane() +- avcodec/vp3: Check remaining bits in unpack_dct_coeffs() +- doc/developer: Add terse documentation of assumed C implementation defined behavior +- avcodec/bmp: Use ff_set_dimensions() +- avcodec/mdec: Fix runtime error: left shift of negative value -127 +- avcodec/x86/vc1dsp_init: Fix build failure with --disable-optimizations and clang +- libavcodec/exr : fix float to uint16 conversion for negative float value +- avformat/webmdashenc: Validate the 'streams' adaptation sets parameter +- avformat/webmdashenc: Require the 'adaptation_sets' option to be set +- lavfi/avfiltergraph: only return EOF in avfilter_graph_request_oldest if all sinks EOFed +- ffmpeg: check for unconnected outputs +- avformat/utils: free AVStream.codec properly in free_stream() +- avcodec/options: do a more thorough clean up in avcodec_copy_context() +- avcodec/options: factorize avcodec_copy_context() cleanup code +- ffmpeg: count packets when queued +- avformat/concatdec: fix the h264 annexb extradata check +- avcodec/dnxhd_parser: fix parsing interlaced video, simplify code +- ffmpeg; check return code of avcodec_send_frame when flushing encoders +- avcodec/g723_1dec: Fix LCG type +- avcodec/hqxdsp: Fix runtime error: signed integer overflow: -196264 * 11585 cannot be represented in type 'int' +- avcodec/ac3dec: Fix: runtime error: index -1 out of bounds for type 'INTFLOAT [2]' +- avcodec/mpeg4videodec: Clear sprite wraping on unsupported cases in VOP decode +- avcodec/pixlet: Fixes: runtime error: signed integer overflow: 9203954323419769657 + 29897660706736950 cannot be represented in type 'long' +- avcodec/dds: Fix runtime error: left shift of 210 by 24 places cannot be represented in type 'int' +- avcodec/rscc: Check pixel_size for overflow +- avcodec/fmvc: Check nb_blocks +- avcodec/cllc: Check prefix +- avcodec/webp: Factor update_canvas_size() out +- avcodec/webp: Update canvas size in vp8_lossy_decode_frame() as in vp8_lossless_decode_frame() +- avcodec/snowdec: Check width +- avcodec/flacdec: Return error code instead of 0 for failures +- avcodec/opus_silk: Fix integer overflow and out of array read +- avcodec/aacps: Fix undefined behavior +- avcodec/pixlet: Fix shift exponent 4294967268 is too large for 32-bit type 'int' +- doc/general: fix project name after 2b1a6b1ae + + +version 3.3: +- CrystalHD decoder moved to new decode API +- add internal ebur128 library, remove external libebur128 dependency +- Pro-MPEG CoP #3-R2 FEC protocol +- premultiply video filter +- Support for spherical videos +- configure now fails if autodetect-libraries are requested but not found +- PSD Decoder +- 16.8 floating point pcm decoder +- 24.0 floating point pcm decoder +- Apple Pixlet decoder +- QDMC audio decoder +- NewTek SpeedHQ decoder +- MIDI Sample Dump Standard demuxer +- readeia608 filter +- Sample Dump eXchange demuxer +- abitscope multimedia filter +- Scenarist Closed Captions demuxer and muxer +- threshold filter +- midequalizer filter +- Optimal Huffman tables for (M)JPEG encoding +- VAAPI-accelerated MPEG-2 and VP8 encoding +- FM Screen Capture Codec decoder +- native Opus encoder +- ScreenPressor decoder +- incomplete ClearVideo decoder +- Intel QSV video scaling and deinterlacing filters +- Support MOV with multiple sample description tables +- XPM decoder +- Removed the legacy X11 screen grabber, use XCB instead +- MPEG-7 Video Signature filter +- Removed asyncts filter (use af_aresample instead) +- Intel QSV-accelerated VP8 video decoding + + +version 3.2: +- libopenmpt demuxer +- tee protocol +- Changed metadata print option to accept general urls +- Alias muxer for Ogg Video (.ogv) +- VP8 in Ogg muxing +- curves filter doesn't automatically insert points at x=0 and x=1 anymore +- 16-bit support in curves filter and selectivecolor filter +- OpenH264 decoder wrapper +- MediaCodec H.264/HEVC/MPEG-4/VP8/VP9 hwaccel +- True Audio (TTA) muxer +- crystalizer audio filter +- acrusher audio filter +- bitplanenoise video filter +- floating point support in als decoder +- fifo muxer +- maskedclamp filter +- hysteresis filter +- lut2 filter +- yuvtestsrc filter +- CUDA CUVID H.263/VP8/VP9/10 bit HEVC (Dithered) Decoding +- vaguedenoiser filter +- added threads option per filter instance +- weave filter +- gblur filter +- avgblur filter +- sobel and prewitt filter +- MediaCodec HEVC/MPEG-4/VP8/VP9 decoding +- Meridian Lossless Packing (MLP) / TrueHD encoder +- Non-Local Means (nlmeans) denoising filter +- sdl2 output device and ffplay support +- sdl1 output device and sdl1 support removed +- extended mov edit list support +- libfaac encoder removed +- Matroska muxer now writes CRC32 elements by default in all Level 1 elements +- sidedata video and asidedata audio filter +- Changed mapping of rtp MIME type G726 to codec g726le. +- spec compliant VAAPI/DXVA2 VC-1 decoding of slices in frame-coded images + + +version 3.1: +- DXVA2-accelerated HEVC Main10 decoding +- fieldhint filter +- loop video filter and aloop audio filter +- Bob Weaver deinterlacing filter +- firequalizer filter +- datascope filter +- bench and abench filters +- ciescope filter +- protocol blacklisting API +- MediaCodec H264 decoding +- VC-2 HQ RTP payload format (draft v1) depacketizer and packetizer +- VP9 RTP payload format (draft v2) packetizer +- AudioToolbox audio decoders +- AudioToolbox audio encoders +- coreimage filter (GPU based image filtering on OSX) +- libdcadec removed +- bitstream filter for extracting DTS core +- ADPCM IMA DAT4 decoder +- musx demuxer +- aix demuxer +- remap filter +- hash and framehash muxers +- colorspace filter +- hdcd filter +- readvitc filter +- VAAPI-accelerated format conversion and scaling +- libnpp/CUDA-accelerated format conversion and scaling +- Duck TrueMotion 2.0 Real Time decoder +- Wideband Single-bit Data (WSD) demuxer +- VAAPI-accelerated H.264/HEVC/MJPEG encoding +- DTS Express (LBR) decoder +- Generic OpenMAX IL encoder with support for Raspberry Pi +- IFF ANIM demuxer & decoder +- Direct Stream Transfer (DST) decoder +- loudnorm filter +- MTAF demuxer and decoder +- MagicYUV decoder +- OpenExr improvements (tile data and B44/B44A support) +- BitJazz SheerVideo decoder +- CUDA CUVID H264/HEVC decoder +- 10-bit depth support in native utvideo decoder +- libutvideo wrapper removed +- YUY2 Lossless Codec decoder +- VideoToolbox H.264 encoder + + +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 @@ -1082,8 +1317,8 @@ - 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 +- 9 bits and 10 bits per sample support in the H.264 decoder +- 9 bits and 10 bits FFV1 encoding / decoding - split filter added - select filter added - sdl output device added @@ -1376,7 +1611,7 @@ - rate distorted optimal lambda->qp support - AAC encoding with libfaac - Sunplus JPEG codec (SP5X) support -- use Lagrange multipler instead of QP for ratecontrol +- use Lagrange multiplier instead of QP for ratecontrol - Theora/VP3 decoding support - XA and ADX ADPCM codecs - export MPEG-2 active display area / pan scan diff -Nru ffmpeg-2.8.6/cmdutils.c ffmpeg-3.3.3/cmdutils.c --- ffmpeg-2.8.6/cmdutils.c 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/cmdutils.c 2017-07-29 17:49:29.000000000 +0000 @@ -52,6 +52,7 @@ #include "libavutil/opt.h" #include "libavutil/cpu.h" #include "libavutil/ffversion.h" +#include "libavutil/version.h" #include "cmdutils.h" #if CONFIG_NETWORK #include "libavformat/network.h" @@ -60,6 +61,9 @@ #include #include #endif +#ifdef _WIN32 +#include +#endif static int init_report(const char *env); @@ -71,6 +75,12 @@ static int report_file_level = AV_LOG_DEBUG; int hide_banner = 0; +enum show_muxdemuxers { + SHOW_DEFAULT, + SHOW_DEMUXERS, + SHOW_MUXERS, +}; + void init_opts(void) { av_dict_set(&sws_dict, "flags", "bicubic", 0); @@ -106,6 +116,15 @@ } } +void init_dynload(void) +{ +#ifdef _WIN32 + /* Calling SetDllDirectory with the empty string (but not NULL) removes the + * current working directory from the DLL search path as a security pre-caution. */ + SetDllDirectory(""); +#endif +} + static void (*program_exit)(int ret); void register_exit(void (*cb)(int ret)) @@ -212,7 +231,6 @@ * by default. HAVE_COMMANDLINETOARGVW is true on cygwin, while * it doesn't provide the actual command line via GetCommandLineW(). */ #if HAVE_COMMANDLINETOARGVW && defined(_WIN32) -#include #include /* Will be leaked on exit */ static char** win32_argv_utf8 = NULL; @@ -533,7 +551,12 @@ #if CONFIG_AVRESAMPLE const AVClass *rc = avresample_get_class(); #endif - const AVClass *sc, *swr_class; +#if CONFIG_SWSCALE + const AVClass *sc = sws_get_class(); +#endif +#if CONFIG_SWRESAMPLE + const AVClass *swr_class = swr_get_class(); +#endif if (!strcmp(opt, "debug") || !strcmp(opt, "fdebug")) av_log_set_level(AV_LOG_DEBUG); @@ -557,7 +580,6 @@ consumed = 1; } #if CONFIG_SWSCALE - sc = sws_get_class(); if (!consumed && (o = opt_find(&sc, opt, NULL, 0, AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ))) { struct SwsContext *sws = sws_alloc_context(); @@ -585,7 +607,6 @@ } #endif #if CONFIG_SWRESAMPLE - swr_class = swr_get_class(); if (!consumed && (o=opt_find(&swr_class, opt, NULL, 0, AV_OPT_SEARCH_CHILDREN | AV_OPT_SEARCH_FAKE_OBJ))) { struct SwrContext *swr = swr_alloc(); @@ -1055,7 +1076,8 @@ LIB##LIBNAME##_VERSION_MAJOR, \ LIB##LIBNAME##_VERSION_MINOR, \ LIB##LIBNAME##_VERSION_MICRO, \ - version >> 16, version >> 8 & 0xff, version & 0xff); \ + AV_VERSION_MAJOR(version), AV_VERSION_MINOR(version),\ + AV_VERSION_MICRO(version)); \ } \ if (flags & SHOW_CONFIG) { \ const char *cfg = libname##_configuration(); \ @@ -1074,15 +1096,15 @@ static void print_all_libs_info(int flags, int level) { - PRINT_LIB_INFO(avutil, AVUTIL, flags, level); - PRINT_LIB_INFO(avcodec, AVCODEC, flags, level); - PRINT_LIB_INFO(avformat, AVFORMAT, flags, level); - PRINT_LIB_INFO(avdevice, AVDEVICE, flags, level); - PRINT_LIB_INFO(avfilter, AVFILTER, flags, level); + PRINT_LIB_INFO(avutil, AVUTIL, flags, level); + PRINT_LIB_INFO(avcodec, AVCODEC, flags, level); + PRINT_LIB_INFO(avformat, AVFORMAT, flags, level); + PRINT_LIB_INFO(avdevice, AVDEVICE, flags, level); + PRINT_LIB_INFO(avfilter, AVFILTER, flags, level); PRINT_LIB_INFO(avresample, AVRESAMPLE, flags, level); - PRINT_LIB_INFO(swscale, SWSCALE, flags, level); - PRINT_LIB_INFO(swresample,SWRESAMPLE, flags, level); - PRINT_LIB_INFO(postproc, POSTPROC, flags, level); + PRINT_LIB_INFO(swscale, SWSCALE, flags, level); + PRINT_LIB_INFO(swresample, SWRESAMPLE, flags, level); + PRINT_LIB_INFO(postproc, POSTPROC, flags, level); } static void print_program_info(int flags, int level) @@ -1234,7 +1256,7 @@ return AV_IS_INPUT_DEVICE(avclass->category) || AV_IS_OUTPUT_DEVICE(avclass->category); } -static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only) +static int show_formats_devices(void *optctx, const char *opt, const char *arg, int device_only, int muxdemuxers) { AVInputFormat *ifmt = NULL; AVOutputFormat *ofmt = NULL; @@ -1252,29 +1274,33 @@ const char *name = NULL; const char *long_name = NULL; - while ((ofmt = av_oformat_next(ofmt))) { - is_dev = is_device(ofmt->priv_class); - if (!is_dev && device_only) - continue; - if ((!name || strcmp(ofmt->name, name) < 0) && - strcmp(ofmt->name, last_name) > 0) { - name = ofmt->name; - long_name = ofmt->long_name; - encode = 1; + if (muxdemuxers !=SHOW_DEMUXERS) { + while ((ofmt = av_oformat_next(ofmt))) { + is_dev = is_device(ofmt->priv_class); + if (!is_dev && device_only) + continue; + if ((!name || strcmp(ofmt->name, name) < 0) && + strcmp(ofmt->name, last_name) > 0) { + name = ofmt->name; + long_name = ofmt->long_name; + encode = 1; + } } } - while ((ifmt = av_iformat_next(ifmt))) { - is_dev = is_device(ifmt->priv_class); - if (!is_dev && device_only) - continue; - if ((!name || strcmp(ifmt->name, name) < 0) && - strcmp(ifmt->name, last_name) > 0) { - name = ifmt->name; - long_name = ifmt->long_name; - encode = 0; + if (muxdemuxers != SHOW_MUXERS) { + while ((ifmt = av_iformat_next(ifmt))) { + is_dev = is_device(ifmt->priv_class); + if (!is_dev && device_only) + continue; + if ((!name || strcmp(ifmt->name, name) < 0) && + strcmp(ifmt->name, last_name) > 0) { + name = ifmt->name; + long_name = ifmt->long_name; + encode = 0; + } + if (name && strcmp(ifmt->name, name) == 0) + decode = 1; } - if (name && strcmp(ifmt->name, name) == 0) - decode = 1; } if (!name) break; @@ -1291,12 +1317,22 @@ int show_formats(void *optctx, const char *opt, const char *arg) { - return show_formats_devices(optctx, opt, arg, 0); + return show_formats_devices(optctx, opt, arg, 0, SHOW_DEFAULT); +} + +int show_muxers(void *optctx, const char *opt, const char *arg) +{ + return show_formats_devices(optctx, opt, arg, 0, SHOW_MUXERS); +} + +int show_demuxers(void *optctx, const char *opt, const char *arg) +{ + return show_formats_devices(optctx, opt, arg, 0, SHOW_DEMUXERS); } int show_devices(void *optctx, const char *opt, const char *arg) { - return show_formats_devices(optctx, opt, arg, 1); + return show_formats_devices(optctx, opt, arg, 1, SHOW_DEFAULT); } #define PRINT_CODEC_SUPPORTED(codec, field, type, list_name, term, get_name) \ @@ -1319,16 +1355,47 @@ printf("%s %s [%s]:\n", encoder ? "Encoder" : "Decoder", c->name, c->long_name ? c->long_name : ""); + printf(" General capabilities: "); + if (c->capabilities & AV_CODEC_CAP_DRAW_HORIZ_BAND) + printf("horizband "); + if (c->capabilities & AV_CODEC_CAP_DR1) + printf("dr1 "); + if (c->capabilities & AV_CODEC_CAP_TRUNCATED) + printf("trunc "); + if (c->capabilities & AV_CODEC_CAP_DELAY) + printf("delay "); + if (c->capabilities & AV_CODEC_CAP_SMALL_LAST_FRAME) + printf("small "); + if (c->capabilities & AV_CODEC_CAP_SUBFRAMES) + printf("subframes "); + if (c->capabilities & AV_CODEC_CAP_EXPERIMENTAL) + printf("exp "); + if (c->capabilities & AV_CODEC_CAP_CHANNEL_CONF) + printf("chconf "); + if (c->capabilities & AV_CODEC_CAP_PARAM_CHANGE) + printf("paramchange "); + if (c->capabilities & AV_CODEC_CAP_VARIABLE_FRAME_SIZE) + printf("variable "); + if (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS | + AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_AUTO_THREADS)) + printf("threads "); + if (!c->capabilities) + printf("none"); + printf("\n"); + if (c->type == AVMEDIA_TYPE_VIDEO || c->type == AVMEDIA_TYPE_AUDIO) { printf(" Threading capabilities: "); switch (c->capabilities & (AV_CODEC_CAP_FRAME_THREADS | - AV_CODEC_CAP_SLICE_THREADS)) { + AV_CODEC_CAP_SLICE_THREADS | + AV_CODEC_CAP_AUTO_THREADS)) { case AV_CODEC_CAP_FRAME_THREADS | AV_CODEC_CAP_SLICE_THREADS: printf("frame and slice"); break; case AV_CODEC_CAP_FRAME_THREADS: printf("frame"); break; case AV_CODEC_CAP_SLICE_THREADS: printf("slice"); break; - default: printf("no"); break; + case AV_CODEC_CAP_AUTO_THREADS : printf("auto"); break; + default: printf("none"); break; } printf("\n"); } @@ -1387,7 +1454,7 @@ const AVCodecDescriptor * const *da = a; const AVCodecDescriptor * const *db = b; - return (*da)->type != (*db)->type ? (*da)->type - (*db)->type : + return (*da)->type != (*db)->type ? FFDIFFSIGN((*da)->type, (*db)->type) : strcmp((*da)->name, (*db)->name); } @@ -1531,10 +1598,11 @@ int show_bsfs(void *optctx, const char *opt, const char *arg) { - AVBitStreamFilter *bsf = NULL; + const AVBitStreamFilter *bsf = NULL; + void *opaque = NULL; printf("Bitstream filters:\n"); - while ((bsf = av_bitstream_filter_next(bsf))) + while ((bsf = av_bsf_next(&opaque))) printf("%s\n", bsf->name); printf("\n"); return 0; @@ -1589,7 +1657,7 @@ ( i && (filter->flags & AVFILTER_FLAG_DYNAMIC_OUTPUTS))) ? 'N' : '|'; } *descr_cur = 0; - printf(" %c%c%c %-16s %-10s %s\n", + printf(" %c%c%c %-17s %-10s %s\n", filter->flags & AVFILTER_FLAG_SUPPORT_TIMELINE ? 'T' : '.', filter->flags & AVFILTER_FLAG_SLICE_THREADS ? 'S' : '.', filter->process_command ? 'C' : '.', @@ -1945,7 +2013,7 @@ codec = s->oformat ? avcodec_find_encoder(codec_id) : avcodec_find_decoder(codec_id); - switch (st->codec->codec_type) { + switch (st->codecpar->codec_type) { case AVMEDIA_TYPE_VIDEO: prefix = 'v'; flags |= AV_OPT_FLAG_VIDEO_PARAM; @@ -2003,7 +2071,7 @@ return NULL; } for (i = 0; i < s->nb_streams; i++) - opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codec->codec_id, + opts[i] = filter_codec_opts(codec_opts, s->streams[i]->codecpar->codec_id, s, s->streams[i], NULL); return opts; } @@ -2029,18 +2097,10 @@ double get_rotation(AVStream *st) { - AVDictionaryEntry *rotate_tag = av_dict_get(st->metadata, "rotate", NULL, 0); uint8_t* displaymatrix = av_stream_get_side_data(st, AV_PKT_DATA_DISPLAYMATRIX, NULL); double theta = 0; - - if (rotate_tag && *rotate_tag->value && strcmp(rotate_tag->value, "0")) { - char *tail; - theta = av_strtod(rotate_tag->value, &tail); - if (*tail) - theta = 0; - } - if (displaymatrix && !theta) + if (displaymatrix) theta = -av_display_rotation_get((int32_t*) displaymatrix); theta -= 360*floor(theta/360 + 0.9/360); @@ -2063,7 +2123,7 @@ if (!fmt || !fmt->priv_class || !AV_IS_INPUT_DEVICE(fmt->priv_class->category)) return AVERROR(EINVAL); - printf("Audo-detected sources for %s:\n", fmt->name); + printf("Auto-detected sources for %s:\n", fmt->name); if (!fmt->get_device_list) { ret = AVERROR(ENOSYS); printf("Cannot list sources. Not implemented.\n"); @@ -2093,7 +2153,7 @@ if (!fmt || !fmt->priv_class || !AV_IS_OUTPUT_DEVICE(fmt->priv_class->category)) return AVERROR(EINVAL); - printf("Audo-detected sinks for %s:\n", fmt->name); + printf("Auto-detected sinks for %s:\n", fmt->name); if (!fmt->get_device_list) { ret = AVERROR(ENOSYS); printf("Cannot list sinks. Not implemented.\n"); diff -Nru ffmpeg-2.8.6/cmdutils_common_opts.h ffmpeg-3.3.3/cmdutils_common_opts.h --- ffmpeg-2.8.6/cmdutils_common_opts.h 2015-12-20 02:07:42.000000000 +0000 +++ ffmpeg-3.3.3/cmdutils_common_opts.h 2017-07-29 17:49:29.000000000 +0000 @@ -6,6 +6,8 @@ { "version" , OPT_EXIT, {.func_arg = show_version}, "show version" }, { "buildconf" , OPT_EXIT, {.func_arg = show_buildconf}, "show build configuration" }, { "formats" , OPT_EXIT, {.func_arg = show_formats }, "show available formats" }, + { "muxers" , OPT_EXIT, {.func_arg = show_muxers }, "show available muxers" }, + { "demuxers" , OPT_EXIT, {.func_arg = show_demuxers }, "show available demuxers" }, { "devices" , OPT_EXIT, {.func_arg = show_devices }, "show available devices" }, { "codecs" , OPT_EXIT, {.func_arg = show_codecs }, "show available codecs" }, { "decoders" , OPT_EXIT, {.func_arg = show_decoders }, "show available decoders" }, diff -Nru ffmpeg-2.8.6/cmdutils.h ffmpeg-3.3.3/cmdutils.h --- ffmpeg-2.8.6/cmdutils.h 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/cmdutils.h 2017-07-29 17:49:29.000000000 +0000 @@ -19,8 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef FFMPEG_CMDUTILS_H -#define FFMPEG_CMDUTILS_H +#ifndef CMDUTILS_H +#define CMDUTILS_H #include @@ -62,6 +62,11 @@ void exit_program(int ret) av_noreturn; /** + * Initialize dynamic library loading + */ +void init_dynload(void); + +/** * Initialize the cmdutils option system, in particular * allocate the *_opts contexts. */ @@ -437,6 +442,20 @@ int show_formats(void *optctx, const char *opt, const char *arg); /** + * Print a listing containing all the muxers supported by the + * program (including devices). + * This option processing function does not utilize the arguments. + */ +int show_muxers(void *optctx, const char *opt, const char *arg); + +/** + * Print a listing containing all the demuxer supported by the + * program (including devices). + * This option processing function does not utilize the arguments. + */ +int show_demuxers(void *optctx, const char *opt, const char *arg); + +/** * Print a listing containing all the devices supported by the * program. * This option processing function does not utilize the arguments. @@ -445,13 +464,13 @@ #if CONFIG_AVDEVICE /** - * Print a listing containing audodetected sinks of the output device. + * Print a listing containing autodetected sinks of the output device. * Device name with options may be passed as an argument to limit results. */ int show_sinks(void *optctx, const char *opt, const char *arg); /** - * Print a listing containing audodetected sources of the input device. + * Print a listing containing autodetected sources of the input device. * Device name with options may be passed as an argument to limit results. */ int show_sources(void *optctx, const char *opt, const char *arg); diff -Nru ffmpeg-2.8.6/cmdutils_opencl.c ffmpeg-3.3.3/cmdutils_opencl.c --- ffmpeg-2.8.6/cmdutils_opencl.c 2015-06-19 20:44:35.000000000 +0000 +++ ffmpeg-3.3.3/cmdutils_opencl.c 2017-07-29 17:49:29.000000000 +0000 @@ -206,27 +206,34 @@ static int compare_ocl_device_desc(const void *a, const void *b) { - return ((OpenCLDeviceBenchmark*)a)->runtime - ((OpenCLDeviceBenchmark*)b)->runtime; + const OpenCLDeviceBenchmark* va = (const OpenCLDeviceBenchmark*)a; + const OpenCLDeviceBenchmark* vb = (const OpenCLDeviceBenchmark*)b; + return FFDIFFSIGN(va->runtime , vb->runtime); } int opt_opencl_bench(void *optctx, const char *opt, const char *arg) { - int i, j, nb_devices = 0, count = 0; + int i, j, nb_devices = 0, count = 0, ret = 0; int64_t score = 0; AVOpenCLDeviceList *device_list; AVOpenCLDeviceNode *device_node = NULL; OpenCLDeviceBenchmark *devices = NULL; cl_platform_id platform; - av_opencl_get_device_list(&device_list); + ret = av_opencl_get_device_list(&device_list); + if (ret < 0) { + return ret; + } for (i = 0; i < device_list->platform_num; i++) nb_devices += device_list->platform_node[i]->device_num; if (!nb_devices) { av_log(NULL, AV_LOG_ERROR, "No OpenCL device detected!\n"); + av_opencl_free_device_list(&device_list); return AVERROR(EINVAL); } if (!(devices = av_malloc_array(nb_devices, sizeof(OpenCLDeviceBenchmark)))) { av_log(NULL, AV_LOG_ERROR, "Could not allocate buffer\n"); + av_opencl_free_device_list(&device_list); return AVERROR(ENOMEM); } diff -Nru ffmpeg-2.8.6/common.mak ffmpeg-3.3.3/common.mak --- ffmpeg-2.8.6/common.mak 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/common.mak 2017-07-29 17:49:29.000000000 +0000 @@ -18,7 +18,7 @@ ifndef V Q = @ ECHO = printf "$(1)\t%s\n" $(2) -BRIEF = CC CXX HOSTCC HOSTLD AS YASM AR LD STRIP CP WINDRES +BRIEF = CC CXX OBJCC HOSTCC HOSTLD AS YASM AR LD STRIP CP WINDRES SILENT = DEPCC DEPHOSTCC DEPAS DEPYASM RANLIB RM MSG = $@ @@ -32,12 +32,14 @@ ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample # NASM requires -I path terminated with / -IFLAGS := -I. -I$(SRC_PATH)/ +IFLAGS := -I. -I$(SRC_LINK)/ CPPFLAGS := $(IFLAGS) $(CPPFLAGS) CFLAGS += $(ECFLAGS) CCFLAGS = $(CPPFLAGS) $(CFLAGS) +OBJCFLAGS += $(EOBJCFLAGS) +OBJCCFLAGS = $(CPPFLAGS) $(CFLAGS) $(OBJCFLAGS) ASFLAGS := $(CPPFLAGS) $(ASFLAGS) -CXXFLAGS += $(CPPFLAGS) $(CFLAGS) +CXXFLAGS := $(CPPFLAGS) $(CFLAGS) $(CXXFLAGS) YASMFLAGS += $(IFLAGS:%=%/) -Pconfig.asm HOSTCCFLAGS = $(IFLAGS) $(HOSTCPPFLAGS) $(HOSTCFLAGS) @@ -45,12 +47,13 @@ define COMPILE $(call $(1)DEP,$(1)) - $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $< + $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $(patsubst $(SRC_PATH)/%,$(SRC_LINK)/%,$<) endef COMPILE_C = $(call COMPILE,CC) COMPILE_CXX = $(call COMPILE,CXX) COMPILE_S = $(call COMPILE,AS) +COMPILE_M = $(call COMPILE,OBJCC) COMPILE_HOSTC = $(call COMPILE,HOSTCC) %.o: %.c @@ -60,10 +63,10 @@ $(COMPILE_CXX) %.o: %.m - $(COMPILE_C) + $(COMPILE_M) %.s: %.c - $(CC) $(CPPFLAGS) $(CFLAGS) -S -o $@ $< + $(CC) $(CCFLAGS) -S -o $@ $< %.o: %.S $(COMPILE_S) @@ -71,6 +74,15 @@ %_host.o: %.c $(COMPILE_HOSTC) +%$(DEFAULT_YASMD).asm: %.asm + $(DEPYASM) $(YASMFLAGS) -I $( $(@:.asm=.d) + $(YASM) $(YASMFLAGS) -I $( $@ + +%.o: %.asm + $(DEPYASM) $(YASMFLAGS) -I $( $(@:.o=.d) + $(YASM) $(YASMFLAGS) -I $($@ -%.ver: %.v - $(Q)sed 's/$$MAJOR/$($(basename $(@F))_VERSION_MAJOR)/' $^ > $@ - -%.c %.h: TAG = GEN +%.c %.h %.ver: TAG = GEN # Dummy rule to stop make trying to rebuild removed or renamed headers %.h: @@ -109,8 +118,8 @@ OBJS := $(sort $(OBJS:%=$(SUBDIR)%)) SLIBOBJS := $(sort $(SLIBOBJS:%=$(SUBDIR)%)) -TESTOBJS := $(TESTOBJS:%=$(SUBDIR)%) $(TESTPROGS:%=$(SUBDIR)%-test.o) -TESTPROGS := $(TESTPROGS:%=$(SUBDIR)%-test$(EXESUF)) +TESTOBJS := $(TESTOBJS:%=$(SUBDIR)tests/%) $(TESTPROGS:%=$(SUBDIR)tests/%.o) +TESTPROGS := $(TESTPROGS:%=$(SUBDIR)tests/%$(EXESUF)) HOSTOBJS := $(HOSTPROGS:%=$(SUBDIR)%.o) HOSTPROGS := $(HOSTPROGS:%=$(SUBDIR)%$(HOSTEXESUF)) TOOLS += $(TOOLS-yes) @@ -147,15 +156,13 @@ OBJDIRS := $(OBJDIRS) $(dir $(OBJS) $(HOBJS) $(HOSTOBJS) $(SLIBOBJS) $(TESTOBJS)) -CLEANSUFFIXES = *.d *.o *~ *.h.c *.map *.ver *.ho *.gcno *.gcda *$(DEFAULT_YASMD).asm +CLEANSUFFIXES = *.d *.o *~ *.h.c *.gcda *.gcno *.map *.ver *.ho *$(DEFAULT_YASMD).asm DISTCLEANSUFFIXES = *.pc LIBSUFFIXES = *.a *.lib *.so *.so.* *.dylib *.dll *.def *.dll.a define RULES clean:: - $(RM) $(OBJS) $(OBJS:.o=.d) $(OBJS:.o=$(DEFAULT_YASMD).d) - $(RM) $(HOSTPROGS) - $(RM) $(TOOLS) + $(RM) $(HOSTPROGS) $(TESTPROGS) $(TOOLS) endef $(eval $(RULES)) diff -Nru ffmpeg-2.8.6/compat/aix/math.h ffmpeg-3.3.3/compat/aix/math.h --- ffmpeg-2.8.6/compat/aix/math.h 2015-06-18 18:54:54.000000000 +0000 +++ ffmpeg-3.3.3/compat/aix/math.h 2017-06-07 02:03:51.000000000 +0000 @@ -19,8 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef FFMPEG_COMPAT_AIX_MATH_H -#define FFMPEG_COMPAT_AIX_MATH_H +#ifndef COMPAT_AIX_MATH_H +#define COMPAT_AIX_MATH_H #define class class_in_math_h_causes_problems @@ -28,4 +28,4 @@ #undef class -#endif /* FFMPEG_COMPAT_AIX_MATH_H */ +#endif /* COMPAT_AIX_MATH_H */ diff -Nru ffmpeg-2.8.6/compat/atomics/dummy/stdatomic.h ffmpeg-3.3.3/compat/atomics/dummy/stdatomic.h --- ffmpeg-2.8.6/compat/atomics/dummy/stdatomic.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/atomics/dummy/stdatomic.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,176 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * based on vlc_atomic.h from VLC + * Copyright (C) 2010 Rémi Denis-Courmont + */ + +#ifndef COMPAT_ATOMICS_DUMMY_STDATOMIC_H +#define COMPAT_ATOMICS_DUMMY_STDATOMIC_H + +#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) \ + ((void)0) + +#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); \ +} while (0) + +#define atomic_store_explicit(object, desired, order) \ + atomic_store(object, desired) + +#define atomic_load(object) \ + (*(object)) + +#define atomic_load_explicit(object, order) \ + atomic_load(object) + +static inline intptr_t atomic_exchange(intptr_t *object, intptr_t desired) +{ + intptr_t ret = *object; + *object = desired; + return ret; +} + +#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) +{ + int ret; + if (*object == *expected) { + *object = desired; + ret = 1; + } else { + *expected = *object; + ret = 0; + } + return ret; +} + +#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) + +#define FETCH_MODIFY(opname, op) \ +static inline intptr_t atomic_fetch_ ## opname(intptr_t *object, intptr_t operand) \ +{ \ + intptr_t ret; \ + ret = *object; \ + *object = *object op operand; \ + return ret; \ +} + +FETCH_MODIFY(add, +) +FETCH_MODIFY(sub, -) +FETCH_MODIFY(or, |) +FETCH_MODIFY(xor, ^) +FETCH_MODIFY(and, &) + +#undef FETCH_MODIFY + +#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_DUMMY_STDATOMIC_H */ diff -Nru ffmpeg-2.8.6/compat/atomics/gcc/stdatomic.h ffmpeg-3.3.3/compat/atomics/gcc/stdatomic.h --- ffmpeg-2.8.6/compat/atomics/gcc/stdatomic.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/atomics/gcc/stdatomic.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,173 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * based on vlc_atomic.h from VLC + * Copyright (C) 2010 Rémi Denis-Courmont + */ + +#ifndef COMPAT_ATOMICS_GCC_STDATOMIC_H +#define COMPAT_ATOMICS_GCC_STDATOMIC_H + +#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) \ + __sync_synchronize() + +#define atomic_signal_fence(order) \ + ((void)0) + +#define atomic_is_lock_free(obj) 0 + +typedef _Bool atomic_flag; +typedef _Bool atomic_bool; +typedef char atomic_char; +typedef signed char atomic_schar; +typedef unsigned char atomic_uchar; +typedef short atomic_short; +typedef unsigned short atomic_ushort; +typedef int atomic_int; +typedef unsigned int atomic_uint; +typedef long atomic_long; +typedef unsigned long atomic_ulong; +typedef long long atomic_llong; +typedef unsigned long long atomic_ullong; +typedef wchar_t atomic_wchar_t; +typedef int_least8_t atomic_int_least8_t; +typedef uint_least8_t atomic_uint_least8_t; +typedef int_least16_t atomic_int_least16_t; +typedef uint_least16_t atomic_uint_least16_t; +typedef int_least32_t atomic_int_least32_t; +typedef uint_least32_t atomic_uint_least32_t; +typedef int_least64_t atomic_int_least64_t; +typedef uint_least64_t atomic_uint_least64_t; +typedef int_fast8_t atomic_int_fast8_t; +typedef uint_fast8_t atomic_uint_fast8_t; +typedef int_fast16_t atomic_int_fast16_t; +typedef uint_fast16_t atomic_uint_fast16_t; +typedef int_fast32_t atomic_int_fast32_t; +typedef uint_fast32_t atomic_uint_fast32_t; +typedef int_fast64_t atomic_int_fast64_t; +typedef uint_fast64_t atomic_uint_fast64_t; +typedef intptr_t atomic_intptr_t; +typedef uintptr_t atomic_uintptr_t; +typedef size_t atomic_size_t; +typedef ptrdiff_t atomic_ptrdiff_t; +typedef intmax_t atomic_intmax_t; +typedef uintmax_t atomic_uintmax_t; + +#define atomic_store(object, desired) \ +do { \ + *(object) = (desired); \ + __sync_synchronize(); \ +} while (0) + +#define atomic_store_explicit(object, desired, order) \ + atomic_store(object, desired) + +#define atomic_load(object) \ + (__sync_synchronize(), *(object)) + +#define atomic_load_explicit(object, order) \ + atomic_load(object) + +#define atomic_exchange(object, desired) \ +({ \ + __typeof__(object) _obj = (object); \ + __typeof__(*object) _old; \ + do \ + _old = atomic_load(_obj); \ + while (!__sync_bool_compare_and_swap(_obj, _old, (desired))); \ + _old; \ +}) + +#define atomic_exchange_explicit(object, desired, order) \ + atomic_exchange(object, desired) + +#define atomic_compare_exchange_strong(object, expected, desired) \ +({ \ + __typeof__(object) _exp = (expected); \ + __typeof__(*object) _old = *_exp; \ + *_exp = __sync_val_compare_and_swap((object), _old, (desired)); \ + *_exp == _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) + +#define atomic_fetch_add(object, operand) \ + __sync_fetch_and_add(object, operand) + +#define atomic_fetch_add_explicit(object, operand, order) \ + atomic_fetch_add(object, operand) + +#define atomic_fetch_sub(object, operand) \ + __sync_fetch_and_sub(object, operand) + +#define atomic_fetch_sub_explicit(object, operand, order) \ + atomic_fetch_sub(object, operand) + +#define atomic_fetch_or(object, operand) \ + __sync_fetch_and_or(object, operand) + +#define atomic_fetch_or_explicit(object, operand, order) \ + atomic_fetch_or(object, operand) + +#define atomic_fetch_xor(object, operand) \ + __sync_fetch_and_xor(object, operand) + +#define atomic_fetch_xor_explicit(object, operand, order) \ + atomic_fetch_xor(object, operand) + +#define atomic_fetch_and(object, operand) \ + __sync_fetch_and_and(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_GCC_STDATOMIC_H */ diff -Nru ffmpeg-2.8.6/compat/atomics/pthread/stdatomic.c ffmpeg-3.3.3/compat/atomics/pthread/stdatomic.c --- ffmpeg-2.8.6/compat/atomics/pthread/stdatomic.c 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/atomics/pthread/stdatomic.c 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,39 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * based on vlc_atomic.h from VLC + * Copyright (C) 2010 Rémi Denis-Courmont + */ + +#include +#include + +#include "stdatomic.h" + +static pthread_mutex_t atomic_lock = PTHREAD_MUTEX_INITIALIZER; + +void avpriv_atomic_lock(void) +{ + pthread_mutex_lock(&atomic_lock); +} + +void avpriv_atomic_unlock(void) +{ + pthread_mutex_unlock(&atomic_lock); +} diff -Nru ffmpeg-2.8.6/compat/atomics/pthread/stdatomic.h ffmpeg-3.3.3/compat/atomics/pthread/stdatomic.h --- ffmpeg-2.8.6/compat/atomics/pthread/stdatomic.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/atomics/pthread/stdatomic.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,197 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * based on vlc_atomic.h from VLC + * Copyright (C) 2010 Rémi Denis-Courmont + */ + +#ifndef COMPAT_ATOMICS_PTHREAD_STDATOMIC_H +#define COMPAT_ATOMICS_PTHREAD_STDATOMIC_H + +#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_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; + +void avpriv_atomic_lock(void); +void avpriv_atomic_unlock(void); + +static inline void atomic_thread_fence(int order) +{ + avpriv_atomic_lock(); + avpriv_atomic_unlock(); +} + +static inline void atomic_store(intptr_t *object, intptr_t desired) +{ + avpriv_atomic_lock(); + *object = desired; + avpriv_atomic_unlock(); +} + +#define atomic_store_explicit(object, desired, order) \ + atomic_store(object, desired) + +static inline intptr_t atomic_load(intptr_t *object) +{ + intptr_t ret; + avpriv_atomic_lock(); + ret = *object; + avpriv_atomic_unlock(); + return ret; +} + +#define atomic_load_explicit(object, order) \ + atomic_load(object) + +static inline intptr_t atomic_exchange(intptr_t *object, intptr_t desired) +{ + intptr_t ret; + avpriv_atomic_lock(); + ret = *object; + *object = desired; + avpriv_atomic_unlock(); + return ret; +} + +#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) +{ + int ret; + avpriv_atomic_lock(); + if (*object == *expected) { + ret = 1; + *object = desired; + } else { + ret = 0; + *expected = *object; + } + avpriv_atomic_unlock(); + return ret; +} + +#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) + +#define FETCH_MODIFY(opname, op) \ +static inline intptr_t atomic_fetch_ ## opname(intptr_t *object, intptr_t operand) \ +{ \ + intptr_t ret; \ + avpriv_atomic_lock(); \ + ret = *object; \ + *object = *object op operand; \ + avpriv_atomic_unlock(); \ + return ret; \ +} + +FETCH_MODIFY(add, +) +FETCH_MODIFY(sub, -) +FETCH_MODIFY(or, |) +FETCH_MODIFY(xor, ^) +FETCH_MODIFY(and, &) + +#undef FETCH_MODIFY + +#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_PTHREAD_STDATOMIC_H */ diff -Nru ffmpeg-2.8.6/compat/atomics/suncc/stdatomic.h ffmpeg-3.3.3/compat/atomics/suncc/stdatomic.h --- ffmpeg-2.8.6/compat/atomics/suncc/stdatomic.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/atomics/suncc/stdatomic.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,186 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * 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_SUNCC_STDATOMIC_H +#define COMPAT_ATOMICS_SUNCC_STDATOMIC_H + +#include +#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) \ + __machine_rw_barrier(); + +#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; + +static inline void atomic_store(intptr_t *object, intptr_t desired) +{ + *object = desired; + __machine_rw_barrier(); +} + +#define atomic_store_explicit(object, desired, order) \ + atomic_store(object, desired) + +static inline intptr_t atomic_load(intptr_t *object) +{ + __machine_rw_barrier(); + return *object; +} + +#define atomic_load_explicit(object, order) \ + atomic_load(object) + +#define atomic_exchange(object, desired) \ + atomic_swap_ptr(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 = atomic_cas_ptr(object, old, desired); + 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) + +static inline intptr_t atomic_fetch_add(intptr_t *object, intptr_t operand) +{ + return atomic_add_ptr_nv(object, operand) - operand; +} + +#define atomic_fetch_sub(object, operand) \ + atomic_fetch_add(object, -(operand)) + +static inline intptr_t atomic_fetch_or(intptr_t *object, intptr_t operand) +{ + intptr_t old; + do { + old = atomic_load(object); + } while (!atomic_compare_exchange_strong(object, old, old | operand)); + return old; +} + +static inline intptr_t atomic_fetch_xor(intptr_t *object, intptr_t operand) +{ + intptr_t old; + do { + old = atomic_load(object); + } while (!atomic_compare_exchange_strong(object, old, old ^ operand)); + return old; +} + +static inline intptr_t atomic_fetch_and(intptr_t *object, intptr_t operand) +{ + intptr_t old; + do { + old = atomic_load(object); + } while (!atomic_compare_exchange_strong(object, old, old & operand)); + return old; +} + +#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_SUNCC_STDATOMIC_H */ diff -Nru ffmpeg-2.8.6/compat/atomics/win32/stdatomic.h ffmpeg-3.3.3/compat/atomics/win32/stdatomic.h --- ffmpeg-2.8.6/compat/atomics/win32/stdatomic.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/atomics/win32/stdatomic.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,179 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * 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 + +#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 = InterlockedCompareExchangePointer(object, desired, 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 -Nru ffmpeg-2.8.6/compat/avisynth/avisynth_c.h ffmpeg-3.3.3/compat/avisynth/avisynth_c.h --- ffmpeg-2.8.6/compat/avisynth/avisynth_c.h 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/compat/avisynth/avisynth_c.h 2017-07-29 17:49:29.000000000 +0000 @@ -75,54 +75,149 @@ AVS_PLANAR_B_ALIGNED=AVS_PLANAR_B|AVS_PLANAR_ALIGNED}; // Colorspace properties. -enum {AVS_CS_BGR = 1<<28, - AVS_CS_YUV = 1<<29, - AVS_CS_INTERLEAVED = 1<<30, - AVS_CS_PLANAR = 1<<31, - - AVS_CS_SHIFT_SUB_WIDTH = 0, - AVS_CS_SHIFT_SUB_HEIGHT = 8, - AVS_CS_SHIFT_SAMPLE_BITS = 16, - - AVS_CS_SUB_WIDTH_MASK = 7 << AVS_CS_SHIFT_SUB_WIDTH, - AVS_CS_SUB_WIDTH_1 = 3 << AVS_CS_SHIFT_SUB_WIDTH, // YV24 - AVS_CS_SUB_WIDTH_2 = 0 << AVS_CS_SHIFT_SUB_WIDTH, // YV12, I420, YV16 - AVS_CS_SUB_WIDTH_4 = 1 << AVS_CS_SHIFT_SUB_WIDTH, // YUV9, YV411 - - AVS_CS_VPLANEFIRST = 1 << 3, // YV12, YV16, YV24, YV411, YUV9 - AVS_CS_UPLANEFIRST = 1 << 4, // I420 - - AVS_CS_SUB_HEIGHT_MASK = 7 << AVS_CS_SHIFT_SUB_HEIGHT, - AVS_CS_SUB_HEIGHT_1 = 3 << AVS_CS_SHIFT_SUB_HEIGHT, // YV16, YV24, YV411 - AVS_CS_SUB_HEIGHT_2 = 0 << AVS_CS_SHIFT_SUB_HEIGHT, // YV12, I420 - AVS_CS_SUB_HEIGHT_4 = 1 << AVS_CS_SHIFT_SUB_HEIGHT, // YUV9 - - AVS_CS_SAMPLE_BITS_MASK = 7 << AVS_CS_SHIFT_SAMPLE_BITS, - AVS_CS_SAMPLE_BITS_8 = 0 << AVS_CS_SHIFT_SAMPLE_BITS, - AVS_CS_SAMPLE_BITS_16 = 1 << AVS_CS_SHIFT_SAMPLE_BITS, - AVS_CS_SAMPLE_BITS_32 = 2 << AVS_CS_SHIFT_SAMPLE_BITS, +enum { + AVS_CS_YUVA = 1 << 27, + AVS_CS_BGR = 1 << 28, + AVS_CS_YUV = 1 << 29, + AVS_CS_INTERLEAVED = 1 << 30, + AVS_CS_PLANAR = 1 << 31, + + AVS_CS_SHIFT_SUB_WIDTH = 0, + AVS_CS_SHIFT_SUB_HEIGHT = 8, + AVS_CS_SHIFT_SAMPLE_BITS = 16, + + AVS_CS_SUB_WIDTH_MASK = 7 << AVS_CS_SHIFT_SUB_WIDTH, + AVS_CS_SUB_WIDTH_1 = 3 << AVS_CS_SHIFT_SUB_WIDTH, // YV24 + AVS_CS_SUB_WIDTH_2 = 0 << AVS_CS_SHIFT_SUB_WIDTH, // YV12, I420, YV16 + AVS_CS_SUB_WIDTH_4 = 1 << AVS_CS_SHIFT_SUB_WIDTH, // YUV9, YV411 + + AVS_CS_VPLANEFIRST = 1 << 3, // YV12, YV16, YV24, YV411, YUV9 + AVS_CS_UPLANEFIRST = 1 << 4, // I420 + + AVS_CS_SUB_HEIGHT_MASK = 7 << AVS_CS_SHIFT_SUB_HEIGHT, + AVS_CS_SUB_HEIGHT_1 = 3 << AVS_CS_SHIFT_SUB_HEIGHT, // YV16, YV24, YV411 + AVS_CS_SUB_HEIGHT_2 = 0 << AVS_CS_SHIFT_SUB_HEIGHT, // YV12, I420 + AVS_CS_SUB_HEIGHT_4 = 1 << AVS_CS_SHIFT_SUB_HEIGHT, // YUV9 + + AVS_CS_SAMPLE_BITS_MASK = 7 << AVS_CS_SHIFT_SAMPLE_BITS, + AVS_CS_SAMPLE_BITS_8 = 0 << AVS_CS_SHIFT_SAMPLE_BITS, + AVS_CS_SAMPLE_BITS_10 = 5 << AVS_CS_SHIFT_SAMPLE_BITS, + AVS_CS_SAMPLE_BITS_12 = 6 << AVS_CS_SHIFT_SAMPLE_BITS, + AVS_CS_SAMPLE_BITS_14 = 7 << AVS_CS_SHIFT_SAMPLE_BITS, + AVS_CS_SAMPLE_BITS_16 = 1 << AVS_CS_SHIFT_SAMPLE_BITS, + AVS_CS_SAMPLE_BITS_32 = 2 << AVS_CS_SHIFT_SAMPLE_BITS, + + AVS_CS_PLANAR_MASK = AVS_CS_PLANAR | AVS_CS_INTERLEAVED | AVS_CS_YUV | AVS_CS_BGR | AVS_CS_YUVA | AVS_CS_SAMPLE_BITS_MASK | AVS_CS_SUB_HEIGHT_MASK | AVS_CS_SUB_WIDTH_MASK, + AVS_CS_PLANAR_FILTER = ~(AVS_CS_VPLANEFIRST | AVS_CS_UPLANEFIRST), + + AVS_CS_RGB_TYPE = 1 << 0, + AVS_CS_RGBA_TYPE = 1 << 1, + + AVS_CS_GENERIC_YUV420 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_2 | AVS_CS_SUB_WIDTH_2, // 4:2:0 planar + AVS_CS_GENERIC_YUV422 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_1 | AVS_CS_SUB_WIDTH_2, // 4:2:2 planar + AVS_CS_GENERIC_YUV444 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_1 | AVS_CS_SUB_WIDTH_1, // 4:4:4 planar + AVS_CS_GENERIC_Y = AVS_CS_PLANAR | AVS_CS_INTERLEAVED | AVS_CS_YUV, // Y only (4:0:0) + AVS_CS_GENERIC_RGBP = AVS_CS_PLANAR | AVS_CS_BGR | AVS_CS_RGB_TYPE, // planar RGB + AVS_CS_GENERIC_RGBAP = AVS_CS_PLANAR | AVS_CS_BGR | AVS_CS_RGBA_TYPE, // planar RGBA + AVS_CS_GENERIC_YUVA420 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_2 | AVS_CS_SUB_WIDTH_2, // 4:2:0:A planar + AVS_CS_GENERIC_YUVA422 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_1 | AVS_CS_SUB_WIDTH_2, // 4:2:2:A planar + AVS_CS_GENERIC_YUVA444 = AVS_CS_PLANAR | AVS_CS_YUVA | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_1 | AVS_CS_SUB_WIDTH_1 }; // 4:4:4:A planar - AVS_CS_PLANAR_MASK = AVS_CS_PLANAR | AVS_CS_INTERLEAVED | AVS_CS_YUV | AVS_CS_BGR | AVS_CS_SAMPLE_BITS_MASK | AVS_CS_SUB_HEIGHT_MASK | AVS_CS_SUB_WIDTH_MASK, - AVS_CS_PLANAR_FILTER = ~( AVS_CS_VPLANEFIRST | AVS_CS_UPLANEFIRST )}; // Specific colorformats enum { AVS_CS_UNKNOWN = 0, - AVS_CS_BGR24 = 1<<0 | AVS_CS_BGR | AVS_CS_INTERLEAVED, - AVS_CS_BGR32 = 1<<1 | AVS_CS_BGR | AVS_CS_INTERLEAVED, + AVS_CS_BGR24 = AVS_CS_RGB_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED, + AVS_CS_BGR32 = AVS_CS_RGBA_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED, AVS_CS_YUY2 = 1<<2 | AVS_CS_YUV | AVS_CS_INTERLEAVED, // AVS_CS_YV12 = 1<<3 Reserved // AVS_CS_I420 = 1<<4 Reserved AVS_CS_RAW32 = 1<<5 | AVS_CS_INTERLEAVED, - AVS_CS_YV24 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_1 | AVS_CS_SUB_WIDTH_1, // YVU 4:4:4 planar - AVS_CS_YV16 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_1 | AVS_CS_SUB_WIDTH_2, // YVU 4:2:2 planar - AVS_CS_YV12 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_2 | AVS_CS_SUB_WIDTH_2, // YVU 4:2:0 planar + AVS_CS_YV24 = AVS_CS_GENERIC_YUV444 | AVS_CS_SAMPLE_BITS_8, // YVU 4:4:4 planar + AVS_CS_YV16 = AVS_CS_GENERIC_YUV422 | AVS_CS_SAMPLE_BITS_8, // YVU 4:2:2 planar + AVS_CS_YV12 = AVS_CS_GENERIC_YUV420 | AVS_CS_SAMPLE_BITS_8, // YVU 4:2:0 planar AVS_CS_I420 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_UPLANEFIRST | AVS_CS_SUB_HEIGHT_2 | AVS_CS_SUB_WIDTH_2, // YUV 4:2:0 planar AVS_CS_IYUV = AVS_CS_I420, AVS_CS_YV411 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_1 | AVS_CS_SUB_WIDTH_4, // YVU 4:1:1 planar AVS_CS_YUV9 = AVS_CS_PLANAR | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 | AVS_CS_VPLANEFIRST | AVS_CS_SUB_HEIGHT_4 | AVS_CS_SUB_WIDTH_4, // YVU 4:1:0 planar - AVS_CS_Y8 = AVS_CS_PLANAR | AVS_CS_INTERLEAVED | AVS_CS_YUV | AVS_CS_SAMPLE_BITS_8 // Y 4:0:0 planar + AVS_CS_Y8 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_8, // Y 4:0:0 planar + + //------------------------- + // AVS16: new planar constants go live! Experimental PF 160613 + // 10-12-14 bit + planar RGB + BRG48/64 160725 + AVS_CS_YUV444P10 = AVS_CS_GENERIC_YUV444 | AVS_CS_SAMPLE_BITS_10, // YUV 4:4:4 10bit samples + AVS_CS_YUV422P10 = AVS_CS_GENERIC_YUV422 | AVS_CS_SAMPLE_BITS_10, // YUV 4:2:2 10bit samples + AVS_CS_YUV420P10 = AVS_CS_GENERIC_YUV420 | AVS_CS_SAMPLE_BITS_10, // YUV 4:2:0 10bit samples + AVS_CS_Y10 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_10, // Y 4:0:0 10bit samples + + AVS_CS_YUV444P12 = AVS_CS_GENERIC_YUV444 | AVS_CS_SAMPLE_BITS_12, // YUV 4:4:4 12bit samples + AVS_CS_YUV422P12 = AVS_CS_GENERIC_YUV422 | AVS_CS_SAMPLE_BITS_12, // YUV 4:2:2 12bit samples + AVS_CS_YUV420P12 = AVS_CS_GENERIC_YUV420 | AVS_CS_SAMPLE_BITS_12, // YUV 4:2:0 12bit samples + AVS_CS_Y12 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_12, // Y 4:0:0 12bit samples + + AVS_CS_YUV444P14 = AVS_CS_GENERIC_YUV444 | AVS_CS_SAMPLE_BITS_14, // YUV 4:4:4 14bit samples + AVS_CS_YUV422P14 = AVS_CS_GENERIC_YUV422 | AVS_CS_SAMPLE_BITS_14, // YUV 4:2:2 14bit samples + AVS_CS_YUV420P14 = AVS_CS_GENERIC_YUV420 | AVS_CS_SAMPLE_BITS_14, // YUV 4:2:0 14bit samples + AVS_CS_Y14 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_14, // Y 4:0:0 14bit samples + + AVS_CS_YUV444P16 = AVS_CS_GENERIC_YUV444 | AVS_CS_SAMPLE_BITS_16, // YUV 4:4:4 16bit samples + AVS_CS_YUV422P16 = AVS_CS_GENERIC_YUV422 | AVS_CS_SAMPLE_BITS_16, // YUV 4:2:2 16bit samples + AVS_CS_YUV420P16 = AVS_CS_GENERIC_YUV420 | AVS_CS_SAMPLE_BITS_16, // YUV 4:2:0 16bit samples + AVS_CS_Y16 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_16, // Y 4:0:0 16bit samples + + // 32 bit samples (float) + AVS_CS_YUV444PS = AVS_CS_GENERIC_YUV444 | AVS_CS_SAMPLE_BITS_32, // YUV 4:4:4 32bit samples + AVS_CS_YUV422PS = AVS_CS_GENERIC_YUV422 | AVS_CS_SAMPLE_BITS_32, // YUV 4:2:2 32bit samples + AVS_CS_YUV420PS = AVS_CS_GENERIC_YUV420 | AVS_CS_SAMPLE_BITS_32, // YUV 4:2:0 32bit samples + AVS_CS_Y32 = AVS_CS_GENERIC_Y | AVS_CS_SAMPLE_BITS_32, // Y 4:0:0 32bit samples + + // RGB packed + AVS_CS_BGR48 = AVS_CS_RGB_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED | AVS_CS_SAMPLE_BITS_16, // BGR 3x16 bit + AVS_CS_BGR64 = AVS_CS_RGBA_TYPE | AVS_CS_BGR | AVS_CS_INTERLEAVED | AVS_CS_SAMPLE_BITS_16, // BGR 4x16 bit + // no packed 32 bit (float) support for these legacy types + + // RGB planar + AVS_CS_RGBP = AVS_CS_GENERIC_RGBP | AVS_CS_SAMPLE_BITS_8, // Planar RGB 8 bit samples + AVS_CS_RGBP10 = AVS_CS_GENERIC_RGBP | AVS_CS_SAMPLE_BITS_10, // Planar RGB 10bit samples + AVS_CS_RGBP12 = AVS_CS_GENERIC_RGBP | AVS_CS_SAMPLE_BITS_12, // Planar RGB 12bit samples + AVS_CS_RGBP14 = AVS_CS_GENERIC_RGBP | AVS_CS_SAMPLE_BITS_14, // Planar RGB 14bit samples + AVS_CS_RGBP16 = AVS_CS_GENERIC_RGBP | AVS_CS_SAMPLE_BITS_16, // Planar RGB 16bit samples + AVS_CS_RGBPS = AVS_CS_GENERIC_RGBP | AVS_CS_SAMPLE_BITS_32, // Planar RGB 32bit samples + + // RGBA planar + AVS_CS_RGBAP = AVS_CS_GENERIC_RGBAP | AVS_CS_SAMPLE_BITS_8, // Planar RGBA 8 bit samples + AVS_CS_RGBAP10 = AVS_CS_GENERIC_RGBAP | AVS_CS_SAMPLE_BITS_10, // Planar RGBA 10bit samples + AVS_CS_RGBAP12 = AVS_CS_GENERIC_RGBAP | AVS_CS_SAMPLE_BITS_12, // Planar RGBA 12bit samples + AVS_CS_RGBAP14 = AVS_CS_GENERIC_RGBAP | AVS_CS_SAMPLE_BITS_14, // Planar RGBA 14bit samples + AVS_CS_RGBAP16 = AVS_CS_GENERIC_RGBAP | AVS_CS_SAMPLE_BITS_16, // Planar RGBA 16bit samples + AVS_CS_RGBAPS = AVS_CS_GENERIC_RGBAP | AVS_CS_SAMPLE_BITS_32, // Planar RGBA 32bit samples + + // Planar YUVA + AVS_CS_YUVA444 = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_8, // YUVA 4:4:4 8bit samples + AVS_CS_YUVA422 = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_8, // YUVA 4:2:2 8bit samples + AVS_CS_YUVA420 = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_8, // YUVA 4:2:0 8bit samples + + AVS_CS_YUVA444P10 = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_10, // YUVA 4:4:4 10bit samples + AVS_CS_YUVA422P10 = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_10, // YUVA 4:2:2 10bit samples + AVS_CS_YUVA420P10 = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_10, // YUVA 4:2:0 10bit samples + + AVS_CS_YUVA444P12 = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_12, // YUVA 4:4:4 12bit samples + AVS_CS_YUVA422P12 = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_12, // YUVA 4:2:2 12bit samples + AVS_CS_YUVA420P12 = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_12, // YUVA 4:2:0 12bit samples + + AVS_CS_YUVA444P14 = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_14, // YUVA 4:4:4 14bit samples + AVS_CS_YUVA422P14 = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_14, // YUVA 4:2:2 14bit samples + AVS_CS_YUVA420P14 = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_14, // YUVA 4:2:0 14bit samples + + AVS_CS_YUVA444P16 = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:4:4 16bit samples + AVS_CS_YUVA422P16 = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:2:2 16bit samples + AVS_CS_YUVA420P16 = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_16, // YUVA 4:2:0 16bit samples + + AVS_CS_YUVA444PS = AVS_CS_GENERIC_YUVA444 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:4:4 32bit samples + AVS_CS_YUVA422PS = AVS_CS_GENERIC_YUVA422 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:2:2 32bit samples + AVS_CS_YUVA420PS = AVS_CS_GENERIC_YUVA420 | AVS_CS_SAMPLE_BITS_32, // YUVA 4:2:0 32bit samples + }; enum { @@ -247,10 +342,10 @@ { return !!(p->pixel_type&AVS_CS_BGR); } AVSC_INLINE int avs_is_rgb24(const AVS_VideoInfo * p) - { return (p->pixel_type&AVS_CS_BGR24)==AVS_CS_BGR24; } // Clear out additional properties + { return ((p->pixel_type&AVS_CS_BGR24)==AVS_CS_BGR24) && ((p->pixel_type & AVS_CS_SAMPLE_BITS_MASK) == AVS_CS_SAMPLE_BITS_8); } AVSC_INLINE int avs_is_rgb32(const AVS_VideoInfo * p) - { return (p->pixel_type & AVS_CS_BGR32) == AVS_CS_BGR32 ; } + { return ((p->pixel_type&AVS_CS_BGR32)==AVS_CS_BGR32) && ((p->pixel_type & AVS_CS_SAMPLE_BITS_MASK) == AVS_CS_SAMPLE_BITS_8); } AVSC_INLINE int avs_is_yuv(const AVS_VideoInfo * p) { return !!(p->pixel_type&AVS_CS_YUV ); } @@ -258,6 +353,10 @@ AVSC_INLINE int avs_is_yuy2(const AVS_VideoInfo * p) { return (p->pixel_type & AVS_CS_YUY2) == AVS_CS_YUY2; } +AVSC_API(int, avs_is_rgb48)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_rgb64)(const AVS_VideoInfo * p); + AVSC_API(int, avs_is_yv24)(const AVS_VideoInfo * p); AVSC_API(int, avs_is_yv16)(const AVS_VideoInfo * p); @@ -268,6 +367,38 @@ AVSC_API(int, avs_is_y8)(const AVS_VideoInfo * p); +AVSC_API(int, avs_is_yuv444p16)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_yuv422p16)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_yuv420p16)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_y16)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_yuv444ps)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_yuv422ps)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_yuv420ps)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_y32)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_444)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_422)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_420)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_y)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_yuva)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_planar_rgb)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_is_planar_rgba)(const AVS_VideoInfo * p); + + + AVSC_INLINE int avs_is_property(const AVS_VideoInfo * p, int property) { return ((p->image_type & property)==property ); } @@ -365,6 +496,12 @@ } #endif +AVSC_API(int, avs_num_components)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_component_size)(const AVS_VideoInfo * p); + +AVSC_API(int, avs_bits_per_component)(const AVS_VideoInfo * p); + ///////////////////////////////////////////////////////////////////// // // AVS_VideoFrame @@ -528,7 +665,7 @@ { AVS_Value v; avs_set_to_clip(&v, v0); return v; } #endif AVSC_INLINE AVS_Value avs_new_value_array(AVS_Value * v0, int size) - { AVS_Value v; v.type = 'a'; v.d.array = v0; v.array_size = size; return v; } + { AVS_Value v; v.type = 'a'; v.d.array = v0; v.array_size = (short)size; return v; } ///////////////////////////////////////////////////////////////////// // @@ -761,11 +898,28 @@ AVSC_DECLARE_FUNC(avs_vsprintf); AVSC_DECLARE_FUNC(avs_get_error); + AVSC_DECLARE_FUNC(avs_is_rgb48); + AVSC_DECLARE_FUNC(avs_is_rgb64); AVSC_DECLARE_FUNC(avs_is_yv24); AVSC_DECLARE_FUNC(avs_is_yv16); AVSC_DECLARE_FUNC(avs_is_yv12); AVSC_DECLARE_FUNC(avs_is_yv411); AVSC_DECLARE_FUNC(avs_is_y8); + AVSC_DECLARE_FUNC(avs_is_yuv444p16); + AVSC_DECLARE_FUNC(avs_is_yuv422p16); + AVSC_DECLARE_FUNC(avs_is_yuv420p16); + AVSC_DECLARE_FUNC(avs_is_y16); + AVSC_DECLARE_FUNC(avs_is_yuv444ps); + AVSC_DECLARE_FUNC(avs_is_yuv422ps); + AVSC_DECLARE_FUNC(avs_is_yuv420ps); + AVSC_DECLARE_FUNC(avs_is_y32); + AVSC_DECLARE_FUNC(avs_is_444); + AVSC_DECLARE_FUNC(avs_is_422); + AVSC_DECLARE_FUNC(avs_is_420); + AVSC_DECLARE_FUNC(avs_is_y); + AVSC_DECLARE_FUNC(avs_is_yuva); + AVSC_DECLARE_FUNC(avs_is_planar_rgb); + AVSC_DECLARE_FUNC(avs_is_planar_rgba); AVSC_DECLARE_FUNC(avs_is_color_space); AVSC_DECLARE_FUNC(avs_get_plane_width_subsampling); @@ -780,6 +934,11 @@ AVSC_DECLARE_FUNC(avs_get_read_ptr_p); AVSC_DECLARE_FUNC(avs_is_writable); AVSC_DECLARE_FUNC(avs_get_write_ptr_p); + + AVSC_DECLARE_FUNC(avs_num_components); + AVSC_DECLARE_FUNC(avs_component_size); + AVSC_DECLARE_FUNC(avs_bits_per_component); + }; #undef AVSC_DECLARE_FUNC @@ -840,11 +999,28 @@ AVSC_LOAD_FUNC(avs_vsprintf); AVSC_LOAD_FUNC(avs_get_error); + AVSC_LOAD_FUNC(avs_is_rgb48); + AVSC_LOAD_FUNC(avs_is_rgb64); AVSC_LOAD_FUNC(avs_is_yv24); AVSC_LOAD_FUNC(avs_is_yv16); AVSC_LOAD_FUNC(avs_is_yv12); AVSC_LOAD_FUNC(avs_is_yv411); AVSC_LOAD_FUNC(avs_is_y8); + AVSC_LOAD_FUNC(avs_is_yuv444p16); + AVSC_LOAD_FUNC(avs_is_yuv422p16); + AVSC_LOAD_FUNC(avs_is_yuv420p16); + AVSC_LOAD_FUNC(avs_is_y16); + AVSC_LOAD_FUNC(avs_is_yuv444ps); + AVSC_LOAD_FUNC(avs_is_yuv422ps); + AVSC_LOAD_FUNC(avs_is_yuv420ps); + AVSC_LOAD_FUNC(avs_is_y32); + AVSC_LOAD_FUNC(avs_is_444); + AVSC_LOAD_FUNC(avs_is_422); + AVSC_LOAD_FUNC(avs_is_420); + AVSC_LOAD_FUNC(avs_is_y); + AVSC_LOAD_FUNC(avs_is_yuva); + AVSC_LOAD_FUNC(avs_is_planar_rgb); + AVSC_LOAD_FUNC(avs_is_planar_rgba); AVSC_LOAD_FUNC(avs_is_color_space); AVSC_LOAD_FUNC(avs_get_plane_width_subsampling); @@ -860,6 +1036,12 @@ AVSC_LOAD_FUNC(avs_is_writable); AVSC_LOAD_FUNC(avs_get_write_ptr_p); + AVSC_LOAD_FUNC(avs_num_components); + AVSC_LOAD_FUNC(avs_component_size); + AVSC_LOAD_FUNC(avs_bits_per_component); + + + #undef __AVSC_STRINGIFY #undef AVSC_STRINGIFY #undef AVSC_LOAD_FUNC diff -Nru ffmpeg-2.8.6/compat/cuda/dynlink_cuda.h ffmpeg-3.3.3/compat/cuda/dynlink_cuda.h --- ffmpeg-2.8.6/compat/cuda/dynlink_cuda.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/cuda/dynlink_cuda.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,97 @@ +/* + * This copyright notice applies to this header file only: + * + * Copyright (c) 2016 + * + * 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. + */ + +#if !defined(AV_COMPAT_DYNLINK_CUDA_H) && !defined(CUDA_VERSION) +#define AV_COMPAT_DYNLINK_CUDA_H + +#include + +#define CUDA_VERSION 7050 + +#if defined(_WIN32) || defined(__CYGWIN__) +#define CUDAAPI __stdcall +#else +#define CUDAAPI +#endif + +#define CU_CTX_SCHED_BLOCKING_SYNC 4 + +typedef int CUdevice; +typedef void* CUarray; +typedef void* CUcontext; +#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) +typedef unsigned long long CUdeviceptr; +#else +typedef unsigned int CUdeviceptr; +#endif + +typedef enum cudaError_enum { + CUDA_SUCCESS = 0 +} CUresult; + +typedef enum CUmemorytype_enum { + CU_MEMORYTYPE_HOST = 1, + CU_MEMORYTYPE_DEVICE = 2 +} CUmemorytype; + +typedef struct CUDA_MEMCPY2D_st { + size_t srcXInBytes; + size_t srcY; + CUmemorytype srcMemoryType; + const void *srcHost; + CUdeviceptr srcDevice; + CUarray srcArray; + size_t srcPitch; + + size_t dstXInBytes; + size_t dstY; + CUmemorytype dstMemoryType; + void *dstHost; + CUdeviceptr dstDevice; + CUarray dstArray; + size_t dstPitch; + + size_t WidthInBytes; + size_t Height; +} CUDA_MEMCPY2D; + +typedef CUresult CUDAAPI tcuInit(unsigned int Flags); +typedef CUresult CUDAAPI tcuDeviceGetCount(int *count); +typedef CUresult CUDAAPI tcuDeviceGet(CUdevice *device, int ordinal); +typedef CUresult CUDAAPI tcuDeviceGetName(char *name, int len, CUdevice dev); +typedef CUresult CUDAAPI tcuDeviceComputeCapability(int *major, int *minor, CUdevice dev); +typedef CUresult CUDAAPI tcuCtxCreate_v2(CUcontext *pctx, unsigned int flags, CUdevice dev); +typedef CUresult CUDAAPI tcuCtxPushCurrent_v2(CUcontext *pctx); +typedef CUresult CUDAAPI tcuCtxPopCurrent_v2(CUcontext *pctx); +typedef CUresult CUDAAPI tcuCtxDestroy_v2(CUcontext ctx); +typedef CUresult CUDAAPI tcuMemAlloc_v2(CUdeviceptr *dptr, size_t bytesize); +typedef CUresult CUDAAPI tcuMemFree_v2(CUdeviceptr dptr); +typedef CUresult CUDAAPI tcuMemcpy2D_v2(const CUDA_MEMCPY2D *pcopy); +typedef CUresult CUDAAPI tcuGetErrorName(CUresult error, const char** pstr); +typedef CUresult CUDAAPI tcuGetErrorString(CUresult error, const char** pstr); + +#endif diff -Nru ffmpeg-2.8.6/compat/cuda/dynlink_cuviddec.h ffmpeg-3.3.3/compat/cuda/dynlink_cuviddec.h --- ffmpeg-2.8.6/compat/cuda/dynlink_cuviddec.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/cuda/dynlink_cuviddec.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,815 @@ +/* + * This copyright notice applies to this header file only: + * + * Copyright (c) 2010-2016 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the software, and to permit persons to whom the + * software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file cuviddec.h + * NvCuvid API provides Video Decoding interface to NVIDIA GPU devices. + * \date 2015-2016 + * This file contains constants, structure definitions and function prototypes used for decoding. + */ + +#if !defined(__CUDA_VIDEO_H__) +#define __CUDA_VIDEO_H__ + +#if defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) +#if (CUDA_VERSION >= 3020) && (!defined(CUDA_FORCE_API_VERSION) || (CUDA_FORCE_API_VERSION >= 3020)) +#define __CUVID_DEVPTR64 +#endif +#endif + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +#if defined(__CYGWIN__) +typedef unsigned int tcu_ulong; +#else +typedef unsigned long tcu_ulong; +#endif + +typedef void *CUvideodecoder; +typedef struct _CUcontextlock_st *CUvideoctxlock; + +/** + * \addtogroup VIDEO_DECODER Video Decoder + * @{ + */ + +/*! + * \enum cudaVideoCodec + * Video Codec Enums + */ +typedef enum cudaVideoCodec_enum { + cudaVideoCodec_MPEG1=0, /**< MPEG1 */ + cudaVideoCodec_MPEG2, /**< MPEG2 */ + cudaVideoCodec_MPEG4, /**< MPEG4 */ + cudaVideoCodec_VC1, /**< VC1 */ + cudaVideoCodec_H264, /**< H264 */ + cudaVideoCodec_JPEG, /**< JPEG */ + cudaVideoCodec_H264_SVC, /**< H264-SVC */ + cudaVideoCodec_H264_MVC, /**< H264-MVC */ + cudaVideoCodec_HEVC, /**< HEVC */ + cudaVideoCodec_VP8, /**< VP8 */ + cudaVideoCodec_VP9, /**< VP9 */ + cudaVideoCodec_NumCodecs, /**< Max COdecs */ + // Uncompressed YUV + cudaVideoCodec_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), /**< Y,U,V (4:2:0) */ + cudaVideoCodec_YV12 = (('Y'<<24)|('V'<<16)|('1'<<8)|('2')), /**< Y,V,U (4:2:0) */ + cudaVideoCodec_NV12 = (('N'<<24)|('V'<<16)|('1'<<8)|('2')), /**< Y,UV (4:2:0) */ + cudaVideoCodec_YUYV = (('Y'<<24)|('U'<<16)|('Y'<<8)|('V')), /**< YUYV/YUY2 (4:2:2) */ + cudaVideoCodec_UYVY = (('U'<<24)|('Y'<<16)|('V'<<8)|('Y')) /**< UYVY (4:2:2) */ +} cudaVideoCodec; + +/*! + * \enum cudaVideoSurfaceFormat + * Video Surface Formats Enums + */ +typedef enum cudaVideoSurfaceFormat_enum { + cudaVideoSurfaceFormat_NV12=0, /**< NV12 */ + cudaVideoSurfaceFormat_P016=1 /**< P016 */ +} cudaVideoSurfaceFormat; + +/*! + * \enum cudaVideoDeinterlaceMode + * Deinterlacing Modes Enums + */ +typedef enum cudaVideoDeinterlaceMode_enum { + cudaVideoDeinterlaceMode_Weave=0, /**< Weave both fields (no deinterlacing) */ + cudaVideoDeinterlaceMode_Bob, /**< Drop one field */ + cudaVideoDeinterlaceMode_Adaptive /**< Adaptive deinterlacing */ +} cudaVideoDeinterlaceMode; + +/*! + * \enum cudaVideoChromaFormat + * Chroma Formats Enums + */ +typedef enum cudaVideoChromaFormat_enum { + cudaVideoChromaFormat_Monochrome=0, /**< MonoChrome */ + cudaVideoChromaFormat_420, /**< 4:2:0 */ + cudaVideoChromaFormat_422, /**< 4:2:2 */ + cudaVideoChromaFormat_444 /**< 4:4:4 */ +} cudaVideoChromaFormat; + +/*! + * \enum cudaVideoCreateFlags + * Decoder Flags Enums + */ +typedef enum cudaVideoCreateFlags_enum { + cudaVideoCreate_Default = 0x00, /**< Default operation mode: use dedicated video engines */ + cudaVideoCreate_PreferCUDA = 0x01, /**< Use a CUDA-based decoder if faster than dedicated engines (requires a valid vidLock object for multi-threading) */ + cudaVideoCreate_PreferDXVA = 0x02, /**< Go through DXVA internally if possible (requires D3D9 interop) */ + cudaVideoCreate_PreferCUVID = 0x04 /**< Use dedicated video engines directly */ +} cudaVideoCreateFlags; + +/*! + * \struct CUVIDDECODECREATEINFO + * Struct used in create decoder + */ +typedef struct _CUVIDDECODECREATEINFO +{ + tcu_ulong ulWidth; /**< Coded Sequence Width */ + tcu_ulong ulHeight; /**< Coded Sequence Height */ + tcu_ulong ulNumDecodeSurfaces; /**< Maximum number of internal decode surfaces */ + cudaVideoCodec CodecType; /**< cudaVideoCodec_XXX */ + cudaVideoChromaFormat ChromaFormat; /**< cudaVideoChromaFormat_XXX (only 4:2:0 is currently supported) */ + tcu_ulong ulCreationFlags; /**< Decoder creation flags (cudaVideoCreateFlags_XXX) */ + tcu_ulong bitDepthMinus8; + tcu_ulong Reserved1[4]; /**< Reserved for future use - set to zero */ + /** + * area of the frame that should be displayed + */ + struct { + short left; + short top; + short right; + short bottom; + } display_area; + + cudaVideoSurfaceFormat OutputFormat; /**< cudaVideoSurfaceFormat_XXX */ + cudaVideoDeinterlaceMode DeinterlaceMode; /**< cudaVideoDeinterlaceMode_XXX */ + tcu_ulong ulTargetWidth; /**< Post-processed Output Width (Should be aligned to 2) */ + tcu_ulong ulTargetHeight; /**< Post-processed Output Height (Should be aligbed to 2) */ + tcu_ulong ulNumOutputSurfaces; /**< Maximum number of output surfaces simultaneously mapped */ + CUvideoctxlock vidLock; /**< If non-NULL, context lock used for synchronizing ownership of the cuda context */ + /** + * target rectangle in the output frame (for aspect ratio conversion) + * if a null rectangle is specified, {0,0,ulTargetWidth,ulTargetHeight} will be used + */ + struct { + short left; + short top; + short right; + short bottom; + } target_rect; + tcu_ulong Reserved2[5]; /**< Reserved for future use - set to zero */ +} CUVIDDECODECREATEINFO; + +/*! + * \struct CUVIDH264DPBENTRY + * H.264 DPB Entry + */ +typedef struct _CUVIDH264DPBENTRY +{ + int PicIdx; /**< picture index of reference frame */ + int FrameIdx; /**< frame_num(short-term) or LongTermFrameIdx(long-term) */ + int is_long_term; /**< 0=short term reference, 1=long term reference */ + int not_existing; /**< non-existing reference frame (corresponding PicIdx should be set to -1) */ + int used_for_reference; /**< 0=unused, 1=top_field, 2=bottom_field, 3=both_fields */ + int FieldOrderCnt[2]; /**< field order count of top and bottom fields */ +} CUVIDH264DPBENTRY; + +/*! + * \struct CUVIDH264MVCEXT + * H.264 MVC Picture Parameters Ext + */ +typedef struct _CUVIDH264MVCEXT +{ + int num_views_minus1; + int view_id; + unsigned char inter_view_flag; + unsigned char num_inter_view_refs_l0; + unsigned char num_inter_view_refs_l1; + unsigned char MVCReserved8Bits; + int InterViewRefsL0[16]; + int InterViewRefsL1[16]; +} CUVIDH264MVCEXT; + +/*! + * \struct CUVIDH264SVCEXT + * H.264 SVC Picture Parameters Ext + */ +typedef struct _CUVIDH264SVCEXT +{ + unsigned char profile_idc; + unsigned char level_idc; + unsigned char DQId; + unsigned char DQIdMax; + unsigned char disable_inter_layer_deblocking_filter_idc; + unsigned char ref_layer_chroma_phase_y_plus1; + signed char inter_layer_slice_alpha_c0_offset_div2; + signed char inter_layer_slice_beta_offset_div2; + + unsigned short DPBEntryValidFlag; + unsigned char inter_layer_deblocking_filter_control_present_flag; + unsigned char extended_spatial_scalability_idc; + unsigned char adaptive_tcoeff_level_prediction_flag; + unsigned char slice_header_restriction_flag; + unsigned char chroma_phase_x_plus1_flag; + unsigned char chroma_phase_y_plus1; + + unsigned char tcoeff_level_prediction_flag; + unsigned char constrained_intra_resampling_flag; + unsigned char ref_layer_chroma_phase_x_plus1_flag; + unsigned char store_ref_base_pic_flag; + unsigned char Reserved8BitsA; + unsigned char Reserved8BitsB; + // For the 4 scaled_ref_layer_XX fields below, + // if (extended_spatial_scalability_idc == 1), SPS field, G.7.3.2.1.4, add prefix "seq_" + // if (extended_spatial_scalability_idc == 2), SLH field, G.7.3.3.4, + short scaled_ref_layer_left_offset; + short scaled_ref_layer_top_offset; + short scaled_ref_layer_right_offset; + short scaled_ref_layer_bottom_offset; + unsigned short Reserved16Bits; + struct _CUVIDPICPARAMS *pNextLayer; /**< Points to the picparams for the next layer to be decoded. Linked list ends at the target layer. */ + int bRefBaseLayer; /**< whether to store ref base pic */ +} CUVIDH264SVCEXT; + +/*! + * \struct CUVIDH264PICPARAMS + * H.264 Picture Parameters + */ +typedef struct _CUVIDH264PICPARAMS +{ + // SPS + int log2_max_frame_num_minus4; + int pic_order_cnt_type; + int log2_max_pic_order_cnt_lsb_minus4; + int delta_pic_order_always_zero_flag; + int frame_mbs_only_flag; + int direct_8x8_inference_flag; + int num_ref_frames; // NOTE: shall meet level 4.1 restrictions + unsigned char residual_colour_transform_flag; + unsigned char bit_depth_luma_minus8; // Must be 0 (only 8-bit supported) + unsigned char bit_depth_chroma_minus8; // Must be 0 (only 8-bit supported) + unsigned char qpprime_y_zero_transform_bypass_flag; + // PPS + int entropy_coding_mode_flag; + int pic_order_present_flag; + int num_ref_idx_l0_active_minus1; + int num_ref_idx_l1_active_minus1; + int weighted_pred_flag; + int weighted_bipred_idc; + int pic_init_qp_minus26; + int deblocking_filter_control_present_flag; + int redundant_pic_cnt_present_flag; + int transform_8x8_mode_flag; + int MbaffFrameFlag; + int constrained_intra_pred_flag; + int chroma_qp_index_offset; + int second_chroma_qp_index_offset; + int ref_pic_flag; + int frame_num; + int CurrFieldOrderCnt[2]; + // DPB + CUVIDH264DPBENTRY dpb[16]; // List of reference frames within the DPB + // Quantization Matrices (raster-order) + unsigned char WeightScale4x4[6][16]; + unsigned char WeightScale8x8[2][64]; + // FMO/ASO + unsigned char fmo_aso_enable; + unsigned char num_slice_groups_minus1; + unsigned char slice_group_map_type; + signed char pic_init_qs_minus26; + unsigned int slice_group_change_rate_minus1; + union + { + unsigned long long slice_group_map_addr; + const unsigned char *pMb2SliceGroupMap; + } fmo; + unsigned int Reserved[12]; + // SVC/MVC + union + { + CUVIDH264MVCEXT mvcext; + CUVIDH264SVCEXT svcext; + } svcmvc; +} CUVIDH264PICPARAMS; + + +/*! + * \struct CUVIDMPEG2PICPARAMS + * MPEG-2 Picture Parameters + */ +typedef struct _CUVIDMPEG2PICPARAMS +{ + int ForwardRefIdx; // Picture index of forward reference (P/B-frames) + int BackwardRefIdx; // Picture index of backward reference (B-frames) + int picture_coding_type; + int full_pel_forward_vector; + int full_pel_backward_vector; + int f_code[2][2]; + int intra_dc_precision; + int frame_pred_frame_dct; + int concealment_motion_vectors; + int q_scale_type; + int intra_vlc_format; + int alternate_scan; + int top_field_first; + // Quantization matrices (raster order) + unsigned char QuantMatrixIntra[64]; + unsigned char QuantMatrixInter[64]; +} CUVIDMPEG2PICPARAMS; + +//////////////////////////////////////////////////////////////////////////////////////////////// +// +// MPEG-4 Picture Parameters +// + +// MPEG-4 has VOP types instead of Picture types +#define I_VOP 0 +#define P_VOP 1 +#define B_VOP 2 +#define S_VOP 3 + +/*! + * \struct CUVIDMPEG4PICPARAMS + * MPEG-4 Picture Parameters + */ +typedef struct _CUVIDMPEG4PICPARAMS +{ + int ForwardRefIdx; // Picture index of forward reference (P/B-frames) + int BackwardRefIdx; // Picture index of backward reference (B-frames) + // VOL + int video_object_layer_width; + int video_object_layer_height; + int vop_time_increment_bitcount; + int top_field_first; + int resync_marker_disable; + int quant_type; + int quarter_sample; + int short_video_header; + int divx_flags; + // VOP + int vop_coding_type; + int vop_coded; + int vop_rounding_type; + int alternate_vertical_scan_flag; + int interlaced; + int vop_fcode_forward; + int vop_fcode_backward; + int trd[2]; + int trb[2]; + // Quantization matrices (raster order) + unsigned char QuantMatrixIntra[64]; + unsigned char QuantMatrixInter[64]; + int gmc_enabled; +} CUVIDMPEG4PICPARAMS; + +/*! + * \struct CUVIDVC1PICPARAMS + * VC1 Picture Parameters + */ +typedef struct _CUVIDVC1PICPARAMS +{ + int ForwardRefIdx; /**< Picture index of forward reference (P/B-frames) */ + int BackwardRefIdx; /**< Picture index of backward reference (B-frames) */ + int FrameWidth; /**< Actual frame width */ + int FrameHeight; /**< Actual frame height */ + // PICTURE + int intra_pic_flag; /**< Set to 1 for I,BI frames */ + int ref_pic_flag; /**< Set to 1 for I,P frames */ + int progressive_fcm; /**< Progressive frame */ + // SEQUENCE + int profile; + int postprocflag; + int pulldown; + int interlace; + int tfcntrflag; + int finterpflag; + int psf; + int multires; + int syncmarker; + int rangered; + int maxbframes; + // ENTRYPOINT + int panscan_flag; + int refdist_flag; + int extended_mv; + int dquant; + int vstransform; + int loopfilter; + int fastuvmc; + int overlap; + int quantizer; + int extended_dmv; + int range_mapy_flag; + int range_mapy; + int range_mapuv_flag; + int range_mapuv; + int rangeredfrm; // range reduction state +} CUVIDVC1PICPARAMS; + +/*! + * \struct CUVIDJPEGPICPARAMS + * JPEG Picture Parameters + */ +typedef struct _CUVIDJPEGPICPARAMS +{ + int Reserved; +} CUVIDJPEGPICPARAMS; + + + /*! + * \struct CUVIDHEVCPICPARAMS + * HEVC Picture Parameters + */ +typedef struct _CUVIDHEVCPICPARAMS +{ + // sps + int pic_width_in_luma_samples; + int pic_height_in_luma_samples; + unsigned char log2_min_luma_coding_block_size_minus3; + unsigned char log2_diff_max_min_luma_coding_block_size; + unsigned char log2_min_transform_block_size_minus2; + unsigned char log2_diff_max_min_transform_block_size; + unsigned char pcm_enabled_flag; + unsigned char log2_min_pcm_luma_coding_block_size_minus3; + unsigned char log2_diff_max_min_pcm_luma_coding_block_size; + unsigned char pcm_sample_bit_depth_luma_minus1; + + unsigned char pcm_sample_bit_depth_chroma_minus1; + unsigned char pcm_loop_filter_disabled_flag; + unsigned char strong_intra_smoothing_enabled_flag; + unsigned char max_transform_hierarchy_depth_intra; + unsigned char max_transform_hierarchy_depth_inter; + unsigned char amp_enabled_flag; + unsigned char separate_colour_plane_flag; + unsigned char log2_max_pic_order_cnt_lsb_minus4; + + unsigned char num_short_term_ref_pic_sets; + unsigned char long_term_ref_pics_present_flag; + unsigned char num_long_term_ref_pics_sps; + unsigned char sps_temporal_mvp_enabled_flag; + unsigned char sample_adaptive_offset_enabled_flag; + unsigned char scaling_list_enable_flag; + unsigned char IrapPicFlag; + unsigned char IdrPicFlag; + + unsigned char bit_depth_luma_minus8; + unsigned char bit_depth_chroma_minus8; + unsigned char reserved1[14]; + + // pps + unsigned char dependent_slice_segments_enabled_flag; + unsigned char slice_segment_header_extension_present_flag; + unsigned char sign_data_hiding_enabled_flag; + unsigned char cu_qp_delta_enabled_flag; + unsigned char diff_cu_qp_delta_depth; + signed char init_qp_minus26; + signed char pps_cb_qp_offset; + signed char pps_cr_qp_offset; + + unsigned char constrained_intra_pred_flag; + unsigned char weighted_pred_flag; + unsigned char weighted_bipred_flag; + unsigned char transform_skip_enabled_flag; + unsigned char transquant_bypass_enabled_flag; + unsigned char entropy_coding_sync_enabled_flag; + unsigned char log2_parallel_merge_level_minus2; + unsigned char num_extra_slice_header_bits; + + unsigned char loop_filter_across_tiles_enabled_flag; + unsigned char loop_filter_across_slices_enabled_flag; + unsigned char output_flag_present_flag; + unsigned char num_ref_idx_l0_default_active_minus1; + unsigned char num_ref_idx_l1_default_active_minus1; + unsigned char lists_modification_present_flag; + unsigned char cabac_init_present_flag; + unsigned char pps_slice_chroma_qp_offsets_present_flag; + + unsigned char deblocking_filter_override_enabled_flag; + unsigned char pps_deblocking_filter_disabled_flag; + signed char pps_beta_offset_div2; + signed char pps_tc_offset_div2; + unsigned char tiles_enabled_flag; + unsigned char uniform_spacing_flag; + unsigned char num_tile_columns_minus1; + unsigned char num_tile_rows_minus1; + + unsigned short column_width_minus1[21]; + unsigned short row_height_minus1[21]; + unsigned int reserved3[15]; + + // RefPicSets + int NumBitsForShortTermRPSInSlice; + int NumDeltaPocsOfRefRpsIdx; + int NumPocTotalCurr; + int NumPocStCurrBefore; + int NumPocStCurrAfter; + int NumPocLtCurr; + int CurrPicOrderCntVal; + int RefPicIdx[16]; // [refpic] Indices of valid reference pictures (-1 if unused for reference) + int PicOrderCntVal[16]; // [refpic] + unsigned char IsLongTerm[16]; // [refpic] 0=not a long-term reference, 1=long-term reference + unsigned char RefPicSetStCurrBefore[8]; // [0..NumPocStCurrBefore-1] -> refpic (0..15) + unsigned char RefPicSetStCurrAfter[8]; // [0..NumPocStCurrAfter-1] -> refpic (0..15) + unsigned char RefPicSetLtCurr[8]; // [0..NumPocLtCurr-1] -> refpic (0..15) + unsigned char RefPicSetInterLayer0[8]; + unsigned char RefPicSetInterLayer1[8]; + unsigned int reserved4[12]; + + // scaling lists (diag order) + unsigned char ScalingList4x4[6][16]; // [matrixId][i] + unsigned char ScalingList8x8[6][64]; // [matrixId][i] + unsigned char ScalingList16x16[6][64]; // [matrixId][i] + unsigned char ScalingList32x32[2][64]; // [matrixId][i] + unsigned char ScalingListDCCoeff16x16[6]; // [matrixId] + unsigned char ScalingListDCCoeff32x32[2]; // [matrixId] +} CUVIDHEVCPICPARAMS; + + +/*! + * \struct CUVIDVP8PICPARAMS + * VP8 Picture Parameters + */ +typedef struct _CUVIDVP8PICPARAMS +{ + int width; + int height; + unsigned int first_partition_size; + //Frame Indexes + unsigned char LastRefIdx; + unsigned char GoldenRefIdx; + unsigned char AltRefIdx; + union { + struct { + unsigned char frame_type : 1; /**< 0 = KEYFRAME, 1 = INTERFRAME */ + unsigned char version : 3; + unsigned char show_frame : 1; + unsigned char update_mb_segmentation_data : 1; /**< Must be 0 if segmentation is not enabled */ + unsigned char Reserved2Bits : 2; + }; + unsigned char wFrameTagFlags; + } tagflags; + unsigned char Reserved1[4]; + unsigned int Reserved2[3]; +} CUVIDVP8PICPARAMS; + +/*! + * \struct CUVIDVP9PICPARAMS + * VP9 Picture Parameters + */ +typedef struct _CUVIDVP9PICPARAMS +{ + unsigned int width; + unsigned int height; + + //Frame Indices + unsigned char LastRefIdx; + unsigned char GoldenRefIdx; + unsigned char AltRefIdx; + unsigned char colorSpace; + + unsigned short profile : 3; + unsigned short frameContextIdx : 2; + unsigned short frameType : 1; + unsigned short showFrame : 1; + unsigned short errorResilient : 1; + unsigned short frameParallelDecoding : 1; + unsigned short subSamplingX : 1; + unsigned short subSamplingY : 1; + unsigned short intraOnly : 1; + unsigned short allow_high_precision_mv : 1; + unsigned short refreshEntropyProbs : 1; + unsigned short reserved2Bits : 2; + + unsigned short reserved16Bits; + + unsigned char refFrameSignBias[4]; + + unsigned char bitDepthMinus8Luma; + unsigned char bitDepthMinus8Chroma; + unsigned char loopFilterLevel; + unsigned char loopFilterSharpness; + + unsigned char modeRefLfEnabled; + unsigned char log2_tile_columns; + unsigned char log2_tile_rows; + + unsigned char segmentEnabled : 1; + unsigned char segmentMapUpdate : 1; + unsigned char segmentMapTemporalUpdate : 1; + unsigned char segmentFeatureMode : 1; + unsigned char reserved4Bits : 4; + + + unsigned char segmentFeatureEnable[8][4]; + short segmentFeatureData[8][4]; + unsigned char mb_segment_tree_probs[7]; + unsigned char segment_pred_probs[3]; + unsigned char reservedSegment16Bits[2]; + + int qpYAc; + int qpYDc; + int qpChDc; + int qpChAc; + + unsigned int activeRefIdx[3]; + unsigned int resetFrameContext; + unsigned int mcomp_filter_type; + unsigned int mbRefLfDelta[4]; + unsigned int mbModeLfDelta[2]; + unsigned int frameTagSize; + unsigned int offsetToDctParts; + unsigned int reserved128Bits[4]; + +} CUVIDVP9PICPARAMS; + + +/*! + * \struct CUVIDPICPARAMS + * Picture Parameters for Decoding + */ +typedef struct _CUVIDPICPARAMS +{ + int PicWidthInMbs; /**< Coded Frame Size */ + int FrameHeightInMbs; /**< Coded Frame Height */ + int CurrPicIdx; /**< Output index of the current picture */ + int field_pic_flag; /**< 0=frame picture, 1=field picture */ + int bottom_field_flag; /**< 0=top field, 1=bottom field (ignored if field_pic_flag=0) */ + int second_field; /**< Second field of a complementary field pair */ + // Bitstream data + unsigned int nBitstreamDataLen; /**< Number of bytes in bitstream data buffer */ + const unsigned char *pBitstreamData; /**< Ptr to bitstream data for this picture (slice-layer) */ + unsigned int nNumSlices; /**< Number of slices in this picture */ + const unsigned int *pSliceDataOffsets; /**< nNumSlices entries, contains offset of each slice within the bitstream data buffer */ + int ref_pic_flag; /**< This picture is a reference picture */ + int intra_pic_flag; /**< This picture is entirely intra coded */ + unsigned int Reserved[30]; /**< Reserved for future use */ + // Codec-specific data + union { + CUVIDMPEG2PICPARAMS mpeg2; /**< Also used for MPEG-1 */ + CUVIDH264PICPARAMS h264; + CUVIDVC1PICPARAMS vc1; + CUVIDMPEG4PICPARAMS mpeg4; + CUVIDJPEGPICPARAMS jpeg; + CUVIDHEVCPICPARAMS hevc; + CUVIDVP8PICPARAMS vp8; + CUVIDVP9PICPARAMS vp9; + unsigned int CodecReserved[1024]; + } CodecSpecific; +} CUVIDPICPARAMS; + + +/*! + * \struct CUVIDPROCPARAMS + * Picture Parameters for Postprocessing + */ +typedef struct _CUVIDPROCPARAMS +{ + int progressive_frame; /**< Input is progressive (deinterlace_mode will be ignored) */ + int second_field; /**< Output the second field (ignored if deinterlace mode is Weave) */ + int top_field_first; /**< Input frame is top field first (1st field is top, 2nd field is bottom) */ + int unpaired_field; /**< Input only contains one field (2nd field is invalid) */ + // The fields below are used for raw YUV input + unsigned int reserved_flags; /**< Reserved for future use (set to zero) */ + unsigned int reserved_zero; /**< Reserved (set to zero) */ + unsigned long long raw_input_dptr; /**< Input CUdeviceptr for raw YUV extensions */ + unsigned int raw_input_pitch; /**< pitch in bytes of raw YUV input (should be aligned appropriately) */ + unsigned int raw_input_format; /**< Reserved for future use (set to zero) */ + unsigned long long raw_output_dptr; /**< Reserved for future use (set to zero) */ + unsigned int raw_output_pitch; /**< Reserved for future use (set to zero) */ + unsigned int Reserved[48]; + void *Reserved3[3]; +} CUVIDPROCPARAMS; + + +/** + * + * In order to minimize decode latencies, there should be always at least 2 pictures in the decode + * queue at any time, in order to make sure that all decode engines are always busy. + * + * Overall data flow: + * - cuvidCreateDecoder(...) + * For each picture: + * - cuvidDecodePicture(N) + * - cuvidMapVideoFrame(N-4) + * - do some processing in cuda + * - cuvidUnmapVideoFrame(N-4) + * - cuvidDecodePicture(N+1) + * - cuvidMapVideoFrame(N-3) + * ... + * - cuvidDestroyDecoder(...) + * + * NOTE: + * - When the cuda context is created from a D3D device, the D3D device must also be created + * with the D3DCREATE_MULTITHREADED flag. + * - There is a limit to how many pictures can be mapped simultaneously (ulNumOutputSurfaces) + * - cuVidDecodePicture may block the calling thread if there are too many pictures pending + * in the decode queue + */ + +/** + * \fn CUresult CUDAAPI cuvidCreateDecoder(CUvideodecoder *phDecoder, CUVIDDECODECREATEINFO *pdci) + * Create the decoder object + */ +typedef CUresult CUDAAPI tcuvidCreateDecoder(CUvideodecoder *phDecoder, CUVIDDECODECREATEINFO *pdci); + +/** + * \fn CUresult CUDAAPI cuvidDestroyDecoder(CUvideodecoder hDecoder) + * Destroy the decoder object + */ +typedef CUresult CUDAAPI tcuvidDestroyDecoder(CUvideodecoder hDecoder); + +/** + * \fn CUresult CUDAAPI cuvidDecodePicture(CUvideodecoder hDecoder, CUVIDPICPARAMS *pPicParams) + * Decode a single picture (field or frame) + */ +typedef CUresult CUDAAPI tcuvidDecodePicture(CUvideodecoder hDecoder, CUVIDPICPARAMS *pPicParams); + + +#if !defined(__CUVID_DEVPTR64) || defined(__CUVID_INTERNAL) +/** + * \fn CUresult CUDAAPI cuvidMapVideoFrame(CUvideodecoder hDecoder, int nPicIdx, unsigned int *pDevPtr, unsigned int *pPitch, CUVIDPROCPARAMS *pVPP); + * Post-process and map a video frame for use in cuda + */ +typedef CUresult CUDAAPI tcuvidMapVideoFrame(CUvideodecoder hDecoder, int nPicIdx, + unsigned int *pDevPtr, unsigned int *pPitch, + CUVIDPROCPARAMS *pVPP); + +/** + * \fn CUresult CUDAAPI cuvidUnmapVideoFrame(CUvideodecoder hDecoder, unsigned int DevPtr) + * Unmap a previously mapped video frame + */ +typedef CUresult CUDAAPI tcuvidUnmapVideoFrame(CUvideodecoder hDecoder, unsigned int DevPtr); +#endif + +#if defined(WIN64) || defined(_WIN64) || defined(__x86_64) || defined(AMD64) || defined(_M_AMD64) +/** + * \fn CUresult CUDAAPI cuvidMapVideoFrame64(CUvideodecoder hDecoder, int nPicIdx, unsigned long long *pDevPtr, unsigned int *pPitch, CUVIDPROCPARAMS *pVPP); + * map a video frame + */ +typedef CUresult CUDAAPI tcuvidMapVideoFrame64(CUvideodecoder hDecoder, int nPicIdx, unsigned long long *pDevPtr, + unsigned int *pPitch, CUVIDPROCPARAMS *pVPP); + +/** + * \fn CUresult CUDAAPI cuvidUnmapVideoFrame64(CUvideodecoder hDecoder, unsigned long long DevPtr); + * Unmap a previously mapped video frame + */ +typedef CUresult CUDAAPI tcuvidUnmapVideoFrame64(CUvideodecoder hDecoder, unsigned long long DevPtr); + +#if defined(__CUVID_DEVPTR64) && !defined(__CUVID_INTERNAL) +#define tcuvidMapVideoFrame tcuvidMapVideoFrame64 +#define tcuvidUnmapVideoFrame tcuvidUnmapVideoFrame64 +#endif +#endif + + +/** + * + * Context-locking: to facilitate multi-threaded implementations, the following 4 functions + * provide a simple mutex-style host synchronization. If a non-NULL context is specified + * in CUVIDDECODECREATEINFO, the codec library will acquire the mutex associated with the given + * context before making any cuda calls. + * A multi-threaded application could create a lock associated with a context handle so that + * multiple threads can safely share the same cuda context: + * - use cuCtxPopCurrent immediately after context creation in order to create a 'floating' context + * that can be passed to cuvidCtxLockCreate. + * - When using a floating context, all cuda calls should only be made within a cuvidCtxLock/cuvidCtxUnlock section. + * + * NOTE: This is a safer alternative to cuCtxPushCurrent and cuCtxPopCurrent, and is not related to video + * decoder in any way (implemented as a critical section associated with cuCtx{Push|Pop}Current calls). +*/ + +/** + * \fn CUresult CUDAAPI cuvidCtxLockCreate(CUvideoctxlock *pLock, CUcontext ctx) + */ +typedef CUresult CUDAAPI tcuvidCtxLockCreate(CUvideoctxlock *pLock, CUcontext ctx); + +/** + * \fn CUresult CUDAAPI cuvidCtxLockDestroy(CUvideoctxlock lck) + */ +typedef CUresult CUDAAPI tcuvidCtxLockDestroy(CUvideoctxlock lck); + +/** + * \fn CUresult CUDAAPI cuvidCtxLock(CUvideoctxlock lck, unsigned int reserved_flags) + */ +typedef CUresult CUDAAPI tcuvidCtxLock(CUvideoctxlock lck, unsigned int reserved_flags); + +/** + * \fn CUresult CUDAAPI cuvidCtxUnlock(CUvideoctxlock lck, unsigned int reserved_flags) + */ +typedef CUresult CUDAAPI tcuvidCtxUnlock(CUvideoctxlock lck, unsigned int reserved_flags); + +/** @} */ /* End VIDEO_DECODER */ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif // __CUDA_VIDEO_H__ diff -Nru ffmpeg-2.8.6/compat/cuda/dynlink_loader.h ffmpeg-3.3.3/compat/cuda/dynlink_loader.h --- ffmpeg-2.8.6/compat/cuda/dynlink_loader.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/cuda/dynlink_loader.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,254 @@ +/* + * This copyright notice applies to this header file only: + * + * Copyright (c) 2016 + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the software, and to permit persons to whom the + * software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +#ifndef AV_COMPAT_CUDA_DYNLINK_LOADER_H +#define AV_COMPAT_CUDA_DYNLINK_LOADER_H + +#include "compat/cuda/dynlink_cuda.h" +#include "compat/cuda/dynlink_nvcuvid.h" +#include "compat/nvenc/nvEncodeAPI.h" +#include "compat/w32dlfcn.h" + +#include "libavutil/log.h" +#include "libavutil/error.h" + +#if defined(_WIN32) +# define LIB_HANDLE HMODULE +#else +# define LIB_HANDLE void* +#endif + +#if defined(_WIN32) || defined(__CYGWIN__) +# define CUDA_LIBNAME "nvcuda.dll" +# define NVCUVID_LIBNAME "nvcuvid.dll" +# if ARCH_X86_64 +# define NVENC_LIBNAME "nvEncodeAPI64.dll" +# else +# define NVENC_LIBNAME "nvEncodeAPI.dll" +# endif +#else +# define CUDA_LIBNAME "libcuda.so.1" +# define NVCUVID_LIBNAME "libnvcuvid.so.1" +# define NVENC_LIBNAME "libnvidia-encode.so.1" +#endif + +#define LOAD_LIBRARY(l, path) \ + do { \ + if (!((l) = dlopen(path, RTLD_LAZY))) { \ + av_log(NULL, AV_LOG_ERROR, "Cannot load %s\n", path); \ + ret = AVERROR_UNKNOWN; \ + goto error; \ + } \ + av_log(NULL, AV_LOG_TRACE, "Loaded lib: %s\n", path); \ + } while (0) + +#define LOAD_SYMBOL(fun, symbol) \ + do { \ + if (!((f->fun) = dlsym(f->lib, symbol))) { \ + av_log(NULL, AV_LOG_ERROR, "Cannot load %s\n", symbol); \ + ret = AVERROR_UNKNOWN; \ + goto error; \ + } \ + av_log(NULL, AV_LOG_TRACE, "Loaded sym: %s\n", symbol); \ + } while (0) + +#define GENERIC_LOAD_FUNC_PREAMBLE(T, n, N) \ + T *f; \ + int ret; \ + \ + n##_free_functions(functions); \ + \ + f = *functions = av_mallocz(sizeof(*f)); \ + if (!f) \ + return AVERROR(ENOMEM); \ + \ + LOAD_LIBRARY(f->lib, N); + +#define GENERIC_LOAD_FUNC_FINALE(n) \ + return 0; \ +error: \ + n##_free_functions(functions); \ + return ret; + +#define GENERIC_FREE_FUNC() \ + if (!functions) \ + return; \ + if (*functions && (*functions)->lib) \ + dlclose((*functions)->lib); \ + av_freep(functions); + +#ifdef AV_COMPAT_DYNLINK_CUDA_H +typedef struct CudaFunctions { + tcuInit *cuInit; + tcuDeviceGetCount *cuDeviceGetCount; + tcuDeviceGet *cuDeviceGet; + tcuDeviceGetName *cuDeviceGetName; + tcuDeviceComputeCapability *cuDeviceComputeCapability; + tcuCtxCreate_v2 *cuCtxCreate; + tcuCtxPushCurrent_v2 *cuCtxPushCurrent; + tcuCtxPopCurrent_v2 *cuCtxPopCurrent; + tcuCtxDestroy_v2 *cuCtxDestroy; + tcuMemAlloc_v2 *cuMemAlloc; + tcuMemFree_v2 *cuMemFree; + tcuMemcpy2D_v2 *cuMemcpy2D; + tcuGetErrorName *cuGetErrorName; + tcuGetErrorString *cuGetErrorString; + + LIB_HANDLE lib; +} CudaFunctions; +#else +typedef struct CudaFunctions CudaFunctions; +#endif + +typedef struct CuvidFunctions { + tcuvidCreateDecoder *cuvidCreateDecoder; + tcuvidDestroyDecoder *cuvidDestroyDecoder; + tcuvidDecodePicture *cuvidDecodePicture; + tcuvidMapVideoFrame *cuvidMapVideoFrame; + tcuvidUnmapVideoFrame *cuvidUnmapVideoFrame; + tcuvidCtxLockCreate *cuvidCtxLockCreate; + tcuvidCtxLockDestroy *cuvidCtxLockDestroy; + tcuvidCtxLock *cuvidCtxLock; + tcuvidCtxUnlock *cuvidCtxUnlock; + + tcuvidCreateVideoSource *cuvidCreateVideoSource; + tcuvidCreateVideoSourceW *cuvidCreateVideoSourceW; + tcuvidDestroyVideoSource *cuvidDestroyVideoSource; + tcuvidSetVideoSourceState *cuvidSetVideoSourceState; + tcuvidGetVideoSourceState *cuvidGetVideoSourceState; + tcuvidGetSourceVideoFormat *cuvidGetSourceVideoFormat; + tcuvidGetSourceAudioFormat *cuvidGetSourceAudioFormat; + tcuvidCreateVideoParser *cuvidCreateVideoParser; + tcuvidParseVideoData *cuvidParseVideoData; + tcuvidDestroyVideoParser *cuvidDestroyVideoParser; + + LIB_HANDLE lib; +} CuvidFunctions; + +typedef struct NvencFunctions { + NVENCSTATUS (NVENCAPI *NvEncodeAPICreateInstance)(NV_ENCODE_API_FUNCTION_LIST *functionList); + NVENCSTATUS (NVENCAPI *NvEncodeAPIGetMaxSupportedVersion)(uint32_t* version); + + LIB_HANDLE lib; +} NvencFunctions; + +#ifdef AV_COMPAT_DYNLINK_CUDA_H +static inline void cuda_free_functions(CudaFunctions **functions) +{ + GENERIC_FREE_FUNC(); +} +#endif + +static inline void cuvid_free_functions(CuvidFunctions **functions) +{ + GENERIC_FREE_FUNC(); +} + +static inline void nvenc_free_functions(NvencFunctions **functions) +{ + GENERIC_FREE_FUNC(); +} + +#ifdef AV_COMPAT_DYNLINK_CUDA_H +static inline int cuda_load_functions(CudaFunctions **functions) +{ + GENERIC_LOAD_FUNC_PREAMBLE(CudaFunctions, cuda, CUDA_LIBNAME); + + LOAD_SYMBOL(cuInit, "cuInit"); + LOAD_SYMBOL(cuDeviceGetCount, "cuDeviceGetCount"); + LOAD_SYMBOL(cuDeviceGet, "cuDeviceGet"); + LOAD_SYMBOL(cuDeviceGetName, "cuDeviceGetName"); + LOAD_SYMBOL(cuDeviceComputeCapability, "cuDeviceComputeCapability"); + LOAD_SYMBOL(cuCtxCreate, "cuCtxCreate_v2"); + LOAD_SYMBOL(cuCtxPushCurrent, "cuCtxPushCurrent_v2"); + LOAD_SYMBOL(cuCtxPopCurrent, "cuCtxPopCurrent_v2"); + LOAD_SYMBOL(cuCtxDestroy, "cuCtxDestroy_v2"); + LOAD_SYMBOL(cuMemAlloc, "cuMemAlloc_v2"); + LOAD_SYMBOL(cuMemFree, "cuMemFree_v2"); + LOAD_SYMBOL(cuMemcpy2D, "cuMemcpy2D_v2"); + LOAD_SYMBOL(cuGetErrorName, "cuGetErrorName"); + LOAD_SYMBOL(cuGetErrorString, "cuGetErrorString"); + + GENERIC_LOAD_FUNC_FINALE(cuda); +} +#endif + +static inline int cuvid_load_functions(CuvidFunctions **functions) +{ + GENERIC_LOAD_FUNC_PREAMBLE(CuvidFunctions, cuvid, NVCUVID_LIBNAME); + + LOAD_SYMBOL(cuvidCreateDecoder, "cuvidCreateDecoder"); + LOAD_SYMBOL(cuvidDestroyDecoder, "cuvidDestroyDecoder"); + LOAD_SYMBOL(cuvidDecodePicture, "cuvidDecodePicture"); +#ifdef __CUVID_DEVPTR64 + LOAD_SYMBOL(cuvidMapVideoFrame, "cuvidMapVideoFrame64"); + LOAD_SYMBOL(cuvidUnmapVideoFrame, "cuvidUnmapVideoFrame64"); +#else + LOAD_SYMBOL(cuvidMapVideoFrame, "cuvidMapVideoFrame"); + LOAD_SYMBOL(cuvidUnmapVideoFrame, "cuvidUnmapVideoFrame"); +#endif + LOAD_SYMBOL(cuvidCtxLockCreate, "cuvidCtxLockCreate"); + LOAD_SYMBOL(cuvidCtxLockDestroy, "cuvidCtxLockDestroy"); + LOAD_SYMBOL(cuvidCtxLock, "cuvidCtxLock"); + LOAD_SYMBOL(cuvidCtxUnlock, "cuvidCtxUnlock"); + + LOAD_SYMBOL(cuvidCreateVideoSource, "cuvidCreateVideoSource"); + LOAD_SYMBOL(cuvidCreateVideoSourceW, "cuvidCreateVideoSourceW"); + LOAD_SYMBOL(cuvidDestroyVideoSource, "cuvidDestroyVideoSource"); + LOAD_SYMBOL(cuvidSetVideoSourceState, "cuvidSetVideoSourceState"); + LOAD_SYMBOL(cuvidGetVideoSourceState, "cuvidGetVideoSourceState"); + LOAD_SYMBOL(cuvidGetSourceVideoFormat, "cuvidGetSourceVideoFormat"); + LOAD_SYMBOL(cuvidGetSourceAudioFormat, "cuvidGetSourceAudioFormat"); + LOAD_SYMBOL(cuvidCreateVideoParser, "cuvidCreateVideoParser"); + LOAD_SYMBOL(cuvidParseVideoData, "cuvidParseVideoData"); + LOAD_SYMBOL(cuvidDestroyVideoParser, "cuvidDestroyVideoParser"); + + GENERIC_LOAD_FUNC_FINALE(cuvid); +} + +static inline int nvenc_load_functions(NvencFunctions **functions) +{ + GENERIC_LOAD_FUNC_PREAMBLE(NvencFunctions, nvenc, NVENC_LIBNAME); + + LOAD_SYMBOL(NvEncodeAPICreateInstance, "NvEncodeAPICreateInstance"); + LOAD_SYMBOL(NvEncodeAPIGetMaxSupportedVersion, "NvEncodeAPIGetMaxSupportedVersion"); + + GENERIC_LOAD_FUNC_FINALE(nvenc); +} + +#undef GENERIC_LOAD_FUNC_PREAMBLE +#undef LOAD_LIBRARY +#undef LOAD_SYMBOL +#undef GENERIC_LOAD_FUNC_FINALE +#undef GENERIC_FREE_FUNC +#undef CUDA_LIBNAME +#undef NVCUVID_LIBNAME +#undef NVENC_LIBNAME +#undef LIB_HANDLE + +#endif + diff -Nru ffmpeg-2.8.6/compat/cuda/dynlink_nvcuvid.h ffmpeg-3.3.3/compat/cuda/dynlink_nvcuvid.h --- ffmpeg-2.8.6/compat/cuda/dynlink_nvcuvid.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/cuda/dynlink_nvcuvid.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,316 @@ +/* + * This copyright notice applies to this header file only: + * + * Copyright (c) 2010-2016 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the software, and to permit persons to whom the + * software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file nvcuvid.h + * NvCuvid API provides Video Decoding interface to NVIDIA GPU devices. + * \date 2015-2015 + * This file contains the interface constants, structure definitions and function prototypes. + */ + +#if !defined(__NVCUVID_H__) +#define __NVCUVID_H__ + +#include "compat/cuda/dynlink_cuviddec.h" + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +//////////////////////////////////////////////////////////////////////////////////////////////// +// +// High-level helper APIs for video sources +// + +typedef void *CUvideosource; +typedef void *CUvideoparser; +typedef long long CUvideotimestamp; + +/** + * \addtogroup VIDEO_PARSER Video Parser + * @{ + */ + +/*! + * \enum cudaVideoState + * Video Source State + */ +typedef enum { + cudaVideoState_Error = -1, /**< Error state (invalid source) */ + cudaVideoState_Stopped = 0, /**< Source is stopped (or reached end-of-stream) */ + cudaVideoState_Started = 1 /**< Source is running and delivering data */ +} cudaVideoState; + +/*! + * \enum cudaAudioCodec + * Audio compression + */ +typedef enum { + cudaAudioCodec_MPEG1=0, /**< MPEG-1 Audio */ + cudaAudioCodec_MPEG2, /**< MPEG-2 Audio */ + cudaAudioCodec_MP3, /**< MPEG-1 Layer III Audio */ + cudaAudioCodec_AC3, /**< Dolby Digital (AC3) Audio */ + cudaAudioCodec_LPCM /**< PCM Audio */ +} cudaAudioCodec; + +/*! + * \struct CUVIDEOFORMAT + * Video format + */ +typedef struct +{ + cudaVideoCodec codec; /**< Compression format */ + /** + * frame rate = numerator / denominator (for example: 30000/1001) + */ + struct { + unsigned int numerator; /**< frame rate numerator (0 = unspecified or variable frame rate) */ + unsigned int denominator; /**< frame rate denominator (0 = unspecified or variable frame rate) */ + } frame_rate; + unsigned char progressive_sequence; /**< 0=interlaced, 1=progressive */ + unsigned char bit_depth_luma_minus8; /**< high bit depth Luma */ + unsigned char bit_depth_chroma_minus8; /**< high bit depth Chroma */ + unsigned char reserved1; /**< Reserved for future use */ + unsigned int coded_width; /**< coded frame width */ + unsigned int coded_height; /**< coded frame height */ + /** + * area of the frame that should be displayed + * typical example: + * coded_width = 1920, coded_height = 1088 + * display_area = { 0,0,1920,1080 } + */ + struct { + int left; /**< left position of display rect */ + int top; /**< top position of display rect */ + int right; /**< right position of display rect */ + int bottom; /**< bottom position of display rect */ + } display_area; + cudaVideoChromaFormat chroma_format; /**< Chroma format */ + unsigned int bitrate; /**< video bitrate (bps, 0=unknown) */ + /** + * Display Aspect Ratio = x:y (4:3, 16:9, etc) + */ + struct { + int x; + int y; + } display_aspect_ratio; + /** + * Video Signal Description + */ + struct { + unsigned char video_format : 3; + unsigned char video_full_range_flag : 1; + unsigned char reserved_zero_bits : 4; + unsigned char color_primaries; + unsigned char transfer_characteristics; + unsigned char matrix_coefficients; + } video_signal_description; + unsigned int seqhdr_data_length; /**< Additional bytes following (CUVIDEOFORMATEX) */ +} CUVIDEOFORMAT; + +/*! + * \struct CUVIDEOFORMATEX + * Video format including raw sequence header information + */ +typedef struct +{ + CUVIDEOFORMAT format; + unsigned char raw_seqhdr_data[1024]; +} CUVIDEOFORMATEX; + +/*! + * \struct CUAUDIOFORMAT + * Audio Formats + */ +typedef struct +{ + cudaAudioCodec codec; /**< Compression format */ + unsigned int channels; /**< number of audio channels */ + unsigned int samplespersec; /**< sampling frequency */ + unsigned int bitrate; /**< For uncompressed, can also be used to determine bits per sample */ + unsigned int reserved1; /**< Reserved for future use */ + unsigned int reserved2; /**< Reserved for future use */ +} CUAUDIOFORMAT; + + +/*! + * \enum CUvideopacketflags + * Data packet flags + */ +typedef enum { + CUVID_PKT_ENDOFSTREAM = 0x01, /**< Set when this is the last packet for this stream */ + CUVID_PKT_TIMESTAMP = 0x02, /**< Timestamp is valid */ + CUVID_PKT_DISCONTINUITY = 0x04 /**< Set when a discontinuity has to be signalled */ +} CUvideopacketflags; + +/*! + * \struct CUVIDSOURCEDATAPACKET + * Data Packet + */ +typedef struct _CUVIDSOURCEDATAPACKET +{ + tcu_ulong flags; /**< Combination of CUVID_PKT_XXX flags */ + tcu_ulong payload_size; /**< number of bytes in the payload (may be zero if EOS flag is set) */ + const unsigned char *payload; /**< Pointer to packet payload data (may be NULL if EOS flag is set) */ + CUvideotimestamp timestamp; /**< Presentation timestamp (10MHz clock), only valid if CUVID_PKT_TIMESTAMP flag is set */ +} CUVIDSOURCEDATAPACKET; + +// Callback for packet delivery +typedef int (CUDAAPI *PFNVIDSOURCECALLBACK)(void *, CUVIDSOURCEDATAPACKET *); + +/*! + * \struct CUVIDSOURCEPARAMS + * Source Params + */ +typedef struct _CUVIDSOURCEPARAMS +{ + unsigned int ulClockRate; /**< Timestamp units in Hz (0=default=10000000Hz) */ + unsigned int uReserved1[7]; /**< Reserved for future use - set to zero */ + void *pUserData; /**< Parameter passed in to the data handlers */ + PFNVIDSOURCECALLBACK pfnVideoDataHandler; /**< Called to deliver audio packets */ + PFNVIDSOURCECALLBACK pfnAudioDataHandler; /**< Called to deliver video packets */ + void *pvReserved2[8]; /**< Reserved for future use - set to NULL */ +} CUVIDSOURCEPARAMS; + +/*! + * \enum CUvideosourceformat_flags + * CUvideosourceformat_flags + */ +typedef enum { + CUVID_FMT_EXTFORMATINFO = 0x100 /**< Return extended format structure (CUVIDEOFORMATEX) */ +} CUvideosourceformat_flags; + +#if !defined(__APPLE__) +/** + * \fn CUresult CUDAAPI cuvidCreateVideoSource(CUvideosource *pObj, const char *pszFileName, CUVIDSOURCEPARAMS *pParams) + * Create Video Source + */ +typedef CUresult CUDAAPI tcuvidCreateVideoSource(CUvideosource *pObj, const char *pszFileName, CUVIDSOURCEPARAMS *pParams); + +/** + * \fn CUresult CUDAAPI cuvidCreateVideoSourceW(CUvideosource *pObj, const wchar_t *pwszFileName, CUVIDSOURCEPARAMS *pParams) + * Create Video Source + */ +typedef CUresult CUDAAPI tcuvidCreateVideoSourceW(CUvideosource *pObj, const wchar_t *pwszFileName, CUVIDSOURCEPARAMS *pParams); + +/** + * \fn CUresult CUDAAPI cuvidDestroyVideoSource(CUvideosource obj) + * Destroy Video Source + */ +typedef CUresult CUDAAPI tcuvidDestroyVideoSource(CUvideosource obj); + +/** + * \fn CUresult CUDAAPI cuvidSetVideoSourceState(CUvideosource obj, cudaVideoState state) + * Set Video Source state + */ +typedef CUresult CUDAAPI tcuvidSetVideoSourceState(CUvideosource obj, cudaVideoState state); + +/** + * \fn cudaVideoState CUDAAPI cuvidGetVideoSourceState(CUvideosource obj) + * Get Video Source state + */ +typedef cudaVideoState CUDAAPI tcuvidGetVideoSourceState(CUvideosource obj); + +/** + * \fn CUresult CUDAAPI cuvidGetSourceVideoFormat(CUvideosource obj, CUVIDEOFORMAT *pvidfmt, unsigned int flags) + * Get Video Source Format + */ +typedef CUresult CUDAAPI tcuvidGetSourceVideoFormat(CUvideosource obj, CUVIDEOFORMAT *pvidfmt, unsigned int flags); + +/** + * \fn CUresult CUDAAPI cuvidGetSourceAudioFormat(CUvideosource obj, CUAUDIOFORMAT *paudfmt, unsigned int flags) + * Set Video Source state + */ +typedef CUresult CUDAAPI tcuvidGetSourceAudioFormat(CUvideosource obj, CUAUDIOFORMAT *paudfmt, unsigned int flags); + +#endif + +/** + * \struct CUVIDPARSERDISPINFO + */ +typedef struct _CUVIDPARSERDISPINFO +{ + int picture_index; /**< */ + int progressive_frame; /**< */ + int top_field_first; /**< */ + int repeat_first_field; /**< Number of additional fields (1=ivtc, 2=frame doubling, 4=frame tripling, -1=unpaired field) */ + CUvideotimestamp timestamp; /**< */ +} CUVIDPARSERDISPINFO; + +// +// Parser callbacks +// The parser will call these synchronously from within cuvidParseVideoData(), whenever a picture is ready to +// be decoded and/or displayed. +// +typedef int (CUDAAPI *PFNVIDSEQUENCECALLBACK)(void *, CUVIDEOFORMAT *); +typedef int (CUDAAPI *PFNVIDDECODECALLBACK)(void *, CUVIDPICPARAMS *); +typedef int (CUDAAPI *PFNVIDDISPLAYCALLBACK)(void *, CUVIDPARSERDISPINFO *); + +/** + * \struct CUVIDPARSERPARAMS + */ +typedef struct _CUVIDPARSERPARAMS +{ + cudaVideoCodec CodecType; /**< cudaVideoCodec_XXX */ + unsigned int ulMaxNumDecodeSurfaces; /**< Max # of decode surfaces (parser will cycle through these) */ + unsigned int ulClockRate; /**< Timestamp units in Hz (0=default=10000000Hz) */ + unsigned int ulErrorThreshold; /**< % Error threshold (0-100) for calling pfnDecodePicture (100=always call pfnDecodePicture even if picture bitstream is fully corrupted) */ + unsigned int ulMaxDisplayDelay; /**< Max display queue delay (improves pipelining of decode with display) - 0=no delay (recommended values: 2..4) */ + unsigned int uReserved1[5]; /**< Reserved for future use - set to 0 */ + void *pUserData; /**< User data for callbacks */ + PFNVIDSEQUENCECALLBACK pfnSequenceCallback; /**< Called before decoding frames and/or whenever there is a format change */ + PFNVIDDECODECALLBACK pfnDecodePicture; /**< Called when a picture is ready to be decoded (decode order) */ + PFNVIDDISPLAYCALLBACK pfnDisplayPicture; /**< Called whenever a picture is ready to be displayed (display order) */ + void *pvReserved2[7]; /**< Reserved for future use - set to NULL */ + CUVIDEOFORMATEX *pExtVideoInfo; /**< [Optional] sequence header data from system layer */ +} CUVIDPARSERPARAMS; + +/** + * \fn CUresult CUDAAPI cuvidCreateVideoParser(CUvideoparser *pObj, CUVIDPARSERPARAMS *pParams) + */ +typedef CUresult CUDAAPI tcuvidCreateVideoParser(CUvideoparser *pObj, CUVIDPARSERPARAMS *pParams); + +/** + * \fn CUresult CUDAAPI cuvidParseVideoData(CUvideoparser obj, CUVIDSOURCEDATAPACKET *pPacket) + */ +typedef CUresult CUDAAPI tcuvidParseVideoData(CUvideoparser obj, CUVIDSOURCEDATAPACKET *pPacket); + +/** + * \fn CUresult CUDAAPI cuvidDestroyVideoParser(CUvideoparser obj) + */ +typedef CUresult CUDAAPI tcuvidDestroyVideoParser(CUvideoparser obj); + +/** @} */ /* END VIDEO_PARSER */ +//////////////////////////////////////////////////////////////////////////////////////////////// + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +#endif // __NVCUVID_H__ + + diff -Nru ffmpeg-2.8.6/compat/dispatch_semaphore/semaphore.h ffmpeg-3.3.3/compat/dispatch_semaphore/semaphore.h --- ffmpeg-2.8.6/compat/dispatch_semaphore/semaphore.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/dispatch_semaphore/semaphore.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,42 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * 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_DISPATCH_SEMAPHORE_SEMAPHORE_H +#define COMPAT_DISPATCH_SEMAPHORE_SEMAPHORE_H + +#include +#include + +#define sem_t dispatch_semaphore_t +#define sem_post(psem) dispatch_semaphore_signal(*psem) +#define sem_wait(psem) dispatch_semaphore_wait(*psem, DISPATCH_TIME_FOREVER) +#define sem_timedwait(psem, val) dispatch_semaphore_wait(*psem, dispatch_walltime(val, 0)) +#define sem_destroy(psem) dispatch_release(*psem) + +static inline int compat_sem_init(dispatch_semaphore_t *psem, + int unused, int val) +{ + int ret = !!(*psem = dispatch_semaphore_create(val)) - 1; + if (ret < 0) + errno = ENOMEM; + return ret; +} + +#define sem_init compat_sem_init + +#endif /* COMPAT_DISPATCH_SEMAPHORE_SEMAPHORE_H */ diff -Nru ffmpeg-2.8.6/compat/msvcrt/snprintf.h ffmpeg-3.3.3/compat/msvcrt/snprintf.h --- ffmpeg-2.8.6/compat/msvcrt/snprintf.h 2015-03-13 17:34:42.000000000 +0000 +++ ffmpeg-3.3.3/compat/msvcrt/snprintf.h 2017-06-07 02:03:51.000000000 +0000 @@ -19,8 +19,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef COMPAT_SNPRINTF_H -#define COMPAT_SNPRINTF_H +#ifndef COMPAT_MSVCRT_SNPRINTF_H +#define COMPAT_MSVCRT_SNPRINTF_H #include #include @@ -35,4 +35,4 @@ #define _snprintf avpriv_snprintf #define vsnprintf avpriv_vsnprintf -#endif /* COMPAT_SNPRINTF_H */ +#endif /* COMPAT_MSVCRT_SNPRINTF_H */ diff -Nru ffmpeg-2.8.6/compat/nvenc/nvEncodeAPI.h ffmpeg-3.3.3/compat/nvenc/nvEncodeAPI.h --- ffmpeg-2.8.6/compat/nvenc/nvEncodeAPI.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/nvenc/nvEncodeAPI.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,3219 @@ +/* + * This copyright notice applies to this header file only: + * + * Copyright (c) 2010-2015 NVIDIA Corporation + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the software, and to permit persons to whom the + * software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * \file nvEncodeAPI.h + * NvEncodeAPI provides a NVENC Video Encoding interface to NVIDIA GPU devices based on the Kepler architecture. + * \date 2011-2016 + * This file contains the interface constants, structure definitions and function prototypes. + */ + +#ifndef _NV_ENCODEAPI_H_ +#define _NV_ENCODEAPI_H_ + +#include + +#ifdef _WIN32 +#include +#endif + +#ifdef _MSC_VER +#ifndef _STDINT +typedef __int32 int32_t; +typedef unsigned __int32 uint32_t; +typedef __int64 int64_t; +typedef unsigned __int64 uint64_t; +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef short int16_t; +typedef unsigned short uint16_t; +#endif +#else +#include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \addtogroup ENCODER_STRUCTURE NvEncodeAPI Data structures + * @{ + */ + +#if defined(_WIN32) || defined(__CYGWIN__) +#define NVENCAPI __stdcall +#else +#define NVENCAPI +#endif + +#ifdef _WIN32 +typedef RECT NVENC_RECT; +#else +// ========================================================================================= +#ifndef GUID +/*! + * \struct GUID + * Abstracts the GUID structure for non-windows platforms. + */ +// ========================================================================================= +typedef struct +{ + uint32_t Data1; /**< [in]: Specifies the first 8 hexadecimal digits of the GUID. */ + uint16_t Data2; /**< [in]: Specifies the first group of 4 hexadecimal digits. */ + uint16_t Data3; /**< [in]: Specifies the second group of 4 hexadecimal digits. */ + uint8_t Data4[8]; /**< [in]: Array of 8 bytes. The first 2 bytes contain the third group of 4 hexadecimal digits. + The remaining 6 bytes contain the final 12 hexadecimal digits. */ +} GUID; +#endif // GUID + +/** + * \struct _NVENC_RECT + * Defines a Rectangle. Used in ::NV_ENC_PREPROCESS_FRAME. + */ +typedef struct _NVENC_RECT +{ + uint32_t left; /**< [in]: X coordinate of the upper left corner of rectangular area to be specified. */ + uint32_t top; /**< [in]: Y coordinate of the upper left corner of the rectangular area to be specified. */ + uint32_t right; /**< [in]: X coordinate of the bottom right corner of the rectangular area to be specified. */ + uint32_t bottom; /**< [in]: Y coordinate of the bottom right corner of the rectangular area to be specified. */ +} NVENC_RECT; + +#endif // _WIN32 + +/** @} */ /* End of GUID and NVENC_RECT structure grouping*/ + +typedef void* NV_ENC_INPUT_PTR; /**< NVENCODE API input buffer */ +typedef void* NV_ENC_OUTPUT_PTR; /**< NVENCODE API output buffer*/ +typedef void* NV_ENC_REGISTERED_PTR; /**< A Resource that has been registered with NVENCODE API*/ + +#define NVENCAPI_MAJOR_VERSION 7 +#define NVENCAPI_MINOR_VERSION 0 + +#define NVENCAPI_VERSION (NVENCAPI_MAJOR_VERSION | (NVENCAPI_MINOR_VERSION << 24)) + +/** + * Macro to generate per-structure version for use with API. + */ +#define NVENCAPI_STRUCT_VERSION(ver) ((uint32_t)NVENCAPI_VERSION | ((ver)<<16) | (0x7 << 28)) + + +#define NVENC_INFINITE_GOPLENGTH 0xffffffff + +#define NV_MAX_SEQ_HDR_LEN (512) + +// ========================================================================================= +// Encode Codec GUIDS supported by the NvEncodeAPI interface. +// ========================================================================================= + +// {6BC82762-4E63-4ca4-AA85-1E50F321F6BF} +static const GUID NV_ENC_CODEC_H264_GUID = +{ 0x6bc82762, 0x4e63, 0x4ca4, { 0xaa, 0x85, 0x1e, 0x50, 0xf3, 0x21, 0xf6, 0xbf } }; + +// {790CDC88-4522-4d7b-9425-BDA9975F7603} +static const GUID NV_ENC_CODEC_HEVC_GUID = +{ 0x790cdc88, 0x4522, 0x4d7b, { 0x94, 0x25, 0xbd, 0xa9, 0x97, 0x5f, 0x76, 0x3 } }; + + + +// ========================================================================================= +// * Encode Profile GUIDS supported by the NvEncodeAPI interface. +// ========================================================================================= + +// {BFD6F8E7-233C-4341-8B3E-4818523803F4} +static const GUID NV_ENC_CODEC_PROFILE_AUTOSELECT_GUID = +{ 0xbfd6f8e7, 0x233c, 0x4341, { 0x8b, 0x3e, 0x48, 0x18, 0x52, 0x38, 0x3, 0xf4 } }; + +// {0727BCAA-78C4-4c83-8C2F-EF3DFF267C6A} +static const GUID NV_ENC_H264_PROFILE_BASELINE_GUID = +{ 0x727bcaa, 0x78c4, 0x4c83, { 0x8c, 0x2f, 0xef, 0x3d, 0xff, 0x26, 0x7c, 0x6a } }; + +// {60B5C1D4-67FE-4790-94D5-C4726D7B6E6D} +static const GUID NV_ENC_H264_PROFILE_MAIN_GUID = +{ 0x60b5c1d4, 0x67fe, 0x4790, { 0x94, 0xd5, 0xc4, 0x72, 0x6d, 0x7b, 0x6e, 0x6d } }; + +// {E7CBC309-4F7A-4b89-AF2A-D537C92BE310} +static const GUID NV_ENC_H264_PROFILE_HIGH_GUID = +{ 0xe7cbc309, 0x4f7a, 0x4b89, { 0xaf, 0x2a, 0xd5, 0x37, 0xc9, 0x2b, 0xe3, 0x10 } }; + +// {7AC663CB-A598-4960-B844-339B261A7D52} +static const GUID NV_ENC_H264_PROFILE_HIGH_444_GUID = +{ 0x7ac663cb, 0xa598, 0x4960, { 0xb8, 0x44, 0x33, 0x9b, 0x26, 0x1a, 0x7d, 0x52 } }; + +// {40847BF5-33F7-4601-9084-E8FE3C1DB8B7} +static const GUID NV_ENC_H264_PROFILE_STEREO_GUID = +{ 0x40847bf5, 0x33f7, 0x4601, { 0x90, 0x84, 0xe8, 0xfe, 0x3c, 0x1d, 0xb8, 0xb7 } }; + +// {CE788D20-AAA9-4318-92BB-AC7E858C8D36} +static const GUID NV_ENC_H264_PROFILE_SVC_TEMPORAL_SCALABILTY = +{ 0xce788d20, 0xaaa9, 0x4318, { 0x92, 0xbb, 0xac, 0x7e, 0x85, 0x8c, 0x8d, 0x36 } }; + +// {B405AFAC-F32B-417B-89C4-9ABEED3E5978} +static const GUID NV_ENC_H264_PROFILE_PROGRESSIVE_HIGH_GUID = +{ 0xb405afac, 0xf32b, 0x417b, { 0x89, 0xc4, 0x9a, 0xbe, 0xed, 0x3e, 0x59, 0x78 } }; + +// {AEC1BD87-E85B-48f2-84C3-98BCA6285072} +static const GUID NV_ENC_H264_PROFILE_CONSTRAINED_HIGH_GUID = +{ 0xaec1bd87, 0xe85b, 0x48f2, { 0x84, 0xc3, 0x98, 0xbc, 0xa6, 0x28, 0x50, 0x72 } }; + +// {B514C39A-B55B-40fa-878F-F1253B4DFDEC} +static const GUID NV_ENC_HEVC_PROFILE_MAIN_GUID = +{ 0xb514c39a, 0xb55b, 0x40fa, { 0x87, 0x8f, 0xf1, 0x25, 0x3b, 0x4d, 0xfd, 0xec } }; + +// {fa4d2b6c-3a5b-411a-8018-0a3f5e3c9be5} +static const GUID NV_ENC_HEVC_PROFILE_MAIN10_GUID = +{ 0xfa4d2b6c, 0x3a5b, 0x411a, { 0x80, 0x18, 0x0a, 0x3f, 0x5e, 0x3c, 0x9b, 0xe5 } }; + +// For HEVC Main 444 8 bit and HEVC Main 444 10 bit profiles only +// {51ec32b5-1b4c-453c-9cbd-b616bd621341} +static const GUID NV_ENC_HEVC_PROFILE_FREXT_GUID = +{ 0x51ec32b5, 0x1b4c, 0x453c, { 0x9c, 0xbd, 0xb6, 0x16, 0xbd, 0x62, 0x13, 0x41 } }; + +// ========================================================================================= +// * Preset GUIDS supported by the NvEncodeAPI interface. +// ========================================================================================= +// {B2DFB705-4EBD-4C49-9B5F-24A777D3E587} +static const GUID NV_ENC_PRESET_DEFAULT_GUID = +{ 0xb2dfb705, 0x4ebd, 0x4c49, { 0x9b, 0x5f, 0x24, 0xa7, 0x77, 0xd3, 0xe5, 0x87 } }; + +// {60E4C59F-E846-4484-A56D-CD45BE9FDDF6} +static const GUID NV_ENC_PRESET_HP_GUID = +{ 0x60e4c59f, 0xe846, 0x4484, { 0xa5, 0x6d, 0xcd, 0x45, 0xbe, 0x9f, 0xdd, 0xf6 } }; + +// {34DBA71D-A77B-4B8F-9C3E-B6D5DA24C012} +static const GUID NV_ENC_PRESET_HQ_GUID = +{ 0x34dba71d, 0xa77b, 0x4b8f, { 0x9c, 0x3e, 0xb6, 0xd5, 0xda, 0x24, 0xc0, 0x12 } }; + +// {82E3E450-BDBB-4e40-989C-82A90DF9EF32} +static const GUID NV_ENC_PRESET_BD_GUID = +{ 0x82e3e450, 0xbdbb, 0x4e40, { 0x98, 0x9c, 0x82, 0xa9, 0xd, 0xf9, 0xef, 0x32 } }; + +// {49DF21C5-6DFA-4feb-9787-6ACC9EFFB726} +static const GUID NV_ENC_PRESET_LOW_LATENCY_DEFAULT_GUID = +{ 0x49df21c5, 0x6dfa, 0x4feb, { 0x97, 0x87, 0x6a, 0xcc, 0x9e, 0xff, 0xb7, 0x26 } }; + +// {C5F733B9-EA97-4cf9-BEC2-BF78A74FD105} +static const GUID NV_ENC_PRESET_LOW_LATENCY_HQ_GUID = +{ 0xc5f733b9, 0xea97, 0x4cf9, { 0xbe, 0xc2, 0xbf, 0x78, 0xa7, 0x4f, 0xd1, 0x5 } }; + +// {67082A44-4BAD-48FA-98EA-93056D150A58} +static const GUID NV_ENC_PRESET_LOW_LATENCY_HP_GUID = +{ 0x67082a44, 0x4bad, 0x48fa, { 0x98, 0xea, 0x93, 0x5, 0x6d, 0x15, 0xa, 0x58 } }; + +// {D5BFB716-C604-44e7-9BB8-DEA5510FC3AC} +static const GUID NV_ENC_PRESET_LOSSLESS_DEFAULT_GUID = +{ 0xd5bfb716, 0xc604, 0x44e7, { 0x9b, 0xb8, 0xde, 0xa5, 0x51, 0xf, 0xc3, 0xac } }; + +// {149998E7-2364-411d-82EF-179888093409} +static const GUID NV_ENC_PRESET_LOSSLESS_HP_GUID = +{ 0x149998e7, 0x2364, 0x411d, { 0x82, 0xef, 0x17, 0x98, 0x88, 0x9, 0x34, 0x9 } }; + +/** + * \addtogroup ENCODER_STRUCTURE NvEncodeAPI Data structures + * @{ + */ + +/** + * Input frame encode modes + */ +typedef enum _NV_ENC_PARAMS_FRAME_FIELD_MODE +{ + NV_ENC_PARAMS_FRAME_FIELD_MODE_FRAME = 0x01, /**< Frame mode */ + NV_ENC_PARAMS_FRAME_FIELD_MODE_FIELD = 0x02, /**< Field mode */ + NV_ENC_PARAMS_FRAME_FIELD_MODE_MBAFF = 0x03 /**< MB adaptive frame/field */ +} NV_ENC_PARAMS_FRAME_FIELD_MODE; + +/** + * Rate Control Modes + */ +typedef enum _NV_ENC_PARAMS_RC_MODE +{ + NV_ENC_PARAMS_RC_CONSTQP = 0x0, /**< Constant QP mode */ + NV_ENC_PARAMS_RC_VBR = 0x1, /**< Variable bitrate mode */ + NV_ENC_PARAMS_RC_CBR = 0x2, /**< Constant bitrate mode */ + NV_ENC_PARAMS_RC_VBR_MINQP = 0x4, /**< Variable bitrate mode with MinQP */ + NV_ENC_PARAMS_RC_2_PASS_QUALITY = 0x8, /**< Multi pass encoding optimized for image quality and works only with low latency mode */ + NV_ENC_PARAMS_RC_2_PASS_FRAMESIZE_CAP = 0x10, /**< Multi pass encoding optimized for maintaining frame size and works only with low latency mode */ + NV_ENC_PARAMS_RC_2_PASS_VBR = 0x20 /**< Multi pass VBR */ +} NV_ENC_PARAMS_RC_MODE; + +#define NV_ENC_PARAMS_RC_CBR2 NV_ENC_PARAMS_RC_CBR /**< Deprecated */ + +/** + * Input picture structure + */ +typedef enum _NV_ENC_PIC_STRUCT +{ + NV_ENC_PIC_STRUCT_FRAME = 0x01, /**< Progressive frame */ + NV_ENC_PIC_STRUCT_FIELD_TOP_BOTTOM = 0x02, /**< Field encoding top field first */ + NV_ENC_PIC_STRUCT_FIELD_BOTTOM_TOP = 0x03 /**< Field encoding bottom field first */ +} NV_ENC_PIC_STRUCT; + +/** + * Input picture type + */ +typedef enum _NV_ENC_PIC_TYPE +{ + NV_ENC_PIC_TYPE_P = 0x0, /**< Forward predicted */ + NV_ENC_PIC_TYPE_B = 0x01, /**< Bi-directionally predicted picture */ + NV_ENC_PIC_TYPE_I = 0x02, /**< Intra predicted picture */ + NV_ENC_PIC_TYPE_IDR = 0x03, /**< IDR picture */ + NV_ENC_PIC_TYPE_BI = 0x04, /**< Bi-directionally predicted with only Intra MBs */ + NV_ENC_PIC_TYPE_SKIPPED = 0x05, /**< Picture is skipped */ + NV_ENC_PIC_TYPE_INTRA_REFRESH = 0x06, /**< First picture in intra refresh cycle */ + NV_ENC_PIC_TYPE_UNKNOWN = 0xFF /**< Picture type unknown */ +} NV_ENC_PIC_TYPE; + +/** + * Motion vector precisions + */ +typedef enum _NV_ENC_MV_PRECISION +{ + NV_ENC_MV_PRECISION_DEFAULT = 0x0, /** (if lookahead is enabled, input frames must remain available to the encoder until encode completion) */ + uint32_t disableIadapt :1; /**< [in]: Set this to 1 to disable adaptive I-frame insertion at scene cuts (only has an effect when lookahead is enabled) */ + uint32_t disableBadapt :1; /**< [in]: Set this to 1 to disable adaptive B-frame decision (only has an effect when lookahead is enabled) */ + uint32_t enableTemporalAQ :1; /**< [in]: Set this to 1 to enable temporal AQ for H.264 */ + uint32_t zeroReorderDelay :1; /**< [in]: Set this to 1 to indicate zero latency operation (no reordering delay, num_reorder_frames=0) */ + uint32_t enableNonRefP :1; /**< [in]: Set this to 1 to enable automatic insertion of non-reference P-frames (no effect if enablePTD=0) */ + uint32_t strictGOPTarget :1; /**< [in]: Set this to 1 to minimize GOP-to-GOP rate fluctuations */ + uint32_t aqStrength :4; /**< [in]: When AQ (Spatial) is enabled (i.e. NV_ENC_RC_PARAMS::enableAQ is set), this field is used to specify AQ strength. AQ strength scale is from 1 (low) - 15 (aggressive). If not set, strength is autoselected by driver. Currently supported only with h264 */ + uint32_t reservedBitFields :16; /**< [in]: Reserved bitfields and must be set to 0 */ + NV_ENC_QP minQP; /**< [in]: Specifies the minimum QP used for rate control. Client must set NV_ENC_CONFIG::enableMinQP to 1. */ + NV_ENC_QP maxQP; /**< [in]: Specifies the maximum QP used for rate control. Client must set NV_ENC_CONFIG::enableMaxQP to 1. */ + NV_ENC_QP initialRCQP; /**< [in]: Specifies the initial QP used for rate control. Client must set NV_ENC_CONFIG::enableInitialRCQP to 1. */ + uint32_t temporallayerIdxMask; /**< [in]: Specifies the temporal layers (as a bitmask) whose QPs have changed. Valid max bitmask is [2^NV_ENC_CAPS_NUM_MAX_TEMPORAL_LAYERS - 1] */ + uint8_t temporalLayerQP[8]; /**< [in]: Specifies the temporal layer QPs used for rate control. Temporal layer index is used as as the array index */ + uint16_t targetQuality; /**< [in]: Target CQ (Constant Quality) level for VBR mode (range 0-51 with 0-automatic) */ + uint16_t lookaheadDepth; /**< [in]: Maximum depth of lookahead with range 0-32 (only used if enableLookahead=1) */ + uint32_t reserved[9]; + } NV_ENC_RC_PARAMS; + +/** macro for constructing the version field of ::_NV_ENC_RC_PARAMS */ +#define NV_ENC_RC_PARAMS_VER NVENCAPI_STRUCT_VERSION(1) + + + +/** + * \struct _NV_ENC_CONFIG_H264_VUI_PARAMETERS + * H264 Video Usability Info parameters + */ +typedef struct _NV_ENC_CONFIG_H264_VUI_PARAMETERS +{ + uint32_t overscanInfoPresentFlag; /**< [in]: if set to 1 , it specifies that the overscanInfo is present */ + uint32_t overscanInfo; /**< [in]: Specifies the overscan info(as defined in Annex E of the ITU-T Specification). */ + uint32_t videoSignalTypePresentFlag; /**< [in]: If set to 1, it specifies that the videoFormat, videoFullRangeFlag and colourDescriptionPresentFlag are present. */ + uint32_t videoFormat; /**< [in]: Specifies the source video format(as defined in Annex E of the ITU-T Specification).*/ + uint32_t videoFullRangeFlag; /**< [in]: Specifies the output range of the luma and chroma samples(as defined in Annex E of the ITU-T Specification). */ + uint32_t colourDescriptionPresentFlag; /**< [in]: If set to 1, it specifies that the colourPrimaries, transferCharacteristics and colourMatrix are present. */ + uint32_t colourPrimaries; /**< [in]: Specifies color primaries for converting to RGB(as defined in Annex E of the ITU-T Specification) */ + uint32_t transferCharacteristics; /**< [in]: Specifies the opto-electronic transfer characteristics to use (as defined in Annex E of the ITU-T Specification) */ + uint32_t colourMatrix; /**< [in]: Specifies the matrix coefficients used in deriving the luma and chroma from the RGB primaries (as defined in Annex E of the ITU-T Specification). */ + uint32_t chromaSampleLocationFlag; /**< [in]: if set to 1 , it specifies that the chromaSampleLocationTop and chromaSampleLocationBot are present.*/ + uint32_t chromaSampleLocationTop; /**< [in]: Specifies the chroma sample location for top field(as defined in Annex E of the ITU-T Specification) */ + uint32_t chromaSampleLocationBot; /**< [in]: Specifies the chroma sample location for bottom field(as defined in Annex E of the ITU-T Specification) */ + uint32_t bitstreamRestrictionFlag; /**< [in]: if set to 1, it specifies the bitstream restriction parameters are present in the bitstream.*/ + uint32_t reserved[15]; +}NV_ENC_CONFIG_H264_VUI_PARAMETERS; + +typedef NV_ENC_CONFIG_H264_VUI_PARAMETERS NV_ENC_CONFIG_HEVC_VUI_PARAMETERS; + +/** + * \struct _NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE + * External motion vector hint counts per block type. + */ +typedef struct _NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE +{ + uint32_t numCandsPerBlk16x16 : 4; /**< [in]: Specifies the number of candidates per 16x16 block. */ + uint32_t numCandsPerBlk16x8 : 4; /**< [in]: Specifies the number of candidates per 16x8 block. */ + uint32_t numCandsPerBlk8x16 : 4; /**< [in]: Specifies the number of candidates per 8x16 block. */ + uint32_t numCandsPerBlk8x8 : 4; /**< [in]: Specifies the number of candidates per 8x8 block. */ + uint32_t reserved : 16; /**< [in]: Reserved for padding. */ + uint32_t reserved1[3]; /**< [in]: Reserved for future use. */ +} NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE; + + +/** + * \struct _NVENC_EXTERNAL_ME_HINT + * External Motion Vector hint structure. + */ +typedef struct _NVENC_EXTERNAL_ME_HINT +{ + int32_t mvx : 12; /**< [in]: Specifies the x component of integer pixel MV (relative to current MB) S12.0. */ + int32_t mvy : 10; /**< [in]: Specifies the y component of integer pixel MV (relative to current MB) S10.0 .*/ + int32_t refidx : 5; /**< [in]: Specifies the reference index (31=invalid). Current we support only 1 reference frame per direction for external hints, so \p refidx must be 0. */ + int32_t dir : 1; /**< [in]: Specifies the direction of motion estimation . 0=L0 1=L1.*/ + int32_t partType : 2; /**< [in]: Specifies the block partition type.0=16x16 1=16x8 2=8x16 3=8x8 (blocks in partition must be consecutive).*/ + int32_t lastofPart : 1; /**< [in]: Set to 1 for the last MV of (sub) partition */ + int32_t lastOfMB : 1; /**< [in]: Set to 1 for the last MV of macroblock. */ +} NVENC_EXTERNAL_ME_HINT; + + +/** + * \struct _NV_ENC_CONFIG_H264 + * H264 encoder configuration parameters + */ +typedef struct _NV_ENC_CONFIG_H264 +{ + uint32_t enableTemporalSVC :1; /**< [in]: Set to 1 to enable SVC temporal*/ + uint32_t enableStereoMVC :1; /**< [in]: Set to 1 to enable stereo MVC*/ + uint32_t hierarchicalPFrames :1; /**< [in]: Set to 1 to enable hierarchical PFrames */ + uint32_t hierarchicalBFrames :1; /**< [in]: Set to 1 to enable hierarchical BFrames */ + uint32_t outputBufferingPeriodSEI :1; /**< [in]: Set to 1 to write SEI buffering period syntax in the bitstream */ + uint32_t outputPictureTimingSEI :1; /**< [in]: Set to 1 to write SEI picture timing syntax in the bitstream */ + uint32_t outputAUD :1; /**< [in]: Set to 1 to write access unit delimiter syntax in bitstream */ + uint32_t disableSPSPPS :1; /**< [in]: Set to 1 to disable writing of Sequence and Picture parameter info in bitstream */ + uint32_t outputFramePackingSEI :1; /**< [in]: Set to 1 to enable writing of frame packing arrangement SEI messages to bitstream */ + uint32_t outputRecoveryPointSEI :1; /**< [in]: Set to 1 to enable writing of recovery point SEI message */ + uint32_t enableIntraRefresh :1; /**< [in]: Set to 1 to enable gradual decoder refresh or intra refresh. If the GOP structure uses B frames this will be ignored */ + uint32_t enableConstrainedEncoding :1; /**< [in]: Set this to 1 to enable constrainedFrame encoding where each slice in the constarined picture is independent of other slices + Check support for constrained encoding using ::NV_ENC_CAPS_SUPPORT_CONSTRAINED_ENCODING caps. */ + uint32_t repeatSPSPPS :1; /**< [in]: Set to 1 to enable writing of Sequence and Picture parameter for every IDR frame */ + uint32_t enableVFR :1; /**< [in]: Set to 1 to enable variable frame rate. */ + uint32_t enableLTR :1; /**< [in]: Currently this feature is not available and must be set to 0. Set to 1 to enable LTR support and auto-mark the first */ + uint32_t qpPrimeYZeroTransformBypassFlag :1; /**< [in]: To enable lossless encode set this to 1, set QP to 0 and RC_mode to NV_ENC_PARAMS_RC_CONSTQP and profile to HIGH_444_PREDICTIVE_PROFILE. + Check support for lossless encoding using ::NV_ENC_CAPS_SUPPORT_LOSSLESS_ENCODE caps. */ + uint32_t useConstrainedIntraPred :1; /**< [in]: Set 1 to enable constrained intra prediction. */ + uint32_t reservedBitFields :15; /**< [in]: Reserved bitfields and must be set to 0 */ + uint32_t level; /**< [in]: Specifies the encoding level. Client is recommended to set this to NV_ENC_LEVEL_AUTOSELECT in order to enable the NvEncodeAPI interface to select the correct level. */ + uint32_t idrPeriod; /**< [in]: Specifies the IDR interval. If not set, this is made equal to gopLength in NV_ENC_CONFIG.Low latency application client can set IDR interval to NVENC_INFINITE_GOPLENGTH so that IDR frames are not inserted automatically. */ + uint32_t separateColourPlaneFlag; /**< [in]: Set to 1 to enable 4:4:4 separate colour planes */ + uint32_t disableDeblockingFilterIDC; /**< [in]: Specifies the deblocking filter mode. Permissible value range: [0,2] */ + uint32_t numTemporalLayers; /**< [in]: Specifies max temporal layers to be used for hierarchical coding. Valid value range is [1,::NV_ENC_CAPS_NUM_MAX_TEMPORAL_LAYERS] */ + uint32_t spsId; /**< [in]: Specifies the SPS id of the sequence header. Currently reserved and must be set to 0. */ + uint32_t ppsId; /**< [in]: Specifies the PPS id of the picture header. Currently reserved and must be set to 0. */ + NV_ENC_H264_ADAPTIVE_TRANSFORM_MODE adaptiveTransformMode; /**< [in]: Specifies the AdaptiveTransform Mode. Check support for AdaptiveTransform mode using ::NV_ENC_CAPS_SUPPORT_ADAPTIVE_TRANSFORM caps. */ + NV_ENC_H264_FMO_MODE fmoMode; /**< [in]: Specified the FMO Mode. Check support for FMO using ::NV_ENC_CAPS_SUPPORT_FMO caps. */ + NV_ENC_H264_BDIRECT_MODE bdirectMode; /**< [in]: Specifies the BDirect mode. Check support for BDirect mode using ::NV_ENC_CAPS_SUPPORT_BDIRECT_MODE caps.*/ + NV_ENC_H264_ENTROPY_CODING_MODE entropyCodingMode; /**< [in]: Specifies the entropy coding mode. Check support for CABAC mode using ::NV_ENC_CAPS_SUPPORT_CABAC caps. */ + NV_ENC_STEREO_PACKING_MODE stereoMode; /**< [in]: Specifies the stereo frame packing mode which is to be signalled in frame packing arrangement SEI */ + uint32_t intraRefreshPeriod; /**< [in]: Specifies the interval between successive intra refresh if enableIntrarefresh is set. Requires enableIntraRefresh to be set. + Will be disabled if NV_ENC_CONFIG::gopLength is not set to NVENC_INFINITE_GOPLENGTH. */ + uint32_t intraRefreshCnt; /**< [in]: Specifies the length of intra refresh in number of frames for periodic intra refresh. This value should be smaller than intraRefreshPeriod */ + uint32_t maxNumRefFrames; /**< [in]: Specifies the DPB size used for encoding. Setting it to 0 will let driver use the default dpb size. + The low latency application which wants to invalidate reference frame as an error resilience tool + is recommended to use a large DPB size so that the encoder can keep old reference frames which can be used if recent + frames are invalidated. */ + uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices + sliceMode = 0 MB based slices, sliceMode = 1 Byte based slices, sliceMode = 2 MB row based slices, sliceMode = 3, numSlices in Picture + When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting + When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */ + uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For: + sliceMode = 0, sliceModeData specifies # of MBs in each slice (except last slice) + sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice) + sliceMode = 2, sliceModeData specifies # of MB rows in each slice (except last slice) + sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */ + NV_ENC_CONFIG_H264_VUI_PARAMETERS h264VUIParameters; /**< [in]: Specifies the H264 video usability info pamameters */ + uint32_t ltrNumFrames; /**< [in]: Specifies the number of LTR frames used. + If ltrTrustMode=1, encoder will mark first numLTRFrames base layer reference frames within each IDR interval as LTR. + If ltrMarkFrame=1, ltrNumFrames specifies maximum number of ltr frames in DPB. + If ltrNumFrames value is more that DPB size(maxNumRefFrames) encoder will take decision on its own. */ + uint32_t ltrTrustMode; /**< [in]: Specifies the LTR operating mode. + Set to 0 to disallow encoding using LTR frames until later specified. + Set to 1 to allow encoding using LTR frames unless later invalidated.*/ + uint32_t chromaFormatIDC; /**< [in]: Specifies the chroma format. Should be set to 1 for yuv420 input, 3 for yuv444 input. + Check support for YUV444 encoding using ::NV_ENC_CAPS_SUPPORT_YUV444_ENCODE caps.*/ + uint32_t maxTemporalLayers; /**< [in]: Specifies the max temporal layer used for hierarchical coding. */ + uint32_t reserved1[270]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_CONFIG_H264; + + +/** + * \struct _NV_ENC_CONFIG_HEVC + * HEVC encoder configuration parameters to be set during initialization. + */ +typedef struct _NV_ENC_CONFIG_HEVC +{ + uint32_t level; /**< [in]: Specifies the level of the encoded bitstream.*/ + uint32_t tier; /**< [in]: Specifies the level tier of the encoded bitstream.*/ + NV_ENC_HEVC_CUSIZE minCUSize; /**< [in]: Specifies the minimum size of luma coding unit.*/ + NV_ENC_HEVC_CUSIZE maxCUSize; /**< [in]: Specifies the maximum size of luma coding unit. Currently NVENC SDK only supports maxCUSize equal to NV_ENC_HEVC_CUSIZE_32x32.*/ + uint32_t useConstrainedIntraPred :1; /**< [in]: Set 1 to enable constrained intra prediction. */ + uint32_t disableDeblockAcrossSliceBoundary :1; /**< [in]: Set 1 to disable in loop filtering across slice boundary.*/ + uint32_t outputBufferingPeriodSEI :1; /**< [in]: Set 1 to write SEI buffering period syntax in the bitstream */ + uint32_t outputPictureTimingSEI :1; /**< [in]: Set 1 to write SEI picture timing syntax in the bitstream */ + uint32_t outputAUD :1; /**< [in]: Set 1 to write Access Unit Delimiter syntax. */ + uint32_t enableLTR :1; /**< [in]: Set 1 to enable use of long term reference pictures for inter prediction. */ + uint32_t disableSPSPPS :1; /**< [in]: Set 1 to disable VPS,SPS and PPS signalling in the bitstream. */ + uint32_t repeatSPSPPS :1; /**< [in]: Set 1 to output VPS,SPS and PPS for every IDR frame.*/ + uint32_t enableIntraRefresh :1; /**< [in]: Set 1 to enable gradual decoder refresh or intra refresh. If the GOP structure uses B frames this will be ignored */ + uint32_t chromaFormatIDC :2; /**< [in]: Specifies the chroma format. Should be set to 1 for yuv420 input, 3 for yuv444 input.*/ + uint32_t pixelBitDepthMinus8 :3; /**< [in]: Specifies pixel bit depth minus 8. Should be set to 0 for 8 bit input, 2 for 10 bit input.*/ + uint32_t reserved :18; /**< [in]: Reserved bitfields.*/ + uint32_t idrPeriod; /**< [in]: Specifies the IDR interval. If not set, this is made equal to gopLength in NV_ENC_CONFIG.Low latency application client can set IDR interval to NVENC_INFINITE_GOPLENGTH so that IDR frames are not inserted automatically. */ + uint32_t intraRefreshPeriod; /**< [in]: Specifies the interval between successive intra refresh if enableIntrarefresh is set. Requires enableIntraRefresh to be set. + Will be disabled if NV_ENC_CONFIG::gopLength is not set to NVENC_INFINITE_GOPLENGTH. */ + uint32_t intraRefreshCnt; /**< [in]: Specifies the length of intra refresh in number of frames for periodic intra refresh. This value should be smaller than intraRefreshPeriod */ + uint32_t maxNumRefFramesInDPB; /**< [in]: Specifies the maximum number of references frames in the DPB.*/ + uint32_t ltrNumFrames; /**< [in]: Specifies the number of LTR frames used. + If ltrTrustMode=1, encoder will mark first numLTRFrames base layer reference frames within each IDR interval as LTR. + If ltrMarkFrame=1, ltrNumFrames specifies maximum number of ltr frames in DPB. + If ltrNumFrames value is more that DPB size(maxNumRefFramesInDPB) encoder will take decision on its own. */ + uint32_t vpsId; /**< [in]: Specifies the VPS id of the video parameter set. Currently reserved and must be set to 0. */ + uint32_t spsId; /**< [in]: Specifies the SPS id of the sequence header. Currently reserved and must be set to 0. */ + uint32_t ppsId; /**< [in]: Specifies the PPS id of the picture header. Currently reserved and must be set to 0. */ + uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices + sliceMode = 0 CTU based slices, sliceMode = 1 Byte based slices, sliceMode = 2 CTU row based slices, sliceMode = 3, numSlices in Picture + When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */ + uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For: + sliceMode = 0, sliceModeData specifies # of CTUs in each slice (except last slice) + sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice) + sliceMode = 2, sliceModeData specifies # of CTU rows in each slice (except last slice) + sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */ + uint32_t maxTemporalLayersMinus1; /**< [in]: Specifies the max temporal layer used for hierarchical coding. */ + NV_ENC_CONFIG_HEVC_VUI_PARAMETERS hevcVUIParameters; /**< [in]: Specifies the HEVC video usability info pamameters */ + uint32_t ltrTrustMode; /**< [in]: Specifies the LTR operating mode. + Set to 0 to disallow encoding using LTR frames until later specified. + Set to 1 to allow encoding using LTR frames unless later invalidated.*/ + uint32_t reserved1[217]; /**< [in]: Reserved and must be set to 0.*/ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_CONFIG_HEVC; + +/** + * \struct _NV_ENC_CODEC_CONFIG + * Codec-specific encoder configuration parameters to be set during initialization. + */ +typedef union _NV_ENC_CODEC_CONFIG +{ + NV_ENC_CONFIG_H264 h264Config; /**< [in]: Specifies the H.264-specific encoder configuration. */ + NV_ENC_CONFIG_HEVC hevcConfig; /**< [in]: Specifies the HEVC-specific encoder configuration. */ + uint32_t reserved[256]; /**< [in]: Reserved and must be set to 0 */ +} NV_ENC_CODEC_CONFIG; + + +/** + * \struct _NV_ENC_CONFIG + * Encoder configuration parameters to be set during initialization. + */ +typedef struct _NV_ENC_CONFIG +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_CONFIG_VER. */ + GUID profileGUID; /**< [in]: Specifies the codec profile guid. If client specifies \p NV_ENC_CODEC_PROFILE_AUTOSELECT_GUID the NvEncodeAPI interface will select the appropriate codec profile. */ + uint32_t gopLength; /**< [in]: Specifies the number of pictures in one GOP. Low latency application client can set goplength to NVENC_INFINITE_GOPLENGTH so that keyframes are not inserted automatically. */ + int32_t frameIntervalP; /**< [in]: Specifies the GOP pattern as follows: \p frameIntervalP = 0: I, 1: IPP, 2: IBP, 3: IBBP If goplength is set to NVENC_INFINITE_GOPLENGTH \p frameIntervalP should be set to 1. */ + uint32_t monoChromeEncoding; /**< [in]: Set this to 1 to enable monochrome encoding for this session. */ + NV_ENC_PARAMS_FRAME_FIELD_MODE frameFieldMode; /**< [in]: Specifies the frame/field mode. + Check support for field encoding using ::NV_ENC_CAPS_SUPPORT_FIELD_ENCODING caps. + Using a frameFieldMode other than NV_ENC_PARAMS_FRAME_FIELD_MODE_FRAME for RGB input is not supported. */ + NV_ENC_MV_PRECISION mvPrecision; /**< [in]: Specifies the desired motion vector prediction precision. */ + NV_ENC_RC_PARAMS rcParams; /**< [in]: Specifies the rate control parameters for the current encoding session. */ + NV_ENC_CODEC_CONFIG encodeCodecConfig; /**< [in]: Specifies the codec specific config parameters through this union. */ + uint32_t reserved [278]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_CONFIG; + +/** macro for constructing the version field of ::_NV_ENC_CONFIG */ +#define NV_ENC_CONFIG_VER (NVENCAPI_STRUCT_VERSION(6) | ( 1<<31 )) + + +/** + * \struct _NV_ENC_INITIALIZE_PARAMS + * Encode Session Initialization parameters. + */ +typedef struct _NV_ENC_INITIALIZE_PARAMS +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_INITIALIZE_PARAMS_VER. */ + GUID encodeGUID; /**< [in]: Specifies the Encode GUID for which the encoder is being created. ::NvEncInitializeEncoder() API will fail if this is not set, or set to unsupported value. */ + GUID presetGUID; /**< [in]: Specifies the preset for encoding. If the preset GUID is set then , the preset configuration will be applied before any other parameter. */ + uint32_t encodeWidth; /**< [in]: Specifies the encode width. If not set ::NvEncInitializeEncoder() API will fail. */ + uint32_t encodeHeight; /**< [in]: Specifies the encode height. If not set ::NvEncInitializeEncoder() API will fail. */ + uint32_t darWidth; /**< [in]: Specifies the display aspect ratio Width. */ + uint32_t darHeight; /**< [in]: Specifies the display aspect ratio height. */ + uint32_t frameRateNum; /**< [in]: Specifies the numerator for frame rate used for encoding in frames per second ( Frame rate = frameRateNum / frameRateDen ). */ + uint32_t frameRateDen; /**< [in]: Specifies the denominator for frame rate used for encoding in frames per second ( Frame rate = frameRateNum / frameRateDen ). */ + uint32_t enableEncodeAsync; /**< [in]: Set this to 1 to enable asynchronous mode and is expected to use events to get picture completion notification. */ + uint32_t enablePTD; /**< [in]: Set this to 1 to enable the Picture Type Decision is be taken by the NvEncodeAPI interface. */ + uint32_t reportSliceOffsets :1; /**< [in]: Set this to 1 to enable reporting slice offsets in ::_NV_ENC_LOCK_BITSTREAM. NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync must be set to 0 to use this feature. Client must set this to 0 if NV_ENC_CONFIG_H264::sliceMode is 1 on Kepler GPUs */ + uint32_t enableSubFrameWrite :1; /**< [in]: Set this to 1 to write out available bitstream to memory at subframe intervals */ + uint32_t enableExternalMEHints :1; /**< [in]: Set to 1 to enable external ME hints for the current frame. For NV_ENC_INITIALIZE_PARAMS::enablePTD=1 with B frames, programming L1 hints is optional for B frames since Client doesn't know internal GOP structure. + NV_ENC_PIC_PARAMS::meHintRefPicDist should preferably be set with enablePTD=1. */ + uint32_t enableMEOnlyMode :1; /**< [in]: Set to 1 to enable ME Only Mode .*/ + uint32_t reservedBitFields :28; /**< [in]: Reserved bitfields and must be set to 0 */ + uint32_t privDataSize; /**< [in]: Reserved private data buffer size and must be set to 0 */ + void* privData; /**< [in]: Reserved private data buffer and must be set to NULL */ + NV_ENC_CONFIG* encodeConfig; /**< [in]: Specifies the advanced codec specific structure. If client has sent a valid codec config structure, it will override parameters set by the NV_ENC_INITIALIZE_PARAMS::presetGUID parameter. If set to NULL the NvEncodeAPI interface will use the NV_ENC_INITIALIZE_PARAMS::presetGUID to set the codec specific parameters. + Client can also optionally query the NvEncodeAPI interface to get codec specific parameters for a presetGUID using ::NvEncGetEncodePresetConfig() API. It can then modify (if required) some of the codec config parameters and send down a custom config structure as part of ::_NV_ENC_INITIALIZE_PARAMS. + Even in this case client is recommended to pass the same preset guid it has used in ::NvEncGetEncodePresetConfig() API to query the config structure; as NV_ENC_INITIALIZE_PARAMS::presetGUID. This will not override the custom config structure but will be used to determine other Encoder HW specific parameters not exposed in the API. */ + uint32_t maxEncodeWidth; /**< [in]: Maximum encode width to be used for current Encode session. + Client should allocate output buffers according to this dimension for dynamic resolution change. If set to 0, Encoder will not allow dynamic resolution change. */ + uint32_t maxEncodeHeight; /**< [in]: Maximum encode height to be allowed for current Encode session. + Client should allocate output buffers according to this dimension for dynamic resolution change. If set to 0, Encode will not allow dynamic resolution change. */ + NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE maxMEHintCountsPerBlock[2]; /**< [in]: If Client wants to pass external motion vectors in NV_ENC_PIC_PARAMS::meExternalHints buffer it must specify the maximum number of hint candidates per block per direction for the encode session. + The NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[0] is for L0 predictors and NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[1] is for L1 predictors. + This client must also set NV_ENC_INITIALIZE_PARAMS::enableExternalMEHints to 1. */ + uint32_t reserved [289]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_INITIALIZE_PARAMS; + +/** macro for constructing the version field of ::_NV_ENC_INITIALIZE_PARAMS */ +#define NV_ENC_INITIALIZE_PARAMS_VER (NVENCAPI_STRUCT_VERSION(5) | ( 1<<31 )) + + +/** + * \struct _NV_ENC_RECONFIGURE_PARAMS + * Encode Session Reconfigured parameters. + */ +typedef struct _NV_ENC_RECONFIGURE_PARAMS +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_RECONFIGURE_PARAMS_VER. */ + NV_ENC_INITIALIZE_PARAMS reInitEncodeParams; /**< [in]: Encoder session re-initialization parameters. */ + uint32_t resetEncoder :1; /**< [in]: This resets the rate control states and other internal encoder states. This should be used only with an IDR frame. + If NV_ENC_INITIALIZE_PARAMS::enablePTD is set to 1, encoder will force the frame type to IDR */ + uint32_t forceIDR :1; /**< [in]: Encode the current picture as an IDR picture. This flag is only valid when Picture type decision is taken by the Encoder + [_NV_ENC_INITIALIZE_PARAMS::enablePTD == 1]. */ + uint32_t reserved :30; + +}NV_ENC_RECONFIGURE_PARAMS; + +/** macro for constructing the version field of ::_NV_ENC_RECONFIGURE_PARAMS */ +#define NV_ENC_RECONFIGURE_PARAMS_VER (NVENCAPI_STRUCT_VERSION(1) | ( 1<<31 )) + +/** + * \struct _NV_ENC_PRESET_CONFIG + * Encoder preset config + */ +typedef struct _NV_ENC_PRESET_CONFIG +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_PRESET_CONFIG_VER. */ + NV_ENC_CONFIG presetCfg; /**< [out]: preset config returned by the Nvidia Video Encoder interface. */ + uint32_t reserved1[255]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +}NV_ENC_PRESET_CONFIG; + +/** macro for constructing the version field of ::_NV_ENC_PRESET_CONFIG */ +#define NV_ENC_PRESET_CONFIG_VER (NVENCAPI_STRUCT_VERSION(4) | ( 1<<31 )) + + +/** + * \struct _NV_ENC_SEI_PAYLOAD + * User SEI message + */ +typedef struct _NV_ENC_SEI_PAYLOAD +{ + uint32_t payloadSize; /**< [in] SEI payload size in bytes. SEI payload must be byte aligned, as described in Annex D */ + uint32_t payloadType; /**< [in] SEI payload types and syntax can be found in Annex D of the H.264 Specification. */ + uint8_t *payload; /**< [in] pointer to user data */ +} NV_ENC_SEI_PAYLOAD; + +#define NV_ENC_H264_SEI_PAYLOAD NV_ENC_SEI_PAYLOAD + +/** + * \struct _NV_ENC_PIC_PARAMS_H264 + * H264 specific enc pic params. sent on a per frame basis. + */ +typedef struct _NV_ENC_PIC_PARAMS_H264 +{ + uint32_t displayPOCSyntax; /**< [in]: Specifies the display POC syntax This is required to be set if client is handling the picture type decision. */ + uint32_t reserved3; /**< [in]: Reserved and must be set to 0 */ + uint32_t refPicFlag; /**< [in]: Set to 1 for a reference picture. This is ignored if NV_ENC_INITIALIZE_PARAMS::enablePTD is set to 1. */ + uint32_t colourPlaneId; /**< [in]: Specifies the colour plane ID associated with the current input. */ + uint32_t forceIntraRefreshWithFrameCnt; /**< [in]: Forces an intra refresh with duration equal to intraRefreshFrameCnt. + When outputRecoveryPointSEI is set this is value is used for recovery_frame_cnt in recovery point SEI message + forceIntraRefreshWithFrameCnt cannot be used if B frames are used in the GOP structure specified */ + uint32_t constrainedFrame :1; /**< [in]: Set to 1 if client wants to encode this frame with each slice completely independent of other slices in the frame. + NV_ENC_INITIALIZE_PARAMS::enableConstrainedEncoding should be set to 1 */ + uint32_t sliceModeDataUpdate :1; /**< [in]: Set to 1 if client wants to change the sliceModeData field to specify new sliceSize Parameter + When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting */ + uint32_t ltrMarkFrame :1; /**< [in]: Set to 1 if client wants to mark this frame as LTR */ + uint32_t ltrUseFrames :1; /**< [in]: Set to 1 if client allows encoding this frame using the LTR frames specified in ltrFrameBitmap */ + uint32_t reservedBitFields :28; /**< [in]: Reserved bit fields and must be set to 0 */ + uint8_t* sliceTypeData; /**< [in]: Deprecated. */ + uint32_t sliceTypeArrayCnt; /**< [in]: Deprecated. */ + uint32_t seiPayloadArrayCnt; /**< [in]: Specifies the number of elements allocated in seiPayloadArray array. */ + NV_ENC_SEI_PAYLOAD* seiPayloadArray; /**< [in]: Array of SEI payloads which will be inserted for this frame. */ + uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices + sliceMode = 0 MB based slices, sliceMode = 1 Byte based slices, sliceMode = 2 MB row based slices, sliceMode = 3, numSlices in Picture + When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting + When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */ + uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For: + sliceMode = 0, sliceModeData specifies # of MBs in each slice (except last slice) + sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice) + sliceMode = 2, sliceModeData specifies # of MB rows in each slice (except last slice) + sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */ + uint32_t ltrMarkFrameIdx; /**< [in]: Specifies the long term referenceframe index to use for marking this frame as LTR.*/ + uint32_t ltrUseFrameBitmap; /**< [in]: Specifies the the associated bitmap of LTR frame indices when encoding this frame. */ + uint32_t ltrUsageMode; /**< [in]: Specifies additional usage constraints for encoding using LTR frames from this point further. 0: no constraints, 1: no short term refs older than current, no previous LTR frames.*/ + uint32_t reserved [243]; /**< [in]: Reserved and must be set to 0. */ + void* reserved2[62]; /**< [in]: Reserved and must be set to NULL. */ +} NV_ENC_PIC_PARAMS_H264; + +/** + * \struct _NV_ENC_PIC_PARAMS_HEVC + * HEVC specific enc pic params. sent on a per frame basis. + */ +typedef struct _NV_ENC_PIC_PARAMS_HEVC +{ + uint32_t displayPOCSyntax; /**< [in]: Specifies the display POC syntax This is required to be set if client is handling the picture type decision. */ + uint32_t refPicFlag; /**< [in]: Set to 1 for a reference picture. This is ignored if NV_ENC_INITIALIZE_PARAMS::enablePTD is set to 1. */ + uint32_t temporalId; /**< [in]: Specifies the temporal id of the picture */ + uint32_t forceIntraRefreshWithFrameCnt; /**< [in]: Forces an intra refresh with duration equal to intraRefreshFrameCnt. + When outputRecoveryPointSEI is set this is value is used for recovery_frame_cnt in recovery point SEI message + forceIntraRefreshWithFrameCnt cannot be used if B frames are used in the GOP structure specified */ + uint32_t constrainedFrame :1; /**< [in]: Set to 1 if client wants to encode this frame with each slice completely independent of other slices in the frame. + NV_ENC_INITIALIZE_PARAMS::enableConstrainedEncoding should be set to 1 */ + uint32_t sliceModeDataUpdate :1; /**< [in]: Set to 1 if client wants to change the sliceModeData field to specify new sliceSize Parameter + When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting */ + uint32_t ltrMarkFrame :1; /**< [in]: Set to 1 if client wants to mark this frame as LTR */ + uint32_t ltrUseFrames :1; /**< [in]: Set to 1 if client allows encoding this frame using the LTR frames specified in ltrFrameBitmap */ + uint32_t reservedBitFields :28; /**< [in]: Reserved bit fields and must be set to 0 */ + uint8_t* sliceTypeData; /**< [in]: Array which specifies the slice type used to force intra slice for a particular slice. Currently supported only for NV_ENC_CONFIG_H264::sliceMode == 3. + Client should allocate array of size sliceModeData where sliceModeData is specified in field of ::_NV_ENC_CONFIG_H264 + Array element with index n corresponds to nth slice. To force a particular slice to intra client should set corresponding array element to NV_ENC_SLICE_TYPE_I + all other array elements should be set to NV_ENC_SLICE_TYPE_DEFAULT */ + uint32_t sliceTypeArrayCnt; /**< [in]: Client should set this to the number of elements allocated in sliceTypeData array. If sliceTypeData is NULL then this should be set to 0 */ + uint32_t sliceMode; /**< [in]: This parameter in conjunction with sliceModeData specifies the way in which the picture is divided into slices + sliceMode = 0 CTU based slices, sliceMode = 1 Byte based slices, sliceMode = 2 CTU row based slices, sliceMode = 3, numSlices in Picture + When forceIntraRefreshWithFrameCnt is set it will have priority over sliceMode setting + When sliceMode == 0 and sliceModeData == 0 whole picture will be coded with one slice */ + uint32_t sliceModeData; /**< [in]: Specifies the parameter needed for sliceMode. For: + sliceMode = 0, sliceModeData specifies # of CTUs in each slice (except last slice) + sliceMode = 1, sliceModeData specifies maximum # of bytes in each slice (except last slice) + sliceMode = 2, sliceModeData specifies # of CTU rows in each slice (except last slice) + sliceMode = 3, sliceModeData specifies number of slices in the picture. Driver will divide picture into slices optimally */ + uint32_t ltrMarkFrameIdx; /**< [in]: Specifies the long term reference frame index to use for marking this frame as LTR.*/ + uint32_t ltrUseFrameBitmap; /**< [in]: Specifies the associated bitmap of LTR frame indices when encoding this frame. */ + uint32_t ltrUsageMode; /**< [in]: Specifies additional usage constraints for encoding using LTR frames from this point further. 0: no constraints, 1: no short term refs older than current, no previous LTR frames.*/ + uint32_t seiPayloadArrayCnt; /**< [in]: Specifies the number of elements allocated in seiPayloadArray array. */ + uint32_t reserved; /**< [in]: Reserved and must be set to 0. */ + NV_ENC_SEI_PAYLOAD* seiPayloadArray; /**< [in]: Array of SEI payloads which will be inserted for this frame. */ + uint32_t reserved2 [244]; /**< [in]: Reserved and must be set to 0. */ + void* reserved3[61]; /**< [in]: Reserved and must be set to NULL. */ +} NV_ENC_PIC_PARAMS_HEVC; + + +/** + * Codec specific per-picture encoding parameters. + */ +typedef union _NV_ENC_CODEC_PIC_PARAMS +{ + NV_ENC_PIC_PARAMS_H264 h264PicParams; /**< [in]: H264 encode picture params. */ + NV_ENC_PIC_PARAMS_HEVC hevcPicParams; /**< [in]: HEVC encode picture params. Currently unsupported and must not to be used. */ + uint32_t reserved[256]; /**< [in]: Reserved and must be set to 0. */ +} NV_ENC_CODEC_PIC_PARAMS; + +/** + * \struct _NV_ENC_PIC_PARAMS + * Encoding parameters that need to be sent on a per frame basis. + */ +typedef struct _NV_ENC_PIC_PARAMS +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_PIC_PARAMS_VER. */ + uint32_t inputWidth; /**< [in]: Specifies the input buffer width */ + uint32_t inputHeight; /**< [in]: Specifies the input buffer height */ + uint32_t inputPitch; /**< [in]: Specifies the input buffer pitch. If pitch value is not known, set this to inputWidth. */ + uint32_t encodePicFlags; /**< [in]: Specifies bit-wise OR`ed encode pic flags. See ::NV_ENC_PIC_FLAGS enum. */ + uint32_t frameIdx; /**< [in]: Specifies the frame index associated with the input frame [optional]. */ + uint64_t inputTimeStamp; /**< [in]: Specifies presentation timestamp associated with the input picture. */ + uint64_t inputDuration; /**< [in]: Specifies duration of the input picture */ + NV_ENC_INPUT_PTR inputBuffer; /**< [in]: Specifies the input buffer pointer. Client must use a pointer obtained from ::NvEncCreateInputBuffer() or ::NvEncMapInputResource() APIs.*/ + NV_ENC_OUTPUT_PTR outputBitstream; /**< [in]: Specifies the pointer to output buffer. Client should use a pointer obtained from ::NvEncCreateBitstreamBuffer() API. */ + void* completionEvent; /**< [in]: Specifies an event to be signalled on completion of encoding of this Frame [only if operating in Asynchronous mode]. Each output buffer should be associated with a distinct event pointer. */ + NV_ENC_BUFFER_FORMAT bufferFmt; /**< [in]: Specifies the input buffer format. */ + NV_ENC_PIC_STRUCT pictureStruct; /**< [in]: Specifies structure of the input picture. */ + NV_ENC_PIC_TYPE pictureType; /**< [in]: Specifies input picture type. Client required to be set explicitly by the client if the client has not set NV_ENC_INITALIZE_PARAMS::enablePTD to 1 while calling NvInitializeEncoder. */ + NV_ENC_CODEC_PIC_PARAMS codecPicParams; /**< [in]: Specifies the codec specific per-picture encoding parameters. */ + NVENC_EXTERNAL_ME_HINT_COUNTS_PER_BLOCKTYPE meHintCountsPerBlock[2]; /**< [in]: Specifies the number of hint candidates per block per direction for the current frame. meHintCountsPerBlock[0] is for L0 predictors and meHintCountsPerBlock[1] is for L1 predictors. + The candidate count in NV_ENC_PIC_PARAMS::meHintCountsPerBlock[lx] must never exceed NV_ENC_INITIALIZE_PARAMS::maxMEHintCountsPerBlock[lx] provided during encoder intialization. */ + NVENC_EXTERNAL_ME_HINT *meExternalHints; /**< [in]: Specifies the pointer to ME external hints for the current frame. The size of ME hint buffer should be equal to number of macroblocks multiplied by the total number of candidates per macroblock. + The total number of candidates per MB per direction = 1*meHintCountsPerBlock[Lx].numCandsPerBlk16x16 + 2*meHintCountsPerBlock[Lx].numCandsPerBlk16x8 + 2*meHintCountsPerBlock[Lx].numCandsPerBlk8x8 + + 4*meHintCountsPerBlock[Lx].numCandsPerBlk8x8. For frames using bidirectional ME , the total number of candidates for single macroblock is sum of total number of candidates per MB for each direction (L0 and L1) */ + uint32_t reserved1[6]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[2]; /**< [in]: Reserved and must be set to NULL */ + int8_t *qpDeltaMap; /**< [in]: Specifies the pointer to signed byte array containing QP delta value per MB in raster scan order in the current picture. This QP modifier is applied on top of the QP chosen by rate control. */ + uint32_t qpDeltaMapSize; /**< [in]: Specifies the size in bytes of qpDeltaMap surface allocated by client and pointed to by NV_ENC_PIC_PARAMS::qpDeltaMap. Surface (array) should be picWidthInMbs * picHeightInMbs */ + uint32_t reservedBitFields; /**< [in]: Reserved bitfields and must be set to 0 */ + uint16_t meHintRefPicDist[2]; /**< [in]: Specifies temporal distance for reference picture (NVENC_EXTERNAL_ME_HINT::refidx = 0) used during external ME with NV_ENC_INITALIZE_PARAMS::enablePTD = 1 . meHintRefPicDist[0] is for L0 hints and meHintRefPicDist[1] is for L1 hints. + If not set, will internally infer distance of 1. Ignored for NV_ENC_INITALIZE_PARAMS::enablePTD = 0 */ + uint32_t reserved3[286]; /**< [in]: Reserved and must be set to 0 */ + void* reserved4[60]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_PIC_PARAMS; + +/** Macro for constructing the version field of ::_NV_ENC_PIC_PARAMS */ +#define NV_ENC_PIC_PARAMS_VER (NVENCAPI_STRUCT_VERSION(4) | ( 1<<31 )) + + +/** + * \struct _NV_ENC_MEONLY_PARAMS + * MEOnly parameters that need to be sent on a per motion estimation basis. + */ +typedef struct _NV_ENC_MEONLY_PARAMS +{ + uint32_t version; /**< [in]: Struct version. Must be set to NV_ENC_MEONLY_PARAMS_VER.*/ + uint32_t inputWidth; /**< [in]: Specifies the input buffer width */ + uint32_t inputHeight; /**< [in]: Specifies the input buffer height */ + NV_ENC_INPUT_PTR inputBuffer; /**< [in]: Specifies the input buffer pointer. Client must use a pointer obtained from NvEncCreateInputBuffer() or NvEncMapInputResource() APIs. */ + NV_ENC_INPUT_PTR referenceFrame; /**< [in]: Specifies the reference frame pointer */ + NV_ENC_OUTPUT_PTR mvBuffer; /**< [in]: Specifies the pointer to motion vector data buffer allocated by NvEncCreateMVBuffer. Client must lock mvBuffer using ::NvEncLockBitstream() API to get the motion vector data. */ + NV_ENC_BUFFER_FORMAT bufferFmt; /**< [in]: Specifies the input buffer format. */ + void* completionEvent; /**< [in]: Specifies an event to be signalled on completion of motion estimation + of this Frame [only if operating in Asynchronous mode]. + Each output buffer should be associated with a distinct event pointer. */ + uint32_t reserved1[252]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[60]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_MEONLY_PARAMS; + +/** NV_ENC_MEONLY_PARAMS struct version*/ +#define NV_ENC_MEONLY_PARAMS_VER NVENCAPI_STRUCT_VERSION(2) + + +/** + * \struct _NV_ENC_LOCK_BITSTREAM + * Bitstream buffer lock parameters. + */ +typedef struct _NV_ENC_LOCK_BITSTREAM +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_LOCK_BITSTREAM_VER. */ + uint32_t doNotWait :1; /**< [in]: If this flag is set, the NvEncodeAPI interface will return buffer pointer even if operation is not completed. If not set, the call will block until operation completes. */ + uint32_t ltrFrame :1; /**< [out]: Flag indicating this frame is marked as LTR frame */ + uint32_t reservedBitFields :30; /**< [in]: Reserved bit fields and must be set to 0 */ + void* outputBitstream; /**< [in]: Pointer to the bitstream buffer being locked. */ + uint32_t* sliceOffsets; /**< [in,out]: Array which receives the slice offsets. This is not supported if NV_ENC_CONFIG_H264::sliceMode is 1 on Kepler GPUs. Array size must be equal to size of frame in MBs. */ + uint32_t frameIdx; /**< [out]: Frame no. for which the bitstream is being retrieved. */ + uint32_t hwEncodeStatus; /**< [out]: The NvEncodeAPI interface status for the locked picture. */ + uint32_t numSlices; /**< [out]: Number of slices in the encoded picture. Will be reported only if NV_ENC_INITIALIZE_PARAMS::reportSliceOffsets set to 1. */ + uint32_t bitstreamSizeInBytes; /**< [out]: Actual number of bytes generated and copied to the memory pointed by bitstreamBufferPtr. */ + uint64_t outputTimeStamp; /**< [out]: Presentation timestamp associated with the encoded output. */ + uint64_t outputDuration; /**< [out]: Presentation duration associates with the encoded output. */ + void* bitstreamBufferPtr; /**< [out]: Pointer to the generated output bitstream. + For MEOnly mode _NV_ENC_LOCK_BITSTREAM::bitstreamBufferPtr should be typecast to + NV_ENC_H264_MV_DATA/NV_ENC_HEVC_MV_DATA pointer respectively for H264/HEVC */ + NV_ENC_PIC_TYPE pictureType; /**< [out]: Picture type of the encoded picture. */ + NV_ENC_PIC_STRUCT pictureStruct; /**< [out]: Structure of the generated output picture. */ + uint32_t frameAvgQP; /**< [out]: Average QP of the frame. */ + uint32_t frameSatd; /**< [out]: Total SATD cost for whole frame. */ + uint32_t ltrFrameIdx; /**< [out]: Frame index associated with this LTR frame. */ + uint32_t ltrFrameBitmap; /**< [out]: Bitmap of LTR frames indices which were used for encoding this frame. Value of 0 if no LTR frames were used. */ + uint32_t reserved [236]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_LOCK_BITSTREAM; + +/** Macro for constructing the version field of ::_NV_ENC_LOCK_BITSTREAM */ +#define NV_ENC_LOCK_BITSTREAM_VER NVENCAPI_STRUCT_VERSION(1) + + +/** + * \struct _NV_ENC_LOCK_INPUT_BUFFER + * Uncompressed Input Buffer lock parameters. + */ +typedef struct _NV_ENC_LOCK_INPUT_BUFFER +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_LOCK_INPUT_BUFFER_VER. */ + uint32_t doNotWait :1; /**< [in]: Set to 1 to make ::NvEncLockInputBuffer() a unblocking call. If the encoding is not completed, driver will return ::NV_ENC_ERR_ENCODER_BUSY error code. */ + uint32_t reservedBitFields :31; /**< [in]: Reserved bitfields and must be set to 0 */ + NV_ENC_INPUT_PTR inputBuffer; /**< [in]: Pointer to the input buffer to be locked, client should pass the pointer obtained from ::NvEncCreateInputBuffer() or ::NvEncMapInputResource API. */ + void* bufferDataPtr; /**< [out]: Pointed to the locked input buffer data. Client can only access input buffer using the \p bufferDataPtr. */ + uint32_t pitch; /**< [out]: Pitch of the locked input buffer. */ + uint32_t reserved1[251]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_LOCK_INPUT_BUFFER; + +/** Macro for constructing the version field of ::_NV_ENC_LOCK_INPUT_BUFFER */ +#define NV_ENC_LOCK_INPUT_BUFFER_VER NVENCAPI_STRUCT_VERSION(1) + + +/** + * \struct _NV_ENC_MAP_INPUT_RESOURCE + * Map an input resource to a Nvidia Encoder Input Buffer + */ +typedef struct _NV_ENC_MAP_INPUT_RESOURCE +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_MAP_INPUT_RESOURCE_VER. */ + uint32_t subResourceIndex; /**< [in]: Deprecated. Do not use. */ + void* inputResource; /**< [in]: Deprecated. Do not use. */ + NV_ENC_REGISTERED_PTR registeredResource; /**< [in]: The Registered resource handle obtained by calling NvEncRegisterInputResource. */ + NV_ENC_INPUT_PTR mappedResource; /**< [out]: Mapped pointer corresponding to the registeredResource. This pointer must be used in NV_ENC_PIC_PARAMS::inputBuffer parameter in ::NvEncEncodePicture() API. */ + NV_ENC_BUFFER_FORMAT mappedBufferFmt; /**< [out]: Buffer format of the outputResource. This buffer format must be used in NV_ENC_PIC_PARAMS::bufferFmt if client using the above mapped resource pointer. */ + uint32_t reserved1[251]; /**< [in]: Reserved and must be set to 0. */ + void* reserved2[63]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_MAP_INPUT_RESOURCE; + +/** Macro for constructing the version field of ::_NV_ENC_MAP_INPUT_RESOURCE */ +#define NV_ENC_MAP_INPUT_RESOURCE_VER NVENCAPI_STRUCT_VERSION(4) + +/** + * \struct _NV_ENC_REGISTER_RESOURCE + * Register a resource for future use with the Nvidia Video Encoder Interface. + */ +typedef struct _NV_ENC_REGISTER_RESOURCE +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_REGISTER_RESOURCE_VER. */ + NV_ENC_INPUT_RESOURCE_TYPE resourceType; /**< [in]: Specifies the type of resource to be registered. Supported values are ::NV_ENC_INPUT_RESOURCE_TYPE_DIRECTX, ::NV_ENC_INPUT_RESOURCE_TYPE_CUDADEVICEPTR. */ + uint32_t width; /**< [in]: Input buffer Width. */ + uint32_t height; /**< [in]: Input buffer Height. */ + uint32_t pitch; /**< [in]: Input buffer Pitch. */ + uint32_t subResourceIndex; /**< [in]: Subresource Index of the DirectX resource to be registered. Should be set to 0 for other interfaces. */ + void* resourceToRegister; /**< [in]: Handle to the resource that is being registered. */ + NV_ENC_REGISTERED_PTR registeredResource; /**< [out]: Registered resource handle. This should be used in future interactions with the Nvidia Video Encoder Interface. */ + NV_ENC_BUFFER_FORMAT bufferFormat; /**< [in]: Buffer format of resource to be registered. */ + uint32_t reserved1[248]; /**< [in]: Reserved and must be set to 0. */ + void* reserved2[62]; /**< [in]: Reserved and must be set to NULL. */ +} NV_ENC_REGISTER_RESOURCE; + +/** Macro for constructing the version field of ::_NV_ENC_REGISTER_RESOURCE */ +#define NV_ENC_REGISTER_RESOURCE_VER NVENCAPI_STRUCT_VERSION(3) + +/** + * \struct _NV_ENC_STAT + * Encode Stats structure. + */ +typedef struct _NV_ENC_STAT +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_STAT_VER. */ + uint32_t reserved; /**< [in]: Reserved and must be set to 0 */ + NV_ENC_OUTPUT_PTR outputBitStream; /**< [out]: Specifies the pointer to output bitstream. */ + uint32_t bitStreamSize; /**< [out]: Size of generated bitstream in bytes. */ + uint32_t picType; /**< [out]: Picture type of encoded picture. See ::NV_ENC_PIC_TYPE. */ + uint32_t lastValidByteOffset; /**< [out]: Offset of last valid bytes of completed bitstream */ + uint32_t sliceOffsets[16]; /**< [out]: Offsets of each slice */ + uint32_t picIdx; /**< [out]: Picture number */ + uint32_t reserved1[233]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_STAT; + +/** Macro for constructing the version field of ::_NV_ENC_STAT */ +#define NV_ENC_STAT_VER NVENCAPI_STRUCT_VERSION(1) + + +/** + * \struct _NV_ENC_SEQUENCE_PARAM_PAYLOAD + * Sequence and picture paramaters payload. + */ +typedef struct _NV_ENC_SEQUENCE_PARAM_PAYLOAD +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_INITIALIZE_PARAMS_VER. */ + uint32_t inBufferSize; /**< [in]: Specifies the size of the spsppsBuffer provied by the client */ + uint32_t spsId; /**< [in]: Specifies the SPS id to be used in sequence header. Default value is 0. */ + uint32_t ppsId; /**< [in]: Specifies the PPS id to be used in picture header. Default value is 0. */ + void* spsppsBuffer; /**< [in]: Specifies bitstream header pointer of size NV_ENC_SEQUENCE_PARAM_PAYLOAD::inBufferSize. It is the client's responsibility to manage this memory. */ + uint32_t* outSPSPPSPayloadSize; /**< [out]: Size of the sequence and picture header in bytes written by the NvEncodeAPI interface to the SPSPPSBuffer. */ + uint32_t reserved [250]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_SEQUENCE_PARAM_PAYLOAD; + +/** Macro for constructing the version field of ::_NV_ENC_SEQUENCE_PARAM_PAYLOAD */ +#define NV_ENC_SEQUENCE_PARAM_PAYLOAD_VER NVENCAPI_STRUCT_VERSION(1) + + +/** + * Event registration/unregistration parameters. + */ +typedef struct _NV_ENC_EVENT_PARAMS +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_EVENT_PARAMS_VER. */ + uint32_t reserved; /**< [in]: Reserved and must be set to 0 */ + void* completionEvent; /**< [in]: Handle to event to be registered/unregistered with the NvEncodeAPI interface. */ + uint32_t reserved1[253]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_EVENT_PARAMS; + +/** Macro for constructing the version field of ::_NV_ENC_EVENT_PARAMS */ +#define NV_ENC_EVENT_PARAMS_VER NVENCAPI_STRUCT_VERSION(1) + +/** + * Encoder Session Creation parameters + */ +typedef struct _NV_ENC_OPEN_ENCODE_SESSIONEX_PARAMS +{ + uint32_t version; /**< [in]: Struct version. Must be set to ::NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER. */ + NV_ENC_DEVICE_TYPE deviceType; /**< [in]: Specified the device Type */ + void* device; /**< [in]: Pointer to client device. */ + void* reserved; /**< [in]: Reserved and must be set to 0. */ + uint32_t apiVersion; /**< [in]: API version. Should be set to NVENCAPI_VERSION. */ + uint32_t reserved1[253]; /**< [in]: Reserved and must be set to 0 */ + void* reserved2[64]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS; +/** Macro for constructing the version field of ::_NV_ENC_OPEN_ENCODE_SESSIONEX_PARAMS */ +#define NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS_VER NVENCAPI_STRUCT_VERSION(1) + +/** @} */ /* END ENCODER_STRUCTURE */ + + +/** + * \addtogroup ENCODE_FUNC NvEncodeAPI Functions + * @{ + */ + +// NvEncOpenEncodeSession +/** + * \brief Opens an encoding session. + * + * Deprecated. + * + * \return + * ::NV_ENC_ERR_INVALID_CALL\n + * + */ +NVENCSTATUS NVENCAPI NvEncOpenEncodeSession (void* device, uint32_t deviceType, void** encoder); + +// NvEncGetEncodeGuidCount +/** + * \brief Retrieves the number of supported encode GUIDs. + * + * The function returns the number of codec guids supported by the NvEncodeAPI + * interface. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [out] encodeGUIDCount + * Number of supported encode GUIDs. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodeGUIDCount (void* encoder, uint32_t* encodeGUIDCount); + + +// NvEncGetEncodeGUIDs +/** + * \brief Retrieves an array of supported encoder codec GUIDs. + * + * The function returns an array of codec guids supported by the NvEncodeAPI interface. + * The client must allocate an array where the NvEncodeAPI interface can + * fill the supported guids and pass the pointer in \p *GUIDs parameter. + * The size of the array can be determined by using ::NvEncGetEncodeGUIDCount() API. + * The Nvidia Encoding interface returns the number of codec guids it has actually + * filled in the guid array in the \p GUIDCount parameter. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] guidArraySize + * Number of GUIDs to retrieved. Should be set to the number retrieved using + * ::NvEncGetEncodeGUIDCount. + * \param [out] GUIDs + * Array of supported Encode GUIDs. + * \param [out] GUIDCount + * Number of supported Encode GUIDs. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodeGUIDs (void* encoder, GUID* GUIDs, uint32_t guidArraySize, uint32_t* GUIDCount); + + +// NvEncGetEncodeProfileGuidCount +/** + * \brief Retrieves the number of supported profile GUIDs. + * + * The function returns the number of profile GUIDs supported for a given codec. + * The client must first enumerate the codec guids supported by the NvEncodeAPI + * interface. After determining the codec guid, it can query the NvEncodeAPI + * interface to determine the number of profile guids supported for a particular + * codec guid. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * The codec guid for which the profile guids are being enumerated. + * \param [out] encodeProfileGUIDCount + * Number of encode profiles supported for the given encodeGUID. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodeProfileGUIDCount (void* encoder, GUID encodeGUID, uint32_t* encodeProfileGUIDCount); + + +// NvEncGetEncodeProfileGUIDs +/** + * \brief Retrieves an array of supported encode profile GUIDs. + * + * The function returns an array of supported profile guids for a particular + * codec guid. The client must allocate an array where the NvEncodeAPI interface + * can populate the profile guids. The client can determine the array size using + * ::NvEncGetEncodeProfileGUIDCount() API. The client must also validiate that the + * NvEncodeAPI interface supports the GUID the client wants to pass as \p encodeGUID + * parameter. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * The encode guid whose profile guids are being enumerated. + * \param [in] guidArraySize + * Number of GUIDs to be retrieved. Should be set to the number retrieved using + * ::NvEncGetEncodeProfileGUIDCount. + * \param [out] profileGUIDs + * Array of supported Encode Profile GUIDs + * \param [out] GUIDCount + * Number of valid encode profile GUIDs in \p profileGUIDs array. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodeProfileGUIDs (void* encoder, GUID encodeGUID, GUID* profileGUIDs, uint32_t guidArraySize, uint32_t* GUIDCount); + +// NvEncGetInputFormatCount +/** + * \brief Retrieve the number of supported Input formats. + * + * The function returns the number of supported input formats. The client must + * query the NvEncodeAPI interface to determine the supported input formats + * before creating the input surfaces. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * Encode GUID, corresponding to which the number of supported input formats + * is to be retrieved. + * \param [out] inputFmtCount + * Number of input formats supported for specified Encode GUID. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + */ +NVENCSTATUS NVENCAPI NvEncGetInputFormatCount (void* encoder, GUID encodeGUID, uint32_t* inputFmtCount); + + +// NvEncGetInputFormats +/** + * \brief Retrieves an array of supported Input formats + * + * Returns an array of supported input formats The client must use the input + * format to create input surface using ::NvEncCreateInputBuffer() API. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * Encode GUID, corresponding to which the number of supported input formats + * is to be retrieved. + *\param [in] inputFmtArraySize + * Size input format count array passed in \p inputFmts. + *\param [out] inputFmts + * Array of input formats supported for this Encode GUID. + *\param [out] inputFmtCount + * The number of valid input format types returned by the NvEncodeAPI + * interface in \p inputFmts array. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetInputFormats (void* encoder, GUID encodeGUID, NV_ENC_BUFFER_FORMAT* inputFmts, uint32_t inputFmtArraySize, uint32_t* inputFmtCount); + + +// NvEncGetEncodeCaps +/** + * \brief Retrieves the capability value for a specified encoder attribute. + * + * The function returns the capability value for a given encoder attribute. The + * client must validate the encodeGUID using ::NvEncGetEncodeGUIDs() API before + * calling this function. The encoder attribute being queried are enumerated in + * ::NV_ENC_CAPS_PARAM enum. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * Encode GUID, corresponding to which the capability attribute is to be retrieved. + * \param [in] capsParam + * Used to specify attribute being queried. Refer ::NV_ENC_CAPS_PARAM for more + * details. + * \param [out] capsVal + * The value corresponding to the capability attribute being queried. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + */ +NVENCSTATUS NVENCAPI NvEncGetEncodeCaps (void* encoder, GUID encodeGUID, NV_ENC_CAPS_PARAM* capsParam, int* capsVal); + + +// NvEncGetEncodePresetCount +/** + * \brief Retrieves the number of supported preset GUIDs. + * + * The function returns the number of preset GUIDs available for a given codec. + * The client must validate the codec guid using ::NvEncGetEncodeGUIDs() API + * before calling this function. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * Encode GUID, corresponding to which the number of supported presets is to + * be retrieved. + * \param [out] encodePresetGUIDCount + * Receives the number of supported preset GUIDs. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodePresetCount (void* encoder, GUID encodeGUID, uint32_t* encodePresetGUIDCount); + + +// NvEncGetEncodePresetGUIDs +/** + * \brief Receives an array of supported encoder preset GUIDs. + * + * The function returns an array of encode preset guids available for a given codec. + * The client can directly use one of the preset guids based upon the use case + * or target device. The preset guid chosen can be directly used in + * NV_ENC_INITIALIZE_PARAMS::presetGUID parameter to ::NvEncEncodePicture() API. + * Alternately client can also use the preset guid to retrieve the encoding config + * parameters being used by NvEncodeAPI interface for that given preset, using + * ::NvEncGetEncodePresetConfig() API. It can then modify preset config parameters + * as per its use case and send it to NvEncodeAPI interface as part of + * NV_ENC_INITIALIZE_PARAMS::encodeConfig parameter for NvEncInitializeEncoder() + * API. + * + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * Encode GUID, corresponding to which the list of supported presets is to be + * retrieved. + * \param [in] guidArraySize + * Size of array of preset guids passed in \p preset GUIDs + * \param [out] presetGUIDs + * Array of supported Encode preset GUIDs from the NvEncodeAPI interface + * to client. + * \param [out] encodePresetGUIDCount + * Receives the number of preset GUIDs returned by the NvEncodeAPI + * interface. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodePresetGUIDs (void* encoder, GUID encodeGUID, GUID* presetGUIDs, uint32_t guidArraySize, uint32_t* encodePresetGUIDCount); + + +// NvEncGetEncodePresetConfig +/** + * \brief Returns a preset config structure supported for given preset GUID. + * + * The function returns a preset config structure for a given preset guid. Before + * using this function the client must enumerate the preset guids available for + * a given codec. The preset config structure can be modified by the client depending + * upon its use case and can be then used to initialize the encoder using + * ::NvEncInitializeEncoder() API. The client can use this function only if it + * wants to modify the NvEncodeAPI preset configuration, otherwise it can + * directly use the preset guid. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] encodeGUID + * Encode GUID, corresponding to which the list of supported presets is to be + * retrieved. + * \param [in] presetGUID + * Preset GUID, corresponding to which the Encoding configurations is to be + * retrieved. + * \param [out] presetConfig + * The requested Preset Encoder Attribute set. Refer ::_NV_ENC_CONFIG for +* more details. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodePresetConfig (void* encoder, GUID encodeGUID, GUID presetGUID, NV_ENC_PRESET_CONFIG* presetConfig); + +// NvEncInitializeEncoder +/** + * \brief Initialize the encoder. + * + * This API must be used to initialize the encoder. The initialization parameter + * is passed using \p *createEncodeParams The client must send the following + * fields of the _NV_ENC_INITIALIZE_PARAMS structure with a valid value. + * - NV_ENC_INITIALIZE_PARAMS::encodeGUID + * - NV_ENC_INITIALIZE_PARAMS::encodeWidth + * - NV_ENC_INITIALIZE_PARAMS::encodeHeight + * + * The client can pass a preset guid directly to the NvEncodeAPI interface using + * NV_ENC_INITIALIZE_PARAMS::presetGUID field. If the client doesn't pass + * NV_ENC_INITIALIZE_PARAMS::encodeConfig structure, the codec specific parameters + * will be selected based on the preset guid. The preset guid must have been + * validated by the client using ::NvEncGetEncodePresetGUIDs() API. + * If the client passes a custom ::_NV_ENC_CONFIG structure through + * NV_ENC_INITIALIZE_PARAMS::encodeConfig , it will override the codec specific parameters + * based on the preset guid. It is recommended that even if the client passes a custom config, + * it should also send a preset guid. In this case, the preset guid passed by the client + * will not override any of the custom config parameters programmed by the client, + * it is only used as a hint by the NvEncodeAPI interface to determine certain encoder parameters + * which are not exposed to the client. + * + * There are two modes of operation for the encoder namely: + * - Asynchronous mode + * - Synchronous mode + * + * The client can select asynchronous or synchronous mode by setting the \p + * enableEncodeAsync field in ::_NV_ENC_INITIALIZE_PARAMS to 1 or 0 respectively. + *\par Asynchronous mode of operation: + * The Asynchronous mode can be enabled by setting NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 1. + * The client operating in asynchronous mode must allocate completion event object + * for each output buffer and pass the completion event object in the + * ::NvEncEncodePicture() API. The client can create another thread and wait on + * the event object to be signalled by NvEncodeAPI interface on completion of the + * encoding process for the output frame. This should unblock the main thread from + * submitting work to the encoder. When the event is signalled the client can call + * NvEncodeAPI interfaces to copy the bitstream data using ::NvEncLockBitstream() + * API. This is the preferred mode of operation. + * + * NOTE: Asynchronous mode is not supported on Linux. + * + *\par Synchronous mode of operation: + * The client can select synchronous mode by setting NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 0. + * The client working in synchronous mode can work in a single threaded or multi + * threaded mode. The client need not allocate any event objects. The client can + * only lock the bitstream data after NvEncodeAPI interface has returned + * ::NV_ENC_SUCCESS from encode picture. The NvEncodeAPI interface can return + * ::NV_ENC_ERR_NEED_MORE_INPUT error code from ::NvEncEncodePicture() API. The + * client must not lock the output buffer in such case but should send the next + * frame for encoding. The client must keep on calling ::NvEncEncodePicture() API + * until it returns ::NV_ENC_SUCCESS. \n + * The client must always lock the bitstream data in order in which it has submitted. + * This is true for both asynchronous and synchronous mode. + * + *\par Picture type decision: + * If the client is taking the picture type decision and it must disable the picture + * type decision module in NvEncodeAPI by setting NV_ENC_INITIALIZE_PARAMS::enablePTD + * to 0. In this case the client is required to send the picture in encoding + * order to NvEncodeAPI by doing the re-ordering for B frames. \n + * If the client doesn't want to take the picture type decision it can enable + * picture type decision module in the NvEncodeAPI interface by setting + * NV_ENC_INITIALIZE_PARAMS::enablePTD to 1 and send the input pictures in display + * order. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] createEncodeParams + * Refer ::_NV_ENC_INITIALIZE_PARAMS for details. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncInitializeEncoder (void* encoder, NV_ENC_INITIALIZE_PARAMS* createEncodeParams); + + +// NvEncCreateInputBuffer +/** + * \brief Allocates Input buffer. + * + * This function is used to allocate an input buffer. The client must enumerate + * the input buffer format before allocating the input buffer resources. The + * NV_ENC_INPUT_PTR returned by the NvEncodeAPI interface in the + * NV_ENC_CREATE_INPUT_BUFFER::inputBuffer field can be directly used in + * ::NvEncEncodePicture() API. The number of input buffers to be allocated by the + * client must be at least 4 more than the number of B frames being used for encoding. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] createInputBufferParams + * Pointer to the ::NV_ENC_CREATE_INPUT_BUFFER structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncCreateInputBuffer (void* encoder, NV_ENC_CREATE_INPUT_BUFFER* createInputBufferParams); + + +// NvEncDestroyInputBuffer +/** + * \brief Release an input buffers. + * + * This function is used to free an input buffer. If the client has allocated + * any input buffer using ::NvEncCreateInputBuffer() API, it must free those + * input buffers by calling this function. The client must release the input + * buffers before destroying the encoder using ::NvEncDestroyEncoder() API. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] inputBuffer + * Pointer to the input buffer to be released. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncDestroyInputBuffer (void* encoder, NV_ENC_INPUT_PTR inputBuffer); + + +// NvEncCreateBitstreamBuffer +/** + * \brief Allocates an output bitstream buffer + * + * This function is used to allocate an output bitstream buffer and returns a + * NV_ENC_OUTPUT_PTR to bitstream buffer to the client in the + * NV_ENC_CREATE_BITSTREAM_BUFFER::bitstreamBuffer field. + * The client can only call this function after the encoder session has been + * initialized using ::NvEncInitializeEncoder() API. The minimum number of output + * buffers allocated by the client must be at least 4 more than the number of B + * B frames being used for encoding. The client can only access the output + * bitsteam data by locking the \p bitstreamBuffer using the ::NvEncLockBitstream() + * function. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] createBitstreamBufferParams + * Pointer ::NV_ENC_CREATE_BITSTREAM_BUFFER for details. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncCreateBitstreamBuffer (void* encoder, NV_ENC_CREATE_BITSTREAM_BUFFER* createBitstreamBufferParams); + + +// NvEncDestroyBitstreamBuffer +/** + * \brief Release a bitstream buffer. + * + * This function is used to release the output bitstream buffer allocated using + * the ::NvEncCreateBitstreamBuffer() function. The client must release the output + * bitstreamBuffer using this function before destroying the encoder session. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] bitstreamBuffer + * Pointer to the bitstream buffer being released. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncDestroyBitstreamBuffer (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer); + +// NvEncEncodePicture +/** + * \brief Submit an input picture for encoding. + * + * This function is used to submit an input picture buffer for encoding. The + * encoding parameters are passed using \p *encodePicParams which is a pointer + * to the ::_NV_ENC_PIC_PARAMS structure. + * + * If the client has set NV_ENC_INITIALIZE_PARAMS::enablePTD to 0, then it must + * send a valid value for the following fields. + * - NV_ENC_PIC_PARAMS::pictureType + * - NV_ENC_PIC_PARAMS_H264::displayPOCSyntax (H264 only) + * - NV_ENC_PIC_PARAMS_H264::frameNumSyntax(H264 only) + * - NV_ENC_PIC_PARAMS_H264::refPicFlag(H264 only) + * + * + *\par Asynchronous Encoding + * If the client has enabled asynchronous mode of encoding by setting + * NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 1 in the ::NvEncInitializeEncoder() + * API ,then the client must send a valid NV_ENC_PIC_PARAMS::completionEvent. + * Incase of asynchronous mode of operation, client can queue the ::NvEncEncodePicture() + * API commands from the main thread and then queue output buffers to be processed + * to a secondary worker thread. Before the locking the output buffers in the + * secondary thread , the client must wait on NV_ENC_PIC_PARAMS::completionEvent + * it has queued in ::NvEncEncodePicture() API call. The client must always process + * completion event and the output buffer in the same order in which they have been + * submitted for encoding. The NvEncodeAPI interface is responsible for any + * re-ordering required for B frames and will always ensure that encoded bitstream + * data is written in the same order in which output buffer is submitted. + *\code + The below example shows how asynchronous encoding in case of 1 B frames + ------------------------------------------------------------------------ + Suppose the client allocated 4 input buffers(I1,I2..), 4 output buffers(O1,O2..) + and 4 completion events(E1, E2, ...). The NvEncodeAPI interface will need to + keep a copy of the input buffers for re-ordering and it allocates following + internal buffers (NvI1, NvI2...). These internal buffers are managed by NvEncodeAPI + and the client is not responsible for the allocating or freeing the memory of + the internal buffers. + + a) The client main thread will queue the following encode frame calls. + Note the picture type is unknown to the client, the decision is being taken by + NvEncodeAPI interface. The client should pass ::_NV_ENC_PIC_PARAMS parameter + consisting of allocated input buffer, output buffer and output events in successive + ::NvEncEncodePicture() API calls along with other required encode picture params. + For example: + 1st EncodePicture parameters - (I1, O1, E1) + 2nd EncodePicture parameters - (I2, O2, E2) + 3rd EncodePicture parameters - (I3, O3, E3) + + b) NvEncodeAPI SW will receive the following encode Commands from the client. + The left side shows input from client in the form (Input buffer, Output Buffer, + Output Event). The right hand side shows a possible picture type decision take by + the NvEncodeAPI interface. + (I1, O1, E1) ---P1 Frame + (I2, O2, E2) ---B2 Frame + (I3, O3, E3) ---P3 Frame + + c) NvEncodeAPI interface will make a copy of the input buffers to its internal + buffersfor re-ordering. These copies are done as part of nvEncEncodePicture + function call from the client and NvEncodeAPI interface is responsible for + synchronization of copy operation with the actual encoding operation. + I1 --> NvI1 + I2 --> NvI2 + I3 --> NvI3 + + d) After returning from ::NvEncEncodePicture() call , the client must queue the output + bitstream processing work to the secondary thread. The output bitstream processing + for asynchronous mode consist of first waiting on completion event(E1, E2..) + and then locking the output bitstream buffer(O1, O2..) for reading the encoded + data. The work queued to the secondary thread by the client is in the following order + (I1, O1, E1) + (I2, O2, E2) + (I3, O3, E3) + Note they are in the same order in which client calls ::NvEncEncodePicture() API + in \p step a). + + e) NvEncodeAPI interface will do the re-ordering such that Encoder HW will receive + the following encode commands: + (NvI1, O1, E1) ---P1 Frame + (NvI3, O2, E2) ---P3 Frame + (NvI2, O3, E3) ---B2 frame + + f) After the encoding operations are completed, the events will be signalled + by NvEncodeAPI interface in the following order : + (O1, E1) ---P1 Frame ,output bitstream copied to O1 and event E1 signalled. + (O2, E2) ---P3 Frame ,output bitstream copied to O2 and event E2 signalled. + (O3, E3) ---B2 Frame ,output bitstream copied to O3 and event E3 signalled. + + g) The client must lock the bitstream data using ::NvEncLockBitstream() API in + the order O1,O2,O3 to read the encoded data, after waiting for the events + to be signalled in the same order i.e E1, E2 and E3.The output processing is + done in the secondary thread in the following order: + Waits on E1, copies encoded bitstream from O1 + Waits on E2, copies encoded bitstream from O2 + Waits on E3, copies encoded bitstream from O3 + + -Note the client will receive the events signalling and output buffer in the + same order in which they have submitted for encoding. + -Note the LockBitstream will have picture type field which will notify the + output picture type to the clients. + -Note the input, output buffer and the output completion event are free to be + reused once NvEncodeAPI interfaced has signalled the event and the client has + copied the data from the output buffer. + + * \endcode + * + *\par Synchronous Encoding + * The client can enable synchronous mode of encoding by setting + * NV_ENC_INITIALIZE_PARAMS::enableEncodeAsync to 0 in ::NvEncInitializeEncoder() API. + * The NvEncodeAPI interface may return ::NV_ENC_ERR_NEED_MORE_INPUT error code for + * some ::NvEncEncodePicture() API calls when NV_ENC_INITIALIZE_PARAMS::enablePTD + * is set to 1, but the client must not treat it as a fatal error. The NvEncodeAPI + * interface might not be able to submit an input picture buffer for encoding + * immediately due to re-ordering for B frames. The NvEncodeAPI interface cannot + * submit the input picture which is decided to be encoded as B frame as it waits + * for backward reference from temporally subsequent frames. This input picture + * is buffered internally and waits for more input picture to arrive. The client + * must not call ::NvEncLockBitstream() API on the output buffers whose + * ::NvEncEncodePicture() API returns ::NV_ENC_ERR_NEED_MORE_INPUT. The client must + * wait for the NvEncodeAPI interface to return ::NV_ENC_SUCCESS before locking the + * output bitstreams to read the encoded bitstream data. The following example + * explains the scenario with synchronous encoding with 2 B frames. + *\code + The below example shows how synchronous encoding works in case of 1 B frames + ----------------------------------------------------------------------------- + Suppose the client allocated 4 input buffers(I1,I2..), 4 output buffers(O1,O2..) + and 4 completion events(E1, E2, ...). The NvEncodeAPI interface will need to + keep a copy of the input buffers for re-ordering and it allocates following + internal buffers (NvI1, NvI2...). These internal buffers are managed by NvEncodeAPI + and the client is not responsible for the allocating or freeing the memory of + the internal buffers. + + The client calls ::NvEncEncodePicture() API with input buffer I1 and output buffer O1. + The NvEncodeAPI decides to encode I1 as P frame and submits it to encoder + HW and returns ::NV_ENC_SUCCESS. + The client can now read the encoded data by locking the output O1 by calling + NvEncLockBitstream API. + + The client calls ::NvEncEncodePicture() API with input buffer I2 and output buffer O2. + The NvEncodeAPI decides to encode I2 as B frame and buffers I2 by copying it + to internal buffer and returns ::NV_ENC_ERR_NEED_MORE_INPUT. + The error is not fatal and it notifies client that it cannot read the encoded + data by locking the output O2 by calling ::NvEncLockBitstream() API without submitting + more work to the NvEncodeAPI interface. + + The client calls ::NvEncEncodePicture() with input buffer I3 and output buffer O3. + The NvEncodeAPI decides to encode I3 as P frame and it first submits I3 for + encoding which will be used as backward reference frame for I2. + The NvEncodeAPI then submits I2 for encoding and returns ::NV_ENC_SUCESS. Both + the submission are part of the same ::NvEncEncodePicture() function call. + The client can now read the encoded data for both the frames by locking the output + O2 followed by O3 ,by calling ::NvEncLockBitstream() API. + + The client must always lock the output in the same order in which it has submitted + to receive the encoded bitstream in correct encoding order. + + * \endcode + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] encodePicParams + * Pointer to the ::_NV_ENC_PIC_PARAMS structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_ENCODER_BUSY \n + * ::NV_ENC_ERR_NEED_MORE_INPUT \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncEncodePicture (void* encoder, NV_ENC_PIC_PARAMS* encodePicParams); + + +// NvEncLockBitstream +/** + * \brief Lock output bitstream buffer + * + * This function is used to lock the bitstream buffer to read the encoded data. + * The client can only access the encoded data by calling this function. + * The pointer to client accessible encoded data is returned in the + * NV_ENC_LOCK_BITSTREAM::bitstreamBufferPtr field. The size of the encoded data + * in the output buffer is returned in the NV_ENC_LOCK_BITSTREAM::bitstreamSizeInBytes + * The NvEncodeAPI interface also returns the output picture type and picture structure + * of the encoded frame in NV_ENC_LOCK_BITSTREAM::pictureType and + * NV_ENC_LOCK_BITSTREAM::pictureStruct fields respectively. If the client has + * set NV_ENC_LOCK_BITSTREAM::doNotWait to 1, the function might return + * ::NV_ENC_ERR_LOCK_BUSY if client is operating in synchronous mode. This is not + * a fatal failure if NV_ENC_LOCK_BITSTREAM::doNotWait is set to 1. In the above case the client can + * retry the function after few milliseconds. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] lockBitstreamBufferParams + * Pointer to the ::_NV_ENC_LOCK_BITSTREAM structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_LOCK_BUSY \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncLockBitstream (void* encoder, NV_ENC_LOCK_BITSTREAM* lockBitstreamBufferParams); + + +// NvEncUnlockBitstream +/** + * \brief Unlock the output bitstream buffer + * + * This function is used to unlock the output bitstream buffer after the client + * has read the encoded data from output buffer. The client must call this function + * to unlock the output buffer which it has previously locked using ::NvEncLockBitstream() + * function. Using a locked bitstream buffer in ::NvEncEncodePicture() API will cause + * the function to fail. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] bitstreamBuffer + * bitstream buffer pointer being unlocked + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncUnlockBitstream (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer); + + +// NvLockInputBuffer +/** + * \brief Locks an input buffer + * + * This function is used to lock the input buffer to load the uncompressed YUV + * pixel data into input buffer memory. The client must pass the NV_ENC_INPUT_PTR + * it had previously allocated using ::NvEncCreateInputBuffer()in the + * NV_ENC_LOCK_INPUT_BUFFER::inputBuffer field. + * The NvEncodeAPI interface returns pointer to client accessible input buffer + * memory in NV_ENC_LOCK_INPUT_BUFFER::bufferDataPtr field. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] lockInputBufferParams + * Pointer to the ::_NV_ENC_LOCK_INPUT_BUFFER structure + * + * \return + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_LOCK_BUSY \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncLockInputBuffer (void* encoder, NV_ENC_LOCK_INPUT_BUFFER* lockInputBufferParams); + + +// NvUnlockInputBuffer +/** + * \brief Unlocks the input buffer + * + * This function is used to unlock the input buffer memory previously locked for + * uploading YUV pixel data. The input buffer must be unlocked before being used + * again for encoding, otherwise NvEncodeAPI will fail the ::NvEncEncodePicture() + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] inputBuffer + * Pointer to the input buffer that is being unlocked. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + * + */ +NVENCSTATUS NVENCAPI NvEncUnlockInputBuffer (void* encoder, NV_ENC_INPUT_PTR inputBuffer); + + +// NvEncGetEncodeStats +/** + * \brief Get encoding statistics. + * + * This function is used to retrieve the encoding statistics. + * This API is not supported when encode device type is CUDA. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] encodeStats + * Pointer to the ::_NV_ENC_STAT structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetEncodeStats (void* encoder, NV_ENC_STAT* encodeStats); + + +// NvEncGetSequenceParams +/** + * \brief Get encoded sequence and picture header. + * + * This function can be used to retrieve the sequence and picture header out of + * band. The client must call this function only after the encoder has been + * initialized using ::NvEncInitializeEncoder() function. The client must + * allocate the memory where the NvEncodeAPI interface can copy the bitstream + * header and pass the pointer to the memory in NV_ENC_SEQUENCE_PARAM_PAYLOAD::spsppsBuffer. + * The size of buffer is passed in the field NV_ENC_SEQUENCE_PARAM_PAYLOAD::inBufferSize. + * The NvEncodeAPI interface will copy the bitstream header payload and returns + * the actual size of the bitstream header in the field + * NV_ENC_SEQUENCE_PARAM_PAYLOAD::outSPSPPSPayloadSize. + * The client must call ::NvEncGetSequenceParams() function from the same thread which is + * being used to call ::NvEncEncodePicture() function. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] sequenceParamPayload + * Pointer to the ::_NV_ENC_SEQUENCE_PARAM_PAYLOAD structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncGetSequenceParams (void* encoder, NV_ENC_SEQUENCE_PARAM_PAYLOAD* sequenceParamPayload); + + +// NvEncRegisterAsyncEvent +/** + * \brief Register event for notification to encoding completion. + * + * This function is used to register the completion event with NvEncodeAPI + * interface. The event is required when the client has configured the encoder to + * work in asynchronous mode. In this mode the client needs to send a completion + * event with every output buffer. The NvEncodeAPI interface will signal the + * completion of the encoding process using this event. Only after the event is + * signalled the client can get the encoded data using ::NvEncLockBitstream() function. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] eventParams + * Pointer to the ::_NV_ENC_EVENT_PARAMS structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncRegisterAsyncEvent (void* encoder, NV_ENC_EVENT_PARAMS* eventParams); + + +// NvEncUnregisterAsyncEvent +/** + * \brief Unregister completion event. + * + * This function is used to unregister completion event which has been previously + * registered using ::NvEncRegisterAsyncEvent() function. The client must unregister + * all events before destroying the encoder using ::NvEncDestroyEncoder() function. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] eventParams + * Pointer to the ::_NV_ENC_EVENT_PARAMS structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncUnregisterAsyncEvent (void* encoder, NV_ENC_EVENT_PARAMS* eventParams); + + +// NvEncMapInputResource +/** + * \brief Map an externally created input resource pointer for encoding. + * + * Maps an externally allocated input resource [using and returns a NV_ENC_INPUT_PTR + * which can be used for encoding in the ::NvEncEncodePicture() function. The + * mapped resource is returned in the field NV_ENC_MAP_INPUT_RESOURCE::outputResourcePtr. + * The NvEncodeAPI interface also returns the buffer format of the mapped resource + * in the field NV_ENC_MAP_INPUT_RESOURCE::outbufferFmt. + * This function provides synchronization guarantee that any direct3d or cuda + * work submitted on the input buffer is completed before the buffer is used for encoding. + * The client should not access any input buffer while they are mapped by the encoder. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] mapInputResParams + * Pointer to the ::_NV_ENC_MAP_INPUT_RESOURCE structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_RESOURCE_NOT_REGISTERED \n + * ::NV_ENC_ERR_MAP_FAILED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncMapInputResource (void* encoder, NV_ENC_MAP_INPUT_RESOURCE* mapInputResParams); + + +// NvEncUnmapInputResource +/** + * \brief UnMaps a NV_ENC_INPUT_PTR which was mapped for encoding + * + * + * UnMaps an input buffer which was previously mapped using ::NvEncMapInputResource() + * API. The mapping created using ::NvEncMapInputResource() should be invalidated + * using this API before the external resource is destroyed by the client. The client + * must unmap the buffer after ::NvEncLockBitstream() API returns succuessfully for encode + * work submitted using the mapped input buffer. + * + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] mappedInputBuffer + * Pointer to the NV_ENC_INPUT_PTR + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_RESOURCE_NOT_REGISTERED \n + * ::NV_ENC_ERR_RESOURCE_NOT_MAPPED \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncUnmapInputResource (void* encoder, NV_ENC_INPUT_PTR mappedInputBuffer); + +// NvEncDestroyEncoder +/** + * \brief Destroy Encoding Session + * + * Destroys the encoder session previously created using ::NvEncOpenEncodeSession() + * function. The client must flush the encoder before freeing any resources. In order + * to flush the encoder the client must pass a NULL encode picture packet and either + * wait for the ::NvEncEncodePicture() function to return in synchronous mode or wait + * for the flush event to be signaled by the encoder in asynchronous mode. + * The client must free all the input and output resources created using the + * NvEncodeAPI interface before destroying the encoder. If the client is operating + * in asynchronous mode, it must also unregister the completion events previously + * registered. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncDestroyEncoder (void* encoder); + +// NvEncInvalidateRefFrames +/** + * \brief Invalidate reference frames + * + * Invalidates reference frame based on the time stamp provided by the client. + * The encoder marks any reference frames or any frames which have been reconstructed + * using the corrupt frame as invalid for motion estimation and uses older reference + * frames for motion estimation. The encoded forces the current frame to be encoded + * as an intra frame if no reference frames are left after invalidation process. + * This is useful for low latency application for error resiliency. The client + * is recommended to set NV_ENC_CONFIG_H264::maxNumRefFrames to a large value so + * that encoder can keep a backup of older reference frames in the DPB and can use them + * for motion estimation when the newer reference frames have been invalidated. + * This API can be called multiple times. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] invalidRefFrameTimeStamp + * Timestamp of the invalid reference frames which needs to be invalidated. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncInvalidateRefFrames(void* encoder, uint64_t invalidRefFrameTimeStamp); + +// NvEncOpenEncodeSessionEx +/** + * \brief Opens an encoding session. + * + * Opens an encoding session and returns a pointer to the encoder interface in + * the \p **encoder parameter. The client should start encoding process by calling + * this API first. + * The client must pass a pointer to IDirect3DDevice9/CUDA interface in the \p *device parameter. + * If the creation of encoder session fails, the client must call ::NvEncDestroyEncoder API + * before exiting. + * + * \param [in] openSessionExParams + * Pointer to a ::NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS structure. + * \param [out] encoder + * Encode Session pointer to the NvEncodeAPI interface. + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_NO_ENCODE_DEVICE \n + * ::NV_ENC_ERR_UNSUPPORTED_DEVICE \n + * ::NV_ENC_ERR_INVALID_DEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncOpenEncodeSessionEx (NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS *openSessionExParams, void** encoder); + +// NvEncRegisterResource +/** + * \brief Registers a resource with the Nvidia Video Encoder Interface. + * + * Registers a resource with the Nvidia Video Encoder Interface for book keeping. + * The client is expected to pass the registered resource handle as well, while calling ::NvEncMapInputResource API. + * This API is not implemented for the DirectX Interface. + * DirectX based clients need not change their implementation. + * + * \param [in] encoder + * Pointer to the NVEncodeAPI interface. + * + * \param [in] registerResParams + * Pointer to a ::_NV_ENC_REGISTER_RESOURCE structure + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_RESOURCE_REGISTER_FAILED \n + * ::NV_ENC_ERR_GENERIC \n + * ::NV_ENC_ERR_UNIMPLEMENTED \n + * + */ +NVENCSTATUS NVENCAPI NvEncRegisterResource (void* encoder, NV_ENC_REGISTER_RESOURCE* registerResParams); + +// NvEncUnregisterResource +/** + * \brief Unregisters a resource previously registered with the Nvidia Video Encoder Interface. + * + * Unregisters a resource previously registered with the Nvidia Video Encoder Interface. + * The client is expected to unregister any resource that it has registered with the + * Nvidia Video Encoder Interface before destroying the resource. + * This API is not implemented for the DirectX Interface. + * DirectX based clients need not change their implementation. + * + * \param [in] encoder + * Pointer to the NVEncodeAPI interface. + * + * \param [in] registeredResource + * The registered resource pointer that was returned in ::NvEncRegisterResource. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_RESOURCE_NOT_REGISTERED \n + * ::NV_ENC_ERR_GENERIC \n + * ::NV_ENC_ERR_UNIMPLEMENTED \n + * + */ +NVENCSTATUS NVENCAPI NvEncUnregisterResource (void* encoder, NV_ENC_REGISTERED_PTR registeredResource); + +// NvEncReconfigureEncoder +/** + * \brief Reconfigure an existing encoding session. + * + * Reconfigure an existing encoding session. + * The client should call this API to change/reconfigure the parameter passed during + * NvEncInitializeEncoder API call. + * Currently Reconfiguration of following are not supported. + * Change in GOP structure. + * Change in sync-Async mode. + * Change in MaxWidth & MaxHeight. + * Change in PTDmode. + * + * Resolution change is possible only if maxEncodeWidth & maxEncodeHeight of NV_ENC_INITIALIZE_PARAMS + * is set while creating encoder session. + * + * \param [in] encoder + * Pointer to the NVEncodeAPI interface. + * + * \param [in] reInitEncodeParams + * Pointer to a ::NV_ENC_RECONFIGURE_PARAMS structure. + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_NO_ENCODE_DEVICE \n + * ::NV_ENC_ERR_UNSUPPORTED_DEVICE \n + * ::NV_ENC_ERR_INVALID_DEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_GENERIC \n + * + */ +NVENCSTATUS NVENCAPI NvEncReconfigureEncoder (void *encoder, NV_ENC_RECONFIGURE_PARAMS* reInitEncodeParams); + + + +// NvEncCreateMVBuffer +/** + * \brief Allocates output MV buffer for ME only mode. + * + * This function is used to allocate an output MV buffer. The size of the mvBuffer is + * dependent on the frame height and width of the last ::NvEncCreateInputBuffer() call. + * The NV_ENC_OUTPUT_PTR returned by the NvEncodeAPI interface in the + * ::NV_ENC_CREATE_MV_BUFFER::mvBuffer field should be used in + * ::NvEncRunMotionEstimationOnly() API. + * Client must lock ::NV_ENC_CREATE_MV_BUFFER::mvBuffer using ::NvEncLockBitstream() API to get the motion vector data. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in,out] createMVBufferParams + * Pointer to the ::NV_ENC_CREATE_MV_BUFFER structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_GENERIC \n + */ +NVENCSTATUS NVENCAPI NvEncCreateMVBuffer (void* encoder, NV_ENC_CREATE_MV_BUFFER* createMVBufferParams); + + +// NvEncDestroyMVBuffer +/** + * \brief Release an output MV buffer for ME only mode. + * + * This function is used to release the output MV buffer allocated using + * the ::NvEncCreateMVBuffer() function. The client must release the output + * mvBuffer using this function before destroying the encoder session. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] mvBuffer + * Pointer to the mvBuffer being released. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + */ +NVENCSTATUS NVENCAPI NvEncDestroyMVBuffer (void* encoder, NV_ENC_OUTPUT_PTR mvBuffer); + + +// NvEncRunMotionEstimationOnly +/** + * \brief Submit an input picture and reference frame for motion estimation in ME only mode. + * + * This function is used to submit the input frame and reference frame for motion + * estimation. The ME parameters are passed using *meOnlyParams which is a pointer + * to ::_NV_ENC_MEONLY_PARAMS structure. + * Client must lock ::NV_ENC_CREATE_MV_BUFFER::mvBuffer using ::NvEncLockBitstream() API to get the motion vector data. + * to get motion vector data. + * + * \param [in] encoder + * Pointer to the NvEncodeAPI interface. + * \param [in] meOnlyParams + * Pointer to the ::_NV_ENC_MEONLY_PARAMS structure. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + * ::NV_ENC_ERR_INVALID_ENCODERDEVICE \n + * ::NV_ENC_ERR_DEVICE_NOT_EXIST \n + * ::NV_ENC_ERR_UNSUPPORTED_PARAM \n + * ::NV_ENC_ERR_OUT_OF_MEMORY \n + * ::NV_ENC_ERR_INVALID_PARAM \n + * ::NV_ENC_ERR_INVALID_VERSION \n + * ::NV_ENC_ERR_NEED_MORE_INPUT \n + * ::NV_ENC_ERR_ENCODER_NOT_INITIALIZED \n + * ::NV_ENC_ERR_GENERIC \n + */ +NVENCSTATUS NVENCAPI NvEncRunMotionEstimationOnly (void* encoder, NV_ENC_MEONLY_PARAMS* meOnlyParams); + +// NvEncodeAPIGetMaxSupportedVersion +/** + * \brief Get the largest NvEncodeAPI version supported by the driver. + * + * This function can be used by clients to determine if the driver supports + * the NvEncodeAPI header the application was compiled with. + * + * \param [out] version + * Pointer to the requested value. The 4 least significant bits in the returned + * indicate the minor version and the rest of the bits indicate the major + * version of the largest supported version. + * + * \return + * ::NV_ENC_SUCCESS \n + * ::NV_ENC_ERR_INVALID_PTR \n + */ +NVENCSTATUS NVENCAPI NvEncodeAPIGetMaxSupportedVersion (uint32_t* version); + + +/// \cond API PFN +/* + * Defines API function pointers + */ +typedef NVENCSTATUS (NVENCAPI* PNVENCOPENENCODESESSION) (void* device, uint32_t deviceType, void** encoder); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEGUIDCOUNT) (void* encoder, uint32_t* encodeGUIDCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEGUIDS) (void* encoder, GUID* GUIDs, uint32_t guidArraySize, uint32_t* GUIDCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPROFILEGUIDCOUNT) (void* encoder, GUID encodeGUID, uint32_t* encodeProfileGUIDCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPROFILEGUIDS) (void* encoder, GUID encodeGUID, GUID* profileGUIDs, uint32_t guidArraySize, uint32_t* GUIDCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETINPUTFORMATCOUNT) (void* encoder, GUID encodeGUID, uint32_t* inputFmtCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETINPUTFORMATS) (void* encoder, GUID encodeGUID, NV_ENC_BUFFER_FORMAT* inputFmts, uint32_t inputFmtArraySize, uint32_t* inputFmtCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODECAPS) (void* encoder, GUID encodeGUID, NV_ENC_CAPS_PARAM* capsParam, int* capsVal); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETCOUNT) (void* encoder, GUID encodeGUID, uint32_t* encodePresetGUIDCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETGUIDS) (void* encoder, GUID encodeGUID, GUID* presetGUIDs, uint32_t guidArraySize, uint32_t* encodePresetGUIDCount); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODEPRESETCONFIG) (void* encoder, GUID encodeGUID, GUID presetGUID, NV_ENC_PRESET_CONFIG* presetConfig); +typedef NVENCSTATUS (NVENCAPI* PNVENCINITIALIZEENCODER) (void* encoder, NV_ENC_INITIALIZE_PARAMS* createEncodeParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCCREATEINPUTBUFFER) (void* encoder, NV_ENC_CREATE_INPUT_BUFFER* createInputBufferParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYINPUTBUFFER) (void* encoder, NV_ENC_INPUT_PTR inputBuffer); +typedef NVENCSTATUS (NVENCAPI* PNVENCCREATEBITSTREAMBUFFER) (void* encoder, NV_ENC_CREATE_BITSTREAM_BUFFER* createBitstreamBufferParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYBITSTREAMBUFFER) (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer); +typedef NVENCSTATUS (NVENCAPI* PNVENCENCODEPICTURE) (void* encoder, NV_ENC_PIC_PARAMS* encodePicParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCLOCKBITSTREAM) (void* encoder, NV_ENC_LOCK_BITSTREAM* lockBitstreamBufferParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCUNLOCKBITSTREAM) (void* encoder, NV_ENC_OUTPUT_PTR bitstreamBuffer); +typedef NVENCSTATUS (NVENCAPI* PNVENCLOCKINPUTBUFFER) (void* encoder, NV_ENC_LOCK_INPUT_BUFFER* lockInputBufferParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCUNLOCKINPUTBUFFER) (void* encoder, NV_ENC_INPUT_PTR inputBuffer); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETENCODESTATS) (void* encoder, NV_ENC_STAT* encodeStats); +typedef NVENCSTATUS (NVENCAPI* PNVENCGETSEQUENCEPARAMS) (void* encoder, NV_ENC_SEQUENCE_PARAM_PAYLOAD* sequenceParamPayload); +typedef NVENCSTATUS (NVENCAPI* PNVENCREGISTERASYNCEVENT) (void* encoder, NV_ENC_EVENT_PARAMS* eventParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCUNREGISTERASYNCEVENT) (void* encoder, NV_ENC_EVENT_PARAMS* eventParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCMAPINPUTRESOURCE) (void* encoder, NV_ENC_MAP_INPUT_RESOURCE* mapInputResParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCUNMAPINPUTRESOURCE) (void* encoder, NV_ENC_INPUT_PTR mappedInputBuffer); +typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYENCODER) (void* encoder); +typedef NVENCSTATUS (NVENCAPI* PNVENCINVALIDATEREFFRAMES) (void* encoder, uint64_t invalidRefFrameTimeStamp); +typedef NVENCSTATUS (NVENCAPI* PNVENCOPENENCODESESSIONEX) (NV_ENC_OPEN_ENCODE_SESSION_EX_PARAMS *openSessionExParams, void** encoder); +typedef NVENCSTATUS (NVENCAPI* PNVENCREGISTERRESOURCE) (void* encoder, NV_ENC_REGISTER_RESOURCE* registerResParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCUNREGISTERRESOURCE) (void* encoder, NV_ENC_REGISTERED_PTR registeredRes); +typedef NVENCSTATUS (NVENCAPI* PNVENCRECONFIGUREENCODER) (void* encoder, NV_ENC_RECONFIGURE_PARAMS* reInitEncodeParams); + +typedef NVENCSTATUS (NVENCAPI* PNVENCCREATEMVBUFFER) (void* encoder, NV_ENC_CREATE_MV_BUFFER* createMVBufferParams); +typedef NVENCSTATUS (NVENCAPI* PNVENCDESTROYMVBUFFER) (void* encoder, NV_ENC_OUTPUT_PTR mvBuffer); +typedef NVENCSTATUS (NVENCAPI* PNVENCRUNMOTIONESTIMATIONONLY) (void* encoder, NV_ENC_MEONLY_PARAMS* meOnlyParams); + + +/// \endcond + + +/** @} */ /* END ENCODE_FUNC */ + +/** + * \ingroup ENCODER_STRUCTURE + * NV_ENCODE_API_FUNCTION_LIST + */ +typedef struct _NV_ENCODE_API_FUNCTION_LIST +{ + uint32_t version; /**< [in]: Client should pass NV_ENCODE_API_FUNCTION_LIST_VER. */ + uint32_t reserved; /**< [in]: Reserved and should be set to 0. */ + PNVENCOPENENCODESESSION nvEncOpenEncodeSession; /**< [out]: Client should access ::NvEncOpenEncodeSession() API through this pointer. */ + PNVENCGETENCODEGUIDCOUNT nvEncGetEncodeGUIDCount; /**< [out]: Client should access ::NvEncGetEncodeGUIDCount() API through this pointer. */ + PNVENCGETENCODEPRESETCOUNT nvEncGetEncodeProfileGUIDCount; /**< [out]: Client should access ::NvEncGetEncodeProfileGUIDCount() API through this pointer.*/ + PNVENCGETENCODEPRESETGUIDS nvEncGetEncodeProfileGUIDs; /**< [out]: Client should access ::NvEncGetEncodeProfileGUIDs() API through this pointer. */ + PNVENCGETENCODEGUIDS nvEncGetEncodeGUIDs; /**< [out]: Client should access ::NvEncGetEncodeGUIDs() API through this pointer. */ + PNVENCGETINPUTFORMATCOUNT nvEncGetInputFormatCount; /**< [out]: Client should access ::NvEncGetInputFormatCount() API through this pointer. */ + PNVENCGETINPUTFORMATS nvEncGetInputFormats; /**< [out]: Client should access ::NvEncGetInputFormats() API through this pointer. */ + PNVENCGETENCODECAPS nvEncGetEncodeCaps; /**< [out]: Client should access ::NvEncGetEncodeCaps() API through this pointer. */ + PNVENCGETENCODEPRESETCOUNT nvEncGetEncodePresetCount; /**< [out]: Client should access ::NvEncGetEncodePresetCount() API through this pointer. */ + PNVENCGETENCODEPRESETGUIDS nvEncGetEncodePresetGUIDs; /**< [out]: Client should access ::NvEncGetEncodePresetGUIDs() API through this pointer. */ + PNVENCGETENCODEPRESETCONFIG nvEncGetEncodePresetConfig; /**< [out]: Client should access ::NvEncGetEncodePresetConfig() API through this pointer. */ + PNVENCINITIALIZEENCODER nvEncInitializeEncoder; /**< [out]: Client should access ::NvEncInitializeEncoder() API through this pointer. */ + PNVENCCREATEINPUTBUFFER nvEncCreateInputBuffer; /**< [out]: Client should access ::NvEncCreateInputBuffer() API through this pointer. */ + PNVENCDESTROYINPUTBUFFER nvEncDestroyInputBuffer; /**< [out]: Client should access ::NvEncDestroyInputBuffer() API through this pointer. */ + PNVENCCREATEBITSTREAMBUFFER nvEncCreateBitstreamBuffer; /**< [out]: Client should access ::NvEncCreateBitstreamBuffer() API through this pointer. */ + PNVENCDESTROYBITSTREAMBUFFER nvEncDestroyBitstreamBuffer; /**< [out]: Client should access ::NvEncDestroyBitstreamBuffer() API through this pointer. */ + PNVENCENCODEPICTURE nvEncEncodePicture; /**< [out]: Client should access ::NvEncEncodePicture() API through this pointer. */ + PNVENCLOCKBITSTREAM nvEncLockBitstream; /**< [out]: Client should access ::NvEncLockBitstream() API through this pointer. */ + PNVENCUNLOCKBITSTREAM nvEncUnlockBitstream; /**< [out]: Client should access ::NvEncUnlockBitstream() API through this pointer. */ + PNVENCLOCKINPUTBUFFER nvEncLockInputBuffer; /**< [out]: Client should access ::NvEncLockInputBuffer() API through this pointer. */ + PNVENCUNLOCKINPUTBUFFER nvEncUnlockInputBuffer; /**< [out]: Client should access ::NvEncUnlockInputBuffer() API through this pointer. */ + PNVENCGETENCODESTATS nvEncGetEncodeStats; /**< [out]: Client should access ::NvEncGetEncodeStats() API through this pointer. */ + PNVENCGETSEQUENCEPARAMS nvEncGetSequenceParams; /**< [out]: Client should access ::NvEncGetSequenceParams() API through this pointer. */ + PNVENCREGISTERASYNCEVENT nvEncRegisterAsyncEvent; /**< [out]: Client should access ::NvEncRegisterAsyncEvent() API through this pointer. */ + PNVENCUNREGISTERASYNCEVENT nvEncUnregisterAsyncEvent; /**< [out]: Client should access ::NvEncUnregisterAsyncEvent() API through this pointer. */ + PNVENCMAPINPUTRESOURCE nvEncMapInputResource; /**< [out]: Client should access ::NvEncMapInputResource() API through this pointer. */ + PNVENCUNMAPINPUTRESOURCE nvEncUnmapInputResource; /**< [out]: Client should access ::NvEncUnmapInputResource() API through this pointer. */ + PNVENCDESTROYENCODER nvEncDestroyEncoder; /**< [out]: Client should access ::NvEncDestroyEncoder() API through this pointer. */ + PNVENCINVALIDATEREFFRAMES nvEncInvalidateRefFrames; /**< [out]: Client should access ::NvEncInvalidateRefFrames() API through this pointer. */ + PNVENCOPENENCODESESSIONEX nvEncOpenEncodeSessionEx; /**< [out]: Client should access ::NvEncOpenEncodeSession() API through this pointer. */ + PNVENCREGISTERRESOURCE nvEncRegisterResource; /**< [out]: Client should access ::NvEncRegisterResource() API through this pointer. */ + PNVENCUNREGISTERRESOURCE nvEncUnregisterResource; /**< [out]: Client should access ::NvEncUnregisterResource() API through this pointer. */ + PNVENCRECONFIGUREENCODER nvEncReconfigureEncoder; /**< [out]: Client should access ::NvEncReconfigureEncoder() API through this pointer. */ + void* reserved1; + PNVENCCREATEMVBUFFER nvEncCreateMVBuffer; /**< [out]: Client should access ::NvEncCreateMVBuffer API through this pointer. */ + PNVENCDESTROYMVBUFFER nvEncDestroyMVBuffer; /**< [out]: Client should access ::NvEncDestroyMVBuffer API through this pointer. */ + PNVENCRUNMOTIONESTIMATIONONLY nvEncRunMotionEstimationOnly; /**< [out]: Client should access ::NvEncRunMotionEstimationOnly API through this pointer. */ + void* reserved2[281]; /**< [in]: Reserved and must be set to NULL */ +} NV_ENCODE_API_FUNCTION_LIST; + +/** Macro for constructing the version field of ::_NV_ENCODEAPI_FUNCTION_LIST. */ +#define NV_ENCODE_API_FUNCTION_LIST_VER NVENCAPI_STRUCT_VERSION(2) + +// NvEncodeAPICreateInstance +/** + * \ingroup ENCODE_FUNC + * Entry Point to the NvEncodeAPI interface. + * + * Creates an instance of the NvEncodeAPI interface, and populates the + * pFunctionList with function pointers to the API routines implemented by the + * NvEncodeAPI interface. + * + * \param [out] functionList + * + * \return + * ::NV_ENC_SUCCESS + * ::NV_ENC_ERR_INVALID_PTR + */ +NVENCSTATUS NVENCAPI NvEncodeAPICreateInstance(NV_ENCODE_API_FUNCTION_LIST *functionList); + +#ifdef __cplusplus +} +#endif + + +#endif + diff -Nru ffmpeg-2.8.6/compat/os2threads.h ffmpeg-3.3.3/compat/os2threads.h --- ffmpeg-2.8.6/compat/os2threads.h 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/compat/os2threads.h 2017-06-07 02:03:51.000000000 +0000 @@ -23,8 +23,8 @@ * os2threads to pthreads wrapper */ -#ifndef AVCODEC_OS2PTHREADS_H -#define AVCODEC_OS2PTHREADS_H +#ifndef COMPAT_OS2THREADS_H +#define COMPAT_OS2THREADS_H #define INCL_DOS #include @@ -32,59 +32,71 @@ #undef __STRICT_ANSI__ /* for _beginthread() */ #include -#include "libavutil/mem.h" +#include +#include + +#include "libavutil/attributes.h" + +typedef struct { + TID tid; + void *(*start_routine)(void *); + void *arg; + void *result; +} pthread_t; -typedef TID pthread_t; typedef void pthread_attr_t; typedef HMTX pthread_mutex_t; typedef void pthread_mutexattr_t; typedef struct { - HEV event_sem; - int wait_count; + HEV event_sem; + HEV ack_sem; + volatile unsigned wait_count; } pthread_cond_t; typedef void pthread_condattr_t; -struct thread_arg { - void *(*start_routine)(void *); - void *arg; -}; +typedef struct { + volatile int done; + _fmutex mtx; +} pthread_once_t; + +#define PTHREAD_ONCE_INIT {0, _FMUTEX_INITIALIZER} static void thread_entry(void *arg) { - struct thread_arg *thread_arg = arg; + pthread_t *thread = arg; - thread_arg->start_routine(thread_arg->arg); - - av_free(thread_arg); + thread->result = thread->start_routine(thread->arg); } -static av_always_inline int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine)(void*), void *arg) +static av_always_inline int pthread_create(pthread_t *thread, + const pthread_attr_t *attr, + void *(*start_routine)(void*), + void *arg) { - struct thread_arg *thread_arg; - - thread_arg = av_mallocz(sizeof(struct thread_arg)); - if (!thread_arg) - return ENOMEM; + thread->start_routine = start_routine; + thread->arg = arg; + thread->result = NULL; - thread_arg->start_routine = start_routine; - thread_arg->arg = arg; - - *thread = _beginthread(thread_entry, NULL, 256 * 1024, thread_arg); + thread->tid = _beginthread(thread_entry, NULL, 1024 * 1024, thread); return 0; } static av_always_inline int pthread_join(pthread_t thread, void **value_ptr) { - DosWaitThread((PTID)&thread, DCWW_WAIT); + DosWaitThread(&thread.tid, DCWW_WAIT); + + if (value_ptr) + *value_ptr = thread.result; return 0; } -static av_always_inline int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutexattr_t *attr) +static av_always_inline int pthread_mutex_init(pthread_mutex_t *mutex, + const pthread_mutexattr_t *attr) { DosCreateMutexSem(NULL, (PHMTX)mutex, 0, FALSE); @@ -112,9 +124,11 @@ return 0; } -static av_always_inline int pthread_cond_init(pthread_cond_t *cond, const pthread_condattr_t *attr) +static av_always_inline int pthread_cond_init(pthread_cond_t *cond, + const pthread_condattr_t *attr) { DosCreateEventSem(NULL, &cond->event_sem, DCE_POSTONE, FALSE); + DosCreateEventSem(NULL, &cond->ack_sem, DCE_POSTONE, FALSE); cond->wait_count = 0; @@ -124,16 +138,16 @@ static av_always_inline int pthread_cond_destroy(pthread_cond_t *cond) { DosCloseEventSem(cond->event_sem); + DosCloseEventSem(cond->ack_sem); return 0; } static av_always_inline int pthread_cond_signal(pthread_cond_t *cond) { - if (cond->wait_count > 0) { + if (!__atomic_cmpxchg32(&cond->wait_count, 0, 0)) { DosPostEventSem(cond->event_sem); - - cond->wait_count--; + DosWaitEventSem(cond->ack_sem, SEM_INDEFINITE_WAIT); } return 0; @@ -141,26 +155,47 @@ static av_always_inline int pthread_cond_broadcast(pthread_cond_t *cond) { - while (cond->wait_count > 0) { - DosPostEventSem(cond->event_sem); - - cond->wait_count--; - } + while (!__atomic_cmpxchg32(&cond->wait_count, 0, 0)) + pthread_cond_signal(cond); return 0; } -static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) +static av_always_inline int pthread_cond_wait(pthread_cond_t *cond, + pthread_mutex_t *mutex) { - cond->wait_count++; + __atomic_increment(&cond->wait_count); pthread_mutex_unlock(mutex); DosWaitEventSem(cond->event_sem, SEM_INDEFINITE_WAIT); + __atomic_decrement(&cond->wait_count); + + DosPostEventSem(cond->ack_sem); + pthread_mutex_lock(mutex); return 0; } -#endif /* AVCODEC_OS2PTHREADS_H */ +static av_always_inline int pthread_once(pthread_once_t *once_control, + void (*init_routine)(void)) +{ + if (!once_control->done) + { + _fmutex_request(&once_control->mtx, 0); + + if (!once_control->done) + { + init_routine(); + + once_control->done = 1; + } + + _fmutex_release(&once_control->mtx); + } + + return 0; +} +#endif /* COMPAT_OS2THREADS_H */ diff -Nru ffmpeg-2.8.6/compat/solaris/make_sunver.pl ffmpeg-3.3.3/compat/solaris/make_sunver.pl --- ffmpeg-2.8.6/compat/solaris/make_sunver.pl 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/solaris/make_sunver.pl 2017-06-07 02:03:51.000000000 +0000 @@ -0,0 +1,352 @@ +#!/usr/bin/env perl + +# make_sunver.pl +# +# Copyright (C) 2010, 2011, 2012, 2013 +# Free Software Foundation, Inc. +# +# This file 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; see the file COPYING.GPLv3. If not see +# . + +# This script takes at least two arguments, a GNU style version script and +# a list of object and archive files, and generates a corresponding Sun +# style version script as follows: +# +# Each glob pattern, C++ mangled pattern or literal in the input script is +# matched against all global symbols in the input objects, emitting those +# that matched (or nothing if no match was found). +# A comment with the original pattern and its type is left in the output +# file to make it easy to understand the matches. +# +# It uses elfdump when present (native), GNU readelf otherwise. +# It depends on the GNU version of c++filt, since it must understand the +# GNU mangling style. + +use FileHandle; +use IPC::Open2; + +# Enforce C locale. +$ENV{'LC_ALL'} = "C"; +$ENV{'LANG'} = "C"; + +# Input version script, GNU style. +my $symvers = shift; + +########## +# Get all the symbols from the library, match them, and add them to a hash. + +my %sym_hash = (); + +# List of objects and archives to process. +my @OBJECTS = (); + +# List of shared objects to omit from processing. +my @SHAREDOBJS = (); + +# Filter out those input archives that have corresponding shared objects to +# avoid adding all symbols matched in the archive to the output map. +foreach $file (@ARGV) { + if (($so = $file) =~ s/\.a$/.so/ && -e $so) { + printf STDERR "omitted $file -> $so\n"; + push (@SHAREDOBJS, $so); + } else { + push (@OBJECTS, $file); + } +} + +# We need to detect and ignore hidden symbols. Solaris nm can only detect +# this in the harder to parse default output format, and GNU nm not at all, +# so use elfdump -s in the native case and GNU readelf -s otherwise. +# GNU objdump -t cannot be used since it produces a variable number of +# columns. + +# The path to elfdump. +my $elfdump = "/usr/ccs/bin/elfdump"; + +if (-f $elfdump) { + open ELFDUMP,$elfdump.' -s '.(join ' ',@OBJECTS).'|' or die $!; + my $skip_arsym = 0; + + while () { + chomp; + + # Ignore empty lines. + if (/^$/) { + # End of archive symbol table, stop skipping. + $skip_arsym = 0 if $skip_arsym; + next; + } + + # Keep skipping until end of archive symbol table. + next if ($skip_arsym); + + # Ignore object name header for individual objects and archives. + next if (/:$/); + + # Ignore table header lines. + next if (/^Symbol Table Section:/); + next if (/index.*value.*size/); + + # Start of archive symbol table: start skipping. + if (/^Symbol Table: \(archive/) { + $skip_arsym = 1; + next; + } + + # Split table. + (undef, undef, undef, undef, $bind, $oth, undef, $shndx, $name) = split; + + # Error out for unknown input. + die "unknown input line:\n$_" unless defined($bind); + + # Ignore local symbols. + next if ($bind eq "LOCL"); + # Ignore hidden symbols. + next if ($oth eq "H"); + # Ignore undefined symbols. + next if ($shndx eq "UNDEF"); + # Error out for unhandled cases. + if ($bind !~ /^(GLOB|WEAK)/ or $oth ne "D") { + die "unhandled symbol:\n$_"; + } + + # Remember symbol. + $sym_hash{$name}++; + } + close ELFDUMP or die "$elfdump error"; +} else { + open READELF, 'readelf -s -W '.(join ' ',@OBJECTS).'|' or die $!; + # Process each symbol. + while () { + chomp; + + # Ignore empty lines. + next if (/^$/); + + # Ignore object name header. + next if (/^File: .*$/); + + # Ignore table header lines. + next if (/^Symbol table.*contains.*:/); + next if (/Num:.*Value.*Size/); + + # Split table. + (undef, undef, undef, undef, $bind, $vis, $ndx, $name) = split; + + # Error out for unknown input. + die "unknown input line:\n$_" unless defined($bind); + + # Ignore local symbols. + next if ($bind eq "LOCAL"); + # Ignore hidden symbols. + next if ($vis eq "HIDDEN"); + # Ignore undefined symbols. + next if ($ndx eq "UND"); + # Error out for unhandled cases. + if ($bind !~ /^(GLOBAL|WEAK)/ or $vis ne "DEFAULT") { + die "unhandled symbol:\n$_"; + } + + # Remember symbol. + $sym_hash{$name}++; + } + close READELF or die "readelf error"; +} + +########## +# The various types of glob patterns. +# +# A glob pattern that is to be applied to the demangled name: 'cxx'. +# A glob patterns that applies directly to the name in the .o files: 'glob'. +# This pattern is ignored; used for local variables (usually just '*'): 'ign'. + +# The type of the current pattern. +my $glob = 'glob'; + +# We're currently inside `extern "C++"', which Sun ld doesn't understand. +my $in_extern = 0; + +# The c++filt command to use. This *must* be GNU c++filt; the Sun Studio +# c++filt doesn't handle the GNU mangling style. +my $cxxfilt = $ENV{'CXXFILT'} || "c++filt"; + +# The current version name. +my $current_version = ""; + +# Was there any attempt to match a symbol to this version? +my $matches_attempted; + +# The number of versions which matched this symbol. +my $matched_symbols; + +open F,$symvers or die $!; + +# Print information about generating this file +print "# This file was generated by make_sunver.pl. DO NOT EDIT!\n"; +print "# It was generated by:\n"; +printf "# %s %s %s\n", $0, $symvers, (join ' ',@ARGV); +printf "# Omitted archives with corresponding shared libraries: %s\n", + (join ' ', @SHAREDOBJS) if $#SHAREDOBJS >= 0; +print "#\n\n"; + +print "\$mapfile_version 2\n"; + +while () { + # Lines of the form '};' + if (/^([ \t]*)(\}[ \t]*;[ \t]*)$/) { + $glob = 'glob'; + if ($in_extern) { + $in_extern--; + print "$1##$2\n"; + } else { + print; + } + next; + } + + # Lines of the form '} SOME_VERSION_NAME_1.0;' + if (/^[ \t]*\}[ \tA-Z0-9_.a-z]+;[ \t]*$/) { + $glob = 'glob'; + # We tried to match symbols agains this version, but none matched. + # Emit dummy hidden symbol to avoid marking this version WEAK. + if ($matches_attempted && $matched_symbols == 0) { + print " hidden:\n"; + print " .force_WEAK_off_$current_version = DATA S0x0 V0x0;\n"; + } + print; next; + } + + # Comment and blank lines + if (/^[ \t]*\#/) { print; next; } + if (/^[ \t]*$/) { print; next; } + + # Lines of the form '{' + if (/^([ \t]*){$/) { + if ($in_extern) { + print "$1##{\n"; + } else { + print; + } + next; + } + + # Lines of the form 'SOME_VERSION_NAME_1.1 {' + if (/^([A-Z0-9_.]+)[ \t]+{$/) { + # Record version name. + $current_version = $1; + # Reset match attempts, #matched symbols for this version. + $matches_attempted = 0; + $matched_symbols = 0; + print "SYMBOL_VERSION $1 {\n"; + next; + } + + # Ignore 'global:' + if (/^[ \t]*global:$/) { print; next; } + + # After 'local:', globs should be ignored, they won't be exported. + if (/^[ \t]*local:$/) { + $glob = 'ign'; + print; + next; + } + + # After 'extern "C++"', globs are C++ patterns + if (/^([ \t]*)(extern \"C\+\+\"[ \t]*)$/) { + $in_extern++; + $glob = 'cxx'; + # Need to comment, Sun ld cannot handle this. + print "$1##$2\n"; next; + } + + # Chomp newline now we're done with passing through the input file. + chomp; + + # Catch globs. Note that '{}' is not allowed in globs by this script, + # so only '*' and '[]' are available. + if (/^([ \t]*)([^ \t;{}#]+);?[ \t]*$/) { + my $ws = $1; + my $ptn = $2; + # Turn the glob into a regex by replacing '*' with '.*', '?' with '.'. + # Keep $ptn so we can still print the original form. + ($pattern = $ptn) =~ s/\*/\.\*/g; + $pattern =~ s/\?/\./g; + + if ($glob eq 'ign') { + # We're in a local: * section; just continue. + print "$_\n"; + next; + } + + # Print the glob commented for human readers. + print "$ws##$ptn ($glob)\n"; + # We tried to match a symbol to this version. + $matches_attempted++; + + if ($glob eq 'glob') { + my %ptn_syms = (); + + # Match ptn against symbols in %sym_hash. + foreach my $sym (keys %sym_hash) { + # Maybe it matches one of the patterns based on the symbol in + # the .o file. + $ptn_syms{$sym}++ if ($sym =~ /^$pattern$/); + } + + foreach my $sym (sort keys(%ptn_syms)) { + $matched_symbols++; + print "$ws$sym;\n"; + } + } elsif ($glob eq 'cxx') { + my %dem_syms = (); + + # Verify that we're actually using GNU c++filt. Other versions + # most likely cannot handle GNU style symbol mangling. + my $cxxout = `$cxxfilt --version 2>&1`; + $cxxout =~ m/GNU/ or die "$0 requires GNU c++filt to function"; + + # Talk to c++filt through a pair of file descriptors. + # Need to start a fresh instance per pattern, otherwise the + # process grows to 500+ MB. + my $pid = open2(*FILTIN, *FILTOUT, $cxxfilt) or die $!; + + # Match ptn against symbols in %sym_hash. + foreach my $sym (keys %sym_hash) { + # No? Well, maybe its demangled form matches one of those + # patterns. + printf FILTOUT "%s\n",$sym; + my $dem = ; + chomp $dem; + $dem_syms{$sym}++ if ($dem =~ /^$pattern$/); + } + + close FILTOUT or die "c++filt error"; + close FILTIN or die "c++filt error"; + # Need to wait for the c++filt process to avoid lots of zombies. + waitpid $pid, 0; + + foreach my $sym (sort keys(%dem_syms)) { + $matched_symbols++; + print "$ws$sym;\n"; + } + } else { + # No? Well, then ignore it. + } + next; + } + # Important sanity check. This script can't handle lots of formats + # that GNU ld can, so be sure to error out if one is seen! + die "strange line `$_'"; +} +close F; diff -Nru ffmpeg-2.8.6/compat/tms470/math.h ffmpeg-3.3.3/compat/tms470/math.h --- ffmpeg-2.8.6/compat/tms470/math.h 2015-06-18 18:54:54.000000000 +0000 +++ ffmpeg-3.3.3/compat/tms470/math.h 2017-06-07 02:03:51.000000000 +0000 @@ -16,8 +16,8 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#ifndef FFMPEG_COMPAT_TMS470_MATH_H -#define FFMPEG_COMPAT_TMS470_MATH_H +#ifndef COMPAT_TMS470_MATH_H +#define COMPAT_TMS470_MATH_H #include_next @@ -27,4 +27,4 @@ #define INFINITY (*(const float*)((const unsigned []){ 0x7f800000 })) #define NAN (*(const float*)((const unsigned []){ 0x7fc00000 })) -#endif /* FFMPEG_COMPAT_TMS470_MATH_H */ +#endif /* COMPAT_TMS470_MATH_H */ diff -Nru ffmpeg-2.8.6/compat/va_copy.h ffmpeg-3.3.3/compat/va_copy.h --- ffmpeg-2.8.6/compat/va_copy.h 2015-06-18 18:54:54.000000000 +0000 +++ ffmpeg-3.3.3/compat/va_copy.h 2017-06-07 02:03:51.000000000 +0000 @@ -19,6 +19,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ +#ifndef COMPAT_VA_COPY_H +#define COMPAT_VA_COPY_H + #include #if !defined(va_copy) && defined(_MSC_VER) @@ -27,3 +30,5 @@ #if !defined(va_copy) && defined(__GNUC__) && __GNUC__ < 3 #define va_copy(dst, src) __va_copy(dst, src) #endif + +#endif /* COMPAT_VA_COPY_H */ diff -Nru ffmpeg-2.8.6/compat/w32dlfcn.h ffmpeg-3.3.3/compat/w32dlfcn.h --- ffmpeg-2.8.6/compat/w32dlfcn.h 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/compat/w32dlfcn.h 2017-07-29 17:49:29.000000000 +0000 @@ -0,0 +1,83 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * 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_W32DLFCN_H +#define COMPAT_W32DLFCN_H + +#ifdef _WIN32 +#include +#if _WIN32_WINNT < 0x0602 +#include "libavutil/wchar_filename.h" +#endif +/** + * Safe function used to open dynamic libs. This attempts to improve program security + * by removing the current directory from the dll search path. Only dll's found in the + * executable or system directory are allowed to be loaded. + * @param name The dynamic lib name. + * @return A handle to the opened lib. + */ +static inline HMODULE win32_dlopen(const char *name) +{ +#if _WIN32_WINNT < 0x0602 + // Need to check if KB2533623 is available + if (!GetProcAddress(GetModuleHandleW(L"kernel32.dll"), "SetDefaultDllDirectories")) { + HMODULE module = NULL; + wchar_t *path = NULL, *name_w = NULL; + DWORD pathlen; + if (utf8towchar(name, &name_w)) + goto exit; + path = (wchar_t *)av_mallocz_array(MAX_PATH, sizeof(wchar_t)); + // Try local directory first + pathlen = GetModuleFileNameW(NULL, path, MAX_PATH); + pathlen = wcsrchr(path, '\\') - path; + if (pathlen == 0 || pathlen + wcslen(name_w) + 2 > MAX_PATH) + goto exit; + path[pathlen] = '\\'; + wcscpy(path + pathlen + 1, name_w); + module = LoadLibraryExW(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + if (module == NULL) { + // Next try System32 directory + pathlen = GetSystemDirectoryW(path, MAX_PATH); + if (pathlen == 0 || pathlen + wcslen(name_w) + 2 > MAX_PATH) + goto exit; + path[pathlen] = '\\'; + wcscpy(path + pathlen + 1, name_w); + module = LoadLibraryExW(path, NULL, LOAD_WITH_ALTERED_SEARCH_PATH); + } +exit: + av_free(path); + av_free(name_w); + return module; + } +#endif +#ifndef LOAD_LIBRARY_SEARCH_APPLICATION_DIR +# define LOAD_LIBRARY_SEARCH_APPLICATION_DIR 0x00000200 +#endif +#ifndef LOAD_LIBRARY_SEARCH_SYSTEM32 +# define LOAD_LIBRARY_SEARCH_SYSTEM32 0x00000800 +#endif + return LoadLibraryExA(name, NULL, LOAD_LIBRARY_SEARCH_APPLICATION_DIR | LOAD_LIBRARY_SEARCH_SYSTEM32); +} +#define dlopen(name, flags) win32_dlopen(name) +#define dlclose FreeLibrary +#define dlsym GetProcAddress +#else +#include +#endif + +#endif /* COMPAT_W32DLFCN_H */ diff -Nru ffmpeg-2.8.6/compat/w32pthreads.h ffmpeg-3.3.3/compat/w32pthreads.h --- ffmpeg-2.8.6/compat/w32pthreads.h 2015-12-20 02:07:42.000000000 +0000 +++ ffmpeg-3.3.3/compat/w32pthreads.h 2017-06-07 02:03:51.000000000 +0000 @@ -26,8 +26,8 @@ * w32threads to pthreads wrapper */ -#ifndef FFMPEG_COMPAT_W32PTHREADS_H -#define FFMPEG_COMPAT_W32PTHREADS_H +#ifndef COMPAT_W32PTHREADS_H +#define COMPAT_W32PTHREADS_H /* Build up a pthread-like API using underlying Windows API. Have only static * methods so as to not conflict with a potentially linked in pthread-win32 @@ -39,6 +39,11 @@ #include #include +#if _WIN32_WINNT < 0x0600 && defined(__MINGW32__) +#undef MemoryBarrier +#define MemoryBarrier __sync_synchronize +#endif + #include "libavutil/attributes.h" #include "libavutil/common.h" #include "libavutil/internal.h" @@ -82,19 +87,29 @@ { thread->func = start_routine; thread->arg = arg; +#if HAVE_WINRT + thread->handle = (void*)CreateThread(NULL, 0, win32thread_worker, thread, + 0, NULL); +#else thread->handle = (void*)_beginthreadex(NULL, 0, win32thread_worker, thread, 0, NULL); +#endif return !thread->handle; } -static av_unused void pthread_join(pthread_t thread, void **value_ptr) +static av_unused int pthread_join(pthread_t thread, void **value_ptr) { DWORD ret = WaitForSingleObject(thread.handle, INFINITE); - if (ret != WAIT_OBJECT_0) - return; + if (ret != WAIT_OBJECT_0) { + if (ret == WAIT_ABANDONED) + return EINVAL; + else + return EDEADLK; + } if (value_ptr) *value_ptr = thread.ret; CloseHandle(thread.handle); + return 0; } static inline int pthread_mutex_init(pthread_mutex_t *m, void* attr) @@ -119,6 +134,19 @@ } #if _WIN32_WINNT >= 0x0600 +typedef INIT_ONCE pthread_once_t; +#define PTHREAD_ONCE_INIT INIT_ONCE_STATIC_INIT + +static av_unused int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) +{ + BOOL pending = FALSE; + InitOnceBeginInitialize(once_control, 0, &pending, NULL); + if (pending) + init_routine(); + InitOnceComplete(once_control, 0, NULL); + return 0; +} + static inline int pthread_cond_init(pthread_cond_t *cond, const void *unused_attr) { InitializeConditionVariable(cond); @@ -126,14 +154,15 @@ } /* native condition variables do not destroy */ -static inline void pthread_cond_destroy(pthread_cond_t *cond) +static inline int pthread_cond_destroy(pthread_cond_t *cond) { - return; + return 0; } -static inline void pthread_cond_broadcast(pthread_cond_t *cond) +static inline int pthread_cond_broadcast(pthread_cond_t *cond) { WakeAllConditionVariable(cond); + return 0; } static inline int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) @@ -142,14 +171,77 @@ return 0; } -static inline void pthread_cond_signal(pthread_cond_t *cond) +static inline int pthread_cond_signal(pthread_cond_t *cond) { WakeConditionVariable(cond); + return 0; } #else // _WIN32_WINNT < 0x0600 + +/* atomic init state of dynamically loaded functions */ +static LONG w32thread_init_state = 0; +static av_unused void w32thread_init(void); + +/* for pre-Windows 6.0 platforms, define INIT_ONCE struct, + * compatible to the one used in the native API */ + +typedef union pthread_once_t { + void * Ptr; ///< For the Windows 6.0+ native functions + LONG state; ///< For the pre-Windows 6.0 compat code +} pthread_once_t; + +#define PTHREAD_ONCE_INIT {0} + +/* function pointers to init once API on windows 6.0+ kernels */ +static BOOL (WINAPI *initonce_begin)(pthread_once_t *lpInitOnce, DWORD dwFlags, BOOL *fPending, void **lpContext); +static BOOL (WINAPI *initonce_complete)(pthread_once_t *lpInitOnce, DWORD dwFlags, void *lpContext); + +/* pre-Windows 6.0 compat using a spin-lock */ +static inline void w32thread_once_fallback(LONG volatile *state, void (*init_routine)(void)) +{ + switch (InterlockedCompareExchange(state, 1, 0)) { + /* Initial run */ + case 0: + init_routine(); + InterlockedExchange(state, 2); + break; + /* Another thread is running init */ + case 1: + while (1) { + MemoryBarrier(); + if (*state == 2) + break; + Sleep(0); + } + break; + /* Initialization complete */ + case 2: + break; + } +} + +static av_unused int pthread_once(pthread_once_t *once_control, void (*init_routine)(void)) +{ + w32thread_once_fallback(&w32thread_init_state, w32thread_init); + + /* Use native functions on Windows 6.0+ */ + if (initonce_begin && initonce_complete) { + BOOL pending = FALSE; + initonce_begin(once_control, 0, &pending, NULL); + if (pending) + init_routine(); + initonce_complete(once_control, 0, NULL); + return 0; + } + + w32thread_once_fallback(&once_control->state, init_routine); + return 0; +} + /* for pre-Windows 6.0 platforms we need to define and use our own condition * variable and api */ + typedef struct win32_cond_t { pthread_mutex_t mtx_broadcast; pthread_mutex_t mtx_waiter_count; @@ -169,6 +261,9 @@ static av_unused int pthread_cond_init(pthread_cond_t *cond, const void *unused_attr) { win32_cond_t *win32_cond = NULL; + + w32thread_once_fallback(&w32thread_init_state, w32thread_init); + if (cond_init) { cond_init(cond); return 0; @@ -191,12 +286,12 @@ return 0; } -static av_unused void pthread_cond_destroy(pthread_cond_t *cond) +static av_unused int pthread_cond_destroy(pthread_cond_t *cond) { win32_cond_t *win32_cond = cond->Ptr; /* native condition variables do not destroy */ if (cond_init) - return; + return 0; /* non native condition variables */ CloseHandle(win32_cond->semaphore); @@ -205,16 +300,17 @@ pthread_mutex_destroy(&win32_cond->mtx_broadcast); av_freep(&win32_cond); cond->Ptr = NULL; + return 0; } -static av_unused void pthread_cond_broadcast(pthread_cond_t *cond) +static av_unused int pthread_cond_broadcast(pthread_cond_t *cond) { win32_cond_t *win32_cond = cond->Ptr; int have_waiter; if (cond_broadcast) { cond_broadcast(cond); - return; + return 0; } /* non native condition variables */ @@ -236,6 +332,7 @@ } else pthread_mutex_unlock(&win32_cond->mtx_waiter_count); pthread_mutex_unlock(&win32_cond->mtx_broadcast); + return 0; } static av_unused int pthread_cond_wait(pthread_cond_t *cond, pthread_mutex_t *mutex) @@ -270,13 +367,13 @@ return pthread_mutex_lock(mutex); } -static av_unused void pthread_cond_signal(pthread_cond_t *cond) +static av_unused int pthread_cond_signal(pthread_cond_t *cond) { win32_cond_t *win32_cond = cond->Ptr; int have_waiter; if (cond_signal) { cond_signal(cond); - return; + return 0; } pthread_mutex_lock(&win32_cond->mtx_broadcast); @@ -293,6 +390,7 @@ } pthread_mutex_unlock(&win32_cond->mtx_broadcast); + return 0; } #endif @@ -309,8 +407,12 @@ (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"); #endif } -#endif /* FFMPEG_COMPAT_W32PTHREADS_H */ +#endif /* COMPAT_W32PTHREADS_H */ diff -Nru ffmpeg-2.8.6/configure ffmpeg-3.3.3/configure --- ffmpeg-2.8.6/configure 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/configure 2017-07-29 17:49:29.000000000 +0000 @@ -63,6 +63,7 @@ Help options: --help print this message + --quiet Suppress showing informative output --list-decoders show all available decoders --list-encoders show all available encoders --list-hwaccels show all available hardware accelerators @@ -79,7 +80,7 @@ --logfile=FILE log tests and output to FILE [config.log] --disable-logging do not log configure debug information --fatal-warnings fail if any configure warning is generated - --prefix=PREFIX install in PREFIX [$prefix] + --prefix=PREFIX install in PREFIX [$prefix_default] --bindir=DIR install binaries in DIR [PREFIX/bin] --datadir=DIR install data files in DIR [PREFIX/share/ffmpeg] --docdir=DIR install documentation in DIR [PREFIX/share/doc/ffmpeg] @@ -90,7 +91,8 @@ --pkgconfigdir=DIR install pkg-config files in DIR [LIBDIR/pkgconfig] --enable-rpath use rpath to allow installing libraries in paths not part of the dynamic linker search path - use rpath when linking programs [USE WITH CARE] + use rpath when linking programs (USE WITH CARE) + --install-name-dir=DIR Darwin directory name for installed targets Licensing options: --enable-gpl allow use of GPL code, the resulting libs @@ -103,11 +105,10 @@ --disable-static do not build static libraries [no] --enable-shared build shared libraries [no] --enable-small optimize for size instead of speed - --disable-runtime-cpudetect disable detecting cpu capabilities at runtime (smaller binary) + --disable-runtime-cpudetect disable detecting CPU capabilities at runtime (smaller binary) --enable-gray enable full grayscale support (slower color) --disable-swscale-alpha disable alpha channel support in swscale --disable-all disable building components, libraries and programs - --enable-incompatible-libav-abi enable incompatible Libav fork ABI [no] --enable-raise-major increase major version numbers in sonames [no] Program options: @@ -128,7 +129,6 @@ --disable-avdevice disable libavdevice build --disable-avcodec disable libavcodec build --disable-avformat disable libavformat build - --disable-avutil disable libavutil build --disable-swresample disable libswresample build --disable-swscale disable libswscale build --disable-postproc disable libpostproc build @@ -149,14 +149,6 @@ --disable-faan disable floating point AAN (I)DCT code --disable-pixelutils disable pixel utils in libavutil -Hardware accelerators: - --disable-d3d11va disable D3D11VA code [autodetect] - --disable-dxva2 disable DXVA2 code [autodetect] - --disable-vaapi disable VAAPI code [autodetect] - --disable-vda disable VDA code [autodetect] - --disable-vdpau disable VDPAU code [autodetect] - --enable-videotoolbox enable VideoToolbox code [autodetect] - Individual component options: --disable-everything disable all components listed below --disable-encoder=NAME disable encoder NAME @@ -195,15 +187,33 @@ --disable-filters disable all filters External library support: + + Using any of the following switches will allow FFmpeg to link to the + corresponding external library. All the components depending on that library + will become enabled, if all their other dependencies are met and they are not + explicitly disabled. E.g. --enable-libwavpack will enable linking to + libwavpack and allow the libwavpack encoder to be built, unless it is + specifically disabled with --disable-encoder=libwavpack. + + Note that only the system libraries are auto-detected. All the other external + libraries must be explicitly enabled. + + Also note that the following help text describes the purpose of the libraries + themselves, not all their features will necessarily be usable by FFmpeg. + --enable-avisynth enable reading of AviSynth script files [no] --disable-bzlib disable bzlib [autodetect] - --enable-fontconfig enable fontconfig, useful for drawtext filter [no] + --enable-chromaprint enable audio fingerprinting with chromaprint [no] --enable-frei0r enable frei0r video filtering [no] + --enable-gcrypt enable gcrypt, needed for rtmp(t)e support + if openssl, librtmp or gmp is not used [no] + --enable-gmp enable gmp, needed for rtmp(t)e support + if openssl or librtmp is not used [no] --enable-gnutls enable gnutls, needed for https support if openssl is not used [no] --disable-iconv disable iconv [autodetect] + --enable-jni enable JNI support [no] --enable-ladspa enable LADSPA audio filtering [no] - --enable-libaacplus enable AAC+ encoding via libaacplus [no] --enable-libass enable libass subtitles rendering, needed for subtitles and ass filter [no] --enable-libbluray enable BluRay reading using libbluray [no] @@ -213,10 +223,9 @@ --enable-libcdio enable audio CD grabbing with libcdio [no] --enable-libdc1394 enable IIDC-1394 grabbing using libdc1394 and libraw1394 [no] - --enable-libdcadec enable DCA decoding via libdcadec [no] - --enable-libfaac enable AAC encoding via libfaac [no] --enable-libfdk-aac enable AAC de/encoding via libfdk-aac [no] --enable-libflite enable flite (voice synthesis) support via libflite [no] + --enable-libfontconfig enable libfontconfig, useful for drawtext filter [no] --enable-libfreetype enable libfreetype, needed for drawtext filter [no] --enable-libfribidi enable libfribidi, improves drawtext filter [no] --enable-libgme enable Game Music Emu via libgme [no] @@ -224,7 +233,6 @@ --enable-libiec61883 enable iec61883 via libiec61883 [no] --enable-libilbc enable iLBC de/encoding via libilbc [no] --enable-libkvazaar enable HEVC encoding via libkvazaar [no] - --enable-libmfx enable HW acceleration through libmfx --enable-libmodplug enable ModPlug via libmodplug [no] --enable-libmp3lame enable MP3 encoding via libmp3lame [no] --enable-libnut enable NUT (de)muxing via libnut, @@ -234,9 +242,10 @@ --enable-libopencv enable video filtering via libopencv [no] --enable-libopenh264 enable H.264 encoding via OpenH264 [no] --enable-libopenjpeg enable JPEG 2000 de/encoding via OpenJPEG [no] + --enable-libopenmpt enable decoding tracked files via libopenmpt [no] --enable-libopus enable Opus de/encoding via libopus [no] --enable-libpulse enable Pulseaudio input via libpulse [no] - --enable-libquvi enable quvi input via libquvi [no] + --enable-librubberband enable rubberband needed for rubberband filter [no] --enable-librtmp enable RTMP[E] support via librtmp [no] --enable-libschroedinger enable Dirac de/encoding via libschroedinger [no] --enable-libshine enable fixed-point MP3 encoding via libshine [no] @@ -245,13 +254,11 @@ --enable-libsoxr enable Include libsoxr resampling [no] --enable-libspeex enable Speex de/encoding via libspeex [no] --enable-libssh enable SFTP protocol via libssh [no] - --enable-libstagefright-h264 enable H.264 decoding via libstagefright [no] + --enable-libtesseract enable Tesseract, needed for ocr filter [no] --enable-libtheora enable Theora encoding via libtheora [no] --enable-libtwolame enable MP2 encoding via libtwolame [no] - --enable-libutvideo enable Ut Video encoding and decoding via libutvideo [no] --enable-libv4l2 enable libv4l2/v4l-utils [no] --enable-libvidstab enable video stabilization using vid.stab [no] - --enable-libvo-aacenc enable AAC encoding via libvo-aacenc [no] --enable-libvo-amrwbenc enable AMR-WB encoding via libvo-amrwbenc [no] --enable-libvorbis enable Vorbis en/decoding via libvorbis, native implementation exists [no] @@ -267,24 +274,43 @@ --enable-libxcb-shape enable X11 grabbing shape rendering [autodetect] --enable-libxvid enable Xvid encoding via xvidcore, native MPEG-4/Xvid encoder exists [no] + --enable-libzimg enable z.lib, needed for zscale filter [no] --enable-libzmq enable message passing via libzmq [no] --enable-libzvbi enable teletext support via libzvbi [no] --disable-lzma disable lzma [autodetect] - --enable-decklink enable Blackmagick DeckLink I/O support [no] - --enable-mmal enable decoding via MMAL [no] - --enable-nvenc enable NVIDIA NVENC support [no] + --enable-decklink enable Blackmagic DeckLink I/O support [no] + --enable-mediacodec enable Android MediaCodec support [no] + --enable-netcdf enable NetCDF, needed for sofalizer filter [no] --enable-openal enable OpenAL 1.1 capture support [no] --enable-opencl enable OpenCL code --enable-opengl enable OpenGL rendering [no] --enable-openssl enable openssl, needed for https support if gnutls is not used [no] - --disable-sdl disable sdl [autodetect] + --disable-schannel disable SChannel SSP, needed for TLS support on + Windows if openssl and gnutls are not used [autodetect] + --disable-sdl2 disable sdl2 [autodetect] --disable-securetransport disable Secure Transport, needed for TLS support on OSX if openssl and gnutls are not used [autodetect] - --enable-x11grab enable X11 grabbing (legacy) [no] --disable-xlib disable xlib [autodetect] --disable-zlib disable zlib [autodetect] + The following libraries provide various hardware acceleration features: + --disable-audiotoolbox disable Apple AudioToolbox code [autodetect] + --disable-cuda disable dynamically linked Nvidia CUDA code [autodetect] + --disable-cuvid disable Nvidia CUVID support [autodetect] + --disable-d3d11va disable Microsoft Direct3D 11 video acceleration code [autodetect] + --disable-dxva2 disable Microsoft DirectX 9 video acceleration code [autodetect] + --enable-libmfx enable Intel MediaSDK (AKA Quick Sync Video) code via libmfx [no] + --enable-libnpp enable Nvidia Performance Primitives-based code [no] + --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no] + --disable-nvenc disable Nvidia video encoding code [autodetect] + --enable-omx enable OpenMAX IL code [no] + --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no] + --disable-vaapi disable Video Acceleration API (mainly Unix/Intel) code [autodetect] + --disable-vda disable Apple Video Decode Acceleration code [autodetect] + --disable-vdpau disable Nvidia Video Decode and Presentation API for Unix code [autodetect] + --disable-videotoolbox disable VideoToolbox code [autodetect] + Toolchain options: --arch=ARCH select architecture [$arch] --cpu=CPU select the minimum required CPU (affects @@ -303,10 +329,13 @@ --nm=NM use nm tool NM [$nm_default] --ar=AR use archive tool AR [$ar_default] --as=AS use assembler AS [$as_default] + --ln_s=LN_S use symbolic link tool LN_S [$ln_s_default] + --strip=STRIP use strip tool STRIP [$strip_default] --windres=WINDRES use windows resource compiler WINDRES [$windres_default] --yasmexe=EXE use yasm-compatible assembler EXE [$yasmexe_default] --cc=CC use C compiler CC [$cc_default] --cxx=CXX use C compiler CXX [$cxx_default] + --objcc=OCC use ObjC compiler OCC [$cc_default] --dep-cc=DEPCC use dependency generator DEPCC [$cc_default] --ld=LD use linker LD [$ld_default] --pkg-config=PKGCONFIG use pkg-config tool PKGCONFIG [$pkg_config_default] @@ -322,6 +351,7 @@ --host-os=OS compiler host OS [$target_os] --extra-cflags=ECFLAGS add ECFLAGS to CFLAGS [$CFLAGS] --extra-cxxflags=ECFLAGS add ECFLAGS to CXXFLAGS [$CXXFLAGS] + --extra-objcflags=FLAGS add FLAGS to OBJCFLAGS [$CFLAGS] --extra-ldflags=ELDFLAGS add ELDFLAGS to LDFLAGS [$LDFLAGS] --extra-ldexeflags=ELDFLAGS add ELDFLAGS to LDEXEFLAGS [$LDEXEFLAGS] --extra-ldlibflags=ELDFLAGS add ELDFLAGS to LDLIBFLAGS [$LDLIBFLAGS] @@ -336,12 +366,12 @@ Advanced options (experts only): --malloc-prefix=PREFIX prefix malloc and related names with PREFIX + --custom-allocator=NAME use a supported custom allocator --disable-symver disable symbol versioning --enable-hardcoded-tables use hardcoded tables instead of runtime generation --disable-safe-bitstream-reader disable buffer boundary checking in bitreaders (faster, but may crash) - --enable-memalign-hack emulate memalign, interferes with memory debuggers --sws-max-filter-size=N the max filter size swscale uses [$sws_max_filter_size_default] Optimization options (experts only): @@ -364,6 +394,7 @@ --disable-fma3 disable FMA3 optimizations --disable-fma4 disable FMA4 optimizations --disable-avx2 disable AVX2 optimizations + --disable-aesni disable AESNI optimizations --disable-armv5te disable armv5te optimizations --disable-armv6 disable armv6 optimizations --disable-armv6t2 disable armv6t2 optimizations @@ -371,9 +402,7 @@ --disable-neon disable NEON optimizations --disable-inline-asm disable use of inline assembly --disable-yasm disable use of nasm/yasm assembly - --disable-mips32r5 disable MIPS32R5 optimizations - --disable-mips64r6 disable MIPS64R6 optimizations - --disable-mipsdspr1 disable MIPS DSP ASE R1 optimizations + --disable-mipsdsp disable MIPS DSP ASE R1 optimizations --disable-mipsdspr2 disable MIPS DSP ASE R2 optimizations --disable-msa disable MSA optimizations --disable-mipsfpu disable floating point MIPS optimizations @@ -416,6 +445,18 @@ } quotes='""' +if test -t 1 && which tput >/dev/null 2>&1; then + ncolors=$(tput colors) + if test -n "$ncolors" && test $ncolors -ge 8; then + bold_color=$(tput bold) + warn_color=$(tput setaf 3) + error_color=$(tput setaf 1) + reset_color=$(tput sgr0) + fi + # 72 used instead of 80 since that's the default of pr + ncols=$(tput cols) +fi +: ${ncols:=72} log(){ echo "$@" >> $logfile @@ -427,18 +468,14 @@ log END $1 } -echolog(){ - log "$@" - echo "$@" -} - warn(){ log "WARNING: $*" WARNINGS="${WARNINGS}WARNING: $*\n" } die(){ - echolog "$@" + log "$@" + echo "$error_color$bold_color$@$reset_color" cat < $TMPM log_file $TMPM - check_cmd $cc -Werror=missing-prototypes $CPPFLAGS $CFLAGS "$@" $CC_C $(cc_o $TMPO) $TMPM + check_cmd $objcc -Werror=missing-prototypes $CPPFLAGS $CFLAGS $OBJCFLAGS "$@" $OBJCC_C $(cc_o $TMPO) $TMPM } check_cpp(){ @@ -893,6 +946,25 @@ EOF } +check_inline_asm_flags(){ + log check_inline_asm_flags "$@" + name="$1" + code="$2" + flags='' + shift 2 + while [ "$1" != "" ]; do + append flags $1 + shift + done; + disable $name + cat > $TMPC <" echo "int main(void) { return 0; }" - } | check_oc && check_stat "$TMPO" && enable_safe $headers + } | check_objcc && check_stat "$TMPO" && enable_safe $headers } check_func(){ @@ -1032,6 +1117,21 @@ EOF } +check_complexfunc(){ + log check_complexfunc "$@" + func=$1 + narg=$2 + shift 2 + test $narg = 2 && args="f, g" || args="f * I" + disable $func + check_ld "cc" "$@" < +#include +float foo(complex float f, complex float g) { return $func($args); } +int main(void){ return (int) foo; } +EOF +} + check_mathfunc(){ log check_mathfunc "$@" func=$1 @@ -1055,10 +1155,16 @@ for hdr in $headers; do print_include $hdr done + echo "#include " for func in $funcs; do echo "long check_$func(void) { return (long) $func; }" done - echo "int main(void) { return 0; }" + echo "int main(void) { int ret = 0;" + # LTO could optimize out the test functions without this + for func in $funcs; do + echo " ret |= ((intptr_t)check_$func) & 0xFFFF;" + done + echo "return ret; }" } | check_ld "cc" "$@" && enable $funcs && enable_safe $headers } @@ -1094,16 +1200,23 @@ EOF } -check_lib(){ - log check_lib "$@" - header="$1" - func="$2" - shift 2 - check_header $header && check_func $func "$@" && add_extralibs "$@" +test_cflags_cc(){ + log test_cflags_cc "$@" + flags=$1 + header=$2 + condition=$3 + shift 3 + set -- $($cflags_filter "$flags") + check_cc "$@" < +#if !($condition) +#error "unsatisfied condition: $condition" +#endif +EOF } -check_lib2(){ - log check_lib2 "$@" +check_lib(){ + log check_lib "$@" headers="$1" funcs="$2" shift 2 @@ -1138,6 +1251,7 @@ } check_exec_crash(){ + log check_exec_crash "$@" code=$(cat) # exit() is not async signal safe. _Exit (C99) and _exit (POSIX) @@ -1208,19 +1322,12 @@ } require(){ - name="$1" - header="$2" - func="$3" - shift 3 - check_lib $header $func "$@" || die "ERROR: $name not found" -} - -require2(){ + log require "$@" name="$1" headers="$2" func="$3" shift 3 - check_lib2 "$headers" $func "$@" || die "ERROR: $name not found" + check_lib "$headers" $func "$@" || die "ERROR: $name not found" } require_cpp(){ @@ -1232,6 +1339,7 @@ } use_pkg_config(){ + log use_pkg_config "$@" pkg="$1" check_pkg_config "$@" || return 1 add_cflags $(get_safe "${pkg}_cflags") @@ -1286,7 +1394,7 @@ check_host_cppflags(){ log check_host_cppflags "$@" - check_host_cc "$@" < $logfile set >> $logfile test -n "$valgrind" && toolchain="valgrind-memcheck" case "$toolchain" in - clang-asan) - cc_default="clang" + *-asan) + cc_default="${toolchain%-asan}" add_cflags -fsanitize=address add_ldflags -fsanitize=address ;; - clang-tsan) - cc_default="clang" - add_cflags -fsanitize=thread -pie - add_ldflags -fsanitize=thread -pie - ;; - clang-usan) - cc_default="clang" - add_cflags -fsanitize=undefined - add_ldflags -fsanitize=undefined + *-msan) + cc_default="${toolchain%-msan}" + add_cflags -fsanitize=memory -fsanitize-memory-track-origins + add_ldflags -fsanitize=memory ;; - gcc-asan) - cc_default="gcc" - add_cflags -fsanitize=address - add_ldflags -fsanitize=address - ;; - gcc-tsan) - cc_default="gcc" - add_cflags -fsanitize=thread -pie -fPIC - add_ldflags -fsanitize=thread -pie -fPIC + *-tsan) + cc_default="${toolchain%-tsan}" + add_cflags -fsanitize=thread -fPIE + add_ldflags -fsanitize=thread -pie + case "$toolchain" in + gcc-tsan) + add_cflags -fPIC + add_ldflags -fPIC + ;; + esac ;; - gcc-usan) - cc_default="gcc" + *-usan) + cc_default="${toolchain%-usan}" add_cflags -fsanitize=undefined add_ldflags -fsanitize=undefined ;; - valgrind-massif) - target_exec_default=${valgrind:-"valgrind"} - target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc" - ;; - valgrind-memcheck) - target_exec_default=${valgrind:-"valgrind"} - target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp" + valgrind-*) + target_exec_default="valgrind" + case "$toolchain" in + valgrind-massif) + target_exec_args="--tool=massif --alloc-fn=av_malloc --alloc-fn=av_mallocz --alloc-fn=av_calloc --alloc-fn=av_fast_padded_malloc --alloc-fn=av_fast_malloc --alloc-fn=av_realloc_f --alloc-fn=av_fast_realloc --alloc-fn=av_realloc" + ;; + valgrind-memcheck) + target_exec_args="--error-exitcode=1 --malloc-fill=0x2a --track-origins=yes --leak-check=full --gen-suppressions=all --suppressions=$source_path/tests/fate-valgrind.supp" + ;; + esac ;; msvc) # Check whether the current MSVC version needs the C99 converter. @@ -3237,10 +3666,16 @@ add_cflags -fprofile-arcs -ftest-coverage add_ldflags -fprofile-arcs -ftest-coverage ;; + llvm-cov) + add_cflags -fprofile-arcs -ftest-coverage + add_ldflags --coverage + ;; hardened) add_cppflags -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 add_cflags -fno-strict-overflow -fstack-protector-all add_ldflags -Wl,-z,relro -Wl,-z,now + add_cflags -fPIE + add_ldexeflags -fPIE -pie ;; ?*) die "Unknown toolchain $toolchain" @@ -3290,7 +3725,7 @@ exesuf() { case $1 in - mingw32*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;; + mingw32*|mingw64*|win32|win64|cygwin*|*-dos|freedos|opendos|os/2*|symbian) echo .exe ;; esac } @@ -3413,6 +3848,7 @@ -lz) echo zlib.lib ;; -lavifil32) echo vfw32.lib ;; -lavicap32) echo vfw32.lib user32.lib ;; + -lx264) echo libx264.lib ;; -l*) echo ${flag#-l}.lib ;; -LARGEADDRESSAWARE) echo $flag ;; -L*) echo -libpath:${flag#-L} ;; @@ -3489,11 +3925,11 @@ westmere) echo -xtarget=westmere ;; silvermont) echo -xarch=sse4_2 ;; corei7-avx|sandybridge) echo -xtarget=sandybridge ;; - core-avx*|ivybridge|haswell|broadwell) + core-avx*|ivybridge|haswell|broadwell|skylake*|knl) echo -xarch=avx ;; amdfam10|barcelona) echo -xtarget=barcelona ;; btver1) echo -xarch=amdsse4a ;; - btver2|bdver*) echo -xarch=avx ;; + btver2|bdver*|znver*) echo -xarch=avx ;; athlon-4|athlon-[mx]p) echo -xarch=ssea ;; k8|opteron|athlon64|athlon-fx) echo -xarch=sse2a ;; @@ -3567,7 +4003,9 @@ gcc_ext_ver=$(expr "$gcc_version" : ".*$gcc_pkg_ver $gcc_basever \\(.*\\)") _ident=$(cleanws "gcc $gcc_basever $gcc_pkg_ver $gcc_ext_ver") case $gcc_basever in - 2*) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;; + 2) ;; + 2.*) ;; + *) _depflags='-MMD -MF $(@:.o=.d) -MT $@' ;; esac if [ "$first" = true ]; then case $gcc_basever in @@ -3628,7 +4066,7 @@ _ident=$($_cc --version 2>/dev/null | head -n1) _depflags='-MMD -MF $(@:.o=.d) -MT $@' _cflags_speed='-O3' - _cflags_size='-Os' + _cflags_size='-Oz' elif $_cc -V 2>&1 | grep -q Sun; then _type=suncc _ident=$($_cc -V 2>&1 | head -n1 | cut -d' ' -f 2-) @@ -3688,8 +4126,20 @@ _flags='-nologo -Qdiag-error:4044,10157' # -Qvec- -Qsimd- to prevent miscompilation, -GS, fp:precise for consistency # with MSVC which enables it by default. - _cflags='-D_USE_MATH_DEFINES -Qms0 -Qvec- -Qsimd- -GS -fp:precise' + _cflags='-Qms0 -Qvec- -Qsimd- -GS -fp:precise' disable stripping + elif $_cc -? 2>/dev/null | grep -q 'LLVM.*Linker'; then + # lld can emulate multiple different linkers; in ms link.exe mode, + # the -? parameter gives the help output which contains an identifyable + # string, while it gives an error in other modes. + _type=lld-link + # The link.exe mode doesn't have a switch for getting the version, + # but we can force it back to gnu mode and get the version from there. + _ident=$($_cc -flavor gnu --version 2>/dev/null) + _ld_o='-out:$@' + _flags_filter=msvc_flags + _ld_lib='lib%.a' + _ld_path='-libpath:' elif $_cc -nologo- 2>&1 | grep -q Microsoft; then _type=msvc _ident=$($_cc 2>&1 | head -n1) @@ -3708,7 +4158,6 @@ _ld_lib='lib%.a' _ld_path='-libpath:' _flags='-nologo' - _cflags='-D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS' disable stripping elif $_cc --version 2>/dev/null | grep -q ^cparser; then _type=cparser @@ -3755,16 +4204,22 @@ warn "Unknown C compiler $cc, unable to select optimal CFLAGS" : ${as_default:=$cc} +: ${objcc_default:=$cc} : ${dep_cc_default:=$cc} : ${ld_default:=$cc} : ${host_ld_default:=$host_cc} -set_default ar as dep_cc ld host_ld windres +set_default ar as objcc dep_cc ld ln_s host_ld windres probe_cc as "$as" asflags_filter=$_flags_filter add_asflags $_flags $_cflags set_ccvars AS +probe_cc objcc "$objcc" +objcflags_filter=$_flags_filter +add_objcflags $_flags $_cflags +set_ccvars OBJC + probe_cc ld "$ld" ldflags_filter=$_flags_filter add_ldflags $_flags $_ldflags @@ -3804,6 +4259,7 @@ add_cflags $extra_cflags add_cxxflags $extra_cxxflags +add_objcflags $extra_objcflags add_asflags $extra_cflags if test -n "$sysroot"; then @@ -3838,6 +4294,17 @@ } cpu=$(check_native -march || check_native -mcpu) ;; + clang) + check_native(){ + $cc $1=native -v -c -o $TMPO $TMPC >$TMPE 2>&1 || return + sed -n "/cc1.*-target-cpu /{ + s/.*-target-cpu \\([^ ]*\\).*/\\1/ + p + q + }" $TMPE + } + cpu=$(check_native -march) + ;; esac test "${cpu:-host}" = host && @@ -3853,6 +4320,16 @@ arch="arm" ;; mips*|IP*) + case "$arch" in + *el) + add_cppflags -EL + add_ldflags -EL + ;; + *eb) + add_cppflags -EB + add_ldflags -EB + ;; + esac arch="mips" ;; parisc*|hppa*) @@ -3867,7 +4344,7 @@ sh4|sh) arch="sh4" ;; - sun4u|sparc*) + sun4*|sparc*) arch="sparc" ;; tilegx|tile-gx) @@ -3906,26 +4383,26 @@ } probe_arm_arch() { - if check_arm_arch 4; then echo armv4; - elif check_arm_arch 4T; then echo armv4t; - elif check_arm_arch 5; then echo armv5; - elif check_arm_arch 5E; then echo armv5e; - elif check_arm_arch 5T; then echo armv5t; - elif check_arm_arch 5TE; then echo armv5te; - elif check_arm_arch 5TEJ; then echo armv5te; - elif check_arm_arch 6; then echo armv6; - elif check_arm_arch 6J; then echo armv6j; - elif check_arm_arch 6K; then echo armv6k; - elif check_arm_arch 6Z; then echo armv6z; - elif check_arm_arch 6ZK; then echo armv6zk; - elif check_arm_arch 6T2; then echo armv6t2; - elif check_arm_arch 7; then echo armv7; - elif check_arm_arch 7A 7_A; then echo armv7-a; - elif check_arm_arch 7S; then echo armv7-a; - elif check_arm_arch 7R 7_R; then echo armv7-r; - elif check_arm_arch 7M 7_M; then echo armv7-m; - elif check_arm_arch 7EM 7E_M; then echo armv7-m; - elif check_arm_arch 8A 8_A; then echo armv8-a; + if check_arm_arch 4; then echo armv4 + elif check_arm_arch 4T; then echo armv4t + elif check_arm_arch 5; then echo armv5 + elif check_arm_arch 5E; then echo armv5e + elif check_arm_arch 5T; then echo armv5t + elif check_arm_arch 5TE; then echo armv5te + elif check_arm_arch 5TEJ; then echo armv5te + elif check_arm_arch 6; then echo armv6 + elif check_arm_arch 6J; then echo armv6j + elif check_arm_arch 6K; then echo armv6k + elif check_arm_arch 6Z; then echo armv6z + elif check_arm_arch 6ZK; then echo armv6zk + elif check_arm_arch 6T2; then echo armv6t2 + elif check_arm_arch 7; then echo armv7 + elif check_arm_arch 7A 7_A; then echo armv7-a + elif check_arm_arch 7S; then echo armv7-a + elif check_arm_arch 7R 7_R; then echo armv7-r + elif check_arm_arch 7M 7_M; then echo armv7-m + elif check_arm_arch 7EM 7E_M; then echo armv7-m + elif check_arm_arch 8A 8_A; then echo armv8-a fi } @@ -3987,95 +4464,97 @@ cpuflags="-march=$cpu" - case $cpu in - 24kc) - disable mips32r5 - disable mips64r6 - disable mipsfpu - disable mipsdspr1 - disable mipsdspr2 - disable msa - ;; - 24kf*) - disable mips32r5 - disable mips64r6 - disable mipsdspr1 - disable mipsdspr2 - disable msa - ;; - 24kec|34kc|1004kc) - disable mips32r5 - disable mips64r6 - disable mipsfpu - disable mipsdspr2 - disable msa - ;; - 24kef*|34kf*|1004kf*) - disable mips32r5 - disable mips64r6 - disable mipsdspr2 - disable msa - ;; - 74kc) - disable mips32r5 - disable mips64r6 - disable mipsfpu - disable msa - ;; - 74kf) - disable mips32r5 - disable mips64r6 - disable msa - ;; - p5600) - disable mips64r6 - disable mipsdspr1 - disable mipsdspr2 - - check_cflags "-mtune=p5600" - ;; - i6400) - disable mips32r5 - disable mipsdspr1 - disable mipsdspr2 - disable mipsfpu - - check_cflags "-mtune=i6400 -mabi=64" - check_ldflags "-mabi=64" - ;; - loongson*) - disable mipsfpu - disable mips32r2 - disable mips32r5 - disable mips64r6 - disable mipsdspr1 - disable mipsdspr2 - disable msa - enable local_aligned_8 local_aligned_16 local_aligned_32 - enable simd_align_16 - enable fast_64bit - enable fast_clz - enable fast_cmov - enable fast_unaligned - disable aligned_stack - case $cpu in - loongson3*) - cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations" - ;; - loongson2e) - cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations" - ;; - loongson2f) - cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations" - ;; - esac - ;; - generic) - disable mips32r5 - disable mips64r6 - disable msa - ;; - esac + if [ "$cpu" != "generic" ]; then + disable mips32r2 + disable mips32r5 + disable mips64r2 + disable mips32r6 + disable mips64r6 + disable loongson2 + disable loongson3 + + case $cpu in + 24kc|24kf*|24kec|34kc|1004kc|24kef*|34kf*|1004kf*|74kc|74kf) + enable mips32r2 + disable msa + ;; + p5600|i6400|p6600) + disable mipsdsp + disable mipsdspr2 + ;; + loongson*) + enable loongson2 + enable loongson3 + enable local_aligned_8 local_aligned_16 local_aligned_32 + enable simd_align_16 + enable fast_64bit + enable fast_clz + enable fast_cmov + enable fast_unaligned + disable aligned_stack + disable mipsfpu + disable mipsdsp + disable mipsdspr2 + case $cpu in + loongson3*) + cpuflags="-march=loongson3a -mhard-float -fno-expensive-optimizations" + ;; + loongson2e) + cpuflags="-march=loongson2e -mhard-float -fno-expensive-optimizations" + ;; + loongson2f) + cpuflags="-march=loongson2f -mhard-float -fno-expensive-optimizations" + ;; + esac + ;; + *) + # Unknown CPU. Disable everything. + warn "unknown CPU. Disabling all MIPS optimizations." + disable mipsfpu + disable mipsdsp + disable mipsdspr2 + disable msa + disable mmi + ;; + esac + + case $cpu in + 24kc) + disable mipsfpu + disable mipsdsp + disable mipsdspr2 + ;; + 24kf*) + disable mipsdsp + disable mipsdspr2 + ;; + 24kec|34kc|1004kc) + disable mipsfpu + disable mipsdspr2 + ;; + 24kef*|34kf*|1004kf*) + disable mipsdspr2 + ;; + 74kc) + disable mipsfpu + ;; + p5600) + enable mips32r5 + check_cflags "-mtune=p5600" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" + ;; + i6400) + enable mips64r6 + check_cflags "-mtune=i6400 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" + ;; + p6600) + enable mips64r6 + check_cflags "-mtune=p6600 -mabi=64" && check_cflags "-msched-weight -mload-store-pairs -funroll-loops" && check_ldflags "-mabi=64" + ;; + esac + else + # We do not disable anything. Is up to the user to disable the unwanted features. + warn 'generic cpu selected' + fi elif enabled ppc; then @@ -4164,7 +4643,8 @@ ;; # targets that do support nopl and conditional mov (cmov) i686|pentiumpro|pentium[23]|pentium-m|athlon|athlon-tbird|athlon-4|athlon-[mx]p|athlon64*|k8*|opteron*|athlon-fx\ - |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|amdfam10|barcelona|b[dt]ver*) + |core*|atom|bonnell|nehalem|westmere|silvermont|sandybridge|ivybridge|haswell|broadwell|skylake*|knl\ + |amdfam10|barcelona|b[dt]ver*|znver*) cpuflags="-march=$cpu" enable i686 enable fast_cmov @@ -4182,6 +4662,7 @@ if [ "$cpu" != generic ]; then add_cflags $cpuflags add_asflags $cpuflags + test "$cc_type" = "$ld_type" && add_ldflags $cpuflags fi # compiler sanity check @@ -4199,7 +4680,16 @@ add_cppflags -D_ISOC99_SOURCE add_cxxflags -D__STDC_CONSTANT_MACROS -check_cflags -std=c99 +check_cxxflags -std=c++11 || check_cxxflags -std=c++0x + +# some compilers silently accept -std=c11, so we also need to check that the +# version macro is defined properly +if test_cflags_cc -std=c11 ctype.h "__STDC_VERSION__ >= 201112L"; then + add_cflags -std=c11 +else + check_cflags -std=c99 +fi + check_cc -D_FILE_OFFSET_BITS=64 < EOF @@ -4275,8 +4765,7 @@ enable section_data_rel_ro SLIB_INSTALL_NAME='$(SLIBNAME)' SLIB_INSTALL_LINKS= - # soname not set on purpose - SHFLAGS=-shared + SHFLAGS='-shared -Wl,-soname,$(SLIBNAME)' ;; haiku) prefix_default="/boot/common" @@ -4297,6 +4786,8 @@ echo "hwcap_1 = OVERRIDE;" > mapfile && add_ldflags -Wl,-M,mapfile nm_default='nm -P -g' + version_script='-M' + VERSION_SCRIPT_POSTPROCESS_CMD='perl $(SRC_PATH)/compat/solaris/make_sunver.pl - $(OBJS)' ;; netbsd) disable symver @@ -4323,7 +4814,8 @@ ;; darwin) enabled ppc && add_asflags -force_cpusubtype_ALL - SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(SHLIBDIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)' + install_name_dir_default='$(SHLIBDIR)' + SHFLAGS='-dynamiclib -Wl,-single_module -Wl,-install_name,$(INSTALL_NAME_DIR)/$(SLIBNAME_WITH_MAJOR),-current_version,$(LIBVERSION),-compatibility_version,$(LIBMAJOR)' enabled x86_32 && append SHFLAGS -Wl,-read_only_relocs,suppress strip="${strip} -x" add_ldflags -Wl,-dynamic,-search_paths_first @@ -4334,8 +4826,15 @@ enabled x86_64 && objformat="macho64" enabled_any pic shared x86_64 || { check_cflags -mdynamic-no-pic && add_asflags -mdynamic-no-pic; } + check_header dispatch/dispatch.h && + add_cppflags '-I\$(SRC_PATH)/compat/dispatch_semaphore' + version_script='-exported_symbols_list' + VERSION_SCRIPT_POSTPROCESS_CMD='tr " " "\n" | sed -n /global:/,/local:/p | grep ";" | tr ";" "\n" | sed -E "s/(.+)/_\1/g" | sed -E "s/(.+[^*])$$$$/\1*/"' ;; - mingw32*) + msys*) + die "Native MSYS builds are discouraged, please use the MINGW environment." + ;; + mingw32*|mingw64*) if test $target_os = "mingw32ce"; then disable network else @@ -4350,8 +4849,6 @@ LIBTARGET=arm-wince fi enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres - check_ldflags -Wl,--nxcompat - check_ldflags -Wl,--dynamicbase enabled x86_32 && check_ldflags -Wl,--large-address-aware shlibdir_default="$bindir_default" SLIBPREF="" @@ -4360,7 +4857,7 @@ SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)' dlltool="${cross_prefix}dlltool" if check_cmd lib.exe -list; then - SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe /machine:$(LIBTARGET) /def:$$(@:$(SLIBSUF)=.def) /out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)' + SLIB_EXTRA_CMD=-'sed -e "s/ @[^ ]*//" $$(@:$(SLIBSUF)=.orig.def) > $$(@:$(SLIBSUF)=.def); lib.exe -nologo -machine:$(LIBTARGET) -def:$$(@:$(SLIBSUF)=.def) -out:$(SUBDIR)$(SLIBNAME:$(SLIBSUF)=.lib)' if enabled x86_64; then LIBTARGET=x64 fi @@ -4371,10 +4868,25 @@ SLIB_INSTALL_LINKS= SLIB_INSTALL_EXTRA_SHLIB='$(SLIBNAME:$(SLIBSUF)=.lib)' SLIB_INSTALL_EXTRA_LIB='lib$(SLIBNAME:$(SLIBSUF)=.dll.a) $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=.def)' - SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--enable-auto-image-base' + SHFLAGS='-shared -Wl,--output-def,$$(@:$(SLIBSUF)=.orig.def) -Wl,--out-implib,$(SUBDIR)lib$(SLIBNAME:$(SLIBSUF)=.dll.a) -Wl,--enable-runtime-pseudo-reloc -Wl,--disable-auto-image-base' objformat="win32" ranlib=: enable dos_paths + check_ldflags -Wl,--nxcompat,--dynamicbase + # Lets work around some stupidity in binutils. + # ld will strip relocations from executables even though we need them + # for dynamicbase (ASLR). Using -pie does retain the reloc section + # however ld then forgets what the entry point should be (oops) so we + # have to manually (re)set it. + if enabled x86_32; then + disabled debug && add_ldexeflags -Wl,--pic-executable,-e,_mainCRTStartup + elif enabled x86_64; then + disabled debug && add_ldexeflags -Wl,--pic-executable,-e,mainCRTStartup + check_ldflags -Wl,--high-entropy-va # binutils 2.25 + # Set image base >4GB for extra entropy with HEASLR + add_ldexeflags -Wl,--image-base,0x140000000 + append SHFLAGS -Wl,--image-base,0x180000000 + fi ;; win32|win64) disable symver @@ -4415,6 +4927,7 @@ objformat="win32" enable dos_paths enabled shared && ! enabled small && check_cmd $windres --version && enable gnu_windres + add_cppflags -D_POSIX_C_SOURCE=200112 -D_XOPEN_SOURCE=600 ;; *-dos|freedos|opendos) network_extralibs="-lsocket" @@ -4432,7 +4945,6 @@ ;; os/2*) strip="lxlite -CS" - ln_s="cp -f" objformat="aout" add_cppflags -D_GNU_SOURCE add_ldflags -Zomf -Zbin-files -Zargs-wild -Zmap @@ -4440,16 +4952,18 @@ LIBSUF="_s.a" SLIBPREF="" SLIBSUF=".dll" - SLIBNAME_WITH_VERSION='$(SLIBPREF)$(NAME)-$(LIBVERSION)$(SLIBSUF)' - SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(NAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)' - SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(NAME).def; \ - echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(NAME).def; \ - echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(NAME).def; \ - echo EXPORTS >> $(SUBDIR)$(NAME).def; \ - emxexp $(OBJS) >> $(SUBDIR)$(NAME).def' - SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.a $(SUBDIR)$(NAME).def; \ - emximp -o $(SUBDIR)$(LIBPREF)$(NAME)_dll.lib $(SUBDIR)$(NAME).def;' - SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(NAME)_dll.a $(LIBPREF)$(NAME)_dll.lib' + SLIBNAME_WITH_VERSION='$(SLIBPREF)$(FULLNAME)-$(LIBVERSION)$(SLIBSUF)' + SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(shell echo $(FULLNAME) | cut -c1-6)$(LIBMAJOR)$(SLIBSUF)' + SLIB_CREATE_DEF_CMD='echo LIBRARY $(SLIBNAME_WITH_MAJOR:$(SLIBSUF)=) INITINSTANCE TERMINSTANCE > $(SUBDIR)$(FULLNAME).def; \ + echo CODE PRELOAD MOVEABLE DISCARDABLE >> $(SUBDIR)$(FULLNAME).def; \ + echo DATA PRELOAD MOVEABLE MULTIPLE NONSHARED >> $(SUBDIR)$(FULLNAME).def; \ + echo EXPORTS >> $(SUBDIR)$(FULLNAME).def; \ + emxexp $(OBJS) >> $(SUBDIR)$(FULLNAME).def' + SLIB_EXTRA_CMD='emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.a $(SUBDIR)$(FULLNAME).def; \ + emximp -o $(SUBDIR)$(LIBPREF)$(FULLNAME)_dll.lib $(SUBDIR)$(FULLNAME).def;' + SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)' + SLIB_INSTALL_LINKS= + SLIB_INSTALL_EXTRA_LIB='$(LIBPREF)$(FULLNAME)_dll.a $(LIBPREF)$(FULLNAME)_dll.lib' enable dos_paths enable_weak os2threads ;; @@ -4498,6 +5012,26 @@ ;; esac +# test if creating links works +link_dest=$(mktemp -u $TMPDIR/dest_XXXXXXXX) +link_name=$(mktemp -u $TMPDIR/name_XXXXXXXX) +mkdir "$link_dest" +$ln_s "$link_dest" "$link_name" +touch "$link_dest/test_file" +if [ "$source_path" != "." ] && ([ ! -d src ] || [ -L src ]) && [ -e "$link_name/test_file" ]; then + # create link to source path + [ -e src ] && rm src + $ln_s "$source_path" src + source_link=src +else + # creating directory links doesn't work + # fall back to using the full source path + source_link="$source_path" +fi +# cleanup +rm -r "$link_dest" +rm -r "$link_name" + # determine libc flavour probe_libc(){ @@ -4531,6 +5065,10 @@ (__MINGW32_MAJOR_VERSION == 3 && __MINGW32_MINOR_VERSION >= 15)" || die "ERROR: MinGW32 runtime version must be >= 3.15." add_${pfx}cppflags -U__STRICT_ANSI__ -D__USE_MINGW_ANSI_STDIO=1 + check_${pfx}cpp_condition _mingw.h "defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0502" || + add_${pfx}cppflags -D_WIN32_WINNT=0x0502 + check_${pfx}cpp_condition _mingw.h "__MSVCRT_VERSION__ < 0x0700" && + add_${pfx}cppflags -D__MSVCRT_VERSION__=0x0700 eval test \$${pfx_no_}cc_type = "gcc" && add_${pfx}cppflags -D__printf__=__gnu_printf__ elif check_${pfx}cpp_condition crtversion.h "defined _VC_CRT_MAJOR_VERSION"; then @@ -4545,6 +5083,7 @@ vsnprintf=avpriv_vsnprintf fi fi + add_${pfx}cppflags -D_USE_MATH_DEFINES -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_WARNINGS # The MSVC 2010 headers (Win 7.0 SDK) set _WIN32_WINNT to # 0x601 by default unless something else is set by the user. # This can easily lead to us detecting functions only present @@ -4564,6 +5103,10 @@ #endif #endif EOF + if [ "$pfx" = "" ]; then + check_func strtoll || add_cflags -Dstrtoll=_strtoi64 + check_func strtoull || add_cflags -Dstrtoull=_strtoui64 + fi elif check_${pfx}cpp_condition stddef.h "defined __KLIBC__"; then eval ${pfx}libc_type=klibc elif check_${pfx}cpp_condition sys/cdefs.h "defined __BIONIC__"; then @@ -4634,43 +5177,9 @@ build the shared libraries as well. To only build the shared libraries specify --disable-static in addition to --enable-shared. EOF - exit 1; + exit 1 fi -die_license_disabled() { - enabled $1 || { enabled $2 && die "$2 is $1 and --enable-$1 is not specified."; } -} - -die_license_disabled_gpl() { - enabled $1 || { enabled $2 && die "$2 is incompatible with the gpl and --enable-$1 is not specified."; } -} - -die_license_disabled gpl frei0r -die_license_disabled gpl libcdio -die_license_disabled gpl libsmbclient -die_license_disabled gpl libutvideo -die_license_disabled gpl libvidstab -die_license_disabled gpl libx264 -die_license_disabled gpl libx265 -die_license_disabled gpl libxavs -die_license_disabled gpl libxvid -die_license_disabled gpl libzvbi -die_license_disabled gpl x11grab - -die_license_disabled nonfree libaacplus -die_license_disabled nonfree libfaac -die_license_disabled nonfree nvenc -enabled gpl && die_license_disabled_gpl nonfree libfdk_aac -enabled gpl && die_license_disabled_gpl nonfree openssl - -die_license_disabled version3 libopencore_amrnb -die_license_disabled version3 libopencore_amrwb -die_license_disabled version3 libsmbclient -die_license_disabled version3 libvo_aacenc -die_license_disabled version3 libvo_amrwbenc - -enabled version3 && { enabled gpl && enable gplv3 || enable lgplv3; } - disabled optimizations || check_cflags -fomit-frame-pointer enable_weak_pic() { @@ -4833,6 +5342,9 @@ ra .dn d0.i16 .unreq ra EOF + check_as <= 0x0a060100" || die "ERROR: Decklink API version must be >= 10.6.1."; } } enabled frei0r && { check_header frei0r.h || die "ERROR: frei0r.h header not found"; } +enabled gmp && require gmp gmp.h mpz_export -lgmp enabled gnutls && require_pkg_config gnutls gnutls/gnutls.h gnutls_global_init +enabled jni && { [ $target_os = "android" ] && check_header jni.h && enabled pthreads && + check_lib "dlfcn.h" dlopen -ldl || die "ERROR: jni not found"; } enabled ladspa && { check_header ladspa.h || die "ERROR: ladspa.h header not found"; } enabled libiec61883 && require libiec61883 libiec61883/iec61883.h iec61883_cmp_connect -lraw1394 -lavc1394 -lrom1394 -liec61883 -enabled libaacplus && require "libaacplus >= 2.0.0" aacplus.h aacplusEncOpen -laacplus enabled libass && require_pkg_config libass ass/ass.h ass_library_init enabled libbluray && require_pkg_config libbluray libbluray/bluray.h bd_open enabled libbs2b && require_pkg_config libbs2b bs2b.h bs2b_open @@ -5223,14 +5778,11 @@ { check_lib celt/celt.h celt_decoder_create_custom -lcelt0 || die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } enabled libcaca && require_pkg_config caca caca.h caca_create_canvas -enabled libdcadec && require_pkg_config dcadec libdcadec/dca_context.h dcadec_context_create && - check_struct libdcadec/dca_context.h "struct dcadec_exss_info" matrix_encoding -enabled libfaac && require2 libfaac "stdint.h faac.h" faacEncGetVersion -lfaac enabled libfdk_aac && { use_pkg_config fdk-aac "fdk-aac/aacenc_lib.h" aacEncOpen || { require libfdk_aac fdk-aac/aacenc_lib.h aacEncOpen -lfdk-aac && warn "using libfdk without pkg-config"; } } flite_libs="-lflite_cmu_time_awb -lflite_cmu_us_awb -lflite_cmu_us_kal -lflite_cmu_us_kal16 -lflite_cmu_us_rms -lflite_cmu_us_slt -lflite_usenglish -lflite_cmulex -lflite" -enabled libflite && require2 libflite "flite/flite.h" flite_init $flite_libs +enabled libflite && require libflite "flite/flite.h" flite_init $flite_libs enabled fontconfig && enable libfontconfig enabled libfontconfig && require_pkg_config fontconfig "fontconfig/fontconfig.h" FcInit enabled libfreetype && require_libfreetype @@ -5240,23 +5792,30 @@ check_lib "${gsm_hdr}" gsm_create -lgsm && break; done || die "ERROR: libgsm not found"; } enabled libilbc && require libilbc ilbc.h WebRtcIlbcfix_InitDecode -lilbc -enabled libkvazaar && require_pkg_config "kvazaar < 0.7.0" kvazaar.h kvz_api_get +enabled libkvazaar && require_pkg_config "kvazaar >= 0.8.1" kvazaar.h kvz_api_get enabled libmfx && require_pkg_config libmfx "mfx/mfxvideo.h" MFXInit enabled libmodplug && require_pkg_config libmodplug libmodplug/modplug.h ModPlug_Load enabled libmp3lame && require "libmp3lame >= 3.98.3" lame/lame.h lame_set_VBR_quality -lmp3lame enabled libnut && require libnut libnut.h nut_demuxer_init -lnut +enabled libnpp && require libnpp npp.h nppGetLibVersion -lnppi -lnppc enabled libopencore_amrnb && require libopencore_amrnb opencore-amrnb/interf_dec.h Decoder_Interface_init -lopencore-amrnb enabled libopencore_amrwb && require libopencore_amrwb opencore-amrwb/dec_if.h D_IF_init -lopencore-amrwb -enabled libopencv && require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader +enabled libopencv && { check_header opencv2/core/core_c.h && + { use_pkg_config opencv opencv2/core/core_c.h cvCreateImageHeader || + require opencv opencv2/core/core_c.h cvCreateImageHeader -lopencv_core -lopencv_imgproc; } || + require_pkg_config opencv opencv/cxcore.h cvCreateImageHeader; } enabled libopenh264 && require_pkg_config openh264 wels/codec_api.h WelsGetCodecVersion -enabled libopenjpeg && { check_lib openjpeg.h opj_version -lopenmj2 -DOPJ_STATIC || - check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC || - check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC || +enabled libopenjpeg && { { check_lib openjpeg-2.1/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || + check_lib openjpeg-2.1/openjpeg.h opj_version -lopenjp2 || + { check_lib openjpeg-2.0/openjpeg.h opj_version -lopenjp2 -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || + { check_lib openjpeg-1.5/openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || + { check_lib openjpeg.h opj_version -lopenjpeg -DOPJ_STATIC && add_cppflags -DOPJ_STATIC; } || die "ERROR: libopenjpeg not found"; } +enabled libopenmpt && require_pkg_config "libopenmpt >= 0.2.6557" libopenmpt/libopenmpt.h openmpt_module_create enabled libopus && require_pkg_config opus opus_multistream.h opus_multistream_decoder_create enabled libpulse && require_pkg_config libpulse pulse/pulseaudio.h pa_context_new -enabled libquvi && require_pkg_config libquvi quvi/quvi.h quvi_init enabled librtmp && require_pkg_config librtmp librtmp/rtmp.h RTMP_Socket +enabled librubberband && require_pkg_config "rubberband >= 1.8.1" rubberband/rubberband-c.h rubberband_new enabled libschroedinger && require_pkg_config schroedinger-1.0 schroedinger/schro.h schro_init enabled libshine && require_pkg_config shine shine/layer3.h shine_encode_buffer enabled libsmbclient && { use_pkg_config smbclient libsmbclient.h smbc_init || @@ -5265,39 +5824,35 @@ enabled libsoxr && require libsoxr soxr.h soxr_create -lsoxr && LIBSOXR="-lsoxr" enabled libssh && require_pkg_config libssh libssh/sftp.h sftp_init enabled libspeex && require_pkg_config speex speex/speex.h speex_decoder_init -lspeex -enabled libstagefright_h264 && require_cpp libstagefright_h264 "binder/ProcessState.h media/stagefright/MetaData.h - media/stagefright/MediaBufferGroup.h media/stagefright/MediaDebug.h media/stagefright/MediaDefs.h - media/stagefright/OMXClient.h media/stagefright/OMXCodec.h" android::OMXClient -lstagefright -lmedia -lutils -lbinder -lgnustl_static +enabled libtesseract && require_pkg_config tesseract tesseract/capi.h TessBaseAPICreate enabled libtheora && require libtheora theora/theoraenc.h th_info_init -ltheoraenc -ltheoradec -logg enabled libtwolame && require libtwolame twolame.h twolame_init -ltwolame && { check_lib twolame.h twolame_encode_buffer_float32_interleaved -ltwolame || die "ERROR: libtwolame must be installed and version must be >= 0.3.10"; } -enabled libutvideo && require_cpp utvideo "stdint.h stdlib.h utvideo/utvideo.h utvideo/Codec.h" 'CCodec*' -lutvideo -lstdc++ enabled libv4l2 && require_pkg_config libv4l2 libv4l2.h v4l2_ioctl enabled libvidstab && require_pkg_config "vidstab >= 0.98" vid.stab/libvidstab.h vsMotionDetectInit -enabled libvo_aacenc && require libvo_aacenc vo-aacenc/voAAC.h voGetAACEncAPI -lvo-aacenc enabled libvo_amrwbenc && require libvo_amrwbenc vo-amrwbenc/enc_if.h E_IF_init -lvo-amrwbenc enabled libvorbis && require libvorbis vorbis/vorbisenc.h vorbis_info_init -lvorbisenc -lvorbis -logg enabled libvpx && { enabled libvpx_vp8_decoder && { use_pkg_config "vpx >= 0.9.1" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx || - check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx || + check_lib "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_dec_init_ver -lvpx || die "ERROR: libvpx decoder version must be >=0.9.1"; } enabled libvpx_vp8_encoder && { use_pkg_config "vpx >= 0.9.7" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx || - check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx || + check_lib "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VP8E_SET_MAX_INTRA_BITRATE_PCT" -lvpx || die "ERROR: libvpx encoder version must be >=0.9.7"; } enabled libvpx_vp9_decoder && { use_pkg_config "vpx >= 1.3.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx || - check_lib2 "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || + check_lib "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx" -lvpx || disable libvpx_vp9_decoder; } enabled libvpx_vp9_encoder && { use_pkg_config "vpx >= 1.3.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx || - check_lib2 "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx || + check_lib "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VP9E_SET_AQ_MODE" -lvpx || disable libvpx_vp9_encoder; } if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then @@ -5310,19 +5865,23 @@ enabled libwebp_encoder && require_pkg_config "libwebp >= 0.2.0" webp/encode.h WebPGetEncoderVersion enabled libwebp_anim_encoder && { use_pkg_config "libwebpmux >= 0.4.0" webp/mux.h WebPAnimEncoderOptionsInit || disable libwebp_anim_encoder; } } enabled libx264 && { use_pkg_config x264 "stdint.h x264.h" x264_encoder_encode || - { require libx264 x264.h x264_encoder_encode -lx264 && + { require libx264 "stdint.h x264.h" x264_encoder_encode -lx264 && warn "using libx264 without pkg-config"; } } && { check_cpp_condition x264.h "X264_BUILD >= 118" || die "ERROR: libx264 must be installed and version must be >= 0.118."; } && { check_cpp_condition x264.h "X264_MPEG2" && enable libx262; } enabled libx265 && require_pkg_config x265 x265.h x265_api_get && - { check_cpp_condition x265.h "X265_BUILD >= 57" || - die "ERROR: libx265 version must be >= 57."; } -enabled libxavs && require libxavs xavs.h xavs_encoder_encode -lxavs + { check_cpp_condition x265.h "X265_BUILD >= 68" || + die "ERROR: libx265 version must be >= 68."; } +enabled libxavs && require libxavs "stdint.h xavs.h" xavs_encoder_encode -lxavs enabled libxvid && require libxvid xvid.h xvid_global -lxvidcore +enabled libzimg && require_pkg_config "zimg >= 2.3.0" zimg.h zimg_get_api_version enabled libzmq && require_pkg_config libzmq zmq.h zmq_ctx_new -enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi +enabled libzvbi && require libzvbi libzvbi.h vbi_decoder_new -lzvbi && + { check_cpp_condition libzvbi.h "VBI_VERSION_MAJOR > 0 || VBI_VERSION_MINOR > 2 || VBI_VERSION_MINOR == 2 && VBI_VERSION_MICRO >= 28" || + enabled gpl || die "ERROR: libzvbi requires version 0.2.28 or --enable-gpl."; } +enabled mediacodec && { enabled jni || die "ERROR: mediacodec requires --enable-jni"; } enabled mmal && { check_lib interface/mmal/mmal.h mmal_port_connect -lmmal_core -lmmal_util -lmmal_vc_client -lbcm_host || { ! enabled cross_compile && { add_cflags -isystem/opt/vc/include/ -isystem/opt/vc/include/interface/vmcs_host/linux -isystem/opt/vc/include/interface/vcos/pthreads -fgnu89-inline ; @@ -5330,37 +5889,39 @@ check_lib interface/mmal/mmal.h mmal_port_connect ; } check_lib interface/mmal/mmal.h mmal_port_connect ; } || die "ERROR: mmal not found"; } -enabled nvenc && { check_header nvEncodeAPI.h || die "ERROR: nvEncodeAPI.h not found."; } && - { check_cpp_condition nvEncodeAPI.h "NVENCAPI_MAJOR_VERSION >= 5" || - die "ERROR: NVENC API version 4 or older is not supported"; } && - { [ $target_os != cygwin ] || die "ERROR: NVENC is not supported on Cygwin currently."; } +enabled mmal && check_func_headers interface/mmal/mmal.h "MMAL_PARAMETER_VIDEO_MAX_NUM_CALLBACKS" + +enabled netcdf && require_pkg_config netcdf netcdf.h nc_inq_libvers enabled openal && { { for al_libs in "${OPENAL_LIBS}" "-lopenal" "-lOpenAL32"; do check_lib 'AL/al.h' alGetError "${al_libs}" && break; done } || die "ERROR: openal not found"; } && { check_cpp_condition "AL/al.h" "defined(AL_VERSION_1_1)" || die "ERROR: openal must be installed and version must be 1.1 or compatible"; } -enabled opencl && { check_lib2 OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL || - check_lib2 CL/cl.h clEnqueueNDRangeKernel -lOpenCL || +enabled opencl && { check_lib OpenCL/cl.h clEnqueueNDRangeKernel -Wl,-framework,OpenCL || + check_lib CL/cl.h clEnqueueNDRangeKernel -lOpenCL || die "ERROR: opencl not found"; } && { check_cpp_condition "OpenCL/cl.h" "defined(CL_VERSION_1_2)" || check_cpp_condition "CL/cl.h" "defined(CL_VERSION_1_2)" || die "ERROR: opencl must be installed and version must be 1.2 or compatible"; } enabled opengl && { check_lib GL/glx.h glXGetProcAddress "-lGL" || - check_lib2 windows.h wglGetProcAddress "-lopengl32 -lgdi32" || - check_lib2 OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" || - check_lib2 ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" || + check_lib windows.h wglGetProcAddress "-lopengl32 -lgdi32" || + check_lib OpenGL/gl3.h glGetError "-Wl,-framework,OpenGL" || + check_lib ES2/gl.h glGetError "-isysroot=${sysroot} -Wl,-framework,OpenGLES" || die "ERROR: opengl not found." } -enabled openssl && { check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto || +enabled omx_rpi && enable omx +enabled omx && { check_header OMX_Core.h || + { ! enabled cross_compile && enabled omx_rpi && { + add_cflags -isystem/opt/vc/include/IL ; } + check_header OMX_Core.h ; } || + die "ERROR: OpenMAX IL headers not found"; } +enabled openssl && { use_pkg_config openssl openssl/ssl.h OPENSSL_init_ssl || + use_pkg_config openssl openssl/ssl.h SSL_library_init || + check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto || check_lib openssl/ssl.h SSL_library_init -lssl32 -leay32 || check_lib openssl/ssl.h SSL_library_init -lssl -lcrypto -lws2_32 -lgdi32 || die "ERROR: openssl not found"; } -enabled qtkit_indev && { check_header_oc QTKit/QTKit.h || disable qtkit_indev; } - -if enabled gnutls; then - { check_lib2 gmp.h mpz_export -lgmp && enable gmp; } || - { check_lib gcrypt.h gcry_mpi_new -lgcrypt && enable gcrypt; } -fi +enabled qtkit_indev && { check_header_objcc QTKit/QTKit.h || disable qtkit_indev; } # libdc1394 check if enabled libdc1394; then @@ -5370,36 +5931,49 @@ enable libdc1394_1; } || die "ERROR: No version of libdc1394 found " fi -if ! disabled sdl; then - SDL_CONFIG="${cross_prefix}sdl-config" - if check_pkg_config sdl SDL_events.h SDL_PollEvent; then - check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags && - check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags && - enable sdl + +if enabled gcrypt; then + GCRYPT_CONFIG="${cross_prefix}libgcrypt-config" + if "${GCRYPT_CONFIG}" --version > /dev/null 2>&1; then + gcrypt_cflags=$("${GCRYPT_CONFIG}" --cflags) + gcrypt_libs=$("${GCRYPT_CONFIG}" --libs) + check_func_headers gcrypt.h gcry_mpi_new $gcrypt_cflags $gcrypt_libs || + die "ERROR: gcrypt not found" + add_cflags $gcrypt_cflags && add_extralibs $gcrypt_libs else - if "${SDL_CONFIG}" --version > /dev/null 2>&1; then - sdl_cflags=$("${SDL_CONFIG}" --cflags) - sdl_libs=$("${SDL_CONFIG}" --libs) - check_func_headers SDL_version.h SDL_Linked_Version $sdl_cflags $sdl_libs && - check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x010201" $sdl_cflags && - check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x010300" $sdl_cflags && - enable sdl - elif enabled sdl ; then - die "ERROR: SDL not found" - else - disable sdl - fi + require gcrypt gcrypt.h gcry_mpi_new -lgcrypt + fi +fi + +disabled sdl && disable sdl2 +if ! disabled sdl2; then + SDL2_CONFIG="${cross_prefix}sdl2-config" + if check_pkg_config sdl2 SDL_events.h SDL_PollEvent; then + check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags && + check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags && + check_func SDL_Init $sdl2_libs $sdl2_cflags && enable sdl2 + else + if "${SDL2_CONFIG}" --version > /dev/null 2>&1; then + sdl2_cflags=$("${SDL2_CONFIG}" --cflags) + sdl2_libs=$("${SDL2_CONFIG}" --libs) + check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) >= 0x020001" $sdl2_cflags && + check_cpp_condition SDL.h "(SDL_MAJOR_VERSION<<16 | SDL_MINOR_VERSION<<8 | SDL_PATCHLEVEL) < 0x020100" $sdl2_cflags && + check_func SDL_Init $sdl2_libs $sdl2_cflags && enable sdl2 + fi fi if test $target_os = "mingw32"; then - sdl_libs="$sdl_libs -mconsole" + sdl2_libs="$sdl2_libs -mconsole" fi fi -enabled sdl && add_cflags $sdl_cflags && add_extralibs $sdl_libs +enabled sdl2 && enable sdl && add_cflags $sdl2_cflags && add_extralibs $sdl2_libs disabled securetransport || { check_func SecIdentityCreate "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && - check_lib2 "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && + check_lib "Security/SecureTransport.h Security/Security.h" "SSLCreateContext SecItemImport" "-Wl,-framework,CoreFoundation -Wl,-framework,Security" && enable securetransport; } +disabled schannel || { check_func_headers "windows.h security.h" InitializeSecurityContext -DSECURITY_WIN32 -lsecur32 && + check_cpp_condition winerror.h "defined(SEC_I_CONTEXT_EXPIRED)" && enable schannel && add_extralibs -lsecur32; } + makeinfo --version > /dev/null 2>&1 && enable makeinfo || disable makeinfo enabled makeinfo \ && [ 0$(makeinfo --version | grep "texinfo" | sed 's/.*texinfo[^0-9]*\([0-9]*\)\..*/\1/') -ge 5 ] \ @@ -5445,26 +6019,23 @@ check_header soundcard.h enabled_any alsa_indev alsa_outdev && - check_lib2 alsa/asoundlib.h snd_pcm_htimestamp -lasound + check_lib alsa/asoundlib.h snd_pcm_htimestamp -lasound -enabled jack_indev && check_lib2 jack/jack.h jack_client_open -ljack && check_func sem_timedwait && +enabled jack_indev && check_lib jack/jack.h jack_client_open -ljack && check_func jack_port_get_latency_range -ljack -enabled_any sndio_indev sndio_outdev && check_lib2 sndio.h sio_open -lsndio +enabled_any sndio_indev sndio_outdev && check_lib sndio.h sio_open -lsndio if enabled libcdio; then - check_lib2 "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || - check_lib2 "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || + check_lib "cdio/cdda.h cdio/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || + check_lib "cdio/paranoia/cdda.h cdio/paranoia/paranoia.h" cdio_cddap_open -lcdio_paranoia -lcdio_cdda -lcdio || die "ERROR: No usable libcdio/cdparanoia found" fi -enabled xlib && - check_lib X11/Xlib.h XOpenDisplay -lX11 || disable xlib - if ! disabled libxcb; then check_pkg_config "xcb >= 1.4" xcb/xcb.h xcb_connect || { enabled libxcb && die "ERROR: libxcb >= 1.4 not found"; - } && disable x11grab && enable libxcb + } && enable libxcb if enabled libxcb; then disabled libxcb_shm || { @@ -5487,12 +6058,6 @@ fi fi -if enabled x11grab; then - enabled xlib || die "ERROR: Xlib not found" - require Xext X11/extensions/XShm.h XShmCreateImage -lXext - require Xfixes X11/extensions/Xfixes.h XFixesGetCursorImage -lXfixes -fi - check_func_headers "windows.h" CreateDIBSection "$gdigrab_indev_extralibs" enabled dxva2api_h && @@ -5509,21 +6074,50 @@ check_lib va/va.h vaInitialize -lva || disable vaapi -enabled vaapi && enabled xlib && - check_lib2 "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 && - enable vaapi_x11 +enabled vaapi && + check_code cc "va/va.h" "vaCreateSurfaces(0, 0, 0, 0, 0, 0, 0, 0)" || + disable vaapi + +enabled vaapi && + check_lib "va/va.h va/va_drm.h" vaGetDisplayDRM -lva -lva-drm && + enable vaapi_drm enabled vdpau && check_cpp_condition vdpau/vdpau.h "defined VDP_DECODER_PROFILE_MPEG4_PART2_ASP" || disable vdpau +enabled_any vaapi vdpau && check_lib X11/Xlib.h XOpenDisplay -lX11 && enable xlib + +enabled vaapi && enabled xlib && + check_lib "va/va.h va/va_x11.h" vaGetDisplay -lva -lva-x11 && + enable vaapi_x11 + enabled vdpau && enabled xlib && - check_func_headers "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau && - prepend ffmpeg_libs $($ldflags_filter "-lvdpau") && + check_lib "vdpau/vdpau.h vdpau/vdpau_x11.h" vdp_device_create_x11 -lvdpau && enable vdpau_x11 +if enabled x86; then + case $target_os in + mingw32*|mingw64*|win32|win64|linux|cygwin*) + ;; + *) + disable cuda cuvid nvenc + ;; + esac +else + disable cuda cuvid nvenc +fi + +enabled nvenc && + check_cc -I$source_path < $TMPV -if test_ldflags -Wl,--version-script,$TMPV; then - append SHFLAGS '-Wl,--version-script,\$(SUBDIR)lib\$(NAME).ver' - check_cc < $TMPV + if test_ldflags -Wl,${version_script},$TMPV; then + append SHFLAGS '-Wl,${version_script},\$(SUBDIR)lib\$(NAME).ver' + check_cc <= 190024218" || + check_cflags -d2SSAOptimizer- + # enable utf-8 source processing on VS2015 U2 and newer + check_cpp_condition windows.h "_MSC_FULL_VER >= 190023918" && + add_cflags -utf-8 fi for pfx in "" host_; do @@ -5786,12 +6404,9 @@ fi enabled_all dxva2 dxva2api_cobj CoTaskMemFree && - prepend ffmpeg_libs $($ldflags_filter "-lole32" "-luser32") && + prepend ffmpeg_libs $($ldflags_filter "-lole32") && enable dxva2_lib -! enabled_any memalign posix_memalign aligned_malloc && - enabled simd_align_16 && enable memalign_hack - # add_dep lib dep # -> enable ${lib}_deps_${dep} # -> add $dep to ${lib}_deps only once @@ -5829,12 +6444,33 @@ fi done +if disabled stdatomic_h; then + if enabled atomics_gcc; then + add_cppflags '-I\$(SRC_PATH)/compat/atomics/gcc' + elif enabled atomics_win32; then + add_cppflags '-I\$(SRC_PATH)/compat/atomics/win32' + elif enabled atomics_suncc; then + add_cppflags '-I\$(SRC_PATH)/compat/atomics/suncc' + elif enabled pthreads; then + add_compat atomics/pthread/stdatomic.o + add_cppflags '-I\$(SRC_PATH)/compat/atomics/pthread' + else + enabled threads && die "Threading is enabled, but no atomics are available" + add_cppflags '-I\$(SRC_PATH)/compat/atomics/dummy' + fi +fi + +# Check if requested libraries were found. +for lib in $AUTODETECT_LIBS; do + requested $lib && ! enabled $lib && die "ERROR: $lib requested but not found"; +done + enabled zlib && add_cppflags -DZLIB_CONST # conditional library dependencies, in linking order +enabled afftfilt_filter && prepend avfilter_deps "avcodec" enabled amovie_filter && prepend avfilter_deps "avformat avcodec" enabled aresample_filter && prepend avfilter_deps "swresample" -enabled asyncts_filter && prepend avfilter_deps "avresample" enabled atempo_filter && prepend avfilter_deps "avcodec" enabled cover_rect_filter && prepend avfilter_deps "avformat avcodec" enabled ebur128_filter && enabled swresample && prepend avfilter_deps "swresample" @@ -5850,8 +6486,12 @@ enabled sab_filter && prepend avfilter_deps "swscale" enabled scale_filter && prepend avfilter_deps "swscale" enabled scale2ref_filter && prepend avfilter_deps "swscale" +enabled sofalizer_filter && prepend avfilter_deps "avcodec" +enabled showcqt_filter && prepend avfilter_deps "avformat avcodec swscale" +enabled showfreqs_filter && prepend avfilter_deps "avcodec" enabled showspectrum_filter && prepend avfilter_deps "avcodec" enabled smartblur_filter && prepend avfilter_deps "swscale" +enabled spectrumsynth_filter && prepend avfilter_deps "avcodec" enabled subtitles_filter && prepend avfilter_deps "avformat avcodec" enabled uspp_filter && prepend avfilter_deps "avcodec" @@ -5871,6 +6511,19 @@ map 'expand_deps $v' $LIBRARY_LIST +license="LGPL version 2.1 or later" +if enabled nonfree; then + license="nonfree and unredistributable" +elif enabled gplv3; then + license="GPL version 3 or later" +elif enabled lgplv3; then + license="LGPL version 3 or later" +elif enabled gpl; then + license="GPL version 2 or later" +fi + +if test "$quiet" != "yes"; then + echo "install prefix $prefix" echo "source path $source_path" echo "C compiler $cc" @@ -5899,6 +6552,7 @@ echo "3DNow! extended enabled ${amd3dnowext-no}" echo "SSE enabled ${sse-no}" echo "SSSE3 enabled ${ssse3-no}" + echo "AESNI enabled ${aesni-no}" echo "AVX enabled ${avx-no}" echo "XOP enabled ${xop-no}" echo "FMA3 enabled ${fma3-no}" @@ -5922,9 +6576,7 @@ fi if enabled mips; then echo "MIPS FPU enabled ${mipsfpu-no}" - echo "MIPS32R5 enabled ${mips32r5-no}" - echo "MIPS64R6 enabled ${mips64r6-no}" - echo "MIPS DSP R1 enabled ${mipsdspr1-no}" + echo "MIPS DSP R1 enabled ${mipsdsp-no}" echo "MIPS DSP R2 enabled ${mipsdspr2-no}" echo "MIPS MSA enabled ${msa-no}" echo "LOONGSON MMI enabled ${mmi-no}" @@ -5943,12 +6595,9 @@ echo "static ${static-no}" echo "shared ${shared-no}" echo "postprocessing support ${postproc-no}" -echo "new filter support ${avfilter-no}" echo "network support ${network-no}" echo "threading support ${thread_type-no}" echo "safe bitstream reader ${safe_bitstream_reader-no}" -echo "SDL support ${sdl-no}" -echo "opencl enabled ${opencl-no}" echo "texi2html enabled ${texi2html-no}" echo "perl enabled ${perl-no}" echo "pod2man enabled ${pod2man-no}" @@ -5958,35 +6607,34 @@ echo "random seed ${random_seed}" echo -echo "Enabled programs:" -print_enabled '' $PROGRAM_LIST | print_3_columns +echo "External libraries:" +print_enabled '' $EXTERNAL_LIBRARY_LIST | print_in_columns echo -echo "External libraries:" -print_enabled '' $EXTERNAL_LIBRARY_LIST | print_3_columns +echo "External libraries providing hardware acceleration:" +print_enabled '' $HWACCEL_LIBRARY_LIST | print_in_columns +echo + +echo "Libraries:" +print_enabled '' $LIBRARY_LIST | print_in_columns +echo + +echo "Programs:" +print_enabled '' $PROGRAM_LIST | print_in_columns echo for type in decoder encoder hwaccel parser demuxer muxer protocol filter bsf indev outdev; do echo "Enabled ${type}s:" eval list=\$$(toupper $type)_LIST - print_enabled '_*' $list | print_3_columns + print_enabled '_*' $list | print_in_columns echo done -license="LGPL version 2.1 or later" -if enabled nonfree; then - license="nonfree and unredistributable" -elif enabled gplv3; then - license="GPL version 3 or later" -elif enabled lgplv3; then - license="LGPL version 3 or later" -elif enabled gpl; then - license="GPL version 2 or later" -fi - echo "License: $license" -echo "Creating config.mak, config.h, and doc/config.texi..." +echo "Creating configuration files ..." + +fi # test "$quiet" != "yes" test -e Makefile || echo "include $source_path/Makefile" > Makefile @@ -6008,7 +6656,9 @@ DOCDIR=\$(DESTDIR)$docdir MANDIR=\$(DESTDIR)$mandir PKGCONFIGDIR=\$(DESTDIR)$pkgconfigdir +INSTALL_NAME_DIR=$install_name_dir SRC_PATH=$source_path +SRC_LINK=$source_link ifndef MAIN_MAKEFILE SRC_PATH:=\$(SRC_PATH:.%=..%) endif @@ -6018,6 +6668,7 @@ CC=$cc CXX=$cxx AS=$as +OBJCC=$objcc LD=$ld DEPCC=$dep_cc DEPCCFLAGS=$DEPCCFLAGS \$(CPPFLAGS) @@ -6035,9 +6686,13 @@ CPPFLAGS=$CPPFLAGS CFLAGS=$CFLAGS CXXFLAGS=$CXXFLAGS +OBJCFLAGS=$OBJCFLAGS ASFLAGS=$ASFLAGS AS_C=$AS_C AS_O=$AS_O +OBJCC_C=$OBJCC_C +OBJCC_E=$OBJCC_E +OBJCC_O=$OBJCC_O CC_C=$CC_C CC_E=$CC_E CC_O=$CC_O @@ -6091,7 +6746,7 @@ TARGET_EXEC=$target_exec $target_exec_args TARGET_PATH=$target_path TARGET_SAMPLES=${target_samples:-\$(SAMPLES)} -CFLAGS-ffplay=$sdl_cflags +CFLAGS-ffplay=${sdl2_cflags} ZLIB=$($ldflags_filter -lz) LIB_INSTALL_EXTRA_CMD=$LIB_INSTALL_EXTRA_CMD EXTRALIBS=$extralibs @@ -6108,6 +6763,7 @@ SLIB_INSTALL_LINKS=${SLIB_INSTALL_LINKS} SLIB_INSTALL_EXTRA_LIB=${SLIB_INSTALL_EXTRA_LIB} SLIB_INSTALL_EXTRA_SHLIB=${SLIB_INSTALL_EXTRA_SHLIB} +VERSION_SCRIPT_POSTPROCESS_CMD=${VERSION_SCRIPT_POSTPROCESS_CMD} SAMPLES:=${samples:-\$(FATE_SAMPLES)} NOREDZONE_FLAGS=$noredzone_flags EOF @@ -6141,7 +6797,7 @@ #define FFMPEG_CONFIG_H #define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)" #define FFMPEG_LICENSE "$(c_escape $license)" -#define CONFIG_THIS_YEAR 2016 +#define CONFIG_THIS_YEAR 2017 #define FFMPEG_DATADIR "$(eval c_escape $datadir)" #define AVCONV_DATADIR "$(eval c_escape $datadir)" #define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})" @@ -6171,7 +6827,7 @@ mkdir -p doc mkdir -p tests mkdir -p tests/api -echo "@c auto-generated by configure" > doc/config.texi +echo "@c auto-generated by configure - do not modify! " > doc/config.texi print_config ARCH_ "$config_files" $ARCH_LIST print_config HAVE_ "$config_files" $HAVE_LIST @@ -6200,8 +6856,25 @@ cp_if_changed $TMPH libavutil/avconfig.h +# generate the lists of enabled components +print_enabled_components(){ + file=$1 + struct_name=$2 + name=$3 + shift 3 + echo "static const $struct_name *$name[] = {" > $TMPH + for c in $*; do + enabled $c && printf " &ff_%s,\n" $c >> $TMPH + done + echo " NULL };" >> $TMPH + cp_if_changed $TMPH $file +} + +print_enabled_components libavcodec/bsf_list.c AVBitStreamFilter bitstream_filters $BSF_LIST +print_enabled_components libavformat/protocol_list.c URLProtocol url_protocols $PROTOCOL_LIST + if test -n "$WARNINGS"; then - printf "\n$WARNINGS" + printf "\n%s%s$WARNINGS%s" "$warn_color" "$bold_color" "$reset_color" enabled fatal_warnings && exit 1 fi @@ -6241,7 +6914,7 @@ mkdir -p doc/examples/pc-uninstalled includedir=${source_path} [ "$includedir" = . ] && includedir="\${pcfiledir}/../../.." - cat < doc/examples/pc-uninstalled/$name.pc + cat < doc/examples/pc-uninstalled/${name}-uninstalled.pc prefix= exec_prefix= libdir=\${pcfiledir}/../../../$name diff -Nru ffmpeg-2.8.6/CONTRIBUTING.md ffmpeg-3.3.3/CONTRIBUTING.md --- ffmpeg-2.8.6/CONTRIBUTING.md 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/CONTRIBUTING.md 2017-07-29 17:49:28.000000000 +0000 @@ -0,0 +1,4 @@ +# Note to Github users +Patches should be submitted to the [ffmpeg-devel mailing list](https://ffmpeg.org/mailman/listinfo/ffmpeg-devel) using `git format-patch` or `git send-email`. Github pull requests should be avoided because they are not part of our review process and **will be ignored**. + +See [https://ffmpeg.org/developer.html#Contributing](https://ffmpeg.org/developer.html#Contributing) for more information. diff -Nru ffmpeg-2.8.6/debian/changelog ffmpeg-3.3.3/debian/changelog --- ffmpeg-2.8.6/debian/changelog 2016-03-14 19:20:44.000000000 +0000 +++ ffmpeg-3.3.3/debian/changelog 2017-08-12 13:32:47.000000000 +0000 @@ -1,17 +1,387 @@ -ffmpeg (7:2.8.6-1ubuntu2) xenial; urgency=medium +ffmpeg (7:3.3.3-2~ubuntu16.04.1~ppa1) xenial; urgency=medium - * No-change rebuild for zeromq3 transition. + * No-change backport to xenial - -- Matthias Klose Mon, 14 Mar 2016 19:20:44 +0000 + -- Gianfranco Costamagna Sat, 12 Aug 2017 15:32:47 +0200 -ffmpeg (7:2.8.6-1ubuntu1) xenial; urgency=low +ffmpeg (7:3.3.3-2) unstable; urgency=medium - * Merge from Debian unstable. Remaining changes: - - Compile with -O2 rather than -O3 on s390x, to work around - https://bugs.launchpad.net/bugs/1526324. - * Should fix LP: #1533367 + * Team upload. + * Add 0005-arm-thumb2-blx.patch to fix SIGBUS on armhf. + Thanks to Jiong Wang. (Closes: #870622) - -- Iain Lane Thu, 25 Feb 2016 17:48:20 +0000 + -- James Cowgill Tue, 08 Aug 2017 21:53:47 -0400 + +ffmpeg (7:3.3.3-1) unstable; urgency=medium + + * Team upload. + * New upstream release. + - Fixes testsuite failure on arm64. (Closes: #870050) + * Add patches to fix testsuite failures on big-endian. (Closes: #870048) + - 0001-sws-tests-pixdesc_query-replace-rgb-based-pix-fmts-w.patch. + - 0002-swscale-fix-gbrap16-alpha-channel-issues.patch to fix. This patch + also fixes some other alpha channel issues with the gbrap16 pixel + formats. + + * debian/rules: + - Disable more MIPS optimization options which might not be available on + all processors. + + -- James Cowgill Tue, 01 Aug 2017 16:08:54 +0100 + +ffmpeg (7:3.3.2-1) unstable; urgency=medium + + * Team upload. + + [ Reinhard Tartler ] + * New upstream release. (Closes: #869112) + - Comes with internal ebur128 library, so drop build-dependency on + libebur128-dev. + + [ James Cowgill ] + * debian/copyright: + - Update. + * debian/tests: + - Use '-pix_fmt yuv422p' in dnxhd autopkgtests. + - Update encdec_list.txt. + + -- James Cowgill Wed, 26 Jul 2017 21:06:44 +0100 + +ffmpeg (7:3.2.6-1) unstable; urgency=medium + + * Team upload. + * New upstream release. + * debian/control: Bump Standards-Version. + + -- Sebastian Ramacher Wed, 21 Jun 2017 22:07:55 +0200 + +ffmpeg (7:3.2.5-1) unstable; urgency=medium + + * Team upload. + * New upstream release. + + -- Sebastian Ramacher Mon, 22 May 2017 22:03:36 +0200 + +ffmpeg (7:3.2.4-1) unstable; urgency=medium + + * Import new upstream bugfix release 3.2.4. + - Fixes CVE-2016-9561, CVE-2017-5024 and CVE-2017-5025. + * Drop patches, included upstream: + - lavf-chromaprint-Update-for-version-1.4.patch + - libopenmpt-add-missing-avio_read-return-value-check.patch + - swscale-save-ebx-register-when-it-is-not-available.patch + + -- Andreas Cadhalpun Fri, 10 Feb 2017 22:24:45 +0100 + +ffmpeg (7:3.2.2-2) unstable; urgency=medium + + * Cherry-pick patches from upstream: + - Fix building with chromaprint 1.4. (Closes: #851026) + - Fix building with --disable-pic on gcc-4.8. + - Fix heap-buffer-overflows when using libopenmpt. + * Re-enable chromaprint on sh4 and libx264 on powerpcspe. + * Update packaging copyright years. + * Switch from libmodplug to libopenmpt. (Closes: #849840) + + -- Andreas Cadhalpun Sat, 21 Jan 2017 22:39:40 +0100 + +ffmpeg (7:3.2.2-1) unstable; urgency=medium + + * Import new upstream bugfix release 3.2.2. + * Fix log messages in autopkgtest. + * Enable frei0r on powerpcspe. + * Drop --disable-tesseract. + + -- Andreas Cadhalpun Tue, 06 Dec 2016 23:58:20 +0100 + +ffmpeg (7:3.2.1-1) unstable; urgency=medium + + [ Balint Reczey ] + * Call dh_auto_install with -a/-i for -arch and for -indep targets + respectively + + [ Andreas Cadhalpun ] + * Import new upstream bugfix release 3.2.1. + * Don't enable x11grab, which has been replaced with xcb. + * Add build-dependency on autodetected libxcb-shm0-dev. (Closes: #843144) + * Add explicit build-dependencies for autodetected features. + * Remove patches, fixed upstream. + - Revert-avformat-hls-Fix-missing-streams-in-some-case.patch + - apng-use-side-data-to-pass-extradata-to-muxer.patch + - doc-fix-spelling-errors.patch + - pixblockdsp-disable-altivec-optimizations-on-ppc64be.patch + * Disable libschroedinger entirely. (see #845037) + * Enable omx. + * Update build-dependencies for some ports. + - m68k: enable chromaprint + - powerpcspe: enable chromaprint, openal, opencv + - sh4: disable chromaprint + * Add streamcopy testing to the autopkgtest. + * Update encdec_list.txt. + + -- Andreas Cadhalpun Sat, 26 Nov 2016 23:44:53 +0100 + +ffmpeg (7:3.2-2) unstable; urgency=medium + + * Fix FTBFS on powerpc and arch-independent build. + * Add patch to fix test failures on ppc64. + - pixblockdsp-disable-altivec-optimizations-on-ppc64be.patch + + -- Andreas Cadhalpun Tue, 01 Nov 2016 00:42:03 +0100 + +ffmpeg (7:3.2-1) unstable; urgency=medium + + * Import new major upstream release 3.2. + * Drop patches, included upstream: + - ffmpeg_opt-Suggest-to-use-file-.-if-a-protocol-was-not-fo.patch + - lavf-mp3enc-write-encoder-delay-padding-upon-closing.patch + - doc-fix-spelling-errors.patch + - faq-use-relative-links-to-own-documentation.patch + - tests-checkasm-pixblockdsp-Test-8-byte-aligned-positions.patch + * Switch to SDL 2. + * Update comments in debian/rules and drop cruft. + * Update debian/copyright. + * Add patches to fix autopkgtest failures and spelling errors: + - apng-use-side-data-to-pass-extradata-to-muxer.patch + - Revert-avformat-hls-Fix-missing-streams-in-some-case.patch + - doc-fix-spelling-errors.patch + * Update debian/tests_encdec_list.txt. + * Build static libraries without -fPIC as required by policy 10.2. + * Disable uninstallable BDs on m68k and powerpcspe: + - powerpcspe: openal, netcdf, frei0r, opencv, x264 and chromaprint. + - m68k: chromaprint + * Avoid needlessly re-running configure. + + -- Andreas Cadhalpun Sun, 30 Oct 2016 10:15:11 +0100 + +ffmpeg (7:3.1.5-1) unstable; urgency=medium + + * Import new upstream bugfix release 3.1.5. + * Use nasm instead of yasm. + - Unlike yasm it is actively maintained upstream. + - And it doesn't embed the full build path as DW_AT_comp_dir. + (This should make ffmpeg fully reproducible.) + * Drop patches, fixed differently upstream: + - disable-opj-static.patch + - libopenjpegenc-recreate-image-data-buffer.patch + * Add patches from upstream: + - doc-fix-spelling-errors.patch (Closes: #839542) + - faq-use-relative-links-to-own-documentation.patch (Closes: #841501) + - ffmpeg_opt-Suggest-to-use-file-.-if-a-protocol-was-not-fo.patch + (Closes: #785690) + - lavf-mp3enc-write-encoder-delay-padding-upon-closing.patch + (Closes: #797965) + - tests-checkasm-pixblockdsp-Test-8-byte-aligned-positions.patch + (LP: #1612058) + * Use debhelper compat 10. + - Parallel building is now the default. + * Revert: Enable all hardening options except pie. + - It doesn't have any effect, anyway. + - PIE is now the default. + * Adapt lintian overrides to PIE by default. + + -- Andreas Cadhalpun Sat, 22 Oct 2016 22:33:02 +0200 + +ffmpeg (7:3.1.4-1) unstable; urgency=medium + + [ Ondřej Nový ] + * Disable librtmp support, because the built-in RTMP support is better. + + [ Andreas Cadhalpun ] + * Import new upstream bugfix release 3.1.4. + - Fixes CVE-2016-7122, CVE-2016-7450, CVE-2016-7502, CVE-2016-7555, + CVE-2016-7562, CVE-2016-7785 and CVE-2016-7905. (Closes: #840434) + * Fix typos. + * Replace libopencv-dev build-dependency with libopencv-imgproc-dev. + * Improve build-time optimization for libavfilter-extra. + * Mention sofalizer in libavfilter-extra6 description. + * Remove redundant nocheck test. + * Add libopenjpegenc-recreate-image-data-buffer.patch to fix autopkg + test crashes. + * Let the encdec test print the command before executing it. + * Update encdec*_list.txt. + * Re-enable the libopenjpeg decoder. + * Enable libzmq on hurd, as it is now available there. + * Use 'set -e' to abort build on configure failure. + * Only set CC/CXX if they differ from the default. + * Set configure options for cross-building. + + -- Andreas Cadhalpun Tue, 11 Oct 2016 21:17:10 +0200 + +ffmpeg (7:3.1.3-2) unstable; urgency=medium + + * Team upload. + + [ Balint Reczey ] + * Enable OCR using Tesseract in libavfilter-extra* (Closes: 822555) + + [ Sebastian Ramacher ] + * debian/libavcodec*.lintian-overrides: Remove unused lintian override. + * debian/rules: + - Enable all hardening options except pie. + - Apply the same optimization for libavfilter extra flavor. + * debian/{control,rules}: Build libavfilter extra flavor with --enable-netcdf. + + -- Sebastian Ramacher Wed, 28 Sep 2016 21:42:19 +0200 + +ffmpeg (7:3.1.3-1) unstable; urgency=medium + + * Team upload. + * New upstream release. + * debian/{rules,*.symbols}: Remove symbol files and generate tighter + dependencies using a dh_makeshlibs override. (Closes: #835645) + * debian/copyright: Fix dep5-copyright-license-name-not-unique. + + -- Sebastian Ramacher Sun, 28 Aug 2016 12:12:44 +0200 + +ffmpeg (7:3.1.2-1) unstable; urgency=medium + + * New upstream release. + * debian/patches: + - fix-vaapi-default-values.patch: Removed, applied upstream. + - Revert-configure-Enable-GCC-vectorization-on-4.9-on-.patch: Removed, + included upstream. + + -- Sebastian Ramacher Wed, 10 Aug 2016 20:42:29 +0200 + +ffmpeg (7:3.1.1-4) unstable; urgency=high + + * debian/control: + - Remove obsolete Conflicts. + - Remove obsolete Breaks against dmo packages. + * debian/patches/fix-vaapi-default-values.patch: Use local independent + default values. Thanks to Carl Eugen Hoyos. (Closes: #831529) + + -- Sebastian Ramacher Wed, 03 Aug 2016 15:16:59 +0200 + +ffmpeg (7:3.1.1-3) unstable; urgency=medium + + [ James Clarke ] + * debian/rules: Re-enable x264 on sparc64 as the linker has been fixed. + (Closes: #831582) + + [ Sebastian Ramacher ] + * debian/patches/Revert-configure-Enable-GCC-vectorization-on-4.9-on-.patch: + Apply upstream patch to disable GCC vectorization. + + -- Sebastian Ramacher Thu, 21 Jul 2016 20:26:12 +0200 + +ffmpeg (7:3.1.1-2) unstable; urgency=medium + + * Team upload. + + [ Aurelien Jarno ] + * debian/rules: Fix FTBFS on mips64el by adding --disable-mips64r6. (Closes: + #830868) + + -- Sebastian Ramacher Tue, 12 Jul 2016 16:38:52 +0200 + +ffmpeg (7:3.1.1-1) unstable; urgency=medium + + * Team upload. + * New upstream release. + * debian/rules: + - Really build with opencv everywhere. (Closes: #827868) + - Remove obsolete comments. + - Build with --enable-libebur128. + * debian/patches + - lavf-mpegts-Return-small-probe-score-for-very-short-.patch: Removed, + included upstream. + - disable-opj-static.patch: Do not define OPJ_STATIC when building against + openjpeg 2.1.x. + * debian/control: Add libebur128-dev to B-D. + * debian/copyright: + - Add new copyright holders. + - Update copyright years. + + -- Sebastian Ramacher Tue, 12 Jul 2016 09:37:46 +0200 + +ffmpeg (7:3.0.2-4) unstable; urgency=medium + + * debian/control: Switch to libopenjp2-7-dev. (Closes: #826812) + + -- Sebastian Ramacher Sat, 11 Jun 2016 11:19:42 +0200 + +ffmpeg (7:3.0.2-3) unstable; urgency=medium + + * Team upload. + + [ Balint Reczey ] + * Build-depend on libx265-dev (>= 1.8) + + [ Sebastian Ramacher ] + * debian/rules: + - No longer disable i686 optimization on i386 based architectures. + - Disable mips32r6 for all mips architectures. + * debian/copyright: Remove an extra 'with'. + + -- Sebastian Ramacher Wed, 01 Jun 2016 20:43:32 +0200 + +ffmpeg (7:3.0.2-2) unstable; urgency=medium + + * Team upload. + * debian/rules: Build with --disable-mips32r6 on mips(el) to fix FTBFS + there. + + -- Sebastian Ramacher Fri, 13 May 2016 16:49:23 +0200 + +ffmpeg (7:3.0.2-1) unstable; urgency=medium + + * Team upload. + * New upstream release (Closes: #823633). + * debian/patches/lavf-mpegts-Return-small-probe-score-for-very-short-.patch: + Upstream patch to fix regression in aac in mpegts. (Closes: #823098) + + -- Sebastian Ramacher Sun, 08 May 2016 19:53:57 +0200 + +ffmpeg (7:3.0.1-3) unstable; urgency=medium + + * Team upload. + * Upload to unstable. + + -- Sebastian Ramacher Sun, 17 Apr 2016 19:24:37 +0200 + +ffmpeg (7:3.0.1-2) experimental; urgency=medium + + * debian/control: Let libavcodec-extra depend on an existing package. + + -- Sebastian Ramacher Mon, 11 Apr 2016 20:26:41 +0200 + +ffmpeg (7:3.0.1-1) experimental; urgency=medium + + * Team upload. + * New upstream release. + * debian/*.install.powerpc: Remove extra -ffmpeg from filenames. + * debian/control: Bump Standards-Version. + + -- Sebastian Ramacher Mon, 11 Apr 2016 17:51:27 +0200 + +ffmpeg (7:3.0-1) experimental; urgency=medium + + * Team upload. + * New upstream release. + * SONAME bump and no longer add -ffmpeg to SONAMES. + * debian/{rules,control}: Use automatic debug symbol packages. + * debian/patches/{build-make-out-of-tree-builds-bit-identical-to-in-tr, + doc-make-apidoc-output-independent-of-SRC_PATH}.patch: Removed, included + upstream. + * debian/missing-sources/ffmpeg-web/src/less/style.less: Update from GitHub. + * debian/copyright: Update copyright years and add new copyright holders. + * debian/rules: + - Honor nocheck. + - Simplify CPU check. + - No longer build with --enable-libvo_aacenc. + - Update use of --disable-mipsdspr1. + - Build with --enable-chromaprint and --enable-librubberband. + - Do not run tests for -indep builds. + - Always fail loop on error. + * debian/control: + - Update Vcs-Git. + - New Build-Depends: libchromaprint-dev, librubberband-dev. + - Removed Build-Depends: libvo-aacenc-dev. + - Update Description. + + -- Sebastian Ramacher Tue, 08 Mar 2016 01:58:44 +0100 ffmpeg (7:2.8.6-1) unstable; urgency=medium @@ -35,31 +405,6 @@ -- Andreas Cadhalpun Fri, 15 Jan 2016 20:23:56 +0100 -ffmpeg (7:2.8.4-1ubuntu4) xenial; urgency=medium - - * No-change rebuild for gnutls transition. - - -- Matthias Klose Wed, 17 Feb 2016 22:41:03 +0000 - -ffmpeg (7:2.8.4-1ubuntu3) xenial; urgency=medium - - * No-change rebuild for x265 transition. - - -- Matthias Klose Fri, 12 Feb 2016 09:46:11 +0000 - -ffmpeg (7:2.8.4-1ubuntu2) xenial; urgency=medium - - * Rebuild against libvpx3. - - -- Colin Watson Thu, 07 Jan 2016 00:55:36 +0000 - -ffmpeg (7:2.8.4-1ubuntu1) xenial; urgency=medium - - * Compile with -O2 rather than -O3 on s390x, to work around - https://bugs.launchpad.net/bugs/1526324. - - -- Colin Watson Thu, 24 Dec 2015 03:15:28 +0000 - ffmpeg (7:2.8.4-1) unstable; urgency=medium * Import new upstream bugfix release 2.8.4. diff -Nru ffmpeg-2.8.6/debian/compat ffmpeg-3.3.3/debian/compat --- ffmpeg-2.8.6/debian/compat 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/compat 2017-08-05 14:03:46.000000000 +0000 @@ -1 +1 @@ -9 +10 diff -Nru ffmpeg-2.8.6/debian/control ffmpeg-3.3.3/debian/control --- ffmpeg-2.8.6/debian/control 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/control 2017-08-05 14:03:46.000000000 +0000 @@ -1,14 +1,13 @@ Source: ffmpeg Section: video Priority: optional -Maintainer: Ubuntu Developers -XSBC-Original-Maintainer: Debian Multimedia Maintainers +Maintainer: Debian Multimedia Maintainers Uploaders: Andreas Cadhalpun , Alexander Strasser , Reinhard Tartler , Balint Reczey Homepage: https://ffmpeg.org/ -Standards-Version: 3.9.7 +Standards-Version: 4.0.0 Vcs-Git: https://anonscm.debian.org/git/pkg-multimedia/ffmpeg.git Vcs-Browser: https://anonscm.debian.org/cgit/pkg-multimedia/ffmpeg.git Build-Depends-Indep: @@ -20,7 +19,7 @@ node-less Build-Depends: # needed for dh - debhelper (>= 9.20141010), + debhelper (>= 10), # for build-profile support dpkg-dev (>= 1.17.14), # --enable-libflite @@ -41,6 +40,8 @@ libcaca-dev, # --enable-libcdio libcdio-paranoia-dev, +# --enable-libchromaprint + libchromaprint-dev , # autodetected 'crystalhd' libcrystalhd-dev [amd64 i386], # --enable-libdc1394 @@ -65,37 +66,38 @@ libavc1394-dev [linux-any], # autodetected: indev 'jack' libjack-jackd2-dev, +# missing dependency of libtesseract-dev #836849 + libleptonica-dev, # autodetected for the tiff decoder liblzma-dev, -# --enable-libmodplug - libmodplug-dev, # --enable-libmp3lame libmp3lame-dev, +# --enable-netcdf + libnetcdf-dev [!powerpcspe], # --enable-openal libopenal-dev, +# --enable-omx + libomxil-bellagio-dev, # --enable-libopencore_amrnb libopencore-amrnb-dev, # --enable-libopencore_amrwb libopencore-amrwb-dev, # --enable-libopencv - libopencv-dev [!sh4 !sparc64] , + libopencv-imgproc-dev , # --enable-libopenjpeg - libopenjpeg-dev, + libopenjp2-7-dev, +# --enable-libopenmpt + libopenmpt-dev, # --enable-libopus libopus-dev, -# Disabled, as it might produce problems. -# # --enable-libquvi -# libquvi-dev, # --enable-libpulse libpulse-dev, -# --enable-librtmp - librtmp-dev, -# --enable-libschroedinger - libschroedinger-dev, +# --enable-librubberband + librubberband-dev, # autodetected: protocol 'sctp' libsctp-dev [linux-any], -# autodetected: SDL support - libsdl-dev, +# --enable-sdl2 + libsdl2-dev, # --enable-libshine libshine-dev (>= 3.0.0), # --enable-libsnappy @@ -106,6 +108,8 @@ libspeex-dev, # --enable-libssh libssh-gcrypt-dev, +# --enable-libtesseract (used only in -extra flavor) + libtesseract-dev, # --enable-libtheora libtheora-dev, # --enable-libtwolame @@ -117,8 +121,6 @@ libva-dev [!hurd-any], # autodetected: hwaccels 'h263_vdpau, mpeg2_vdpau, vc1_vdpau, h264_vdpau, mpeg4_vdpau, wmv3_vdpau, mpeg1_vdpau', decoders 'h264_vdpau, mpeg1_vdpau, mpeg4_vdpau, mpeg_vdpau, vc1_vdpau, wmv3_vdpau' libvdpau-dev, -# --enable-libvo_aacenc - libvo-aacenc-dev, # --enable-libvo_amrwbenc libvo-amrwbenc-dev, # --enable-libvorbis @@ -130,17 +132,23 @@ # --enable-libwebp libwebp-dev, # --enable-libx264 - libx264-dev [!sparc64] , + libx264-dev , # --enable-libx265 - libx265-dev, -# --enable-x11grab - libxext-dev, + libx265-dev (>= 1.8), +# autodetected libxcb-shape + libxcb-shape0-dev, +# autodetected libxcb-shm + libxcb-shm0-dev, +# autodetected libxcb-xfixes + libxcb-xfixes0-dev, +# autodetected xlib + libxv-dev, # --enable-libxvid libxvidcore-dev, # autodetected: decoder 'mpeg_xvmc'; outdev 'xv' libxvmc-dev, # --enable-libzmq - libzmq3-dev [!hurd-any], + libzmq3-dev, # --enable-libzvbi libzvbi-dev, # The opencl API is considered experimental. @@ -151,7 +159,9 @@ # HTML documentation texinfo, # assembler optimizations - yasm + nasm, +# autodetected zlib + zlib1g-dev Package: ffmpeg Architecture: any @@ -178,32 +188,6 @@ * ffprobe: a simple multimedia stream analyzer * qt-faststart: a utility to rearrange Quicktime files -Package: ffmpeg-dbg -Section: debug -Priority: extra -Architecture: any -Multi-Arch: same -Depends: - ffmpeg (= ${binary:Version}), - libavcodec-ffmpeg56 (= ${binary:Version}) | libavcodec-ffmpeg-extra56 (= ${binary:Version}), - libavdevice-ffmpeg56 (= ${binary:Version}), - libavfilter-ffmpeg5 (= ${binary:Version}), - libavformat-ffmpeg56 (= ${binary:Version}), - libavutil-ffmpeg54 (= ${binary:Version}), - libpostproc-ffmpeg53 (= ${binary:Version}), - libavresample-ffmpeg2 (= ${binary:Version}), - libswresample-ffmpeg1 (= ${binary:Version}), - libswscale-ffmpeg3 (= ${binary:Version}), - ${misc:Depends} -Description: Debug symbols for the FFmpeg multimedia framework - FFmpeg is the leading multimedia framework, able to decode, encode, transcode, - mux, demux, stream, filter and play pretty much anything that humans and - machines have created. It supports the most obscure ancient formats up to the - cutting edge. - . - This package contains the debug symbols used to produce useful debugging - back-traces. - Package: ffmpeg-doc Section: doc Architecture: all @@ -222,7 +206,7 @@ framework including the API documentation created by doxygen and the manpages for the libraries. -Package: libavcodec-ffmpeg56 +Package: libavcodec57 Architecture: any Section: libs Multi-Arch: same @@ -231,7 +215,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library with de/encoders for audio/video codecs - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -248,19 +231,18 @@ . This package contains the runtime files. -Package: libavcodec-ffmpeg-extra56 +Package: libavcodec-extra57 Architecture: any Section: libs Priority: extra Multi-Arch: same -Conflicts: libavcodec-ffmpeg56 +Conflicts: libavcodec57 Provides: libavcodec-extra Pre-Depends: ${misc:Pre-Depends} Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library with additional de/encoders for audio/video codecs FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -275,12 +257,11 @@ to DSP optimizations, and makes it suitable for implementing robust and fast codecs as well as for experimentation. . - This package replaces the libavcodec-ffmpeg56 package and contains the + This package replaces the libavcodec57 package and contains the following additional codecs: . * OpenCORE Adaptive Multi-Rate (AMR) Narrow-Band (Encoder/Decoder) * OpenCORE Adaptive Multi-Rate (AMR) Wide-Band (Decoder) - * Android VisualOn AAC (Encoder) * Android VisualOn Adaptive Multi-Rate (AMR) Wide-Band (Encoder) . Because this package links against libraries that are licensed under @@ -293,7 +274,7 @@ Priority: extra Multi-Arch: foreign Depends: - libavcodec-ffmpeg-extra56, + libavcodec-extra57, ${misc:Depends} Description: FFmpeg library with extra codecs (metapackage) FFmpeg is the leading multimedia framework, able to decode, encode, transcode, @@ -310,10 +291,8 @@ Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libavcodec-libav-dev Depends: - libavcodec-ffmpeg56 (= ${binary:Version}) | libavcodec-ffmpeg-extra56 (= ${binary:Version}), + libavcodec57 (= ${binary:Version}) | libavcodec-extra57 (= ${binary:Version}), libavutil-dev (= ${binary:Version}), libswresample-dev (= ${binary:Version}), ${misc:Depends} @@ -333,7 +312,7 @@ . This package contains the development files. -Package: libavdevice-ffmpeg56 +Package: libavdevice57 Architecture: any Section: libs Multi-Arch: same @@ -342,7 +321,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library for handling input and output devices - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -359,11 +337,9 @@ Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libavdevice-libav-dev Depends: libavcodec-dev (= ${binary:Version}), - libavdevice-ffmpeg56 (= ${binary:Version}), + libavdevice57 (= ${binary:Version}), libavfilter-dev (= ${binary:Version}), libavformat-dev (= ${binary:Version}), libavresample-dev (= ${binary:Version}), @@ -384,7 +360,7 @@ . This package contains the development files. -Package: libavfilter-ffmpeg5 +Package: libavfilter6 Architecture: any Section: libs Multi-Arch: same @@ -393,7 +369,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library containing media filters - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -405,15 +380,62 @@ . This package contains the runtime files. +Package: libavfilter-extra6 +Architecture: any +Section: libs +Priority: extra +Multi-Arch: same +Conflicts: libavfilter6 +Provides: libavfilter-extra +Pre-Depends: + ${misc:Pre-Depends} +Depends: + ${shlibs:Depends}, + ${misc:Depends} +Description: FFmpeg library with extra media filters - runtime files + FFmpeg is the leading multimedia framework, able to decode, encode, transcode, + mux, demux, stream, filter and play pretty much anything that humans and + machines have created. It supports the most obscure ancient formats up to the + cutting edge. + . + This library provides a generic audio/video filtering framework containing + several filters, sources and sinks. + . + This package replaces the libavfilter6 package and contains the + following additional filters: + . + * Optical Character Recognition (uses Tesseract) + * SOFAlizer (Spatially Oriented Format for Acoustics, uses netcdf) + . + Because this package links against libraries that are licensed under + Apache License 2.0, the resulting binaries are distributed under the + GPL version 3 or later. + +Package: libavfilter-extra +Architecture: all +Section: metapackages +Priority: extra +Multi-Arch: foreign +Depends: + libavfilter-extra6, + ${misc:Depends} +Description: FFmpeg library with extra filters (metapackage) + FFmpeg is the leading multimedia framework, able to decode, encode, transcode, + mux, demux, stream, filter and play pretty much anything that humans and + machines have created. It supports the most obscure ancient formats up to the + cutting edge. + . + This metapackage depends on the latest version of the libavfilter variant + that offers additional filter support. Application packages can depend + on it if they require or suggest this variant in a robust manner. + Package: libavfilter-dev Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libavfilter-libav-dev Depends: libavcodec-dev (= ${binary:Version}), - libavfilter-ffmpeg5 (= ${binary:Version}), + libavfilter6 (= ${binary:Version}) | libavfilter-extra6 (= ${binary:Version}), libavformat-dev (= ${binary:Version}), libavresample-dev (= ${binary:Version}), libavutil-dev (= ${binary:Version}), @@ -432,7 +454,7 @@ . This package contains the development files. -Package: libavformat-ffmpeg56 +Package: libavformat57 Architecture: any Section: libs Multi-Arch: same @@ -441,7 +463,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library with (de)muxers for multimedia containers - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -459,11 +480,9 @@ Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libavformat-libav-dev Depends: libavcodec-dev (= ${binary:Version}), - libavformat-ffmpeg56 (= ${binary:Version}), + libavformat57 (= ${binary:Version}), libavutil-dev (= ${binary:Version}), libswresample-dev (= ${binary:Version}), ${misc:Depends} @@ -480,7 +499,7 @@ . This package contains the development files. -Package: libavresample-ffmpeg2 +Package: libavresample3 Architecture: any Section: libs Multi-Arch: same @@ -489,7 +508,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg compatibility library for resampling - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -505,11 +523,9 @@ Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libavresample-libav-dev Depends: libavutil-dev (= ${binary:Version}), - libavresample-ffmpeg2 (= ${binary:Version}), + libavresample3 (= ${binary:Version}), ${misc:Depends} Description: FFmpeg compatibility library for resampling - development files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, @@ -522,7 +538,7 @@ . This package contains the development files. -Package: libavutil-ffmpeg54 +Package: libavutil55 Architecture: any Section: libs Multi-Arch: same @@ -550,10 +566,8 @@ Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libavutil-libav-dev Depends: - libavutil-ffmpeg54 (= ${binary:Version}), + libavutil55 (= ${binary:Version}), ${misc:Depends} Description: FFmpeg library with functions for simplifying programming - development files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, @@ -570,7 +584,7 @@ . This package contains the development files. -Package: libpostproc-ffmpeg53 +Package: libpostproc54 Architecture: any Section: libs Multi-Arch: same @@ -579,7 +593,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library for post processing - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -594,11 +607,9 @@ Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libpostproc-libav-dev Depends: libavutil-dev (= ${binary:Version}), - libpostproc-ffmpeg53 (= ${binary:Version}), + libpostproc54 (= ${binary:Version}), ${misc:Depends} Description: FFmpeg library for post processing - development files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, @@ -610,7 +621,7 @@ . This package contains the development files. -Package: libswresample-ffmpeg1 +Package: libswresample2 Architecture: any Section: libs Multi-Arch: same @@ -619,7 +630,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library for audio resampling, rematrixing etc. - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -653,7 +663,7 @@ Multi-Arch: same Depends: libavutil-dev (= ${binary:Version}), - libswresample-ffmpeg1 (= ${binary:Version}), + libswresample2 (= ${binary:Version}), ${misc:Depends} Description: FFmpeg library for audio resampling, rematrixing etc. - development files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, @@ -682,7 +692,7 @@ . This package contains the development files. -Package: libswscale-ffmpeg3 +Package: libswscale4 Architecture: any Section: libs Multi-Arch: same @@ -691,7 +701,6 @@ Depends: ${shlibs:Depends}, ${misc:Depends} -Breaks: libavutil-ffmpeg54 (>= 8:0) Description: FFmpeg library for image scaling and various conversions - runtime files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and @@ -717,11 +726,9 @@ Architecture: any Section: libdevel Multi-Arch: same -Conflicts: - libswscale-libav-dev Depends: libavutil-dev (= ${binary:Version}), - libswscale-ffmpeg3 (= ${binary:Version}), + libswscale4 (= ${binary:Version}), ${misc:Depends} Description: FFmpeg library for image scaling and various conversions - development files FFmpeg is the leading multimedia framework, able to decode, encode, transcode, diff -Nru ffmpeg-2.8.6/debian/copyright ffmpeg-3.3.3/debian/copyright --- ffmpeg-2.8.6/debian/copyright 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/copyright 2017-08-05 14:03:46.000000000 +0000 @@ -10,63 +10,70 @@ . For building the default Debian packages some of the GPL licensed files are used, so the resulting binaries are licensed under GPL v2+. - For libavcodec an extra flavor is built, which links against external libraries - licensed under the Apache License 2.0, which makes it effectively licensed + For libavcodec/libavfilter an extra flavor is built, which links against external + libraries licensed under the Apache License 2.0, which makes it effectively licensed under the GPL v3+ The HTML documentation /usr/share/doc/ffmpeg/manual/*.html in the ffmpeg-doc package is effectively licensed under GPL-3+, because during its creation the GPL-3+ licensed file doc/t2h.pm is used. . - FFmpeg can also be combined with with non-free libraries, which would make the + FFmpeg can also be combined with non-free libraries, which would make the resulting binaries unredistributable. But this is not done for the Debian packages. Files: * Copyright: + Christian Holschuh Sebastien Bechet 1990, James Ashton - Sydney University 1993, Computer Science, Speech Group - 1994-2012, by the Xiph.Org Foundation and contributors + 1994-2012, the Xiph.Org Foundation and contributors 1997-1999, H. Dietz 1997-1999, R. Fisher 1998-2009, Conifer Software - 1999-2001, Chris Bagwell 1999, Intel Corporation 1999, Nick Bailey 1999, Roger Hardiman 1999-2000, Sebastien Rougeaux + 1999-2001, Chris Bagwell 2000, Chris Ausbrooks 2000, Fabien COELHO - 2000, Edward Beingessner And Sundry Contributors - 2000-2003, 2005, Fabrice Bellard - 2000-2001, Michel Lespinasse + 2000, John Walker 2000-2001, 2003, Nick Kurshev + 2000-2001, Michel Lespinasse 2000-2001, Peter Gubanov - 2001-2003, BERO - 2001, Daniel Maas + 2000-2003, 2005, 2010, Fabrice Bellard + 2001, 2005-2014, Peter Ross + 2001, 2006, Daniel Maas + 2001, Dan Dennedy 2001, Heikki Leinonen 2001, Juan J. Sierralta P 2001, Lionel Ulmer - 2001-2015, Michael Niedermayer - 2001, 2005-2014, Peter Ross 2001, Tim Ferguson - 2002-2006, Alex Beregszaszi + 2001-2003, BERO + 2001-2008, 2013, 2015-2016, The FFmpeg project + 2001-2010, Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen, Damien Zammit, Vladimir Sadovnikov and others + 2001-2016, Michael Niedermayer + 2002, 2005, Francois Revol 2002, Anders Johansson + 2002, Brian Foley + 2002, Dieter Shirley 2002, Falk Hueffner - 2002, 2005, Francois Revol 2002, Frederic 'dilb' Boulay 2002, Gunnar Monell - 2001-2010, Krzysztof Foltman, Markus Schmidt, Thor Harald Johansen and others 2002, Laszlo Torok 2002, Lennert Buytenhek 2002, Mark Hills - 2002-2004, 2006-2013, Maxim Poliakovski 2002, Remi Guyomarch - 2002-2005, Roberto Togni 2002, Steve O'Hara-Smith 2002, The Xine project 2002, Zdenek Kabelac - 2003-2005, by Christopher R. Hertel + 2002-2004, 2006-2013, Maxim Poliakovski + 2002-2005, Roberto Togni + 2002-2006, Alex Beregszaszi + 2003, 2006-2007, Michel Bardiaux + 2003, 2008-2011, Sascha Sommer + 2003, 2014, Pascal Massimino 2003, Donnie Smith 2003, Dr. Tim Ferguson 2003, Ewald Snel @@ -74,294 +81,302 @@ 2003, Ivan Kalvachev 2003, James Klicman 2003, Max Krasnyansky - 2003, 2004, 2007, Mike Melanson - 2003, 2014, Pascal Massimino - 2003-2004, 2006, Roman Shaposhnik 2003, Rich Felker - 2003-2004, Romain Dolbeau - 2003, 2008-2011, Sascha Sommer - 2003, Tinic Uro 2003, Thomas Raivio - 2003-2013, x264 project - 2004, Adam Thayer - 2004, AGAWA Koji + 2003, Tinic Uro + 2003-2004, 2006, Roman Shaposhnik + 2003-2004, 2007, Mike Melanson + 2003-2004, Romain Dolbeau + 2003-2005, by Christopher R. Hertel + 2003-2011, x264 project + 2003-2014, Loren Merritt 2004, 2007, Benjamin Zores + 2004, 2007, Marc Hoffman + 2004, AGAWA Koji + 2004, Adam Thayer + 2004, Gildas Bazin + 2004, Maarten Daniels 2004-2005, Denes Balatoni - 2004-2007, Eric Lasota - 2004, Gildas Bazin 2004-2006, Lennart Poettering - 2003-2013, Loren Merritt - 2004, Maarten Daniels - 2004, 2007, Marc Hoffman + 2004-2007, Eric Lasota 2004-2014, Konstantin Shishkov + 2005, 2007, Wolfram Gloger + 2005, 2007-2008, Ian Caulfield 2005, Alban Bedel 2005, Anonymous - 2005-2011, Benjamin Larsson 2005, David Hammerton - 2005, DivX, Inc - 2005, 2007-2008, Ian Caulfield + 2005, DivX, Inc. 2005, Jeff Muizelaar - 2005-2007, 2013-2015, Luca Barbato - 2005-2012, Mans Rullgard 2005, Matthieu CASTET - 2005-2006, Oded Shimon 2005, Ole André Vadla Ravnås - 2005, 2007-2011, 2013-2014, Reimar Döffinger - 2005-2006, Robert Edele + 2005, Roine Gustafsson 2005, Steve Underwood 2005, Vidar Madsen 2005, Wim Taymans - 2005, 2007, Wolfram Gloger 2005, Zoltan Hidvegi - 2006-2010, Aurelien Jacobs - 2006-2011, Baptiste Coudurier + 2005-2006, Oded Shimon + 2005-2006, Robert Edele + 2005-2007, 2011-2015, Luca Barbato + 2005-2008, 2013, Diego Biurrun + 2005-2011, Benjamin Larsson + 2005-2011, 2013-2014, 2016, Reimar Döffinger + 2005-2012, Måns Rullgård + 2006, 2008, Gregory Montoir + 2006, 2009, Stefan Gehrer + 2006, 2015, Steve Lhomme 2006, Corey Hickey 2006, Cyril Zorin - 2006, 2008, Gregory Montoir - 2006-2013, Justin Ruggles + 2006, Guillaume Poirier + 2006, Industrial Light & Magic, a division of Lucas Digital Ltd. LLC + 2006, John Maddock 2006, Kartikey Mahendra BHATT - 2006-2007, Maxim Gavrilov - 2006, 2007, Michel Bardiaux - 2006, Michael Benjamin 2006, Patrick Guimond 2006, Paul Richards - 2006, Guillaume Poirier - 2006-2010, Prakash Punnoor - 2006-2010, 2013-2014, Ramiro Polla + 2006, Smartjog S.A.S, Baptiste Coudurier + 2006, Thijs Vermeir + 2006-2007, Maxim Gavrilov 2006-2007, Reynaldo H. Verdejo Pinochet - 2006-2009, 2012, Rob Sykes - 2006-2009, Robert Swain 2006-2007, Ryan Martell - 2006, Smartjog S.A.S, Baptiste Coudurier 2006-2007, SmartJog S.A., Baptiste Coudurier - 2006, Stefan Gehrer - 2006, 2015, Steve Lhomme - 2006, Thijs Vermeir + 2006-2009, 2012, Rob Sykes + 2006-2009, Luca Abeni + 2006-2009, Robert Swain + 2006-2010, 2013-2014, Ramiro Polla + 2006-2010, Aurelien Jacobs + 2006-2010, Prakash Punnoor + 2006-2011, Baptiste Coudurier 2006-2011, Xvid Solutions GmbH - 2007, Alexis Ballier - 2007, 2010, 2013, Anssi Hannula - 2007-2009, Bartlomiej Wolowiec - 2007, 2014, Benoit Fouet + 2006-2013, Justin Ruggles 2007, 2009, Björn Axelsson - 2007, Bobby Bingham - 2007-2009, Bartlomiej Wolowiec + 2007, 2010, 2013, Anssi Hannula + 2007, 2010, Bobby Bingham + 2007, 2010-2016, Nicolas George + 2007, 2012, 2014-2015, Collabora Ltd + 2007, 2014, Benoit Fouet + 2007, 2015 Edward Hervey + 2007, Alexis Ballier 2007, Christian Ohm - 2007, Collabora Ltd, Philippe Kalaf - 2007, Edward Hervey - 2007-2008, Ivo van Poorten - 2007-2008, Joseph Artsimovich + 2007, Clemens Fruhwirth 2007, Kamil Nowosad - 2007-2009, Luca Abeni - 2007-2008, Marco Gerards 2007, Nicholas Tung - 2007, 2010-2014, Nicolas George 2007, Nokia Corporation + 2007, Philippe Kalaf 2007, Richard Spindler - 2007-2010, 2012-2015, Ronald S. Bultje + 2007, Ulion + 2007-2008, 2011, Vladimir Voroshilov + 2007-2008, Ivo van Poorten + 2007-2008, Joseph Artsimovich + 2007-2008, Marco Gerards 2007-2008, Siarhei Siamashka - 2007-2013, Stefano Sabatini 2007-2008, UAB "DKD" - 2007, Ulion + 2007-2009, Bartlomiej Wolowiec + 2007-2010, 2012-2015, Christophe GISQUET + 2007-2010, David Conrad 2007-2011, Vitor Sessak - 2007-2008, 2011, Vladimir Voroshilov + 2007-2013, Stefano Sabatini + 2007-2016, Ronald S. Bultje + 2008, 2010, Alexander Strange + 2008, 2010, Eli Friedman + 2008, 2010-2011, Zhentan Feng 2008, Affine Systems, Inc (Michael Sullivan, Bobby Impollonia) 2008, Alessandro Sappia - 2008-2013, Alex Converse - 2008-2012, Alexander E. Patrakov - 2008, 2010, Alexander Strange - 2008-2009, Andrej Stepanchuk 2008, BBC, Anuradha Suraparaju - 2008-2010, David Conrad - 2008, 2010, Eli Friedman - 2008, GUCAS, Zhentan Feng - 2008-2010, Laurent Aimar 2008, NVIDIA - 2008-2009, Jaikrishnan Menon - 2008-2010, Paul Kendall 2008, Robert Marston 2008, Sisir Koppaka - 2008-2009, Splitted-Desktop Systems 2008, Victor Paesa 2008, vmrsss + 2008-2009, Andrej Stepanchuk + 2008-2009, Jaikrishnan Menon + 2008-2009, Splitted-Desktop Systems + 2008-2010, 2012, Laurent Aimar + 2008-2010, Paul Kendall + 2008-2012, Alexander E. Patrakov + 2008-2013, Alex Converse + 2009, 2011, Sebastian Gesemann + 2009, 2012, Nathan Caldwell + 2009, 2013, Christian Schmidt 2009, Colin McQuillan - 2009-2010, 2013, Daniel Verkamp 2009, Dylan Yudaken 2009, Giliard B. de Freitas - 2009-2010, Howard Chu - 2009-2013, 2015, James Darnley 2009, Jimmy Christensen 2009, Joshua Warner 2009, Kenan Gillet - 2009-2014, Martin Storsjo + 2009, Kostya Shishkov 2009, Michael Tison 2009, Naotoshi Nojiri - 2009, 2012, Nathan Caldwell 2009, Nicolas Martin + 2009, Peter Holik 2009, Samalyse - 2009, 2011, Sebastian Gesemann 2009, Sebastien Lucas 2009, Stephen Backway - 2009-2010, 2013-2014, Thilo Borgmann 2009, Thomas P. Higdon 2009, Tobias Bindhammer 2009, Toshimitsu Kimura 2009, Xuggle Incorporated 2009, Zuxy Meng + 2009-2010, 2013, Daniel Verkamp + 2009-2010, Fiona Glaser + 2009-2010, 2013-2014, 2016 Thilo Borgmann + 2009-2010, Howard Chu + 2009-2013, 2015, James Darnley + 2009-2015, Martin Storsjo + 2010, 2012, 2016-2017 Google, Inc + 2010, 2012, Rafaël Carré + 2010, 2013, Georg Martius + 2010, 2013, Rémi Denis-Courmont 2010, Adrian Daerr 2010, Amanda, Y.N. Wu - 2010-2011, Anatoly Nenashev 2010, Brandon Mintern - 2010-2012, Carl Eugen Hoyos 2010, Daniel G. Taylor - 2010-2011, Elvis Presley - 2010, Fiona Glaser 2010, Francesco Lavra - 2010, 2013, Georg Martius - 2010, 2012, Google, Inc 2010, Hans de Goede 2010, Holger Lubitz - 2010-2011, 2013-2014, Janne Grunau 2010, Jacob Meuser 2010, Josh Allmann 2010, Marcelo Galvao Povoa 2010, Mark Heath 2010, Mark Nauwelaerts + 2010, Michael Chinen 2010, Michele Orrù - 2010-2011, Mohamed Naufal Basheer + 2010, Mohamed Naufal Basheer 2010, Nolan Lum - 2010-2013, Philip Langdale - 2010, Rafael Carre 2010, Rob Clark + 2010, Romain Degez 2010, S.N. Hemanth Meenakshisundaram 2010, Sebastian Vater - 2010, tipok 2010, Tomas Härdin - 2010-2011, Zhentan Feng + 2010-2011, 2013-2015, Janne Grunau + 2010-2011, Anatoly Nenashev + 2010-2011, Elvis Presley + 2010-2012, 2015, Carl Eugen Hoyos + 2010-2013, 2015-2016, Anton Khirnov + 2010-2013, Philip Langdale + 2011, 2014-2016 Kieran Kunhya 2011, Anatoliy Wasserman 2011, Andreas Öman - 2011-2013, 2015, Anton Khirnov - 2011-2014, Clément Bœsch - 2011-2015, Derek Buitenhuis - 2011-2012, Hyllian/Jararaca 2011, Jordi Ortiz 2011, Juan Carlos Rodriguez - 2011, 2014, Kieran Kunhya 2011, KO Myung-Hun - 2011-2012, Mark Himsley - 2011-2012, Mashiat Sarker Shakkhar 2011, Matthew Hoops 2011, Max Horn - 2011-2012, Michael Bradshaw 2011, Michael Karcher 2011, Mina Nagy Zaki + 2011, Miroslav Slugeň 2011, MirriAd Ltd 2011, Oskar Arvidsson - 2011-2015, Paul B Mahol 2011, Roger Pau Monné - 2011-2012, Sebastien Zwickert - 2011-2012, Smartjog S.A.S, Clément Bœsch 2011, Sven Hesse 2011, Thomas Kuehnel + 2011-2012, Hyllian/Jararaca + 2011-2012, Mark Himsley + 2011-2012, Mashiat Sarker Shakkhar + 2011-2012, Michael Bradshaw + 2011-2012, Sebastien Zwickert + 2011-2012, Smartjog S.A.S, Clément Bœsch + 2011-2013, Daniel Kang + 2011-2015, Derek Buitenhuis + 2011-2017, Clément Bœsch + 2011-2017, Paul B Mahol + 2012, 2014, Georg Lippitsch 2012, Aleksi Nurmi 2012, Andrew D'Addesio - 2012-2013, Andrey Utkin - 2012-2013, Aneesh Dogra (lionaneesh) 2012, Antti Seppälä - 2012, AvxSynth Team. + 2012, AvxSynth Team 2012, British Broadcasting Corporation - 2012-2014, Christophe Gisquet - 2012-2013, Daniel Kang 2012, David Kment 2012, Fredrik Mellbin - 2012, 2014, Georg Lippitsch - 2012-2013, Gildas Cocherel - 2012-2013, Guillaume Martres - 2012-2015, James Almer 2012, Jan Ekström + 2012, Jeremy Tran 2012, Laurent de Soras 2012, Li Cao - 2012-2013, Mickael Raulet - 2012-2013, Oka Motofumi 2012, Pavel Koshevoy 2012, Peng Gao 2012, Petri Hintukainen 2012, Robert Nagy - 2012-2013, Rudolf Polzer 2012, Samuel Pitoiset 2012, Steven Robertson + 2012, VLC authors and VideoLAN 2012, Vitaliy E Sugrobov + 2012, Xidorn Quan + 2012-2013, Andrey Utkin + 2012-2013, Aneesh Dogra (lionaneesh) + 2012-2013, Gildas Cocherel + 2012-2013, Guillaume Martres + 2012-2013, Mickael Raulet + 2012-2013, Oka Motofumi + 2012-2013, Rudolf Polzer 2012-2013, Wassim Hamidouche 2012-2013, Wei Gao - 2012, Xidorn Quan + 2012-2016, James Almer 2013, Anand Meher Kotra - 2013-2014, Andrew Kelley 2013, Ash Hughes 2013, Calvin Walton - 2013, Christian Schmidt 2013, Darryl Wallace - 2013-2014, Deti Fliegl - 2013, Diego Biurrun 2013, Dirk Farin 2013, Fredrik Mellbin 2013, Jeff Moguillansky - 2013, Lenny Wang - 2013-2014, Lukasz Marek + 2013, Lenny Wang + 2013, MIPS Technologies, Inc., California. 2013, Marton Balint 2013, Matthew Heaney - 2013, MIPS Technologies, Inc., California. - 2013-2014, Mozilla Corporation - 2013-2014, Nicolas Bertrand - 2013-2014, Pierre-Edouard Lepere - 2013, Rémi Denis-Courmont - 2013-2014, RISC OS Open Ltd 2013, Rl, Aetey Global Technologies AB - 2013-2015, Seppo Tomperi - 2013-2014, Tiancheng "Timothy" Gu - 2013, Vadim Kalinsky 2013, VTT - 2013-2015, Vittorio Giovara + 2013, Vadim Kalinsky 2013, Xiaolei Yu 2013, Yukinori Yamazoe - 2014, Alexandra Hájková + 2013-2014, Andrew Kelley + 2013-2014, Deti Fliegl + 2013-2014, Lukasz Marek + 2013-2014, Mozilla Corporation + 2013-2014, Nicolas Bertrand + 2013-2014, Pierre-Edouard Lepere + 2013-2014, RISC OS Open Ltd + 2013-2015, Andreas Fuchs + 2013-2015, Seppo Tomperi + 2013-2015, Wolfgang Hrauda, + 2013-2015, Tiancheng "Timothy" Gu + 2013-2016, Vittorio Giovara + 2014, 2016, Alexandra Hájková + 2014, 2016, Neil Birkbeck 2014, Aman Gupta - 2014-2015, Arwa Arif 2014, Daniel Oberhoff 2014, Dave Rice @dericed 2014, Eejya Singh - 2014-2015, Hendrik Leppkes 2014, James Yu 2014, Marvin Scholz - 2014, Muhammad Faiz - 2014, Neil Birkbeck 2014, Nicholas Robbins - 2014, Niels Möller 2014, Oleksij Rempel - 2014-2015, Peter Meerwald 2014, Rong Yan 2014, Samsung Electronics 2014, StarBrilliant - 2014-2015, Supraja Meedinti - 2014-2015, Thomas Volkert 2014, Tim Walker - 2014-2015, Timo Rothenpieler + 2014-2015, Arwa Arif + 2014-2015, Hendrik Leppkes + 2014-2015, Peter Meerwald + 2014-2015, Supraja Meedinti 2014-2015, Vignesh Venkatasubramanian + 2014-2016, Muhammad Faiz + 2014-2016, Thomas Volkert 2015, Andreas Cadhalpun 2015, Anshul Maheshwari + 2015, Claudio Freire 2015, Donny Yang - 2015, Ganesh Ajjanagadde + 2015, Eran Kornblau 2015, Gilles Chanteperdrix + 2015, Henrik Gramner 2015, Himangi Saraogi 2015, Imagination Technologies Ltd 2015, Kevin Wheatley - 2015, Loongson Technology Corporation Limited 2015, LoRd_MuldeR 2015, Manojkumar Bhosale - 2015, Niklas Haas + 2015, Mats Peterson + 2015, Matthew Waters 2015, Parag Salasakar 2015, Pedro Arthur - 2015, Rodger Combs + 2015, Rick Kern 2015, Roger Pack - 2015, Rostislav Pehlivanov + 2015, Sebastian Dröge 2015, Shivraj Patil 2015, Stupeflix 2015, Tampere University of Technology @@ -370,7 +385,31 @@ 2015, Vesselin Bontchev 2015, Zhang Rui 2015, Zhang Shuangshuang - 2015, Zhou Xiaoyong + 2015-2016, Ganesh Ajjanagadde + 2015-2016, Kyle Swanson + 2015-2016, Loongson Technology Corporation Limited + 2015-2016, Zhou Xiaoyong + 2015-2016, Open Broadcast Systems Ltd. + 2015-2016, Rodger Combs + 2015-2016, Timo Rothenpieler + 2015-2017, Matthieu Bouron + 2015-2017, Rostislav Pehlivanov + 2016, Davinder Singh (DSM_) + 2016, Floris Sluiter + 2016, Jan Sebechlebsky + 2016, Jokyo Images + 2016, Josh de Kock + 2016, KongQun Yang + 2016, Marton Balnt + 2016, Mobibase, France + 2016, Ståle Kristoffersen + 2016, Thomas Mundt + 2016, Tobias Rapp + 2016, Umair Khan + 2016, William Ma, Sofia Kim, Dustin Woo + 2016, foo86 + 2017, Paras Chadha + 2017, Steinar H. Gunderson License: LGPL-2.1+ Comment: You should have received a copy of the GNU Lesser General Public @@ -384,112 +423,15 @@ from the referenced source: . -Files: libavcodec/libzvbi-teletextdec.c -Copyright: - 2005-2010, 2012, Wolfram Gloger - 2013, Marton Balint -License: LGPL-2+ - This library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2 of the License, or (at your option) any later version. - . - This library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. -Comment: - On Debian systems, the full text of the GNU Lesser General Public License - version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. - . - You should have received a copy of the GNU Lesser General Public - License along with this library; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Files: - libavcodec/aacdec_fixed.c - libavcodec/aacsbr_fixed.c - libavcodec/ac3dec_fixed.c - libavcodec/arm/vp8dsp_armv6.S - libavcodec/fft_init_table.c - libavcodec/fft_fixed_32.c - libavcodec/fft_table.h - libavcodec/mdct_fixed_32.c - libavcodec/mips/aaccoder_mips.c - libavcodec/mips/aacdec_mips.c - libavcodec/mips/aacdec_mips.h - libavcodec/mips/aacpsdsp_mips.c - libavcodec/mips/aacpsy_mips.h - libavcodec/mips/aacsbr_mips.c - libavcodec/mips/aacsbr_mips.h - libavcodec/mips/ac3dsp_mips.c - libavcodec/mips/acelp_filters_mips.c - libavcodec/mips/acelp_vectors_mips.c - libavcodec/mips/amrwbdec_mips.c - libavcodec/mips/amrwbdec_mips.h - libavcodec/mips/celp_filters_mips.c - libavcodec/mips/celp_math_mips.c - libavcodec/mips/compute_antialias_fixed.h - libavcodec/mips/compute_antialias_float.h - libavcodec/mips/fft_mips.c - libavcodec/mips/fmtconvert_mips.c - libavcodec/mips/iirfilter_mips.c - libavcodec/mips/lsp_mips.h - libavcodec/mips/mpegaudiodsp_mips_fixed.c - libavcodec/mips/mpegaudiodsp_mips_float.c - libavcodec/mips/sbrdsp_mips.c - libavutil/fixed_dsp.c - libavutil/fixed_dsp.h - libavutil/mips/float_dsp_mips.c - libavutil/mips/libm_mips.h - libavutil/softfloat_tables.h -Copyright: - 2005-2006, Oded Shimon - 2006-2007, Maxim Gavrilov - 2008-2009, Robert Swain - 2009-2010, Alex Converse - 2010, Google Inc. - 2010, Rob Clark - 2011, Mans Rullgard - 2012-2013, MIPS Technologies, Inc., California. -License: BSD-3-Clause and LGPL-2.1+ -Comment: - On Debian systems, the full text of the GNU Lesser General Public License - version 2.1 can be found in the file `/usr/share/common-licenses/LGPL-2.1'. - . - You should have received a copy of the GNU Lesser General Public - License along with FFmpeg; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Files: libavformat/aadec.c -Copyright: - 2001-2014, Jim Teeuwen - 2015, Vesselin Bontchev -License: BSD-1-Clause - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions - are met: - 1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - . - THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND - ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE - LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - POSSIBILITY OF SUCH DAMAGE. - Files: - libavfilter/af_chorus.c + libavfilter/af_chorus.c + libavfilter/af_earwax.c Copyright: - 1998, Juergen Mueller And Sundry Contributors - 2015, Paul B Mahol -License: Sundry and LGPL-2.1+ + 1998, Juergen Mueller And Sundry Contributors + 2000, Edward Beingessner And Sundry Contributors + 2011, Mina Nagy Zaki + 2015, Paul B Mahol +License: LGPL-2.1+ and Sundry Comment: On Debian systems, the full text of the GNU Lesser General Public License version 2.1 can be found in the file `/usr/share/common-licenses/LGPL-2.1'. @@ -501,8 +443,11 @@ Files: doc/texi2pod.pl libavcodec/x86/flac_dsp_gpl.asm - libavdevice/x11grab.c libavfilter/f_ebur128.c + libavfilter/interlace.h + libavfilter/tinterlace.h + libavfilter/signature.h + libavfilter/signature_lookup.c libavfilter/vf_blackframe.c libavfilter/vf_boxblur.c libavfilter/vf_colormatrix.c @@ -522,6 +467,7 @@ libavfilter/vf_kerndeint.c libavfilter/vf_mcdeint.c libavfilter/vf_mpdecimate.c + libavfilter/vf_nnedi.c libavfilter/vf_owdenoise.c libavfilter/vf_perspective.c libavfilter/vf_phase.c @@ -532,6 +478,7 @@ libavfilter/vf_pullup.h libavfilter/vf_repeatfields.c libavfilter/vf_sab.c + libavfilter/vf_signature.c libavfilter/vf_smartblur.c libavfilter/vf_spp.c libavfilter/vf_spp.h @@ -539,77 +486,98 @@ libavfilter/vf_super2xsai.c libavfilter/vf_tinterlace.c libavfilter/vf_uspp.c + libavfilter/vf_vaguedenoiser.c libavfilter/vsrc_mptestsrc.c + libavfilter/x86/vf_eq.c libavfilter/x86/vf_fspp.asm libavfilter/x86/vf_fspp_init.c libavfilter/x86/vf_hqdn3d_init.c + libavfilter/x86/vf_interlace.asm + libavfilter/x86/vf_interlace_init.c libavfilter/x86/vf_pp7.asm libavfilter/x86/vf_pp7_init.c libavfilter/x86/vf_pullup.asm libavfilter/x86/vf_pullup_init.c libavfilter/x86/vf_removegrain.asm libavfilter/x86/vf_spp.c + libavfilter/x86/vf_tinterlace_init.c libavfilter/yadif.h - libpostproc/postprocess_altivec_template.c libpostproc/postprocess.c libpostproc/postprocess.h + libpostproc/postprocess_altivec_template.c libpostproc/postprocess_internal.h libpostproc/postprocess_template.c - libswresample/swresample-test.c + libswresample/tests/swresample.c + tests/checkasm/aarch64/checkasm.S + tests/checkasm/alacdsp.c + tests/checkasm/arm/checkasm.S + tests/checkasm/audiodsp.c + tests/checkasm/blockdsp.c tests/checkasm/bswapdsp.c tests/checkasm/checkasm.c tests/checkasm/checkasm.h + tests/checkasm/flacdsp.c + tests/checkasm/fmtconvert.c + tests/checkasm/h264dsp.c tests/checkasm/h264pred.c tests/checkasm/h264qpel.c + tests/checkasm/hevc_add_res.c + tests/checkasm/hevc_idct.c + tests/checkasm/llviddsp.c + tests/checkasm/jpeg2000dsp.c + tests/checkasm/pixblockdsp.c + tests/checkasm/synth_filter.c + tests/checkasm/v210enc.c + tests/checkasm/vf_blend.c + tests/checkasm/videodsp.c + tests/checkasm/vp8dsp.c + tests/checkasm/vp9dsp.c tests/checkasm/x86/checkasm.asm tools/coverity.c tests/tiny_ssim.c Copyright: Wilbert Dijkhof - 1997-1998, Rasca, Berlin 1997-2001, ZSNES Team <_demo_@zsnes.com> - 1999-2001, Free Software Foundation, Inc + 1999-2001, Free Software Foundation, Inc. 2000-2002, Fabrice Bellard - 2001, 2006, Daniel Maas 2001, 2003, Donald A. Graft 2001-2003, 2005-2007, 2011-2012, 2014-2015, Michael Niedermayer 2002, A'rpi - 2002, Brian Foley - 2002-2003, Brian J. Murrell - 2002, Dieter Shirley 2002, Jindrich Makovicka - 2001-2008, 2013, The FFmpeg Project + 2002-2003, Brian J. Murrell 2003, Daniel Moreno - 2003-2004, Karl H. Beckers, Frankfurt - 2003-2014, Loren Merritt + 2003, LeFunGus 2003, Michael Zucchi 2003, Rich Felker - 2003-2004, Romain Dolbeau - 2004-2005, 2007, Denes Balatoni - 2004, Tobias Diedrich + 2003-2004, Tobias Diedrich + 2003-2013, Loren Merritt + 2004, Romain Dolbeau 2004, Ville Saari 2005, Nikolaj Poroshin - 2006, Clemens Fruhwirth - 2006, Edouard Gomez 2006, Ivo van Poorten - 2006-2007, Kevin Stone + 2006-2007, 2010-2011, Kevin Stone 2006, Julian Hall - 2008, Loren Merritt 2010, Baptiste Coudurier 2010, Gordon Schmidt - 2010, Laurent Aimar - 2010, Michael Chinen 2010, Niel van der Westhuizen - 2010-2012, Stefano Sabatini - 2012-2013, Clément Bœsch + 2010-2012, Stefano Sabatini + 2012-2013, Clément Bœsch 2012, 2015, Henrik Gramner 2012, Jeremy Tran - 2013, Jean Delvare - 2013-2014, Paul B Mahol + 2013, 2015, Jean Delvare 2013, Vittorio Giovara - 2014-2015, Arwa Arif - 2014-2015, James Darnley + 2013-2016, Paul B Mahol + 2014, James Darnley + 2014, Kieran Kunhya 2014, Red Hat, Inc. + 2014-2015, Arwa Arif + 2015, James Almer + 2015, Janne Grunau + 2015-2016, Martin Storsjo + 2015-2016, Ronald S. Bultje + 2015-2016, Tiancheng "Timothy" Gu + 2016, Alexandra Hájková + 2017, Gerion Entrup License: GPL-2+ FFmpeg is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -669,32 +637,10 @@ or visit . Files: - libavcodec/libutvideodec.cpp - libavcodec/libutvideoenc.cpp - libavcodec/libutvideo.h + compat/solaris/make_sunver.pl + doc/t2h.pm Copyright: - 2011-2012, Derek Buitenhuis -License: GPL-2 - FFmpeg is free software; you can redistribute it and/or - modify it under the terms of the GNU General Public - License as published by the Free Software Foundation; - version 2 of the License. - . - FFmpeg is distributed in the hope that 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. -Comment: - On Debian systems, the full text of the GNU General Public License - version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. - . - You should have received a copy of the GNU General Public - License along with FFmpeg; if not, write to the Free Software - Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Files: doc/t2h.pm -Copyright: - 2011, 2012, Free Software Foundation, Inc. + 2010-2013, Free Software Foundation, Inc. 2014, Andreas Cadhalpun 2014, Tiancheng "Timothy" Gu License: GPL-3+ @@ -716,13 +662,21 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA Files: + compat/cuda/dynlink_cuda.h + compat/cuda/dynlink_cuviddec.h + compat/cuda/dynlink_loader.h + compat/cuda/dynlink_nvcuvid.h + compat/nvenc/nvEncodeAPI.h doc/bootstrap.min.css doc/examples/avio_dir_cmd.c doc/examples/avio_reading.c - doc/examples/decoding_encoding.c + doc/examples/decode_audio.c + doc/examples/decode_video.c doc/examples/demuxing_decoding.c - doc/examples/filtering_audio.c + doc/examples/encode_audio.c + doc/examples/encode_video.c doc/examples/extract_mvs.c + doc/examples/filtering_audio.c doc/examples/filtering_video.c doc/examples/http_multiclient.c doc/examples/metadata.c @@ -736,12 +690,14 @@ libavcodec/arm/jrevdct_arm.S libavcodec/cinepakenc.c libavcodec/nellymoser.c - libavcodec/nellymoserdec.c libavcodec/nellymoser.h + libavcodec/nellymoserdec.c libavcodec/texturedsp.c libavcodec/texturedspenc.c libavcodec/x86/vc1dsp_init.c libavcodec/x86/vc1dsp_mmx.c + libavfilter/vf_avgblur.c + libavfilter/vf_deband.c libavformat/oggdec.c libavformat/oggdec.h libavformat/oggparseogm.c @@ -749,10 +705,12 @@ libavformat/oggparsetheora.c libavformat/oggparsevorbis.c tests/api/api-band-test.c + tests/api/api-codec-param-test.c tests/api/api-flac-test.c tests/api/api-h264-test.c tests/api/api-seek-test.c tests/reference.pnm + tests/api/api-threadmessage-test.c Copyright: 2001, 2003, Fabrice Bellard 2001, Lionel Ulmer @@ -760,22 +718,22 @@ 2005, Måns Rullgård 2005, Matthieu CASTET 2005, Michael Ahlberg - 2007, a840bda5870ba11f19698ff6eb9581dfb0f95fa5 2007, 520e17cd55896441042b14df2566a6eb610ed444 2007, 539459aeb7d425140b62a3ec7dbf6dc8e408a306 + 2007, a840bda5870ba11f19698ff6eb9581dfb0f95fa5 2007, Benjamin Larsson 2007, Christophe GISQUET - 2007, Loic Minier - 2008, Reimar Döffinger + 2007, Loic Minier + 2008, Reimar Döffinger 2009, Benjamin Dobell 2009, Glass Echidna 2010, Nicolas George - 2011, Jonathan Baldwin + 2010-2016, NVIDIA Corporation 2011, 2014, Reinhard Tartler - 2011-2014, Stefano Sabatini + 2011-2014, Stefano Sabatini 2011, Tomas Härdin 2011-2014, Twitter, Inc - 2012, 2014, Clément Bœsch + 2012, 2014, Clément Bœsch 2012, Matthäus G. "Anteru" Chajdas (http://anteru.net) 2013-2014, Rl, Aetey Global Technologies AB 2014, Andrey Utkin @@ -783,11 +741,69 @@ 2014, Lukasz Marek 2015, Anton Khirnov 2015, Ludmila Glinskih + 2015, Matthieu Bouron + 2015, Niklas Haas + 2015-2016, Paul B Mahol 2015, Stephan Holljes 2015, Vittorio Giovara License: Expat Files: + libavcodec/aacdec_fixed.c + libavcodec/aacsbr_fixed.c + libavcodec/ac3dec_fixed.c + libavcodec/arm/vp8dsp_armv6.S + libavcodec/fft_fixed_32.c + libavcodec/fft_init_table.c + libavcodec/fft_table.h + libavcodec/mdct_fixed_32.c + libavcodec/mips/aaccoder_mips.c + libavcodec/mips/aacdec_mips.c + libavcodec/mips/aacdec_mips.h + libavcodec/mips/aacpsdsp_mips.c + libavcodec/mips/aacpsy_mips.h + libavcodec/mips/aacsbr_mips.c + libavcodec/mips/aacsbr_mips.h + libavcodec/mips/ac3dsp_mips.c + libavcodec/mips/acelp_filters_mips.c + libavcodec/mips/acelp_vectors_mips.c + libavcodec/mips/amrwbdec_mips.c + libavcodec/mips/amrwbdec_mips.h + libavcodec/mips/celp_filters_mips.c + libavcodec/mips/celp_math_mips.c + libavcodec/mips/compute_antialias_fixed.h + libavcodec/mips/compute_antialias_float.h + libavcodec/mips/fft_mips.c + libavcodec/mips/fmtconvert_mips.c + libavcodec/mips/iirfilter_mips.c + libavcodec/mips/lsp_mips.h + libavcodec/mips/mpegaudiodsp_mips_fixed.c + libavcodec/mips/mpegaudiodsp_mips_float.c + libavcodec/mips/sbrdsp_mips.c + libavutil/fixed_dsp.c + libavutil/fixed_dsp.h + libavutil/mips/float_dsp_mips.c + libavutil/mips/libm_mips.h + libavutil/softfloat_tables.h +Copyright: + 2005-2006, Oded Shimon + 2006-2007, Maxim Gavrilov + 2008-2009, Robert Swain + 2009-2010, Alex Converse + 2010, Google Inc. + 2010, Rob Clark + 2011, Mans Rullgard + 2012-2013, MIPS Technologies, Inc., California. +License: LGPL-2.1+ and BSD-3-clause +Comment: + On Debian systems, the full text of the GNU Lesser General Public License + version 2.1 can be found in the file `/usr/share/common-licenses/LGPL-2.1'. + . + You should have received a copy of the GNU Lesser General Public + License along with FFmpeg; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Files: tools/cws2fws.c tools/qt-faststart.c Copyright: @@ -799,6 +815,7 @@ Files: compat/windows/makedef libavcodec/faandct.c + libavcodec/interplayacm.c libavcodec/libfdk-aacdec.c libavcodec/libfdk-aacenc.c libavcodec/zerocodec.c @@ -808,11 +825,14 @@ Copyright: 2003, Michael Niedermayer 2003, Roman Shaposhnik - 2005-2015, x264 project + 2004-2008, Marko Kreen + 2005-2016, x264 project + 2008, Adam Gashlin 2011, Jonathan Baldwin - 2012-2013, Derek Buitenhuis 2012, Martin Storsjo - 2014, Clément Bœsch + 2012-2013, Derek Buitenhuis + 2014, Clément Bœsch + 2015, Paul B Mahol License: ISC Permission to use, copy, modify, and/or distribute this software for any purpose with or without fee is hereby granted, provided that the above @@ -826,25 +846,6 @@ ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -Files: libavutil/adler32.c -Copyright: 1995, Mark Adler -License: Zlib - This software is provided 'as-is', without any express or implied - warranty. In no event will the authors be held liable for any damages - arising from the use of this software. - . - Permission is granted to anyone to use this software for any purpose, - including commercial applications, and to alter it and redistribute it - freely, subject to the following restrictions: - . - 1. The origin of this software must not be misrepresented; you must not - claim that you wrote the original software. If you use this software - in a product, an acknowledgment in the product documentation would be - appreciated but is not required. - 2. Altered source versions must be plainly marked as such, and must not be - misrepresented as being the original software. - 3. This notice may not be removed or altered from any source distribution. - Files: libavcodec/jfdctfst.c libavcodec/jfdctint_template.c @@ -883,8 +884,122 @@ of commercial products, provided that all warranty or liability claims are assumed by the product vendor. +Files: libavcodec/j2kenc.c +Copyright: + 2001-2003, David Janssens + 2002-2003, Yannick Verschueren + 2002-2007, Communications and Remote Sensing Laboratory, Universite catholique de Louvain (UCL), Belgium + 2002-2007, Professor Benoit Macq + 2003-2007, Francois-Olivier Devaux and Antonin Descampe + 2005, Herve Drolon, FreeImage Team + 2007, Callum Lerwick + 2007, Kamil Nowosad +License: LGPL-2.1+ and BSD-2-clause + +Files: libavutil/adler32.c +Copyright: 1995, Mark Adler +License: Zlib + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + . + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + . + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + +Files: + libavfilter/af_hdcd.c +Copyright: + 2010, Chris Moeller +License: BSD-3-clause + +Files: + libavfilter/ebur128.c + libavfilter/ebur128.h +Copyright: + 2011, Jan Kokemüller +License: LGPL-2.1+ and Expat + +Files: + libavfilter/vf_gblur.c +Copyright: + 2011, Pascal Getreuer + 2016, Paul B Mahol +License: BSD-2-clause + +Files: libavformat/aadec.c +Copyright: + 2001-2014, Jim Teeuwen + 2015, Vesselin Bontchev +License: BSD-1-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + . + THIS SOFTWARE IS PROVIDED BY THE MIPS TECHNOLOGIES, INC. ``AS IS'' AND + ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +Files: libavcodec/libzvbi-teletextdec.c +Copyright: + 2005-2010, 2012, Wolfram Gloger + 2013, Marton Balint +License: LGPL-2+ + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Lesser General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + . + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Lesser General Public License for more details. +Comment: + On Debian systems, the full text of the GNU Lesser General Public License + version 2 can be found in the file `/usr/share/common-licenses/GPL-2'. + . + You should have received a copy of the GNU Lesser General Public + License along with this library; if not, write to the Free Software + Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Files: libswresample/resample.c +Copyright: + 2004-2012, Michael Niedermayer + 2006, Xiaogang Zhang +License: LGPL-2.1+ and BSL + +Files: + COPYING.GPLv2 + COPYING.GPLv3 + COPYING.LGPLv2.1 + COPYING.LGPLv3 +Copyright: 1989, 1991, 1999, 2007, Free Software Foundation, Inc. +License: FSF + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + Files: debian/* -Copyright: 2014-2016, Andreas Cadhalpun +Copyright: + 2014-2017, Andreas Cadhalpun + 2016, Sebastian Ramacher License: LGPL-2.1+ Comment: On Debian systems, the full text of the GNU Lesser General Public License @@ -908,7 +1023,29 @@ This manual page was written by Andres Mejia for the Debian GNU/Linux system, but may be used by others. -License: BSD-3-Clause +License: BSD-2-clause + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + . + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS `AS IS' + AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + POSSIBILITY OF SUCH DAMAGE. + +License: BSD-3-clause Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: @@ -933,6 +1070,29 @@ OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +License: BSL + Permission is hereby granted, free of charge, to any person or organization + obtaining a copy of the software and accompanying documentation covered by + this license (the "Software") to use, reproduce, display, distribute, + execute, and transmit the Software, and to prepare derivative works of the + Software, and to permit third-parties to whom the Software is furnished to + do so, all subject to the following: + . + The copyright notices in the Software and this entire statement, including + the above license grant, this restriction and the following disclaimer, + must be included in all copies of the Software, in whole or in part, and + all derivative works of the Software, unless such copies or derivative + works are solely in the form of machine-executable object code generated by + a source language processor. + . + 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, TITLE AND NON-INFRINGEMENT. IN NO EVENT + SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE + FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, + ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. + License: Expat Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal @@ -966,5 +1126,5 @@ License: Sundry This source code is freely redistributable and may be used for any purpose. This copyright notice must be maintained. - Juergen Mueller And Sundry Contributors are not responsible for + Juergen Mueller/Edward Beingessner And Sundry Contributors are not responsible for the consequences of using this software. diff -Nru ffmpeg-2.8.6/debian/gbp.conf ffmpeg-3.3.3/debian/gbp.conf --- ffmpeg-2.8.6/debian/gbp.conf 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/gbp.conf 2017-08-05 14:03:46.000000000 +0000 @@ -1,2 +1,4 @@ [DEFAULT] pristine-tar = True +debian-branch = master +upstream-branch = upstream diff -Nru ffmpeg-2.8.6/debian/libavcodec57.install ffmpeg-3.3.3/debian/libavcodec57.install --- ffmpeg-2.8.6/debian/libavcodec57.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec57.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavcodec.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec57.install.powerpc ffmpeg-3.3.3/debian/libavcodec57.install.powerpc --- ffmpeg-2.8.6/debian/libavcodec57.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec57.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavcodec.so.* +usr/lib/*/*/libavcodec.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec57.lintian-overrides ffmpeg-3.3.3/debian/libavcodec57.lintian-overrides --- ffmpeg-2.8.6/debian/libavcodec57.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec57.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,7 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Upstream's hand-written assembler optimizations are not position independent +# on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f84 +libavcodec57 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavcodec.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec-extra57.install ffmpeg-3.3.3/debian/libavcodec-extra57.install --- ffmpeg-2.8.6/debian/libavcodec-extra57.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-extra57.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavcodec.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec-extra57.install.powerpc ffmpeg-3.3.3/debian/libavcodec-extra57.install.powerpc --- ffmpeg-2.8.6/debian/libavcodec-extra57.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-extra57.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavcodec.so.* +usr/lib/*/*/libavcodec.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec-extra57.lintian-overrides ffmpeg-3.3.3/debian/libavcodec-extra57.lintian-overrides --- ffmpeg-2.8.6/debian/libavcodec-extra57.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-extra57.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,10 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Upstream's hand-written assembler optimizations are not position independent +# on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f84 +libavcodec-extra57 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavcodec.so.* + +# This is intentional, because this package provides an alternative variant with the same soname. +libavcodec-extra57: package-name-doesnt-match-sonames libavcodec* diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.install ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.install --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.install 2016-02-22 06:22:26.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libavcodec-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.install.powerpc ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.install.powerpc --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libavcodec-ffmpeg.so.* -usr/lib/*/*/libavcodec-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.lintian-overrides ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.lintian-overrides --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,8 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libavcodec-ffmpeg56 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavcodec-ffmpeg.so.* -# The two packages provide the same API/ABI, so the alternative dependency is correct. -libavcodec-ffmpeg56: symbols-declares-dependency-on-other-package libavcodec-ffmpeg-extra* #MINVER# diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.symbols ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.symbols --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg56.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg56.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,229 +0,0 @@ -libavcodec-ffmpeg.so.56 libavcodec-ffmpeg56 #MINVER# | libavcodec-ffmpeg-extra56 #MINVER# - LIBAVCODEC_FFMPEG_56@LIBAVCODEC_FFMPEG_56 7:2.4 - audio_resample@LIBAVCODEC_FFMPEG_56 7:2.4 - audio_resample_close@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_alloc_vdpaucontext@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_convert@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_convert_alloc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_convert_free@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_resample_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_close@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_filter@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_ffversion@LIBAVCODEC_FFMPEG_56 7:2.5.2 - av_codec_get_chroma_intra_matrix@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_codec_descriptor@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_codec_properties@LIBAVCODEC_FFMPEG_56 7:2.8 - av_codec_get_lowres@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_max_lowres@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_pkt_timebase@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_seek_preroll@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_is_decoder@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_is_encoder@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_chroma_intra_matrix@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_codec_descriptor@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_lowres@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_pkt_timebase@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_seek_preroll@LIBAVCODEC_FFMPEG_56 7:2.4 - av_copy_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_copy_packet_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dct_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dct_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dct_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_destruct_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dup_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dv_codec_profile2@LIBAVCODEC_FFMPEG_56 7:2.6 - av_dv_codec_profile@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dv_frame_profile@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fast_padded_malloc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fast_padded_mallocz@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_permute@LIBAVCODEC_FFMPEG_56 7:2.4 - av_free_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_audio_frame_duration@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_bits_per_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_codec_tag_string@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_exact_bits_per_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_pcm_codec@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_profile_name@LIBAVCODEC_FFMPEG_56 7:2.4 - av_grow_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_hwaccel_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_imdct_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_imdct_half@LIBAVCODEC_FFMPEG_56 7:2.4 - av_init_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_lockmgr_register@LIBAVCODEC_FFMPEG_56 7:2.4 - av_log_ask_for_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_log_missing_feature@LIBAVCODEC_FFMPEG_56 7:2.4 - av_mdct_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_mdct_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_mdct_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_new_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_copy_props@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_free_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_from_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_get_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_merge_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_move_ref@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_new_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_pack_dictionary@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_ref@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_rescale_ts@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_shrink_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_side_data_name@LIBAVCODEC_FFMPEG_56 7:2.7 - av_packet_split_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_unpack_dictionary@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_unref@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_change@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_close@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_parse2@LIBAVCODEC_FFMPEG_56 7:2.4 - av_picture_copy@LIBAVCODEC_FFMPEG_56 7:2.4 - av_picture_crop@LIBAVCODEC_FFMPEG_56 7:2.4 - av_picture_pad@LIBAVCODEC_FFMPEG_56 7:2.4 - av_qsv_alloc_context@LIBAVCODEC_FFMPEG_56 7:2.6 - av_rdft_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_rdft_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_rdft_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_register_bitstream_filter@LIBAVCODEC_FFMPEG_56 7:2.4 - av_register_codec_parser@LIBAVCODEC_FFMPEG_56 7:2.4 - av_register_hwaccel@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample_close@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample_compensate@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_shrink_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_vdpau_alloc_context@LIBAVCODEC_FFMPEG_56 7:2.4 - av_vdpau_bind_context@LIBAVCODEC_FFMPEG_56 7:2.5 - (optional)av_vdpau_get_profile@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_vdpau_get_surface_parameters@LIBAVCODEC_FFMPEG_56 7:2.6 - (optional)av_vdpau_hwaccel_get_render2@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_vdpau_hwaccel_set_render2@LIBAVCODEC_FFMPEG_56 7:2.4 - av_vorbis_parse_frame@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_frame_flags@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_free@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_init@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_reset@LIBAVCODEC_FFMPEG_56 7:2.5 - av_xiphlacing@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_align_dimensions2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_align_dimensions@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_alloc_context3@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_alloc_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_chroma_pos_to_enum@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_close@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_configuration@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_copy_context@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_dct_alloc@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_dct_get_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_dct_init@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_audio3@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_audio4@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_subtitle2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_video2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_execute2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_execute@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_get_buffer2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_get_buffer@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_get_format@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_reget_buffer@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_release_buffer@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_descriptor_get@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_descriptor_get_by_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_descriptor_next@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_audio2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_audio@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_subtitle@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_video2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_video@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_enum_to_chroma_pos@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_fill_audio_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_best_pix_fmt2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_best_pix_fmt_of_2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_best_pix_fmt_of_list@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_decoder@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_decoder_by_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_encoder@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_encoder_by_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_flush_buffers@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_free_context@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_free_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_chroma_sub_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_context_defaults3@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_edge_width@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_frame_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_frame_defaults@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_pix_fmt_loss@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_subtitle_rect_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_type@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_is_open@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_license@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_open2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_pix_fmt_to_codec_tag@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_register@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_register_all@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_set_dimensions@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_string@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_version@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_alloc@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_deinterlace@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_fill@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_free@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_get_size@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_layout@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_aac_parse_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_ac3_channel_layout_tab@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_ac3_parse_header2@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_ac3_parse_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_align_put_bits@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_bprint_to_extradata@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_color_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_copy_bits@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_copy_pce_data@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dca_convert_bitstream@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dca_sample_rates@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dirac_parse_sequence_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dnxhd_get_frame_size@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dnxhd_get_interlaced@LIBAVCODEC_FFMPEG_56 7:2.7 - avpriv_do_elbg@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dv_frame_profile2@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_exif_decode_ifd@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_find_pix_fmt@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_find_start_code@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_flac_is_extradata_valid@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_flac_parse_streaminfo@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_get_raw_pix_fmt_tags@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_h264_has_num_reorder_frames@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_init_elbg@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_lock_avformat@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_ac_chrominance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_ac_luminance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_dc_chrominance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_dc_luminance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_val_ac_chrominance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_val_ac_luminance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_val_dc@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_bitrate_tab@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_decode_header2@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_decode_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_freq_tab@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpeg4audio_get_config@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpeg4audio_sample_rates@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpegaudio_decode_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_pix_fmt_bps_avi@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_pix_fmt_bps_mov@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_put_string@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_split_xiph_headers@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_tak_parse_streaminfo@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_toupper4@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_unlock_avformat@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_extradata@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_frame_flags@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_reset@LIBAVCODEC_FFMPEG_56 7:2.4 - avsubtitle_free@LIBAVCODEC_FFMPEG_56 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.install ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.install --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libavcodec-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.install.powerpc ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.install.powerpc --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libavcodec-ffmpeg.so.* -usr/lib/*/*/libavcodec-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.lintian-overrides ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.lintian-overrides --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libavcodec-ffmpeg-extra56 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavcodec-ffmpeg.so.* -# The two packages provide the same API/ABI, so the alternative dependency is correct. -libavcodec-ffmpeg-extra56: symbols-declares-dependency-on-other-package libavcodec-ffmpeg* #MINVER# -# This is intentional, because this package provides an alternative variant with the same soname. -libavcodec-ffmpeg-extra56: package-name-doesnt-match-sonames libavcodec-ffmpeg* diff -Nru ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.symbols ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.symbols --- ffmpeg-2.8.6/debian/libavcodec-ffmpeg-extra56.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavcodec-ffmpeg-extra56.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,229 +0,0 @@ -libavcodec-ffmpeg.so.56 libavcodec-ffmpeg56 #MINVER# | libavcodec-ffmpeg-extra56 #MINVER# - LIBAVCODEC_FFMPEG_56@LIBAVCODEC_FFMPEG_56 7:2.4 - audio_resample@LIBAVCODEC_FFMPEG_56 7:2.4 - audio_resample_close@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_alloc_vdpaucontext@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_convert@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_convert_alloc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_convert_free@LIBAVCODEC_FFMPEG_56 7:2.4 - av_audio_resample_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_close@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_filter@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_bitstream_filter_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_ffversion@LIBAVCODEC_FFMPEG_56 7:2.5.2 - av_codec_get_chroma_intra_matrix@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_codec_descriptor@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_codec_properties@LIBAVCODEC_FFMPEG_56 7:2.8 - av_codec_get_lowres@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_max_lowres@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_pkt_timebase@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_get_seek_preroll@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_is_decoder@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_is_encoder@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_chroma_intra_matrix@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_codec_descriptor@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_lowres@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_pkt_timebase@LIBAVCODEC_FFMPEG_56 7:2.4 - av_codec_set_seek_preroll@LIBAVCODEC_FFMPEG_56 7:2.4 - av_copy_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_copy_packet_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dct_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dct_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dct_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_destruct_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dup_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dv_codec_profile2@LIBAVCODEC_FFMPEG_56 7:2.6 - av_dv_codec_profile@LIBAVCODEC_FFMPEG_56 7:2.4 - av_dv_frame_profile@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fast_padded_malloc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fast_padded_mallocz@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_fft_permute@LIBAVCODEC_FFMPEG_56 7:2.4 - av_free_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_audio_frame_duration@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_bits_per_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_codec_tag_string@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_exact_bits_per_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_pcm_codec@LIBAVCODEC_FFMPEG_56 7:2.4 - av_get_profile_name@LIBAVCODEC_FFMPEG_56 7:2.4 - av_grow_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_hwaccel_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_imdct_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_imdct_half@LIBAVCODEC_FFMPEG_56 7:2.4 - av_init_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_lockmgr_register@LIBAVCODEC_FFMPEG_56 7:2.4 - av_log_ask_for_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_log_missing_feature@LIBAVCODEC_FFMPEG_56 7:2.4 - av_mdct_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_mdct_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_mdct_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_new_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_copy_props@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_free_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_from_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_get_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_merge_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_move_ref@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_new_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_pack_dictionary@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_ref@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_rescale_ts@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_shrink_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_side_data_name@LIBAVCODEC_FFMPEG_56 7:2.7 - av_packet_split_side_data@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_unpack_dictionary@LIBAVCODEC_FFMPEG_56 7:2.4 - av_packet_unref@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_change@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_close@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_next@LIBAVCODEC_FFMPEG_56 7:2.4 - av_parser_parse2@LIBAVCODEC_FFMPEG_56 7:2.4 - av_picture_copy@LIBAVCODEC_FFMPEG_56 7:2.4 - av_picture_crop@LIBAVCODEC_FFMPEG_56 7:2.4 - av_picture_pad@LIBAVCODEC_FFMPEG_56 7:2.4 - av_qsv_alloc_context@LIBAVCODEC_FFMPEG_56 7:2.6 - av_rdft_calc@LIBAVCODEC_FFMPEG_56 7:2.4 - av_rdft_end@LIBAVCODEC_FFMPEG_56 7:2.4 - av_rdft_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_register_bitstream_filter@LIBAVCODEC_FFMPEG_56 7:2.4 - av_register_codec_parser@LIBAVCODEC_FFMPEG_56 7:2.4 - av_register_hwaccel@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample_close@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample_compensate@LIBAVCODEC_FFMPEG_56 7:2.4 - av_resample_init@LIBAVCODEC_FFMPEG_56 7:2.4 - av_shrink_packet@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_vdpau_alloc_context@LIBAVCODEC_FFMPEG_56 7:2.4 - av_vdpau_bind_context@LIBAVCODEC_FFMPEG_56 7:2.5 - (optional)av_vdpau_get_profile@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_vdpau_get_surface_parameters@LIBAVCODEC_FFMPEG_56 7:2.6 - (optional)av_vdpau_hwaccel_get_render2@LIBAVCODEC_FFMPEG_56 7:2.4 - (optional)av_vdpau_hwaccel_set_render2@LIBAVCODEC_FFMPEG_56 7:2.4 - av_vorbis_parse_frame@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_frame_flags@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_free@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_init@LIBAVCODEC_FFMPEG_56 7:2.5 - av_vorbis_parse_reset@LIBAVCODEC_FFMPEG_56 7:2.5 - av_xiphlacing@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_align_dimensions2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_align_dimensions@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_alloc_context3@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_alloc_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_chroma_pos_to_enum@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_close@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_configuration@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_copy_context@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_dct_alloc@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_dct_get_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_dct_init@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_audio3@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_audio4@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_subtitle2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_decode_video2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_execute2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_execute@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_get_buffer2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_get_buffer@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_get_format@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_reget_buffer@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_default_release_buffer@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_descriptor_get@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_descriptor_get_by_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_descriptor_next@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_audio2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_audio@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_subtitle@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_video2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_encode_video@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_enum_to_chroma_pos@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_fill_audio_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_best_pix_fmt2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_best_pix_fmt_of_2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_best_pix_fmt_of_list@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_decoder@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_decoder_by_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_encoder@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_find_encoder_by_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_flush_buffers@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_free_context@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_free_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_chroma_sub_sample@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_context_defaults3@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_edge_width@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_frame_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_frame_defaults@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_name@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_pix_fmt_loss@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_subtitle_rect_class@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_get_type@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_is_open@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_license@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_open2@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_pix_fmt_to_codec_tag@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_register@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_register_all@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_set_dimensions@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_string@LIBAVCODEC_FFMPEG_56 7:2.4 - avcodec_version@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_alloc@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_deinterlace@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_fill@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_free@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_get_size@LIBAVCODEC_FFMPEG_56 7:2.4 - avpicture_layout@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_aac_parse_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_ac3_channel_layout_tab@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_ac3_parse_header2@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_ac3_parse_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_align_put_bits@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_bprint_to_extradata@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_color_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_copy_bits@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_copy_pce_data@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dca_convert_bitstream@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dca_sample_rates@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dirac_parse_sequence_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dnxhd_get_frame_size@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dnxhd_get_interlaced@LIBAVCODEC_FFMPEG_56 7:2.7 - avpriv_do_elbg@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_dv_frame_profile2@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_exif_decode_ifd@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_find_pix_fmt@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_find_start_code@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_flac_is_extradata_valid@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_flac_parse_streaminfo@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_get_raw_pix_fmt_tags@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_h264_has_num_reorder_frames@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_init_elbg@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_lock_avformat@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_ac_chrominance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_ac_luminance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_dc_chrominance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_bits_dc_luminance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_val_ac_chrominance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_val_ac_luminance@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mjpeg_val_dc@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_bitrate_tab@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_decode_header2@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_decode_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpa_freq_tab@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpeg4audio_get_config@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpeg4audio_sample_rates@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_mpegaudio_decode_header@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_pix_fmt_bps_avi@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_pix_fmt_bps_mov@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_put_string@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_split_xiph_headers@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_tak_parse_streaminfo@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_toupper4@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_unlock_avformat@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_extradata@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_frame@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_frame_flags@LIBAVCODEC_FFMPEG_56 7:2.4 - avpriv_vorbis_parse_reset@LIBAVCODEC_FFMPEG_56 7:2.4 - avsubtitle_free@LIBAVCODEC_FFMPEG_56 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libavdevice57.install ffmpeg-3.3.3/debian/libavdevice57.install --- ffmpeg-2.8.6/debian/libavdevice57.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavdevice57.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavdevice.so.* diff -Nru ffmpeg-2.8.6/debian/libavdevice57.install.powerpc ffmpeg-3.3.3/debian/libavdevice57.install.powerpc --- ffmpeg-2.8.6/debian/libavdevice57.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavdevice57.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavdevice.so.* +usr/lib/*/*/libavdevice.so.* diff -Nru ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.install ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.install --- ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libavdevice-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.install.powerpc ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.install.powerpc --- ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libavdevice-ffmpeg.so.* -usr/lib/*/*/libavdevice-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.lintian-overrides ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.lintian-overrides --- ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libavdevice-ffmpeg56 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavdevice-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.symbols ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.symbols --- ffmpeg-2.8.6/debian/libavdevice-ffmpeg56.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavdevice-ffmpeg56.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,20 +0,0 @@ -libavdevice-ffmpeg.so.56 libavdevice-ffmpeg56 #MINVER# - LIBAVDEVICE_FFMPEG_56@LIBAVDEVICE_FFMPEG_56 7:2.4 - av_device_capabilities@LIBAVDEVICE_FFMPEG_56 7:2.4.3 - av_device_ffversion@LIBAVDEVICE_FFMPEG_56 7:2.5.2 - av_input_audio_device_next@LIBAVDEVICE_FFMPEG_56 7:2.4.3 - av_input_video_device_next@LIBAVDEVICE_FFMPEG_56 7:2.4.3 - av_output_audio_device_next@LIBAVDEVICE_FFMPEG_56 7:2.4.3 - av_output_video_device_next@LIBAVDEVICE_FFMPEG_56 7:2.4.3 - avdevice_app_to_dev_control_message@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_capabilities_create@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_capabilities_free@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_configuration@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_dev_to_app_control_message@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_free_list_devices@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_license@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_list_devices@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_list_input_sources@LIBAVDEVICE_FFMPEG_56 7:2.6 - avdevice_list_output_sinks@LIBAVDEVICE_FFMPEG_56 7:2.6 - avdevice_register_all@LIBAVDEVICE_FFMPEG_56 7:2.4 - avdevice_version@LIBAVDEVICE_FFMPEG_56 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libavfilter6.install ffmpeg-3.3.3/debian/libavfilter6.install --- ffmpeg-2.8.6/debian/libavfilter6.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter6.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavfilter.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter6.install.powerpc ffmpeg-3.3.3/debian/libavfilter6.install.powerpc --- ffmpeg-2.8.6/debian/libavfilter6.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter6.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavfilter.so.* +usr/lib/*/*/libavfilter.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter6.lintian-overrides ffmpeg-3.3.3/debian/libavfilter6.lintian-overrides --- ffmpeg-2.8.6/debian/libavfilter6.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter6.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,7 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Upstream's hand-written assembler optimizations are not position independent +# on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f84 +libavfilter6 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavfilter.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter-extra6.install ffmpeg-3.3.3/debian/libavfilter-extra6.install --- ffmpeg-2.8.6/debian/libavfilter-extra6.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter-extra6.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavfilter.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter-extra6.install.powerpc ffmpeg-3.3.3/debian/libavfilter-extra6.install.powerpc --- ffmpeg-2.8.6/debian/libavfilter-extra6.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter-extra6.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavfilter.so.* +usr/lib/*/*/libavfilter.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter-extra6.lintian-overrides ffmpeg-3.3.3/debian/libavfilter-extra6.lintian-overrides --- ffmpeg-2.8.6/debian/libavfilter-extra6.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter-extra6.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,10 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Upstream's hand-written assembler optimizations are not position independent +# on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f84 +libavfilter-extra6 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavfilter.so.* + +# This is intentional, because this package provides an alternative variant with the same soname. +libavfilter-extra6: package-name-doesnt-match-sonames libavfilter* diff -Nru ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.install ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.install --- ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libavfilter-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.install.powerpc ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.install.powerpc --- ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libavfilter-ffmpeg.so.* -usr/lib/*/*/libavfilter-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.lintian-overrides ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.lintian-overrides --- ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libavfilter-ffmpeg5 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavfilter-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.symbols ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.symbols --- ffmpeg-2.8.6/debian/libavfilter-ffmpeg5.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavfilter-ffmpeg5.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,82 +0,0 @@ -libavfilter-ffmpeg.so.5 libavfilter-ffmpeg5 #MINVER# - LIBAVFILTER_FFMPEG_5@LIBAVFILTER_FFMPEG_5 7:2.4 - av_abuffersink_params_alloc@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_get_buffer_ref@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_get_frame@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_get_frame_flags@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_get_frame_rate@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_get_samples@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_params_alloc@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_poll_frame@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_read@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_read_samples@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersink_set_frame_size@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersrc_add_frame@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersrc_add_frame_flags@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersrc_add_ref@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersrc_buffer@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersrc_get_nb_failed_requests@LIBAVFILTER_FFMPEG_5 7:2.4 - av_buffersrc_write_frame@LIBAVFILTER_FFMPEG_5 7:2.4 - av_filter_ffversion@LIBAVFILTER_FFMPEG_5 7:2.5.2 - av_filter_next@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_add_matrix@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_all_channel_layouts@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_config_links@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_configuration@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_copy_buf_props@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_copy_buffer_ref_props@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_copy_frame_props@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_free@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_audio_buffer_ref_from_arrays@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_audio_buffer_ref_from_arrays_channels@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_audio_buffer_ref_from_frame@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_buffer_ref_from_frame@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_by_name@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_class@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_matrix@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_video_buffer_ref_from_arrays@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_get_video_buffer_ref_from_frame@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_add_filter@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_alloc@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_alloc_filter@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_config@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_create_filter@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_dump@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_free@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_get_filter@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_parse2@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_parse@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_parse_ptr@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_queue_command@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_request_oldest@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_send_command@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_graph_set_auto_convert@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_init_dict@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_init_filter@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_init_str@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_inout_alloc@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_inout_free@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_insert_filter@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_license@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_link@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_link_free@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_link_get_channels@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_link_set_closed@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_make_format64_list@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_mul_matrix@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_next@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_open@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_pad_count@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_pad_get_name@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_pad_get_type@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_process_command@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_ref_buffer@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_ref_get_channels@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_register@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_register_all@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_sub_matrix@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_transform@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_uninit@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_unref_buffer@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_unref_bufferp@LIBAVFILTER_FFMPEG_5 7:2.4 - avfilter_version@LIBAVFILTER_FFMPEG_5 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libavformat57.install ffmpeg-3.3.3/debian/libavformat57.install --- ffmpeg-2.8.6/debian/libavformat57.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavformat57.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavformat.so.* diff -Nru ffmpeg-2.8.6/debian/libavformat57.install.powerpc ffmpeg-3.3.3/debian/libavformat57.install.powerpc --- ffmpeg-2.8.6/debian/libavformat57.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavformat57.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavformat.so.* +usr/lib/*/*/libavformat.so.* diff -Nru ffmpeg-2.8.6/debian/libavformat57.lintian-overrides ffmpeg-3.3.3/debian/libavformat57.lintian-overrides --- ffmpeg-2.8.6/debian/libavformat57.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavformat57.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +# [67] = "Psychadelic", /* sic, the misspelling is used in the specification */ +libavformat57: spelling-error-in-binary usr/lib/*/libavformat.so.* Psychadelic Psychedelic diff -Nru ffmpeg-2.8.6/debian/libavformat-ffmpeg56.install ffmpeg-3.3.3/debian/libavformat-ffmpeg56.install --- ffmpeg-2.8.6/debian/libavformat-ffmpeg56.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavformat-ffmpeg56.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libavformat-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavformat-ffmpeg56.install.powerpc ffmpeg-3.3.3/debian/libavformat-ffmpeg56.install.powerpc --- ffmpeg-2.8.6/debian/libavformat-ffmpeg56.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavformat-ffmpeg56.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libavformat-ffmpeg.so.* -usr/lib/*/*/libavformat-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavformat-ffmpeg56.lintian-overrides ffmpeg-3.3.3/debian/libavformat-ffmpeg56.lintian-overrides --- ffmpeg-2.8.6/debian/libavformat-ffmpeg56.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavformat-ffmpeg56.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,9 +0,0 @@ -# [67] = "Psychadelic", /* sic, the misspelling is used in the specification */ -libavformat-ffmpeg56: spelling-error-in-binary usr/lib/*/libavformat-ffmpeg.so.* Psychadelic Psychedelic - -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libavformat-ffmpeg56 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavformat-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavformat-ffmpeg56.symbols ffmpeg-3.3.3/debian/libavformat-ffmpeg56.symbols --- ffmpeg-2.8.6/debian/libavformat-ffmpeg56.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavformat-ffmpeg56.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,176 +0,0 @@ -libavformat-ffmpeg.so.56 libavformat-ffmpeg56 #MINVER# - LIBAVFORMAT_FFMPEG_56@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_add_index_entry@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_append_packet@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_codec_get_id@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_codec_get_tag2@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_codec_get_tag@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_convert_lang_to@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_demuxer_open@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_dump_format@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_filename_number_test@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_find_best_stream@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_find_default_stream_index@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_find_input_format@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_find_program_from_stream@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_fmt_ctx_get_duration_estimation_method@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_ffversion@LIBAVFORMAT_FFMPEG_56 7:2.5.2 - av_format_get_audio_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_get_control_message_cb@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_get_data_codec@LIBAVFORMAT_FFMPEG_56 7:2.6 - av_format_get_metadata_header_padding@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_get_opaque@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_get_open_cb@LIBAVFORMAT_FFMPEG_56 7:2.7 - av_format_get_probe_score@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_get_subtitle_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_get_video_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_inject_global_side_data@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_set_audio_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_set_control_message_cb@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_set_data_codec@LIBAVFORMAT_FFMPEG_56 7:2.6 - av_format_set_metadata_header_padding@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_set_opaque@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_set_open_cb@LIBAVFORMAT_FFMPEG_56 7:2.7 - av_format_set_subtitle_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_format_set_video_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_get_frame_filename@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_get_output_timestamp@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_get_packet@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_guess_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_guess_format@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_guess_frame_rate@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_guess_sample_aspect_ratio@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_hex_dump@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_hex_dump_log@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_iformat_next@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_index_search_timestamp@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_interleaved_write_frame@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_interleaved_write_uncoded_frame@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_match_ext@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_new_program@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_oformat_next@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_pkt_dump2@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_pkt_dump_log2@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_probe_input_buffer2@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_probe_input_buffer@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_probe_input_format2@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_probe_input_format3@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_probe_input_format@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_read_frame@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_read_pause@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_read_play@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_register_all@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_register_input_format@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_register_output_format@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_sdp_create@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_seek_frame@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_stream_get_end_pts@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_stream_get_r_frame_rate@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_stream_get_recommended_encoder_configuration@LIBAVFORMAT_FFMPEG_56 7:2.5 - av_stream_get_side_data@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_stream_set_r_frame_rate@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_stream_set_recommended_encoder_configuration@LIBAVFORMAT_FFMPEG_56 7:2.5 - av_url_split@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_write_frame@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_write_trailer@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_write_uncoded_frame@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_write_uncoded_frame_query@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_alloc_context@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_alloc_output_context2@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_close_input@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_configuration@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_find_stream_info@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_flush@LIBAVFORMAT_FFMPEG_56 7:2.6 - avformat_free_context@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_get_class@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_get_mov_audio_tags@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_get_mov_video_tags@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_get_riff_audio_tags@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_get_riff_video_tags@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_license@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_match_stream_specifier@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_network_deinit@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_network_init@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_new_stream@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_open_input@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_query_codec@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_queue_attached_pictures@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_seek_file@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_version@LIBAVFORMAT_FFMPEG_56 7:2.4 - avformat_write_header@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_accept@LIBAVFORMAT_FFMPEG_56 7:2.8 - avio_alloc_context@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_check@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_close@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_close_dir@LIBAVFORMAT_FFMPEG_56 7:2.7 - avio_close_dyn_buf@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_closep@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_enum_protocols@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_feof@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_find_protocol_name@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_flush@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_free_directory_entry@LIBAVFORMAT_FFMPEG_56 7:2.7 - avio_get_str16be@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_get_str16le@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_get_str@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_handshake@LIBAVFORMAT_FFMPEG_56 7:2.8 - avio_open2@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_open@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_open_dir@LIBAVFORMAT_FFMPEG_56 7:2.7 - avio_open_dyn_buf@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_pause@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_printf@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_put_str16be@LIBAVFORMAT_FFMPEG_56 7:2.6 - avio_put_str16le@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_put_str@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_r8@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rb16@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rb24@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rb32@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rb64@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_read@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_read_dir@LIBAVFORMAT_FFMPEG_56 7:2.7 - avio_read_to_bprint@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rl16@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rl24@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rl32@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_rl64@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_seek@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_seek_time@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_size@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_skip@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_w8@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wb16@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wb24@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wb32@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wb64@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wl16@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wl24@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wl32@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_wl64@LIBAVFORMAT_FFMPEG_56 7:2.4 - avio_write@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_dv_get_packet@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_dv_init_demux@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_dv_produce_packet@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_io_delete@LIBAVFORMAT_FFMPEG_56 7:2.8 - avpriv_io_move@LIBAVFORMAT_FFMPEG_56 7:2.8 - avpriv_mpegts_parse_close@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_mpegts_parse_open@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_mpegts_parse_packet@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_new_chapter@LIBAVFORMAT_FFMPEG_56 7:2.4 - avpriv_set_pts_info@LIBAVFORMAT_FFMPEG_56 7:2.4 - av_stream_get_parser@LIBAVFORMAT_FFMPEG_56 7:2.4 - ff_inet_aton@LIBAVFORMAT_FFMPEG_56 7:2.4 - ff_rtp_get_local_rtcp_port@LIBAVFORMAT_FFMPEG_56 7:2.4 - ff_rtp_get_local_rtp_port@LIBAVFORMAT_FFMPEG_56 7:2.4 - ff_rtsp_parse_line@LIBAVFORMAT_FFMPEG_56 7:2.4 - ff_socket_nonblock@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffio_open_dyn_packet_buf@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffio_set_buf_size@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffurl_close@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffurl_open@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffurl_read_complete@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffurl_seek@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffurl_size@LIBAVFORMAT_FFMPEG_56 7:2.4 - ffurl_write@LIBAVFORMAT_FFMPEG_56 7:2.4 - url_feof@LIBAVFORMAT_FFMPEG_56 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libavresample3.install ffmpeg-3.3.3/debian/libavresample3.install --- ffmpeg-2.8.6/debian/libavresample3.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavresample3.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavresample.so.* diff -Nru ffmpeg-2.8.6/debian/libavresample3.install.powerpc ffmpeg-3.3.3/debian/libavresample3.install.powerpc --- ffmpeg-2.8.6/debian/libavresample3.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavresample3.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavresample.so.* +usr/lib/*/*/libavresample.so.* diff -Nru ffmpeg-2.8.6/debian/libavresample3.lintian-overrides ffmpeg-3.3.3/debian/libavresample3.lintian-overrides --- ffmpeg-2.8.6/debian/libavresample3.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavresample3.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,6 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Therefore -fPIC is not used by the upstream build system on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 +libavresample3 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavresample.so.* diff -Nru ffmpeg-2.8.6/debian/libavresample-ffmpeg2.install ffmpeg-3.3.3/debian/libavresample-ffmpeg2.install --- ffmpeg-2.8.6/debian/libavresample-ffmpeg2.install 2016-02-22 06:22:26.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavresample-ffmpeg2.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libavresample-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavresample-ffmpeg2.install.powerpc ffmpeg-3.3.3/debian/libavresample-ffmpeg2.install.powerpc --- ffmpeg-2.8.6/debian/libavresample-ffmpeg2.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavresample-ffmpeg2.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libavresample-ffmpeg.so.* -usr/lib/*/*/libavresample-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavresample-ffmpeg2.lintian-overrides ffmpeg-3.3.3/debian/libavresample-ffmpeg2.lintian-overrides --- ffmpeg-2.8.6/debian/libavresample-ffmpeg2.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavresample-ffmpeg2.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libavresample-ffmpeg2 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavresample-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavresample-ffmpeg2.symbols ffmpeg-3.3.3/debian/libavresample-ffmpeg2.symbols --- ffmpeg-2.8.6/debian/libavresample-ffmpeg2.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavresample-ffmpeg2.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,23 +0,0 @@ -libavresample-ffmpeg.so.2 libavresample-ffmpeg2 #MINVER# - LIBAVRESAMPLE_FFMPEG_2@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_alloc_context@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_available@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_build_matrix@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_close@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_config@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_configuration@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_convert@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_convert_frame@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_free@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_get_class@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_get_delay@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_get_matrix@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_get_out_samples@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_is_open@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_license@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_open@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_read@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_set_channel_mapping@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_set_compensation@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_set_matrix@LIBAVRESAMPLE_FFMPEG_2 7:2.4 - avresample_version@LIBAVRESAMPLE_FFMPEG_2 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libavutil55.install ffmpeg-3.3.3/debian/libavutil55.install --- ffmpeg-2.8.6/debian/libavutil55.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavutil55.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libavutil.so.* diff -Nru ffmpeg-2.8.6/debian/libavutil55.install.powerpc ffmpeg-3.3.3/debian/libavutil55.install.powerpc --- ffmpeg-2.8.6/debian/libavutil55.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavutil55.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libavutil.so.* +usr/lib/*/*/libavutil.so.* diff -Nru ffmpeg-2.8.6/debian/libavutil-ffmpeg54.install ffmpeg-3.3.3/debian/libavutil-ffmpeg54.install --- ffmpeg-2.8.6/debian/libavutil-ffmpeg54.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavutil-ffmpeg54.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libavutil-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavutil-ffmpeg54.install.powerpc ffmpeg-3.3.3/debian/libavutil-ffmpeg54.install.powerpc --- ffmpeg-2.8.6/debian/libavutil-ffmpeg54.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavutil-ffmpeg54.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libavutil-ffmpeg.so.* -usr/lib/*/*/libavutil-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavutil-ffmpeg54.lintian-overrides ffmpeg-3.3.3/debian/libavutil-ffmpeg54.lintian-overrides --- ffmpeg-2.8.6/debian/libavutil-ffmpeg54.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavutil-ffmpeg54.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libavutil-ffmpeg54 [i386]: shlib-with-non-pic-code usr/lib/i386*/libavutil-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libavutil-ffmpeg54.symbols ffmpeg-3.3.3/debian/libavutil-ffmpeg54.symbols --- ffmpeg-2.8.6/debian/libavutil-ffmpeg54.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libavutil-ffmpeg54.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,459 +0,0 @@ -libavutil-ffmpeg.so.54 libavutil-ffmpeg54 #MINVER# - LIBAVUTIL_FFMPEG_54@LIBAVUTIL_FFMPEG_54 7:2.4 - av_add_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_add_stable@LIBAVUTIL_FFMPEG_54 7:2.4 - av_adler32_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_aes_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_aes_crypt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_aes_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_aes_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_append_path_component@LIBAVUTIL_FFMPEG_54 7:2.7 - av_asprintf@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_drain@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_peek@LIBAVUTIL_FFMPEG_54 7:2.8 - av_audio_fifo_read@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_realloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_reset@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_space@LIBAVUTIL_FFMPEG_54 7:2.4 - av_audio_fifo_write@LIBAVUTIL_FFMPEG_54 7:2.4 - av_base64_decode@LIBAVUTIL_FFMPEG_54 7:2.4 - av_base64_encode@LIBAVUTIL_FFMPEG_54 7:2.4 - av_basename@LIBAVUTIL_FFMPEG_54 7:2.4 - av_blowfish_alloc@LIBAVUTIL_FFMPEG_54 7:2.8 - av_blowfish_crypt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_blowfish_crypt_ecb@LIBAVUTIL_FFMPEG_54 7:2.4 - av_blowfish_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bmg_get@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_append_data@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_chars@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_clear@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_escape@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_finalize@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_get_buffer@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_init_for_buffer@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprint_strftime@LIBAVUTIL_FFMPEG_54 7:2.4 - av_bprintf@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_allocz@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_create@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_default_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_get_opaque@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_get_ref_count@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_is_writable@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_make_writable@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_pool_get@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_pool_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_pool_uninit@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_realloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_ref@LIBAVUTIL_FFMPEG_54 7:2.4 - av_buffer_unref@LIBAVUTIL_FFMPEG_54 7:2.4 - av_calloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_camellia_alloc@LIBAVUTIL_FFMPEG_54 7:2.6 - av_camellia_crypt@LIBAVUTIL_FFMPEG_54 7:2.6 - av_camellia_init@LIBAVUTIL_FFMPEG_54 7:2.6 - av_camellia_size@LIBAVUTIL_FFMPEG_54 7:2.6 - av_cast5_alloc@LIBAVUTIL_FFMPEG_54 7:2.5 - av_cast5_crypt2@LIBAVUTIL_FFMPEG_54 7:2.6 - av_cast5_crypt@LIBAVUTIL_FFMPEG_54 7:2.5 - av_cast5_init@LIBAVUTIL_FFMPEG_54 7:2.5 - av_cast5_size@LIBAVUTIL_FFMPEG_54 7:2.5 - av_channel_layout_extract_channel@LIBAVUTIL_FFMPEG_54 7:2.4 - av_chroma_location_name@LIBAVUTIL_FFMPEG_54 7:2.5 - av_color_primaries_name@LIBAVUTIL_FFMPEG_54 7:2.5 - av_color_range_name@LIBAVUTIL_FFMPEG_54 7:2.5 - av_color_space_name@LIBAVUTIL_FFMPEG_54 7:2.5 - av_color_transfer_name@LIBAVUTIL_FFMPEG_54 7:2.5 - av_compare_mod@LIBAVUTIL_FFMPEG_54 7:2.4 - av_compare_ts@LIBAVUTIL_FFMPEG_54 7:2.4 - av_cpu_count@LIBAVUTIL_FFMPEG_54 7:2.4 - av_crc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_crc_get_table@LIBAVUTIL_FFMPEG_54 7:2.4 - av_crc_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_ctz@LIBAVUTIL_FFMPEG_54 7:2.4 - av_d2q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_d2str@LIBAVUTIL_FFMPEG_54 7:2.4 - av_default_get_category@LIBAVUTIL_FFMPEG_54 7:2.4 - av_default_item_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_des_alloc@LIBAVUTIL_FFMPEG_54 7:2.8 - av_des_crypt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_des_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_des_mac@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dict_copy@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dict_count@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dict_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dict_get@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dict_get_string@LIBAVUTIL_FFMPEG_54 7:2.5 - av_dict_parse_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dict_set@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dict_set_int@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dirname@LIBAVUTIL_FFMPEG_54 7:2.4 - av_display_matrix_flip@LIBAVUTIL_FFMPEG_54 7:2.4 - av_display_rotation_get@LIBAVUTIL_FFMPEG_54 7:2.4 - av_display_rotation_set@LIBAVUTIL_FFMPEG_54 7:2.4 - av_div_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_downmix_info_update_side_data@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dynarray2_add@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dynarray_add@LIBAVUTIL_FFMPEG_54 7:2.4 - av_dynarray_add_nofree@LIBAVUTIL_FFMPEG_54 7:2.4 - av_escape@LIBAVUTIL_FFMPEG_54 7:2.4 - av_expr_eval@LIBAVUTIL_FFMPEG_54 7:2.4 - av_expr_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_expr_parse@LIBAVUTIL_FFMPEG_54 7:2.4 - av_expr_parse_and_eval@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fast_malloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fast_realloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_alloc_array@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_drain@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_freep@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_generic_peek@LIBAVUTIL_FFMPEG_54 7:2.8 - av_fifo_generic_read@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_generic_write@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_grow@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_realloc2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_reset@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fifo_space@LIBAVUTIL_FFMPEG_54 7:2.4 - av_file_map@LIBAVUTIL_FFMPEG_54 7:2.4 - av_file_unmap@LIBAVUTIL_FFMPEG_54 7:2.4 - av_find_best_pix_fmt_of_2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_find_info_tag@LIBAVUTIL_FFMPEG_54 7:2.4 - av_find_nearest_q_idx@LIBAVUTIL_FFMPEG_54 7:2.4 - av_fopen_utf8@LIBAVUTIL_FFMPEG_54 7:2.4 - av_force_cpu_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_clone@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_copy@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_copy_props@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_best_effort_timestamp@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_buffer@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_channels@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_color_range@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_colorspace@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_decode_error_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_metadata@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_pkt_duration@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_pkt_pos@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_pkt_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_plane_buffer@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_qp_table@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_sample_rate@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_get_side_data@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_is_writable@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_make_writable@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_move_ref@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_new_side_data@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_ref@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_remove_side_data@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_best_effort_timestamp@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_channels@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_color_range@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_colorspace@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_decode_error_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_metadata@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_pkt_duration@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_pkt_pos@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_pkt_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_qp_table@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_set_sample_rate@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_side_data_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_frame_unref@LIBAVUTIL_FFMPEG_54 7:2.4 - av_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_freep@LIBAVUTIL_FFMPEG_54 7:2.4 - av_gcd@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_alt_sample_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_bits_per_pixel@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_bytes_per_sample@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_channel_description@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_channel_layout_channel_index@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_channel_layout_nb_channels@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_channel_layout_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_channel_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_colorspace_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_cpu_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_default_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_double@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_int@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_known_color_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_media_type_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_packed_sample_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_padded_bits_per_pixel@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_picture_type_char@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_pix_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_pix_fmt_loss@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_pix_fmt_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_pix_fmt_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_planar_sample_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_random_seed@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_sample_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_sample_fmt_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_sample_fmt_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_standard_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_time_base_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_get_token@LIBAVUTIL_FFMPEG_54 7:2.4 - av_gettime@LIBAVUTIL_FFMPEG_54 7:2.4 - av_gettime_relative@LIBAVUTIL_FFMPEG_54 7:2.4 - av_gettime_relative_is_monotonic@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_final@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_final_b64@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_final_bin@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_final_hex@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_freep@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_get_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_get_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_names@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hash_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hmac_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hmac_calc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hmac_final@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hmac_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hmac_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_hmac_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_check_sar@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_check_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_copy@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_copy_plane@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_copy_to_buffer@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_fill_arrays@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_fill_linesizes@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_fill_max_pixsteps@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_fill_pointers@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_get_buffer_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_image_get_linesize@LIBAVUTIL_FFMPEG_54 7:2.4 - av_int_list_length_for_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_isdigit@LIBAVUTIL_FFMPEG_54 7:2.4 - av_isgraph@LIBAVUTIL_FFMPEG_54 7:2.4 - av_isspace@LIBAVUTIL_FFMPEG_54 7:2.4 - av_isxdigit@LIBAVUTIL_FFMPEG_54 7:2.4 - av_lfg_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log2_16bit@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log_default_callback@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log_format_line@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log_get_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log_get_level@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log_set_callback@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log_set_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_log_set_level@LIBAVUTIL_FFMPEG_54 7:2.4 - av_lzo1x_decode@LIBAVUTIL_FFMPEG_54 7:2.4 - av_malloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_mallocz@LIBAVUTIL_FFMPEG_54 7:2.4 - av_match_list@LIBAVUTIL_FFMPEG_54 7:2.5 - av_match_name@LIBAVUTIL_FFMPEG_54 7:2.4 - av_max_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_md5_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_md5_final@LIBAVUTIL_FFMPEG_54 7:2.4 - av_md5_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_md5_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_md5_sum@LIBAVUTIL_FFMPEG_54 7:2.4 - av_md5_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_memcpy_backptr@LIBAVUTIL_FFMPEG_54 7:2.4 - av_memdup@LIBAVUTIL_FFMPEG_54 7:2.4 - av_mul_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_murmur3_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_murmur3_final@LIBAVUTIL_FFMPEG_54 7:2.4 - av_murmur3_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_murmur3_init_seeded@LIBAVUTIL_FFMPEG_54 7:2.4 - av_murmur3_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_nearer_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_next_option@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_child_class_next@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_child_next@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_copy@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_eval_double@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_eval_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_eval_float@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_eval_int64@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_eval_int@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_eval_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_find2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_find@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_flag_is_set@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_freep_ranges@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_dict_val@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_double@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_image_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_int@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_key_value@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_pixel_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_sample_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_get_video_rate@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_is_set_to_default@LIBAVUTIL_FFMPEG_54 7:2.5 - av_opt_is_set_to_default_by_name@LIBAVUTIL_FFMPEG_54 7:2.5 - av_opt_next@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_ptr@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_query_ranges@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_query_ranges_default@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_serialize@LIBAVUTIL_FFMPEG_54 7:2.5 - av_opt_set@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_bin@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_channel_layout@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_defaults2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_defaults@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_dict2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_dict@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_dict_val@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_double@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_from_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_image_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_int@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_pixel_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_sample_fmt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_set_video_rate@LIBAVUTIL_FFMPEG_54 7:2.4 - av_opt_show2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_parse_color@LIBAVUTIL_FFMPEG_54 7:2.4 - av_parse_cpu_caps@LIBAVUTIL_FFMPEG_54 7:2.4 - av_parse_cpu_flags@LIBAVUTIL_FFMPEG_54 7:2.4 - av_parse_ratio@LIBAVUTIL_FFMPEG_54 7:2.4 - av_parse_time@LIBAVUTIL_FFMPEG_54 7:2.4 - av_parse_video_rate@LIBAVUTIL_FFMPEG_54 7:2.4 - av_parse_video_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pix_fmt_count_planes@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pix_fmt_desc_get@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pix_fmt_desc_get_id@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pix_fmt_desc_next@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pix_fmt_descriptors@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pix_fmt_get_chroma_sub_sample@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pix_fmt_swap_endianness@LIBAVUTIL_FFMPEG_54 7:2.4 - av_pixelutils_get_sad_fn@LIBAVUTIL_FFMPEG_54 7:2.4 - av_q2intfloat@LIBAVUTIL_FFMPEG_54 7:2.7 - av_rc4_alloc@LIBAVUTIL_FFMPEG_54 7:2.8 - av_rc4_crypt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_rc4_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_read_image_line@LIBAVUTIL_FFMPEG_54 7:2.4 - av_realloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_realloc_array@LIBAVUTIL_FFMPEG_54 7:2.4 - av_realloc_f@LIBAVUTIL_FFMPEG_54 7:2.4 - av_reallocp@LIBAVUTIL_FFMPEG_54 7:2.4 - av_reallocp_array@LIBAVUTIL_FFMPEG_54 7:2.4 - av_reduce@LIBAVUTIL_FFMPEG_54 7:2.4 - av_rescale@LIBAVUTIL_FFMPEG_54 7:2.4 - av_rescale_delta@LIBAVUTIL_FFMPEG_54 7:2.4 - av_rescale_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_rescale_q_rnd@LIBAVUTIL_FFMPEG_54 7:2.4 - av_rescale_rnd@LIBAVUTIL_FFMPEG_54 7:2.4 - av_reverse@LIBAVUTIL_FFMPEG_54 7:2.4 - av_ripemd_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_ripemd_final@LIBAVUTIL_FFMPEG_54 7:2.4 - av_ripemd_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_ripemd_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_ripemd_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sample_fmt_is_planar@LIBAVUTIL_FFMPEG_54 7:2.4 - av_samples_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_samples_alloc_array_and_samples@LIBAVUTIL_FFMPEG_54 7:2.4 - av_samples_copy@LIBAVUTIL_FFMPEG_54 7:2.4 - av_samples_fill_arrays@LIBAVUTIL_FFMPEG_54 7:2.4 - av_samples_get_buffer_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_samples_set_silence@LIBAVUTIL_FFMPEG_54 7:2.4 - av_set_cpu_flags_mask@LIBAVUTIL_FFMPEG_54 7:2.4 - av_set_double@LIBAVUTIL_FFMPEG_54 7:2.4 - av_set_int@LIBAVUTIL_FFMPEG_54 7:2.4 - av_set_options_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_set_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_set_string3@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha512_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha512_final@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha512_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha512_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha512_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha_final@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sha_update@LIBAVUTIL_FFMPEG_54 7:2.4 - av_small_strptime@LIBAVUTIL_FFMPEG_54 7:2.4 - av_stereo3d_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_stereo3d_create_side_data@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strcasecmp@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strdup@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strerror@LIBAVUTIL_FFMPEG_54 7:2.4 - av_stristart@LIBAVUTIL_FFMPEG_54 7:2.4 - av_stristr@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strlcat@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strlcatf@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strlcpy@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strncasecmp@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strndup@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strnstr@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strstart@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strtod@LIBAVUTIL_FFMPEG_54 7:2.4 - av_strtok@LIBAVUTIL_FFMPEG_54 7:2.4 - av_sub_q@LIBAVUTIL_FFMPEG_54 7:2.4 - av_tea_alloc@LIBAVUTIL_FFMPEG_54 7:2.8 - av_tea_crypt@LIBAVUTIL_FFMPEG_54 7:2.8 - av_tea_init@LIBAVUTIL_FFMPEG_54 7:2.8 - av_tea_size@LIBAVUTIL_FFMPEG_54 7:2.8 - av_tempfile@LIBAVUTIL_FFMPEG_54 7:2.4 - av_thread_message_queue_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_thread_message_queue_free@LIBAVUTIL_FFMPEG_54 7:2.4 - av_thread_message_queue_recv@LIBAVUTIL_FFMPEG_54 7:2.4 - av_thread_message_queue_send@LIBAVUTIL_FFMPEG_54 7:2.4 - av_thread_message_queue_set_err_recv@LIBAVUTIL_FFMPEG_54 7:2.4 - av_thread_message_queue_set_err_send@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_adjust_ntsc_framenum2@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_check_frame_rate@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_get_smpte_from_framenum@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_init@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_init_from_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_make_mpeg_tc_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_make_smpte_tc_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timecode_make_string@LIBAVUTIL_FFMPEG_54 7:2.4 - av_timegm@LIBAVUTIL_FFMPEG_54 7:2.4 - av_tree_destroy@LIBAVUTIL_FFMPEG_54 7:2.4 - av_tree_enumerate@LIBAVUTIL_FFMPEG_54 7:2.4 - av_tree_find@LIBAVUTIL_FFMPEG_54 7:2.4 - av_tree_insert@LIBAVUTIL_FFMPEG_54 7:2.4 - av_tree_node_alloc@LIBAVUTIL_FFMPEG_54 7:2.4 - av_tree_node_size@LIBAVUTIL_FFMPEG_54 7:2.4 - av_twofish_alloc@LIBAVUTIL_FFMPEG_54 7:2.6 - av_twofish_crypt@LIBAVUTIL_FFMPEG_54 7:2.6 - av_twofish_init@LIBAVUTIL_FFMPEG_54 7:2.6 - av_twofish_size@LIBAVUTIL_FFMPEG_54 7:2.6 - av_usleep@LIBAVUTIL_FFMPEG_54 7:2.4 - av_utf8_decode@LIBAVUTIL_FFMPEG_54 7:2.4 - av_util_ffversion@LIBAVUTIL_FFMPEG_54 7:2.5.2 - av_vbprintf@LIBAVUTIL_FFMPEG_54 7:2.4 - av_version_info@LIBAVUTIL_FFMPEG_54 7:2.8 - av_vlog@LIBAVUTIL_FFMPEG_54 7:2.4 - av_write_image_line@LIBAVUTIL_FFMPEG_54 7:2.4 - av_xtea_alloc@LIBAVUTIL_FFMPEG_54 7:2.8 - av_xtea_crypt@LIBAVUTIL_FFMPEG_54 7:2.4 - av_xtea_init@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_alloc_fixed_dsp@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_cga_font@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_float_dsp_alloc@LIBAVUTIL_FFMPEG_54 7:2.5 - avpriv_float_dsp_init@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_frame_get_metadatap@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_get_gamma_from_trc@LIBAVUTIL_FFMPEG_54 7:2.6 - avpriv_init_lls@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_open@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_report_missing_feature@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_request_sample@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_scalarproduct_float_c@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_set_systematic_pal2@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_solve_lls@LIBAVUTIL_FFMPEG_54 7:2.4 - avpriv_vga16_font@LIBAVUTIL_FFMPEG_54 7:2.4 - avutil_configuration@LIBAVUTIL_FFMPEG_54 7:2.4 - avutil_license@LIBAVUTIL_FFMPEG_54 7:2.4 - avutil_version@LIBAVUTIL_FFMPEG_54 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libpostproc54.install ffmpeg-3.3.3/debian/libpostproc54.install --- ffmpeg-2.8.6/debian/libpostproc54.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libpostproc54.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libpostproc.so.* diff -Nru ffmpeg-2.8.6/debian/libpostproc54.install.powerpc ffmpeg-3.3.3/debian/libpostproc54.install.powerpc --- ffmpeg-2.8.6/debian/libpostproc54.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libpostproc54.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libpostproc.so.* +usr/lib/*/*/libpostproc.so.* diff -Nru ffmpeg-2.8.6/debian/libpostproc54.lintian-overrides ffmpeg-3.3.3/debian/libpostproc54.lintian-overrides --- ffmpeg-2.8.6/debian/libpostproc54.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libpostproc54.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,7 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Upstream's hand-written assembler optimizations are not position independent +# on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f84 +libpostproc54 [i386]: shlib-with-non-pic-code usr/lib/i386*/libpostproc.so.* diff -Nru ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.install ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.install --- ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libpostproc-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.install.powerpc ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.install.powerpc --- ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libpostproc-ffmpeg.so.* -usr/lib/*/*/libpostproc-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.lintian-overrides ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.lintian-overrides --- ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,10 +0,0 @@ -# This is a bug in lintian thinking only libav (and not also FFmpeg) build libpostproc. -# See: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=729203#430 -libpostproc-ffmpeg53: embedded-library usr/lib/*/libpostproc-ffmpeg.so.*: libpostproc - -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libpostproc-ffmpeg53 [i386]: shlib-with-non-pic-code usr/lib/i386*/libpostproc-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.symbols ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.symbols --- ffmpeg-2.8.6/debian/libpostproc-ffmpeg53.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libpostproc-ffmpeg53.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,12 +0,0 @@ -libpostproc-ffmpeg.so.53 libpostproc-ffmpeg53 #MINVER# - LIBPOSTPROC_FFMPEG_53@LIBPOSTPROC_FFMPEG_53 7:2.4 - postproc_configuration@LIBPOSTPROC_FFMPEG_53 7:2.4 - postproc_ffversion@LIBPOSTPROC_FFMPEG_53 7:2.5.2 - postproc_license@LIBPOSTPROC_FFMPEG_53 7:2.4 - postproc_version@LIBPOSTPROC_FFMPEG_53 7:2.4 - pp_free_context@LIBPOSTPROC_FFMPEG_53 7:2.4 - pp_free_mode@LIBPOSTPROC_FFMPEG_53 7:2.4 - pp_get_context@LIBPOSTPROC_FFMPEG_53 7:2.4 - pp_get_mode_by_name_and_quality@LIBPOSTPROC_FFMPEG_53 7:2.4 - pp_help@LIBPOSTPROC_FFMPEG_53 7:2.4 - pp_postprocess@LIBPOSTPROC_FFMPEG_53 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libswresample2.install ffmpeg-3.3.3/debian/libswresample2.install --- ffmpeg-2.8.6/debian/libswresample2.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswresample2.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libswresample.so.* diff -Nru ffmpeg-2.8.6/debian/libswresample2.install.powerpc ffmpeg-3.3.3/debian/libswresample2.install.powerpc --- ffmpeg-2.8.6/debian/libswresample2.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswresample2.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libswresample.so.* +usr/lib/*/*/libswresample.so.* diff -Nru ffmpeg-2.8.6/debian/libswresample2.lintian-overrides ffmpeg-3.3.3/debian/libswresample2.lintian-overrides --- ffmpeg-2.8.6/debian/libswresample2.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswresample2.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,7 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Upstream's hand-written assembler optimizations are not position independent +# on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f84 +libswresample2 [i386]: shlib-with-non-pic-code usr/lib/i386*/libswresample.so.* diff -Nru ffmpeg-2.8.6/debian/libswresample-ffmpeg1.install ffmpeg-3.3.3/debian/libswresample-ffmpeg1.install --- ffmpeg-2.8.6/debian/libswresample-ffmpeg1.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswresample-ffmpeg1.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libswresample-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libswresample-ffmpeg1.install.powerpc ffmpeg-3.3.3/debian/libswresample-ffmpeg1.install.powerpc --- ffmpeg-2.8.6/debian/libswresample-ffmpeg1.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswresample-ffmpeg1.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libswresample-ffmpeg.so.* -usr/lib/*/*/libswresample-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libswresample-ffmpeg1.lintian-overrides ffmpeg-3.3.3/debian/libswresample-ffmpeg1.lintian-overrides --- ffmpeg-2.8.6/debian/libswresample-ffmpeg1.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswresample-ffmpeg1.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libswresample-ffmpeg1 [i386]: shlib-with-non-pic-code usr/lib/i386*/libswresample-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libswresample-ffmpeg1.symbols ffmpeg-3.3.3/debian/libswresample-ffmpeg1.symbols --- ffmpeg-2.8.6/debian/libswresample-ffmpeg1.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswresample-ffmpeg1.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,24 +0,0 @@ -libswresample-ffmpeg.so.1 libswresample-ffmpeg1 #MINVER# - LIBSWRESAMPLE_FFMPEG_1@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_alloc@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_alloc_set_opts@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_close@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_config_frame@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_convert@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_convert_frame@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_drop_output@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_ffversion@LIBSWRESAMPLE_FFMPEG_1 7:2.5.2 - swr_free@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_get_class@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_get_delay@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_get_out_samples@LIBSWRESAMPLE_FFMPEG_1 7:2.7 - swr_init@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_inject_silence@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_is_initialized@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_next_pts@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_set_channel_mapping@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_set_compensation@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swr_set_matrix@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swresample_configuration@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swresample_license@LIBSWRESAMPLE_FFMPEG_1 7:2.4 - swresample_version@LIBSWRESAMPLE_FFMPEG_1 7:2.4 diff -Nru ffmpeg-2.8.6/debian/libswscale4.install ffmpeg-3.3.3/debian/libswscale4.install --- ffmpeg-2.8.6/debian/libswscale4.install 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswscale4.install 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1 @@ +usr/lib/*/libswscale.so.* diff -Nru ffmpeg-2.8.6/debian/libswscale4.install.powerpc ffmpeg-3.3.3/debian/libswscale4.install.powerpc --- ffmpeg-2.8.6/debian/libswscale4.install.powerpc 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswscale4.install.powerpc 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,2 @@ +usr/lib/*/libswscale.so.* +usr/lib/*/*/libswscale.so.* diff -Nru ffmpeg-2.8.6/debian/libswscale4.lintian-overrides ffmpeg-3.3.3/debian/libswscale4.lintian-overrides --- ffmpeg-2.8.6/debian/libswscale4.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswscale4.lintian-overrides 2017-08-05 14:03:46.000000000 +0000 @@ -0,0 +1,7 @@ +# According to Debian policy [1], non position independent code is permitted +# in a shared library on i386 and position independent code may have a +# performance penalty, especially on i386. +# Upstream's hand-written assembler optimizations are not position independent +# on i386. +# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f84 +libswscale4 [i386]: shlib-with-non-pic-code usr/lib/i386*/libswscale.so.* diff -Nru ffmpeg-2.8.6/debian/libswscale-ffmpeg3.install ffmpeg-3.3.3/debian/libswscale-ffmpeg3.install --- ffmpeg-2.8.6/debian/libswscale-ffmpeg3.install 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswscale-ffmpeg3.install 1970-01-01 00:00:00.000000000 +0000 @@ -1 +0,0 @@ -usr/lib/*/libswscale-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libswscale-ffmpeg3.install.powerpc ffmpeg-3.3.3/debian/libswscale-ffmpeg3.install.powerpc --- ffmpeg-2.8.6/debian/libswscale-ffmpeg3.install.powerpc 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswscale-ffmpeg3.install.powerpc 1970-01-01 00:00:00.000000000 +0000 @@ -1,2 +0,0 @@ -usr/lib/*/libswscale-ffmpeg.so.* -usr/lib/*/*/libswscale-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libswscale-ffmpeg3.lintian-overrides ffmpeg-3.3.3/debian/libswscale-ffmpeg3.lintian-overrides --- ffmpeg-2.8.6/debian/libswscale-ffmpeg3.lintian-overrides 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswscale-ffmpeg3.lintian-overrides 1970-01-01 00:00:00.000000000 +0000 @@ -1,6 +0,0 @@ -# According to Debian policy [1], non position independent code is permitted -# in a shared library on i386 and position independent code may have a -# performance penalty, especially on i386. -# Therefore -fPIC is not used by the upstream build system on i386. -# 1: https://www.debian.org/doc/debian-policy/footnotes.html#f83 -libswscale-ffmpeg3 [i386]: shlib-with-non-pic-code usr/lib/i386*/libswscale-ffmpeg.so.* diff -Nru ffmpeg-2.8.6/debian/libswscale-ffmpeg3.symbols ffmpeg-3.3.3/debian/libswscale-ffmpeg3.symbols --- ffmpeg-2.8.6/debian/libswscale-ffmpeg3.symbols 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/libswscale-ffmpeg3.symbols 1970-01-01 00:00:00.000000000 +0000 @@ -1,38 +0,0 @@ -libswscale-ffmpeg.so.3 libswscale-ffmpeg3 #MINVER# - LIBSWSCALE_FFMPEG_3@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_addVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_allocVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_alloc_context@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_alloc_set_opts@LIBSWSCALE_FFMPEG_3 7:2.8 - sws_cloneVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_context_class@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_convVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_convertPalette8ToPacked24@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_convertPalette8ToPacked32@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_freeContext@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_freeFilter@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_freeVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getCachedContext@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getCoefficients@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getColorspaceDetails@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getConstVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getContext@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getDefaultFilter@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getGaussianVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_getIdentityVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_get_class@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_init_context@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_isSupportedEndiannessConversion@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_isSupportedInput@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_isSupportedOutput@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_normalizeVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_printVec2@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_rgb2rgb_init@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_scale@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_scaleVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_setColorspaceDetails@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_shiftVec@LIBSWSCALE_FFMPEG_3 7:2.4 - sws_subVec@LIBSWSCALE_FFMPEG_3 7:2.4 - swscale_configuration@LIBSWSCALE_FFMPEG_3 7:2.4 - swscale_license@LIBSWSCALE_FFMPEG_3 7:2.4 - swscale_version@LIBSWSCALE_FFMPEG_3 7:2.4 diff -Nru ffmpeg-2.8.6/debian/missing-sources/ffmpeg-web/src/less/style.less ffmpeg-3.3.3/debian/missing-sources/ffmpeg-web/src/less/style.less --- ffmpeg-2.8.6/debian/missing-sources/ffmpeg-web/src/less/style.less 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/missing-sources/ffmpeg-web/src/less/style.less 2017-08-05 14:03:46.000000000 +0000 @@ -392,18 +392,6 @@ // Download & Index page #download, #index { - - h4 { - margin-top: 180px; - } - h4.first { - margin-top: 20px; - small { - color: inherit; - font-size: 1em; - } - } - .btn-download-wrapper { text-align: center; margin: 160px auto; @@ -431,6 +419,18 @@ } #download { + + h4 { + margin-top: 180px; + } + h4.first { + margin-top: 20px; + small { + color: inherit; + font-size: 1em; + } + } + .btn-download-wrapper { margin: 40px auto; } diff -Nru ffmpeg-2.8.6/debian/patches/0001-sws-tests-pixdesc_query-save-every-pix-fmts-in-a-lis.patch ffmpeg-3.3.3/debian/patches/0001-sws-tests-pixdesc_query-save-every-pix-fmts-in-a-lis.patch --- ffmpeg-2.8.6/debian/patches/0001-sws-tests-pixdesc_query-save-every-pix-fmts-in-a-lis.patch 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/0001-sws-tests-pixdesc_query-save-every-pix-fmts-in-a-lis.patch 2017-08-05 14:04:15.000000000 +0000 @@ -0,0 +1,57 @@ +From ca23d3491d4c3e316b968242dc14140603b27e70 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= +Date: Thu, 23 Mar 2017 23:21:07 +0100 +Subject: [PATCH 1/3] sws/tests/pixdesc_query: save every pix fmts in a list + +This will be required for the next commit. +--- + libswscale/tests/pixdesc_query.c | 19 +++++++++++++++---- + 1 file changed, 15 insertions(+), 4 deletions(-) + +diff --git a/libswscale/tests/pixdesc_query.c b/libswscale/tests/pixdesc_query.c +index a4aa8ac487..34b33c6851 100644 +--- a/libswscale/tests/pixdesc_query.c ++++ b/libswscale/tests/pixdesc_query.c +@@ -18,6 +18,7 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include "libavutil/mem.h" + #include "libswscale/swscale_internal.h" + + static const struct { +@@ -45,17 +46,27 @@ static const struct { + + int main(void) + { +- int i; ++ int i, j; + + for (i = 0; i < FF_ARRAY_ELEMS(query_tab); i++) { ++ const char **pix_fmts = NULL; ++ int nb_pix_fmts = 0; + const AVPixFmtDescriptor *pix_desc = NULL; +- printf("%s:\n", query_tab[i].class); ++ + while ((pix_desc = av_pix_fmt_desc_next(pix_desc))) { + enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(pix_desc); + if (query_tab[i].cond(pix_fmt)) +- printf(" %s\n", pix_desc->name); ++ av_dynarray_add(&pix_fmts, &nb_pix_fmts, (void *)pix_desc->name); ++ } ++ ++ if (pix_fmts) { ++ printf("%s:\n", query_tab[i].class); ++ for (j = 0; j < nb_pix_fmts; j++) ++ printf(" %s\n", pix_fmts[j]); ++ printf("\n"); ++ ++ free(pix_fmts); + } +- printf("\n"); + } + return 0; + } +-- +2.13.3 + diff -Nru ffmpeg-2.8.6/debian/patches/0002-sws-tests-pixdesc_query-sort-pixel-formats.patch ffmpeg-3.3.3/debian/patches/0002-sws-tests-pixdesc_query-sort-pixel-formats.patch --- ffmpeg-2.8.6/debian/patches/0002-sws-tests-pixdesc_query-sort-pixel-formats.patch 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/0002-sws-tests-pixdesc_query-sort-pixel-formats.patch 2017-08-05 14:04:15.000000000 +0000 @@ -0,0 +1,1440 @@ +From d2c70fc8879024565f4a6397d0230bffdc0afb15 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= +Date: Thu, 23 Mar 2017 23:32:35 +0100 +Subject: [PATCH 2/3] sws/tests/pixdesc_query: sort pixel formats + +--- + libswscale/tests/pixdesc_query.c | 11 + + tests/ref/fate/sws-pixdesc-query | 1158 +++++++++++++++++++------------------- + 2 files changed, 590 insertions(+), 579 deletions(-) + +diff --git a/libswscale/tests/pixdesc_query.c b/libswscale/tests/pixdesc_query.c +index 34b33c6851..a0c843792a 100644 +--- a/libswscale/tests/pixdesc_query.c ++++ b/libswscale/tests/pixdesc_query.c +@@ -18,6 +18,8 @@ + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + ++#include ++ + #include "libavutil/mem.h" + #include "libswscale/swscale_internal.h" + +@@ -44,6 +46,13 @@ static const struct { + {"usePal", usePal}, + }; + ++static int cmp_str(const void *a, const void *b) ++{ ++ const char *s1 = *(const char **)a; ++ const char *s2 = *(const char **)b; ++ return strcmp(s1, s2); ++} ++ + int main(void) + { + int i, j; +@@ -60,6 +69,8 @@ int main(void) + } + + if (pix_fmts) { ++ qsort(pix_fmts, nb_pix_fmts, sizeof(*pix_fmts), cmp_str); ++ + printf("%s:\n", query_tab[i].class); + for (j = 0; j < nb_pix_fmts; j++) + printf(" %s\n", pix_fmts[j]); +diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query +index e262a0cabf..b014afc431 100644 +--- a/tests/ref/fate/sws-pixdesc-query ++++ b/tests/ref/fate/sws-pixdesc-query +@@ -1,807 +1,807 @@ + is16BPS: ++ ayuv64be ++ ayuv64le ++ bgr48be ++ bgr48le ++ bgra64be ++ bgra64le ++ gbrap16be ++ gbrap16le ++ gbrp16be ++ gbrp16le + gray16be + gray16le ++ p016be ++ p016le + rgb48be + rgb48le +- yuv420p16le ++ rgba64be ++ rgba64le ++ ya16be ++ ya16le + yuv420p16be +- yuv422p16le ++ yuv420p16le + yuv422p16be +- yuv444p16le ++ yuv422p16le + yuv444p16be +- bgr48be +- bgr48le +- gbrp16be +- gbrp16le ++ yuv444p16le + yuva420p16be + yuva420p16le + yuva422p16be + yuva422p16le + yuva444p16be + yuva444p16le +- rgba64be +- rgba64le +- bgra64be +- bgra64le +- ya16be +- ya16le +- gbrap16be +- gbrap16le +- ayuv64le +- ayuv64be +- p016le +- p016be + + isNBPS: +- yuv420p9be +- yuv420p9le +- yuv420p10be +- yuv420p10le +- yuv422p10be +- yuv422p10le +- yuv444p9be +- yuv444p9le +- yuv444p10be +- yuv444p10le +- yuv422p9be +- yuv422p9le +- gbrp9be +- gbrp9le ++ gbrap10be ++ gbrap10le ++ gbrap12be ++ gbrap12le + gbrp10be + gbrp10le +- yuva420p9be +- yuva420p9le +- yuva422p9be +- yuva422p9le +- yuva444p9be +- yuva444p9le +- yuva420p10be +- yuva420p10le +- yuva422p10be +- yuva422p10le +- yuva444p10be +- yuva444p10le +- xyz12le +- xyz12be +- nv20le ++ gbrp12be ++ gbrp12le ++ gbrp14be ++ gbrp14le ++ gbrp9be ++ gbrp9le ++ gray10be ++ gray10le ++ gray12be ++ gray12le + nv20be ++ nv20le ++ p010be ++ p010le ++ xyz12be ++ xyz12le ++ yuv420p10be ++ yuv420p10le + yuv420p12be + yuv420p12le + yuv420p14be + yuv420p14le ++ yuv420p9be ++ yuv420p9le ++ yuv422p10be ++ yuv422p10le + yuv422p12be + yuv422p12le + yuv422p14be + yuv422p14le ++ yuv422p9be ++ yuv422p9le ++ yuv440p10be ++ yuv440p10le ++ yuv440p12be ++ yuv440p12le ++ yuv444p10be ++ yuv444p10le + yuv444p12be + yuv444p12le + yuv444p14be + yuv444p14le ++ yuv444p9be ++ yuv444p9le ++ yuva420p10be ++ yuva420p10le ++ yuva420p9be ++ yuva420p9le ++ yuva422p10be ++ yuva422p10le ++ yuva422p9be ++ yuva422p9le ++ yuva444p10be ++ yuva444p10le ++ yuva444p9be ++ yuva444p9le ++ ++isBE: ++ ayuv64be ++ bayer_bggr16be ++ bayer_gbrg16be ++ bayer_grbg16be ++ bayer_rggb16be ++ bgr444be ++ bgr48be ++ bgr555be ++ bgr565be ++ bgra64be ++ gbrap10be ++ gbrap12be ++ gbrap16be ++ gbrp10be + gbrp12be +- gbrp12le + gbrp14be +- gbrp14le +- yuv440p10le +- yuv440p10be +- yuv440p12le +- yuv440p12be +- p010le +- p010be +- gbrap12be +- gbrap12le +- gbrap10be +- gbrap10le +- gray12be +- gray12le ++ gbrp16be ++ gbrp9be + gray10be +- gray10le +- +-isBE: ++ gray12be + gray16be ++ nv20be ++ p010be ++ p016be ++ rgb444be + rgb48be +- rgb565be + rgb555be +- bgr565be +- bgr555be ++ rgb565be ++ rgba64be ++ xyz12be ++ ya16be ++ yuv420p10be ++ yuv420p12be ++ yuv420p14be + yuv420p16be +- yuv422p16be +- yuv444p16be +- rgb444be +- bgr444be +- bgr48be + yuv420p9be +- yuv420p10be + yuv422p10be +- yuv444p9be +- yuv444p10be ++ yuv422p12be ++ yuv422p14be ++ yuv422p16be + yuv422p9be +- gbrp9be +- gbrp10be +- gbrp16be +- yuva420p9be +- yuva422p9be +- yuva444p9be ++ yuv440p10be ++ yuv440p12be ++ yuv444p10be ++ yuv444p12be ++ yuv444p14be ++ yuv444p16be ++ yuv444p9be + yuva420p10be +- yuva422p10be +- yuva444p10be + yuva420p16be ++ yuva420p9be ++ yuva422p10be + yuva422p16be ++ yuva422p9be ++ yuva444p10be + yuva444p16be +- xyz12be ++ yuva444p9be ++ ++isYUV: ++ ayuv64be ++ ayuv64le ++ nv12 ++ nv16 + nv20be +- rgba64be +- bgra64be ++ nv20le ++ nv21 ++ p010be ++ p010le ++ p016be ++ p016le ++ uyvy422 ++ uyyvyy411 ++ xyz12be ++ xyz12le + ya16be +- gbrap16be ++ ya16le ++ ya8 ++ yuv410p ++ yuv411p ++ yuv420p ++ yuv420p10be ++ yuv420p10le + yuv420p12be ++ yuv420p12le + yuv420p14be ++ yuv420p14le ++ yuv420p16be ++ yuv420p16le ++ yuv420p9be ++ yuv420p9le ++ yuv422p ++ yuv422p10be ++ yuv422p10le + yuv422p12be ++ yuv422p12le + yuv422p14be +- yuv444p12be +- yuv444p14be +- gbrp12be +- gbrp14be +- bayer_bggr16be +- bayer_rggb16be +- bayer_gbrg16be +- bayer_grbg16be ++ yuv422p14le ++ yuv422p16be ++ yuv422p16le ++ yuv422p9be ++ yuv422p9le ++ yuv440p + yuv440p10be ++ yuv440p10le + yuv440p12be +- ayuv64be +- p010be +- gbrap12be +- gbrap10be +- gray12be +- gray10be +- p016be +- +-isYUV: +- yuv420p +- yuyv422 +- yuv422p ++ yuv440p12le + yuv444p +- yuv410p +- yuv411p +- yuvj420p +- yuvj422p +- yuvj444p +- uyvy422 +- uyyvyy411 +- nv12 +- nv21 +- yuv440p +- yuvj440p +- yuva420p +- yuv420p16le +- yuv420p16be +- yuv422p16le +- yuv422p16be +- yuv444p16le ++ yuv444p10be ++ yuv444p10le ++ yuv444p12be ++ yuv444p12le ++ yuv444p14be ++ yuv444p14le + yuv444p16be +- ya8 +- yuv420p9be +- yuv420p9le +- yuv420p10be +- yuv420p10le +- yuv422p10be +- yuv422p10le ++ yuv444p16le + yuv444p9be + yuv444p9le +- yuv444p10be +- yuv444p10le +- yuv422p9be +- yuv422p9le +- yuva422p +- yuva444p +- yuva420p9be +- yuva420p9le +- yuva422p9be +- yuva422p9le +- yuva444p9be +- yuva444p9le ++ yuva420p + yuva420p10be + yuva420p10le +- yuva422p10be +- yuva422p10le +- yuva444p10be +- yuva444p10le + yuva420p16be + yuva420p16le ++ yuva420p9be ++ yuva420p9le ++ yuva422p ++ yuva422p10be ++ yuva422p10le + yuva422p16be + yuva422p16le ++ yuva422p9be ++ yuva422p9le ++ yuva444p ++ yuva444p10be ++ yuva444p10le + yuva444p16be + yuva444p16le +- xyz12le +- xyz12be ++ yuva444p9be ++ yuva444p9le ++ yuvj411p ++ yuvj420p ++ yuvj422p ++ yuvj440p ++ yuvj444p ++ yuyv422 ++ yvyu422 ++ ++isPlanarYUV: ++ nv12 + nv16 +- nv20le + nv20be +- yvyu422 +- ya16be +- ya16le ++ nv20le ++ nv21 ++ p010be ++ p010le ++ p016be ++ p016le ++ yuv410p ++ yuv411p ++ yuv420p ++ yuv420p10be ++ yuv420p10le + yuv420p12be + yuv420p12le + yuv420p14be + yuv420p14le ++ yuv420p16be ++ yuv420p16le ++ yuv420p9be ++ yuv420p9le ++ yuv422p ++ yuv422p10be ++ yuv422p10le + yuv422p12be + yuv422p12le + yuv422p14be + yuv422p14le ++ yuv422p16be ++ yuv422p16le ++ yuv422p9be ++ yuv422p9le ++ yuv440p ++ yuv440p10be ++ yuv440p10le ++ yuv440p12be ++ yuv440p12le ++ yuv444p ++ yuv444p10be ++ yuv444p10le + yuv444p12be + yuv444p12le + yuv444p14be + yuv444p14le +- yuvj411p +- yuv440p10le +- yuv440p10be +- yuv440p12le +- yuv440p12be +- ayuv64le +- ayuv64be +- p010le +- p010be +- p016le +- p016be +- +-isPlanarYUV: +- yuv420p +- yuv422p +- yuv444p +- yuv410p +- yuv411p +- yuvj420p +- yuvj422p +- yuvj444p +- nv12 +- nv21 +- yuv440p +- yuvj440p +- yuva420p +- yuv420p16le +- yuv420p16be +- yuv422p16le +- yuv422p16be +- yuv444p16le + yuv444p16be +- yuv420p9be +- yuv420p9le +- yuv420p10be +- yuv420p10le +- yuv422p10be +- yuv422p10le ++ yuv444p16le + yuv444p9be + yuv444p9le +- yuv444p10be +- yuv444p10le +- yuv422p9be +- yuv422p9le +- yuva422p +- yuva444p +- yuva420p9be +- yuva420p9le +- yuva422p9be +- yuva422p9le +- yuva444p9be +- yuva444p9le ++ yuva420p + yuva420p10be + yuva420p10le +- yuva422p10be +- yuva422p10le +- yuva444p10be +- yuva444p10le + yuva420p16be + yuva420p16le ++ yuva420p9be ++ yuva420p9le ++ yuva422p ++ yuva422p10be ++ yuva422p10le + yuva422p16be + yuva422p16le ++ yuva422p9be ++ yuva422p9le ++ yuva444p ++ yuva444p10be ++ yuva444p10le + yuva444p16be + yuva444p16le +- nv16 +- nv20le +- nv20be +- yuv420p12be +- yuv420p12le +- yuv420p14be +- yuv420p14le +- yuv422p12be +- yuv422p12le +- yuv422p14be +- yuv422p14le +- yuv444p12be +- yuv444p12le +- yuv444p14be +- yuv444p14le ++ yuva444p9be ++ yuva444p9le + yuvj411p +- yuv440p10le +- yuv440p10be +- yuv440p12le +- yuv440p12be +- p010le +- p010be +- p016le +- p016be ++ yuvj420p ++ yuvj422p ++ yuvj440p ++ yuvj444p + + isRGB: +- rgb24 ++ 0bgr ++ 0rgb ++ abgr ++ argb ++ bayer_bggr16be ++ bayer_bggr16le ++ bayer_bggr8 ++ bayer_gbrg16be ++ bayer_gbrg16le ++ bayer_gbrg8 ++ bayer_grbg16be ++ bayer_grbg16le ++ bayer_grbg8 ++ bayer_rggb16be ++ bayer_rggb16le ++ bayer_rggb8 ++ bgr0 + bgr24 +- bgr8 + bgr4 +- bgr4_byte +- rgb8 +- rgb4 +- rgb4_byte +- argb +- rgba +- abgr +- bgra +- rgb48be +- rgb48le +- rgb565be +- rgb565le +- rgb555be +- rgb555le +- bgr565be +- bgr565le +- bgr555be +- bgr555le +- rgb444le +- rgb444be +- bgr444le + bgr444be ++ bgr444le + bgr48be + bgr48le +- gbrp +- gbrp9be +- gbrp9le +- gbrp10be +- gbrp10le +- gbrp16be +- gbrp16le +- rgba64be +- rgba64le +- bgra64be +- bgra64le ++ bgr4_byte ++ bgr555be ++ bgr555le ++ bgr565be ++ bgr565le ++ bgr8 ++ bgra ++ bgra64be ++ bgra64le + gbrap ++ gbrap10be ++ gbrap10le ++ gbrap12be ++ gbrap12le + gbrap16be + gbrap16le +- 0rgb +- rgb0 +- 0bgr +- bgr0 ++ gbrp ++ gbrp10be ++ gbrp10le + gbrp12be + gbrp12le + gbrp14be + gbrp14le +- bayer_bggr8 +- bayer_rggb8 +- bayer_gbrg8 +- bayer_grbg8 +- bayer_bggr16le +- bayer_bggr16be +- bayer_rggb16le +- bayer_rggb16be +- bayer_gbrg16le +- bayer_gbrg16be +- bayer_grbg16le +- bayer_grbg16be +- gbrap12be +- gbrap12le +- gbrap10be +- gbrap10le ++ gbrp16be ++ gbrp16le ++ gbrp9be ++ gbrp9le ++ rgb0 ++ rgb24 ++ rgb4 ++ rgb444be ++ rgb444le ++ rgb48be ++ rgb48le ++ rgb4_byte ++ rgb555be ++ rgb555le ++ rgb565be ++ rgb565le ++ rgb8 ++ rgba ++ rgba64be ++ rgba64le + + Gray: + gray ++ gray10be ++ gray10le ++ gray12be ++ gray12le + gray16be + gray16le +- ya8 + ya16be + ya16le +- gray12be +- gray12le +- gray10be +- gray10le ++ ya8 + + RGBinInt: +- rgb24 +- monow +- monob +- rgb8 +- rgb4 +- rgb4_byte + abgr + bgra ++ monob ++ monow ++ rgb24 ++ rgb4 ++ rgb444be ++ rgb444le + rgb48be + rgb48le +- rgb565be +- rgb565le ++ rgb4_byte + rgb555be + rgb555le +- rgb444le +- rgb444be ++ rgb565be ++ rgb565le ++ rgb8 + rgba64be + rgba64le + + BGRinInt: ++ argb + bgr24 +- monow +- monob +- bgr8 + bgr4 +- bgr4_byte +- argb +- rgba +- bgr565be +- bgr565le +- bgr555be +- bgr555le +- bgr444le + bgr444be ++ bgr444le + bgr48be + bgr48le ++ bgr4_byte ++ bgr555be ++ bgr555le ++ bgr565be ++ bgr565le ++ bgr8 + bgra64be + bgra64le ++ monob ++ monow ++ rgba + + Bayer: ++ bayer_bggr16be ++ bayer_bggr16le + bayer_bggr8 +- bayer_rggb8 ++ bayer_gbrg16be ++ bayer_gbrg16le + bayer_gbrg8 ++ bayer_grbg16be ++ bayer_grbg16le + bayer_grbg8 +- bayer_bggr16le +- bayer_bggr16be +- bayer_rggb16le + bayer_rggb16be +- bayer_gbrg16le +- bayer_gbrg16be +- bayer_grbg16le +- bayer_grbg16be ++ bayer_rggb16le ++ bayer_rggb8 + + AnyRGB: +- rgb24 ++ 0bgr ++ 0rgb ++ abgr ++ argb ++ bayer_bggr16be ++ bayer_bggr16le ++ bayer_bggr8 ++ bayer_gbrg16be ++ bayer_gbrg16le ++ bayer_gbrg8 ++ bayer_grbg16be ++ bayer_grbg16le ++ bayer_grbg8 ++ bayer_rggb16be ++ bayer_rggb16le ++ bayer_rggb8 ++ bgr0 + bgr24 +- monow +- monob +- bgr8 + bgr4 +- bgr4_byte +- rgb8 +- rgb4 +- rgb4_byte +- argb +- rgba +- abgr +- bgra +- rgb48be +- rgb48le +- rgb565be +- rgb565le +- rgb555be +- rgb555le +- bgr565be +- bgr565le +- bgr555be +- bgr555le +- rgb444le +- rgb444be +- bgr444le + bgr444be ++ bgr444le + bgr48be + bgr48le ++ bgr4_byte ++ bgr555be ++ bgr555le ++ bgr565be ++ bgr565le ++ bgr8 ++ bgra ++ bgra64be ++ bgra64le ++ gbrap ++ gbrap10be ++ gbrap10le ++ gbrap12be ++ gbrap12le ++ gbrap16be ++ gbrap16le + gbrp +- gbrp9be +- gbrp9le + gbrp10be + gbrp10le ++ gbrp12be ++ gbrp12le ++ gbrp14be ++ gbrp14le + gbrp16be + gbrp16le ++ gbrp9be ++ gbrp9le ++ monob ++ monow ++ rgb0 ++ rgb24 ++ rgb4 ++ rgb444be ++ rgb444le ++ rgb48be ++ rgb48le ++ rgb4_byte ++ rgb555be ++ rgb555le ++ rgb565be ++ rgb565le ++ rgb8 ++ rgba + rgba64be + rgba64le ++ ++ALPHA: ++ abgr ++ argb ++ ayuv64be ++ ayuv64le ++ bgra + bgra64be + bgra64le + gbrap +- gbrap16be +- gbrap16le +- 0rgb +- rgb0 +- 0bgr +- bgr0 +- gbrp12be +- gbrp12le +- gbrp14be +- gbrp14le +- bayer_bggr8 +- bayer_rggb8 +- bayer_gbrg8 +- bayer_grbg8 +- bayer_bggr16le +- bayer_bggr16be +- bayer_rggb16le +- bayer_rggb16be +- bayer_gbrg16le +- bayer_gbrg16be +- bayer_grbg16le +- bayer_grbg16be +- gbrap12be +- gbrap12le + gbrap10be + gbrap10le +- +-ALPHA: ++ gbrap12be ++ gbrap12le ++ gbrap16be ++ gbrap16le + pal8 +- argb + rgba +- abgr +- bgra +- yuva420p ++ rgba64be ++ rgba64le ++ ya16be ++ ya16le + ya8 +- yuva422p +- yuva444p +- yuva420p9be +- yuva420p9le +- yuva422p9be +- yuva422p9le +- yuva444p9be +- yuva444p9le ++ yuva420p + yuva420p10be + yuva420p10le +- yuva422p10be +- yuva422p10le +- yuva444p10be +- yuva444p10le + yuva420p16be + yuva420p16le ++ yuva420p9be ++ yuva420p9le ++ yuva422p ++ yuva422p10be ++ yuva422p10le + yuva422p16be + yuva422p16le ++ yuva422p9be ++ yuva422p9le ++ yuva444p ++ yuva444p10be ++ yuva444p10le + yuva444p16be + yuva444p16le +- rgba64be +- rgba64le +- bgra64be +- bgra64le +- ya16be +- ya16le +- gbrap +- gbrap16be +- gbrap16le +- ayuv64le +- ayuv64be +- gbrap12be +- gbrap12le +- gbrap10be +- gbrap10le ++ yuva444p9be ++ yuva444p9le + + Packed: +- yuyv422 +- rgb24 ++ 0bgr ++ 0rgb ++ abgr ++ argb ++ ayuv64be ++ ayuv64le ++ bayer_bggr16be ++ bayer_bggr16le ++ bayer_bggr8 ++ bayer_gbrg16be ++ bayer_gbrg16le ++ bayer_gbrg8 ++ bayer_grbg16be ++ bayer_grbg16le ++ bayer_grbg8 ++ bayer_rggb16be ++ bayer_rggb16le ++ bayer_rggb8 ++ bgr0 + bgr24 +- monow +- monob +- pal8 +- uyvy422 +- uyyvyy411 +- bgr8 + bgr4 ++ bgr444be ++ bgr444le ++ bgr48be ++ bgr48le + bgr4_byte +- rgb8 +- rgb4 +- rgb4_byte +- argb +- rgba +- abgr ++ bgr555be ++ bgr555le ++ bgr565be ++ bgr565le ++ bgr8 + bgra ++ bgra64be ++ bgra64le ++ monob ++ monow ++ pal8 ++ rgb0 ++ rgb24 ++ rgb4 ++ rgb444be ++ rgb444le + rgb48be + rgb48le +- rgb565be +- rgb565le ++ rgb4_byte + rgb555be + rgb555le +- bgr565be +- bgr565le +- bgr555be +- bgr555le +- rgb444le +- rgb444be +- bgr444le +- bgr444be +- ya8 +- bgr48be +- bgr48le +- xyz12le +- xyz12be ++ rgb565be ++ rgb565le ++ rgb8 ++ rgba + rgba64be + rgba64le +- bgra64be +- bgra64le +- yvyu422 +- ya16be +- ya16le +- 0rgb +- rgb0 +- 0bgr +- bgr0 +- bayer_bggr8 +- bayer_rggb8 +- bayer_gbrg8 +- bayer_grbg8 +- bayer_bggr16le +- bayer_bggr16be +- bayer_rggb16le +- bayer_rggb16be +- bayer_gbrg16le +- bayer_gbrg16be +- bayer_grbg16le +- bayer_grbg16be +- ayuv64le +- ayuv64be ++ uyvy422 ++ uyyvyy411 ++ xyz12be ++ xyz12le ++ ya16be ++ ya16le ++ ya8 ++ yuyv422 ++ yvyu422 + + Planar: +- yuv420p +- yuv422p +- yuv444p +- yuv410p +- yuv411p +- yuvj420p +- yuvj422p +- yuvj444p +- nv12 +- nv21 +- yuv440p +- yuvj440p +- yuva420p +- yuv420p16le +- yuv420p16be +- yuv422p16le +- yuv422p16be +- yuv444p16le +- yuv444p16be +- yuv420p9be +- yuv420p9le +- yuv420p10be +- yuv420p10le +- yuv422p10be +- yuv422p10le +- yuv444p9be +- yuv444p9le +- yuv444p10be +- yuv444p10le +- yuv422p9be +- yuv422p9le ++ gbrap ++ gbrap10be ++ gbrap10le ++ gbrap12be ++ gbrap12le ++ gbrap16be ++ gbrap16le + gbrp +- gbrp9be +- gbrp9le + gbrp10be + gbrp10le ++ gbrp12be ++ gbrp12le ++ gbrp14be ++ gbrp14le + gbrp16be + gbrp16le +- yuva422p +- yuva444p +- yuva420p9be +- yuva420p9le +- yuva422p9be +- yuva422p9le +- yuva444p9be +- yuva444p9le +- yuva420p10be +- yuva420p10le +- yuva422p10be +- yuva422p10le +- yuva444p10be +- yuva444p10le +- yuva420p16be +- yuva420p16le +- yuva422p16be +- yuva422p16le +- yuva444p16be +- yuva444p16le ++ gbrp9be ++ gbrp9le ++ nv12 + nv16 +- nv20le + nv20be +- gbrap +- gbrap16be +- gbrap16le ++ nv20le ++ nv21 ++ p010be ++ p010le ++ p016be ++ p016le ++ yuv410p ++ yuv411p ++ yuv420p ++ yuv420p10be ++ yuv420p10le + yuv420p12be + yuv420p12le + yuv420p14be + yuv420p14le ++ yuv420p16be ++ yuv420p16le ++ yuv420p9be ++ yuv420p9le ++ yuv422p ++ yuv422p10be ++ yuv422p10le + yuv422p12be + yuv422p12le + yuv422p14be + yuv422p14le ++ yuv422p16be ++ yuv422p16le ++ yuv422p9be ++ yuv422p9le ++ yuv440p ++ yuv440p10be ++ yuv440p10le ++ yuv440p12be ++ yuv440p12le ++ yuv444p ++ yuv444p10be ++ yuv444p10le + yuv444p12be + yuv444p12le + yuv444p14be + yuv444p14le +- gbrp12be +- gbrp12le +- gbrp14be +- gbrp14le ++ yuv444p16be ++ yuv444p16le ++ yuv444p9be ++ yuv444p9le ++ yuva420p ++ yuva420p10be ++ yuva420p10le ++ yuva420p16be ++ yuva420p16le ++ yuva420p9be ++ yuva420p9le ++ yuva422p ++ yuva422p10be ++ yuva422p10le ++ yuva422p16be ++ yuva422p16le ++ yuva422p9be ++ yuva422p9le ++ yuva444p ++ yuva444p10be ++ yuva444p10le ++ yuva444p16be ++ yuva444p16le ++ yuva444p9be ++ yuva444p9le + yuvj411p +- yuv440p10le +- yuv440p10be +- yuv440p12le +- yuv440p12be +- p010le +- p010be +- gbrap12be +- gbrap12le +- gbrap10be +- gbrap10le +- p016le +- p016be ++ yuvj420p ++ yuvj422p ++ yuvj440p ++ yuvj444p + + PackedRGB: +- rgb24 ++ 0bgr ++ 0rgb ++ abgr ++ argb ++ bayer_bggr16be ++ bayer_bggr16le ++ bayer_bggr8 ++ bayer_gbrg16be ++ bayer_gbrg16le ++ bayer_gbrg8 ++ bayer_grbg16be ++ bayer_grbg16le ++ bayer_grbg8 ++ bayer_rggb16be ++ bayer_rggb16le ++ bayer_rggb8 ++ bgr0 + bgr24 +- bgr8 + bgr4 ++ bgr444be ++ bgr444le ++ bgr48be ++ bgr48le + bgr4_byte +- rgb8 +- rgb4 +- rgb4_byte +- argb +- rgba +- abgr ++ bgr555be ++ bgr555le ++ bgr565be ++ bgr565le ++ bgr8 + bgra ++ bgra64be ++ bgra64le ++ rgb0 ++ rgb24 ++ rgb4 ++ rgb444be ++ rgb444le + rgb48be + rgb48le +- rgb565be +- rgb565le ++ rgb4_byte + rgb555be + rgb555le +- bgr565be +- bgr565le +- bgr555be +- bgr555le +- rgb444le +- rgb444be +- bgr444le +- bgr444be +- bgr48be +- bgr48le ++ rgb565be ++ rgb565le ++ rgb8 ++ rgba + rgba64be + rgba64le +- bgra64be +- bgra64le +- 0rgb +- rgb0 +- 0bgr +- bgr0 +- bayer_bggr8 +- bayer_rggb8 +- bayer_gbrg8 +- bayer_grbg8 +- bayer_bggr16le +- bayer_bggr16be +- bayer_rggb16le +- bayer_rggb16be +- bayer_gbrg16le +- bayer_gbrg16be +- bayer_grbg16le +- bayer_grbg16be + + PlanarRGB: +- gbrp +- gbrp9be +- gbrp9le +- gbrp10be +- gbrp10le +- gbrp16be +- gbrp16le + gbrap ++ gbrap10be ++ gbrap10le ++ gbrap12be ++ gbrap12le + gbrap16be + gbrap16le ++ gbrp ++ gbrp10be ++ gbrp10le + gbrp12be + gbrp12le + gbrp14be + gbrp14le +- gbrap12be +- gbrap12le +- gbrap10be +- gbrap10le ++ gbrp16be ++ gbrp16le ++ gbrp9be ++ gbrp9le + + usePal: ++ bgr4_byte ++ bgr8 + gray + pal8 +- bgr8 +- bgr4_byte +- rgb8 + rgb4_byte ++ rgb8 + +-- +2.13.3 + diff -Nru ffmpeg-2.8.6/debian/patches/0003-sws-tests-pixdesc_query-replace-rgb-based-pix-fmts-w.patch ffmpeg-3.3.3/debian/patches/0003-sws-tests-pixdesc_query-replace-rgb-based-pix-fmts-w.patch --- ffmpeg-2.8.6/debian/patches/0003-sws-tests-pixdesc_query-replace-rgb-based-pix-fmts-w.patch 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/0003-sws-tests-pixdesc_query-replace-rgb-based-pix-fmts-w.patch 2017-08-05 14:04:15.000000000 +0000 @@ -0,0 +1,264 @@ +From 4158fba3cdb7c90f42071323f37f617e4f278414 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Cl=C3=A9ment=20B=C5=93sch?= +Date: Fri, 24 Mar 2017 00:51:32 +0100 +Subject: [PATCH 3/3] sws/tests/pixdesc_query: replace rgb based pix fmts with + endianess agnostic names + +Fixes ticket #6554 +--- + libswscale/tests/pixdesc_query.c | 11 +++++++-- + tests/ref/fate/sws-pixdesc-query | 48 ++++++++++++++++++++-------------------- + 2 files changed, 33 insertions(+), 26 deletions(-) + +diff --git a/libswscale/tests/pixdesc_query.c b/libswscale/tests/pixdesc_query.c +index a0c843792a..417f481cd0 100644 +--- a/libswscale/tests/pixdesc_query.c ++++ b/libswscale/tests/pixdesc_query.c +@@ -64,8 +64,15 @@ int main(void) + + while ((pix_desc = av_pix_fmt_desc_next(pix_desc))) { + enum AVPixelFormat pix_fmt = av_pix_fmt_desc_get_id(pix_desc); +- if (query_tab[i].cond(pix_fmt)) +- av_dynarray_add(&pix_fmts, &nb_pix_fmts, (void *)pix_desc->name); ++ if (query_tab[i].cond(pix_fmt)) { ++ const char *pix_name = pix_desc->name; ++ if (pix_fmt == AV_PIX_FMT_RGB32) pix_name = "rgb32"; ++ else if (pix_fmt == AV_PIX_FMT_RGB32_1) pix_name = "rgb32_1"; ++ else if (pix_fmt == AV_PIX_FMT_BGR32) pix_name = "bgr32"; ++ else if (pix_fmt == AV_PIX_FMT_BGR32_1) pix_name = "bgr32_1"; ++ ++ av_dynarray_add(&pix_fmts, &nb_pix_fmts, (void *)pix_name); ++ } + } + + if (pix_fmts) { +diff --git a/tests/ref/fate/sws-pixdesc-query b/tests/ref/fate/sws-pixdesc-query +index b014afc431..fb1e62f326 100644 +--- a/tests/ref/fate/sws-pixdesc-query ++++ b/tests/ref/fate/sws-pixdesc-query +@@ -323,8 +323,6 @@ isPlanarYUV: + isRGB: + 0bgr + 0rgb +- abgr +- argb + bayer_bggr16be + bayer_bggr16le + bayer_bggr8 +@@ -339,6 +337,8 @@ isRGB: + bayer_rggb8 + bgr0 + bgr24 ++ bgr32 ++ bgr32_1 + bgr4 + bgr444be + bgr444le +@@ -350,7 +350,6 @@ isRGB: + bgr565be + bgr565le + bgr8 +- bgra + bgra64be + bgra64le + gbrap +@@ -373,6 +372,8 @@ isRGB: + gbrp9le + rgb0 + rgb24 ++ rgb32 ++ rgb32_1 + rgb4 + rgb444be + rgb444le +@@ -384,7 +385,6 @@ isRGB: + rgb565be + rgb565le + rgb8 +- rgba + rgba64be + rgba64le + +@@ -401,11 +401,11 @@ Gray: + ya8 + + RGBinInt: +- abgr +- bgra + monob + monow + rgb24 ++ rgb32 ++ rgb32_1 + rgb4 + rgb444be + rgb444le +@@ -421,8 +421,9 @@ RGBinInt: + rgba64le + + BGRinInt: +- argb + bgr24 ++ bgr32 ++ bgr32_1 + bgr4 + bgr444be + bgr444le +@@ -438,7 +439,6 @@ BGRinInt: + bgra64le + monob + monow +- rgba + + Bayer: + bayer_bggr16be +@@ -457,8 +457,6 @@ Bayer: + AnyRGB: + 0bgr + 0rgb +- abgr +- argb + bayer_bggr16be + bayer_bggr16le + bayer_bggr8 +@@ -473,6 +471,8 @@ AnyRGB: + bayer_rggb8 + bgr0 + bgr24 ++ bgr32 ++ bgr32_1 + bgr4 + bgr444be + bgr444le +@@ -484,7 +484,6 @@ AnyRGB: + bgr565be + bgr565le + bgr8 +- bgra + bgra64be + bgra64le + gbrap +@@ -509,6 +508,8 @@ AnyRGB: + monow + rgb0 + rgb24 ++ rgb32 ++ rgb32_1 + rgb4 + rgb444be + rgb444le +@@ -520,16 +521,14 @@ AnyRGB: + rgb565be + rgb565le + rgb8 +- rgba + rgba64be + rgba64le + + ALPHA: +- abgr +- argb + ayuv64be + ayuv64le +- bgra ++ bgr32 ++ bgr32_1 + bgra64be + bgra64le + gbrap +@@ -540,7 +539,8 @@ ALPHA: + gbrap16be + gbrap16le + pal8 +- rgba ++ rgb32 ++ rgb32_1 + rgba64be + rgba64le + ya16be +@@ -571,8 +571,6 @@ ALPHA: + Packed: + 0bgr + 0rgb +- abgr +- argb + ayuv64be + ayuv64le + bayer_bggr16be +@@ -589,6 +587,8 @@ Packed: + bayer_rggb8 + bgr0 + bgr24 ++ bgr32 ++ bgr32_1 + bgr4 + bgr444be + bgr444le +@@ -600,7 +600,6 @@ Packed: + bgr565be + bgr565le + bgr8 +- bgra + bgra64be + bgra64le + monob +@@ -608,6 +607,8 @@ Packed: + pal8 + rgb0 + rgb24 ++ rgb32 ++ rgb32_1 + rgb4 + rgb444be + rgb444le +@@ -619,7 +620,6 @@ Packed: + rgb565be + rgb565le + rgb8 +- rgba + rgba64be + rgba64le + uyvy422 +@@ -730,8 +730,6 @@ Planar: + PackedRGB: + 0bgr + 0rgb +- abgr +- argb + bayer_bggr16be + bayer_bggr16le + bayer_bggr8 +@@ -746,6 +744,8 @@ PackedRGB: + bayer_rggb8 + bgr0 + bgr24 ++ bgr32 ++ bgr32_1 + bgr4 + bgr444be + bgr444le +@@ -757,11 +757,12 @@ PackedRGB: + bgr565be + bgr565le + bgr8 +- bgra + bgra64be + bgra64le + rgb0 + rgb24 ++ rgb32 ++ rgb32_1 + rgb4 + rgb444be + rgb444le +@@ -773,7 +774,6 @@ PackedRGB: + rgb565be + rgb565le + rgb8 +- rgba + rgba64be + rgba64le + +-- +2.13.3 + diff -Nru ffmpeg-2.8.6/debian/patches/0004-swscale-fix-gbrap16-alpha-channel-issues.patch ffmpeg-3.3.3/debian/patches/0004-swscale-fix-gbrap16-alpha-channel-issues.patch --- ffmpeg-2.8.6/debian/patches/0004-swscale-fix-gbrap16-alpha-channel-issues.patch 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/0004-swscale-fix-gbrap16-alpha-channel-issues.patch 2017-08-05 14:04:15.000000000 +0000 @@ -0,0 +1,89 @@ +From 4f421bf992d0859b3b05658e7ecef5e2485df76d Mon Sep 17 00:00:00 2001 +From: James Cowgill +Date: Tue, 1 Aug 2017 13:24:42 +0100 +Subject: [PATCH] swscale: fix gbrap16 alpha channel issues + +Fixes filter-pixfmts-scale test failing on big-endian systems due to +alpSrc not being cast to (const int32_t**). + +Also fixes distortions in the output alpha channel values by copying the +alpha channel code from the rgba64 case found elsewhere in output.c. + +Fixes ticket 6555. + +Signed-off-by: James Cowgill +--- + libswscale/output.c | 15 ++++++++------- + tests/ref/fate/filter-pixfmts-scale | 4 ++-- + 2 files changed, 10 insertions(+), 9 deletions(-) + +diff --git a/libswscale/output.c b/libswscale/output.c +index 9774e9f327..8e5ec0a256 100644 +--- a/libswscale/output.c ++++ b/libswscale/output.c +@@ -2026,17 +2026,18 @@ yuv2gbrp16_full_X_c(SwsContext *c, const int16_t *lumFilter, + const int16_t **lumSrcx, int lumFilterSize, + const int16_t *chrFilter, const int16_t **chrUSrcx, + const int16_t **chrVSrcx, int chrFilterSize, +- const int16_t **alpSrc, uint8_t **dest, ++ const int16_t **alpSrcx, uint8_t **dest, + int dstW, int y) + { + const AVPixFmtDescriptor *desc = av_pix_fmt_desc_get(c->dstFormat); + int i; +- int hasAlpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) && alpSrc; ++ int hasAlpha = (desc->flags & AV_PIX_FMT_FLAG_ALPHA) && alpSrcx; + uint16_t **dest16 = (uint16_t**)dest; + const int32_t **lumSrc = (const int32_t**)lumSrcx; + const int32_t **chrUSrc = (const int32_t**)chrUSrcx; + const int32_t **chrVSrc = (const int32_t**)chrVSrcx; +- int A = 0; // init to silence warning ++ const int32_t **alpSrc = (const int32_t**)alpSrcx; ++ int A = 0xFFFF << 14; + + for (i = 0; i < dstW; i++) { + int j; +@@ -2059,13 +2060,13 @@ yuv2gbrp16_full_X_c(SwsContext *c, const int16_t *lumFilter, + V >>= 14; + + if (hasAlpha) { +- A = 1 << 18; ++ A = -0x40000000; + + for (j = 0; j < lumFilterSize; j++) + A += alpSrc[j][i] * lumFilter[j]; + +- if (A & 0xF8000000) +- A = av_clip_uintp2(A, 27); ++ A >>= 1; ++ A += 0x20002000; + } + + Y -= c->yuv2rgb_y_offset; +@@ -2083,7 +2084,7 @@ yuv2gbrp16_full_X_c(SwsContext *c, const int16_t *lumFilter, + dest16[1][i] = B >> 14; + dest16[2][i] = R >> 14; + if (hasAlpha) +- dest16[3][i] = A >> 11; ++ dest16[3][i] = av_clip_uintp2(A, 30) >> 14; + } + if ((!isBE(c->dstFormat)) != (!HAVE_BIGENDIAN)) { + for (i = 0; i < dstW; i++) { +diff --git a/tests/ref/fate/filter-pixfmts-scale b/tests/ref/fate/filter-pixfmts-scale +index 9b601b71da..dcc34bd4d1 100644 +--- a/tests/ref/fate/filter-pixfmts-scale ++++ b/tests/ref/fate/filter-pixfmts-scale +@@ -23,8 +23,8 @@ gbrap10be 6d89abb9248006c3e9017545e9474654 + gbrap10le cf974e23f485a10740f5de74a5c8c3df + gbrap12be 1d9b57766ba9c2192403f43967cb9af0 + gbrap12le bb1ba1c157717db3dd612a76d38a018e +-gbrap16be 81542b96575d1fe3b239d23899f5ece3 +-gbrap16le 6feb8b9da131917abe867e0eaaf07b90 ++gbrap16be c72b935a6e57a8e1c37bff08c2db55b1 ++gbrap16le 13eb0e62b1ac9c1c86c81521eaefab5f + gbrp dc3387f925f972c61aae7eb23cdc19f0 + gbrp10be 0277d4c3a8498d75e2783fb81379e481 + gbrp10le f3d70f8ab845c3c9b8f7452e4a6e285a +-- +2.13.3 + diff -Nru ffmpeg-2.8.6/debian/patches/0005-arm-thumb2-blx.patch ffmpeg-3.3.3/debian/patches/0005-arm-thumb2-blx.patch --- ffmpeg-2.8.6/debian/patches/0005-arm-thumb2-blx.patch 1970-01-01 00:00:00.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/0005-arm-thumb2-blx.patch 2017-08-09 01:52:52.000000000 +0000 @@ -0,0 +1,80 @@ +Description: Fix SIGBUS on armhf when compiled with binutils 2.29 + In binutils 2.29, the behavior of the ADR instruction changed so that 1 is + added to the address of a Thumb function (previously nothing was added). This + allows the loaded address to be passed to a BLX instruction and the correct + mode change will occur. + . + So that the behavior matches in binutils 2.29 and pre-2.29: + - Use .eqv to clear the function attribute from a symbol + - This allows us to always add 1 to the symbol when in Thumb mode and get the + correct result. + . + See: https://sourceware.org/bugzilla/show_bug.cgi?id=21458 + Thanks to Jiong Wang for original idea to solve this. +Author: James Cowgill +Bug: https://trac.ffmpeg.org/ticket/6571 +Bug-Debian: https://bugs.debian.org/870622 +--- +This patch header follows DEP-3: http://dep.debian.net/deps/dep3/ +--- a/libavcodec/arm/h264idct_neon.S ++++ b/libavcodec/arm/h264idct_neon.S +@@ -20,6 +20,15 @@ + + #include "libavutil/arm/asm.S" + ++# These .eqv clear the function attribute allowing the +CONFIG_THUMB hack to ++# work on old and new binutils. ++# ++# See: https://sourceware.org/bugzilla/show_bug.cgi?id=21458 ++.eqv wfa_ff_h264_idct_add_neon, X(ff_h264_idct_add_neon) ++.eqv wfa_ff_h264_idct_dc_add_neon, X(ff_h264_idct_dc_add_neon) ++.eqv wfa_ff_h264_idct8_add_neon, X(ff_h264_idct8_add_neon) ++.eqv wfa_ff_h264_idct8_dc_add_neon, X(ff_h264_idct8_dc_add_neon) ++ + function ff_h264_idct_add_neon, export=1 + vld1.64 {d0-d3}, [r1,:128] + vmov.i16 q15, #0 +@@ -113,8 +122,8 @@ function ff_h264_idct_add16_neon, export + movne lr, #0 + cmp lr, #0 + ite ne +- adrne lr, X(ff_h264_idct_dc_add_neon) + CONFIG_THUMB +- adreq lr, X(ff_h264_idct_add_neon) + CONFIG_THUMB ++ adrne lr, wfa_ff_h264_idct_dc_add_neon + CONFIG_THUMB ++ adreq lr, wfa_ff_h264_idct_add_neon + CONFIG_THUMB + blx lr + 2: subs ip, ip, #1 + add r1, r1, #32 +@@ -138,8 +147,8 @@ function ff_h264_idct_add16intra_neon, e + cmp r8, #0 + ldrsh r8, [r1] + iteet ne +- adrne lr, X(ff_h264_idct_add_neon) + CONFIG_THUMB +- adreq lr, X(ff_h264_idct_dc_add_neon) + CONFIG_THUMB ++ adrne lr, wfa_ff_h264_idct_add_neon + CONFIG_THUMB ++ adreq lr, wfa_ff_h264_idct_dc_add_neon + CONFIG_THUMB + cmpeq r8, #0 + blxne lr + subs ip, ip, #1 +@@ -166,8 +175,8 @@ function ff_h264_idct_add8_neon, export= + cmp r8, #0 + ldrsh r8, [r1] + iteet ne +- adrne lr, X(ff_h264_idct_add_neon) + CONFIG_THUMB +- adreq lr, X(ff_h264_idct_dc_add_neon) + CONFIG_THUMB ++ adrne lr, wfa_ff_h264_idct_add_neon + CONFIG_THUMB ++ adreq lr, wfa_ff_h264_idct_dc_add_neon + CONFIG_THUMB + cmpeq r8, #0 + blxne lr + add r12, r12, #1 +@@ -388,8 +397,8 @@ function ff_h264_idct8_add4_neon, export + movne lr, #0 + cmp lr, #0 + ite ne +- adrne lr, X(ff_h264_idct8_dc_add_neon) + CONFIG_THUMB +- adreq lr, X(ff_h264_idct8_add_neon) + CONFIG_THUMB ++ adrne lr, wfa_ff_h264_idct8_dc_add_neon + CONFIG_THUMB ++ adreq lr, wfa_ff_h264_idct8_add_neon + CONFIG_THUMB + blx lr + 2: subs r12, r12, #4 + add r1, r1, #128 diff -Nru ffmpeg-2.8.6/debian/patches/build-make-out-of-tree-builds-bit-identical-to-in-tr.patch ffmpeg-3.3.3/debian/patches/build-make-out-of-tree-builds-bit-identical-to-in-tr.patch --- ffmpeg-2.8.6/debian/patches/build-make-out-of-tree-builds-bit-identical-to-in-tr.patch 2016-02-02 22:46:38.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/build-make-out-of-tree-builds-bit-identical-to-in-tr.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,92 +0,0 @@ -From: Andreas Cadhalpun -Date: Mon, 28 Dec 2015 22:00:39 +0100 -Subject: build: make out-of-tree builds bit-identical to in-tree builds - -Previously the full source path was embedded inconsistently in the debug -information between in-tree/out-of-tree builds. - -The 'vpath %.inc' becomes necessary for finding -libavfilter/all_channel_layouts.inc in out-of-tree builds. - -The full source path is still embedded in the debug information, but -it's now independent of whether building in-tree or out-of-tree. - -The biggest improvement of this patch is that gdb now always searches -for the path relative to the source directory. It still also searches -for the full path. -Previously it searched only for the full path in out-of-tree builds, -making the debug information generated by Debian's buildds rather hard -to use. - -Signed-off-by: Andreas Cadhalpun ---- - Makefile | 1 + - common.mak | 6 +++--- - configure | 1 + - library.mak | 2 +- - 4 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/Makefile b/Makefile -index b0ab3ed..0555a6c 100644 ---- a/Makefile -+++ b/Makefile -@@ -4,6 +4,7 @@ include config.mak - vpath %.c $(SRC_PATH) - vpath %.cpp $(SRC_PATH) - vpath %.h $(SRC_PATH) -+vpath %.inc $(SRC_PATH) - vpath %.m $(SRC_PATH) - vpath %.S $(SRC_PATH) - vpath %.asm $(SRC_PATH) -diff --git a/common.mak b/common.mak -index 7569d35..b2d4b58 100644 ---- a/common.mak -+++ b/common.mak -@@ -32,7 +32,7 @@ endif - ALLFFLIBS = avcodec avdevice avfilter avformat avresample avutil postproc swscale swresample - - # NASM requires -I path terminated with / --IFLAGS := -I. -I$(SRC_PATH)/ -+IFLAGS := -I$(DST_PATH)/ -I$(SRC_PATH)/ - CPPFLAGS := $(IFLAGS) $(CPPFLAGS) - CFLAGS += $(ECFLAGS) - CCFLAGS = $(CPPFLAGS) $(CFLAGS) -@@ -41,11 +41,11 @@ CXXFLAGS += $(CPPFLAGS) $(CFLAGS) - YASMFLAGS += $(IFLAGS:%=%/) -Pconfig.asm - - HOSTCCFLAGS = $(IFLAGS) $(HOSTCPPFLAGS) $(HOSTCFLAGS) --LDFLAGS := $(ALLFFLIBS:%=$(LD_PATH)lib%) $(LDFLAGS) -+LDFLAGS := $(ALLFFLIBS:%=$(LD_PATH)$(DST_PATH)/lib%) $(LDFLAGS) - - define COMPILE - $(call $(1)DEP,$(1)) -- $($(1)) $($(1)FLAGS) $($(1)_DEPFLAGS) $($(1)_C) $($(1)_O) $< -+ $(Q)cd $(SRC_PATH); $(subst @,,$($(1))) $($(1)FLAGS) $($(1)_DEPFLAGS:$(@:.o=.d)=$(DST_PATH)/$(@:.o=.d)) $($(1)_C) $($(1)_O:$@=$(DST_PATH)/$@) $(subst $(SRC_PATH)/,,$<) - endef - - COMPILE_C = $(call COMPILE,CC) -diff --git a/configure b/configure -index ec4ff08..d6fc8c5 100755 ---- a/configure -+++ b/configure -@@ -6012,6 +6012,7 @@ SRC_PATH=$source_path - ifndef MAIN_MAKEFILE - SRC_PATH:=\$(SRC_PATH:.%=..%) - endif -+DST_PATH=$(pwd) - CC_IDENT=$cc_ident - ARCH=$arch - INTRINSICS=$intrinsics -diff --git a/library.mak b/library.mak -index 6f95f63..0b23a28 100644 ---- a/library.mak -+++ b/library.mak -@@ -28,7 +28,7 @@ $(SUBDIR)x86/%$(DEFAULT_YASMD).asm: $(SUBDIR)x86/%.asm - - $(SUBDIR)x86/%.o: $(SUBDIR)x86/%$(YASMD).asm - $(DEPYASM) $(YASMFLAGS) -I $( $(@:.o=.d) -- $(YASM) $(YASMFLAGS) -I $( -Forwarded: not-needed -Last-Update: <2014-09-14> - ---- a/libavcodec/libavcodec.v -+++ b/libavcodec/libavcodec.v -@@ -1,4 +1,4 @@ --LIBAVCODEC_$MAJOR { -+LIBAVCODEC_FFMPEG_$MAJOR { - global: av*; - #deprecated, remove after next bump - audio_resample; ---- a/libavdevice/libavdevice.v -+++ b/libavdevice/libavdevice.v -@@ -1,4 +1,4 @@ --LIBAVDEVICE_$MAJOR { -+LIBAVDEVICE_FFMPEG_$MAJOR { - global: avdevice_*; av_*; - local: *; - }; ---- a/libavfilter/libavfilter.v -+++ b/libavfilter/libavfilter.v -@@ -1,4 +1,4 @@ --LIBAVFILTER_$MAJOR { -+LIBAVFILTER_FFMPEG_$MAJOR { - global: avfilter_*; av_*; - local: *; - }; ---- a/libavformat/libavformat.v -+++ b/libavformat/libavformat.v -@@ -1,4 +1,4 @@ --LIBAVFORMAT_$MAJOR { -+LIBAVFORMAT_FFMPEG_$MAJOR { - global: av*; - #FIXME those are for ffserver - ff_inet_aton; ---- a/libavresample/libavresample.v -+++ b/libavresample/libavresample.v -@@ -1,4 +1,4 @@ --LIBAVRESAMPLE_$MAJOR { -+LIBAVRESAMPLE_FFMPEG_$MAJOR { - global: av*; - local: *; - }; ---- a/libavutil/libavutil.v -+++ b/libavutil/libavutil.v -@@ -1,4 +1,4 @@ --LIBAVUTIL_$MAJOR { -+LIBAVUTIL_FFMPEG_$MAJOR { - global: av*; - local: *; - }; ---- a/libpostproc/libpostproc.v -+++ b/libpostproc/libpostproc.v -@@ -1,4 +1,4 @@ --LIBPOSTPROC_$MAJOR { -+LIBPOSTPROC_FFMPEG_$MAJOR { - global: postproc_*; pp_*; - local: *; - }; ---- a/libswresample/libswresample.v -+++ b/libswresample/libswresample.v -@@ -1,4 +1,4 @@ --LIBSWRESAMPLE_$MAJOR { -+LIBSWRESAMPLE_FFMPEG_$MAJOR { - global: swr_*; swresample_*; - local: *; - }; ---- a/libswscale/libswscale.v -+++ b/libswscale/libswscale.v -@@ -1,4 +1,4 @@ --LIBSWSCALE_$MAJOR { -+LIBSWSCALE_FFMPEG_$MAJOR { - global: swscale_*; sws_*; - local: *; - }; diff -Nru ffmpeg-2.8.6/debian/patches/doc-make-apidoc-output-independent-of-SRC_PATH.patch ffmpeg-3.3.3/debian/patches/doc-make-apidoc-output-independent-of-SRC_PATH.patch --- ffmpeg-2.8.6/debian/patches/doc-make-apidoc-output-independent-of-SRC_PATH.patch 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/doc-make-apidoc-output-independent-of-SRC_PATH.patch 1970-01-01 00:00:00.000000000 +0000 @@ -1,64 +0,0 @@ -From: Andreas Cadhalpun -Date: Sun, 20 Dec 2015 22:20:57 +0100 -Subject: doc: make apidoc output independent of SRC_PATH - -Previously it included the SRC_PATH in every title. - -Reviewed-by: Michael Niedermayer -Signed-off-by: Andreas Cadhalpun ---- - doc/Makefile | 7 ++++--- - doc/doxy-wrapper.sh | 10 +++++----- - 2 files changed, 9 insertions(+), 8 deletions(-) - -diff --git a/doc/Makefile b/doc/Makefile -index 3e67c2a..4a77aac 100644 ---- a/doc/Makefile -+++ b/doc/Makefile -@@ -124,11 +124,12 @@ $(DOCS) doc/doxy/html: | doc/ - $(DOC_EXAMPLES:%$(EXESUF)=%.o): | doc/examples - OBJDIRS += doc/examples - --DOXY_INPUT = $(addprefix $(SRC_PATH)/, $(INSTHEADERS) $(DOC_EXAMPLES:%$(EXESUF)=%.c) $(LIB_EXAMPLES:%$(EXESUF)=%.c)) -+DOXY_INPUT = $(INSTHEADERS) $(DOC_EXAMPLES:%$(EXESUF)=%.c) $(LIB_EXAMPLES:%$(EXESUF)=%.c) -+DOXY_INPUT_DEPS = $(addprefix $(SRC_PATH)/, $(DOXY_INPUT)) - - doc/doxy/html: TAG = DOXY --doc/doxy/html: $(SRC_PATH)/doc/Doxyfile $(SRC_PATH)/doc/doxy-wrapper.sh $(DOXY_INPUT) -- $(M)$(SRC_PATH)/doc/doxy-wrapper.sh $(SRC_PATH) $< $(DOXYGEN) $(DOXY_INPUT) -+doc/doxy/html: $(SRC_PATH)/doc/Doxyfile $(SRC_PATH)/doc/doxy-wrapper.sh $(DOXY_INPUT_DEPS) -+ $(M)OUT_DIR=$$PWD/doc/doxy; cd $(SRC_PATH); ./doc/doxy-wrapper.sh $$OUT_DIR $< $(DOXYGEN) $(DOXY_INPUT); - - install-doc: install-html install-man - -diff --git a/doc/doxy-wrapper.sh b/doc/doxy-wrapper.sh -index 9720e54..fe0102b 100755 ---- a/doc/doxy-wrapper.sh -+++ b/doc/doxy-wrapper.sh -@@ -1,21 +1,21 @@ - #!/bin/sh - --SRC_PATH="${1}" -+OUT_DIR="${1}" - DOXYFILE="${2}" - DOXYGEN="${3}" - - shift 3 - --if [ -e "$SRC_PATH/VERSION" ]; then -- VERSION=`cat "$SRC_PATH/VERSION"` -+if [ -e "VERSION" ]; then -+ VERSION=`cat "VERSION"` - else -- VERSION=`cd "$SRC_PATH"; git describe` -+ VERSION=`git describe` - fi - - $DOXYGEN - < -Forwarded: not-needed -Last-Update: 2015-12-24 - -Index: b/configure -=================================================================== ---- a/configure -+++ b/configure -@@ -3393,6 +3393,15 @@ - done - } - -+gcc_s390x_flags(){ -+ for flag; do -+ case $flag in -+ -O3) echo -O2 ;; -+ *) echo $flag ;; -+ esac -+ done -+} -+ - msvc_common_flags(){ - for flag; do - case $flag in -@@ -3577,6 +3586,9 @@ - fi - _cflags_speed='-O3' - _cflags_size='-Os' -+ case "$arch" in -+ s390x) _flags_filter=gcc_s390x_flags ;; -+ esac - elif $_cc --version 2>/dev/null | grep -q ^icc; then - _type=icc - _ident=$($_cc --version | head -n1) diff -Nru ffmpeg-2.8.6/debian/patches/series ffmpeg-3.3.3/debian/patches/series --- ffmpeg-2.8.6/debian/patches/series 2016-02-25 17:47:53.000000000 +0000 +++ ffmpeg-3.3.3/debian/patches/series 2017-08-09 00:12:03.000000000 +0000 @@ -1,4 +1,5 @@ -Change-symbol-versioning.patch -doc-make-apidoc-output-independent-of-SRC_PATH.patch -s390x-O2.patch -build-make-out-of-tree-builds-bit-identical-to-in-tr.patch +0001-sws-tests-pixdesc_query-save-every-pix-fmts-in-a-lis.patch +0002-sws-tests-pixdesc_query-sort-pixel-formats.patch +0003-sws-tests-pixdesc_query-replace-rgb-based-pix-fmts-w.patch +0004-swscale-fix-gbrap16-alpha-channel-issues.patch +0005-arm-thumb2-blx.patch diff -Nru ffmpeg-2.8.6/debian/rules ffmpeg-3.3.3/debian/rules --- ffmpeg-2.8.6/debian/rules 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/rules 2017-08-05 14:04:15.000000000 +0000 @@ -1,32 +1,24 @@ #!/usr/bin/make -f -# This enables verbose mode. -#export DH_VERBOSE=1 export V=1 -# Determine the debian directory, which is the directory of this makefile. -# The path of this makefile is the first word in the MAKEFILE_LIST. -DEBIAN_DIR = $(dir $(firstword $(MAKEFILE_LIST))) +# sets DEBIAN_VERSION variable +include /usr/share/dpkg/pkg-info.mk # Get the Debian version revision: -DEB_VERSION := $(shell dpkg-parsechangelog -l$(DEBIAN_DIR)changelog -SVersion) DEB_REVISION := $(word 2, $(subst -, ,$(DEB_VERSION))) -# Get the architecture triplet: -DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH) - -# Get the host architecture/OS: -DEB_HOST_ARCH_OS ?= $(shell dpkg-architecture -qDEB_HOST_ARCH_OS) -DEB_HOST_ARCH ?= $(shell dpkg-architecture -qDEB_HOST_ARCH) +# sets DEB_HOST_* variables +include /usr/share/dpkg/architecture.mk # Ubuntu ld adds -Bsymbolic-functions by default, but that prevents FFmpeg from building. export DEB_LDFLAGS_MAINT_STRIP=-Wl,-Bsymbolic-functions # Package name for the extra flavor. -EXTRA_PKG := $(shell sed -nr 's/^Package:[[:space:]]*(.*extra[0-9]+)[[:space:]]*$$/\1/p' debian/control) -FLAVORS = standard extra +EXTRA_PKGS := $(shell sed -nr 's/^Package:[[:space:]]*(.*extra[0-9]+)[[:space:]]*$$/\1/p' debian/control) +FLAVORS = standard extra static -# Enable as many features as possible, as long as the result is still GPLv2+ (a GPLv3+ variant is built as libavcodec-extra flavor). +# Enable as many features as possible, as long as the result is still GPLv2+ (a GPLv3+ variant is built as libavcodec-extra/libavfilter-extra flavor). # The following flags (and build-dependencies) are not added, because they would require a libavformat-extra flavor: # --enable-libsmbclient (libsmbclient-dev [!hurd-i386 !m68k !sparc64]) # The following flags are not added, because the necessary libraries are not in Debian: @@ -36,37 +28,26 @@ # --enable-libilbc (see #675959 for the RFP bug) # --enable-libkvazaar # --enable-libmfx +# --enable-libmodplug (see #849840: replaced with libopenmpt) # --enable-libnut # --enable-libopenh264 -# --enable-libstagefright-h264 +# --enable-libschroedinger (see #845037: removal due to security issues) # --enable-libutvideo # --enable-libvidstab (see #709193 for the RFP bug) # --enable-libxavs +# --enable-libzimg # The following flags are not added for various reasons: -# * --enable-libquvi: The wrapper wasn't updated for recent versions (due to license concerns) and thus might produce problems, e.g. for mpv. +# * --enable-librtmp: ffmpeg has better built-in RTMP support with listen mode. # * --enable-libv4l2 [!hurd-any]: This is only needed for very old devices and may cause problems for others. # Should anyone need it, using LD_PRELOAD pointing on libv4l2 has the same effect. # * --enable-opencl [!hurd-any]: This is considered an experimental API. -# For the shared libraries there are several ways to build: -# * Without further option: This will have no compatibility with Libav, but some sonames clash. Therefore no good choice. -# * With --enable-incompatible-libav-abi, packages build against Libav would work with these libraries, but probably not the other way around. -# This could be used together with Breaks:, Replaces: against the corresponding Libav libraries. -# * With --enable-raise-major, the resulting binaries should be co-installable with the Libav ones and thus no conflicts would be necessary. -# But this could break versioned configure checks. -# * With --build-suffix="-ffmpeg" the library names are changed, so there can't be a conflict with Libav. CONFIG := --prefix=/usr \ --extra-version="$(DEB_REVISION)" \ - --build-suffix="-ffmpeg" \ --toolchain=hardened \ --libdir=/usr/lib/$(DEB_HOST_MULTIARCH) \ --incdir=/usr/include/$(DEB_HOST_MULTIARCH) \ - --cc=$(CC) \ - --cxx=$(CXX) \ --enable-gpl \ - --enable-shared \ --disable-stripping \ - --disable-decoder=libopenjpeg \ - --disable-decoder=libschroedinger \ --enable-avresample \ --enable-avisynth \ --enable-gnutls \ @@ -82,13 +63,12 @@ --enable-libfribidi \ --enable-libgme \ --enable-libgsm \ - --enable-libmodplug \ --enable-libmp3lame \ --enable-libopenjpeg \ + --enable-libopenmpt \ --enable-libopus \ --enable-libpulse \ - --enable-librtmp \ - --enable-libschroedinger \ + --enable-librubberband \ --enable-libshine \ --enable-libsnappy \ --enable-libsoxr \ @@ -102,66 +82,68 @@ --enable-libwebp \ --enable-libx265 \ --enable-libxvid \ + --enable-libzmq \ --enable-libzvbi \ + --enable-omx \ --enable-openal \ --enable-opengl \ - --enable-x11grab + --enable-sdl2 # The standard configuration only uses the shared CONFIG. -CONFIG_standard = +CONFIG_standard = --enable-shared # With these enabled, resulting binaries are effectively licensed as GPLv3+. -CONFIG_extra = --enable-version3 \ +CONFIG_extra = --enable-shared \ + --enable-version3 \ --disable-doc \ --disable-programs \ - --disable-avdevice \ - --disable-avfilter \ - --disable-avformat \ - --disable-avresample \ - --disable-postproc \ - --disable-swscale \ --enable-libopencore_amrnb \ --enable-libopencore_amrwb \ - --enable-libvo_aacenc \ + --enable-libtesseract \ --enable-libvo_amrwbenc +# The static libraries should not be built with PIC. +CONFIG_static = --disable-pic \ + --disable-doc \ + --disable-programs + # Disable optimizations if requested. ifneq (,$(filter $(DEB_BUILD_OPTIONS),noopt)) CONFIG += --disable-optimizations endif -# Some libraries are build only on linux. +# Respect CC/CXX from the environment, if they differ from the default. +# Don't set them if they equal the default, because that disables autodetection needed for cross-building. +ifneq ($(CC),cc) + CONFIG += --cc=$(CC) +endif +ifneq ($(CXX),g++) + CONFIG += --cxx=$(CXX) +endif + +# Some libraries are built only on linux. ifeq ($(DEB_HOST_ARCH_OS),linux) CONFIG += --enable-libdc1394 \ --enable-libiec61883 endif -# Some libraries are not build on hurd. -ifneq ($(DEB_HOST_ARCH_OS),hurd) - CONFIG += --enable-libzmq +# Some build-dependencies are not installable on some architectures. +ifeq (,$(filter $(DEB_HOST_ARCH),powerpcspe)) + CONFIG_extra += --enable-netcdf endif -# ffmpeg is involed in build-dependency cycles with opencv and x264, so disable them in stage one. +# ffmpeg is involed in build-dependency cycles with opencv, x264 and chromaprint, so disable them in stage one. # Also disable frei0r, which build-depends on opencv. ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),) - CONFIG += --disable-libx264 --disable-libopencv --disable-frei0r + CONFIG += --disable-frei0r \ + --disable-chromaprint \ + --disable-libopencv \ + --disable-libx264 else - CONFIG += --enable-frei0r - - # Some libraries are unusable (#792921) on sparc64. - ifeq (,$(filter $(DEB_HOST_ARCH),sparc64)) - CONFIG += --enable-libx264 - endif - - # OpenCV is not available on some architectures. - ifeq (,$(filter $(DEB_HOST_ARCH),sh4 sparc64)) - CONFIG += --enable-libopencv - endif -endif - -# Disable i686 optimizations on i386, because they are not always available on this architecture. -ifneq (,$(filter $(DEB_HOST_ARCH),i386 hurd-i386)) - CONFIG += --disable-i686 + CONFIG += --enable-chromaprint \ + --enable-frei0r \ + --enable-libopencv \ + --enable-libx264 endif # Disable altivec optimizations on powerpc, because they are not always available on this architecture. @@ -170,7 +152,8 @@ # Build an altivec flavor of the libraries on powerpc. # This works around the problem that runtime cpu detection on powerpc currently does not work, # because, if altivec is enabled, all files are build with '-maltivec' so that the compiler inserts altivec instructions, wherever it likes. - CONFIG_altivec = --enable-altivec \ + CONFIG_altivec = --enable-shared \ + --enable-altivec \ --disable-doc \ --disable-programs CONFIG_altivec-extra = $(CONFIG_altivec) $(CONFIG_extra) @@ -182,26 +165,41 @@ CONFIG += --disable-asm endif -# Disable optimizations on mips(el) and some on mips64(el), because they are not always available on these architectures. +# Disable some optimizations on mips*, because they are not always available on these architectures ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel mips64 mips64el)) - CONFIG += --disable-mipsdspr1 \ - --disable-mipsdspr2 \ - --disable-loongson3 + CONFIG += --disable-mipsdsp \ + --disable-mipsdspr2 \ + --disable-loongson2 \ + --disable-loongson3 \ + --disable-mmi \ + --disable-mips32r5 \ + --disable-mips32r6 \ + --disable-mips64r6 \ + --disable-msa endif + +# Disable mipsfpu on mips and mipsel, because it is not compatible with the FPXX ABI ifneq (,$(filter $(DEB_HOST_ARCH),mips mipsel)) CONFIG += --disable-mipsfpu endif +# Set cross-build prefix for compiler, pkg-config... +# Cross-building also requires to manually set architecture/OS. +ifneq ($(DEB_BUILD_GNU_TYPE),$(DEB_HOST_GNU_TYPE)) + CONFIG += --cross-prefix=$(DEB_HOST_GNU_TYPE)- \ + --arch=$(DEB_HOST_ARCH) \ + --target-os=$(DEB_HOST_ARCH_OS) +endif + # Use the default debhelper scripts, where possible. -# Enable parallel building. %: - dh $@ --parallel + dh $@ # Add configuration options: override_dh_auto_configure: - $(info DEB_BUILD_OPTIONS = $(DEB_BUILD_OPTIONS)) $(foreach flavor,$(FLAVORS),mkdir -p debian/$(flavor);) - $(foreach flavor,$(FLAVORS), echo " *** $(flavor) ***"; cd debian/$(flavor); ../../configure $(CONFIG) $(CONFIG_$(flavor)) || (cat config.log && exit 1); cd ../.. ;) + $(foreach flavor,$(FLAVORS),set -e; echo " *** $(flavor) ***"; cd debian/$(flavor); ../../configure $(CONFIG) $(CONFIG_$(flavor)) || (cat config.log && exit 1); cd ../.. ;) + touch override_dh_auto_configure # Remove the subdirectories generated for the flavors. override_dh_auto_clean: @@ -212,63 +210,77 @@ dh_auto_build -i --sourcedirectory=debian/standard -- apidoc # Create the minified CSS files. lessc debian/missing-sources/ffmpeg-web/src/less/style.less | cleancss > debian/standard/doc/style.min.css + rm override_dh_auto_configure override_dh_auto_build-arch: # Copy built object files to avoid building them again for the extra flavor. # Build qt-faststart here, to make it possible to build with 'nocheck'. - for flavor in $(FLAVORS); do \ + set -e && for flavor in $(FLAVORS); do \ echo " *** $$flavor ***"; \ if echo "$$flavor" | grep -q "extra"; then \ subdir=`[ "$$flavor" = "extra" ] && echo "debian/standard/" || echo "debian/altivec/"`; \ - for dir in `cd ./$$subdir; find libavcodec libavutil libswresample -type d`; do \ + for dir in `cd ./$$subdir; find libavcodec libavdevice libavfilter libavformat libavresample libavutil libpostproc libswscale libswresample -type d`; do \ mkdir -p debian/"$$flavor"/"$$dir"; \ echo "$$subdir$$dir"/*.o | grep -q '*' || cp "$$subdir$$dir"/*.o debian/"$$flavor"/"$$dir"; \ done; \ rm debian/"$$flavor"/libavcodec/allcodecs.o; \ + rm debian/"$$flavor"/libavfilter/allfilters.o; \ fi; \ if [ "$$flavor" = "standard" ]; then \ - cd debian/standard; make tools/qt-faststart; cd ../..; \ + $(MAKE) -C debian/standard tools/qt-faststart; \ fi; \ dh_auto_build -a --sourcedirectory=debian/"$$flavor" || (cat debian/"$$flavor"/config.log && exit 1); \ done # Set the library path for the dynamic linker, because the tests otherwise don't find the libraries. -override_dh_auto_test: - export LD_LIBRARY_PATH="libavcodec:libavdevice:libavfilter:libavformat:libavresample:libavutil:libpostproc:libswresample:libswscale"; dh_auto_test --sourcedirectory=debian/standard -- -k +override_dh_auto_test-arch: + export LD_LIBRARY_PATH="libavcodec:libavdevice:libavfilter:libavformat:libavresample:libavutil:libpostproc:libswresample:libswscale"; \ + dh_auto_test -a --sourcedirectory=debian/standard -- -k -override_dh_auto_install: - dh_auto_install --sourcedirectory=debian/standard +# No tests for indep build. +override_dh_auto_test-indep: + +override_dh_auto_install-arch: + dh_auto_install -a --sourcedirectory=debian/standard ifeq ($(DEB_HOST_ARCH),powerpc) install -d debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/altivec install -m 644 debian/altivec/*/*.so.* debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)/altivec endif - dh_auto_install --sourcedirectory=debian/extra --destdir=debian/tmp/extra + dh_auto_install -a --sourcedirectory=debian/extra --destdir=debian/tmp/extra ifeq ($(DEB_HOST_ARCH),powerpc) install -d debian/tmp/extra/usr/lib/$(DEB_HOST_MULTIARCH)/altivec install -m 644 debian/altivec-extra/*/*.so.* debian/tmp/extra/usr/lib/$(DEB_HOST_MULTIARCH)/altivec endif - # Create symbolic links from the standard library lib*.so symlinks, pkg-config files and static libraries to the suffixed ones. - for lib in `find debian/ -name lib*-ffmpeg.so; find debian/ -name lib*.pc; find debian/ -name lib*.a`; do \ - dir=`dirname $$lib`; \ - base=`basename $$lib`; \ - link=`echo $$base | sed 's/-ffmpeg//'`; \ - ln -sf $$base $$link; \ - mv $$link $$dir; \ - done + # Use the static libraries from the --disable-pic build + install -m 644 debian/static/*/lib*.a debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) + +override_dh_auto_install-indep: + dh_auto_install -i --sourcedirectory=debian/standard override_dh_install: - dh_install -N $(EXTRA_PKG) - dh_install -p $(EXTRA_PKG) --sourcedir=debian/tmp/extra + dh_install $(addprefix -p,$(EXTRA_PKGS)) --sourcedir=debian/tmp/extra + dh_install --remaining-packages + +override_dh_makeshlibs: + set -e && for pkg in $(shell dh_listpackages -a) ; do \ + case $$pkg in \ + ffmpeg|*-dev) \ + continue \ + ;; \ + *avcodec*) \ + soversion=$$(echo $$pkg | sed -nr 's/^[^0-9]*([0-9]+)$$/\1/p'); \ + dh_makeshlibs -p $$pkg -V"libavcodec$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM}) | libavcodec-extra$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM})" \ + ;; \ + *avfilter*) \ + soversion=$$(echo $$pkg | sed -nr 's/^[^0-9]*([0-9]+)$$/\1/p'); \ + dh_makeshlibs -p $$pkg -V"libavfilter$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM}) | libavfilter-extra$$soversion (>= ${DEB_VERSION_EPOCH_UPSTREAM})" \ + ;; \ + *) \ + dh_makeshlibs -p $$pkg -V \ + ;; \ + esac \ + done # Don't compress the example source code files. override_dh_compress: dh_compress -Xexamples - -# Move the debug symbols to the debug package. -override_dh_strip: - dh_strip --dbg-package=ffmpeg-dbg - -# Download the latest upstream tarball. -get-orig-source: - cd $(DEBIAN_DIR)../ && \ - uscan --rename --force-download --destdir $(CURDIR) diff -Nru ffmpeg-2.8.6/debian/tests/encdec ffmpeg-3.3.3/debian/tests/encdec --- ffmpeg-2.8.6/debian/tests/encdec 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/tests/encdec 2017-08-05 14:03:46.000000000 +0000 @@ -25,7 +25,7 @@ if [ "$codec" == "avui" ]; then opts="-s 720x486" elif [ "$codec" == "dnxhd" ]; then - opts="-s 1280x720 -b:v 90M" + opts="-s 1280x720 -b:v 90M -pix_fmt yuv422p" elif [ "$codec" == "dvvideo" ]; then opts="-s 720x480 -pix_fmt yuv411p" elif [ "$codec" == "h261" ]; then @@ -62,7 +62,9 @@ fi echo -e "trying muxer '$mux' with '$type' encoder '$encoder' for codec '$codec'\n" ret=0 - ffmpeg -f lavfi -i $src -strict -2 $opts -c:$type "$encoder" -f "$mux" "$file_name" -y -hide_banner 2>&1 || ret=$? + CMD="ffmpeg -f lavfi -i $src -strict -2 $opts -c:$type $encoder -f $mux $file_name -y -hide_banner -nostdin" + echo $CMD + $CMD 2>&1 || ret=$? return $ret } @@ -117,7 +119,22 @@ file_name=$1 ret=0 # The option '-t 1' is necessary, because the comfortnoise decoder never stops producing noise. - ffmpeg -strict -2 -i "$file_name" -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y -hide_banner 2>&1 || ret=$? + CMD="ffmpeg -strict -2 -i $file_name -t 1 -c:v rawvideo -c:a pcm_s32le -f nut /dev/null -y -hide_banner -nostdin" + echo $CMD + $CMD 2>&1 || ret=$? + return $ret +} + +streamcopy_file() { + file_name=$1 + test=$2 + mux=${test%%;*} + file_name_copy="$file_name.copy.$mux" + ret=0 + # The option '-t 1' is necessary, because the comfortnoise decoder never stops producing noise. + CMD="ffmpeg -strict -2 -i $file_name -t 1 -c copy -f $mux $file_name_copy -y -hide_banner -nostdin" + echo $CMD + $CMD 2>&1 || ret=$? return $ret } @@ -270,6 +287,11 @@ for test in $tests; do num_test=$((num_test + 1)) echo "Test $num_test:" + streamcopy=${test##*|} + if [ "$update" ]; then + streamcopy=1 + fi + test=${test%%|*} # skip the test, if the muxer/encoder is not available available=$(echo "$possible_tests" | grep " $test ") || true if [ ! "$available" ]; then @@ -291,7 +313,7 @@ else failures="${failures}${errmsg}\n" fi - echo -e "FAILED: $errmsg\n\n" + echo -e "\nFAILED: $errmsg\n\n" continue fi ret=0 @@ -304,7 +326,7 @@ else failures="${failures}${errmsg}\n" fi - echo -e "FAILED: $errmsg\n\n" + echo -e "\nFAILED: $errmsg\n\n" continue fi ret=0 @@ -317,11 +339,47 @@ else failures="${failures}${errmsg}\n" fi - echo -e "FAILED: $errmsg\n\n" + echo -e "\nFAILED: $errmsg\n\n" continue fi - echo -e "\nSUCCESS: correctly created file with format '$mux' and codec '$tenc'\n\n" - num_success=$((num_success + 1)) + streamcopy_orig="$streamcopy" + if [ "$streamcopy" == "1" ]; then + ret=0 + # test streamcopying the file + # this also sets the file_name_copy variable + echo -e "\n" + streamcopy_file "$file_name" "$test" || ret=$? + if [ "$ret" != "0" ]; then + errmsg="$test; streamcopy return code: $ret" + if [ "$ret" -gt 128 ]; then + crashes="${crashes}${errmsg}\n" + else + failures="${failures}${errmsg}\n" + fi + echo -e "\nFAILED: $errmsg\n\n" + streamcopy=0 + fi + fi + if [ "$streamcopy" == "1" ]; then + ret=0 + # test if the file has the correct format/codec + err=$(probe_file "$file_name_copy" $test) || ret=$? + if [ "$ret" != "0" ]; then + errmsg="$test; streamcopy: $err" + if [ "$ret" -gt 128 ]; then + crashes="${crashes}${errmsg}\n" + else + failures="${failures}${errmsg}\n" + fi + echo -e "\nFAILED: $errmsg\n\n" + streamcopy=0 + fi + fi + works=$([ "$streamcopy" = "1" ] && echo works || echo fails) + if [ "$streamcopy_orig" = "$streamcopy" ]; then + echo -e "\nSUCCESS: correctly created file with format '$mux' and codec '$tenc'; streamcopying $works\n\n" + num_success=$((num_success + 1)) + fi if [ "$update" ]; then if [ "x$last_mux" != "x$mux" ]; then if [ "$last_mux" ]; then @@ -331,7 +389,7 @@ echo -n "$mux;" >> $ENCDECLIST fi last_mux=$mux - echo -n " $tenc" >> $ENCDECLIST + echo -n " $tenc|$streamcopy" >> $ENCDECLIST fi done diff -Nru ffmpeg-2.8.6/debian/tests/encdec-extra_list.txt ffmpeg-3.3.3/debian/tests/encdec-extra_list.txt --- ffmpeg-2.8.6/debian/tests/encdec-extra_list.txt 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/tests/encdec-extra_list.txt 2017-08-05 14:03:46.000000000 +0000 @@ -1,19 +1,13 @@ -3g2; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -3gp; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -amr; a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -asf; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -avi; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -caf; a=amr_nb:libopencore_amrnb -ffm; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -flv; a=aac:libvo_aacenc -hls; a=aac:libvo_aacenc -matroska; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -mov; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -mp4; a=aac:libvo_aacenc -mpegts; a=aac:libvo_aacenc -nut; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -rm; a=aac:libvo_aacenc -spdif; a=aac:libvo_aacenc -w64; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -wav; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc -wtv; a=aac:libvo_aacenc a=amr_nb:libopencore_amrnb a=amr_wb:libvo_amrwbenc \ No newline at end of file +3g2; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +3gp; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +amr; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +asf; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +avi; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +caf; a=amr_nb:libopencore_amrnb|1 +ffm; a=amr_nb:libopencore_amrnb|0 a=amr_wb:libvo_amrwbenc|0 +matroska; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +mov; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +nut; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +w64; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +wav; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 +wtv; a=amr_nb:libopencore_amrnb|1 a=amr_wb:libvo_amrwbenc|1 diff -Nru ffmpeg-2.8.6/debian/tests/encdec_list.txt ffmpeg-3.3.3/debian/tests/encdec_list.txt --- ffmpeg-2.8.6/debian/tests/encdec_list.txt 2016-02-22 06:22:27.000000000 +0000 +++ ffmpeg-3.3.3/debian/tests/encdec_list.txt 2017-08-05 14:03:46.000000000 +0000 @@ -1,55 +1,59 @@ -3g2; v=h263 v=h264:libx264 v=h264:libx264rgb v=mpeg4:mpeg4 v=mpeg4:libxvid a=aac -3gp; v=h263 v=h264:libx264 v=h264:libx264rgb v=mpeg4:mpeg4 v=mpeg4:libxvid a=aac -ac3; a=ac3:ac3 -adx; a=adpcm_adx -aiff; a=adpcm_ima_qt a=pcm_alaw a=pcm_f32be a=pcm_f64be a=pcm_mulaw a=pcm_s16be a=pcm_s16le a=pcm_s24be a=pcm_s32be a=pcm_s8 a=pcm_u8 -apng; v=apng -asf; v=amv v=asv1 v=asv2 v=ayuv v=cinepak v=cljr v=dirac:libschroedinger v=dpx v=dvvideo v=ffv1 v=ffvhuff v=flashsv v=flv1:flv v=h261 v=h263 v=h264:libx264 v=h264:libx264rgb v=huffyuv v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=jpegls v=mjpeg v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=msmpeg4v2 v=msmpeg4v3:msmpeg4 v=msvideo1 v=png v=r10k v=r210 v=snow v=svq1 v=targa v=theora:libtheora v=utvideo v=v210 v=v308 v=v408 v=v410 v=vp8:libvpx v=vp9:libvpx-vp9 v=wmv1 v=wmv2 v=y41p v=yuv4 v=zlib v=zmbv a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=dts:dca a=eac3 a=flac a=g723_1 a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=pcm_alaw a=pcm_f32le a=pcm_f64le a=pcm_mulaw a=pcm_s16le a=pcm_s24le a=pcm_s32le a=pcm_u8 a=sonic a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis a=wmav1 a=wmav2 -ast; a=pcm_s16be_planar -au; a=adpcm_g722:g722 a=pcm_alaw a=pcm_f32be a=pcm_f64be a=pcm_mulaw a=pcm_s16be a=pcm_s24be a=pcm_s32be a=pcm_s8 -avi; v=amv v=asv1 v=asv2 v=ayuv v=cinepak v=cljr v=dirac:libschroedinger v=dpx v=dvvideo v=ffv1 v=ffvhuff v=flashsv v=flv1:flv v=h261 v=h263 v=h264:libx264 v=h264:libx264rgb v=hap v=huffyuv v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=jpegls v=mjpeg v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid v=msmpeg4v2 v=msmpeg4v3:msmpeg4 v=msvideo1 v=png v=prores:prores v=prores:prores_aw v=prores:prores_ks v=r10k v=r210 v=snow v=svq1 v=targa v=theora:libtheora v=utvideo v=v210 v=v308 v=v408 v=v410 v=vp8:libvpx v=vp9:libvpx-vp9 v=wmv1 v=wmv2 v=y41p v=yuv4 v=zlib v=zmbv a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=dts:dca a=eac3 a=flac a=g723_1 a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=pcm_alaw a=pcm_f32le a=pcm_f64le a=pcm_mulaw a=pcm_s16le a=pcm_s24le a=pcm_s32le a=pcm_u8 a=sonic a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis a=wmav1 a=wmav2 -caf; a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_ima_qt a=adpcm_ima_wav a=adpcm_ms a=alac a=gsm:libgsm a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=pcm_alaw a=pcm_f32be a=pcm_f32le a=pcm_f64be a=pcm_f64le a=pcm_mulaw a=pcm_s16be a=pcm_s16le a=pcm_s24be a=pcm_s24le a=pcm_s32be a=pcm_s32le a=pcm_s8 -dirac; v=dirac:libschroedinger -dnxhd; v=dnxhd -dts; a=dts:dca -dv; v=dvvideo -eac3; a=eac3 -ffm; v=alias_pix v=amv v=asv1 v=asv2 v=avrp v=ayuv v=bmp v=cinepak v=cljr v=dirac:libschroedinger v=dnxhd v=dpx v=dvvideo v=ffv1 v=ffvhuff v=flashsv v=flashsv2 v=flv1:flv v=h261 v=h263 v=h263p v=h264:libx264 v=h264:libx264rgb v=hap v=hevc:libx265 v=huffyuv v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=jpegls v=mjpeg v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid v=msmpeg4v2 v=msmpeg4v3:msmpeg4 v=msvideo1 v=pam v=pbm v=pcx v=pgm v=pgmyuv v=png v=ppm v=prores:prores v=prores:prores_aw v=prores:prores_ks v=qtrle v=r10k v=r210 v=rawvideo v=roq:roqvideo v=sgi v=snow v=sunrast v=svq1 v=targa v=tiff v=v210 v=v308 v=v408 v=v410 v=vp8:libvpx v=vp9:libvpx-vp9 v=webp:libwebp v=wmv1 v=wmv2 v=xbm v=xface v=xwd v=y41p v=yuv4 v=zmbv a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_adx a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_qt a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=comfortnoise a=dts:dca a=eac3 a=flac a=g723_1 a=gsm:libgsm a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=nellymoser a=opus:libopus a=pcm_alaw a=pcm_f32be a=pcm_f32le a=pcm_f64be a=pcm_f64le a=pcm_mulaw a=pcm_s16be a=pcm_s16be_planar a=pcm_s16le a=pcm_s16le_planar a=pcm_s24be a=pcm_s24daud a=pcm_s24le a=pcm_s24le_planar a=pcm_s32be a=pcm_s32le a=pcm_s32le_planar a=pcm_s8 a=pcm_s8_planar a=pcm_u16be a=pcm_u16le a=pcm_u24be a=pcm_u24le a=pcm_u32be a=pcm_u32le a=pcm_u8 a=ra_144:real_144 a=roq_dpcm a=s302m a=speex:libspeex a=wavpack:wavpack a=wavpack:libwavpack a=wmav1 a=wmav2 -flac; a=flac -flv; v=flashsv v=flashsv2 v=flv1:flv v=h263 v=h264:libx264 v=h264:libx264rgb a=aac a=adpcm_swf a=mp3:libmp3lame a=mp3:libshine a=nellymoser a=pcm_alaw a=pcm_mulaw a=pcm_s16le a=pcm_u8 -g722; a=adpcm_g722:g722 -g723_1; a=g723_1 -gif; v=gif -gxf; v=dvvideo -h261; v=h261 -h263; v=h263 -h264; v=h264:libx264 v=h264:libx264rgb -hevc; v=hevc:libx265 -hls; v=dirac:libschroedinger v=h264:libx264 v=h264:libx264rgb v=hevc:libx265 v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 a=aac a=dts:dca a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=s302m -ircam; a=pcm_alaw a=pcm_f32le a=pcm_f64le a=pcm_mulaw a=pcm_s16le a=pcm_s24le a=pcm_s32le a=pcm_s8 -ivf; v=vp8:libvpx v=vp9:libvpx-vp9 -m4v; v=mpeg4:mpeg4 v=mpeg4:libxvid -matroska; v=amv v=asv1 v=asv2 v=ayuv v=cljr v=dirac:libschroedinger v=dpx v=dvvideo v=ffv1 v=ffvhuff v=flashsv v=flv1:flv v=h261 v=h263 v=h264:libx264 v=h264:libx264rgb v=hevc:libx265 v=huffyuv v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=jpegls v=mjpeg v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid v=msmpeg4v2 v=msmpeg4v3:msmpeg4 v=msvideo1 v=png v=prores:prores v=prores:prores_aw v=prores:prores_ks v=r10k v=r210 v=rawvideo v=snow v=targa v=theora:libtheora v=utvideo v=v210 v=v308 v=v408 v=v410 v=vp8:libvpx v=vp9:libvpx-vp9 v=wmv1 v=wmv2 v=y41p v=yuv4 v=zlib v=zmbv a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=alac a=dts:dca a=eac3 a=flac a=g723_1 a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=opus:libopus a=pcm_alaw a=pcm_f32le a=pcm_f64le a=pcm_mulaw a=pcm_s16be a=pcm_s16le a=pcm_s24be a=pcm_s24le a=pcm_s32be a=pcm_s32le a=pcm_u8 a=ra_144:real_144 a=sonic a=speex:libspeex a=tta a=vorbis:vorbis a=vorbis:libvorbis a=wavpack:wavpack a=wavpack:libwavpack a=wmav1 a=wmav2 -mjpeg; v=mjpeg -mmf; a=adpcm_yamaha -mov; v=amv v=asv1 v=asv2 v=avrp v=avui v=ayuv v=cinepak v=cljr v=dirac:libschroedinger v=dnxhd v=dpx v=dvvideo v=ffv1 v=ffvhuff v=flashsv v=flv1:flv v=h261 v=h263 v=h264:libx264 v=h264:libx264rgb v=hap v=hevc:libx265 v=huffyuv v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=jpegls v=mjpeg v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid v=msmpeg4v2 v=msmpeg4v3:msmpeg4 v=msvideo1 v=png v=prores:prores v=prores:prores_aw v=prores:prores_ks v=qtrle v=r10k v=r210 v=sgi v=snow v=svq1 v=targa v=theora:libtheora v=tiff v=utvideo v=v210 v=v308 v=v408 v=v410 v=vp8:libvpx v=vp9:libvpx-vp9 v=wmv1 v=wmv2 v=y41p v=yuv4 v=zlib v=zmbv a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_qt a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=alac a=dts:dca a=eac3 a=flac a=g723_1 a=gsm:libgsm a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=nellymoser a=pcm_alaw a=pcm_f32be a=pcm_f32le a=pcm_f64be a=pcm_f64le a=pcm_mulaw a=pcm_s16be a=pcm_s16le a=pcm_s24be a=pcm_s24le a=pcm_s32be a=pcm_s32le a=pcm_s8 a=pcm_u8 a=sonic a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis -mp3; a=mp3:libmp3lame a=mp3:libshine -mp4; v=dirac:libschroedinger v=h264:libx264 v=h264:libx264rgb v=hevc:libx265 v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=mjpeg v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid v=png a=aac a=ac3:ac3 a=ac3:ac3_fixed a=dts:dca a=eac3 a=mp3:libmp3lame a=mp3:libshine a=vorbis:vorbis a=vorbis:libvorbis -mpeg; v=h264:libx264 v=h264:libx264rgb v=hevc:libx265 v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid a=ac3:ac3 a=ac3:ac3_fixed a=dts:dca a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine -mpegts; v=dirac:libschroedinger v=h264:libx264 v=h264:libx264rgb v=hevc:libx265 v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 a=aac a=dts:dca a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=s302m -mxf; v=dnxhd v=dvvideo v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=mpeg2video -nut; v=amv v=asv1 v=asv2 v=ayuv v=cinepak v=cljr v=dirac:libschroedinger v=dpx v=dvvideo v=ffv1 v=ffvhuff v=flashsv v=flv1:flv v=h261 v=h263 v=h264:libx264 v=h264:libx264rgb v=hap v=huffyuv v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=jpegls v=mjpeg v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid v=msmpeg4v2 v=msmpeg4v3:msmpeg4 v=msvideo1 v=png v=prores:prores v=prores:prores_aw v=prores:prores_ks v=r10k v=r210 v=rawvideo v=snow v=svq1 v=targa v=theora:libtheora v=utvideo v=v210 v=v308 v=v408 v=v410 v=vp8:libvpx v=vp9:libvpx-vp9 v=wmv1 v=wmv2 v=xface v=y41p v=yuv4 v=zlib v=zmbv a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=comfortnoise a=dts:dca a=flac a=g723_1 a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=pcm_alaw a=pcm_f32be a=pcm_f32le a=pcm_f64be a=pcm_f64le a=pcm_mulaw a=pcm_s16be a=pcm_s16be_planar a=pcm_s16le a=pcm_s16le_planar a=pcm_s24be a=pcm_s24le a=pcm_s24le_planar a=pcm_s32be a=pcm_s32le a=pcm_s32le_planar a=pcm_s8 a=pcm_s8_planar a=pcm_u16be a=pcm_u16le a=pcm_u24be a=pcm_u24le a=pcm_u32be a=pcm_u32le a=pcm_u8 a=sonic a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis a=wavpack:wavpack a=wavpack:libwavpack -ogg; v=theora:libtheora a=flac a=opus:libopus a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis -rm; v=rv10 v=rv20 a=aac a=ac3:ac3 a=ac3:ac3_fixed a=ra_144:real_144 -roq; v=roq:roqvideo a=roq_dpcm -rso; a=pcm_u8 -smjpeg; v=mjpeg a=pcm_s16le -sox; a=pcm_s32be a=pcm_s32le -spdif; a=ac3:ac3 a=ac3:ac3_fixed a=mp3:libmp3lame a=mp3:libshine -swf; v=flv1:flv v=mjpeg a=mp3:libmp3lame a=mp3:libshine -voc; a=pcm_alaw a=pcm_mulaw a=pcm_s16le a=pcm_u8 -w64; a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=dts:dca a=eac3 a=flac a=g723_1 a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=pcm_alaw a=pcm_f32le a=pcm_f64le a=pcm_mulaw a=pcm_s16le a=pcm_s24le a=pcm_s32le a=pcm_u8 a=sonic a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis a=wmav1 a=wmav2 -wav; a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=dts:dca a=eac3 a=flac a=g723_1 a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=pcm_alaw a=pcm_f32le a=pcm_f64le a=pcm_mulaw a=pcm_s16le a=pcm_s24le a=pcm_s32le a=pcm_u8 a=sonic a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis a=wmav1 a=wmav2 -webm; v=vp8:libvpx v=vp9:libvpx-vp9 a=opus:libopus a=vorbis:vorbis a=vorbis:libvorbis -wtv; v=amv v=asv1 v=asv2 v=ayuv v=cinepak v=cljr v=dirac:libschroedinger v=dpx v=dvvideo v=ffv1 v=ffvhuff v=flashsv v=flv1:flv v=h261 v=h263 v=h264:libx264 v=h264:libx264rgb v=huffyuv v=jpeg2000:jpeg2000 v=jpeg2000:libopenjpeg v=jpegls v=mpeg1video v=mpeg2video v=mpeg4:mpeg4 v=mpeg4:libxvid v=msmpeg4v2 v=msmpeg4v3:msmpeg4 v=msvideo1 v=png v=r10k v=r210 v=snow v=svq1 v=targa v=v210 v=v308 v=v408 v=v410 v=vp8:libvpx v=vp9:libvpx-vp9 v=wmv1 v=wmv2 v=y41p v=yuv4 v=zmbv a=aac a=ac3:ac3 a=ac3:ac3_fixed a=adpcm_g722:g722 a=adpcm_g726:g726 a=adpcm_ima_wav a=adpcm_ms a=adpcm_swf a=adpcm_yamaha a=dts:dca a=eac3 a=flac a=g723_1 a=gsm_ms:libgsm_ms a=mp2:mp2 a=mp2:mp2fixed a=mp2:libtwolame a=mp3:libmp3lame a=mp3:libshine a=pcm_alaw a=pcm_f32le a=pcm_f64le a=pcm_mulaw a=pcm_s16le a=pcm_s24le a=pcm_s32le a=pcm_u8 a=sonic a=speex:libspeex a=vorbis:vorbis a=vorbis:libvorbis a=wmav1 a=wmav2 -wv; a=wavpack:wavpack a=wavpack:libwavpack \ No newline at end of file +3g2; v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 a=aac|1 +3gp; v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 a=aac|1 +ac3; a=ac3:ac3|1 +adx; a=adpcm_adx|0 +aiff; a=adpcm_ima_qt|1 a=pcm_alaw|1 a=pcm_f32be|1 a=pcm_f64be|1 a=pcm_mulaw|1 a=pcm_s16be|1 a=pcm_s16le|1 a=pcm_s24be|1 a=pcm_s32be|1 a=pcm_s8|1 a=pcm_u8|1 +apng; v=apng|1 +asf; v=amv|1 v=asv1|1 v=asv2|1 v=ayuv|1 v=cinepak|1 v=cljr|1 v=dirac:vc2|1 v=dpx|1 v=dvvideo|1 v=ffv1|1 v=ffvhuff|1 v=flashsv|1 v=flv1:flv|1 v=h261|1 v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=huffyuv|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=jpegls|1 v=mjpeg:mjpeg|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=msmpeg4v2|1 v=msmpeg4v3:msmpeg4|1 v=msvideo1|1 v=png|1 v=r10k|1 v=r210|1 v=snow|1 v=svq1|1 v=targa|1 v=theora:libtheora|1 v=utvideo|1 v=v210|1 v=v308|1 v=v408|1 v=v410|1 v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 v=wmv1|1 v=wmv2|1 v=y41p|1 v=yuv4|1 v=zlib|1 v=zmbv|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=dts:dca|1 a=eac3|1 a=flac|1 a=g723_1|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=pcm_alaw|1 a=pcm_f32le|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_s24le|1 a=pcm_s32le|1 a=pcm_s64le|1 a=pcm_u8|1 a=sonic|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wmav1|1 a=wmav2|1 +ast; a=pcm_s16be_planar|1 +au; a=adpcm_g722:g722|1 a=pcm_alaw|1 a=pcm_f32be|1 a=pcm_f64be|1 a=pcm_mulaw|1 a=pcm_s16be|1 a=pcm_s24be|1 a=pcm_s32be|1 a=pcm_s8|1 +avi; v=amv|1 v=asv1|1 v=asv2|1 v=ayuv|1 v=cinepak|1 v=cljr|1 v=dirac:vc2|1 v=dpx|1 v=dvvideo|1 v=ffv1|1 v=ffvhuff|1 v=flashsv|1 v=flv1:flv|1 v=h261|1 v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hap|1 v=huffyuv|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=jpegls|1 v=mjpeg:mjpeg|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=msmpeg4v2|1 v=msmpeg4v3:msmpeg4|1 v=msvideo1|1 v=png|1 v=prores:prores|1 v=prores:prores_aw|1 v=prores:prores_ks|1 v=r10k|1 v=r210|1 v=snow|1 v=svq1|1 v=targa|1 v=theora:libtheora|1 v=utvideo|1 v=v210|1 v=v308|1 v=v408|1 v=v410|1 v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 v=wmv1|1 v=wmv2|1 v=y41p|1 v=yuv4|1 v=zlib|1 v=zmbv|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=dts:dca|1 a=eac3|1 a=flac|1 a=g723_1|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=pcm_alaw|1 a=pcm_f32le|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_s24le|1 a=pcm_s32le|1 a=pcm_s64le|1 a=pcm_u8|1 a=sonic|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wmav1|1 a=wmav2|1 +caf; a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_ima_qt|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=alac|1 a=gsm:libgsm|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=pcm_alaw|1 a=pcm_f32be|1 a=pcm_f32le|1 a=pcm_f64be|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16be|1 a=pcm_s16le|1 a=pcm_s24be|1 a=pcm_s24le|1 a=pcm_s32be|1 a=pcm_s32le|1 a=pcm_s8|1 +dirac; v=dirac:vc2|1 +dnxhd; v=dnxhd|1 +dts; a=dts:dca|1 +dv; v=dvvideo|1 +eac3; a=eac3|1 +ffm; v=alias_pix|1 v=amv|1 v=asv1|1 v=asv2|1 v=avrp|1 v=avui|1 v=ayuv|1 v=bmp|1 v=cinepak|1 v=cljr|1 v=dirac:vc2|1 v=dnxhd|1 v=dpx|1 v=dvvideo|1 v=ffv1|1 v=ffvhuff|1 v=flashsv|1 v=flashsv2|1 v=flv1:flv|1 v=h261|1 v=h263|1 v=h263p|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hap|1 v=hevc:libx265|1 v=huffyuv|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=jpegls|1 v=mjpeg:mjpeg|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=msmpeg4v2|1 v=msmpeg4v3:msmpeg4|1 v=msvideo1|1 v=pam|1 v=pbm|1 v=pcx|1 v=pgm|1 v=pgmyuv|1 v=png|1 v=ppm|1 v=prores:prores|1 v=prores:prores_aw|1 v=prores:prores_ks|1 v=qtrle|1 v=r10k|1 v=r210|1 v=rawvideo|1 v=roq:roqvideo|1 v=sgi|1 v=snow|1 v=sunrast|1 v=svq1|1 v=targa|1 v=theora:libtheora|1 v=tiff|1 v=utvideo|1 v=v210|1 v=v308|1 v=v408|1 v=v410|1 v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 v=webp:libwebp|1 v=wmv1|1 v=wmv2|1 v=xbm|1 v=xface|1 v=xwd|1 v=y41p|1 v=yuv4|1 v=zlib|1 v=zmbv|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_adx|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_qt|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=alac|1 a=comfortnoise|1 a=dts:dca|1 a=eac3|1 a=flac|1 a=g723_1|1 a=gsm:libgsm|1 a=gsm_ms:libgsm_ms|1 a=mlp|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=nellymoser|1 a=opus:opus|1 a=opus:libopus|1 a=pcm_alaw|1 a=pcm_f32be|1 a=pcm_f32le|1 a=pcm_f64be|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16be|1 a=pcm_s16be_planar|1 a=pcm_s16le|1 a=pcm_s16le_planar|1 a=pcm_s24be|1 a=pcm_s24daud|1 a=pcm_s24le|1 a=pcm_s24le_planar|1 a=pcm_s32be|1 a=pcm_s32le|1 a=pcm_s32le_planar|1 a=pcm_s64be|1 a=pcm_s64le|1 a=pcm_s8|1 a=pcm_s8_planar|1 a=pcm_u16be|1 a=pcm_u16le|1 a=pcm_u24be|1 a=pcm_u24le|1 a=pcm_u32be|1 a=pcm_u32le|1 a=pcm_u8|1 a=ra_144:real_144|1 a=roq_dpcm|1 a=s302m|1 a=sonic|1 a=speex:libspeex|1 a=truehd|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wavpack:wavpack|1 a=wavpack:libwavpack|1 a=wmav1|1 a=wmav2|1 +flac; a=flac|1 +flv; v=flashsv|1 v=flashsv2|1 v=flv1:flv|1 v=h263|0 v=h264:libx264|1 v=h264:libx264rgb|1 a=aac|1 a=adpcm_swf|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=nellymoser|1 a=pcm_alaw|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_u8|1 +g722; a=adpcm_g722:g722|1 +g723_1; a=g723_1|1 +gif; v=gif|0 +gsm; a=gsm:libgsm|1 +gxf; v=dvvideo|1 +h261; v=h261|1 +h263; v=h263|1 +h264; v=h264:libx264|1 v=h264:libx264rgb|1 +hevc; v=hevc:libx265|1 +hls; v=dirac:vc2|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hevc:libx265|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=dts:dca|1 a=eac3|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=opus:opus|1 a=opus:libopus|1 a=s302m|1 +ircam; a=pcm_alaw|1 a=pcm_f32le|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_s24le|1 a=pcm_s32le|1 a=pcm_s8|1 +ivf; v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 +m4v; v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 +matroska; v=amv|1 v=asv1|1 v=asv2|1 v=avrp|1 v=ayuv|1 v=cinepak|1 v=cljr|1 v=dirac:vc2|1 v=dnxhd|1 v=dpx|1 v=dvvideo|1 v=ffv1|1 v=ffvhuff|1 v=flashsv|1 v=flv1:flv|1 v=h261|1 v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hap|1 v=hevc:libx265|1 v=huffyuv|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=jpegls|1 v=mjpeg:mjpeg|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=msmpeg4v2|1 v=msmpeg4v3:msmpeg4|1 v=msvideo1|1 v=png|1 v=prores:prores|1 v=prores:prores_aw|1 v=prores:prores_ks|1 v=r10k|1 v=r210|1 v=rawvideo|0 v=sgi|1 v=snow|1 v=svq1|1 v=targa|1 v=theora:libtheora|1 v=tiff|1 v=utvideo|1 v=v210|1 v=v308|1 v=v408|1 v=v410|1 v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 v=wmv1|1 v=wmv2|1 v=y41p|1 v=yuv4|1 v=zlib|1 v=zmbv|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=alac|1 a=dts:dca|1 a=eac3|1 a=flac|1 a=g723_1|1 a=gsm_ms:libgsm_ms|1 a=mlp|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=opus:opus|1 a=opus:libopus|1 a=pcm_alaw|1 a=pcm_f32le|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16be|1 a=pcm_s16le|1 a=pcm_s24be|1 a=pcm_s24le|1 a=pcm_s32be|1 a=pcm_s32le|1 a=pcm_s64le|1 a=pcm_u8|1 a=ra_144:real_144|1 a=sonic|1 a=speex:libspeex|1 a=truehd|1 a=tta|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wavpack:wavpack|1 a=wavpack:libwavpack|1 a=wmav1|1 a=wmav2|1 +mjpeg; v=mjpeg:mjpeg|1 +mlp; a=mlp|1 +mmf; a=adpcm_yamaha|1 +mov; v=amv|1 v=asv1|1 v=asv2|1 v=avrp|1 v=avui|1 v=ayuv|1 v=cinepak|1 v=cljr|1 v=dirac:vc2|1 v=dnxhd|1 v=dpx|1 v=dvvideo|1 v=ffv1|1 v=ffvhuff|1 v=flashsv|1 v=flv1:flv|1 v=h261|1 v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hap|1 v=hevc:libx265|1 v=huffyuv|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=jpegls|1 v=mjpeg:mjpeg|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=msmpeg4v2|1 v=msmpeg4v3:msmpeg4|1 v=msvideo1|1 v=png|1 v=prores:prores|1 v=prores:prores_aw|1 v=prores:prores_ks|1 v=qtrle|1 v=r10k|1 v=r210|1 v=sgi|1 v=snow|1 v=svq1|1 v=targa|1 v=theora:libtheora|1 v=tiff|1 v=utvideo|1 v=v210|1 v=v308|1 v=v408|1 v=v410|1 v=vp8:libvpx|1 v=wmv1|1 v=wmv2|1 v=y41p|1 v=yuv4|1 v=zlib|1 v=zmbv|0 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_qt|1 a=adpcm_ima_wav|0 a=adpcm_ms|0 a=adpcm_swf|1 a=adpcm_yamaha|1 a=alac|1 a=dts:dca|1 a=eac3|1 a=g723_1|1 a=gsm:libgsm|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=nellymoser|1 a=pcm_alaw|1 a=pcm_f32be|1 a=pcm_f32le|1 a=pcm_f64be|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16be|1 a=pcm_s16le|1 a=pcm_s24be|1 a=pcm_s24le|1 a=pcm_s32be|1 a=pcm_s32le|1 a=pcm_s8|1 a=pcm_u8|1 a=sonic|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 +mp3; a=mp3:libmp3lame|1 a=mp3:libshine|1 +mp4; v=dirac:vc2|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hevc:libx265|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=mjpeg:mjpeg|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=png|1 v=vp9:libvpx-vp9|0 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=dts:dca|1 a=eac3|1 a=flac|0 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 +mpeg; v=h264:libx264|1 v=h264:libx264rgb|1 v=hevc:libx265|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=dts:dca|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 +mpegts; v=dirac:vc2|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hevc:libx265|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=dts:dca|1 a=eac3|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=opus:opus|1 a=opus:libopus|1 a=s302m|1 +mpjpeg; v=mjpeg:mjpeg|1 +mxf; v=dnxhd|1 v=dvvideo|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=mpeg2video:mpeg2video|1 +nut; v=amv|1 v=asv1|1 v=asv2|1 v=ayuv|1 v=cinepak|1 v=cljr|1 v=dirac:vc2|0 v=dpx|1 v=dvvideo|1 v=ffv1|1 v=ffvhuff|1 v=flashsv|1 v=flv1:flv|1 v=h261|1 v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=hap|1 v=hevc:libx265|1 v=huffyuv|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=jpegls|1 v=mjpeg:mjpeg|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=msmpeg4v2|1 v=msmpeg4v3:msmpeg4|1 v=msvideo1|1 v=png|1 v=prores:prores|1 v=prores:prores_aw|1 v=prores:prores_ks|1 v=r10k|1 v=r210|1 v=rawvideo|1 v=snow|1 v=svq1|1 v=targa|1 v=theora:libtheora|1 v=utvideo|1 v=v210|1 v=v308|1 v=v408|1 v=v410|1 v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 v=wmv1|1 v=wmv2|1 v=xface|1 v=y41p|1 v=yuv4|1 v=zlib|1 v=zmbv|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=comfortnoise|1 a=dts:dca|1 a=flac|1 a=g723_1|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=opus:opus|1 a=opus:libopus|1 a=pcm_alaw|1 a=pcm_f32be|1 a=pcm_f32le|1 a=pcm_f64be|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16be|1 a=pcm_s16be_planar|1 a=pcm_s16le|1 a=pcm_s16le_planar|1 a=pcm_s24be|1 a=pcm_s24le|1 a=pcm_s24le_planar|1 a=pcm_s32be|1 a=pcm_s32le|1 a=pcm_s32le_planar|1 a=pcm_s8|1 a=pcm_s8_planar|1 a=pcm_u16be|1 a=pcm_u16le|1 a=pcm_u24be|1 a=pcm_u24le|1 a=pcm_u32be|1 a=pcm_u32le|1 a=pcm_u8|1 a=sonic|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wavpack:wavpack|1 a=wavpack:libwavpack|1 +ogg; v=theora:libtheora|1 v=vp8:libvpx|1 a=flac|1 a=opus:opus|1 a=opus:libopus|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 +rm; v=rv10|1 v=rv20|1 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=ra_144:real_144|1 +roq; v=roq:roqvideo|0 a=roq_dpcm|1 +rso; a=pcm_u8|1 +smjpeg; v=mjpeg:mjpeg|1 a=pcm_s16le|1 +sox; a=pcm_s32be|1 a=pcm_s32le|1 +spdif; a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 +swf; v=flv1:flv|0 v=mjpeg:mjpeg|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 +tta; a=tta|1 +voc; a=pcm_alaw|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_u8|1 +w64; a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=dts:dca|1 a=eac3|1 a=flac|1 a=g723_1|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=pcm_alaw|1 a=pcm_f32le|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_s24le|1 a=pcm_s32le|1 a=pcm_s64le|1 a=pcm_u8|1 a=sonic|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wmav1|1 a=wmav2|1 +wav; a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=dts:dca|1 a=eac3|1 a=flac|1 a=g723_1|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=pcm_alaw|1 a=pcm_f32le|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_s24le|1 a=pcm_s32le|1 a=pcm_s64le|1 a=pcm_u8|1 a=sonic|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wmav1|1 a=wmav2|1 +webm; v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 a=opus:opus|1 a=opus:libopus|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 +wtv; v=amv|1 v=asv1|1 v=asv2|1 v=ayuv|1 v=cinepak|0 v=cljr|1 v=dirac:vc2|1 v=dpx|1 v=dvvideo|1 v=ffv1|0 v=ffvhuff|1 v=flashsv|0 v=flv1:flv|0 v=h261|1 v=h263|1 v=h264:libx264|1 v=h264:libx264rgb|1 v=huffyuv|1 v=jpeg2000:jpeg2000|1 v=jpeg2000:libopenjpeg|1 v=jpegls|1 v=mpeg1video|1 v=mpeg2video:mpeg2video|1 v=mpeg4:mpeg4|1 v=mpeg4:libxvid|1 v=msmpeg4v2|0 v=msmpeg4v3:msmpeg4|0 v=msvideo1|0 v=png|0 v=r10k|1 v=r210|1 v=snow|0 v=svq1|0 v=targa|1 v=v210|1 v=v308|1 v=v408|1 v=v410|1 v=vp8:libvpx|1 v=vp9:libvpx-vp9|1 v=wmv1|0 v=wmv2|0 v=y41p|1 v=yuv4|1 v=zmbv|0 a=aac|1 a=ac3:ac3|1 a=ac3:ac3_fixed|1 a=adpcm_g722:g722|1 a=adpcm_g726:g726|1 a=adpcm_ima_wav|1 a=adpcm_ms|1 a=adpcm_swf|1 a=adpcm_yamaha|1 a=dts:dca|1 a=eac3|1 a=flac|1 a=g723_1|1 a=gsm_ms:libgsm_ms|1 a=mp2:mp2|1 a=mp2:mp2fixed|1 a=mp2:libtwolame|1 a=mp3:libmp3lame|1 a=mp3:libshine|1 a=pcm_alaw|1 a=pcm_f32le|1 a=pcm_f64le|1 a=pcm_mulaw|1 a=pcm_s16le|1 a=pcm_s24le|1 a=pcm_s32le|1 a=pcm_s64le|1 a=pcm_u8|1 a=sonic|1 a=speex:libspeex|1 a=vorbis:vorbis|1 a=vorbis:libvorbis|1 a=wmav1|1 a=wmav2|1 +wv; a=wavpack:wavpack|1 a=wavpack:libwavpack|1 diff -Nru ffmpeg-2.8.6/doc/APIchanges ffmpeg-3.3.3/doc/APIchanges --- ffmpeg-2.8.6/doc/APIchanges 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/doc/APIchanges 2017-07-29 17:49:29.000000000 +0000 @@ -2,19 +2,413 @@ since the last major version increase or the API was added. The last version increases were: -libavcodec: 2014-08-09 -libavdevice: 2014-08-09 -libavfilter: 2014-08-09 -libavformat: 2014-08-09 -libavresample: 2014-08-09 -libpostproc: 2014-08-09 -libswresample: 2014-08-09 -libswscale: 2014-08-09 -libavutil: 2014-08-09 +libavcodec: 2015-08-28 +libavdevice: 2015-08-28 +libavfilter: 2015-08-28 +libavformat: 2015-08-28 +libavresample: 2015-08-28 +libpostproc: 2015-08-28 +libswresample: 2015-08-28 +libswscale: 2015-08-28 +libavutil: 2015-08-28 API changes, most recent first: +2017-03-31 - 9033e8723c - lavu 55.57.100 - spherical.h + Add av_spherical_projection_name(). + Add av_spherical_from_name(). + +2017-03-30 - 4cda23f1f1 - lavu 55.53.100 / 55.27.0 - hwcontext.h + Add av_hwframe_map() and associated AV_HWFRAME_MAP_* flags. + Add av_hwframe_ctx_create_derived(). + +2017-03-29 - bfdcdd6d82 - lavu 55.52.100 - avutil.h + add av_fourcc_make_string() function and av_fourcc2str() macro to replace + av_get_codec_tag_string() from lavc. + +2017-03-27 - ddef3d902f - lavf 57.68.100 - avformat.h + Deprecate that demuxers export the stream rotation angle in AVStream.metadata + (via an entry named "rotate"). Use av_stream_get_side_data() with + AV_PKT_DATA_DISPLAYMATRIX instead, and read the rotation angle with + av_display_rotation_get(). The same is done for muxing. Instead of adding a + "rotate" entry to AVStream.metadata, AV_PKT_DATA_DISPLAYMATRIX side data has + to be added to the AVStream. + +2017-03-23 - 7e4ba776a2 - lavc 57.85.101 - avcodec.h + vdpau hardware accelerated decoding now supports the new hwaccel API, which + can create the decoder context and allocate hardware frame automatically. + See AVCodecContext.hw_device_ctx and AVCodecContext.hw_frames_ctx. + +2017-03-23 - 156bd8278f - lavc 57.85.100 - avcodec.h + Add AVCodecContext.hwaccel_flags field. This will control some hwaccels at + a later point. + +2017-03-21 - fc9f14c7de - lavf 57.67.100 / 57.08.0 - avio.h + Add AVIO_SEEKABLE_TIME flag. + +2017-03-21 - d682ae70b4 - lavf 57.66.105, lavc 57.83.101 - avformat.h, avcodec.h + Deprecate AVFMT_FLAG_KEEP_SIDE_DATA. It will be ignored after the next major + bump, and libavformat will behave as if it were always set. + Deprecate av_packet_merge_side_data() and av_packet_split_side_data(). + +2016-03-20 - 8200b16a9c - lavu 55.50.100 / 55.21.0 - imgutils.h + Add av_image_copy_uc_from(), a version of av_image_copy() for copying + from GPU mapped memory. + +2017-03-20 - 9c2436e - lavu 55.49.100 - pixdesc.h + Add AV_PIX_FMT_FLAG_BAYER pixel format flag. + +2017-03-18 - 3796fb2692 - lavfi 6.77.100 - avfilter.h + Deprecate AVFilterGraph.resample_lavr_opts + It's never been used by avfilter nor passed to anything. + +2017-02-10 - 1b7ffddb3a - lavu 55.48.100 / 55.33.0 - spherical.h + Add AV_SPHERICAL_EQUIRECTANGULAR_TILE, av_spherical_tile_bounds(), + and projection-specific properties (bound_left, bound_top, bound_right, + bound_bottom, padding) to AVSphericalMapping. + +2017-03-02 - ade7c1a232 - lavc 57.81.104 - videotoolbox.h + AVVideotoolboxContext.cv_pix_fmt_type can now be set to 0 to output the + native decoder format. (The default value is not changed.) + +2017-03-02 - 554bc4eea8 - lavu 55.47.101, lavc 57.81.102, lavf 57.66.103 + Remove requirement to use AVOption or accessors to access certain fields + in AVFrame, AVCodecContext, and AVFormatContext that were previously + documented as "no direct access" allowed. + +2017-02-13 - c1a5fca06f - lavc 57.80.100 - avcodec.h + Add AVCodecContext.hw_device_ctx. + +2017-02-11 - e3af49b14b - lavu 55.47.100 - frame.h + Add AVFrame.opaque_ref. + +2017-01-31 - 2eab48177d - lavu 55.46.100 / 55.20.0 - cpu.h + Add AV_CPU_FLAG_SSSE3SLOW. + +2017-01-24 - c4618f842a - lavu 55.45.100 - channel_layout.h + Add av_get_extended_channel_layout() + +2017-01-22 - 76c5a69e26 - lavu 55.44.100 - lfg.h + Add av_lfg_init_from_data(). + +2017-01-17 - 2a4a8653b6 - lavc 57.74.100 - vaapi.h + Deprecate struct vaapi_context and the vaapi.h installed header. + Callers should set AVCodecContext.hw_frames_ctx instead. + +2017-01-12 - dbe9dbed31 - lavfi 6.69.100 - buffersink.h + Add av_buffersink_get_*() functions. + +2017-01-06 - 9488032e10 - lavf 57.62.100 - avio.h + Add avio_get_dyn_buf() + +2016-12-10 - f542b152aa - lavu 55.43.100 - imgutils.h + Add av_image_check_size2() + +2016-12-07 - e7a6f8c972 - lavc 57.67.100 / 57.29.0 - avcodec.h + Add AV_PKT_DATA_SPHERICAL packet side data to export AVSphericalMapping + information from containers. + +2016-12-07 - 8f58ecc344 - lavu 55.42.100 / 55.30.0 - spherical.h + Add AV_FRAME_DATA_SPHERICAL value, av_spherical_alloc() API and + AVSphericalMapping type to export and describe spherical video properties. + +2016-11-18 - 2ab50647ff - lavf 57.58.100 - avformat.h + Add av_stream_add_side_data(). + +2016-11-13 - 775a8477b7 - lavu 55.39.100 - hwcontext_vaapi.h + Add AV_VAAPI_DRIVER_QUIRK_ATTRIB_MEMTYPE. + +2016-11-13 - a8d51bb424 - lavu 55.38.100 - hwcontext_vaapi.h + Add driver quirks field to VAAPI-specific hwdevice and enum with + members AV_VAAPI_DRIVER_QUIRK_* to represent its values. + +2016-11-10 - 638b216d4f - lavu 55.36.100 - pixfmt.h + Add AV_PIX_FMT_GRAY12(LE/BE). + +-------- 8< --------- FFmpeg 3.2 was cut here -------- 8< --------- + +2016-10-24 - 73ead47 - lavf 57.55.100 - avformat.h + Add AV_DISPOSITION_TIMED_THUMBNAILS + +2016-10-24 - a246fef - lavf 57.54.100 - avformat.h + Add avformat_init_output() and AVSTREAM_INIT_IN_ macros + +2016-10-22 - f5495c9 - lavu 55.33.100 - avassert.h + Add av_assert0_fpu() / av_assert2_fpu() + +2016-10-07 - 3f9137c / 32c8359 - lavc 57.61.100 / 57.24.0 - avcodec.h + Decoders now export the frame timestamp as AVFrame.pts. It was + previously exported as AVFrame.pkt_pts, which is now deprecated. + + Note: When decoding, AVFrame.pts uses the stream/packet timebase, + and not the codec timebase. + +2016-09-28 - eba0414 - lavu 55.32.100 / 55.16.0 - hwcontext.h hwcontext_qsv.h + Add AV_HWDEVICE_TYPE_QSV and a new installed header with QSV-specific + hwcontext definitions. + +2016-09-26 - 32c25f0 - lavc 57.59.100 / 57.23.0 - avcodec.h + AVCodecContext.hw_frames_ctx now may be used by decoders. + +2016-09-27 - f0b6f72 - lavf 57.51.100 - avformat.h + Add av_stream_get_codec_timebase() + +2016-09-27 - 23c0779 - lswr 2.2.100 - swresample.h + Add swr_build_matrix(). + +2016-09-23 - 30d3e36 - lavc 57.58.100 - avcodec.h + Add AV_CODEC_CAP_AVOID_PROBING codec capability flag. + +2016-09-14 - ae1dd0c - lavf 57.49.100 - avformat.h + Add avformat_transfer_internal_stream_timing_info helper to help with stream + copy. + +2016-08-29 - 4493390 - lavfi 6.58.100 - avfilter.h + Add AVFilterContext.nb_threads. + +2016-08-15 - c3c4c72 - lavc 57.53.100 - avcodec.h + Add trailing_padding to AVCodecContext to match the corresponding + field in AVCodecParameters. + +2016-08-15 - b746ed7 - lavc 57.52.100 - avcodec.h + Add a new API for chained BSF filters and passthrough (null) BSF -- + av_bsf_list_alloc(), av_bsf_list_free(), av_bsf_list_append(), + av_bsf_list_append2(), av_bsf_list_finalize(), av_bsf_list_parse_str() + and av_bsf_get_null_filter(). + +2016-08-04 - 82a33c8 - lavf 57.46.100 - avformat.h + Add av_get_frame_filename2() + +2016-07-09 - 775389f / 90f469a - lavc 57.50.100 / 57.20.0 - avcodec.h + Add FF_PROFILE_H264_MULTIVIEW_HIGH and FF_PROFILE_H264_STEREO_HIGH. + +2016-06-30 - c1c7e0ab - lavf 57.41.100 - avformat.h + Moved codecpar field from AVStream to the end of the struct, so that + the following private fields are in the same location as in FFmpeg 3.0 (lavf 57.25.100). + +2016-06-30 - 042fb69d - lavu 55.28.100 - frame.h + Moved hw_frames_ctx field from AVFrame to the end of the struct, so that + the following private fields are in the same location as in FFmpeg 3.0 (lavu 55.17.103). + +2016-06-29 - 1a751455 - lavfi 6.47.100 - avfilter.h + Fix accidental ABI breakage in AVFilterContext. + ABI was broken in 8688d3a, lavfi 6.42.100 and released as ffmpeg 3.1. + + Because of this, ffmpeg and ffplay built against lavfi>=6.42.100 will not be + compatible with lavfi>=6.47.100. Potentially also affects other users of + libavfilter if they are using one of the affected fields. + +-------- 8< --------- FFmpeg 3.1 was cut here -------- 8< --------- + +2016-06-26 - 481f320 / 1c9e861 - lavu 55.27.100 / 55.13.0 - hwcontext.h + Add av_hwdevice_ctx_create(). + +2016-06-26 - b95534b / e47b8bb - lavc 57.48.101 / 57.19.1 - avcodec.h + Adjust values for JPEG 2000 profiles. + +2016-06-23 - 5d75e46 / db7968b - lavf 57.40.100 / 57.7.0 - avio.h + Add AVIODataMarkerType, write_data_type, ignore_boundary_point and + avio_write_marker. + +2016-06-23 - abb3cc4 / 0c4468d - lavu 55.26.100 / 55.12.0 - opt.h + Add av_stereo3d_type_name() and av_stereo3d_from_name(). + +2016-06-22 - 3689efe / c46db38 - lavu 55.25.100 / 55.11.0 - hwcontext_dxva2.h + Add new installed header with DXVA2-specific hwcontext definitions. + +2016-04-27 - fb91871 - lavu 55.23.100 - log.h + Add a new function av_log_format_line2() which returns number of bytes + written to the target buffer. + +2016-04-21 - 7fc329e - lavc 57.37.100 - avcodec.h + Add a new audio/video encoding and decoding API with decoupled input + and output -- avcodec_send_packet(), avcodec_receive_frame(), + avcodec_send_frame() and avcodec_receive_packet(). + +2016-04-17 - af9cac1 / 33d1898 - lavc 57.35.100 / 57.15.0 - avcodec.h + Add a new bitstream filtering API working with AVPackets. + Deprecate the old bitstream filtering API. + +2016-04-14 - 8688d3a / 07a844f - lavfi 6.42.100 / 6.3.0 - avfilter.h + Add AVFilterContext.hw_device_ctx. + +2016-04-14 - 28abb21 / 551c677 - lavu 55.22.100 / 55.9.0 - hwcontext_vaapi.h + Add new installed header with VAAPI-specific hwcontext definitions. + +2016-04-14 - afccfaf / b1f01e8 - lavu 55.21.100 / 55.7.0 - hwcontext.h + Add AVHWFramesConstraints and associated API. + +2016-04-11 - 6f69f7a / 9200514 - lavf 57.33.100 / 57.5.0 - avformat.h + Add AVStream.codecpar, deprecate AVStream.codec. + +2016-04-02 - e8a9b64 - lavu 55.20.100 - base64.h + Add AV_BASE64_DECODE_SIZE(x) macro. + +2016-xx-xx - lavc 57.33.100 / 57.14.0 - avcodec.h + f9b1cf1 / 998e1b8 - Add AVCodecParameters and its related API. + e6053b3 / a806834 - Add av_get_audio_frame_duration2(). + +2016-03-11 - 6d8ab35 - lavf/lavc 57.28.101 + Add requirement to bitstream filtering API that returned packets with + size == 0 and side_data_elems == 0 are to be skipped by the caller. + +2016-03-04 - 9362973 - lavf 57.28.100 + Add protocol blacklisting API + +2016-02-28 - 4dd4d53 - lavc 57.27.101 + Validate AVFrame returned by get_buffer2 to have required + planes not NULL and unused planes set to NULL as crashes + and buffer overflow are possible with certain streams if + that is not the case. + +2016-02-26 - 30e7685 - lavc 57.27.100 - avcodec.h + "flags2" decoding option now allows the flag "ass_ro_flush_noop" preventing + the reset of the ASS ReadOrder field on flush. This affects the content of + AVSubtitles.rects[N]->ass when "sub_text_format" is set to "ass" (see + previous entry). + +2016-02-26 - 2941282 - lavc 57.26.100 - avcodec.h + Add a "sub_text_format" subtitles decoding option allowing the values "ass" + (recommended) and "ass_with_timings" (not recommended, deprecated, default). + The default value for this option will change to "ass" at the next major + libavcodec version bump. + + The current default is "ass_with_timings" for compatibility. This means that + all subtitles text decoders currently still output ASS with timings printed + as strings in the AVSubtitles.rects[N]->ass fields. + + Setting "sub_text_format" to "ass" allows a better timing accuracy (ASS + timing is limited to a 1/100 time base, so this is relevant for any subtitles + format needing a bigger one), ease timing adjustments, and prevents the need + of removing the timing from the decoded string yourself. This form is also + known as "the Matroska form". The timing information (start time, duration) + can be found in the AVSubtitles fields. + +2016-02-24 - 7e49cdd / 7b3214d0 - lavc 57.25.100 / 57.13.0 - avcodec.h + Add AVCodecContext.hw_frames_ctx. + +2016-02-24 - 1042402 / b3dd30d - lavfi 6.36.100 / 6.2.0 - avfilter.h + avfilter.h - Add AVFilterLink.hw_frames_ctx. + buffersrc.h - Add AVBufferSrcParameters and functions for handling it. + +2016-02-23 - 14f7a3d - lavc 57.25.100 + Add AV_PKT_DATA_MPEGTS_STREAM_ID for exporting the MPEGTS stream ID. + +2016-02-18 - 08acab8 - lavu 55.18.100 - audio_fifo.h + Add av_audio_fifo_peek_at(). + +2016-xx-xx - lavu 55.18.100 / 55.6.0 + 26abd51 / 721a4ef buffer.h - Add av_buffer_pool_init2(). + 1a70878 / 89923e4 hwcontext.h - Add a new installed header hwcontext.h with a new API + for handling hwaccel frames. + 6992276 / ad884d1 hwcontext_cuda.h - Add a new installed header hwcontext_cuda.h with + CUDA-specific hwcontext definitions. + d779d8d / a001ce3 hwcontext_vdpau.h - Add a new installed header hwcontext_vdpau.h with + VDPAU-specific hwcontext definitions. + 63c3e35 / 7bc780c pixfmt.h - Add AV_PIX_FMT_CUDA. + +-------- 8< --------- FFmpeg 3.0 was cut here -------- 8< --------- + +2016-02-10 - bc9a596 / 9f61abc - lavf 57.25.100 / 57.3.0 - avformat.h + Add AVFormatContext.opaque, io_open and io_close, allowing custom IO + +2016-02-01 - 1dba837 - lavf 57.24.100 - avformat.h, avio.h + Add protocol_whitelist to AVFormatContext, AVIOContext + +2016-01-31 - 66e9d2f - lavu 55.17.100 - frame.h + Add AV_FRAME_DATA_GOP_TIMECODE for exporting MPEG1/2 GOP timecodes. + +2016-01-01 - 5e8b053 / 2c68113 - lavc 57.21.100 / 57.12.0 - avcodec.h + Add AVCodecDescriptor.profiles and avcodec_profile_name(). + +2015-12-28 - 1f9139b - lavf 57.21.100 - avformat.h + Add automatic bitstream filtering; add av_apply_bitstream_filters() + +2015-12-22 - 39a09e9 - lavfi 6.21.101 - avfilter.h + Deprecate avfilter_link_set_closed(). + Applications are not supposed to mess with links, + they should close the sinks. + +2015-12-17 - lavc 57.18.100 / 57.11.0 - avcodec.h dirac.h + xxxxxxx - Add av_packet_add_side_data(). + xxxxxxx - Add AVCodecContext.coded_side_data. + xxxxxxx - Add AVCPBProperties API. + xxxxxxx - Add a new public header dirac.h containing + av_dirac_parse_sequence_header() + +2015-12-11 - 676a93f - lavf 57.20.100 - avformat.h + Add av_program_add_stream_index() + +2015-11-29 - 93fb4a4 - lavc 57.16.101 - avcodec.h + Deprecate rtp_callback without replacement, i.e. it won't be possible to + get image slices before the full frame is encoded any more. The libavformat + rtpenc muxer can still be used for RFC-2190 packetization. + +2015-11-22 - fe20e34 - lavc 57.16.100 - avcodec.h + Add AV_PKT_DATA_FALLBACK_TRACK for making fallback associations between + streams. + +2015-11-22 - ad317c9 - lavf 57.19.100 - avformat.h + Add av_stream_new_side_data(). + +2015-11-22 - e12f403 - lavu 55.8.100 - xtea.h + Add av_xtea_le_init and av_xtea_le_crypt + +2015-11-18 - lavu 55.7.100 - mem.h + Add av_fast_mallocz() + +2015-10-29 - lavc 57.12.100 / 57.8.0 - avcodec.h + xxxxxx - Deprecate av_free_packet(). Use av_packet_unref() as replacement, + it resets the packet in a more consistent way. + xxxxxx - Deprecate av_dup_packet(), it is a no-op for most cases. + Use av_packet_ref() to make a non-refcounted AVPacket refcounted. + xxxxxx - Add av_packet_alloc(), av_packet_clone(), av_packet_free(). + They match the AVFrame functions with the same name. + +2015-10-27 - 1e477a9 - lavu 55.5.100 - cpu.h + Add AV_CPU_FLAG_AESNI. + +2015-10-22 - ee573b4 / a17a766 - lavc 57.9.100 / 57.5.0 - avcodec.h + Add data and linesize array to AVSubtitleRect, to be used instead of + the ones from the embedded AVPicture. + +2015-10-22 - 866a417 / dc923bc - lavc 57.8.100 / 57.0.0 - qsv.h + Add an API for allocating opaque surfaces. + +2015-10-15 - 2c2d162 - lavf 57.4.100 + Remove the latm demuxer that was a duplicate of the loas demuxer. + +2015-10-14 - b994788 / 11c5f43 - lavu 55.4.100 / 55.2.0 - dict.h + Change return type of av_dict_copy() from void to int, so that a proper + error code can be reported. + +2015-09-29 - b01891a / 948f3c1 - lavc 57.3.100 / 57.2.0 - avcodec.h + Change type of AVPacket.duration from int to int64_t. + +2015-09-17 - 7c46f24 / e3d4784 - lavc 57.3.100 / 57.2.0 - d3d11va.h + Add av_d3d11va_alloc_context(). This function must from now on be used for + allocating AVD3D11VAContext. + +2015-09-15 - lavf 57.2.100 - avformat.h + probesize and max_analyze_duration switched to 64bit, both + are only accessible through AVOptions + +2015-09-15 - lavf 57.1.100 - avformat.h + bit_rate was changed to 64bit, make sure you update any + printf() or other type sensitive code + +2015-09-15 - lavc 57.2.100 - avcodec.h + bit_rate/rc_max_rate/rc_min_rate were changed to 64bit, make sure you update + any printf() or other type sensitive code + +2015-09-07 - lavu 55.0.100 / 55.0.0 + c734b34 / b8b5d82 - Change type of AVPixFmtDescriptor.flags from uint8_t to uint64_t. + f53569a / 6b3ef7f - Change type of AVComponentDescriptor fields from uint16_t to int + and drop bit packing. + 151aa2e / 2268db2 - Add step, offset, and depth to AVComponentDescriptor to replace + the deprecated step_minus1, offset_plus1, and depth_minus1. + -------- 8< --------- FFmpeg 2.8 was cut here -------- 8< --------- 2015-08-27 - 1dd854e1 - lavc 56.58.100 - vaapi.h @@ -983,7 +1377,7 @@ * base -- is now stored in AVBufferRef * reference, type, buffer_hints -- are unnecessary in the new API * hwaccel_picture_private, owner, thread_opaque -- should not - have been acessed from outside of lavc + have been accessed from outside of lavc * qscale_table, qstride, qscale_type, mbskip_table, motion_val, mb_type, dct_coeff, ref_index -- mpegvideo-specific tables, which are not exported anymore. @@ -1020,15 +1414,14 @@ Add avresample_set_channel_mapping() for input channel reordering, duplication, and silencing. -2012-12-29 - 2ce43b3 / d8fd06c - lavu 52.13.100 / 52.3.0 - avstring.h - Add av_basename() and av_dirname(). +2012-12-29 - lavu 52.13.100 / 52.3.0 - avstring.h + 2ce43b3 / d8fd06c - Add av_basename() and av_dirname(). + e13d5e9 / c1a02e8 - Add av_pix_fmt_get_chroma_sub_sample and deprecate + avcodec_get_chroma_sub_sample. 2012-11-11 - 03b0787 / 5980f5d - lavu 52.6.100 / 52.2.0 - audioconvert.h Rename audioconvert.h to channel_layout.h. audioconvert.h is now deprecated. -2012-11-05 - 7d26be6 / dfde8a3 - lavu 52.5.100 / 52.1.0 - intmath.h - Add av_ctz() for trailing zero bit count - 2012-10-21 - e3a91c5 / a893655 - lavu 51.77.100 / 51.45.0 - error.h Add AVERROR_EXPERIMENTAL diff -Nru ffmpeg-2.8.6/doc/bitstream_filters.texi ffmpeg-3.3.3/doc/bitstream_filters.texi --- ffmpeg-2.8.6/doc/bitstream_filters.texi 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/doc/bitstream_filters.texi 2017-07-29 17:49:29.000000000 +0000 @@ -18,7 +18,7 @@ name after a '='. @example -ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1/opt2=str2][,filter2] OUTPUT +ffmpeg -i INPUT -c:v copy -bsf:v filter1[=opt1=str1:opt2=str2][,filter2] OUTPUT @end example Below is a description of the currently available bitstream filters, @@ -26,19 +26,26 @@ @section aac_adtstoasc -Convert MPEG-2/4 AAC ADTS to MPEG-4 Audio Specific Configuration -bitstream filter. +Convert MPEG-2/4 AAC ADTS to an MPEG-4 Audio Specific Configuration +bitstream. This filter creates an MPEG-4 AudioSpecificConfig from an MPEG-2/4 ADTS header and removes the ADTS header. -This is required for example when copying an AAC stream from a raw -ADTS AAC container to a FLV or a MOV/MP4 file. +This filter is required for example when copying an AAC stream from a +raw ADTS AAC or an MPEG-TS container to MP4A-LATM, to an FLV file, or +to MOV/MP4 files and related formats such as 3GP or M4A. Please note +that it is auto-inserted for MP4A-LATM and MOV/MP4 and related formats. @section chomp Remove zero padding at the end of a packet. +@section dca_core + +Extract the core from a DCA/DTS stream, dropping extensions such as +DTS-HD. + @section dump_extra Add extradata to the beginning of the filtered packets. @@ -67,6 +74,24 @@ ffmpeg -i INPUT -map 0 -flags:v +global_header -c:v libx264 -bsf:v dump_extra out.ts @end example +@section extract_extradata + +Extract the in-band extradata. + +Certain codecs allow the long-term headers (e.g. MPEG-2 sequence headers, +or H.264/HEVC (VPS/)SPS/PPS) to be transmitted either "in-band" (i.e. as a part +of the bitstream containing the coded frames) or "out of band" (e.g. on the +container level). This latter form is called "extradata" in FFmpeg terminology. + +This bitstream filter detects the in-band headers and makes them available as +extradata. + +@table @option +@item remove +When this option is enabled, the long-term headers are removed from the +bitstream after extraction. +@end table + @section h264_mp4toannexb Convert an H.264 bitstream from length prefixed mode to start code @@ -74,7 +99,7 @@ specification). This is required by some streaming formats, typically the MPEG-2 -transport stream format ("mpegts"). +transport stream format (muxer @code{mpegts}). For example to remux an MP4 file containing an H.264 stream to mpegts format with @command{ffmpeg}, you can use the command: @@ -83,6 +108,29 @@ ffmpeg -i INPUT.mp4 -codec copy -bsf:v h264_mp4toannexb OUTPUT.ts @end example +Please note that this filter is auto-inserted for MPEG-TS (muxer +@code{mpegts}) and raw H.264 (muxer @code{h264}) output formats. + +@section hevc_mp4toannexb + +Convert an HEVC/H.265 bitstream from length prefixed mode to start code +prefixed mode (as defined in the Annex B of the ITU-T H.265 +specification). + +This is required by some streaming formats, typically the MPEG-2 +transport stream format (muxer @code{mpegts}). + +For example to remux an MP4 file containing an HEVC stream to mpegts +format with @command{ffmpeg}, you can use the command: + +@example +ffmpeg -i INPUT.mp4 -codec copy -bsf:v hevc_mp4toannexb OUTPUT.ts +@end example + +Please note that this filter is auto-inserted for MPEG-TS (muxer +@code{mpegts}) and raw HEVC/H.265 (muxer @code{h265} or +@code{hevc}) output formats. + @section imxdump Modifies the bitstream to fit in MOV and to be usable by the Final Cut @@ -133,11 +181,22 @@ ffmpeg -i frame_%d.jpg -c:v copy rotated.avi @end example -@section mjpega_dump_header +@section mjpegadump + +Add an MJPEG A header to the bitstream, to enable decoding by +Quicktime. -@section movsub +@anchor{mov2textsub} +@section mov2textsub -@section mp3_header_decompress +Extract a representable text file from MOV subtitles, stripping the +metadata header from each subtitle packet. + +See also the @ref{text2movsub} filter. + +@section mp3decomp + +Decompress non-standard compressed MP3 audio headers. @section mpeg4_unpack_bframes @@ -177,4 +236,38 @@ @section remove_extra +Remove extradata from packets. + +It accepts the following parameter: +@table @option +@item freq +Set which frame types to remove extradata from. + +@table @samp +@item k +Remove extradata from non-keyframes only. + +@item keyframe +Remove extradata from keyframes only. + +@item e, all +Remove extradata from all frames. + +@end table +@end table + +@anchor{text2movsub} +@section text2movsub + +Convert text subtitles to MOV subtitles (as used by the @code{mov_text} +codec) with metadata headers. + +See also the @ref{mov2textsub} filter. + +@section vp9_superframe + +Merge VP9 invisible (alt-ref) frames back into VP9 superframes. This +fixes merging of split/segmented VP9 streams where the alt-ref frame +was split from its visible counterpart. + @c man end BITSTREAM FILTERS diff -Nru ffmpeg-2.8.6/doc/build_system.txt ffmpeg-3.3.3/doc/build_system.txt --- ffmpeg-2.8.6/doc/build_system.txt 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/doc/build_system.txt 2017-07-29 17:49:29.000000000 +0000 @@ -9,7 +9,7 @@ DBG Preprocess x86 external assembler files to a .dbg.asm file in the object - directory, which then gets compiled. Helps developping those assembler + directory, which then gets compiled. Helps in developing those assembler files. DESTDIR @@ -25,10 +25,10 @@ Default target, builds all the libraries and the executables. fate - Run the fate test suite, note you must have installed it + Run the fate test suite, note that you must have installed it. fate-list - Will list all fate/regression test targets + List all fate/regression test targets. install Install headers, libraries and programs. @@ -39,26 +39,23 @@ libavformat/output-example Build the libavformat basic example. -libavcodec/api-example - Build the libavcodec basic example. - libswscale/swscale-test - Build the swscale self-test (useful also as example). + Build the swscale self-test (useful also as an example). config - Reconfigure the project with current configuration. + Reconfigure the project with the current configuration. Useful standard make commands: make -t - Touch all files that otherwise would be build, this is useful to reduce - unneeded rebuilding when changing headers, but note you must force rebuilds + Touch all files that otherwise would be built, this is useful to reduce + unneeded rebuilding when changing headers, but note that you must force rebuilds of files that actually need it by hand then. make -j - rebuild with multiple jobs at the same time. Faster on multi processor systems + Rebuild with multiple jobs at the same time. Faster on multi processor systems. make -k - continue build in case of errors, this is useful for the regression tests - sometimes but note it will still not run all reg tests. + Continue build in case of errors, this is useful for the regression tests + sometimes but note that it will still not run all reg tests. diff -Nru ffmpeg-2.8.6/doc/codecs.texi ffmpeg-3.3.3/doc/codecs.texi --- ffmpeg-2.8.6/doc/codecs.texi 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/doc/codecs.texi 2017-07-29 17:49:29.000000000 +0000 @@ -129,7 +129,7 @@ identically 1. @item g @var{integer} (@emph{encoding,video}) -Set the group of picture size. Default value is 12. +Set the group of picture (GOP) size. Default value is 12. @item ar @var{integer} (@emph{decoding/encoding,audio}) Set audio sampling rate (in Hz). @@ -138,7 +138,8 @@ Set number of audio channels. @item cutoff @var{integer} (@emph{encoding,audio}) -Set cutoff bandwidth. +Set cutoff bandwidth. (Supported only by selected encoders, see +their respective documentation sections.) @item frame_size @var{integer} (@emph{encoding,audio}) Set audio frame size. @@ -257,7 +258,7 @@ Possible values: @table @samp @item very -strictly conform to a older more strict version of the spec or reference software +strictly conform to an older more strict version of the spec or reference software @item strict strictly conform to all the things in the spec no matter what consequences @item normal @@ -456,6 +457,9 @@ @item aspect @var{rational number} (@emph{encoding,video}) Set sample aspect ratio. +@item sar @var{rational number} (@emph{encoding,video}) +Set sample aspect ratio. Alias to @var{aspect}. + @item debug @var{flags} (@emph{decoding/encoding,audio,video,subtitles}) Print specific debug info. @@ -817,13 +821,17 @@ Deprecated, use mpegvideo private options instead. @item threads @var{integer} (@emph{decoding/encoding,video}) +Set the number of threads to be used, in case the selected codec +implementation supports multi-threading. Possible values: @table @samp -@item auto -detect a good number of threads +@item auto, 0 +automatically select the number of threads to set @end table +Default value is @samp{auto}. + @item me_threshold @var{integer} (@emph{encoding,video}) Set motion estimation threshold. @@ -1042,15 +1050,136 @@ @item rc_max_vbv_use @var{float} (@emph{encoding,video}) @item rc_min_vbv_use @var{float} (@emph{encoding,video}) @item ticks_per_frame @var{integer} (@emph{decoding/encoding,audio,video}) + @item color_primaries @var{integer} (@emph{decoding/encoding,video}) +Possible values: +@table @samp +@item bt709 +BT.709 +@item bt470m +BT.470 M +@item bt470bg +BT.470 BG +@item smpte170m +SMPTE 170 M +@item smpte240m +SMPTE 240 M +@item film +Film +@item bt2020 +BT.2020 +@item smpte428 +@item smpte428_1 +SMPTE ST 428-1 +@item smpte431 +SMPTE 431-2 +@item smpte432 +SMPTE 432-1 +@item jedec-p22 +JEDEC P22 +@end table + @item color_trc @var{integer} (@emph{decoding/encoding,video}) +Possible values: +@table @samp +@item bt709 +BT.709 +@item gamma22 +BT.470 M +@item gamma28 +BT.470 BG +@item smpte170m +SMPTE 170 M +@item smpte240m +SMPTE 240 M +@item linear +Linear +@item log +@item log100 +Log +@item log_sqrt +@item log316 +Log square root +@item iec61966_2_4 +@item iec61966-2-4 +IEC 61966-2-4 +@item bt1361 +@item bt1361e +BT.1361 +@item iec61966_2_1 +@item iec61966-2-1 +IEC 61966-2-1 +@item bt2020_10 +@item bt2020_10bit +BT.2020 - 10 bit +@item bt2020_12 +@item bt2020_12bit +BT.2020 - 12 bit +@item smpte2084 +SMPTE ST 2084 +@item smpte428 +@item smpte428_1 +SMPTE ST 428-1 +@item arib-std-b67 +ARIB STD-B67 +@end table + @item colorspace @var{integer} (@emph{decoding/encoding,video}) +Possible values: +@table @samp +@item rgb +RGB +@item bt709 +BT.709 +@item fcc +FCC +@item bt470bg +BT.470 BG +@item smpte170m +SMPTE 170 M +@item smpte240m +SMPTE 240 M +@item ycocg +YCOCG +@item bt2020nc +@item bt2020_ncl +BT.2020 NCL +@item bt2020c +@item bt2020_cl +BT.2020 CL +@item smpte2085 +SMPTE 2085 +@end table @item color_range @var{integer} (@emph{decoding/encoding,video}) If used as input parameter, it serves as a hint to the decoder, which color_range the input has. +Possible values: +@table @samp +@item tv +@item mpeg +MPEG (219*2^(n-8)) +@item pc +@item jpeg +JPEG (2^n-1) +@end table @item chroma_sample_location @var{integer} (@emph{decoding/encoding,video}) +Possible values: +@table @samp +@item left + +@item center + +@item topleft + +@item top + +@item bottomleft + +@item bottom + +@end table @item log_level_offset @var{integer} Set the log level offset. @@ -1135,7 +1264,7 @@ instead of alpha. Default is 0. @item codec_whitelist @var{list} (@emph{input}) -"," separated List of allowed decoders. By default all are allowed. +"," separated list of allowed decoders. By default all are allowed. @item dump_separator @var{string} (@emph{input}) Separator used to separate the fields printed on the command line about the @@ -1146,6 +1275,10 @@ " -i ~/videos/matrixbench_mpeg2.mpg @end example +@item max_pixels @var{integer} (@emph{decoding/encoding,video}) +Maximum number of pixels per image. This value can be used to avoid out of +memory failures due to large images. + @end table @c man end CODEC OPTIONS diff -Nru ffmpeg-2.8.6/doc/decoders.texi ffmpeg-3.3.3/doc/decoders.texi --- ffmpeg-2.8.6/doc/decoders.texi 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/doc/decoders.texi 2017-07-29 17:49:29.000000000 +0000 @@ -279,10 +279,16 @@ Default value is 1. @item txt_duration Sets the display duration of the decoded teletext pages or subtitles in -miliseconds. Default value is 30000 which is 30 seconds. +milliseconds. Default value is 30000 which is 30 seconds. @item txt_transparent Force transparent background of the generated teletext bitmaps. Default value -is 0 which means an opaque (black) background. +is 0 which means an opaque background. +@item txt_opacity +Sets the opacity (0-255) of the teletext background. If +@option{txt_transparent} is not set, it only affects characters between a start +box and an end box, typically subtitles. Default value is 0 if +@option{txt_transparent} is set, 255 otherwise. + @end table @c man end SUBTILES DECODERS diff -Nru ffmpeg-2.8.6/doc/demuxers.texi ffmpeg-3.3.3/doc/demuxers.texi --- ffmpeg-2.8.6/doc/demuxers.texi 2016-02-01 00:52:41.000000000 +0000 +++ ffmpeg-3.3.3/doc/demuxers.texi 2017-07-29 17:49:29.000000000 +0000 @@ -13,8 +13,9 @@ the option @code{--enable-demuxer=@var{DEMUXER}}, or disable it with the option @code{--disable-demuxer=@var{DEMUXER}}. -The option @code{-formats} of the ff* tools will display the list of -enabled demuxers. +The option @code{-demuxers} of the ff* tools will display the list of +enabled demuxers. Use @code{-formats} to view a combined list of +enabled demuxers and muxers. The description of some of the currently available demuxers follows. @@ -72,7 +73,7 @@ Virtual concatenation script demuxer. This demuxer reads a list of files and other directives from a text file and -demuxes them one after the other, as if all their packet had been muxed +demuxes them one after the other, as if all their packets had been muxed together. The timestamps in the files are adjusted so that the first file starts at 0 @@ -104,10 +105,10 @@ @item @code{ffconcat version 1.0} Identify the script type and version. It also sets the @option{safe} option -to 1 if it was to its default -1. +to 1 if it was -1. To make FFmpeg recognize the format automatically, this directive must -appears exactly as is (no extra space or byte-order-mark) on the very first +appear exactly as is (no extra space or byte-order-mark) on the very first line of the script. @item @code{duration @var{dur}} @@ -192,7 +193,9 @@ If set to 0, any file name is accepted. -The default is -1, it is equivalent to 1 if the format was automatically +The default is 1. + +-1 is equivalent to 1 if the format was automatically probed and 0 otherwise. @item auto_convert @@ -204,43 +207,59 @@ filter to H.264 streams in MP4 format. This is necessary in particular if there are resolution changes. -@end table - -@section flv +@item segment_time_metadata +If set to 1, every packet will contain the @var{lavf.concat.start_time} and the +@var{lavf.concat.duration} packet metadata values which are the start_time and +the duration of the respective file segments in the concatenated output +expressed in microseconds. The duration metadata is only set if it is known +based on the concat file. +The default is 0. -Adobe Flash Video Format demuxer. - -This demuxer is used to demux FLV files and RTMP network streams. - -@table @option -@item -flv_metadata @var{bool} -Allocate the streams according to the onMetaData array content. @end table -@section libgme +@subsection Examples -The Game Music Emu library is a collection of video game music file emulators. +@itemize +@item +Use absolute filenames and include some comments: +@example +# my first filename +file /mnt/share/file-1.wav +# my second filename including whitespace +file '/mnt/share/file 2.wav' +# my third filename including whitespace plus single quote +file '/mnt/share/file 3'\''.wav' +@end example -See @url{http://code.google.com/p/game-music-emu/} for more information. +@item +Allow for input format auto-probing, use safe filenames and set the duration of +the first file: +@example +ffconcat version 1.0 -Some files have multiple tracks. The demuxer will pick the first track by -default. The @option{track_index} option can be used to select a different -track. Track indexes start at 0. The demuxer exports the number of tracks as -@var{tracks} meta data entry. +file file-1.wav +duration 20.0 -For very large files, the @option{max_size} option may have to be adjusted. +file subdir/file-2.wav +@end example +@end itemize -@section libquvi +@section flv, live_flv -Play media from Internet services using the quvi project. +Adobe Flash Video Format demuxer. -The demuxer accepts a @option{format} option to request a specific quality. It -is by default set to @var{best}. +This demuxer is used to demux FLV files and RTMP network streams. In case of live network streams, if you force format, you may use live_flv option instead of flv to survive timestamp discontinuities. -See @url{http://quvi.sourceforge.net/} for more information. +@example +ffmpeg -f flv -i myfile.flv ... +ffmpeg -f live_flv -i rtmp:///anything/key .... +@end example -FFmpeg needs to be built with @code{--enable-libquvi} for this demuxer to be -enabled. + +@table @option +@item -flv_metadata @var{bool} +Allocate the streams according to the onMetaData array content. +@end table @section gif @@ -416,9 +435,49 @@ @end example @end itemize -@section mov/mp4/3gp/Quicktme +@section libgme + +The Game Music Emu library is a collection of video game music file emulators. + +See @url{http://code.google.com/p/game-music-emu/} for more information. + +Some files have multiple tracks. The demuxer will pick the first track by +default. The @option{track_index} option can be used to select a different +track. Track indexes start at 0. The demuxer exports the number of tracks as +@var{tracks} meta data entry. + +For very large files, the @option{max_size} option may have to be adjusted. + +@section libopenmpt -Quicktime / MP4 demuxer. +libopenmpt based module demuxer + +See @url{https://lib.openmpt.org/libopenmpt/} for more information. + +Some files have multiple subsongs (tracks) this can be set with the @option{subsong} +option. + +It accepts the following options: + +@table @option +@item subsong +Set the subsong index. This can be either 'all', 'auto', or the index of the +subsong. Subsong indexes start at 0. The default is 'auto'. + +The default value is to let libopenmpt choose. + +@item layout +Set the channel layout. Valid values are 1, 2, and 4 channel layouts. +The default value is STEREO. + +@item sample_rate +Set the sample rate for libopenmpt to output. +Range is from 1000 to INT_MAX. The value default is 48000. +@end table + +@section mov/mp4/3gp/QuickTime + +QuickTime / MP4 demuxer. This demuxer accepts the following options: @table @option @@ -459,6 +518,21 @@ disabled). Default value is -1. @end table +@section mpjpeg + +MJPEG encapsulated in multi-part MIME demuxer. + +This demuxer allows reading of MJPEG, where each frame is represented as a part of +multipart/x-mixed-replace stream. +@table @option + +@item strict_mime_boundary +Default implementation applies a relaxed standard to multi-part MIME boundary detection, +to prevent regression with numerous existing endpoints not generating a proper MIME +MJPEG stream. Turning this option on by setting it to 1 will result in a stricter check +of the boundary value. +@end table + @section rawvideo Raw video demuxer. diff -Nru ffmpeg-2.8.6/doc/developer.texi ffmpeg-3.3.3/doc/developer.texi --- ffmpeg-2.8.6/doc/developer.texi 2016-02-01 00:52:15.000000000 +0000 +++ ffmpeg-3.3.3/doc/developer.texi 2017-07-29 17:49:29.000000000 +0000 @@ -28,14 +28,14 @@ For more detailed legal information about the use of FFmpeg in external programs read the @file{LICENSE} file in the source tree and -consult @url{http://ffmpeg.org/legal.html}. +consult @url{https://ffmpeg.org/legal.html}. @section Contributing -There are 3 ways by which code gets into ffmpeg. +There are 3 ways by which code gets into FFmpeg. @itemize @bullet -@item Submitting Patches to the main developer mailing list - see @ref{Submitting patches} for details. +@item Submitting patches to the main developer mailing list. + See @ref{Submitting patches} for details. @item Directly committing changes to the main tree. @item Committing changes to a git clone, for example on github.com or gitorious.org. And asking us to merge these changes. @@ -65,6 +65,9 @@ @item You should try to limit your code lines to 80 characters; however, do so if and only if this improves readability. + +@item +K&R coding style is used. @end itemize The presentation is one inspired by 'indent -i4 -kr -nut'. @@ -124,10 +127,15 @@ @samp{//} comments; @item -designated struct initializers (@samp{struct s x = @{ .i = 17 @};}) +designated struct initializers (@samp{struct s x = @{ .i = 17 @};}); @item -compound literals (@samp{x = (struct s) @{ 17, 23 @};}) +compound literals (@samp{x = (struct s) @{ 17, 23 @};}). + +@item +Implementation defined behavior for signed integers is assumed to match the +expected behavior for two's complement. Non representable values in integer +casts are binary truncated. Shift right of signed values uses sign extension. @end itemize These features are supported by all compilers we care about, so we will not @@ -156,7 +164,7 @@ All names should be composed with underscores (_), not CamelCase. For example, @samp{avfilter_get_video_buffer} is an acceptable function name and @samp{AVFilterGetVideo} is not. The exception from this are type names, like -for example structs and enums; they should always be in the CamelCase +for example structs and enums; they should always be in CamelCase. There are the following conventions for naming variables and functions: @@ -243,8 +251,8 @@ @section Development Policy -@enumerate -@item +@subsection Patches/Committing +@subheading Licenses for patches must be compatible with FFmpeg. Contributions should be licensed under the @uref{http://www.gnu.org/licenses/lgpl-2.1.html, LGPL 2.1}, including an "or any later version" clause, or, if you prefer @@ -257,15 +265,15 @@ If you add a new file, give it a proper license header. Do not copy and paste it from a random place, use an existing file as template. -@item -You must not commit code which breaks FFmpeg! (Meaning unfinished but -enabled code which breaks compilation or compiles but does not work or -breaks the regression tests) -You can commit unfinished stuff (for testing etc), but it must be disabled -(#ifdef etc) by default so it does not interfere with other developers' -work. +@subheading You must not commit code which breaks FFmpeg! +This means unfinished code which is enabled and breaks compilation, +or compiles but does not work/breaks the regression tests. Code which +is unfinished but disabled may be permitted under-circumstances, like +missing samples or an implementation with a small subset of features. +Always check the mailing list for any reviewers with issues and test +FATE before you push. -@item +@subheading Keep the main commit message short with an extended description below. The commit message should have a short first line in the form of a @samp{topic: short description} as a header, separated by a newline from the body consisting of an explanation of why the change is necessary. @@ -273,30 +281,24 @@ should include its bug ID. Referring to the issue on the bug tracker does not exempt you from writing an excerpt of the bug in the commit message. -@item -You do not have to over-test things. If it works for you, and you think it -should work for others, then commit. If your code has problems -(portability, triggers compiler bugs, unusual environment etc) they will be -reported and eventually fixed. - -@item -Do not commit unrelated changes together, split them into self-contained -pieces. Also do not forget that if part B depends on part A, but A does not -depend on B, then A can and should be committed first and separate from B. -Keeping changes well split into self-contained parts makes reviewing and -understanding them on the commit log mailing list easier. This also helps -in case of debugging later on. +@subheading Testing must be adequate but not excessive. +If it works for you, others, and passes FATE then it should be OK to commit +it, provided it fits the other committing criteria. You should not worry about +over-testing things. If your code has problems (portability, triggers +compiler bugs, unusual environment etc) they will be reported and eventually +fixed. + +@subheading Do not commit unrelated changes together. +They should be split them into self-contained pieces. Also do not forget +that if part B depends on part A, but A does not depend on B, then A can +and should be committed first and separate from B. Keeping changes well +split into self-contained parts makes reviewing and understanding them on +the commit log mailing list easier. This also helps in case of debugging +later on. Also if you have doubts about splitting or not splitting, do not hesitate to ask/discuss it on the developer mailing list. -@item -Do not change behavior of the programs (renaming options etc) or public -API or ABI without first discussing it on the ffmpeg-devel mailing list. -Do not remove functionality from the code. Just improve! - -Note: Redundant code can be removed. - -@item +@subheading Ask before you change the build system (configure, etc). Do not commit changes to the build system (Makefiles, configure script) which change behavior, defaults etc, without asking first. The same applies to compiler warning fixes, trivial looking fixes and to code @@ -305,7 +307,7 @@ list, and if the code maintainers say OK, you may commit. This does not apply to files you wrote and/or maintain. -@item +@subheading Cosmetic changes should be kept in separate patches. We refuse source indentation and other cosmetic changes if they are mixed with functional changes, such commits will be rejected and removed. Every developer has his own indentation style, you should not change it. Of course @@ -319,7 +321,7 @@ then either do NOT change the indentation of the inner part within (do not move it to the right)! or do so in a separate commit -@item +@subheading Commit messages should always be filled out properly. Always fill out the commit log message. Describe in a few lines what you changed and why. You can refer to mailing list postings if you fix a particular bug. Comments such as "fixed!" or "Changed it." are unacceptable. @@ -331,47 +333,31 @@ details describing what and why and giving references. @end example -@item +@subheading Credit the author of the patch. Make sure the author of the commit is set correctly. (see git commit --author) If you apply a patch, send an answer to ffmpeg-devel (or wherever you got the patch from) saying that you applied the patch. -@item +@subheading Complex patches should refer to discussion surrounding them. When applying patches that have been discussed (at length) on the mailing list, reference the thread in the log message. -@item +@subheading Always wait long enough before pushing changes Do NOT commit to code actively maintained by others without permission. -Send a patch to ffmpeg-devel instead. If no one answers within a reasonable -timeframe (12h for build failures and security fixes, 3 days small changes, +Send a patch to ffmpeg-devel. If no one answers within a reasonable +time-frame (12h for build failures and security fixes, 3 days small changes, 1 week for big patches) then commit your patch if you think it is OK. Also note, the maintainer can simply ask for more time to review! -@item -Subscribe to the ffmpeg-cvslog mailing list. The diffs of all commits -are sent there and reviewed by all the other developers. Bugs and possible -improvements or general questions regarding commits are discussed there. We -expect you to react if problems with your code are uncovered. - -@item -Update the documentation if you change behavior or add features. If you are -unsure how best to do this, send a patch to ffmpeg-devel, the documentation -maintainer(s) will review and commit your stuff. - -@item -Try to keep important discussions and requests (also) on the public -developer mailing list, so that all developers can benefit from them. - -@item -Never write to unallocated memory, never write over the end of arrays, -always check values read from some untrusted source before using them -as array index or other risky things. +@subsection Code +@subheading API/ABI changes should be discussed before they are made. +Do not change behavior of the programs (renaming options etc) or public +API or ABI without first discussing it on the ffmpeg-devel mailing list. +Do not remove widely used functionality or features (redundant code can be removed). -@item -Remember to check if you need to bump versions for the specific libav* -parts (libavutil, libavcodec, libavformat) you are changing. You need -to change the version integer. +@subheading Remember to check if you need to bump versions for libav*. +Depending on the change, you may need to change the version integer. Incrementing the first component means no backward compatibility to previous versions (e.g. removal of a function from the public API). Incrementing the second component means backward compatible change @@ -381,7 +367,7 @@ change (e.g. encoder bug fix that matters for the decoder). The third component always starts at 100 to distinguish FFmpeg from Libav. -@item +@subheading Warnings for correct code may be disabled if there is no other option. Compiler warnings indicate potential bugs or code with bad style. If a type of warning always points to correct and clean code, that warning should be disabled, not the code changed. @@ -390,16 +376,65 @@ be changed to not generate a warning unless that causes a slowdown or obfuscates the code. -@item +@subheading Check untrusted input properly. +Never write to unallocated memory, never write over the end of arrays, +always check values read from some untrusted source before using them +as array index or other risky things. + +@subsection Documentation/Other +@subheading Subscribe to the ffmpeg-cvslog mailing list. +It is important to do this as the diffs of all commits are sent there and +reviewed by all the other developers. Bugs and possible improvements or +general questions regarding commits are discussed there. We expect you to +react if problems with your code are uncovered. + +@subheading Keep the documentation up to date. +Update the documentation if you change behavior or add features. If you are +unsure how best to do this, send a patch to ffmpeg-devel, the documentation +maintainer(s) will review and commit your stuff. + +@subheading Important discussions should be accessible to all. +Try to keep important discussions and requests (also) on the public +developer mailing list, so that all developers can benefit from them. + +@subheading Check your entries in MAINTAINERS. Make sure that no parts of the codebase that you maintain are missing from the @file{MAINTAINERS} file. If something that you want to maintain is missing add it with your name after it. -If at some point you no longer want to maintain some code, then please help -finding a new maintainer and also don't forget updating the @file{MAINTAINERS} file. -@end enumerate +If at some point you no longer want to maintain some code, then please help in +finding a new maintainer and also don't forget to update the @file{MAINTAINERS} file. We think our rules are not too hard. If you have comments, contact us. +@section Code of conduct + +Be friendly and respectful towards others and third parties. +Treat others the way you yourself want to be treated. + +Be considerate. Not everyone shares the same viewpoint and priorities as you do. +Different opinions and interpretations help the project. +Looking at issues from a different perspective assists development. + +Do not assume malice for things that can be attributed to incompetence. Even if +it is malice, it's rarely good to start with that as initial assumption. + +Stay friendly even if someone acts contrarily. Everyone has a bad day +once in a while. +If you yourself have a bad day or are angry then try to take a break and reply +once you are calm and without anger if you have to. + +Try to help other team members and cooperate if you can. + +The goal of software development is to create technical excellence, not for any +individual to be better and "win" against the others. Large software projects +are only possible and successful through teamwork. + +If someone struggles do not put them down. Give them a helping hand +instead and point them in the right direction. + +Finally, keep in mind the immortal words of Bill and Ted, +"Be excellent to each other." + @anchor{Submitting patches} @section Submitting patches @@ -407,7 +442,7 @@ the rules regarding patch submission. When you submit your patch, please use @code{git format-patch} or -@code{git send-email}. We cannot read other diffs :-) +@code{git send-email}. We cannot read other diffs :-). Also please do not submit a patch which contains several unrelated changes. Split it into separate, self-contained pieces. This does not mean splitting @@ -430,11 +465,15 @@ do not attach several unrelated patches to the same mail. Patches should be posted to the -@uref{http://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel, ffmpeg-devel} +@uref{https://lists.ffmpeg.org/mailman/listinfo/ffmpeg-devel, ffmpeg-devel} mailing list. Use @code{git send-email} when possible since it will properly send patches without requiring extra care. If you cannot, then send patches as base64-encoded attachments, so your patch is not trashed during -transmission. +transmission. Also ensure the correct mime type is used +(text/x-diff or text/x-patch or at least text/plain) and that only one +patch is inline or attached per mail. +You can check @url{https://patchwork.ffmpeg.org}, if your patch does not show up, its mime type +likely was wrong. Your patch will be reviewed on the mailing list. You will likely be asked to make some changes and are expected to send in an improved version that @@ -545,7 +584,7 @@ @item Did you test your decoder or demuxer against sample files? -Samples may be obtained at @url{http://samples.ffmpeg.org}. +Samples may be obtained at @url{https://samples.ffmpeg.org}. @item Does the patch not mix functional and cosmetic changes? @@ -567,7 +606,7 @@ If the patch fixes a bug, did you provide enough information, including a sample, so the bug can be reproduced and the fix can be verified? Note please do not attach samples >100k to mails but rather provide a -URL, you can upload to ftp://upload.ffmpeg.org +URL, you can upload to ftp://upload.ffmpeg.org. @item Did you provide a verbose summary about what the patch does change? @@ -596,10 +635,10 @@ improves readability. @item -Consider to add a regression test for your code. +Consider adding a regression test for your code. @item -If you added YASM code please check that things still work with --disable-yasm +If you added YASM code please check that things still work with --disable-yasm. @item Make sure you check the return values of function and return appropriate @@ -664,7 +703,6 @@ message or introductory message for the patch series that you post to the ffmpeg-devel mailing list, a direct link to download the sample media. - @subsection Visualizing Test Coverage The FFmpeg build system allows visualizing the test coverage in an easy @@ -712,7 +750,7 @@ recommended deliverable for system integrators and distributors (such as Linux distributions, etc.). At regular times, a @strong{release manager} prepares, tests and publishes tarballs on the -@url{http://ffmpeg.org} website. +@url{https://ffmpeg.org} website. There are two kinds of releases: @@ -791,7 +829,7 @@ supplementing files that contain @code{gpg} signatures @item -Publish the tarballs at @url{http://ffmpeg.org/releases}. Create and +Publish the tarballs at @url{https://ffmpeg.org/releases}. Create and push an annotated tag in the form @code{nX}, with @code{X} containing the version number. @@ -803,7 +841,7 @@ Publish the news entry. @item -Send announcement to the mailing list. +Send an announcement to the mailing list. @end enumerate @bye diff -Nru ffmpeg-2.8.6/doc/Doxyfile ffmpeg-3.3.3/doc/Doxyfile --- ffmpeg-2.8.6/doc/Doxyfile 2016-02-01 00:52:41.000000000 +0000 +++ ffmpeg-3.3.3/doc/Doxyfile 2017-07-29 17:49:39.000000000 +0000 @@ -1,102 +1,129 @@ -# Doxyfile 1.7.1 +# Doxyfile 1.8.8 # This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project +# doxygen (www.doxygen.org) for a project. # -# All text after a hash (#) is considered a comment and will be ignored +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. # The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). #--------------------------------------------------------------------------- # Project related configuration options #--------------------------------------------------------------------------- # This tag specifies the encoding used for all characters in the config file -# that follow. The default is UTF-8 which is also the encoding used for all -# text before the first occurrence of this tag. Doxygen uses libiconv (or the -# iconv built into libc) for the transcoding. See -# http://www.gnu.org/software/libiconv for the list of possible encodings. +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. DOXYFILE_ENCODING = UTF-8 -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. PROJECT_NAME = FFmpeg -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 2.8.6 - -# With the PROJECT_LOGO tag one can specify a logo or icon that is included -# in the documentation. The maximum height of the logo should not exceed 55 -# pixels and the maximum width should not exceed 200 pixels. Doxygen will -# copy the logo to the output directory. +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 3.3.3 + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify an logo or icon that is included in +# the documentation. The maximum height of the logo should not exceed 55 pixels +# and the maximum width should not exceed 200 pixels. Doxygen will copy the logo +# to the output directory. + PROJECT_LOGO = -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. OUTPUT_DIRECTORY = doc/doxy -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. +# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. CREATE_SUBDIRS = NO +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional, -# Croatian, Czech, Danish, Dutch, Esperanto, Farsi, Finnish, French, German, -# Greek, Hungarian, Italian, Japanese, Japanese-en (Japanese with English -# messages), Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, -# Polish, Portuguese, Romanian, Russian, Serbian, Serbian-Cyrilic, Slovak, -# Slovene, Spanish, Swedish, Ukrainian, and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. OUTPUT_LANGUAGE = English -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. +# If the BRIEF_MEMBER_DESC tag is set to YES doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. BRIEF_MEMBER_DESC = YES -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# If the REPEAT_BRIEF tag is set to YES doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the # brief descriptions will be completely suppressed. +# The default value is: YES. REPEAT_BRIEF = YES -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. ABBREVIATE_BRIEF = # If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief +# doxygen will generate a detailed section even if there is only a brief # description. +# The default value is: NO. ALWAYS_DETAILED_SEC = NO @@ -104,153 +131,207 @@ # inherited members of a class in the documentation of that class as if those # members were ordinary class members. Constructors, destructors and assignment # operators of the base classes will not be shown. +# The default value is: NO. INLINE_INHERITED_MEMB = NO -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. +# If the FULL_PATH_NAMES tag is set to YES doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. FULL_PATH_NAMES = YES -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. STRIP_FROM_PATH = . -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = . + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. SHORT_NAMES = NO -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like regular Qt-style comments -# (thus requiring an explicit @brief command for a brief description.) +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. JAVADOC_AUTOBRIEF = YES -# If the QT_AUTOBRIEF tag is set to YES then Doxygen will -# interpret the first line (until the first dot) of a Qt-style -# comment as the brief description. If set to NO, the comments -# will behave just like regular Qt-style comments (thus requiring -# an explicit \brief command for a brief description.) +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. QT_AUTOBRIEF = NO -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. MULTILINE_CPP_IS_BRIEF = NO -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. INHERIT_DOCS = YES -# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce -# a new page for each member. If set to NO, the documentation of a member will -# be part of the file/class/namespace that contains it. +# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce a +# new page for each member. If set to NO, the documentation of a member will be +# part of the file/class/namespace that contains it. +# The default value is: NO. SEPARATE_MEMBER_PAGES = NO -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. ALIASES = -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_FOR_C = YES -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java -# sources only. Doxygen will then generate output that is more tailored for -# Java. For instance, namespaces will be presented as packages, qualified -# scopes will look different, etc. +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. OPTIMIZE_OUTPUT_JAVA = NO # Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran -# sources only. Doxygen will then generate output that is more tailored for -# Fortran. +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. OPTIMIZE_FOR_FORTRAN = NO # Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL -# sources. Doxygen will then generate output that is tailored for -# VHDL. +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. OPTIMIZE_OUTPUT_VHDL = NO # Doxygen selects the parser to use depending on the extension of the files it -# parses. With this tag you can assign which parser to use for a given extension. -# Doxygen has a built-in mapping, but you can override or extend it using this -# tag. The format is ext=language, where ext is a file extension, and language -# is one of the parsers supported by doxygen: IDL, Java, Javascript, CSharp, C, -# C++, D, PHP, Objective-C, Python, Fortran, VHDL, C, C++. For instance to make -# doxygen treat .inc files as Fortran files (default is PHP), and .f files as C -# (default is Fortran), use: inc=Fortran f=C. Note that for custom extensions -# you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. EXTENSION_MAPPING = +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by by putting a % sign in front of the word +# or globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = YES + # If you use STL classes (i.e. std::string, std::vector, etc.) but do not want -# to include (a tag file for) the STL sources as input, then you should -# set this tag to YES in order to let doxygen match functions declarations and -# definitions whose arguments contain STL classes (e.g. func(std::string); v.s. -# func(std::string) {}). This also make the inheritance and collaboration +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration # diagrams that involve STL classes more complete and accurate. +# The default value is: NO. BUILTIN_STL_SUPPORT = NO # If you use Microsoft's C++/CLI language, you should set this option to YES to # enable parsing support. +# The default value is: NO. CPP_CLI_SUPPORT = NO -# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only. -# Doxygen will parse them like normal C++ but will assume all classes use public -# instead of private inheritance when no explicit protection keyword is present. +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. SIP_SUPPORT = NO -# For Microsoft's IDL there are propget and propput attributes to indicate getter -# and setter methods for a property. Setting this option to YES (the default) -# will make doxygen to replace the get and set methods by a property in the -# documentation. This will only work if the methods are indeed getting or -# setting a simple type. If this is not the case, or you want to show the -# methods anyway, you should set this option to NO. +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. IDL_PROPERTY_SUPPORT = YES @@ -258,371 +339,470 @@ # tag is set to YES, then doxygen will reuse the documentation of the first # member in the group (if any) for the other members of the group. By default # all members of a group must be documented explicitly. +# The default value is: NO. DISTRIBUTE_GROUP_DOC = NO -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. SUBGROUPING = YES -# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum -# is documented as struct, union, or enum with the name of the typedef. So +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So # typedef struct TypeS {} TypeT, will appear in the documentation as a struct # with name TypeT. When disabled the typedef will appear as a member of a file, -# namespace, or class. And the struct will be named TypeS. This can typically -# be useful for C code in case the coding convention dictates that all compound +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound # types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. TYPEDEF_HIDES_STRUCT = YES -# The SYMBOL_CACHE_SIZE determines the size of the internal cache use to -# determine which symbols to keep in memory and which to flush to disk. -# When the cache is full, less often used symbols will be written to disk. -# For small to medium size projects (<1000 input files) the default value is -# probably good enough. For larger projects a too small cache size can cause -# doxygen to be busy swapping symbols to and from disk most of the time -# causing a significant performance penality. -# If the system has enough physical memory increasing the cache will improve the -# performance by keeping more symbols in memory. Note that the value works on -# a logarithmic scale so increasing the size by one will roughly double the -# memory usage. The cache size is given by this formula: -# 2^(16+SYMBOL_CACHE_SIZE). The valid range is 0..9, the default is 0, -# corresponding to a cache size of 2^16 = 65536 symbols +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. -SYMBOL_CACHE_SIZE = 0 +LOOKUP_CACHE_SIZE = 0 #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- # If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. EXTRACT_ALL = YES -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. +# If the EXTRACT_PRIVATE tag is set to YES all private members of a class will +# be included in the documentation. +# The default value is: NO. EXTRACT_PRIVATE = YES -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. +# If the EXTRACT_PACKAGE tag is set to YES all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES all static members of a file will be +# included in the documentation. +# The default value is: NO. EXTRACT_STATIC = YES -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. +# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. EXTRACT_LOCAL_CLASSES = YES -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. +# This flag is only useful for Objective-C code. When set to YES local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO only methods in the interface are +# included. +# The default value is: NO. EXTRACT_LOCAL_METHODS = NO # If this flag is set to YES, the members of anonymous namespaces will be # extracted and appear in the documentation as a namespace called -# 'anonymous_namespace{file}', where file will be replaced with the base -# name of the file that contains the anonymous namespace. By default -# anonymous namespace are hidden. +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. EXTRACT_ANON_NSPACES = NO -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_MEMBERS = NO -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO these classes will be included in the various overviews. This option has +# no effect if EXTRACT_ALL is enabled. +# The default value is: NO. HIDE_UNDOC_CLASSES = NO -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO these declarations will be +# included in the documentation. +# The default value is: NO. HIDE_FRIEND_COMPOUNDS = NO -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. HIDE_IN_BODY_DOCS = NO -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. INTERNAL_DOCS = NO -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES upper-case letters are also # allowed. This is useful if you have classes or files whose names only differ # in case and if your file system supports case sensitive file names. Windows # and Mac users are advised to set this option to NO. +# The default value is: system dependent. CASE_SENSE_NAMES = YES -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES the +# scope will be hidden. +# The default value is: NO. HIDE_SCOPE_NAMES = NO -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. SHOW_INCLUDE_FILES = YES -# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen -# will list include files with double quotes in the documentation -# rather than with sharp brackets. +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. FORCE_LOCAL_INCLUDES = NO -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. INLINE_INFO = YES -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. +# The default value is: YES. SORT_MEMBER_DOCS = NO -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. SORT_BRIEF_DOCS = NO -# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen -# will sort the (brief and detailed) documentation of class members so that -# constructors and destructors are listed first. If set to NO (the default) -# the constructors will appear in the respective orders defined by -# SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. -# This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO -# and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. SORT_MEMBERS_CTORS_1ST = NO -# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the -# hierarchy of group names into alphabetical order. If set to NO (the default) -# the group names will appear in their defined order. +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. SORT_GROUP_NAMES = NO -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. # Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. SORT_BY_SCOPE_NAME = NO -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable ( YES) or disable ( NO) the +# todo list. This list is created by putting \todo commands in the +# documentation. +# The default value is: YES. GENERATE_TODOLIST = YES -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. +# The GENERATE_TESTLIST tag can be used to enable ( YES) or disable ( NO) the +# test list. This list is created by putting \test commands in the +# documentation. +# The default value is: YES. GENERATE_TESTLIST = YES -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. +# The GENERATE_BUGLIST tag can be used to enable ( YES) or disable ( NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. GENERATE_BUGLIST = YES -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. +# The GENERATE_DEPRECATEDLIST tag can be used to enable ( YES) or disable ( NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. GENERATE_DEPRECATEDLIST= YES -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if ... \endif and \cond +# ... \endcond blocks. ENABLED_SECTIONS = -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. MAX_INITIALIZER_LINES = 30 -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES the list +# will mention the files that were used to generate the documentation. +# The default value is: YES. SHOW_USED_FILES = YES -# Set the SHOW_FILES tag to NO to disable the generation of the Files page. -# This will remove the Files entry from the Quick Index and from the -# Folder Tree View (if specified). The default is YES. +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. SHOW_FILES = YES -# Set the SHOW_NAMESPACES tag to NO to disable the generation of the -# Namespaces page. -# This will remove the Namespaces entry from the Quick Index -# and from the Folder Tree View (if specified). The default is YES. +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. SHOW_NAMESPACES = YES # The FILE_VERSION_FILTER tag can be used to specify a program or script that # doxygen should invoke to get the current version for each file (typically from # the version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the program writes to standard output -# is used as the file version. See the manual for examples. +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. FILE_VERSION_FILTER = # The LAYOUT_FILE tag can be used to specify a layout file which will be parsed # by doxygen. The layout file controls the global structure of the generated -# output files in an output format independent way. The create the layout file -# that represents doxygen's defaults, run doxygen with the -l option. -# You can optionally specify a file name after the option, if omitted -# DoxygenLayout.xml will be used as the name of the layout file. +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. LAYOUT_FILE = +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + #--------------------------------------------------------------------------- -# configuration options related to warning and progress messages +# Configuration options related to warning and progress messages #--------------------------------------------------------------------------- -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. QUIET = YES # The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. +# generated to standard error ( stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. WARNINGS = YES -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. +# If the WARN_IF_UNDOCUMENTED tag is set to YES, then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. WARN_IF_UNDOCUMENTED = YES -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. WARN_IF_DOC_ERROR = YES -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO doxygen will only warn about wrong or incomplete parameter +# documentation, but not about the absence of documentation. +# The default value is: NO. WARN_NO_PARAMDOC = NO -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). WARN_LOGFILE = #--------------------------------------------------------------------------- -# configuration options related to the input files +# Configuration options related to the input files #--------------------------------------------------------------------------- -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. +# Note: If this tag is empty the current directory is searched. INPUT = # This tag can be used to specify the character encoding of the source files -# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is -# also the default input encoding. Doxygen uses libiconv (or the iconv built -# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for -# the list of possible encodings. +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. INPUT_ENCODING = UTF-8 # If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank the +# following patterns are tested:*.c, *.cc, *.cxx, *.cpp, *.c++, *.java, *.ii, +# *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, +# *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, +# *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, *.vhdl, *.ucf, +# *.qsf, *.as and *.js. FILE_PATTERNS = -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. RECURSIVE = YES -# The EXCLUDE tag can be used to specify files and/or directories that should +# The EXCLUDE tag can be used to specify files and/or directories that should be # excluded from the INPUT source files. This way you can easily exclude a # subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. EXCLUDE = -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded # from the input. +# The default value is: NO. EXCLUDE_SYMLINKS = NO # If the value of the INPUT tag contains directories, you can use the # EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. Note that the wildcards are matched -# against the file with absolute path, so to exclude all test directories -# for example use the pattern */test/* +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* EXCLUDE_PATTERNS = *.git \ *.d @@ -632,677 +812,1108 @@ # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* EXCLUDE_SYMBOLS = -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). -EXAMPLE_PATH = doc/examples/ +EXAMPLE_PATH = doc/examples/ tools/ # If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. EXAMPLE_PATTERNS = *.c # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. EXAMPLE_RECURSIVE = NO -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). IMAGE_PATH = # The INPUT_FILTER tag can be used to specify a program that doxygen should # invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. -# If FILTER_PATTERNS is specified, this tag will be -# ignored. +# by executing (via popen()) the command: +# +# +# +# where is the value of the INPUT_FILTER tag, and is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. INPUT_FILTER = # The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. -# Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. -# The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. FILTER_PATTERNS = # If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). +# INPUT_FILTER ) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. FILTER_SOURCE_FILES = NO +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + #--------------------------------------------------------------------------- -# configuration options related to source browsing +# Configuration options related to source browsing #--------------------------------------------------------------------------- -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. SOURCE_BROWSER = YES -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. INLINE_SOURCES = NO -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. STRIP_CODE_COMMENTS = NO -# If the REFERENCED_BY_RELATION tag is set to YES -# then for each documented function all documented -# functions referencing it will be listed. +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. REFERENCED_BY_RELATION = YES -# If the REFERENCES_RELATION tag is set to YES -# then for each documented function all documented entities -# called/used by that function will be listed. +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. REFERENCES_RELATION = NO -# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) -# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from -# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will -# link to the source code. -# Otherwise they will link to the documentation. +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES, then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. REFERENCES_LINK_SOURCE = YES -# If the USE_HTAGS tag is set to YES then the references to source code -# will point to the HTML generated by the htags(1) tool instead of doxygen -# built-in source browser. The htags tool is part of GNU's global source -# tagging system (see http://www.gnu.org/software/global/global.html). You -# will need version 4.8.6 or higher. +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. USE_HTAGS = NO -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. VERBATIM_HEADERS = YES +# If the CLANG_ASSISTED_PARSING tag is set to YES, then doxygen will use the +# clang parser (see: http://clang.llvm.org/) for more accurate parsing at the +# cost of reduced performance. This can be particularly helpful with template +# rich C++ code for which doxygen's built-in parser lacks the necessary type +# information. +# Note: The availability of this option depends on whether or not doxygen was +# compiled with the --with-libclang option. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = NO + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + #--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index +# Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. ALPHABETICAL_INDEX = YES -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. COLS_IN_ALPHA_INDEX = 5 -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = #--------------------------------------------------------------------------- -# configuration options related to the HTML output +# Configuration options related to the HTML output #--------------------------------------------------------------------------- -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. +# If the GENERATE_HTML tag is set to YES doxygen will generate HTML output +# The default value is: YES. GENERATE_HTML = YES -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_OUTPUT = html -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_FILE_EXTENSION = .html -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a # standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_HEADER = -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_FOOTER = -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_STYLESHEET = -# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. -# Doxygen will adjust the colors in the stylesheet and background images -# according to this color. Hue is specified as an angle on a colorwheel, -# see http://en.wikipedia.org/wiki/Hue for more information. -# For instance the value 0 represents red, 60 is yellow, 120 is green, -# 180 is cyan, 240 is blue, 300 purple, and 360 is red again. -# The allowed range is 0 to 359. - -#HTML_COLORSTYLE_HUE = 120 - -# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of -# the colors in the HTML output. For a value of 0 the output will use -# grayscales only. A value of 255 will produce the most vivid colors. +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefor more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra stylesheet files is of importance (e.g. the last +# stylesheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the stylesheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_SAT = 100 -# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to -# the luminance component of the colors in the HTML output. Values below -# 100 gradually make the output lighter, whereas values above 100 make -# the output darker. The value divided by 100 is the actual gamma applied, -# so 80 represents a gamma of 0.8, The value 220 represents a gamma of 2.2, -# and 100 does not change the gamma. +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_COLORSTYLE_GAMMA = 80 # If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting -# this to NO can help when comparing the output of multiple runs. +# page will contain the date and time when the page was generated. Setting this +# to NO can help when comparing the output of multiple runs. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_TIMESTAMP = YES # If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML # documentation will contain sections that can be hidden and shown after the -# page has loaded. For this to work a browser that supports -# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox -# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. HTML_DYNAMIC_SECTIONS = NO -# If the GENERATE_DOCSET tag is set to YES, additional index files -# will be generated that can be used as input for Apple's Xcode 3 -# integrated development environment, introduced with OS X 10.5 (Leopard). -# To create a documentation set, doxygen will generate a Makefile in the -# HTML output directory. Running make will produce the docset in that -# directory and running "make install" will install the docset in -# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find -# it at startup. -# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html # for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_DOCSET = NO -# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the -# feed. A documentation feed provides an umbrella under which multiple -# documentation sets from a single provider (such as a company or product suite) -# can be grouped. +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_FEEDNAME = "Doxygen generated docs" -# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that -# should uniquely identify the documentation set bundle. This should be a -# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen -# will append .docset to the name. +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_BUNDLE_ID = org.doxygen.Project -# When GENERATE_PUBLISHER_ID tag specifies a string that should uniquely identify +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify # the documentation publisher. This should be a reverse domain-name style # string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_ID = org.doxygen.Publisher -# The GENERATE_PUBLISHER_NAME tag identifies the documentation publisher. +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. DOCSET_PUBLISHER_NAME = Publisher -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) -# of the generated HTML documentation. +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_HTMLHELP = NO -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be # written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_FILE = -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler ( hhc.exe). If non-empty +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. HHC_LOCATION = -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). +# The GENERATE_CHI flag controls if a separate .chi index file is generated ( +# YES) or that it should be included in the master .chm file ( NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. GENERATE_CHI = NO -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING -# is used to encode HtmlHelp index (hhk), content (hhc) and project file -# content. +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index ( hhk), content ( hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. CHM_INDEX_ENCODING = -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. +# The BINARY_TOC flag controls whether a binary table of contents is generated ( +# YES) or a normal table of contents ( NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. BINARY_TOC = NO -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. TOC_EXPAND = NO # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and -# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated -# that can be used as input for Qt's qhelpgenerator to generate a -# Qt Compressed Help (.qch) of the generated HTML documentation. +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_QHP = NO -# If the QHG_LOCATION tag is specified, the QCH_FILE tag can -# be used to specify the file name of the resulting .qch file. -# The path specified is relative to the HTML output folder. +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. QCH_FILE = -# The QHP_NAMESPACE tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#namespace +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_NAMESPACE = org.doxygen.Project -# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating -# Qt Help Project output. For more information please see -# http://doc.trolltech.com/qthelpproject.html#virtual-folders +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_VIRTUAL_FOLDER = doc -# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to -# add. For more information please see -# http://doc.trolltech.com/qthelpproject.html#custom-filters +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_NAME = -# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the -# custom filter to add. For more information please see -# -# Qt Help Project / Custom Filters. +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_CUST_FILTER_ATTRS = # The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this -# project's -# filter section matches. -# -# Qt Help Project / Filter Attributes. +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. QHP_SECT_FILTER_ATTRS = -# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can -# be used to specify the location of Qt's qhelpgenerator. -# If non-empty doxygen will try to run qhelpgenerator on the generated -# .qhp file. +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. QHG_LOCATION = -# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files -# will be generated, which together with the HTML files, form an Eclipse help -# plugin. To install this plugin and make it available under the help contents -# menu in Eclipse, the contents of the directory containing the HTML and XML -# files needs to be copied into the plugins directory of eclipse. The name of -# the directory within the plugins directory should be the same as -# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before -# the help appears. +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_ECLIPSEHELP = NO -# A unique identifier for the eclipse help plugin. When installing the plugin -# the directory name containing the HTML and XML files should also have -# this name. +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. ECLIPSE_DOC_ID = org.doxygen.Project -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. DISABLE_INDEX = NO -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - # The GENERATE_TREEVIEW tag is used to specify whether a tree-like index -# structure should be generated to display hierarchical information. -# If the tag value is set to YES, a side panel will be generated -# containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). -# Windows users are probably better off using the HTML help feature. +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom stylesheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. GENERATE_TREEVIEW = NO -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. TREEVIEW_WIDTH = 250 -# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open -# links to external symbols imported via tag files in a separate window. +# When the EXT_LINKS_IN_WINDOW option is set to YES doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. EXT_LINKS_IN_WINDOW = NO -# Use this tag to change the font size of Latex formulas included -# as images in the HTML documentation. The default is 10. Note that -# when you change the font size after a successful doxygen run you need -# to manually remove any form_*.png images from the HTML output directory -# to force them to be regenerated. +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_FONTSIZE = 10 # Use the FORMULA_TRANPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are -# not supported properly for IE 6.0, but are supported on all modern browsers. -# Note that when changing this option you need to delete any form_*.png files -# in the HTML output before the changes have effect. +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. FORMULA_TRANSPARENT = YES -# When the SEARCHENGINE tag is enabled doxygen will generate a search box -# for the HTML output. The underlying search engine uses javascript -# and DHTML and should work on any modern browser. Note that when using -# HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets -# (GENERATE_DOCSET) there is already a search function so this one should -# typically be disabled. For large projects the javascript based search engine -# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using prerendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = NO + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use + S +# (what the is depends on the OS and browser, but it is typically +# , /