Compare commits
6 Commits
Author | SHA1 | Date | |
---|---|---|---|
c40983a6f6 | |||
bd0497b28b | |||
4d95207938 | |||
1e8a75fae4 | |||
380980e0d2 | |||
1fd8eb4d4f |
@ -1,9 +1,6 @@
|
||||
Entries are sorted chronologically from oldest to youngest within each release,
|
||||
releases are sorted from youngest to oldest.
|
||||
|
||||
version <next>:
|
||||
|
||||
|
||||
version 3.0:
|
||||
- Common Encryption (CENC) MP4 encoding and decoding support
|
||||
- DXV decoding
|
||||
@ -70,6 +67,8 @@ version 3.0:
|
||||
- streamselect video and astreamselect audio filter
|
||||
- swaprect filter
|
||||
- metadata video and ametadata audio filter
|
||||
- SMPTE VC-2 HQ profile support for the Dirac decoder
|
||||
- SMPTE VC-2 native encoder supporting the HQ profile
|
||||
|
||||
|
||||
version 2.8:
|
||||
|
15
RELEASE_NOTES
Normal file
15
RELEASE_NOTES
Normal file
@ -0,0 +1,15 @@
|
||||
|
||||
┌─────────────────────────────────────────┐
|
||||
│ RELEASE NOTES for FFmpeg 3.0 "Einstein" │
|
||||
└─────────────────────────────────────────┘
|
||||
|
||||
The FFmpeg Project proudly presents FFmpeg 3.0 "Einstein", about 5
|
||||
months after the release of FFmpeg 2.8.
|
||||
|
||||
A complete Changelog is available at the root of the project, and the
|
||||
complete Git history on http://source.ffmpeg.org.
|
||||
|
||||
We hope you will like this release as much as we enjoyed working on it, and
|
||||
as usual, if you have any questions about it, or any FFmpeg related topic,
|
||||
feel free to join us on the #ffmpeg IRC channel (on irc.freenode.net) or ask
|
||||
on the mailing-lists.
|
@ -31,7 +31,7 @@ PROJECT_NAME = FFmpeg
|
||||
# This could be handy for archiving the generated documentation or
|
||||
# if some version control system is used.
|
||||
|
||||
PROJECT_NUMBER =
|
||||
PROJECT_NUMBER = 3.0
|
||||
|
||||
# With the PROJECT_LOGO tag one can specify a logo or icon that is included
|
||||
# in the documentation. The maximum height of the logo should not exceed 55
|
||||
|
@ -756,6 +756,6 @@ AVCodec ff_cfhd_decoder = {
|
||||
.init = cfhd_decode_init,
|
||||
.close = cfhd_close_decoder,
|
||||
.decode = cfhd_decode,
|
||||
.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_FRAME_THREADS,
|
||||
.capabilities = AV_CODEC_CAP_DR1,
|
||||
.caps_internal = FF_CODEC_CAP_INIT_THREADSAFE | FF_CODEC_CAP_INIT_CLEANUP,
|
||||
};
|
||||
|
@ -753,6 +753,10 @@ void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth)
|
||||
c->transform_add[3] = ff_hevc_transform_add32_8_avx;
|
||||
}
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
c->sao_band_filter[0] = ff_hevc_sao_band_filter_8_8_avx2;
|
||||
c->sao_band_filter[1] = ff_hevc_sao_band_filter_16_8_avx2;
|
||||
}
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
c->idct_dc[2] = ff_hevc_idct16x16_dc_8_avx2;
|
||||
c->idct_dc[3] = ff_hevc_idct32x32_dc_8_avx2;
|
||||
if (ARCH_X86_64) {
|
||||
@ -897,7 +901,9 @@ void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth)
|
||||
SAO_BAND_INIT(10, avx);
|
||||
}
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
|
||||
c->sao_band_filter[0] = ff_hevc_sao_band_filter_8_10_avx2;
|
||||
}
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
c->idct_dc[2] = ff_hevc_idct16x16_dc_10_avx2;
|
||||
c->idct_dc[3] = ff_hevc_idct32x32_dc_10_avx2;
|
||||
if (ARCH_X86_64) {
|
||||
@ -1095,6 +1101,9 @@ void ff_hevc_dsp_init_x86(HEVCDSPContext *c, const int bit_depth)
|
||||
SAO_BAND_INIT(12, avx);
|
||||
}
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
c->sao_band_filter[0] = ff_hevc_sao_band_filter_8_12_avx2;
|
||||
}
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
c->idct_dc[2] = ff_hevc_idct16x16_dc_12_avx2;
|
||||
c->idct_dc[3] = ff_hevc_idct32x32_dc_12_avx2;
|
||||
|
||||
|
@ -98,7 +98,7 @@ av_cold void ff_huffyuvencdsp_init_x86(HuffYUVEncDSPContext *c)
|
||||
c->diff_bytes = ff_diff_bytes_sse2;
|
||||
}
|
||||
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
c->diff_bytes = ff_diff_bytes_avx2;
|
||||
}
|
||||
}
|
||||
|
@ -44,7 +44,7 @@ av_cold void ff_jpeg2000dsp_init_x86(Jpeg2000DSPContext *c)
|
||||
c->mct_decode[FF_DWT97] = ff_ict_float_avx;
|
||||
}
|
||||
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
c->mct_decode[FF_DWT53] = ff_rct_int_avx2;
|
||||
}
|
||||
}
|
||||
|
@ -199,6 +199,6 @@ av_cold void ff_mlpdsp_init_x86(MLPDSPContext *c)
|
||||
#endif
|
||||
if (ARCH_X86_64 && EXTERNAL_SSE4(cpu_flags))
|
||||
c->mlp_rematrix_channel = ff_mlp_rematrix_channel_sse4;
|
||||
if (ARCH_X86_64 && EXTERNAL_AVX2(cpu_flags) && cpu_flags & AV_CPU_FLAG_BMI2)
|
||||
if (ARCH_X86_64 && EXTERNAL_AVX2_FAST(cpu_flags) && cpu_flags & AV_CPU_FLAG_BMI2)
|
||||
c->mlp_rematrix_channel = ff_mlp_rematrix_channel_avx2_bmi2;
|
||||
}
|
||||
|
@ -67,7 +67,7 @@ av_cold void ff_synth_filter_init_x86(SynthFilterContext *s)
|
||||
if (EXTERNAL_AVX_FAST(cpu_flags)) {
|
||||
s->synth_filter_float = synth_filter_avx;
|
||||
}
|
||||
if (EXTERNAL_FMA3(cpu_flags) && !(cpu_flags & AV_CPU_FLAG_AVXSLOW)) {
|
||||
if (EXTERNAL_FMA3_FAST(cpu_flags)) {
|
||||
s->synth_filter_float = synth_filter_fma3;
|
||||
}
|
||||
#endif /* HAVE_YASM */
|
||||
|
@ -45,7 +45,7 @@ av_cold void ff_v210enc_init_x86(V210EncContext *s)
|
||||
if (EXTERNAL_AVX(cpu_flags))
|
||||
s->pack_line_8 = ff_v210_planar_pack_8_avx;
|
||||
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
s->pack_line_8 = ff_v210_planar_pack_8_avx2;
|
||||
s->pack_line_10 = ff_v210_planar_pack_10_avx2;
|
||||
s->sample_factor = 2;
|
||||
|
@ -377,7 +377,7 @@ av_cold void ff_vp9dsp_init_x86(VP9DSPContext *dsp, int bpp, int bitexact)
|
||||
init_ipred(32, avx, v, VERT);
|
||||
}
|
||||
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
init_fpel_func(1, 1, 32, avg, _8, avx2);
|
||||
init_fpel_func(0, 1, 64, avg, _8, avx2);
|
||||
if (ARCH_X86_64) {
|
||||
|
@ -129,7 +129,7 @@ av_cold void ff_vp9dsp_init_16bpp_x86(VP9DSPContext *dsp)
|
||||
init_ipred_funcs(hd, HOR_DOWN, 16, avx);
|
||||
}
|
||||
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
init_fpel_func(2, 1, 32, avg, _16, avx2);
|
||||
init_fpel_func(1, 1, 64, avg, _16, avx2);
|
||||
init_fpel_func(0, 1, 128, avg, _16, avx2);
|
||||
|
@ -225,7 +225,7 @@ av_cold void INIT_FUNC(VP9DSPContext *dsp, int bitexact)
|
||||
init_lpf_funcs(BPC, avx);
|
||||
}
|
||||
|
||||
if (EXTERNAL_AVX2(cpu_flags)) {
|
||||
if (EXTERNAL_AVX2_FAST(cpu_flags)) {
|
||||
#if HAVE_AVX2_EXTERNAL
|
||||
init_subpel3_32_64(0, put, BPC, avx2);
|
||||
init_subpel3_32_64(1, avg, BPC, avx2);
|
||||
|
@ -24,13 +24,16 @@
|
||||
#define CPUEXT_SUFFIX(flags, suffix, cpuext) \
|
||||
(HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext))
|
||||
|
||||
#define CPUEXT_SUFFIX_FAST(flags, suffix, cpuext) \
|
||||
#define CPUEXT_SUFFIX_FAST2(flags, suffix, cpuext, slow_cpuext) \
|
||||
(HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \
|
||||
!((flags) & AV_CPU_FLAG_ ## cpuext ## SLOW))
|
||||
!((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW))
|
||||
|
||||
#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) \
|
||||
#define CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, slow_cpuext) \
|
||||
(HAVE_ ## cpuext ## suffix && ((flags) & AV_CPU_FLAG_ ## cpuext) && \
|
||||
((flags) & AV_CPU_FLAG_ ## cpuext ## SLOW))
|
||||
((flags) & AV_CPU_FLAG_ ## slow_cpuext ## SLOW))
|
||||
|
||||
#define CPUEXT_SUFFIX_FAST(flags, suffix, cpuext) CPUEXT_SUFFIX_FAST2(flags, suffix, cpuext, cpuext)
|
||||
#define CPUEXT_SUFFIX_SLOW(flags, suffix, cpuext) CPUEXT_SUFFIX_SLOW2(flags, suffix, cpuext, cpuext)
|
||||
|
||||
#define CPUEXT(flags, cpuext) CPUEXT_SUFFIX(flags, , cpuext)
|
||||
#define CPUEXT_FAST(flags, cpuext) CPUEXT_SUFFIX_FAST(flags, , cpuext)
|
||||
|
@ -68,8 +68,12 @@
|
||||
#define EXTERNAL_AVX_SLOW(flags) CPUEXT_SUFFIX_SLOW(flags, _EXTERNAL, AVX)
|
||||
#define EXTERNAL_XOP(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, XOP)
|
||||
#define EXTERNAL_FMA3(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, FMA3)
|
||||
#define EXTERNAL_FMA3_FAST(flags) CPUEXT_SUFFIX_FAST2(flags, _EXTERNAL, FMA3, AVX)
|
||||
#define EXTERNAL_FMA3_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, FMA3, AVX)
|
||||
#define EXTERNAL_FMA4(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, FMA4)
|
||||
#define EXTERNAL_AVX2(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AVX2)
|
||||
#define EXTERNAL_AVX2_FAST(flags) CPUEXT_SUFFIX_FAST2(flags, _EXTERNAL, AVX2, AVX)
|
||||
#define EXTERNAL_AVX2_SLOW(flags) CPUEXT_SUFFIX_SLOW2(flags, _EXTERNAL, AVX2, AVX)
|
||||
#define EXTERNAL_AESNI(flags) CPUEXT_SUFFIX(flags, _EXTERNAL, AESNI)
|
||||
|
||||
#define INLINE_AMD3DNOW(flags) CPUEXT_SUFFIX(flags, _INLINE, AMD3DNOW)
|
||||
|
@ -92,7 +92,7 @@ av_cold void ff_float_dsp_init_x86(AVFloatDSPContext *fdsp)
|
||||
fdsp->vector_fmul_add = ff_vector_fmul_add_avx;
|
||||
fdsp->vector_fmul_reverse = ff_vector_fmul_reverse_avx;
|
||||
}
|
||||
if (EXTERNAL_FMA3(cpu_flags) && !(cpu_flags & AV_CPU_FLAG_AVXSLOW)) {
|
||||
if (EXTERNAL_FMA3_FAST(cpu_flags)) {
|
||||
fdsp->vector_fmac_scalar = ff_vector_fmac_scalar_fma3;
|
||||
fdsp->vector_fmul_add = ff_vector_fmul_add_fma3;
|
||||
}
|
||||
|
@ -39,7 +39,7 @@ av_cold void ff_init_lls_x86(LLSModel *m)
|
||||
if (EXTERNAL_AVX_FAST(cpu_flags)) {
|
||||
m->update_lls = ff_update_lls_avx;
|
||||
}
|
||||
if (EXTERNAL_FMA3(cpu_flags) && !(cpu_flags & AV_CPU_FLAG_AVXSLOW)) {
|
||||
if (EXTERNAL_FMA3_FAST(cpu_flags)) {
|
||||
m->update_lls = ff_update_lls_fma3;
|
||||
}
|
||||
}
|
||||
|
@ -174,7 +174,7 @@ MULTI_CAPS_FUNC(SSE2, sse2)
|
||||
ac->simd_f = ff_pack_8ch_float_to_int32_a_avx;
|
||||
}
|
||||
}
|
||||
if(EXTERNAL_AVX2(mm_flags)) {
|
||||
if(EXTERNAL_AVX2_FAST(mm_flags)) {
|
||||
if( out_fmt == AV_SAMPLE_FMT_S32 && in_fmt == AV_SAMPLE_FMT_FLT || out_fmt == AV_SAMPLE_FMT_S32P && in_fmt == AV_SAMPLE_FMT_FLTP)
|
||||
ac->simd_f = ff_float_to_int32_a_avx2;
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ av_cold void swri_resample_dsp_x86_init(ResampleContext *c)
|
||||
c->dsp.resample = c->linear ? ff_resample_linear_float_avx
|
||||
: ff_resample_common_float_avx;
|
||||
}
|
||||
if (EXTERNAL_FMA3(mm_flags) && !(mm_flags & AV_CPU_FLAG_AVXSLOW)) {
|
||||
if (EXTERNAL_FMA3_FAST(mm_flags)) {
|
||||
c->dsp.resample = c->linear ? ff_resample_linear_float_fma3
|
||||
: ff_resample_common_float_fma3;
|
||||
}
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
cd "$1"/..
|
||||
|
||||
git --version > /dev/null || { cat tests/ref/fate/source ; exit 0; }
|
||||
git show > /dev/null 2> /dev/null || { cat tests/ref/fate/source ; exit 0; }
|
||||
|
||||
echo Files without standard license headers:
|
||||
git grep -L -E "This file is part of FFmpeg|This file is part of libswresample|"\
|
||||
|
Reference in New Issue
Block a user