Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 517573a670 |
@@ -1,236 +1,6 @@
|
||||
Entries are sorted chronologically from oldest to youngest within each release,
|
||||
releases are sorted from youngest to oldest.
|
||||
|
||||
version 4.1.4:
|
||||
avcodec/ilbcdec: Simplify use of unsigned and fix more undefined overflows
|
||||
avcodec/golomb: Correct the doxy about get_ue_golomb() and errors
|
||||
avformat/utils: Check timebase before use in estimate_timings()
|
||||
avcodec/hq_hqa: Use ff_set_dimensions()
|
||||
avcodec/rv10: Fix integer overflow in aspect ratio compare
|
||||
avcodec/4xm: Fix signed integer overflows in idct()
|
||||
avcodec/qdm2: Check checksum_size for 0
|
||||
avcodec/qdm2: error out of qdm2_fft_decode_tones() before entering endless loop
|
||||
avcodec/qdm2: Do not read out of array in fix_coding_method_array()
|
||||
avcodec/svq3: Use ff_set_dimension()
|
||||
avcodec/iff: Check ham vs bpp
|
||||
avcodec/ffwavesynth: use uint32_t to compute difference, it is enough
|
||||
avcodec/ffwavesynth: Simplify lcg_seek(), avoid negative case
|
||||
avcodec/ffwavesynth: Fix backward lcg_seek()
|
||||
avcodec/flicvideo: Fix off by 1 error in flic_decode_frame_24BPP()
|
||||
avcodec/vc1_block: Check for vlc error in vc1_decode_ac_coeff()
|
||||
avcodec/alac: Check lpc_quant
|
||||
avcodec/dxv: Initialize tex_funct to NULL
|
||||
avcodec/alsdec: Add FF_CODEC_CAP_INIT_CLEANUP
|
||||
avcodec/alsdec: Fix integer overflow with buffer number
|
||||
avcodec/alsdec: Fixes signed integer overflow in LSB addition
|
||||
avcodec/alsdec: Check opt_order / sb_length in ra_block handling
|
||||
avcodec/alsdec: Fix integer overflow with shifting samples
|
||||
avcodec/alsdec: Fix undefined behavior in decode_rice()
|
||||
avcodec/alsdec: Fixes invalid shifts in read_var_block_data() and INTERLEAVE_OUTPUT()
|
||||
avcodec/hevc_ps: Change num_tile_rows/columns checks to sps->ctb_height/weight
|
||||
avcodec/hevc_ps: Fix integer overflow with num_tile_rows and num_tile_columns
|
||||
avcodec/apedec: Add k < 24 check to the only k++ case which lacks such a check
|
||||
avformat/aviobuf: Delay buffer downsizing until asserts are met
|
||||
avcodec/fitsdec: Check data_min/max
|
||||
avcodec/m101: Fix off be 2 error
|
||||
avcodec/qdm2: Move fft_order check up
|
||||
avcodec/libvorbisdec: Check extradata size
|
||||
avformat/vqf: Check header_size
|
||||
avcodec/atrac9dec: Check q_unit_cnt in parse_band_ext()
|
||||
avcodec/atrac9dec: Check that the reused block has succeeded initilization
|
||||
avcodec/utils: Check bits_per_coded_sample
|
||||
avcodec/videodsp_template: Fix overflow of addition
|
||||
avcodec/alsdec: Fix invalid shift in multiply()
|
||||
avcodec/ffwavesynth: Check ts_end - ts_start for overflow
|
||||
avcodec/vc1dsp: Avoid undefined shifts in vc1_v_s_overlap_c / vc1_h_s_overlap_c
|
||||
avcodec/tta: Fix undefined shift
|
||||
avcodec/qdmc: Fix integer overflows in PRNG
|
||||
avcodec/bintext: Check font height
|
||||
avcodec/binkdsp: Fix integer overflows in idct
|
||||
avcodec/bink: Fix integer overflow in unquantize_dct_coeffs()
|
||||
avcodec/motionpixels: Check for vlc error in mp_get_vlc()
|
||||
avcodec/loco: Limit lossy parameter so it is sane and does not overflow
|
||||
avformat/mov: Set fragment.found_tfhd only after TFHD has been parsed
|
||||
avcodec/xpmdec: Do not use context dimensions as temporary variables
|
||||
avcodec/fitsdec: Fix division by 0 in size check
|
||||
avcodec/aacpsdsp_template: Fix integer overflow in ps_hybrid_analysis_c()
|
||||
avcodec/truemotion2: Fix integer overflow in last loop in tm2_update_block()
|
||||
avcodec/iff: finetune the palette size check in the mask case
|
||||
avcodec/iff: Fix mask_buf / mask_palbuf leak
|
||||
avformat/icodec: Free ico->images on error paths
|
||||
avformat/wsddec: Fix undefined shift
|
||||
avcodec/fmvc: Check if header fields are available before allocating the image
|
||||
avcodec/bink: Reorder operations in init to avoid memleak on error
|
||||
avformat/wtvdec: Avoid (32bit signed) sectors
|
||||
avcodec/bitstream: Check for more conflicting codes in build_table()
|
||||
avcodec/bitstream: Check for integer code truncation in build_table()
|
||||
avformat/sbgdec: Fixes integer overflow in str_to_time() with hours
|
||||
avformat/vpk: Check offset for validity
|
||||
avformat/vpk: Fix integer overflow in samples_per_block computation
|
||||
avcodec/mjpegdec: Check for non ls PAL8
|
||||
avcodec/interplayvideo: check decoding_map_size with video_data_size
|
||||
avcodec/h264_parse: Use 64bit for expectedpoc and expected_delta_per_poc_cycle
|
||||
avcodec/mss4: Check input size against skip bits
|
||||
avcodec/dxv: Check op_offset in dxv_decompress_cocg()
|
||||
avcodec/diracdec: Fix integer overflow in global_mv()
|
||||
avcodec/vmnc: Check available space against chunks before reget_buffer()
|
||||
avcodec/aacdec_template: skip apply_tns() if max_sfb is 0 (from previous header decode failure)
|
||||
avcodec/aacdec_fixed: Handle more extreem cases in noise_scale()
|
||||
avcodec/aacdec_template: Merge 3 #ifs related to noise handling
|
||||
avcodec/aacdec_fixed: ssign seems always -1 in noise_scale(), simplify
|
||||
avformat/mp3enc: Avoid SEEK_END as it is unsupported
|
||||
avcodec/truemotion2: Fix several integer overflows in tm2_update_block()
|
||||
avformat/webm_chunk: Specify expected argument length of get_chunk_filename()
|
||||
avformat/webm_chunk: Check header filename length
|
||||
avcodec/cpia: Check input size also against linesizes and EOL
|
||||
swscale/tests/swscale: Lengthen pixfmt name buffer to 21 bytes
|
||||
libswcale: Fix possible string overflow in test.
|
||||
avcodec/hq_hqa: Check available space before reading slice offsets
|
||||
lavf/webm_chunk: Respect buffer size
|
||||
avcodec/fits: Check bitpix
|
||||
avcodec/jvdec: Use ff_get_buffer() when the content is not reused
|
||||
avcodec/truemotion2: Fix 2 integer overflows in tm2_update_block()
|
||||
avcodec/gdv: Check input palette size before rescale()
|
||||
avcodec/jpeg2000: Check stepsize before using it
|
||||
avcodec/aacdec_fixed: Fix undefined shift in noise_scale()
|
||||
avutil/avstring: Fix bug and undefined behavior in av_strncasecmp()
|
||||
avformat/mov: Skip stsd adjustment without chunks
|
||||
avformat/aadec: Check for scanf() failure
|
||||
avcodec/ccaption_dec: Add a blank like at the end to avoid rollup reading from outside
|
||||
avcodec/ivi: Move buffer/block end check to caller of ivi_dc_transform()
|
||||
avcodec/diracdec: Use 64bit in intermediate of global motion vector field generation
|
||||
avcodec/truemotion2: Fix integer overflow in tm2_decode_blocks()
|
||||
movsub_bsf: Fix mov2textsub regression
|
||||
lavc/libaomenc: Add a maximum constraint of 64 encoder threads.
|
||||
avformat/aacdec: fix demuxing of small frames
|
||||
avcodec/cuviddec: improve progressive frame detection
|
||||
avformat/matroskaenc: fix leak on error
|
||||
avformat/av1: Initialize padding in ff_isom_write_av1c
|
||||
avcodec/cbs_av1: fix parsing spatial_id
|
||||
|
||||
version 4.1.3:
|
||||
- avcodec/rscc: Check that the to be uncompressed input is large enough
|
||||
- avformat/movenc: free eac3 private data only when closing the stream
|
||||
- avcodec/hevcdec: Avoid only partly skiping duplicate first slices
|
||||
- lavc/bmp: Avoid a heap buffer overwrite for 1bpp input.
|
||||
- avcodec/mpegpicture: Check size of edge_emu_buffer
|
||||
- avformat/mov: Fix potential integer overflow in entry check in mov_read_trun()
|
||||
- avcodec/truemotion2: Fix integer overflow in tm2_null_res_block()
|
||||
- avcodec/cbs_av1: fix range of values for Mastering Display Color Volume Metadata OBUs
|
||||
- avcodec/av1_parser: don't abort parsing the first frame if extradata parsing fails
|
||||
|
||||
version 4.1.2:
|
||||
- avcodec/dfa: Check the chunk header is not truncated
|
||||
- avcodec/clearvideo: Check remaining data in P frames
|
||||
- avcodec/hevcdec: decode at most one slice reporting being the first in the picture
|
||||
- avcodec/dvbsubdec: Check object position
|
||||
- avcodec/cdgraphics: Use ff_set_dimensions()
|
||||
- avformat/gdv: Check fps
|
||||
- configure: use vpx_codec_vp8_dx/cx for libvpx-vp8 checking
|
||||
- configure: add missing pthreads extralibs dependency for libvpx-vp9
|
||||
- avcodec/mpeg4videodec: Check idx in mpeg4_decode_studio_block()
|
||||
- avcodec/dxv: Correct integer overflow in get_opcodes()
|
||||
- avcodec/scpr: Fix use of uninitialized variable
|
||||
- avcodec/qpeg: Limit copy in qpeg_decode_intra() to the available bytes
|
||||
- avcodec/aic: Check remaining bits in aic_decode_coeffs()
|
||||
- avcodec/gdv: Check for truncated tags in decompress_5()
|
||||
- avcodec/bethsoftvideo: Check block_type
|
||||
- avcodec/jpeg2000dwt: Fix integer overflow in dwt_decode97_int()
|
||||
- avcodec/error_resilience: Use a symmetric check for skipping MV estimation
|
||||
- avcodec/mlpdec: Insuffient typo
|
||||
- avcodec/zmbv: obtain frame later
|
||||
- avcodec/jvdec: Check available input space before decode8x8()
|
||||
- avcodec/h264_direct: Fix overflow in POC comparission
|
||||
- avformat/webmdashenc: Check id in adaption_sets
|
||||
- avformat/http: Fix Out-of-Bounds access in process_line()
|
||||
- avformat/ftp: Fix Out-of-Bounds Access and Information Leak in ftp.c:393
|
||||
- avcodec/htmlsubtitles: Fixes denial of service due to use of sscanf in inner loop for handling braces
|
||||
- avcodec/htmlsubtitles: Fixes denial of service due to use of sscanf in inner loop for tag scaning
|
||||
- avformat/matroskadec: Do not leak queued packets on sync errors
|
||||
- avcodec/mpeg4videodec: Clear interlaced_dct for studio profile
|
||||
- avformat/mov: Do not use reference stream in mov_read_sidx() if there is no reference stream
|
||||
- avcodec/sbrdsp_fixed.c: remove input value limit for sbr_sum_square_c()
|
||||
- avcodec/prores_ks: Fix luma quantization if q >= MAX_STORED_Q
|
||||
- avformat/mov: fix hang while seek on a kind of fragmented mp4
|
||||
- avformat/async: fix assertion condition when draining buffer
|
||||
- avcodec/cbs_av1: don't call cbs_av1_read_trailing_bits() when no bits remain in the OBU
|
||||
|
||||
version 4.1.1:
|
||||
- avformat/mov: validate chunk_count vs stsc_data
|
||||
- avformat/mov: require tfhd to begin parsing trun
|
||||
- avcodec/pgssubdec: Check for duplicate display segments
|
||||
- avformat/rtsp: Check number of streams in sdp_parse_line()
|
||||
- avformat/rtsp: Clear reply in every iteration in ff_rtsp_connect()
|
||||
- avcodec/rasc: Move ff_get_buffer() after frame checks
|
||||
- avcodec/rasc: Check uncompressed dlta size
|
||||
- avcodec/fic: Check that there is input left in fic_decode_block()
|
||||
- avcodec/ilbcdec: Fix undefined integer overflow lsf2poly()
|
||||
- avcodec/ilbcdec: Fix integer overflow in construct_vector()
|
||||
- avcodec/prosumer: Error out if decompress() stops reading data
|
||||
- avcodec/tiff: Check for 12bit gray fax
|
||||
- avutil/imgutils: Optimize memset_bytes() by using av_memcpy_backptr()
|
||||
- avutil/mem: Optimize fill32() by unrolling and using 64bit
|
||||
- configure: bump year
|
||||
- avcodec/tests/rangecoder: initialize array to avoid valgrind warning
|
||||
- avcodec/gdv: Optimize and factorize scaling loops
|
||||
- avcodec/h264_slice: Fix integer overflow in implicit_weight_table()
|
||||
- avcodec/exr: set layer_match in all branches
|
||||
- avcodec/exr: Check for duplicate channel index
|
||||
- avfilter/vf_tonemap_opencl: Make static tables const
|
||||
- doc/indevs: fix upto typo
|
||||
- avcodec/4xm: Fix returned error codes
|
||||
- avformat/libopenmpt: Fix successfull typo
|
||||
- avcodec/v4l2_m2m: fix cant typo
|
||||
- avcodec/mjpegbdec: Fix some misplaced {} and spaces
|
||||
- avformat/wvdec: detect and error out on WavPack DSD files
|
||||
- avcodec/mips: Fix failed case: hevc-conformance-AMP_A_Samsung_* when enable msa
|
||||
- avcodec/fic: Fail on invalid slice size/off
|
||||
- avcodec/ilbcdec: fix integer overflow in energy
|
||||
- postproc/postprocess_template: remove FF_REG_sp from clobber list
|
||||
- postproc/postprocess_template: Avoid using %4 for the threshold compare
|
||||
- libavformat/mov: Fix NULL-dereference read for some encrypted content.
|
||||
- avcodec/rpza: Check that there is enough data for all the blocks
|
||||
- avcodec/rpza: Move frame allocation to a later point
|
||||
- avcodec/avcodec: Document the data type for AV_PKT_DATA_MPEGTS_STREAM_ID
|
||||
- avformat/mpegts: Fix side data type for stream id
|
||||
- tests/fate/filter-video: increase fuzz for fate-filter-refcmp-psnr-rgb
|
||||
- avcodec/mjpegdec: Fix indention of ljpeg_decode_yuv_scan()
|
||||
- lavf/id3v2: fail read_apic on EOF reading mimetype
|
||||
- avcodec/rasc: Check that the number of moves is less than or equal the number of pixels
|
||||
- avformat/nutenc: Document trailer index assert better
|
||||
- lavf/mov: ensure only one tkhd per trak
|
||||
- avcodec/clearvideo: Check remaining input bits in P macro block loop
|
||||
- avcodec/rasc: Check input space before reading chunk
|
||||
- avcodec/dxv: Check that there is enough data to decompress
|
||||
- avcodec/ppc/hevcdsp: Fix build failures with powerpc-linux-gnu-gcc-4.8 with --disable-optimizations
|
||||
- avcodec/msvideo1: Check for too small dimensions
|
||||
- avcodec/wmv2dec: Skip I frame if its smaller than 1/8 of the minimal size
|
||||
- avcodec/msmpeg4dec: Skip frame if its smaller than 1/8 of the minimal size
|
||||
- avcodec/truemotion2rt: Fix rounding in input size check
|
||||
- avcodec/diracdec: Check component quant
|
||||
- avcodec/tiff: Limit filtering to decoded data
|
||||
- avcodec/truemotion2: fix integer overflows in tm2_low_chroma()
|
||||
- avcodec/pngdec: Check compression method
|
||||
- fftools/ffmpeg: Repair reinit_filter feature
|
||||
- avcodec/shorten: Fix integer overflow with offset
|
||||
- avcodec/imm4: Use ff_set_dimensions()
|
||||
- h264_redundant_pps: Fix logging context
|
||||
- avfilter/af_asetnsamples: fix last frame props
|
||||
- cbs_av1: Fix reading of overlong uvlc codes
|
||||
- avcodec/cbs_av1: fix parsing delta_frame_id_minus1
|
||||
- avfilter/vf_overlay: fix filtering with negative y
|
||||
- avformat/movenc: get number of written bytes from bitstream writer
|
||||
- avformat/movenc: fix size calculation in mov_write_eac3_tag()
|
||||
- avfilter/vf_overlay: fix crash with negative y
|
||||
- avcodec/mpeg_er: fix clearing chroma blocks for 422 and 444
|
||||
- avfilter/af_afade: fix duration maximum
|
||||
- avfilter/vf_fade: fix start/duration max value
|
||||
- avcodec/cbs_av1: fix parsing signed integer values
|
||||
- avcodec/cbs_av1: fix storage size for segmentation_params feature_value fields
|
||||
- configure: Add missing xlib dependency for VAAPI X11 code
|
||||
- avcodec/hevcdec: fix non-ref frame judgement
|
||||
|
||||
|
||||
version 4.1:
|
||||
- deblock filter
|
||||
- tmix filter
|
||||
@@ -272,7 +42,6 @@ version 4.1:
|
||||
- xstack filter
|
||||
- pcm vidc decoder and encoder
|
||||
- (a)graphmonitor filter
|
||||
- yadif_cuda filter
|
||||
|
||||
|
||||
version 4.0:
|
||||
|
||||
@@ -1,15 +0,0 @@
|
||||
|
||||
┌─────────────────────────────────────────────┐
|
||||
│ RELEASE NOTES for FFmpeg 4.1 "al-Khwarizmi" │
|
||||
└─────────────────────────────────────────────┘
|
||||
|
||||
The FFmpeg Project proudly presents FFmpeg 4.1 "al-Khwarizmi", about 6
|
||||
months after the release of FFmpeg 4.0.
|
||||
|
||||
A complete Changelog is available at the root of the project, and the
|
||||
complete Git history on https://git.ffmpeg.org/gitweb/ffmpeg.git
|
||||
|
||||
We hope you will like this release as much as we enjoyed working on it, and
|
||||
as usual, if you have any questions about it, or any FFmpeg related topic,
|
||||
feel free to join us on the #ffmpeg IRC channel (on irc.freenode.net) or ask
|
||||
on the mailing-lists.
|
||||
@@ -2812,7 +2812,6 @@ d3d11va_deps="dxva_h ID3D11VideoDecoder ID3D11VideoContext"
|
||||
dxva2_deps="dxva2api_h DXVA2_ConfigPictureDecode ole32 user32"
|
||||
ffnvcodec_deps_any="libdl LoadLibrary"
|
||||
nvdec_deps="ffnvcodec"
|
||||
vaapi_x11_deps="xlib"
|
||||
videotoolbox_hwaccel_deps="videotoolbox pthreads"
|
||||
videotoolbox_hwaccel_extralibs="-framework QuartzCore"
|
||||
xvmc_deps="X11_extensions_XvMClib_h"
|
||||
@@ -2958,7 +2957,6 @@ h264_rkmpp_decoder_deps="rkmpp"
|
||||
h264_rkmpp_decoder_select="h264_mp4toannexb_bsf"
|
||||
h264_vaapi_encoder_select="cbs_h264 vaapi_encode"
|
||||
h264_v4l2m2m_decoder_deps="v4l2_m2m h264_v4l2_m2m"
|
||||
h264_v4l2m2m_decoder_select="h264_mp4toannexb_bsf"
|
||||
h264_v4l2m2m_encoder_deps="v4l2_m2m h264_v4l2_m2m"
|
||||
hevc_amf_encoder_deps="amf"
|
||||
hevc_cuvid_decoder_deps="cuvid"
|
||||
@@ -2973,7 +2971,6 @@ hevc_rkmpp_decoder_select="hevc_mp4toannexb_bsf"
|
||||
hevc_vaapi_encoder_deps="VAEncPictureParameterBufferHEVC"
|
||||
hevc_vaapi_encoder_select="cbs_h265 vaapi_encode"
|
||||
hevc_v4l2m2m_decoder_deps="v4l2_m2m hevc_v4l2_m2m"
|
||||
hevc_v4l2m2m_decoder_select="hevc_mp4toannexb_bsf"
|
||||
hevc_v4l2m2m_encoder_deps="v4l2_m2m hevc_v4l2_m2m"
|
||||
mjpeg_cuvid_decoder_deps="cuvid"
|
||||
mjpeg_qsv_encoder_deps="libmfx"
|
||||
@@ -3183,7 +3180,6 @@ image2_alias_pix_demuxer_select="image2_demuxer"
|
||||
image2_brender_pix_demuxer_select="image2_demuxer"
|
||||
ipod_muxer_select="mov_muxer"
|
||||
ismv_muxer_select="mov_muxer"
|
||||
ivf_muxer_select="av1_metadata_bsf vp9_superframe_bsf"
|
||||
matroska_audio_muxer_select="matroska_muxer"
|
||||
matroska_demuxer_select="iso_media riffdec"
|
||||
matroska_demuxer_suggest="bzlib lzo zlib"
|
||||
@@ -3485,7 +3481,6 @@ zscale_filter_deps="libzimg const_nan"
|
||||
scale_vaapi_filter_deps="vaapi"
|
||||
vpp_qsv_filter_deps="libmfx"
|
||||
vpp_qsv_filter_select="qsvvpp"
|
||||
yadif_cuda_filter_deps="cuda_sdk"
|
||||
|
||||
# examples
|
||||
avio_dir_cmd_deps="avformat avutil"
|
||||
@@ -6152,21 +6147,21 @@ enabled libvorbis && require_pkg_config libvorbis vorbis vorbis/codec.h
|
||||
enabled libvpx && {
|
||||
enabled libvpx_vp8_decoder && {
|
||||
check_pkg_config libvpx_vp8_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp8_dx ||
|
||||
check_lib libvpx_vp8_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp8_dx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs" ||
|
||||
check_lib libvpx_vp8_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_dec_init_ver VPX_IMG_FMT_HIGHBITDEPTH" -lvpx ||
|
||||
die "ERROR: libvpx decoder version must be >=1.4.0";
|
||||
}
|
||||
enabled libvpx_vp8_encoder && {
|
||||
check_pkg_config libvpx_vp8_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp8_cx ||
|
||||
check_lib libvpx_vp8_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp8_cx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs" ||
|
||||
check_lib libvpx_vp8_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_enc_init_ver VPX_IMG_FMT_HIGHBITDEPTH" -lvpx ||
|
||||
die "ERROR: libvpx encoder version must be >=1.4.0";
|
||||
}
|
||||
enabled libvpx_vp9_decoder && {
|
||||
check_pkg_config libvpx_vp9_decoder "vpx >= 1.4.0" "vpx/vpx_decoder.h vpx/vp8dx.h" vpx_codec_vp9_dx ||
|
||||
check_lib libvpx_vp9_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs"
|
||||
check_lib libvpx_vp9_decoder "vpx/vpx_decoder.h vpx/vp8dx.h" "vpx_codec_vp9_dx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs"
|
||||
}
|
||||
enabled libvpx_vp9_encoder && {
|
||||
check_pkg_config libvpx_vp9_encoder "vpx >= 1.4.0" "vpx/vpx_encoder.h vpx/vp8cx.h" vpx_codec_vp9_cx ||
|
||||
check_lib libvpx_vp9_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs $pthreads_extralibs"
|
||||
check_lib libvpx_vp9_encoder "vpx/vpx_encoder.h vpx/vp8cx.h" "vpx_codec_vp9_cx VPX_IMG_FMT_HIGHBITDEPTH" "-lvpx $libm_extralibs"
|
||||
}
|
||||
if disabled_all libvpx_vp8_decoder libvpx_vp9_decoder libvpx_vp8_encoder libvpx_vp9_encoder; then
|
||||
die "libvpx enabled but no supported decoders found"
|
||||
@@ -7243,7 +7238,7 @@ cat > $TMPH <<EOF
|
||||
#define FFMPEG_CONFIG_H
|
||||
#define FFMPEG_CONFIGURATION "$(c_escape $FFMPEG_CONFIGURATION)"
|
||||
#define FFMPEG_LICENSE "$(c_escape $license)"
|
||||
#define CONFIG_THIS_YEAR 2019
|
||||
#define CONFIG_THIS_YEAR 2018
|
||||
#define FFMPEG_DATADIR "$(eval c_escape $datadir)"
|
||||
#define AVCONV_DATADIR "$(eval c_escape $datadir)"
|
||||
#define CC_IDENT "$(c_escape ${cc_ident:-Unknown compiler})"
|
||||
|
||||
+1
-1
@@ -38,7 +38,7 @@ PROJECT_NAME = FFmpeg
|
||||
# could be handy for archiving the generated documentation or if some version
|
||||
# control system is used.
|
||||
|
||||
PROJECT_NUMBER = 4.1.4
|
||||
PROJECT_NUMBER =
|
||||
|
||||
# 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
|
||||
|
||||
@@ -17943,64 +17943,6 @@ filter").
|
||||
It accepts the following parameters:
|
||||
|
||||
|
||||
@table @option
|
||||
|
||||
@item mode
|
||||
The interlacing mode to adopt. It accepts one of the following values:
|
||||
|
||||
@table @option
|
||||
@item 0, send_frame
|
||||
Output one frame for each frame.
|
||||
@item 1, send_field
|
||||
Output one frame for each field.
|
||||
@item 2, send_frame_nospatial
|
||||
Like @code{send_frame}, but it skips the spatial interlacing check.
|
||||
@item 3, send_field_nospatial
|
||||
Like @code{send_field}, but it skips the spatial interlacing check.
|
||||
@end table
|
||||
|
||||
The default value is @code{send_frame}.
|
||||
|
||||
@item parity
|
||||
The picture field parity assumed for the input interlaced video. It accepts one
|
||||
of the following values:
|
||||
|
||||
@table @option
|
||||
@item 0, tff
|
||||
Assume the top field is first.
|
||||
@item 1, bff
|
||||
Assume the bottom field is first.
|
||||
@item -1, auto
|
||||
Enable automatic detection of field parity.
|
||||
@end table
|
||||
|
||||
The default value is @code{auto}.
|
||||
If the interlacing is unknown or the decoder does not export this information,
|
||||
top field first will be assumed.
|
||||
|
||||
@item deint
|
||||
Specify which frames to deinterlace. Accept one of the following
|
||||
values:
|
||||
|
||||
@table @option
|
||||
@item 0, all
|
||||
Deinterlace all frames.
|
||||
@item 1, interlaced
|
||||
Only deinterlace frames marked as interlaced.
|
||||
@end table
|
||||
|
||||
The default value is @code{all}.
|
||||
@end table
|
||||
|
||||
@section yadif_cuda
|
||||
|
||||
Deinterlace the input video using the @ref{yadif} algorithm, but implemented
|
||||
in CUDA so that it can work as part of a GPU accelerated pipeline with nvdec
|
||||
and/or nvenc.
|
||||
|
||||
It accepts the following parameters:
|
||||
|
||||
|
||||
@table @option
|
||||
|
||||
@item mode
|
||||
|
||||
+1
-1
@@ -374,7 +374,7 @@ Defaults to @option{false}.
|
||||
@item timestamp_align
|
||||
Capture start time alignment in seconds. If set to nonzero, input frames are
|
||||
dropped till the system timestamp aligns with configured value.
|
||||
Alignment difference of up to one frame duration is tolerated.
|
||||
Alignment difference of upto one frame duration is tolerated.
|
||||
This is useful for maintaining input synchronization across N different
|
||||
hardware devices deployed for 'N-way' redundancy. The system time of different
|
||||
hardware devices should be synchronized with protocols such as NTP or PTP,
|
||||
|
||||
+3
-7
@@ -2139,6 +2139,9 @@ static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame)
|
||||
|
||||
/* determine if the parameters for this input changed */
|
||||
need_reinit = ifilter->format != frame->format;
|
||||
if (!!ifilter->hw_frames_ctx != !!frame->hw_frames_ctx ||
|
||||
(ifilter->hw_frames_ctx && ifilter->hw_frames_ctx->data != frame->hw_frames_ctx->data))
|
||||
need_reinit = 1;
|
||||
|
||||
switch (ifilter->ist->st->codecpar->codec_type) {
|
||||
case AVMEDIA_TYPE_AUDIO:
|
||||
@@ -2152,13 +2155,6 @@ static int ifilter_send_frame(InputFilter *ifilter, AVFrame *frame)
|
||||
break;
|
||||
}
|
||||
|
||||
if (!ifilter->ist->reinit_filters && fg->graph)
|
||||
need_reinit = 0;
|
||||
|
||||
if (!!ifilter->hw_frames_ctx != !!frame->hw_frames_ctx ||
|
||||
(ifilter->hw_frames_ctx && ifilter->hw_frames_ctx->data != frame->hw_frames_ctx->data))
|
||||
need_reinit = 1;
|
||||
|
||||
if (need_reinit) {
|
||||
ret = ifilter_parameters_from_frame(ifilter, frame);
|
||||
if (ret < 0)
|
||||
|
||||
+3
-3
@@ -158,7 +158,7 @@ typedef struct FourXContext {
|
||||
#define FIX_1_847759065 121095
|
||||
#define FIX_2_613125930 171254
|
||||
|
||||
#define MULTIPLY(var, const) ((int)((var) * (unsigned)(const)) >> 16)
|
||||
#define MULTIPLY(var, const) (((var) * (const)) >> 16)
|
||||
|
||||
static void idct(int16_t block[64])
|
||||
{
|
||||
@@ -498,7 +498,7 @@ static int decode_i_block(FourXContext *f, int16_t *block)
|
||||
|
||||
if (get_bits_left(&f->gb) < 2){
|
||||
av_log(f->avctx, AV_LOG_ERROR, "%d bits left before decode_i_block()\n", get_bits_left(&f->gb));
|
||||
return AVERROR_INVALIDDATA;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* DC coef */
|
||||
@@ -732,7 +732,7 @@ static int decode_i2_frame(FourXContext *f, const uint8_t *buf, int length)
|
||||
for (x = 0; x < width; x += 16) {
|
||||
unsigned int color[4] = { 0 }, bits;
|
||||
if (buf_end - buf < 8)
|
||||
return AVERROR_INVALIDDATA;
|
||||
return -1;
|
||||
// warning following is purely guessed ...
|
||||
color[0] = bytestream2_get_le16u(&g3);
|
||||
color[1] = bytestream2_get_le16u(&g3);
|
||||
|
||||
@@ -195,12 +195,12 @@ static void subband_scale(int *dst, int *src, int scale, int offset, int len)
|
||||
|
||||
static void noise_scale(int *coefs, int scale, int band_energy, int len)
|
||||
{
|
||||
int s = -scale;
|
||||
int ssign = scale < 0 ? -1 : 1;
|
||||
int s = FFABS(scale);
|
||||
unsigned int round;
|
||||
int i, out, c = exp2tab[s & 3];
|
||||
int nlz = 0;
|
||||
|
||||
av_assert0(s >= 0);
|
||||
while (band_energy > 0x7fff) {
|
||||
band_energy >>= 1;
|
||||
nlz++;
|
||||
@@ -216,20 +216,15 @@ static void noise_scale(int *coefs, int scale, int band_energy, int len)
|
||||
round = s ? 1 << (s-1) : 0;
|
||||
for (i=0; i<len; i++) {
|
||||
out = (int)(((int64_t)coefs[i] * c) >> 32);
|
||||
coefs[i] = -((int)(out+round) >> s);
|
||||
coefs[i] = ((int)(out+round) >> s) * ssign;
|
||||
}
|
||||
}
|
||||
else {
|
||||
s = s + 32;
|
||||
if (s > 0) {
|
||||
round = 1 << (s-1);
|
||||
for (i=0; i<len; i++) {
|
||||
out = (int)((int64_t)((int64_t)coefs[i] * c + round) >> s);
|
||||
coefs[i] = -out;
|
||||
}
|
||||
} else {
|
||||
for (i=0; i<len; i++)
|
||||
coefs[i] = -(int64_t)coefs[i] * c * (1 << -s);
|
||||
round = 1 << (s-1);
|
||||
for (i=0; i<len; i++) {
|
||||
out = (int)((int64_t)((int64_t)coefs[i] * c + round) >> s);
|
||||
coefs[i] = out * ssign;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1673,24 +1673,25 @@ static int decode_spectrum_and_dequant(AACContext *ac, INTFLOAT coef[1024],
|
||||
}
|
||||
} else if (cbt_m1 == NOISE_BT - 1) {
|
||||
for (group = 0; group < (AAC_SIGNE)g_len; group++, cfo+=128) {
|
||||
#if !USE_FIXED
|
||||
float scale;
|
||||
#endif /* !USE_FIXED */
|
||||
INTFLOAT band_energy;
|
||||
#if USE_FIXED
|
||||
|
||||
for (k = 0; k < off_len; k++) {
|
||||
ac->random_state = lcg_random(ac->random_state);
|
||||
#if USE_FIXED
|
||||
cfo[k] = ac->random_state >> 3;
|
||||
#else
|
||||
cfo[k] = ac->random_state;
|
||||
#endif /* USE_FIXED */
|
||||
}
|
||||
|
||||
#if USE_FIXED
|
||||
band_energy = ac->fdsp->scalarproduct_fixed(cfo, cfo, off_len);
|
||||
band_energy = fixed_sqrt(band_energy, 31);
|
||||
noise_scale(cfo, sf[idx], band_energy, off_len);
|
||||
#else
|
||||
float scale;
|
||||
|
||||
for (k = 0; k < off_len; k++) {
|
||||
ac->random_state = lcg_random(ac->random_state);
|
||||
cfo[k] = ac->random_state;
|
||||
}
|
||||
|
||||
band_energy = ac->fdsp->scalarproduct_float(cfo, cfo, off_len);
|
||||
scale = sf[idx] / sqrtf(band_energy);
|
||||
ac->fdsp->vector_fmul_scalar(cfo, cfo, scale, off_len);
|
||||
@@ -2492,9 +2493,6 @@ static void apply_tns(INTFLOAT coef_param[1024], TemporalNoiseShaping *tns,
|
||||
INTFLOAT tmp[TNS_MAX_ORDER+1];
|
||||
UINTFLOAT *coef = coef_param;
|
||||
|
||||
if(!mmm)
|
||||
return;
|
||||
|
||||
for (w = 0; w < ics->num_windows; w++) {
|
||||
bottom = ics->num_swb;
|
||||
for (filt = 0; filt < tns->n_filt[w]; filt++) {
|
||||
|
||||
@@ -54,10 +54,10 @@ static void ps_hybrid_analysis_c(INTFLOAT (*out)[2], INTFLOAT (*in)[2],
|
||||
INT64FLOAT sum_im = (INT64FLOAT)filter[i][6][0] * in[6][1];
|
||||
|
||||
for (j = 0; j < 6; j++) {
|
||||
INT64FLOAT in0_re = in[j][0];
|
||||
INT64FLOAT in0_im = in[j][1];
|
||||
INT64FLOAT in1_re = in[12-j][0];
|
||||
INT64FLOAT in1_im = in[12-j][1];
|
||||
INTFLOAT in0_re = in[j][0];
|
||||
INTFLOAT in0_im = in[j][1];
|
||||
INTFLOAT in1_re = in[12-j][0];
|
||||
INTFLOAT in1_im = in[12-j][1];
|
||||
sum_re += (INT64FLOAT)filter[i][j][0] * (in0_re + in1_re) -
|
||||
(INT64FLOAT)filter[i][j][1] * (in0_im - in1_im);
|
||||
sum_im += (INT64FLOAT)filter[i][j][0] * (in0_im + in1_im) +
|
||||
|
||||
@@ -208,9 +208,6 @@ static int aic_decode_coeffs(GetBitContext *gb, int16_t *dst,
|
||||
int mb, idx;
|
||||
unsigned val;
|
||||
|
||||
if (get_bits_left(gb) < 5)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
has_skips = get_bits1(gb);
|
||||
coeff_type = get_bits1(gb);
|
||||
coeff_bits = get_bits(gb, 3);
|
||||
|
||||
+1
-1
@@ -306,7 +306,7 @@ static int decode_element(AVCodecContext *avctx, AVFrame *frame, int ch_index,
|
||||
rice_history_mult[ch] = get_bits(&alac->gb, 3);
|
||||
lpc_order[ch] = get_bits(&alac->gb, 5);
|
||||
|
||||
if (lpc_order[ch] >= alac->max_samples_per_frame || !lpc_quant[ch])
|
||||
if (lpc_order[ch] >= alac->max_samples_per_frame)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
/* read the predictor table */
|
||||
|
||||
+12
-23
@@ -487,7 +487,7 @@ static void parse_bs_info(const uint32_t bs_info, unsigned int n,
|
||||
static int32_t decode_rice(GetBitContext *gb, unsigned int k)
|
||||
{
|
||||
int max = get_bits_left(gb) - k;
|
||||
unsigned q = get_unary(gb, 0, max);
|
||||
int q = get_unary(gb, 0, max);
|
||||
int r = k ? get_bits1(gb) : !(q & 1);
|
||||
|
||||
if (k > 1) {
|
||||
@@ -767,8 +767,8 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
|
||||
if (*bd->use_ltp) {
|
||||
int r, c;
|
||||
|
||||
bd->ltp_gain[0] = decode_rice(gb, 1) * 8;
|
||||
bd->ltp_gain[1] = decode_rice(gb, 2) * 8;
|
||||
bd->ltp_gain[0] = decode_rice(gb, 1) << 3;
|
||||
bd->ltp_gain[1] = decode_rice(gb, 2) << 3;
|
||||
|
||||
r = get_unary(gb, 0, 4);
|
||||
c = get_bits(gb, 2);
|
||||
@@ -779,8 +779,8 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
|
||||
|
||||
bd->ltp_gain[2] = ltp_gain_values[r][c];
|
||||
|
||||
bd->ltp_gain[3] = decode_rice(gb, 2) * 8;
|
||||
bd->ltp_gain[4] = decode_rice(gb, 1) * 8;
|
||||
bd->ltp_gain[3] = decode_rice(gb, 2) << 3;
|
||||
bd->ltp_gain[4] = decode_rice(gb, 1) << 3;
|
||||
|
||||
*bd->ltp_lag = get_bits(gb, ctx->ltp_lag_length);
|
||||
*bd->ltp_lag += FFMAX(4, opt_order + 1);
|
||||
@@ -789,20 +789,14 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
|
||||
|
||||
// read first value and residuals in case of a random access block
|
||||
if (bd->ra_block) {
|
||||
start = FFMIN(opt_order, 3);
|
||||
av_assert0(sb_length <= sconf->frame_length);
|
||||
if (sb_length <= start) {
|
||||
// opt_order or sb_length may be corrupted, either way this is unsupported and not well defined in the specification
|
||||
av_log(avctx, AV_LOG_ERROR, "Sub block length smaller or equal start\n");
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
|
||||
if (opt_order)
|
||||
bd->raw_samples[0] = decode_rice(gb, avctx->bits_per_raw_sample - 4);
|
||||
if (opt_order > 1)
|
||||
bd->raw_samples[1] = decode_rice(gb, FFMIN(s[0] + 3, ctx->s_max));
|
||||
if (opt_order > 2)
|
||||
bd->raw_samples[2] = decode_rice(gb, FFMIN(s[0] + 1, ctx->s_max));
|
||||
|
||||
start = FFMIN(opt_order, 3);
|
||||
}
|
||||
|
||||
// read all residuals
|
||||
@@ -867,7 +861,7 @@ static int read_var_block_data(ALSDecContext *ctx, ALSBlockData *bd)
|
||||
res >>= 1;
|
||||
|
||||
if (cur_k) {
|
||||
res *= 1U << cur_k;
|
||||
res *= 1 << cur_k;
|
||||
res |= get_bits_long(gb, cur_k);
|
||||
}
|
||||
}
|
||||
@@ -1039,7 +1033,7 @@ static int decode_block(ALSDecContext *ctx, ALSBlockData *bd)
|
||||
|
||||
if (*bd->shift_lsbs)
|
||||
for (smp = 0; smp < bd->block_length; smp++)
|
||||
bd->raw_samples[smp] = (unsigned)bd->raw_samples[smp] << *bd->shift_lsbs;
|
||||
bd->raw_samples[smp] <<= *bd->shift_lsbs;
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1385,9 +1379,6 @@ static SoftFloat_IEEE754 multiply(SoftFloat_IEEE754 a, SoftFloat_IEEE754 b) {
|
||||
mantissa_temp = (uint64_t)a.mant * (uint64_t)b.mant;
|
||||
mask_64 = (uint64_t)0x1 << 47;
|
||||
|
||||
if (!mantissa_temp)
|
||||
return FLOAT_0;
|
||||
|
||||
// Count the valid bit count
|
||||
while (!(mantissa_temp & mask_64) && mask_64) {
|
||||
bit_count--;
|
||||
@@ -1805,11 +1796,11 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame_ptr,
|
||||
if (!ctx->cs_switch) { \
|
||||
for (sample = 0; sample < ctx->cur_frame_length; sample++) \
|
||||
for (c = 0; c < avctx->channels; c++) \
|
||||
*dest++ = ctx->raw_samples[c][sample] * (1U << shift); \
|
||||
*dest++ = ctx->raw_samples[c][sample] << shift; \
|
||||
} else { \
|
||||
for (sample = 0; sample < ctx->cur_frame_length; sample++) \
|
||||
for (c = 0; c < avctx->channels; c++) \
|
||||
*dest++ = ctx->raw_samples[sconf->chan_pos[c]][sample] * (1U << shift); \
|
||||
*dest++ = ctx->raw_samples[sconf->chan_pos[c]][sample] << shift; \
|
||||
} \
|
||||
}
|
||||
|
||||
@@ -1993,8 +1984,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
|
||||
// allocate quantized parcor coefficient buffer
|
||||
num_buffers = sconf->mc_coding ? avctx->channels : 1;
|
||||
if (num_buffers * (uint64_t)num_buffers > INT_MAX) // protect chan_data_buffer allocation
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
ctx->quant_cof = av_malloc_array(num_buffers, sizeof(*ctx->quant_cof));
|
||||
ctx->lpc_cof = av_malloc_array(num_buffers, sizeof(*ctx->lpc_cof));
|
||||
@@ -2127,6 +2116,7 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
return 0;
|
||||
|
||||
fail:
|
||||
decode_end(avctx);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@@ -2152,5 +2142,4 @@ AVCodec ff_als_decoder = {
|
||||
.decode = decode_frame,
|
||||
.flush = flush,
|
||||
.capabilities = AV_CODEC_CAP_SUBFRAMES | AV_CODEC_CAP_DR1,
|
||||
.caps_internal = FF_CODEC_CAP_INIT_CLEANUP,
|
||||
};
|
||||
|
||||
+1
-1
@@ -460,7 +460,7 @@ static inline void update_rice(APERice *rice, unsigned int x)
|
||||
|
||||
if (rice->ksum < lim)
|
||||
rice->k--;
|
||||
else if (rice->ksum >= (1 << (rice->k + 5)) && rice->k < 24)
|
||||
else if (rice->ksum >= (1 << (rice->k + 5)))
|
||||
rice->k++;
|
||||
}
|
||||
|
||||
|
||||
@@ -71,8 +71,6 @@ typedef struct ATRAC9BlockData {
|
||||
int cpe_base_channel;
|
||||
int is_signs[30];
|
||||
|
||||
int reuseable;
|
||||
|
||||
} ATRAC9BlockData;
|
||||
|
||||
typedef struct ATRAC9Context {
|
||||
@@ -202,8 +200,6 @@ static inline int parse_band_ext(ATRAC9Context *s, ATRAC9BlockData *b,
|
||||
int ext_band = 0;
|
||||
|
||||
if (b->has_band_ext) {
|
||||
if (b->q_unit_cnt < 13)
|
||||
return AVERROR_INVALIDDATA;
|
||||
ext_band = at9_tab_band_ext_group[b->q_unit_cnt - 13][2];
|
||||
if (stereo) {
|
||||
b->channel[1].band_ext = get_bits(gb, 2);
|
||||
@@ -672,7 +668,6 @@ static int atrac9_decode_block(ATRAC9Context *s, GetBitContext *gb,
|
||||
if (!reuse_params) {
|
||||
int stereo_band, ext_band;
|
||||
const int min_band_count = s->samplerate_idx > 7 ? 1 : 3;
|
||||
b->reuseable = 0;
|
||||
b->band_count = get_bits(gb, 4) + min_band_count;
|
||||
b->q_unit_cnt = at9_tab_band_q_unit_map[b->band_count];
|
||||
|
||||
@@ -704,11 +699,6 @@ static int atrac9_decode_block(ATRAC9Context *s, GetBitContext *gb,
|
||||
}
|
||||
b->band_ext_q_unit = at9_tab_band_q_unit_map[ext_band];
|
||||
}
|
||||
b->reuseable = 1;
|
||||
}
|
||||
if (!b->reuseable) {
|
||||
av_log(s->avctx, AV_LOG_ERROR, "invalid block reused!\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
/* Calculate bit alloc gradient */
|
||||
|
||||
@@ -68,7 +68,8 @@ static int av1_parser_parse(AVCodecParserContext *ctx,
|
||||
|
||||
ret = ff_cbs_read(s->cbc, td, avctx->extradata, avctx->extradata_size);
|
||||
if (ret < 0) {
|
||||
av_log(avctx, AV_LOG_WARNING, "Failed to parse extradata.\n");
|
||||
av_log(avctx, AV_LOG_ERROR, "Failed to parse extradata.\n");
|
||||
goto end;
|
||||
}
|
||||
|
||||
ff_cbs_fragment_uninit(s->cbc, td);
|
||||
|
||||
@@ -1321,7 +1321,7 @@ enum AVPacketSideDataType {
|
||||
AV_PKT_DATA_METADATA_UPDATE,
|
||||
|
||||
/**
|
||||
* MPEGTS stream ID as uint8_t, this is required to pass the stream ID
|
||||
* MPEGTS stream ID, this is required to pass the stream ID
|
||||
* information from the demuxer to the corresponding muxer.
|
||||
*/
|
||||
AV_PKT_DATA_MPEGTS_STREAM_ID,
|
||||
|
||||
@@ -109,11 +109,6 @@ static int bethsoftvid_decode_frame(AVCodecContext *avctx,
|
||||
if(yoffset >= avctx->height)
|
||||
return AVERROR_INVALIDDATA;
|
||||
dst += vid->frame->linesize[0] * yoffset;
|
||||
case VIDEO_P_FRAME:
|
||||
case VIDEO_I_FRAME:
|
||||
break;
|
||||
default:
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
// main code
|
||||
|
||||
+6
-6
@@ -702,15 +702,15 @@ static int read_dct_coeffs(GetBitContext *gb, int32_t block[64],
|
||||
return quant_idx;
|
||||
}
|
||||
|
||||
static void unquantize_dct_coeffs(int32_t block[64], const uint32_t quant[64],
|
||||
static void unquantize_dct_coeffs(int32_t block[64], const int32_t quant[64],
|
||||
int coef_count, int coef_idx[64],
|
||||
const uint8_t *scan)
|
||||
{
|
||||
int i;
|
||||
block[0] = (int)(block[0] * quant[0]) >> 11;
|
||||
block[0] = (block[0] * quant[0]) >> 11;
|
||||
for (i = 0; i < coef_count; i++) {
|
||||
int idx = coef_idx[i];
|
||||
block[scan[idx]] = (int)(block[scan[idx]] * quant[idx]) >> 11;
|
||||
block[scan[idx]] = (block[scan[idx]] * quant[idx]) >> 11;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1335,13 +1335,13 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
}
|
||||
c->avctx = avctx;
|
||||
|
||||
if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0)
|
||||
return ret;
|
||||
|
||||
c->last = av_frame_alloc();
|
||||
if (!c->last)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
if ((ret = av_image_check_size(avctx->width, avctx->height, 0, avctx)) < 0)
|
||||
return ret;
|
||||
|
||||
avctx->pix_fmt = c->has_alpha ? AV_PIX_FMT_YUVA420P : AV_PIX_FMT_YUV420P;
|
||||
avctx->color_range = c->version == 'k' ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG;
|
||||
|
||||
|
||||
@@ -33,22 +33,20 @@
|
||||
#define A3 3784
|
||||
#define A4 -5352
|
||||
|
||||
#define MUL(X,Y) ((int)((unsigned)(X) * (Y)) >> 11)
|
||||
|
||||
#define IDCT_TRANSFORM(dest,s0,s1,s2,s3,s4,s5,s6,s7,d0,d1,d2,d3,d4,d5,d6,d7,munge,src) {\
|
||||
const int a0 = (src)[s0] + (src)[s4]; \
|
||||
const int a1 = (src)[s0] - (src)[s4]; \
|
||||
const int a2 = (src)[s2] + (src)[s6]; \
|
||||
const int a3 = MUL(A1, (src)[s2] - (src)[s6]); \
|
||||
const int a3 = (A1*((src)[s2] - (src)[s6])) >> 11; \
|
||||
const int a4 = (src)[s5] + (src)[s3]; \
|
||||
const int a5 = (src)[s5] - (src)[s3]; \
|
||||
const int a6 = (src)[s1] + (src)[s7]; \
|
||||
const int a7 = (src)[s1] - (src)[s7]; \
|
||||
const int b0 = a4 + a6; \
|
||||
const int b1 = MUL(A3, a5 + a7); \
|
||||
const int b2 = MUL(A4, a5) - b0 + b1; \
|
||||
const int b3 = MUL(A1, a6 - a4) - b2; \
|
||||
const int b4 = MUL(A2, a7) + b3 - b1; \
|
||||
const int b1 = (A3*(a5 + a7)) >> 11; \
|
||||
const int b2 = ((A4*a5) >> 11) - b0 + b1; \
|
||||
const int b3 = (A1*(a6 - a4) >> 11) - b2; \
|
||||
const int b4 = ((A2*a7) >> 11) + b3 - b1; \
|
||||
(dest)[d0] = munge(a0+a2 +b0); \
|
||||
(dest)[d1] = munge(a1+a3-a2+b2); \
|
||||
(dest)[d2] = munge(a1-a3+a2+b3); \
|
||||
|
||||
@@ -63,10 +63,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
av_log(avctx, AV_LOG_ERROR, "not enough extradata\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
if (!s->font_height) {
|
||||
av_log(avctx, AV_LOG_ERROR, "invalid font height\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
} else {
|
||||
s->font_height = 8;
|
||||
s->flags = 0;
|
||||
|
||||
@@ -188,9 +188,8 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes,
|
||||
}
|
||||
for (k = 0; k < nb; k++) {
|
||||
int bits = table[j][1];
|
||||
int oldsym = table[j][0];
|
||||
ff_dlog(NULL, "%4x: code=%d n=%d\n", j, i, n);
|
||||
if ((bits || oldsym) && (bits != n || oldsym != symbol)) {
|
||||
if (bits != 0 && bits != n) {
|
||||
av_log(NULL, AV_LOG_ERROR, "incorrect codes\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
@@ -227,10 +226,6 @@ static int build_table(VLC *vlc, int table_nb_bits, int nb_codes,
|
||||
/* note: realloc has been done, so reload tables */
|
||||
table = (volatile VLC_TYPE (*)[2])&vlc->table[table_index];
|
||||
table[j][0] = index; //code
|
||||
if (table[j][0] != index) {
|
||||
avpriv_request_sample(NULL, "strange codes");
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
i = k-1;
|
||||
}
|
||||
}
|
||||
|
||||
+1
-4
@@ -291,7 +291,7 @@ static int bmp_decode_frame(AVCodecContext *avctx,
|
||||
case 1:
|
||||
for (i = 0; i < avctx->height; i++) {
|
||||
int j;
|
||||
for (j = 0; j < avctx->width >> 3; j++) {
|
||||
for (j = 0; j < n; j++) {
|
||||
ptr[j*8+0] = buf[j] >> 7;
|
||||
ptr[j*8+1] = (buf[j] >> 6) & 1;
|
||||
ptr[j*8+2] = (buf[j] >> 5) & 1;
|
||||
@@ -301,9 +301,6 @@ static int bmp_decode_frame(AVCodecContext *avctx,
|
||||
ptr[j*8+6] = (buf[j] >> 1) & 1;
|
||||
ptr[j*8+7] = buf[j] & 1;
|
||||
}
|
||||
for (j = 0; j < (avctx->width & 7); j++) {
|
||||
ptr[avctx->width - (avctx->width & 7) + j] = buf[avctx->width >> 3] >> (7 - j) & 1;
|
||||
}
|
||||
buf += n;
|
||||
ptr += linesize;
|
||||
}
|
||||
|
||||
+8
-21
@@ -591,21 +591,14 @@ static int decode_residual_block(AVSContext *h, GetBitContext *gb,
|
||||
}
|
||||
|
||||
|
||||
static inline int decode_residual_chroma(AVSContext *h)
|
||||
static inline void decode_residual_chroma(AVSContext *h)
|
||||
{
|
||||
if (h->cbp & (1 << 4)) {
|
||||
int ret = decode_residual_block(h, &h->gb, chroma_dec, 0,
|
||||
if (h->cbp & (1 << 4))
|
||||
decode_residual_block(h, &h->gb, chroma_dec, 0,
|
||||
ff_cavs_chroma_qp[h->qp], h->cu, h->c_stride);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
if (h->cbp & (1 << 5)) {
|
||||
int ret = decode_residual_block(h, &h->gb, chroma_dec, 0,
|
||||
if (h->cbp & (1 << 5))
|
||||
decode_residual_block(h, &h->gb, chroma_dec, 0,
|
||||
ff_cavs_chroma_qp[h->qp], h->cv, h->c_stride);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static inline int decode_residual_inter(AVSContext *h)
|
||||
@@ -656,7 +649,6 @@ static int decode_mb_i(AVSContext *h, int cbp_code)
|
||||
uint8_t top[18];
|
||||
uint8_t *left = NULL;
|
||||
uint8_t *d;
|
||||
int ret;
|
||||
|
||||
ff_cavs_init_mb(h);
|
||||
|
||||
@@ -700,11 +692,8 @@ static int decode_mb_i(AVSContext *h, int cbp_code)
|
||||
ff_cavs_load_intra_pred_luma(h, top, &left, block);
|
||||
h->intra_pred_l[h->pred_mode_Y[scan3x3[block]]]
|
||||
(d, top, left, h->l_stride);
|
||||
if (h->cbp & (1<<block)) {
|
||||
ret = decode_residual_block(h, gb, intra_dec, 1, h->qp, d, h->l_stride);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
}
|
||||
if (h->cbp & (1<<block))
|
||||
decode_residual_block(h, gb, intra_dec, 1, h->qp, d, h->l_stride);
|
||||
}
|
||||
|
||||
/* chroma intra prediction */
|
||||
@@ -714,9 +703,7 @@ static int decode_mb_i(AVSContext *h, int cbp_code)
|
||||
h->intra_pred_c[pred_mode_uv](h->cv, &h->top_border_v[h->mbx * 10],
|
||||
h->left_border_v, h->c_stride);
|
||||
|
||||
ret = decode_residual_chroma(h);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
decode_residual_chroma(h);
|
||||
ff_cavs_filter(h, I_8X8);
|
||||
set_mv_intra(h);
|
||||
return 0;
|
||||
|
||||
+47
-69
@@ -29,67 +29,45 @@ static int cbs_av1_read_uvlc(CodedBitstreamContext *ctx, GetBitContext *gbc,
|
||||
const char *name, uint32_t *write_to,
|
||||
uint32_t range_min, uint32_t range_max)
|
||||
{
|
||||
uint32_t zeroes, bits_value, value;
|
||||
int position;
|
||||
uint32_t value;
|
||||
int position, zeroes, i, j;
|
||||
char bits[65];
|
||||
|
||||
if (ctx->trace_enable)
|
||||
position = get_bits_count(gbc);
|
||||
|
||||
zeroes = 0;
|
||||
zeroes = i = 0;
|
||||
while (1) {
|
||||
if (get_bits_left(gbc) < 1) {
|
||||
if (get_bits_left(gbc) < zeroes + 1) {
|
||||
av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid uvlc code at "
|
||||
"%s: bitstream ended.\n", name);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
if (get_bits1(gbc))
|
||||
if (get_bits1(gbc)) {
|
||||
bits[i++] = '1';
|
||||
break;
|
||||
++zeroes;
|
||||
} else {
|
||||
bits[i++] = '0';
|
||||
++zeroes;
|
||||
}
|
||||
}
|
||||
|
||||
if (zeroes >= 32) {
|
||||
value = MAX_UINT_BITS(32);
|
||||
} else {
|
||||
if (get_bits_left(gbc) < zeroes) {
|
||||
av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid uvlc code at "
|
||||
"%s: bitstream ended.\n", name);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
value = get_bits_long(gbc, zeroes);
|
||||
|
||||
bits_value = get_bits_long(gbc, zeroes);
|
||||
value = bits_value + (UINT32_C(1) << zeroes) - 1;
|
||||
for (j = 0; j < zeroes; j++)
|
||||
bits[i++] = (value >> (zeroes - j - 1) & 1) ? '1' : '0';
|
||||
|
||||
value += (1 << zeroes) - 1;
|
||||
}
|
||||
|
||||
if (ctx->trace_enable) {
|
||||
char bits[65];
|
||||
int i, j, k;
|
||||
|
||||
if (zeroes >= 32) {
|
||||
while (zeroes > 32) {
|
||||
k = FFMIN(zeroes - 32, 32);
|
||||
for (i = 0; i < k; i++)
|
||||
bits[i] = '0';
|
||||
bits[i] = 0;
|
||||
ff_cbs_trace_syntax_element(ctx, position, name,
|
||||
NULL, bits, 0);
|
||||
zeroes -= k;
|
||||
position += k;
|
||||
}
|
||||
}
|
||||
|
||||
for (i = 0; i < zeroes; i++)
|
||||
bits[i] = '0';
|
||||
bits[i++] = '1';
|
||||
|
||||
if (zeroes < 32) {
|
||||
for (j = 0; j < zeroes; j++)
|
||||
bits[i++] = (bits_value >> (zeroes - j - 1) & 1) ? '1' : '0';
|
||||
}
|
||||
|
||||
bits[i] = 0;
|
||||
ff_cbs_trace_syntax_element(ctx, position, name,
|
||||
NULL, bits, value);
|
||||
ff_cbs_trace_syntax_element(ctx, position, name, NULL,
|
||||
bits, value);
|
||||
}
|
||||
|
||||
if (value < range_min || value > range_max) {
|
||||
@@ -211,26 +189,30 @@ static int cbs_av1_read_su(CodedBitstreamContext *ctx, GetBitContext *gbc,
|
||||
int width, const char *name,
|
||||
const int *subscripts, int32_t *write_to)
|
||||
{
|
||||
int position;
|
||||
uint32_t magnitude;
|
||||
int position, sign;
|
||||
int32_t value;
|
||||
|
||||
if (ctx->trace_enable)
|
||||
position = get_bits_count(gbc);
|
||||
|
||||
if (get_bits_left(gbc) < width) {
|
||||
if (get_bits_left(gbc) < width + 1) {
|
||||
av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid signed value at "
|
||||
"%s: bitstream ended.\n", name);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
value = get_sbits(gbc, width);
|
||||
magnitude = get_bits(gbc, width);
|
||||
sign = get_bits1(gbc);
|
||||
value = sign ? -(int32_t)magnitude : magnitude;
|
||||
|
||||
if (ctx->trace_enable) {
|
||||
char bits[33];
|
||||
int i;
|
||||
for (i = 0; i < width; i++)
|
||||
bits[i] = value & (1 << (width - i - 1)) ? '1' : '0';
|
||||
bits[i] = 0;
|
||||
bits[i] = magnitude >> (width - i - 1) & 1 ? '1' : '0';
|
||||
bits[i] = sign ? '1' : '0';
|
||||
bits[i + 1] = 0;
|
||||
|
||||
ff_cbs_trace_syntax_element(ctx, position,
|
||||
name, subscripts, bits, value);
|
||||
@@ -244,21 +226,29 @@ static int cbs_av1_write_su(CodedBitstreamContext *ctx, PutBitContext *pbc,
|
||||
int width, const char *name,
|
||||
const int *subscripts, int32_t value)
|
||||
{
|
||||
if (put_bits_left(pbc) < width)
|
||||
uint32_t magnitude;
|
||||
int sign;
|
||||
|
||||
if (put_bits_left(pbc) < width + 1)
|
||||
return AVERROR(ENOSPC);
|
||||
|
||||
sign = value < 0;
|
||||
magnitude = sign ? -value : value;
|
||||
|
||||
if (ctx->trace_enable) {
|
||||
char bits[33];
|
||||
int i;
|
||||
for (i = 0; i < width; i++)
|
||||
bits[i] = value & (1 << (width - i - 1)) ? '1' : '0';
|
||||
bits[i] = 0;
|
||||
bits[i] = magnitude >> (width - i - 1) & 1 ? '1' : '0';
|
||||
bits[i] = sign ? '1' : '0';
|
||||
bits[i + 1] = 0;
|
||||
|
||||
ff_cbs_trace_syntax_element(ctx, put_bits_count(pbc),
|
||||
name, subscripts, bits, value);
|
||||
}
|
||||
|
||||
put_sbits(pbc, width, value);
|
||||
put_bits(pbc, width, magnitude);
|
||||
put_bits(pbc, 1, sign);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -960,7 +950,7 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx,
|
||||
|
||||
if (obu->header.obu_extension_flag) {
|
||||
priv->temporal_id = obu->header.temporal_id;
|
||||
priv->spatial_id = obu->header.spatial_id;
|
||||
priv->spatial_id = obu->header.temporal_id;
|
||||
|
||||
if (obu->header.obu_type != AV1_OBU_SEQUENCE_HEADER &&
|
||||
obu->header.obu_type != AV1_OBU_TEMPORAL_DELIMITER &&
|
||||
@@ -1006,10 +996,7 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx,
|
||||
case AV1_OBU_REDUNDANT_FRAME_HEADER:
|
||||
{
|
||||
err = cbs_av1_read_frame_header_obu(ctx, &gbc,
|
||||
&obu->obu.frame_header,
|
||||
obu->header.obu_type ==
|
||||
AV1_OBU_REDUNDANT_FRAME_HEADER,
|
||||
unit->data_ref);
|
||||
&obu->obu.frame_header);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
@@ -1029,8 +1016,7 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx,
|
||||
break;
|
||||
case AV1_OBU_FRAME:
|
||||
{
|
||||
err = cbs_av1_read_frame_obu(ctx, &gbc, &obu->obu.frame,
|
||||
unit->data_ref);
|
||||
err = cbs_av1_read_frame_obu(ctx, &gbc, &obu->obu.frame);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@@ -1071,12 +1057,8 @@ static int cbs_av1_read_unit(CodedBitstreamContext *ctx,
|
||||
if (obu->obu_size > 0 &&
|
||||
obu->header.obu_type != AV1_OBU_TILE_GROUP &&
|
||||
obu->header.obu_type != AV1_OBU_FRAME) {
|
||||
int nb_bits = obu->obu_size * 8 + start_pos - end_pos;
|
||||
|
||||
if (nb_bits <= 0)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
err = cbs_av1_read_trailing_bits(ctx, &gbc, nb_bits);
|
||||
err = cbs_av1_read_trailing_bits(ctx, &gbc,
|
||||
obu->obu_size * 8 + start_pos - end_pos);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
@@ -1142,10 +1124,7 @@ static int cbs_av1_write_obu(CodedBitstreamContext *ctx,
|
||||
case AV1_OBU_REDUNDANT_FRAME_HEADER:
|
||||
{
|
||||
err = cbs_av1_write_frame_header_obu(ctx, pbc,
|
||||
&obu->obu.frame_header,
|
||||
obu->header.obu_type ==
|
||||
AV1_OBU_REDUNDANT_FRAME_HEADER,
|
||||
NULL);
|
||||
&obu->obu.frame_header);
|
||||
if (err < 0)
|
||||
return err;
|
||||
}
|
||||
@@ -1162,7 +1141,7 @@ static int cbs_av1_write_obu(CodedBitstreamContext *ctx,
|
||||
break;
|
||||
case AV1_OBU_FRAME:
|
||||
{
|
||||
err = cbs_av1_write_frame_obu(ctx, pbc, &obu->obu.frame, NULL);
|
||||
err = cbs_av1_write_frame_obu(ctx, pbc, &obu->obu.frame);
|
||||
if (err < 0)
|
||||
return err;
|
||||
|
||||
@@ -1200,7 +1179,7 @@ static int cbs_av1_write_obu(CodedBitstreamContext *ctx,
|
||||
if (err < 0)
|
||||
return err;
|
||||
end_pos = put_bits_count(pbc);
|
||||
obu->obu_size = header_size = (end_pos - start_pos + 7) / 8;
|
||||
obu->obu_size = (end_pos - start_pos + 7) / 8;
|
||||
} else {
|
||||
// Empty OBU.
|
||||
obu->obu_size = 0;
|
||||
@@ -1323,7 +1302,6 @@ static void cbs_av1_close(CodedBitstreamContext *ctx)
|
||||
CodedBitstreamAV1Context *priv = ctx->priv_data;
|
||||
|
||||
av_buffer_unref(&priv->sequence_header_ref);
|
||||
av_buffer_unref(&priv->frame_header_ref);
|
||||
|
||||
av_freep(&priv->write_buffer);
|
||||
}
|
||||
|
||||
@@ -87,8 +87,8 @@ typedef struct AV1RawSequenceHeader {
|
||||
uint8_t seq_level_idx[AV1_MAX_OPERATING_POINTS];
|
||||
uint8_t seq_tier[AV1_MAX_OPERATING_POINTS];
|
||||
uint8_t decoder_model_present_for_this_op[AV1_MAX_OPERATING_POINTS];
|
||||
uint32_t decoder_buffer_delay[AV1_MAX_OPERATING_POINTS];
|
||||
uint32_t encoder_buffer_delay[AV1_MAX_OPERATING_POINTS];
|
||||
uint8_t decoder_buffer_delay[AV1_MAX_OPERATING_POINTS];
|
||||
uint8_t encoder_buffer_delay[AV1_MAX_OPERATING_POINTS];
|
||||
uint8_t low_delay_mode_flag[AV1_MAX_OPERATING_POINTS];
|
||||
uint8_t initial_display_delay_present_for_this_op[AV1_MAX_OPERATING_POINTS];
|
||||
uint8_t initial_display_delay_minus_1[AV1_MAX_OPERATING_POINTS];
|
||||
@@ -170,7 +170,7 @@ typedef struct AV1RawFrameHeader {
|
||||
uint8_t last_frame_idx;
|
||||
uint8_t golden_frame_idx;
|
||||
int8_t ref_frame_idx[AV1_REFS_PER_FRAME];
|
||||
uint32_t delta_frame_id_minus1[AV1_REFS_PER_FRAME];
|
||||
uint8_t delta_frame_id_minus1;
|
||||
|
||||
uint8_t allow_high_precision_mv;
|
||||
uint8_t is_filter_switchable;
|
||||
@@ -210,7 +210,7 @@ typedef struct AV1RawFrameHeader {
|
||||
uint8_t segmentation_temporal_update;
|
||||
uint8_t segmentation_update_data;
|
||||
uint8_t feature_enabled[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
|
||||
int16_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
|
||||
uint8_t feature_value[AV1_MAX_SEGMENTS][AV1_SEG_LVL_MAX];
|
||||
|
||||
uint8_t delta_q_present;
|
||||
uint8_t delta_q_res;
|
||||
@@ -399,10 +399,7 @@ typedef struct CodedBitstreamAV1Context {
|
||||
AV1RawSequenceHeader *sequence_header;
|
||||
AVBufferRef *sequence_header_ref;
|
||||
|
||||
int seen_frame_header;
|
||||
AVBufferRef *frame_header_ref;
|
||||
uint8_t *frame_header;
|
||||
size_t frame_header_size;
|
||||
int seen_frame_header;
|
||||
|
||||
int temporal_id;
|
||||
int spatial_id;
|
||||
|
||||
@@ -1323,8 +1323,8 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
if (!current->frame_refs_short_signaling)
|
||||
fbs(3, ref_frame_idx[i], 1, i);
|
||||
if (seq->frame_id_numbers_present_flag) {
|
||||
fbs(seq->delta_frame_id_length_minus_2 + 2,
|
||||
delta_frame_id_minus1[i], 1, i);
|
||||
fb(seq->delta_frame_id_length_minus_2 + 2,
|
||||
delta_frame_id_minus1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1463,90 +1463,24 @@ static int FUNC(uncompressed_header)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
}
|
||||
|
||||
static int FUNC(frame_header_obu)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
AV1RawFrameHeader *current, int redundant,
|
||||
AVBufferRef *rw_buffer_ref)
|
||||
AV1RawFrameHeader *current)
|
||||
{
|
||||
CodedBitstreamAV1Context *priv = ctx->priv_data;
|
||||
int start_pos, fh_bits, fh_bytes, err;
|
||||
uint8_t *fh_start;
|
||||
int err;
|
||||
|
||||
HEADER("Frame Header");
|
||||
|
||||
if (priv->seen_frame_header) {
|
||||
if (!redundant) {
|
||||
av_log(ctx->log_ctx, AV_LOG_ERROR, "Invalid repeated "
|
||||
"frame header OBU.\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
} else {
|
||||
GetBitContext fh;
|
||||
size_t i, b;
|
||||
uint32_t val;
|
||||
|
||||
HEADER("Redundant Frame Header");
|
||||
|
||||
av_assert0(priv->frame_header_ref && priv->frame_header);
|
||||
|
||||
init_get_bits(&fh, priv->frame_header,
|
||||
priv->frame_header_size);
|
||||
for (i = 0; i < priv->frame_header_size; i += 8) {
|
||||
b = FFMIN(priv->frame_header_size - i, 8);
|
||||
val = get_bits(&fh, b);
|
||||
xf(b, frame_header_copy[i],
|
||||
val, val, val, 1, i / 8);
|
||||
}
|
||||
}
|
||||
// Nothing to do.
|
||||
} else {
|
||||
if (redundant)
|
||||
HEADER("Redundant Frame Header (used as Frame Header)");
|
||||
else
|
||||
HEADER("Frame Header");
|
||||
|
||||
priv->seen_frame_header = 1;
|
||||
|
||||
#ifdef READ
|
||||
start_pos = get_bits_count(rw);
|
||||
#else
|
||||
start_pos = put_bits_count(rw);
|
||||
#endif
|
||||
|
||||
CHECK(FUNC(uncompressed_header)(ctx, rw, current));
|
||||
|
||||
if (current->show_existing_frame) {
|
||||
priv->seen_frame_header = 0;
|
||||
} else {
|
||||
priv->seen_frame_header = 1;
|
||||
|
||||
av_buffer_unref(&priv->frame_header_ref);
|
||||
|
||||
#ifdef READ
|
||||
fh_bits = get_bits_count(rw) - start_pos;
|
||||
fh_start = (uint8_t*)rw->buffer + start_pos / 8;
|
||||
#else
|
||||
// Need to flush the bitwriter so that we can copy its output,
|
||||
// but use a copy so we don't affect the caller's structure.
|
||||
{
|
||||
PutBitContext tmp = *rw;
|
||||
flush_put_bits(&tmp);
|
||||
}
|
||||
|
||||
fh_bits = put_bits_count(rw) - start_pos;
|
||||
fh_start = rw->buf + start_pos / 8;
|
||||
#endif
|
||||
fh_bytes = (fh_bits + 7) / 8;
|
||||
|
||||
priv->frame_header_size = fh_bits;
|
||||
|
||||
if (rw_buffer_ref) {
|
||||
priv->frame_header_ref = av_buffer_ref(rw_buffer_ref);
|
||||
if (!priv->frame_header_ref)
|
||||
return AVERROR(ENOMEM);
|
||||
priv->frame_header = fh_start;
|
||||
} else {
|
||||
priv->frame_header_ref =
|
||||
av_buffer_alloc(fh_bytes + AV_INPUT_BUFFER_PADDING_SIZE);
|
||||
if (!priv->frame_header_ref)
|
||||
return AVERROR(ENOMEM);
|
||||
priv->frame_header = priv->frame_header_ref->data;
|
||||
memcpy(priv->frame_header, fh_start, fh_bytes);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1590,13 +1524,11 @@ static int FUNC(tile_group_obu)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
}
|
||||
|
||||
static int FUNC(frame_obu)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
AV1RawFrame *current,
|
||||
AVBufferRef *rw_buffer_ref)
|
||||
AV1RawFrame *current)
|
||||
{
|
||||
int err;
|
||||
|
||||
CHECK(FUNC(frame_header_obu)(ctx, rw, ¤t->header,
|
||||
0, rw_buffer_ref));
|
||||
CHECK(FUNC(frame_header_obu)(ctx, rw, ¤t->header));
|
||||
|
||||
CHECK(FUNC(byte_alignment)(ctx, rw));
|
||||
|
||||
@@ -1637,18 +1569,15 @@ static int FUNC(metadata_hdr_mdcv)(CodedBitstreamContext *ctx, RWContext *rw,
|
||||
int err, i;
|
||||
|
||||
for (i = 0; i < 3; i++) {
|
||||
fbs(16, primary_chromaticity_x[i], 1, i);
|
||||
fbs(16, primary_chromaticity_y[i], 1, i);
|
||||
fcs(16, primary_chromaticity_x[i], 0, 50000, 1, i);
|
||||
fcs(16, primary_chromaticity_y[i], 0, 50000, 1, i);
|
||||
}
|
||||
|
||||
fb(16, white_point_chromaticity_x);
|
||||
fb(16, white_point_chromaticity_y);
|
||||
fc(16, white_point_chromaticity_x, 0, 50000);
|
||||
fc(16, white_point_chromaticity_y, 0, 50000);
|
||||
|
||||
fc(32, luminance_max, 1, MAX_UINT_BITS(32));
|
||||
// luminance_min must be lower than luminance_max. Convert luminance_max from
|
||||
// 24.8 fixed point to 18.14 fixed point in order to compare them.
|
||||
fc(32, luminance_min, 0, FFMIN(((uint64_t)current->luminance_max << 6) - 1,
|
||||
MAX_UINT_BITS(32)));
|
||||
fc(32, luminance_min, 0, current->luminance_max >> 6);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -212,10 +212,10 @@ static const unsigned char pac2_attribs[32][3] = // Color, font, ident
|
||||
|
||||
struct Screen {
|
||||
/* +1 is used to compensate null character of string */
|
||||
uint8_t characters[SCREEN_ROWS+1][SCREEN_COLUMNS+1];
|
||||
uint8_t charsets[SCREEN_ROWS+1][SCREEN_COLUMNS+1];
|
||||
uint8_t colors[SCREEN_ROWS+1][SCREEN_COLUMNS+1];
|
||||
uint8_t fonts[SCREEN_ROWS+1][SCREEN_COLUMNS+1];
|
||||
uint8_t characters[SCREEN_ROWS][SCREEN_COLUMNS+1];
|
||||
uint8_t charsets[SCREEN_ROWS][SCREEN_COLUMNS+1];
|
||||
uint8_t colors[SCREEN_ROWS][SCREEN_COLUMNS+1];
|
||||
uint8_t fonts[SCREEN_ROWS][SCREEN_COLUMNS+1];
|
||||
/*
|
||||
* Bitmask of used rows; if a bit is not set, the
|
||||
* corresponding row is not used.
|
||||
|
||||
@@ -81,8 +81,11 @@ static av_cold int cdg_decode_init(AVCodecContext *avctx)
|
||||
return AVERROR(ENOMEM);
|
||||
cc->transparency = -1;
|
||||
|
||||
avctx->width = CDG_FULL_WIDTH;
|
||||
avctx->height = CDG_FULL_HEIGHT;
|
||||
avctx->pix_fmt = AV_PIX_FMT_PAL8;
|
||||
return ff_set_dimensions(avctx, CDG_FULL_WIDTH, CDG_FULL_HEIGHT);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void cdg_border_preset(CDGraphicsContext *cc, uint8_t *data)
|
||||
|
||||
@@ -555,9 +555,6 @@ static int clv_decode_frame(AVCodecContext *avctx, void *data,
|
||||
} else {
|
||||
int plane;
|
||||
|
||||
if (c->pmb_width * c->pmb_height > 8LL*(buf_size - bytestream2_tell(&gb)))
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if ((ret = ff_reget_buffer(avctx, c->pic)) < 0)
|
||||
return ret;
|
||||
|
||||
@@ -573,8 +570,6 @@ static int clv_decode_frame(AVCodecContext *avctx, void *data,
|
||||
|
||||
for (j = 0; j < c->pmb_height; j++) {
|
||||
for (i = 0; i < c->pmb_width; i++) {
|
||||
if (get_bits_left(&c->gb) <= 0)
|
||||
return AVERROR_INVALIDDATA;
|
||||
if (get_bits1(&c->gb)) {
|
||||
MV mv = mvi_predict(&c->mvi, i, j, zero_mv);
|
||||
|
||||
|
||||
+1
-1
@@ -63,7 +63,7 @@ static int cpia_decode_frame(AVCodecContext *avctx,
|
||||
uint8_t *y, *u, *v, *y_end, *u_end, *v_end;
|
||||
|
||||
// Check header
|
||||
if ( avpkt->size < FRAME_HEADER_SIZE + avctx->height * 3
|
||||
if ( avpkt->size < FRAME_HEADER_SIZE
|
||||
|| header[0] != MAGIC_0 || header[1] != MAGIC_1
|
||||
|| (header[17] != SUBSAMPLE_420 && header[17] != SUBSAMPLE_422)
|
||||
|| (header[18] != YUVORDER_YUYV && header[18] != YUVORDER_UYVY)
|
||||
|
||||
@@ -70,7 +70,6 @@ typedef struct CuvidContext
|
||||
int deint_mode;
|
||||
int deint_mode_current;
|
||||
int64_t prev_pts;
|
||||
int progressive_sequence;
|
||||
|
||||
int internal_error;
|
||||
int decoder_flushing;
|
||||
@@ -229,8 +228,6 @@ static int CUDAAPI cuvid_handle_video_sequence(void *opaque, CUVIDEOFORMAT* form
|
||||
? cudaVideoDeinterlaceMode_Weave
|
||||
: ctx->deint_mode;
|
||||
|
||||
ctx->progressive_sequence = format->progressive_sequence;
|
||||
|
||||
if (!format->progressive_sequence && ctx->deint_mode_current == cudaVideoDeinterlaceMode_Weave)
|
||||
avctx->flags |= AV_CODEC_FLAG_INTERLACED_DCT;
|
||||
else
|
||||
@@ -363,9 +360,6 @@ static int CUDAAPI cuvid_handle_picture_display(void *opaque, CUVIDPARSERDISPINF
|
||||
parsed_frame.dispinfo = *dispinfo;
|
||||
ctx->internal_error = 0;
|
||||
|
||||
// For some reason, dispinfo->progressive_frame is sometimes wrong.
|
||||
parsed_frame.dispinfo.progressive_frame = ctx->progressive_sequence;
|
||||
|
||||
if (ctx->deint_mode_current == cudaVideoDeinterlaceMode_Weave) {
|
||||
av_fifo_generic_write(ctx->frame_queue, &parsed_frame, sizeof(CuvidParsedFrame), NULL);
|
||||
} else {
|
||||
|
||||
@@ -355,8 +355,6 @@ static int dfa_decode_frame(AVCodecContext *avctx,
|
||||
|
||||
bytestream2_init(&gb, avpkt->data, avpkt->size);
|
||||
while (bytestream2_get_bytes_left(&gb) > 0) {
|
||||
if (bytestream2_get_bytes_left(&gb) < 12)
|
||||
return AVERROR_INVALIDDATA;
|
||||
bytestream2_skip(&gb, 4);
|
||||
chunk_size = bytestream2_get_le32(&gb);
|
||||
chunk_type = bytestream2_get_le32(&gb);
|
||||
|
||||
@@ -676,11 +676,6 @@ static int decode_component(DiracContext *s, int comp)
|
||||
b->length = get_interleaved_ue_golomb(&s->gb);
|
||||
if (b->length) {
|
||||
b->quant = get_interleaved_ue_golomb(&s->gb);
|
||||
if (b->quant > (DIRAC_MAX_QUANT_INDEX - 1)) {
|
||||
av_log(s->avctx, AV_LOG_ERROR, "Unsupported quant %d\n", b->quant);
|
||||
b->quant = 0;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
align_get_bits(&s->gb);
|
||||
b->coeff_data = s->gb.buffer + get_bits_count(&s->gb)/8;
|
||||
b->length = FFMIN(b->length, FFMAX(get_bits_left(&s->gb)/8, 0));
|
||||
@@ -1427,9 +1422,9 @@ static void global_mv(DiracContext *s, DiracBlock *block, int x, int y, int ref)
|
||||
int *b = s->globalmc[ref].pan_tilt;
|
||||
int *c = s->globalmc[ref].perspective;
|
||||
|
||||
int64_t m = (1<<ep) - (c[0]*(int64_t)x + c[1]*(int64_t)y);
|
||||
int64_t mx = m * (int64_t)((A[0][0] * (int64_t)x + A[0][1]*(int64_t)y) + (1LL<<ez) * b[0]);
|
||||
int64_t my = m * (int64_t)((A[1][0] * (int64_t)x + A[1][1]*(int64_t)y) + (1LL<<ez) * b[1]);
|
||||
int m = (1<<ep) - (c[0]*x + c[1]*y);
|
||||
int64_t mx = m * (int64_t)((A[0][0] * (int64_t)x + A[0][1]*(int64_t)y) + (1<<ez) * b[0]);
|
||||
int64_t my = m * (int64_t)((A[1][0] * (int64_t)x + A[1][1]*(int64_t)y) + (1<<ez) * b[1]);
|
||||
|
||||
block->u.mv[ref][0] = (mx + (1<<(ez+ep))) >> (ez+ep);
|
||||
block->u.mv[ref][1] = (my + (1<<(ez+ep))) >> (ez+ep);
|
||||
|
||||
@@ -1267,13 +1267,6 @@ static int dvbsub_parse_region_segment(AVCodecContext *avctx,
|
||||
display->y_pos = AV_RB16(buf) & 0xfff;
|
||||
buf += 2;
|
||||
|
||||
if (display->x_pos >= region->width ||
|
||||
display->y_pos >= region->height) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Object outside region\n");
|
||||
av_free(display);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
if ((object->type == 1 || object->type == 2) && buf+1 < buf_end) {
|
||||
display->fgcolor = *buf++;
|
||||
display->bgcolor = *buf++;
|
||||
|
||||
+1
-15
@@ -426,8 +426,7 @@ static int fill_optable(unsigned *table0, OpcodeTable *table1, int nb_elements)
|
||||
static int get_opcodes(GetByteContext *gb, uint32_t *table, uint8_t *dst, int op_size, int nb_elements)
|
||||
{
|
||||
OpcodeTable optable[1024];
|
||||
int sum, x, val, lshift, rshift, ret, i, idx;
|
||||
int64_t size_in_bits;
|
||||
int sum, x, val, lshift, rshift, ret, size_in_bits, i, idx;
|
||||
unsigned endoffset, newoffset, offset;
|
||||
unsigned next;
|
||||
uint8_t *src = (uint8_t *)gb->buffer;
|
||||
@@ -743,9 +742,6 @@ static int dxv_decompress_cocg(DXVContext *ctx, GetByteContext *gb,
|
||||
int skip0, skip1, oi0 = 0, oi1 = 0;
|
||||
int ret, state0 = 0, state1 = 0;
|
||||
|
||||
if (op_offset < 12)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
dst = tex_data;
|
||||
bytestream2_skip(gb, op_offset - 12);
|
||||
if (op_size0 > max_op_size0)
|
||||
@@ -1055,10 +1051,6 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
|
||||
avctx->pix_fmt = AV_PIX_FMT_RGBA;
|
||||
avctx->colorspace = AVCOL_SPC_RGB;
|
||||
|
||||
ctx->tex_funct = NULL;
|
||||
ctx->tex_funct_planar[0] = NULL;
|
||||
ctx->tex_funct_planar[1] = NULL;
|
||||
|
||||
tag = bytestream2_get_le32(gbc);
|
||||
switch (tag) {
|
||||
case MKBETAG('D', 'X', 'T', '1'):
|
||||
@@ -1200,12 +1192,6 @@ static int dxv_decode(AVCodecContext *avctx, void *data,
|
||||
ret = decompress_tex(avctx);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
{
|
||||
int w_block = avctx->coded_width / ctx->texture_block_w;
|
||||
int h_block = avctx->coded_height / ctx->texture_block_h;
|
||||
if (w_block * h_block * ctx->tex_step > ctx->tex_size * 8LL)
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
tframe.f = data;
|
||||
ret = ff_thread_get_buffer(avctx, &tframe, 0);
|
||||
|
||||
@@ -437,7 +437,7 @@ static void guess_mv(ERContext *s)
|
||||
}
|
||||
|
||||
if ((!(s->avctx->error_concealment&FF_EC_GUESS_MVS)) ||
|
||||
num_avail <= FFMAX(mb_width, mb_height) / 2) {
|
||||
num_avail <= mb_width / 2) {
|
||||
for (mb_y = 0; mb_y < mb_height; mb_y++) {
|
||||
for (mb_x = 0; mb_x < s->mb_width; mb_x++) {
|
||||
const int mb_xy = mb_x + mb_y * s->mb_stride;
|
||||
|
||||
@@ -1389,7 +1389,6 @@ static int decode_header(EXRContext *s, AVFrame *frame)
|
||||
if (*ch_gb.buffer == '.')
|
||||
ch_gb.buffer++; /* skip dot if not given */
|
||||
} else {
|
||||
layer_match = 0;
|
||||
av_log(s->avctx, AV_LOG_INFO,
|
||||
"Channel doesn't match layer : %s.\n", ch_gb.buffer);
|
||||
}
|
||||
@@ -1464,11 +1463,6 @@ static int decode_header(EXRContext *s, AVFrame *frame)
|
||||
}
|
||||
s->pixel_type = current_pixel_type;
|
||||
s->channel_offsets[channel_index] = s->current_channel_offset;
|
||||
} else if (channel_index >= 0) {
|
||||
av_log(s->avctx, AV_LOG_ERROR,
|
||||
"Multiple channels with index %d.\n", channel_index);
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
s->channels = av_realloc(s->channels,
|
||||
|
||||
@@ -113,12 +113,18 @@ static uint32_t lcg_next(uint32_t *s)
|
||||
return *s;
|
||||
}
|
||||
|
||||
static void lcg_seek(uint32_t *s, uint32_t dt)
|
||||
static void lcg_seek(uint32_t *s, int64_t dt)
|
||||
{
|
||||
uint32_t a, c, t = *s;
|
||||
|
||||
a = LCG_A;
|
||||
c = LCG_C;
|
||||
if (dt >= 0) {
|
||||
a = LCG_A;
|
||||
c = LCG_C;
|
||||
} else { /* coefficients for a step backward */
|
||||
a = LCG_AI;
|
||||
c = (uint32_t)(LCG_AI * LCG_C);
|
||||
dt = -dt;
|
||||
}
|
||||
while (dt) {
|
||||
if (dt & 1)
|
||||
t = a * t + c;
|
||||
@@ -215,7 +221,7 @@ static void wavesynth_seek(struct wavesynth_context *ws, int64_t ts)
|
||||
ws->next_inter = i;
|
||||
ws->next_ts = i < ws->nb_inter ? ws->inter[i].ts_start : INF_TS;
|
||||
*last = -1;
|
||||
lcg_seek(&ws->dither_state, (uint32_t)ts - ws->cur_ts);
|
||||
lcg_seek(&ws->dither_state, ts - ws->cur_ts);
|
||||
if (ws->pink_need) {
|
||||
int64_t pink_ts_cur = (ws->cur_ts + PINK_UNIT - 1) & ~(PINK_UNIT - 1);
|
||||
int64_t pink_ts_next = ts & ~(PINK_UNIT - 1);
|
||||
@@ -261,10 +267,7 @@ static int wavesynth_parse_extradata(AVCodecContext *avc)
|
||||
in->type = AV_RL32(edata + 16);
|
||||
in->channels = AV_RL32(edata + 20);
|
||||
edata += 24;
|
||||
if (in->ts_start < cur_ts ||
|
||||
in->ts_end <= in->ts_start ||
|
||||
(uint64_t)in->ts_end - in->ts_start > INT64_MAX
|
||||
)
|
||||
if (in->ts_start < cur_ts || in->ts_end <= in->ts_start)
|
||||
return AVERROR(EINVAL);
|
||||
cur_ts = in->ts_start;
|
||||
dt = in->ts_end - in->ts_start;
|
||||
|
||||
@@ -139,9 +139,6 @@ static int fic_decode_block(FICContext *ctx, GetBitContext *gb,
|
||||
{
|
||||
int i, num_coeff;
|
||||
|
||||
if (get_bits_left(gb) < 8)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
/* Is it a skip block? */
|
||||
if (get_bits1(gb)) {
|
||||
*is_p = 1;
|
||||
@@ -383,8 +380,6 @@ static int fic_decode_frame(AVCodecContext *avctx, void *data,
|
||||
slice_h = FFALIGN(avctx->height - ctx->slice_h * (nslices - 1), 16);
|
||||
} else {
|
||||
slice_size = AV_RB32(src + tsize + FIC_HEADER_SIZE + slice * 4 + 4);
|
||||
if (slice_size < slice_off)
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
if (slice_size < slice_off || slice_size > msize)
|
||||
|
||||
@@ -138,17 +138,6 @@ int avpriv_fits_header_parse_line(void *avcl, FITSHeader *header, const uint8_t
|
||||
case STATE_BITPIX:
|
||||
CHECK_KEYWORD("BITPIX");
|
||||
CHECK_VALUE("BITPIX", bitpix);
|
||||
|
||||
switch(header->bitpix) {
|
||||
case 8:
|
||||
case 16:
|
||||
case 32: case -32:
|
||||
case 64: case -64: break;
|
||||
default:
|
||||
av_log(avcl, AV_LOG_ERROR, "invalid value of BITPIX %d\n", header->bitpix); \
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
dict_set_if_not_null(metadata, keyword, value);
|
||||
|
||||
header->state = STATE_NAXIS;
|
||||
|
||||
@@ -143,7 +143,7 @@ static int fits_read_header(AVCodecContext *avctx, const uint8_t **ptr, FITSHead
|
||||
|
||||
size = abs(header->bitpix) >> 3;
|
||||
for (i = 0; i < header->naxis; i++) {
|
||||
if (size && header->naxisn[i] > SIZE_MAX / size) {
|
||||
if (header->naxisn[i] > SIZE_MAX / size) {
|
||||
av_log(avctx, AV_LOG_ERROR, "unsupported size of FITS image");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
@@ -168,14 +168,6 @@ static int fits_read_header(AVCodecContext *avctx, const uint8_t **ptr, FITSHead
|
||||
header->data_min = (header->data_min - header->bzero) / header->bscale;
|
||||
header->data_max = (header->data_max - header->bzero) / header->bscale;
|
||||
}
|
||||
if (!header->rgb && header->data_min >= header->data_max) {
|
||||
if (header->data_min > header->data_max) {
|
||||
av_log(avctx, AV_LOG_ERROR, "data min/max (%g %g) is invalid\n", header->data_min, header->data_max);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
av_log(avctx, AV_LOG_WARNING, "data min/max indicates a blank image\n");
|
||||
header->data_max ++;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -900,7 +900,7 @@ static int flic_decode_frame_24BPP(AVCodecContext *avctx,
|
||||
} else {
|
||||
if (bytestream2_tell(&g2) + 2*byte_run > stream_ptr_after_chunk)
|
||||
break;
|
||||
CHECK_PIXEL_PTR(3 * byte_run);
|
||||
CHECK_PIXEL_PTR(2 * byte_run);
|
||||
for (j = 0; j < byte_run; j++, pixel_countdown--) {
|
||||
pixel = bytestream2_get_le24(&g2);
|
||||
AV_WL24(&pixels[pixel_ptr], pixel);
|
||||
|
||||
@@ -402,9 +402,6 @@ static int decode_frame(AVCodecContext *avctx, void *data,
|
||||
AVFrame *frame = data;
|
||||
int ret, y, x;
|
||||
|
||||
if (avpkt->size < 8)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if ((ret = ff_get_buffer(avctx, frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
|
||||
+25
-68
@@ -72,64 +72,9 @@ static av_cold int gdv_decode_init(AVCodecContext *avctx)
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void scaleup(uint8_t *dst, const uint8_t *src, int w)
|
||||
{
|
||||
int x;
|
||||
for (x = 0; x < w - 7; x+=8) {
|
||||
dst[x + 0] =
|
||||
dst[x + 1] = src[(x>>1) + 0];
|
||||
dst[x + 2] =
|
||||
dst[x + 3] = src[(x>>1) + 1];
|
||||
dst[x + 4] =
|
||||
dst[x + 5] = src[(x>>1) + 2];
|
||||
dst[x + 6] =
|
||||
dst[x + 7] = src[(x>>1) + 3];
|
||||
}
|
||||
for (; x < w; x++) {
|
||||
dst[x] = src[(x>>1)];
|
||||
}
|
||||
}
|
||||
|
||||
static void scaleup_rev(uint8_t *dst, const uint8_t *src, int w)
|
||||
{
|
||||
int x;
|
||||
|
||||
for (x = w - 1; (x+1) & 7; x--) {
|
||||
dst[x] = src[(x>>1)];
|
||||
}
|
||||
for (x -= 7; x >= 0; x -= 8) {
|
||||
dst[x + 6] =
|
||||
dst[x + 7] = src[(x>>1) + 3];
|
||||
dst[x + 4] =
|
||||
dst[x + 5] = src[(x>>1) + 2];
|
||||
dst[x + 2] =
|
||||
dst[x + 3] = src[(x>>1) + 1];
|
||||
dst[x + 0] =
|
||||
dst[x + 1] = src[(x>>1) + 0];
|
||||
}
|
||||
}
|
||||
|
||||
static void scaledown(uint8_t *dst, const uint8_t *src, int w)
|
||||
{
|
||||
int x;
|
||||
for (x = 0; x < w - 7; x+=8) {
|
||||
dst[x + 0] = src[2*x + 0];
|
||||
dst[x + 1] = src[2*x + 2];
|
||||
dst[x + 2] = src[2*x + 4];
|
||||
dst[x + 3] = src[2*x + 6];
|
||||
dst[x + 4] = src[2*x + 8];
|
||||
dst[x + 5] = src[2*x +10];
|
||||
dst[x + 6] = src[2*x +12];
|
||||
dst[x + 7] = src[2*x +14];
|
||||
}
|
||||
for (; x < w; x++) {
|
||||
dst[x] = src[2*x];
|
||||
}
|
||||
}
|
||||
|
||||
static void rescale(GDVContext *gdv, uint8_t *dst, int w, int h, int scale_v, int scale_h)
|
||||
{
|
||||
int j, y;
|
||||
int j, y, x;
|
||||
|
||||
if ((gdv->scale_v == scale_v) && (gdv->scale_h == scale_h)) {
|
||||
return;
|
||||
@@ -141,7 +86,14 @@ static void rescale(GDVContext *gdv, uint8_t *dst, int w, int h, int scale_v, in
|
||||
uint8_t *dst1 = dst + PREAMBLE_SIZE + y * w;
|
||||
uint8_t *src1 = dst + PREAMBLE_SIZE + (y>>!!gdv->scale_h) * (w>>1);
|
||||
|
||||
scaleup_rev(dst1, src1, w);
|
||||
for (x = w - 1; x >= 0 && !(x&1); x--) {
|
||||
dst1[x] = src1[(x>>1)];
|
||||
}
|
||||
|
||||
for (x--; x >= 0; x-=2) {
|
||||
dst1[x ] =
|
||||
dst1[x+1] = src1[(x>>1)];
|
||||
}
|
||||
}
|
||||
} else if (gdv->scale_h) {
|
||||
for (j = 0; j < h; j++) {
|
||||
@@ -156,7 +108,9 @@ static void rescale(GDVContext *gdv, uint8_t *dst, int w, int h, int scale_v, in
|
||||
for (y = 0; y < (h>>1); y++) {
|
||||
uint8_t *dst1 = dst + PREAMBLE_SIZE + y * (w>>1);
|
||||
uint8_t *src1 = dst + PREAMBLE_SIZE + y*2 * w;
|
||||
scaledown(dst1, src1, w>>1);
|
||||
for (x = 0; x < (w>>1); x++) {
|
||||
dst1[x] = src1[x*2];
|
||||
}
|
||||
}
|
||||
} else if (scale_h) {
|
||||
for (y = 0; y < (h>>1); y++) {
|
||||
@@ -167,7 +121,9 @@ static void rescale(GDVContext *gdv, uint8_t *dst, int w, int h, int scale_v, in
|
||||
} else if (scale_v) {
|
||||
for (y = 0; y < h; y++) {
|
||||
uint8_t *dst1 = dst + PREAMBLE_SIZE + y * w;
|
||||
scaledown(dst1, dst1, w>>1);
|
||||
for (x = 0; x < (w>>1); x++) {
|
||||
dst1[x] = dst1[x*2];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -294,8 +250,6 @@ static int decompress_5(AVCodecContext *avctx, unsigned skip)
|
||||
|
||||
while (bytestream2_get_bytes_left_p(pb) > 0 && bytestream2_get_bytes_left(gb) > 0) {
|
||||
int tag = read_bits2(&bits, gb);
|
||||
if (bytestream2_get_bytes_left(gb) < 1)
|
||||
return AVERROR_INVALIDDATA;
|
||||
if (tag == 0) {
|
||||
bytestream2_put_byte(pb, bytestream2_get_byte(gb));
|
||||
} else if (tag == 1) {
|
||||
@@ -475,8 +429,6 @@ static int gdv_decode_frame(AVCodecContext *avctx, void *data,
|
||||
if (pal && pal_size == AVPALETTE_SIZE)
|
||||
memcpy(gdv->pal, pal, AVPALETTE_SIZE);
|
||||
|
||||
if (compression < 2 && bytestream2_get_bytes_left(gb) < 256*3)
|
||||
return AVERROR_INVALIDDATA;
|
||||
rescale(gdv, gdv->frame, avctx->width, avctx->height,
|
||||
!!(flags & 0x10), !!(flags & 0x20));
|
||||
|
||||
@@ -484,6 +436,8 @@ static int gdv_decode_frame(AVCodecContext *avctx, void *data,
|
||||
case 1:
|
||||
memset(gdv->frame + PREAMBLE_SIZE, 0, gdv->frame_size - PREAMBLE_SIZE);
|
||||
case 0:
|
||||
if (bytestream2_get_bytes_left(gb) < 256*3)
|
||||
return AVERROR_INVALIDDATA;
|
||||
for (i = 0; i < 256; i++) {
|
||||
unsigned r = bytestream2_get_byte(gb);
|
||||
unsigned g = bytestream2_get_byte(gb);
|
||||
@@ -527,16 +481,19 @@ static int gdv_decode_frame(AVCodecContext *avctx, void *data,
|
||||
}
|
||||
} else {
|
||||
int sidx = PREAMBLE_SIZE, didx = 0;
|
||||
int y;
|
||||
int y, x;
|
||||
|
||||
for (y = 0; y < avctx->height; y++) {
|
||||
if (!gdv->scale_v) {
|
||||
memcpy(dst + didx, gdv->frame + sidx, avctx->width);
|
||||
} else {
|
||||
uint8_t *dst2 = dst + didx;
|
||||
uint8_t *src2 = gdv->frame + sidx;
|
||||
|
||||
scaleup(dst2, src2, avctx->width);
|
||||
for (x = 0; x < avctx->width - 1; x+=2) {
|
||||
dst[didx + x ] =
|
||||
dst[didx + x + 1] = gdv->frame[sidx + (x>>1)];
|
||||
}
|
||||
for (; x < avctx->width; x++) {
|
||||
dst[didx + x] = gdv->frame[sidx + (x>>1)];
|
||||
}
|
||||
}
|
||||
if (!gdv->scale_h || ((y & 1) == 1)) {
|
||||
sidx += !gdv->scale_v ? avctx->width : avctx->width/2;
|
||||
|
||||
@@ -49,8 +49,6 @@ extern const uint8_t ff_interleaved_dirac_golomb_vlc_code[256];
|
||||
|
||||
/**
|
||||
* Read an unsigned Exp-Golomb code in the range 0 to 8190.
|
||||
*
|
||||
* @returns the read value or a negative error code.
|
||||
*/
|
||||
static inline int get_ue_golomb(GetBitContext *gb)
|
||||
{
|
||||
|
||||
@@ -156,8 +156,8 @@ void ff_h264_direct_ref_list_init(const H264Context *const h, H264SliceContext *
|
||||
av_log(h->avctx, AV_LOG_ERROR, "co located POCs unavailable\n");
|
||||
sl->col_parity = 1;
|
||||
} else
|
||||
sl->col_parity = (FFABS(col_poc[0] - (int64_t)cur_poc) >=
|
||||
FFABS(col_poc[1] - (int64_t)cur_poc));
|
||||
sl->col_parity = (FFABS(col_poc[0] - cur_poc) >=
|
||||
FFABS(col_poc[1] - cur_poc));
|
||||
ref1sidx =
|
||||
sidx = sl->col_parity;
|
||||
// FL -> FL & differ parity
|
||||
|
||||
@@ -296,8 +296,7 @@ int ff_h264_init_poc(int pic_field_poc[2], int *pic_poc,
|
||||
if (picture_structure == PICT_FRAME)
|
||||
field_poc[1] += pc->delta_poc_bottom;
|
||||
} else if (sps->poc_type == 1) {
|
||||
int abs_frame_num;
|
||||
int64_t expected_delta_per_poc_cycle, expectedpoc;
|
||||
int abs_frame_num, expected_delta_per_poc_cycle, expectedpoc;
|
||||
int i;
|
||||
|
||||
if (sps->poc_cycle_length != 0)
|
||||
|
||||
@@ -91,7 +91,7 @@ static int h264_redundant_pps_filter(AVBSFContext *bsf, AVPacket *out)
|
||||
if (nal->type == H264_NAL_PPS) {
|
||||
h264_redundant_pps_fixup_pps(ctx, nal->content);
|
||||
if (!au_has_sps) {
|
||||
av_log(bsf, AV_LOG_VERBOSE, "Deleting redundant PPS "
|
||||
av_log(ctx, AV_LOG_VERBOSE, "Deleting redundant PPS "
|
||||
"at %"PRId64".\n", in->pts);
|
||||
ff_cbs_delete_unit(ctx->input, au, i);
|
||||
}
|
||||
|
||||
@@ -678,7 +678,7 @@ static void implicit_weight_table(const H264Context *h, H264SliceContext *sl, in
|
||||
cur_poc = h->cur_pic_ptr->field_poc[h->picture_structure - 1];
|
||||
}
|
||||
if (sl->ref_count[0] == 1 && sl->ref_count[1] == 1 && !FRAME_MBAFF(h) &&
|
||||
sl->ref_list[0][0].poc + (int64_t)sl->ref_list[1][0].poc == 2LL * cur_poc) {
|
||||
sl->ref_list[0][0].poc + (int64_t)sl->ref_list[1][0].poc == 2 * cur_poc) {
|
||||
sl->pwt.use_weight = 0;
|
||||
sl->pwt.use_weight_chroma = 0;
|
||||
return;
|
||||
|
||||
+10
-13
@@ -1587,25 +1587,22 @@ int ff_hevc_decode_nal_pps(GetBitContext *gb, AVCodecContext *avctx,
|
||||
pps->entropy_coding_sync_enabled_flag = get_bits1(gb);
|
||||
|
||||
if (pps->tiles_enabled_flag) {
|
||||
int num_tile_columns_minus1 = get_ue_golomb(gb);
|
||||
int num_tile_rows_minus1 = get_ue_golomb(gb);
|
||||
|
||||
if (num_tile_columns_minus1 < 0 ||
|
||||
num_tile_columns_minus1 >= sps->ctb_width - 1) {
|
||||
pps->num_tile_columns = get_ue_golomb_long(gb) + 1;
|
||||
pps->num_tile_rows = get_ue_golomb_long(gb) + 1;
|
||||
if (pps->num_tile_columns <= 0 ||
|
||||
pps->num_tile_columns >= sps->width) {
|
||||
av_log(avctx, AV_LOG_ERROR, "num_tile_columns_minus1 out of range: %d\n",
|
||||
num_tile_columns_minus1);
|
||||
ret = num_tile_columns_minus1 < 0 ? num_tile_columns_minus1 : AVERROR_INVALIDDATA;
|
||||
pps->num_tile_columns - 1);
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto err;
|
||||
}
|
||||
if (num_tile_rows_minus1 < 0 ||
|
||||
num_tile_rows_minus1 >= sps->ctb_height - 1) {
|
||||
if (pps->num_tile_rows <= 0 ||
|
||||
pps->num_tile_rows >= sps->height) {
|
||||
av_log(avctx, AV_LOG_ERROR, "num_tile_rows_minus1 out of range: %d\n",
|
||||
num_tile_rows_minus1);
|
||||
ret = num_tile_rows_minus1 < 0 ? num_tile_rows_minus1 : AVERROR_INVALIDDATA;
|
||||
pps->num_tile_rows - 1);
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto err;
|
||||
}
|
||||
pps->num_tile_columns = num_tile_columns_minus1 + 1;
|
||||
pps->num_tile_rows = num_tile_rows_minus1 + 1;
|
||||
|
||||
pps->column_width = av_malloc_array(pps->num_tile_columns, sizeof(*pps->column_width));
|
||||
pps->row_height = av_malloc_array(pps->num_tile_rows, sizeof(*pps->row_height));
|
||||
|
||||
@@ -344,8 +344,8 @@ typedef struct HEVCPPS {
|
||||
uint8_t tiles_enabled_flag;
|
||||
uint8_t entropy_coding_sync_enabled_flag;
|
||||
|
||||
uint16_t num_tile_columns; ///< num_tile_columns_minus1 + 1
|
||||
uint16_t num_tile_rows; ///< num_tile_rows_minus1 + 1
|
||||
int num_tile_columns; ///< num_tile_columns_minus1 + 1
|
||||
int num_tile_rows; ///< num_tile_rows_minus1 + 1
|
||||
uint8_t uniform_spacing_flag;
|
||||
uint8_t loop_filter_across_tiles_enabled_flag;
|
||||
|
||||
|
||||
@@ -485,11 +485,6 @@ static int hls_slice_header(HEVCContext *s)
|
||||
|
||||
// Coded parameters
|
||||
sh->first_slice_in_pic_flag = get_bits1(gb);
|
||||
if (s->ref && sh->first_slice_in_pic_flag) {
|
||||
av_log(s->avctx, AV_LOG_ERROR, "Two slices reporting being the first in the same frame.\n");
|
||||
return 1; // This slice will be skiped later, do not corrupt state
|
||||
}
|
||||
|
||||
if ((IS_IDR(s) || IS_BLA(s)) && sh->first_slice_in_pic_flag) {
|
||||
s->seq_decode = (s->seq_decode + 1) & 0xff;
|
||||
s->max_ra = INT_MAX;
|
||||
@@ -2920,11 +2915,6 @@ static int decode_nal_unit(HEVCContext *s, const H2645NAL *nal)
|
||||
ret = hls_slice_header(s);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
if (ret == 1) {
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto fail;
|
||||
}
|
||||
|
||||
|
||||
if (
|
||||
(s->avctx->skip_frame >= AVDISCARD_BIDIR && s->sh.slice_type == HEVC_SLICE_B) ||
|
||||
|
||||
@@ -559,6 +559,8 @@ static av_always_inline int ff_hevc_nal_is_nonref(enum HEVCNALUnitType type)
|
||||
case HEVC_NAL_VCL_N10:
|
||||
case HEVC_NAL_VCL_N12:
|
||||
case HEVC_NAL_VCL_N14:
|
||||
case HEVC_NAL_BLA_N_LP:
|
||||
case HEVC_NAL_IDR_N_LP:
|
||||
return 1;
|
||||
break;
|
||||
default: break;
|
||||
|
||||
+2
-7
@@ -248,18 +248,13 @@ static int hqa_decode_frame(HQContext *ctx, AVFrame *pic, size_t data_size)
|
||||
int width, height, quant;
|
||||
const uint8_t *src = ctx->gbc.buffer;
|
||||
|
||||
if (bytestream2_get_bytes_left(&ctx->gbc) < 8 + 4*(num_slices + 1))
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
width = bytestream2_get_be16(&ctx->gbc);
|
||||
height = bytestream2_get_be16(&ctx->gbc);
|
||||
|
||||
ret = ff_set_dimensions(ctx->avctx, width, height);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ctx->avctx->coded_width = FFALIGN(width, 16);
|
||||
ctx->avctx->coded_height = FFALIGN(height, 16);
|
||||
ctx->avctx->width = width;
|
||||
ctx->avctx->height = height;
|
||||
ctx->avctx->bits_per_raw_sample = 8;
|
||||
ctx->avctx->pix_fmt = AV_PIX_FMT_YUVA422P;
|
||||
|
||||
|
||||
@@ -24,7 +24,6 @@
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/parseutils.h"
|
||||
#include "htmlsubtitles.h"
|
||||
#include <ctype.h>
|
||||
|
||||
static int html_color_parse(void *log_ctx, const char *str)
|
||||
{
|
||||
@@ -45,32 +44,14 @@ static void rstrip_spaces_buf(AVBPrint *buf)
|
||||
buf->str[--buf->len] = 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* Fast code for scanning text enclosed in braces. Functionally
|
||||
* equivalent to this sscanf call:
|
||||
*
|
||||
* sscanf(in, "{\\an%*1u}%n", &len) >= 0 && len > 0
|
||||
*/
|
||||
static int scanbraces(const char* in) {
|
||||
if (strncmp(in, "{\\an", 4) != 0) {
|
||||
return 0;
|
||||
}
|
||||
if (!isdigit(in[4])) {
|
||||
return 0;
|
||||
}
|
||||
if (in[5] != '}') {
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* skip all {\xxx} substrings except for {\an%d}
|
||||
and all microdvd like styles such as {Y:xxx} */
|
||||
static void handle_open_brace(AVBPrint *dst, const char **inp, int *an, int *closing_brace_missing)
|
||||
{
|
||||
int len = 0;
|
||||
const char *in = *inp;
|
||||
|
||||
*an += scanbraces(in);
|
||||
*an += sscanf(in, "{\\an%*1u}%n", &len) >= 0 && len > 0;
|
||||
|
||||
if (!*closing_brace_missing) {
|
||||
if ( (*an != 1 && in[1] == '\\')
|
||||
@@ -93,34 +74,6 @@ struct font_tag {
|
||||
uint32_t color;
|
||||
};
|
||||
|
||||
/*
|
||||
* Fast code for scanning the rest of a tag. Functionally equivalent to
|
||||
* this sscanf call:
|
||||
*
|
||||
* sscanf(in, "%127[^<>]>%n", buffer, lenp) == 2
|
||||
*/
|
||||
static int scantag(const char* in, char* buffer, int* lenp) {
|
||||
int len;
|
||||
|
||||
for (len = 0; len < 128; len++) {
|
||||
const char c = *in++;
|
||||
switch (c) {
|
||||
case '\0':
|
||||
return 0;
|
||||
case '<':
|
||||
return 0;
|
||||
case '>':
|
||||
buffer[len] = '\0';
|
||||
*lenp = len+1;
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
buffer[len] = c;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
/*
|
||||
* The general politic of the convert is to mask unsupported tags or formatting
|
||||
* errors (but still alert the user/subtitles writer with an error/warning)
|
||||
@@ -202,7 +155,7 @@ int ff_htmlmarkup_to_ass(void *log_ctx, AVBPrint *dst, const char *in)
|
||||
|
||||
len = 0;
|
||||
|
||||
if (scantag(in+tag_close+1, buffer, &len) && len > 0) {
|
||||
if (sscanf(in+tag_close+1, "%127[^<>]>%n", buffer, &len) >= 1 && len > 0) {
|
||||
const int skip = len + tag_close;
|
||||
const char *tagname = buffer;
|
||||
while (*tagname == ' ') {
|
||||
|
||||
+4
-13
@@ -280,16 +280,6 @@ static int extract_header(AVCodecContext *const avctx,
|
||||
for (i = 0; i < 16; i++)
|
||||
s->tvdc[i] = bytestream_get_be16(&buf);
|
||||
|
||||
if (s->ham) {
|
||||
if (s->bpp > 8) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid number of hold bits for HAM: %u\n", s->ham);
|
||||
return AVERROR_INVALIDDATA;
|
||||
} if (s->ham != (s->bpp > 6 ? 6 : 4)) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid number of hold bits for HAM: %u, BPP: %u\n", s->ham, s->bpp);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
}
|
||||
|
||||
if (s->masking == MASK_HAS_MASK) {
|
||||
if (s->bpp >= 8 && !s->ham) {
|
||||
avctx->pix_fmt = AV_PIX_FMT_RGB32;
|
||||
@@ -317,6 +307,9 @@ static int extract_header(AVCodecContext *const avctx,
|
||||
if (!s->bpp || s->bpp > 32) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid number of bitplanes: %u\n", s->bpp);
|
||||
return AVERROR_INVALIDDATA;
|
||||
} else if (s->ham >= 8) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid number of hold bits for HAM: %u\n", s->ham);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
av_freep(&s->ham_buf);
|
||||
@@ -378,8 +371,6 @@ static av_cold int decode_end(AVCodecContext *avctx)
|
||||
av_freep(&s->planebuf);
|
||||
av_freep(&s->ham_buf);
|
||||
av_freep(&s->ham_palbuf);
|
||||
av_freep(&s->mask_buf);
|
||||
av_freep(&s->mask_palbuf);
|
||||
av_freep(&s->video[0]);
|
||||
av_freep(&s->video[1]);
|
||||
av_freep(&s->pal);
|
||||
@@ -1521,7 +1512,7 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
buf_size -= bytestream2_tell(gb);
|
||||
desc = av_pix_fmt_desc_get(avctx->pix_fmt);
|
||||
|
||||
if (!s->init && avctx->bits_per_coded_sample <= 8 - (s->masking == MASK_HAS_MASK) &&
|
||||
if (!s->init && avctx->bits_per_coded_sample <= 8 &&
|
||||
avctx->pix_fmt == AV_PIX_FMT_PAL8) {
|
||||
if ((res = cmap_read_palette(avctx, (uint32_t *)frame->data[1])) < 0)
|
||||
return res;
|
||||
|
||||
@@ -408,11 +408,11 @@ static void lsf2poly(int16_t *a, int16_t *lsf)
|
||||
|
||||
a[0] = 4096;
|
||||
for (i = 5; i > 0; i--) {
|
||||
tmp = f[0][6 - i] + (unsigned)f[1][6 - i] + 4096;
|
||||
a[6 - i] = tmp >> 13;
|
||||
tmp = f[0][6 - i] + (unsigned)f[1][6 - i];
|
||||
a[6 - i] = (tmp + 4096) >> 13;
|
||||
|
||||
tmp = f[0][6 - i] - (unsigned)f[1][6 - i] + 4096;
|
||||
a[5 + i] = tmp >> 13;
|
||||
tmp = f[0][6 - i] - (unsigned)f[1][6 - i];
|
||||
a[5 + i] = (tmp + 4096) >> 13;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -724,7 +724,7 @@ static void construct_vector (
|
||||
int16_t cbvec0[SUBL];
|
||||
int16_t cbvec1[SUBL];
|
||||
int16_t cbvec2[SUBL];
|
||||
unsigned a32;
|
||||
int32_t a32;
|
||||
int16_t *gainPtr;
|
||||
int j;
|
||||
|
||||
@@ -747,7 +747,7 @@ static void construct_vector (
|
||||
a32 += SPL_MUL_16_16(*gainPtr++, cbvec1[j]);
|
||||
a32 += SPL_MUL_16_16(*gainPtr, cbvec2[j]);
|
||||
gainPtr -= 2;
|
||||
decvector[j] = (int)(a32 + 8192) >> 14;
|
||||
decvector[j] = (a32 + 8192) >> 14;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1303,8 +1303,7 @@ static int xcorr_coeff(int16_t *target, int16_t *regressor,
|
||||
pos += step;
|
||||
|
||||
/* Do a +/- to get the next energy */
|
||||
energy += (unsigned)step * ((*rp_end * *rp_end - *rp_beg * *rp_beg) >> shifts);
|
||||
|
||||
energy += step * ((*rp_end * *rp_end - *rp_beg * *rp_beg) >> shifts);
|
||||
rp_beg += step;
|
||||
rp_end += step;
|
||||
}
|
||||
|
||||
+2
-3
@@ -428,9 +428,8 @@ static int decode_frame(AVCodecContext *avctx, void *data,
|
||||
av_log(avctx, AV_LOG_ERROR, "Frame size change is unsupported.\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
ret = ff_set_dimensions(avctx, width, height);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
avctx->width = width;
|
||||
avctx->height = height;
|
||||
}
|
||||
|
||||
s->changed_size = 1;
|
||||
|
||||
@@ -1260,7 +1260,7 @@ static int ipvideo_decode_frame(AVCodecContext *avctx,
|
||||
s->decoding_map_size = ((s->avctx->width / 8) * (s->avctx->height / 8)) * 2;
|
||||
s->decoding_map = buf + 8 + 14; /* 14 bits of op data */
|
||||
video_data_size -= s->decoding_map_size + 14;
|
||||
if (video_data_size <= 0 || s->decoding_map_size == 0)
|
||||
if (video_data_size <= 0)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if (buf_size < 8 + s->decoding_map_size + 14 + video_data_size)
|
||||
|
||||
+6
-5
@@ -488,6 +488,12 @@ static int ivi_dec_tile_data_size(GetBitContext *gb)
|
||||
static int ivi_dc_transform(IVIBandDesc *band, int *prev_dc, int buf_offs,
|
||||
int blk_size)
|
||||
{
|
||||
int buf_size = band->pitch * band->aheight - buf_offs;
|
||||
int min_size = (blk_size - 1) * band->pitch + blk_size;
|
||||
|
||||
if (min_size > buf_size)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
band->dc_transform(prev_dc, band->buf + buf_offs,
|
||||
band->pitch, blk_size);
|
||||
|
||||
@@ -718,11 +724,6 @@ static int ivi_decode_blocks(GetBitContext *gb, IVIBandDesc *band,
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
} else {
|
||||
int buf_size = band->pitch * band->aheight - buf_offs;
|
||||
int min_size = (blk_size - 1) * band->pitch + blk_size;
|
||||
|
||||
if (min_size > buf_size)
|
||||
return AVERROR_INVALIDDATA;
|
||||
/* block not coded */
|
||||
/* for intra blocks apply the dc slant transform */
|
||||
/* for inter - perform the motion compensation without delta */
|
||||
|
||||
@@ -247,11 +247,6 @@ static void init_band_stepsize(AVCodecContext *avctx,
|
||||
}
|
||||
}
|
||||
|
||||
if (band->f_stepsize > (INT_MAX >> 15)) {
|
||||
band->f_stepsize = 0;
|
||||
av_log(avctx, AV_LOG_ERROR, "stepsize out of range\n");
|
||||
}
|
||||
|
||||
band->i_stepsize = band->f_stepsize * (1 << 15);
|
||||
|
||||
/* FIXME: In OpenJPEG code stepsize = stepsize * 0.5. Why?
|
||||
|
||||
@@ -531,7 +531,7 @@ static void dwt_decode97_int(DWTContext *s, int32_t *t)
|
||||
}
|
||||
|
||||
for (i = 0; i < w * h; i++)
|
||||
data[i] = (data[i] + ((1LL<<I_PRESHIFT)>>1)) >> I_PRESHIFT;
|
||||
data[i] = (data[i] + ((1<<I_PRESHIFT)>>1)) >> I_PRESHIFT;
|
||||
}
|
||||
|
||||
int ff_jpeg2000_dwt_init(DWTContext *s, int border[2][2],
|
||||
|
||||
+2
-13
@@ -163,19 +163,13 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
||||
av_log(avctx, AV_LOG_ERROR, "video size %d invalid\n", video_size);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
if ((ret = ff_reget_buffer(avctx, s->frame)) < 0)
|
||||
return ret;
|
||||
|
||||
if (video_type == 0 || video_type == 1) {
|
||||
GetBitContext gb;
|
||||
init_get_bits(&gb, buf, 8 * video_size);
|
||||
|
||||
if ((ret = ff_reget_buffer(avctx, s->frame)) < 0)
|
||||
return ret;
|
||||
|
||||
if (avctx->height/8 * (avctx->width/8) > 4 * video_size) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Insufficient input data for dimensions\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
for (j = 0; j < avctx->height; j += 8)
|
||||
for (i = 0; i < avctx->width; i += 8)
|
||||
decode8x8(&gb,
|
||||
@@ -185,11 +179,6 @@ static int decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
||||
buf += video_size;
|
||||
} else if (video_type == 2) {
|
||||
int v = *buf++;
|
||||
|
||||
av_frame_unref(s->frame);
|
||||
if ((ret = ff_get_buffer(avctx, s->frame, AV_GET_BUFFER_FLAG_REF)) < 0)
|
||||
return ret;
|
||||
|
||||
for (j = 0; j < avctx->height; j++)
|
||||
memset(s->frame->data[0] + j * s->frame->linesize[0],
|
||||
v, avctx->width);
|
||||
|
||||
@@ -505,8 +505,7 @@ static av_cold int aom_init(AVCodecContext *avctx,
|
||||
enccfg.g_h = avctx->height;
|
||||
enccfg.g_timebase.num = avctx->time_base.num;
|
||||
enccfg.g_timebase.den = avctx->time_base.den;
|
||||
enccfg.g_threads =
|
||||
FFMIN(avctx->thread_count ? avctx->thread_count : av_cpu_count(), 64);
|
||||
enccfg.g_threads = avctx->thread_count ? avctx->thread_count : av_cpu_count();
|
||||
|
||||
if (ctx->lag_in_frames >= 0)
|
||||
enccfg.g_lag_in_frames = ctx->lag_in_frames;
|
||||
|
||||
@@ -49,16 +49,8 @@ static int oggvorbis_decode_init(AVCodecContext *avccontext) {
|
||||
vorbis_comment_init(&context->vc) ;
|
||||
|
||||
if(p[0] == 0 && p[1] == 30) {
|
||||
int sizesum = 0;
|
||||
for(i = 0; i < 3; i++){
|
||||
hsizes[i] = bytestream_get_be16((const uint8_t **)&p);
|
||||
sizesum += 2 + hsizes[i];
|
||||
if (sizesum > avccontext->extradata_size) {
|
||||
av_log(avccontext, AV_LOG_ERROR, "vorbis extradata too small\n");
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto error;
|
||||
}
|
||||
|
||||
headers[i] = p;
|
||||
p += hsizes[i];
|
||||
}
|
||||
|
||||
@@ -295,11 +295,6 @@ static av_cold int decode_init(AVCodecContext *avctx)
|
||||
avpriv_request_sample(avctx, "LOCO codec version %i", version);
|
||||
}
|
||||
|
||||
if (l->lossy > 65536U) {
|
||||
av_log(avctx, AV_LOG_ERROR, "lossy %i is too large\n", l->lossy);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
l->mode = AV_RL32(avctx->extradata + 4);
|
||||
switch (l->mode) {
|
||||
case LOCO_CYUY2:
|
||||
|
||||
+1
-1
@@ -61,7 +61,7 @@ static int m101_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
||||
stride = AV_RL32(avctx->extradata + 5*4);
|
||||
|
||||
if (avctx->pix_fmt == AV_PIX_FMT_YUV422P10)
|
||||
min_stride = (avctx->width + 15) / 16 * 40;
|
||||
min_stride = (avctx->width + 15) / 16 * 20;
|
||||
|
||||
if (stride < min_stride || avpkt->size < stride * (uint64_t)avctx->height) {
|
||||
av_log(avctx, AV_LOG_ERROR, "stride (%d) is invalid for packet sized %d\n",
|
||||
|
||||
@@ -2630,7 +2630,7 @@ void ff_hevc_sao_edge_filter_8_msa(uint8_t *dst, uint8_t *src,
|
||||
int16_t *sao_offset_val,
|
||||
int eo, int width, int height)
|
||||
{
|
||||
ptrdiff_t stride_src = (2 * MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE) / sizeof(uint8_t);
|
||||
ptrdiff_t stride_src = (2 * 64 + 32) / sizeof(uint8_t);
|
||||
|
||||
switch (eo) {
|
||||
case 0:
|
||||
|
||||
+15
-9
@@ -70,7 +70,8 @@ read_header:
|
||||
|
||||
skip_bits(&hgb, 32); /* reserved zeros */
|
||||
|
||||
if (get_bits_long(&hgb, 32) != MKBETAG('m','j','p','g')) {
|
||||
if (get_bits_long(&hgb, 32) != MKBETAG('m','j','p','g'))
|
||||
{
|
||||
av_log(avctx, AV_LOG_WARNING, "not mjpeg-b (bad fourcc)\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
@@ -84,17 +85,19 @@ read_header:
|
||||
|
||||
dqt_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "dqt is %d and size is %d\n");
|
||||
av_log(avctx, AV_LOG_DEBUG, "dqt offs: 0x%"PRIx32"\n", dqt_offs);
|
||||
if (dqt_offs) {
|
||||
if (dqt_offs)
|
||||
{
|
||||
init_get_bits(&s->gb, buf_ptr+dqt_offs, (buf_end - (buf_ptr+dqt_offs))*8);
|
||||
s->start_code = DQT;
|
||||
if (ff_mjpeg_decode_dqt(s) < 0 &&
|
||||
(avctx->err_recognition & AV_EF_EXPLODE))
|
||||
return AVERROR_INVALIDDATA;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
dht_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "dht is %d and size is %d\n");
|
||||
av_log(avctx, AV_LOG_DEBUG, "dht offs: 0x%"PRIx32"\n", dht_offs);
|
||||
if (dht_offs) {
|
||||
if (dht_offs)
|
||||
{
|
||||
init_get_bits(&s->gb, buf_ptr+dht_offs, (buf_end - (buf_ptr+dht_offs))*8);
|
||||
s->start_code = DHT;
|
||||
ff_mjpeg_decode_dht(s);
|
||||
@@ -102,7 +105,8 @@ read_header:
|
||||
|
||||
sof_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "sof is %d and size is %d\n");
|
||||
av_log(avctx, AV_LOG_DEBUG, "sof offs: 0x%"PRIx32"\n", sof_offs);
|
||||
if (sof_offs) {
|
||||
if (sof_offs)
|
||||
{
|
||||
init_get_bits(&s->gb, buf_ptr+sof_offs, (buf_end - (buf_ptr+sof_offs))*8);
|
||||
s->start_code = SOF0;
|
||||
if (ff_mjpeg_decode_sof(s) < 0)
|
||||
@@ -113,23 +117,25 @@ read_header:
|
||||
av_log(avctx, AV_LOG_DEBUG, "sos offs: 0x%"PRIx32"\n", sos_offs);
|
||||
sod_offs = read_offs(avctx, &hgb, buf_end - buf_ptr, "sof is %d and size is %d\n");
|
||||
av_log(avctx, AV_LOG_DEBUG, "sod offs: 0x%"PRIx32"\n", sod_offs);
|
||||
if (sos_offs) {
|
||||
if (sos_offs)
|
||||
{
|
||||
init_get_bits(&s->gb, buf_ptr + sos_offs,
|
||||
8 * FFMIN(field_size, buf_end - buf_ptr - sos_offs));
|
||||
s->mjpb_skiptosod = (sod_offs - sos_offs - show_bits(&s->gb, 16));
|
||||
s->start_code = SOS;
|
||||
if (ff_mjpeg_decode_sos(s, NULL, 0, NULL) < 0 &&
|
||||
(avctx->err_recognition & AV_EF_EXPLODE))
|
||||
return AVERROR_INVALIDDATA;
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
if (s->interlaced) {
|
||||
s->bottom_field ^= 1;
|
||||
/* if not bottom field, do not output image yet */
|
||||
if (s->bottom_field != s->interlace_polarity && second_field_offs) {
|
||||
if (s->bottom_field != s->interlace_polarity && second_field_offs)
|
||||
{
|
||||
buf_ptr = buf + second_field_offs;
|
||||
goto read_header;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//XXX FIXME factorize, this looks very similar to the EOI code
|
||||
|
||||
+17
-19
@@ -704,9 +704,7 @@ unk_pixfmt:
|
||||
}
|
||||
|
||||
if ((s->rgb && !s->lossless && !s->ls) ||
|
||||
(!s->rgb && s->ls && s->nb_components > 1) ||
|
||||
(s->avctx->pix_fmt == AV_PIX_FMT_PAL8 && !s->ls)
|
||||
) {
|
||||
(!s->rgb && s->ls && s->nb_components > 1)) {
|
||||
av_log(s->avctx, AV_LOG_ERROR, "Unsupported coding and pixel format combination\n");
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
@@ -1208,25 +1206,25 @@ static int ljpeg_decode_yuv_scan(MJpegDecodeContext *s, int predictor,
|
||||
|| v * mb_y + y >= s->height) {
|
||||
// Nothing to do
|
||||
} else if (bits<=8) {
|
||||
ptr = s->picture_ptr->data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
|
||||
if(y==0 && toprow){
|
||||
if(x==0 && leftcol){
|
||||
pred= 1 << (bits - 1);
|
||||
}else{
|
||||
pred= ptr[-1];
|
||||
}
|
||||
ptr = s->picture_ptr->data[c] + (linesize * (v * mb_y + y)) + (h * mb_x + x); //FIXME optimize this crap
|
||||
if(y==0 && toprow){
|
||||
if(x==0 && leftcol){
|
||||
pred= 1 << (bits - 1);
|
||||
}else{
|
||||
if(x==0 && leftcol){
|
||||
pred= ptr[-linesize];
|
||||
}else{
|
||||
PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
|
||||
}
|
||||
pred= ptr[-1];
|
||||
}
|
||||
}else{
|
||||
if(x==0 && leftcol){
|
||||
pred= ptr[-linesize];
|
||||
}else{
|
||||
PREDICT(pred, ptr[-linesize-1], ptr[-linesize], ptr[-1], predictor);
|
||||
}
|
||||
}
|
||||
|
||||
if (s->interlaced && s->bottom_field)
|
||||
ptr += linesize >> 1;
|
||||
pred &= mask;
|
||||
*ptr= pred + ((unsigned)dc << point_transform);
|
||||
if (s->interlaced && s->bottom_field)
|
||||
ptr += linesize >> 1;
|
||||
pred &= mask;
|
||||
*ptr= pred + ((unsigned)dc << point_transform);
|
||||
}else{
|
||||
ptr16 = (uint16_t*)(s->picture_ptr->data[c] + 2*(linesize * (v * mb_y + y)) + 2*(h * mb_x + x)); //FIXME optimize this crap
|
||||
if(y==0 && toprow){
|
||||
|
||||
+1
-1
@@ -1195,7 +1195,7 @@ static int read_access_unit(AVCodecContext *avctx, void* data,
|
||||
}
|
||||
|
||||
if (length < header_size + substr_header_size) {
|
||||
av_log(m->avctx, AV_LOG_ERROR, "Insufficient data for headers\n");
|
||||
av_log(m->avctx, AV_LOG_ERROR, "Insuffient data for headers\n");
|
||||
goto error;
|
||||
}
|
||||
|
||||
|
||||
@@ -201,8 +201,6 @@ static int mp_get_vlc(MotionPixelsContext *mp, GetBitContext *gb)
|
||||
int i;
|
||||
|
||||
i = (mp->codes_count == 1) ? 0 : get_vlc2(gb, mp->vlc.table, mp->max_codes_bits, 1);
|
||||
if (i < 0)
|
||||
return i;
|
||||
return mp->codes[i].delta;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,8 +75,8 @@ static int mov2textsub(AVBSFContext *ctx, AVPacket *pkt)
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
pkt->size = FFMIN(pkt->size - 2, AV_RB16(pkt->data));
|
||||
pkt->data += 2;
|
||||
pkt->size = FFMIN(pkt->size - 2, AV_RB16(pkt->data));
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -1899,20 +1899,14 @@ static int mpeg4_decode_studio_block(MpegEncContext *s, int32_t block[64], int n
|
||||
code >>= 1;
|
||||
run = (1 << (additional_code_len - 1)) + code;
|
||||
idx += run;
|
||||
if (idx > 63)
|
||||
return AVERROR_INVALIDDATA;
|
||||
j = scantable[idx++];
|
||||
block[j] = sign ? 1 : -1;
|
||||
} else if (group >= 13 && group <= 20) {
|
||||
/* Level value (Table B.49) */
|
||||
if (idx > 63)
|
||||
return AVERROR_INVALIDDATA;
|
||||
j = scantable[idx++];
|
||||
block[j] = get_xbits(&s->gb, additional_code_len);
|
||||
} else if (group == 21) {
|
||||
/* Escape */
|
||||
if (idx > 63)
|
||||
return AVERROR_INVALIDDATA;
|
||||
j = scantable[idx++];
|
||||
additional_code_len = s->avctx->bits_per_raw_sample + s->dct_precision + 4;
|
||||
flc = get_bits(&s->gb, additional_code_len);
|
||||
@@ -3062,8 +3056,6 @@ static int decode_studio_vop_header(Mpeg4DecContext *ctx, GetBitContext *gb)
|
||||
if (get_bits_left(gb) <= 32)
|
||||
return 0;
|
||||
|
||||
s->partitioned_frame = 0;
|
||||
s->interlaced_dct = 0;
|
||||
s->decode_mb = mpeg4_decode_studio_mb;
|
||||
|
||||
decode_smpte_tc(ctx, gb);
|
||||
|
||||
@@ -78,8 +78,6 @@ static void mpeg_er_decode_mb(void *opaque, int ref, int mv_dir, int mv_type,
|
||||
ff_update_block_index(s);
|
||||
|
||||
s->bdsp.clear_blocks(s->block[0]);
|
||||
if (!s->chroma_y_shift)
|
||||
s->bdsp.clear_blocks(s->block[6]);
|
||||
|
||||
s->dest[0] = s->current_picture.f->data[0] +
|
||||
s->mb_y * 16 * s->linesize +
|
||||
|
||||
@@ -101,7 +101,7 @@ static int mpegaudio_parse(AVCodecParserContext *s1,
|
||||
"MP3ADU full parser");
|
||||
*poutbuf = NULL;
|
||||
*poutbuf_size = 0;
|
||||
return buf_size; /* parsers must not return error codes */
|
||||
return 0; /* parsers must not return error codes */
|
||||
}
|
||||
|
||||
break;
|
||||
|
||||
@@ -23,7 +23,6 @@
|
||||
#include "libavutil/avassert.h"
|
||||
#include "libavutil/common.h"
|
||||
#include "libavutil/pixdesc.h"
|
||||
#include "libavutil/imgutils.h"
|
||||
|
||||
#include "avcodec.h"
|
||||
#include "motion_est.h"
|
||||
@@ -58,7 +57,6 @@ do {\
|
||||
int ff_mpeg_framesize_alloc(AVCodecContext *avctx, MotionEstContext *me,
|
||||
ScratchpadContext *sc, int linesize)
|
||||
{
|
||||
# define EMU_EDGE_HEIGHT (4 * 70)
|
||||
int alloc_size = FFALIGN(FFABS(linesize) + 64, 32);
|
||||
|
||||
if (avctx->hwaccel)
|
||||
@@ -69,16 +67,13 @@ int ff_mpeg_framesize_alloc(AVCodecContext *avctx, MotionEstContext *me,
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
|
||||
if (av_image_check_size2(alloc_size, EMU_EDGE_HEIGHT, avctx->max_pixels, AV_PIX_FMT_NONE, 0, avctx) < 0)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
// edge emu needs blocksize + filter length - 1
|
||||
// (= 17x17 for halfpel / 21x21 for H.264)
|
||||
// VC-1 computes luma and chroma simultaneously and needs 19X19 + 9x9
|
||||
// at uvlinesize. It supports only YUV420 so 24x24 is enough
|
||||
// linesize * interlaced * MBsize
|
||||
// we also use this buffer for encoding in encode_mb_internal() needig an additional 32 lines
|
||||
FF_ALLOCZ_ARRAY_OR_GOTO(avctx, sc->edge_emu_buffer, alloc_size, EMU_EDGE_HEIGHT,
|
||||
FF_ALLOCZ_ARRAY_OR_GOTO(avctx, sc->edge_emu_buffer, alloc_size, 4 * 70,
|
||||
fail);
|
||||
|
||||
FF_ALLOCZ_ARRAY_OR_GOTO(avctx, me->scratchpad, alloc_size, 4 * 16 * 2,
|
||||
|
||||
@@ -412,14 +412,6 @@ int ff_msmpeg4_decode_picture_header(MpegEncContext * s)
|
||||
{
|
||||
int code;
|
||||
|
||||
// at minimum one bit per macroblock is required at least in a valid frame,
|
||||
// we discard frames much smaller than this. Frames smaller than 1/8 of the
|
||||
// smallest "black/skip" frame generally contain not much recoverable content
|
||||
// while at the same time they have the highest computational requirements
|
||||
// per byte
|
||||
if (get_bits_left(&s->gb) * 8LL < (s->width+15)/16 * ((s->height+15)/16))
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if(s->msmpeg4_version==1){
|
||||
int start_code = get_bits_long(&s->gb, 32);
|
||||
if(start_code!=0x00000100){
|
||||
|
||||
+3
-5
@@ -552,11 +552,6 @@ static int mss4_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
||||
"Empty frame found but it is not a skip frame.\n");
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
mb_width = FFALIGN(width, 16) >> 4;
|
||||
mb_height = FFALIGN(height, 16) >> 4;
|
||||
|
||||
if (frame_type != SKIP_FRAME && 8*buf_size < 8*HEADER_SIZE + mb_width*mb_height)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if ((ret = ff_reget_buffer(avctx, c->pic)) < 0)
|
||||
return ret;
|
||||
@@ -579,6 +574,9 @@ static int mss4_decode_frame(AVCodecContext *avctx, void *data, int *got_frame,
|
||||
|
||||
if ((ret = init_get_bits8(&gb, buf + HEADER_SIZE, buf_size - HEADER_SIZE)) < 0)
|
||||
return ret;
|
||||
|
||||
mb_width = FFALIGN(width, 16) >> 4;
|
||||
mb_height = FFALIGN(height, 16) >> 4;
|
||||
dst[0] = c->pic->data[0];
|
||||
dst[1] = c->pic->data[1];
|
||||
dst[2] = c->pic->data[2];
|
||||
|
||||
@@ -62,9 +62,6 @@ static av_cold int msvideo1_decode_init(AVCodecContext *avctx)
|
||||
|
||||
s->avctx = avctx;
|
||||
|
||||
if (avctx->width < 4 || avctx->height < 4)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
/* figure out the colorspace based on the presence of a palette */
|
||||
if (s->avctx->bits_per_coded_sample == 8) {
|
||||
s->mode_8bit = 1;
|
||||
|
||||
+1
-5
@@ -601,11 +601,7 @@ int ff_nvdec_frame_params(AVCodecContext *avctx,
|
||||
frames_ctx->format = AV_PIX_FMT_CUDA;
|
||||
frames_ctx->width = (avctx->coded_width + 1) & ~1;
|
||||
frames_ctx->height = (avctx->coded_height + 1) & ~1;
|
||||
/*
|
||||
* We add two extra frames to the pool to account for deinterlacing filters
|
||||
* holding onto their frames.
|
||||
*/
|
||||
frames_ctx->initial_pool_size = dpb_size + 2;
|
||||
frames_ctx->initial_pool_size = dpb_size;
|
||||
|
||||
frames_ctx->free = nvdec_free_dummy;
|
||||
frames_ctx->pool = av_buffer_pool_init(0, nvdec_alloc_dummy);
|
||||
|
||||
@@ -676,11 +676,6 @@ static int decode(AVCodecContext *avctx, void *data, int *data_size,
|
||||
*/
|
||||
break;
|
||||
case DISPLAY_SEGMENT:
|
||||
if (*data_size) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Duplicate display segment\n");
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
break;
|
||||
}
|
||||
ret = display_end_segment(avctx, data, buf, segment_length);
|
||||
if (ret >= 0)
|
||||
*data_size = ret;
|
||||
|
||||
@@ -578,10 +578,6 @@ static int decode_ihdr_chunk(AVCodecContext *avctx, PNGDecContext *s,
|
||||
}
|
||||
s->color_type = bytestream2_get_byte(&s->gb);
|
||||
s->compression_type = bytestream2_get_byte(&s->gb);
|
||||
if (s->compression_type) {
|
||||
av_log(avctx, AV_LOG_ERROR, "Invalid compression method %d\n", s->compression_type);
|
||||
goto error;
|
||||
}
|
||||
s->filter_type = bytestream2_get_byte(&s->gb);
|
||||
s->interlace_type = bytestream2_get_byte(&s->gb);
|
||||
bytestream2_skip(&s->gb, 4); /* crc */
|
||||
|
||||
@@ -58,13 +58,7 @@ static av_always_inline void transform4x4(vec_s16 src_01, vec_s16 src_23,
|
||||
e1 = vec_msums(src_02, trans4[2], zero);
|
||||
o1 = vec_msums(src_13, trans4[3], zero);
|
||||
|
||||
switch(shift) {
|
||||
case 7: add = vec_sl(vec_splat_s32(1), vec_splat_u32( 7 - 1)); break;
|
||||
case 10: add = vec_sl(vec_splat_s32(1), vec_splat_u32(10 - 1)); break;
|
||||
case 12: add = vec_sl(vec_splat_s32(1), vec_splat_u32(12 - 1)); break;
|
||||
default: abort();
|
||||
}
|
||||
|
||||
add = vec_sl(vec_splat_s32(1), vec_splat_u32(shift - 1));
|
||||
e0 = vec_add(e0, add);
|
||||
e1 = vec_add(e1, add);
|
||||
|
||||
@@ -78,14 +72,7 @@ static av_always_inline void scale(vec_s32 res[4], vec_s16 res_packed[2],
|
||||
const int shift)
|
||||
{
|
||||
int i;
|
||||
vec_u32 v_shift;
|
||||
|
||||
switch(shift) {
|
||||
case 7: v_shift = vec_splat_u32(7) ; break;
|
||||
case 10: v_shift = vec_splat_u32(10); break;
|
||||
case 12: v_shift = vec_splat_u32(12); break;
|
||||
default: abort();
|
||||
}
|
||||
vec_u32 v_shift = vec_splat_u32(shift);
|
||||
|
||||
for (i = 0; i < 4; i++)
|
||||
res[i] = vec_sra(res[i], v_shift);
|
||||
|
||||
@@ -221,7 +221,6 @@ typedef struct ProresThreadData {
|
||||
DECLARE_ALIGNED(16, int16_t, blocks)[MAX_PLANES][64 * 4 * MAX_MBS_PER_SLICE];
|
||||
DECLARE_ALIGNED(16, uint16_t, emu_buf)[16 * 16];
|
||||
int16_t custom_q[64];
|
||||
int16_t custom_chroma_q[64];
|
||||
struct TrellisNode *nodes;
|
||||
} ProresThreadData;
|
||||
|
||||
@@ -232,7 +231,6 @@ typedef struct ProresContext {
|
||||
int16_t quants[MAX_STORED_Q][64];
|
||||
int16_t quants_chroma[MAX_STORED_Q][64];
|
||||
int16_t custom_q[64];
|
||||
int16_t custom_chroma_q[64];
|
||||
const uint8_t *quant_mat;
|
||||
const uint8_t *quant_chroma_mat;
|
||||
const uint8_t *scantable;
|
||||
@@ -575,7 +573,7 @@ static int encode_slice(AVCodecContext *avctx, const AVFrame *pic,
|
||||
qmat_chroma = ctx->quants_chroma[quant];
|
||||
} else {
|
||||
qmat = ctx->custom_q;
|
||||
qmat_chroma = ctx->custom_chroma_q;
|
||||
qmat_chroma = ctx->custom_q;
|
||||
for (i = 0; i < 64; i++) {
|
||||
qmat[i] = ctx->quant_mat[i] * quant;
|
||||
qmat_chroma[i] = ctx->quant_chroma_mat[i] * quant;
|
||||
@@ -903,7 +901,7 @@ static int find_slice_quant(AVCodecContext *avctx,
|
||||
qmat_chroma = ctx->quants_chroma[q];
|
||||
} else {
|
||||
qmat = td->custom_q;
|
||||
qmat_chroma = td->custom_chroma_q;
|
||||
qmat_chroma = td->custom_q;
|
||||
for (i = 0; i < 64; i++) {
|
||||
qmat[i] = ctx->quant_mat[i] * q;
|
||||
qmat_chroma[i] = ctx->quant_chroma_mat[i] * q;
|
||||
|
||||
+9
-10
@@ -57,25 +57,27 @@ static int decompress(GetByteContext *gb, int size, PutByteContext *pb, const ui
|
||||
b = lut[2 * idx];
|
||||
|
||||
while (1) {
|
||||
if (bytestream2_get_bytes_left_p(pb) <= 0 || bytestream2_get_eof(pb))
|
||||
if (bytestream2_get_bytes_left_p(pb) <= 0)
|
||||
return 0;
|
||||
if ((b & 0xFF00u) != 0x8000u || (b & 0xFFu)) {
|
||||
if (((b & 0xFF00u) != 0x8000u) || (b & 0xFFu)) {
|
||||
if ((b & 0xFF00u) != 0x8000u) {
|
||||
bytestream2_put_le16(pb, b);
|
||||
} else {
|
||||
} else if (b & 0xFFu) {
|
||||
idx = 0;
|
||||
for (int i = 0; i < (b & 0xFFu); i++)
|
||||
bytestream2_put_le32(pb, 0);
|
||||
}
|
||||
c = b >> 16;
|
||||
if (c & 0xFF00u) {
|
||||
c = (((c >> 8) & 0xFFu) | (c & 0xFF00)) & 0xF00F;
|
||||
fill = lut[2 * idx + 1];
|
||||
if ((c & 0xF000u) == 0x1000) {
|
||||
if ((c & 0xFF00u) == 0x1000) {
|
||||
bytestream2_put_le16(pb, fill);
|
||||
c &= 0xFFFF00FFu;
|
||||
} else {
|
||||
bytestream2_put_le32(pb, fill);
|
||||
c &= 0xFFFF00FFu;
|
||||
}
|
||||
c = (c >> 8) & 0x0Fu;
|
||||
}
|
||||
while (c) {
|
||||
a <<= 4;
|
||||
@@ -99,8 +101,6 @@ static int decompress(GetByteContext *gb, int size, PutByteContext *pb, const ui
|
||||
}
|
||||
idx = a >> 20;
|
||||
b = lut[2 * idx];
|
||||
if (!b)
|
||||
return AVERROR_INVALIDDATA;
|
||||
continue;
|
||||
}
|
||||
idx = 2;
|
||||
@@ -161,9 +161,8 @@ static int decode_frame(AVCodecContext *avctx, void *data,
|
||||
memset(s->decbuffer, 0, s->size);
|
||||
bytestream2_init(&s->gb, avpkt->data, avpkt->size);
|
||||
bytestream2_init_writer(&s->pb, s->decbuffer, s->size);
|
||||
ret = decompress(&s->gb, AV_RL32(avpkt->data + 28) >> 1, &s->pb, s->lut);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
decompress(&s->gb, AV_RL32(avpkt->data + 28) >> 1, &s->pb, s->lut);
|
||||
vertical_predict((uint32_t *)s->decbuffer, 0, (uint32_t *)s->initial_line, s->stride, 1);
|
||||
vertical_predict((uint32_t *)s->decbuffer, s->stride, (uint32_t *)s->decbuffer, s->stride, avctx->height - 1);
|
||||
|
||||
|
||||
+8
-18
@@ -408,12 +408,7 @@ static int fix_coding_method_array(int sb, int channels,
|
||||
}
|
||||
for (k = 0; k < run; k++) {
|
||||
if (j + k < 128) {
|
||||
int sbjk = sb + (j + k) / 64;
|
||||
if (sbjk > 29) {
|
||||
SAMPLES_NEEDED
|
||||
continue;
|
||||
}
|
||||
if (coding_method[ch][sbjk][(j + k) % 64] > coding_method[ch][sb][j]) {
|
||||
if (coding_method[ch][sb + (j + k) / 64][(j + k) % 64] > coding_method[ch][sb][j]) {
|
||||
if (k > 0) {
|
||||
SAMPLES_NEEDED
|
||||
//not debugged, almost never used
|
||||
@@ -1289,10 +1284,6 @@ static void qdm2_fft_decode_tones(QDM2Context *q, int duration,
|
||||
}
|
||||
offset += (n - 2);
|
||||
} else {
|
||||
if (local_int_10 <= 2) {
|
||||
av_log(NULL, AV_LOG_ERROR, "qdm2_fft_decode_tones() stuck\n");
|
||||
return;
|
||||
}
|
||||
offset += qdm2_get_vlc(gb, &vlc_tab_fft_tone_offset[local_int_8], 1, 2);
|
||||
while (offset >= (local_int_10 - 1)) {
|
||||
offset += (1 - (local_int_10 - 1));
|
||||
@@ -1704,19 +1695,13 @@ static av_cold int qdm2_decode_init(AVCodecContext *avctx)
|
||||
s->group_size = bytestream2_get_be32(&gb);
|
||||
s->fft_size = bytestream2_get_be32(&gb);
|
||||
s->checksum_size = bytestream2_get_be32(&gb);
|
||||
if (s->checksum_size >= 1U << 28 || !s->checksum_size) {
|
||||
av_log(avctx, AV_LOG_ERROR, "data block size invalid (%u)\n", s->checksum_size);
|
||||
if (s->checksum_size >= 1U << 28) {
|
||||
av_log(avctx, AV_LOG_ERROR, "data block size too large (%u)\n", s->checksum_size);
|
||||
return AVERROR_INVALIDDATA;
|
||||
}
|
||||
|
||||
s->fft_order = av_log2(s->fft_size) + 1;
|
||||
|
||||
// Fail on unknown fft order
|
||||
if ((s->fft_order < 7) || (s->fft_order > 9)) {
|
||||
avpriv_request_sample(avctx, "Unknown FFT order %d", s->fft_order);
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
|
||||
// something like max decodable tones
|
||||
s->group_order = av_log2(s->group_size) + 1;
|
||||
s->frame_size = s->group_size / 16; // 16 iterations per super block
|
||||
@@ -1750,6 +1735,11 @@ static av_cold int qdm2_decode_init(AVCodecContext *avctx)
|
||||
else
|
||||
s->coeff_per_sb_select = 2;
|
||||
|
||||
// Fail on unknown fft order
|
||||
if ((s->fft_order < 7) || (s->fft_order > 9)) {
|
||||
avpriv_request_sample(avctx, "Unknown FFT order %d", s->fft_order);
|
||||
return AVERROR_PATCHWELCOME;
|
||||
}
|
||||
if (s->fft_size != (1 << (s->fft_order - 1))) {
|
||||
av_log(avctx, AV_LOG_ERROR, "FFT size %d not power of 2.\n", s->fft_size);
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
+2
-2
@@ -577,9 +577,9 @@ static void add_noise(QDMCContext *s, int ch, int current_subframe)
|
||||
for (j = 2; j < s->subframe_size - 1; j++) {
|
||||
float rnd_re, rnd_im;
|
||||
|
||||
s->rndval = 214013U * s->rndval + 2531011;
|
||||
s->rndval = 214013 * s->rndval + 2531011;
|
||||
rnd_im = ((s->rndval & 0x7FFF) - 16384.0f) * 0.000030517578f * s->noise2_buffer[j];
|
||||
s->rndval = 214013U * s->rndval + 2531011;
|
||||
s->rndval = 214013 * s->rndval + 2531011;
|
||||
rnd_re = ((s->rndval & 0x7FFF) - 16384.0f) * 0.000030517578f * s->noise2_buffer[j];
|
||||
im[j ] += rnd_im;
|
||||
re[j ] += rnd_re;
|
||||
|
||||
@@ -90,8 +90,6 @@ static void qpeg_decode_intra(QpegContext *qctx, uint8_t *dst,
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (bytestream2_get_bytes_left(&qctx->buffer) < copy)
|
||||
copy = bytestream2_get_bytes_left(&qctx->buffer);
|
||||
for(i = 0; i < copy; i++) {
|
||||
dst[filled++] = bytestream2_get_byte(&qctx->buffer);
|
||||
if (filled >= width) {
|
||||
|
||||
+4
-9
@@ -215,7 +215,7 @@ static int decode_move(AVCodecContext *avctx,
|
||||
bytestream2_skip(gb, 8);
|
||||
compression = bytestream2_get_le32(gb);
|
||||
|
||||
if (nb_moves > INT32_MAX / 16 || nb_moves > avctx->width * avctx->height)
|
||||
if (nb_moves > INT32_MAX / 16)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
uncompressed_size = 16 * nb_moves;
|
||||
@@ -353,8 +353,6 @@ static int decode_dlta(AVCodecContext *avctx,
|
||||
compression = bytestream2_get_le32(gb);
|
||||
|
||||
if (compression == 1) {
|
||||
if (w * h * s->bpp * 3 < uncompressed_size)
|
||||
return AVERROR_INVALIDDATA;
|
||||
ret = decode_zlib(avctx, avpkt, size, uncompressed_size);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
@@ -682,9 +680,6 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
while (bytestream2_get_bytes_left(gb) > 0) {
|
||||
unsigned type, size = 0;
|
||||
|
||||
if (bytestream2_get_bytes_left(gb) < 8)
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
type = bytestream2_get_le32(gb);
|
||||
if (type == KBND || type == BNDL) {
|
||||
intra = type == KBND;
|
||||
@@ -723,12 +718,12 @@ static int decode_frame(AVCodecContext *avctx,
|
||||
return ret;
|
||||
}
|
||||
|
||||
if (!s->frame2->data[0] || !s->frame1->data[0])
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if ((ret = ff_get_buffer(avctx, s->frame, 0)) < 0)
|
||||
return ret;
|
||||
|
||||
if (!s->frame2->data[0] || !s->frame1->data[0])
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
copy_plane(avctx, s->frame2, s->frame);
|
||||
if (avctx->pix_fmt == AV_PIX_FMT_PAL8)
|
||||
memcpy(s->frame->data[1], s->frame2->data[1], 1024);
|
||||
|
||||
+6
-11
@@ -73,12 +73,13 @@ typedef struct RpzaContext {
|
||||
static int rpza_decode_stream(RpzaContext *s)
|
||||
{
|
||||
int width = s->avctx->width;
|
||||
int stride, row_inc, ret;
|
||||
int stride = s->frame->linesize[0] / 2;
|
||||
int row_inc = stride - 4;
|
||||
int chunk_size;
|
||||
uint16_t colorA = 0, colorB;
|
||||
uint16_t color4[4];
|
||||
uint16_t ta, tb;
|
||||
uint16_t *pixels;
|
||||
uint16_t *pixels = (uint16_t *)s->frame->data[0];
|
||||
|
||||
int row_ptr = 0;
|
||||
int pixel_ptr = 0;
|
||||
@@ -105,15 +106,6 @@ static int rpza_decode_stream(RpzaContext *s)
|
||||
/* Number of 4x4 blocks in frame. */
|
||||
total_blocks = ((s->avctx->width + 3) / 4) * ((s->avctx->height + 3) / 4);
|
||||
|
||||
if (total_blocks / 32 > bytestream2_get_bytes_left(&s->gb))
|
||||
return AVERROR_INVALIDDATA;
|
||||
|
||||
if ((ret = ff_reget_buffer(s->avctx, s->frame)) < 0)
|
||||
return ret;
|
||||
pixels = (uint16_t *)s->frame->data[0];
|
||||
stride = s->frame->linesize[0] / 2;
|
||||
row_inc = stride - 4;
|
||||
|
||||
/* Process chunk data */
|
||||
while (bytestream2_get_bytes_left(&s->gb)) {
|
||||
uint8_t opcode = bytestream2_get_byte(&s->gb); /* Get opcode */
|
||||
@@ -264,6 +256,9 @@ static int rpza_decode_frame(AVCodecContext *avctx,
|
||||
|
||||
bytestream2_init(&s->gb, avpkt->data, avpkt->size);
|
||||
|
||||
if ((ret = ff_reget_buffer(avctx, s->frame)) < 0)
|
||||
return ret;
|
||||
|
||||
ret = rpza_decode_stream(s);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
@@ -198,12 +198,6 @@ static int rscc_decode_frame(AVCodecContext *avctx, void *data,
|
||||
/* If necessary, uncompress tiles, and hijack the bytestream reader */
|
||||
if (packed_tiles_size != tiles_nb * TILE_SIZE) {
|
||||
uLongf length = tiles_nb * TILE_SIZE;
|
||||
|
||||
if (bytestream2_get_bytes_left(gbc) < packed_tiles_size) {
|
||||
ret = AVERROR_INVALIDDATA;
|
||||
goto end;
|
||||
}
|
||||
|
||||
inflated_tiles = av_malloc(length);
|
||||
if (!inflated_tiles) {
|
||||
ret = AVERROR(ENOMEM);
|
||||
|
||||
+2
-2
@@ -388,9 +388,9 @@ static int rv20_decode_picture_header(RVDecContext *rv)
|
||||
// attempt to keep aspect during typical resolution switches
|
||||
if (!old_aspect.num)
|
||||
old_aspect = (AVRational){1, 1};
|
||||
if (2 * (int64_t)new_w * s->height == (int64_t)new_h * s->width)
|
||||
if (2 * new_w * s->height == new_h * s->width)
|
||||
s->avctx->sample_aspect_ratio = av_mul_q(old_aspect, (AVRational){2, 1});
|
||||
if ((int64_t)new_w * s->height == 2 * (int64_t)new_h * s->width)
|
||||
if (new_w * s->height == 2 * new_h * s->width)
|
||||
s->avctx->sample_aspect_ratio = av_mul_q(old_aspect, (AVRational){1, 2});
|
||||
|
||||
ret = ff_set_dimensions(s->avctx, new_w, new_h);
|
||||
|
||||
+15
-19
@@ -34,36 +34,32 @@
|
||||
static SoftFloat sbr_sum_square_c(int (*x)[2], int n)
|
||||
{
|
||||
SoftFloat ret;
|
||||
uint64_t accu = 0, round;
|
||||
uint64_t accu, round;
|
||||
uint64_t accu0 = 0, accu1 = 0, accu2 = 0, accu3 = 0;
|
||||
int i, nz, nz0;
|
||||
unsigned u;
|
||||
|
||||
nz = 0;
|
||||
for (i = 0; i < n; i += 2) {
|
||||
// Larger values are inavlid and could cause overflows of accu.
|
||||
av_assert2(FFABS(x[i + 0][0]) >> 30 == 0);
|
||||
accu0 += (int64_t)x[i + 0][0] * x[i + 0][0];
|
||||
av_assert2(FFABS(x[i + 0][1]) >> 30 == 0);
|
||||
accu1 += (int64_t)x[i + 0][1] * x[i + 0][1];
|
||||
av_assert2(FFABS(x[i + 1][0]) >> 30 == 0);
|
||||
accu2 += (int64_t)x[i + 1][0] * x[i + 1][0];
|
||||
av_assert2(FFABS(x[i + 1][1]) >> 30 == 0);
|
||||
accu3 += (int64_t)x[i + 1][1] * x[i + 1][1];
|
||||
if ((accu0|accu1|accu2|accu3) > UINT64_MAX - INT32_MIN*(int64_t)INT32_MIN || i+2>=n) {
|
||||
accu0 >>= nz;
|
||||
accu1 >>= nz;
|
||||
accu2 >>= nz;
|
||||
accu3 >>= nz;
|
||||
while ((accu0|accu1|accu2|accu3) > (UINT64_MAX - accu) >> 2) {
|
||||
accu0 >>= 1;
|
||||
accu1 >>= 1;
|
||||
accu2 >>= 1;
|
||||
accu3 >>= 1;
|
||||
accu >>= 1;
|
||||
nz ++;
|
||||
}
|
||||
accu += accu0 + accu1 + accu2 + accu3;
|
||||
accu0 = accu1 = accu2 = accu3 = 0;
|
||||
}
|
||||
}
|
||||
|
||||
nz0 = 15 - nz;
|
||||
nz0 = 15;
|
||||
while ((accu0|accu1|accu2|accu3) >> 62) {
|
||||
accu0 >>= 1;
|
||||
accu1 >>= 1;
|
||||
accu2 >>= 1;
|
||||
accu3 >>= 1;
|
||||
nz0 --;
|
||||
}
|
||||
accu = accu0 + accu1 + accu2 + accu3;
|
||||
|
||||
u = accu >> 32;
|
||||
if (u) {
|
||||
|
||||
+1
-1
@@ -512,7 +512,7 @@ static int decompress_p(AVCodecContext *avctx,
|
||||
{
|
||||
SCPRContext *s = avctx->priv_data;
|
||||
GetByteContext *gb = &s->gb;
|
||||
int ret, temp = 0, min, max, x, y, cx = 0, cx1 = 0;
|
||||
int ret, temp, min, max, x, y, cx = 0, cx1 = 0;
|
||||
int backstep = linesize - avctx->width;
|
||||
|
||||
if (bytestream2_get_byte(gb) == 0)
|
||||
|
||||
@@ -382,7 +382,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel,
|
||||
/* subtract offset from previous samples to use in prediction */
|
||||
if (command == FN_QLPC && coffset)
|
||||
for (i = -pred_order; i < 0; i++)
|
||||
s->decoded[channel][i] -= (unsigned)coffset;
|
||||
s->decoded[channel][i] -= coffset;
|
||||
|
||||
/* decode residual and do LPC prediction */
|
||||
init_sum = pred_order ? (command == FN_QLPC ? s->lpcqoffset : 0) : coffset;
|
||||
@@ -397,7 +397,7 @@ static int decode_subframe_lpc(ShortenContext *s, int command, int channel,
|
||||
/* add offset to current samples */
|
||||
if (command == FN_QLPC && coffset)
|
||||
for (i = 0; i < s->blocksize; i++)
|
||||
s->decoded[channel][i] += (unsigned)coffset;
|
||||
s->decoded[channel][i] += coffset;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
+16
-20
@@ -1183,7 +1183,6 @@ static av_cold int svq3_decode_init(AVCodecContext *avctx)
|
||||
GetBitContext gb;
|
||||
int frame_size_code;
|
||||
int unk0, unk1, unk2, unk3, unk4;
|
||||
int w,h;
|
||||
|
||||
size = AV_RB32(&extradata[4]);
|
||||
if (size > extradata_end - extradata - 8) {
|
||||
@@ -1196,41 +1195,38 @@ static av_cold int svq3_decode_init(AVCodecContext *avctx)
|
||||
frame_size_code = get_bits(&gb, 3);
|
||||
switch (frame_size_code) {
|
||||
case 0:
|
||||
w = 160;
|
||||
h = 120;
|
||||
avctx->width = 160;
|
||||
avctx->height = 120;
|
||||
break;
|
||||
case 1:
|
||||
w = 128;
|
||||
h = 96;
|
||||
avctx->width = 128;
|
||||
avctx->height = 96;
|
||||
break;
|
||||
case 2:
|
||||
w = 176;
|
||||
h = 144;
|
||||
avctx->width = 176;
|
||||
avctx->height = 144;
|
||||
break;
|
||||
case 3:
|
||||
w = 352;
|
||||
h = 288;
|
||||
avctx->width = 352;
|
||||
avctx->height = 288;
|
||||
break;
|
||||
case 4:
|
||||
w = 704;
|
||||
h = 576;
|
||||
avctx->width = 704;
|
||||
avctx->height = 576;
|
||||
break;
|
||||
case 5:
|
||||
w = 240;
|
||||
h = 180;
|
||||
avctx->width = 240;
|
||||
avctx->height = 180;
|
||||
break;
|
||||
case 6:
|
||||
w = 320;
|
||||
h = 240;
|
||||
avctx->width = 320;
|
||||
avctx->height = 240;
|
||||
break;
|
||||
case 7:
|
||||
w = get_bits(&gb, 12);
|
||||
h = get_bits(&gb, 12);
|
||||
avctx->width = get_bits(&gb, 12);
|
||||
avctx->height = get_bits(&gb, 12);
|
||||
break;
|
||||
}
|
||||
ret = ff_set_dimensions(avctx, w, h);
|
||||
if (ret < 0)
|
||||
goto fail;
|
||||
|
||||
s->halfpel_flag = get_bits1(&gb);
|
||||
s->thirdpel_flag = get_bits1(&gb);
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user