[FFmpeg-cvslog] avfilter/firequalizer: add cubic_interpolate function on gain
ffmpeg | branch: master | Muhammad Faiz | Tue Oct 18 22:55:39 2016 +0700| [23b6f880d6d7418ca75783767e7f7c02af7cf456] | committer: Muhammad Faiz avfilter/firequalizer: add cubic_interpolate function on gain smoother version of gain_interpolate Signed-off-by: Muhammad Faiz > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=23b6f880d6d7418ca75783767e7f7c02af7cf456 --- doc/filters.texi | 2 ++ libavfilter/af_firequalizer.c | 49 +-- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/doc/filters.texi b/doc/filters.texi index 9fc8c4f..14c9b07 100644 --- a/doc/filters.texi +++ b/doc/filters.texi @@ -2508,6 +2508,8 @@ and functions: @table @option @item gain_interpolate(f) interpolate gain on frequency f based on gain_entry +@item cubic_interpolate(f) +same as gain_interpolate, but smoother @end table This option is also available as command. Default is @code{gain_interpolate(f)}. diff --git a/libavfilter/af_firequalizer.c b/libavfilter/af_firequalizer.c index 6868066..e799e34 100644 --- a/libavfilter/af_firequalizer.c +++ b/libavfilter/af_firequalizer.c @@ -354,6 +354,51 @@ static double gain_interpolate_func(void *p, double freq) return res[0].gain; } +static double cubic_interpolate_func(void *p, double freq) +{ +AVFilterContext *ctx = p; +FIREqualizerContext *s = ctx->priv; +GainEntry *res; +double x, x2, x3; +double a, b, c, d; +double m0, m1, m2, msum, unit; + +if (!s->nb_gain_entry) +return 0; + +if (freq <= s->gain_entry_tbl[0].freq) +return s->gain_entry_tbl[0].gain; + +if (freq >= s->gain_entry_tbl[s->nb_gain_entry-1].freq) +return s->gain_entry_tbl[s->nb_gain_entry-1].gain; + +res = bsearch(&freq, &s->gain_entry_tbl, s->nb_gain_entry - 1, sizeof(*res), gain_entry_compare); +av_assert0(res); + +unit = res[1].freq - res[0].freq; +m0 = res != s->gain_entry_tbl ? + unit * (res[0].gain - res[-1].gain) / (res[0].freq - res[-1].freq) : 0; +m1 = res[1].gain - res[0].gain; +m2 = res != s->gain_entry_tbl + s->nb_gain_entry - 2 ? + unit * (res[2].gain - res[1].gain) / (res[2].freq - res[1].freq) : 0; + +msum = fabs(m0) + fabs(m1); +m0 = msum > 0 ? (fabs(m0) * m1 + fabs(m1) * m0) / msum : 0; +msum = fabs(m1) + fabs(m2); +m1 = msum > 0 ? (fabs(m1) * m2 + fabs(m2) * m1) / msum : 0; + +d = res[0].gain; +c = m0; +b = 3 * res[1].gain - m1 - 2 * c - 3 * d; +a = res[1].gain - b - c - d; + +x = (freq - res[0].freq) / unit; +x2 = x * x; +x3 = x2 * x; + +return a * x3 + b * x2 + c * x + d; +} + static const char *const var_names[] = { "f", "sr", @@ -379,9 +424,9 @@ static int generate_kernel(AVFilterContext *ctx, const char *gain, const char *g FIREqualizerContext *s = ctx->priv; AVFilterLink *inlink = ctx->inputs[0]; const char *gain_entry_func_names[] = { "entry", NULL }; -const char *gain_func_names[] = { "gain_interpolate", NULL }; +const char *gain_func_names[] = { "gain_interpolate", "cubic_interpolate", NULL }; double (*gain_entry_funcs[])(void *, double, double) = { entry_func, NULL }; -double (*gain_funcs[])(void *, double) = { gain_interpolate_func, NULL }; +double (*gain_funcs[])(void *, double) = { gain_interpolate_func, cubic_interpolate_func, NULL }; double vars[VAR_NB]; AVExpr *gain_expr; int ret, k, center, ch; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] lavc/mediacodec_wrapper: do not discard codecs reporting they do not support any profile
ffmpeg | branch: master | Matthieu Bouron | Fri Oct 7 11:20:33 2016 +0200| [b8c158a4eddb79ba3964dbe51b0e1db01454f96a] | committer: Matthieu Bouron lavc/mediacodec_wrapper: do not discard codecs reporting they do not support any profile Depending on the device, some (VP8/VP9/...) decoders report that they do not support any profiles. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=b8c158a4eddb79ba3964dbe51b0e1db01454f96a --- libavcodec/mediacodec_wrapper.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/libavcodec/mediacodec_wrapper.c b/libavcodec/mediacodec_wrapper.c index 97e3a29..c2af950 100644 --- a/libavcodec/mediacodec_wrapper.c +++ b/libavcodec/mediacodec_wrapper.c @@ -480,6 +480,9 @@ char *ff_AMediaCodecList_getCodecNameByType(const char *mime, int profile, int e } profile_count = (*env)->GetArrayLength(env, profile_levels); +if (!profile_count) { +found_codec = 1; +} for (k = 0; k < profile_count; k++) { int supported_profile = 0; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] lavc: add mpeg4 mediacodec decoder
ffmpeg | branch: master | Matthieu Bouron | Tue Oct 4 17:47:44 2016 +0200| [f62c54456db0fdd3ff82397f9142715d5c479354] | committer: Matthieu Bouron lavc: add mpeg4 mediacodec decoder > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=f62c54456db0fdd3ff82397f9142715d5c479354 --- Changelog| 4 ++-- configure| 2 ++ libavcodec/Makefile | 1 + libavcodec/allcodecs.c | 2 ++ libavcodec/mediacodecdec.c | 7 +++ libavcodec/mediacodecdec_h2645.c | 40 +++- libavcodec/version.h | 2 +- 7 files changed, 54 insertions(+), 4 deletions(-) diff --git a/Changelog b/Changelog index 9f1b8e5..c319388 100644 --- a/Changelog +++ b/Changelog @@ -10,7 +10,7 @@ version : - curves filter doesn't automatically insert points at x=0 and x=1 anymore - 16-bit support in curves filter and selectivecolor filter - OpenH264 decoder wrapper -- MediaCodec H.264/HEVC/VP8/VP9 hwaccel +- MediaCodec H.264/HEVC/MPEG-4/VP8/VP9 hwaccel - True Audio (TTA) muxer - crystalizer audio filter - acrusher audio filter @@ -28,7 +28,7 @@ version : - gblur filter - avgblur filter - sobel and prewitt filter -- MediaCodec HEVC/VP8/VP9 decoding +- MediaCodec HEVC/MPEG-4/VP8/VP9 decoding - Meridian Lossless Packing (MLP) / TrueHD encoder - Non-Local Means (nlmeans) denoising filter - sdl2 output device and ffplay support diff --git a/configure b/configure index 294ff64..1e6834f 100755 --- a/configure +++ b/configure @@ -2630,6 +2630,8 @@ mpeg2_xvmc_hwaccel_deps="xvmc" mpeg2_xvmc_hwaccel_select="mpeg2video_decoder" mpeg4_crystalhd_decoder_select="crystalhd" mpeg4_cuvid_hwaccel_deps="cuda cuvid" +mpeg4_mediacodec_decoder_deps="mediacodec" +mpeg4_mediacodec_hwaccel_deps="mediacodec" mpeg4_mmal_decoder_deps="mmal" mpeg4_mmal_decoder_select="mmal" mpeg4_mmal_hwaccel_deps="mmal" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index 734c79d..e8b1b00 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -413,6 +413,7 @@ OBJS-$(CONFIG_MPEG2_QSV_ENCODER) += qsvenc_mpeg2.o OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o OBJS-$(CONFIG_MPEG4_DECODER) += xvididct.o +OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec_h2645.o OBJS-$(CONFIG_MPEG4_OMX_ENCODER) += omx.o OBJS-$(CONFIG_MPL2_DECODER)+= mpl2dec.o ass.o OBJS-$(CONFIG_MSA1_DECODER)+= mss3.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index 44f7205..b592aa3 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -103,6 +103,7 @@ void avcodec_register_all(void) REGISTER_HWACCEL(MPEG2_VDPAU, mpeg2_vdpau); REGISTER_HWACCEL(MPEG2_VIDEOTOOLBOX, mpeg2_videotoolbox); REGISTER_HWACCEL(MPEG4_CUVID, mpeg4_cuvid); +REGISTER_HWACCEL(MPEG4_MEDIACODEC, mpeg4_mediacodec); REGISTER_HWACCEL(MPEG4_MMAL,mpeg4_mmal); REGISTER_HWACCEL(MPEG4_VAAPI, mpeg4_vaapi); REGISTER_HWACCEL(MPEG4_VDPAU, mpeg4_vdpau); @@ -657,6 +658,7 @@ void avcodec_register_all(void) REGISTER_DECODER(MPEG2_CUVID, mpeg2_cuvid); REGISTER_ENCODER(MPEG2_QSV, mpeg2_qsv); REGISTER_DECODER(MPEG4_CUVID, mpeg4_cuvid); +REGISTER_DECODER(MPEG4_MEDIACODEC, mpeg4_mediacodec); REGISTER_DECODER(VC1_CUVID, vc1_cuvid); REGISTER_DECODER(VP8_CUVID, vp8_cuvid); REGISTER_DECODER(VP8_MEDIACODEC,vp8_mediacodec); diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index e5a8dbc..c031de8 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -767,6 +767,13 @@ AVHWAccel ff_hevc_mediacodec_hwaccel = { .pix_fmt = AV_PIX_FMT_MEDIACODEC, }; +AVHWAccel ff_mpeg4_mediacodec_hwaccel = { +.name= "mediacodec", +.type= AVMEDIA_TYPE_VIDEO, +.id = AV_CODEC_ID_MPEG4, +.pix_fmt = AV_PIX_FMT_MEDIACODEC, +}; + AVHWAccel ff_vp8_mediacodec_hwaccel = { .name= "mediacodec", .type= AVMEDIA_TYPE_VIDEO, diff --git a/libavcodec/mediacodecdec_h2645.c b/libavcodec/mediacodecdec_h2645.c index c5f5af2..578b10d 100644 --- a/libavcodec/mediacodecdec_h2645.c +++ b/libavcodec/mediacodecdec_h2645.c @@ -1,5 +1,5 @@ /* - * Android MediaCodec H.264 / H.265 / VP8 / VP9 decoders + * Android MediaCodec H.264 / H.265 / MPEG-4 / VP8 / VP9 decoders * * Copyright (c) 2015-2016 Matthieu Bouron * @@ -266,6 +266,19 @@ done: } #endif +#if CONFIG_MPEG4_MEDIACODEC_DECODER +static int mpeg4_set_extradata(AVCodecContext *avctx, FFAMediaFormat *format) +{ +int ret = 0; + +if (avctx->extradata) { +ff_AMediaFormat_setBuffer(format, "csd-0", avctx->extradata, avctx->extradata_size); +} + +return ret; +} +#endif + #if CONFIG_VP8_MEDIACODEC_DECODER || CONFIG_VP9_MEDIACODEC_DECODER static int vpx_set_extradata(AVCodecContext *a
[FFmpeg-cvslog] lavc: add vp8/vp9 mediacodec decoders
ffmpeg | branch: master | Matthieu Bouron | Tue Oct 4 16:02:59 2016 +0200| [0f7fce87ea9842261076f93bd0f28557fcd065bb] | committer: Matthieu Bouron lavc: add vp8/vp9 mediacodec decoders > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=0f7fce87ea9842261076f93bd0f28557fcd065bb --- Changelog| 4 +-- configure| 4 +++ libavcodec/Makefile | 2 ++ libavcodec/allcodecs.c | 4 +++ libavcodec/mediacodecdec.c | 14 libavcodec/mediacodecdec_h2645.c | 73 +++- libavcodec/version.h | 2 +- 7 files changed, 99 insertions(+), 4 deletions(-) diff --git a/Changelog b/Changelog index 32f0bd4..9f1b8e5 100644 --- a/Changelog +++ b/Changelog @@ -10,7 +10,7 @@ version : - curves filter doesn't automatically insert points at x=0 and x=1 anymore - 16-bit support in curves filter and selectivecolor filter - OpenH264 decoder wrapper -- MediaCodec H.264 and HEVC hwaccel +- MediaCodec H.264/HEVC/VP8/VP9 hwaccel - True Audio (TTA) muxer - crystalizer audio filter - acrusher audio filter @@ -28,7 +28,7 @@ version : - gblur filter - avgblur filter - sobel and prewitt filter -- MediaCodec HEVC decoding +- MediaCodec HEVC/VP8/VP9 decoding - Meridian Lossless Packing (MLP) / TrueHD encoder - Non-Local Means (nlmeans) denoising filter - sdl2 output device and ffplay support diff --git a/configure b/configure index 96f575f..294ff64 100755 --- a/configure +++ b/configure @@ -2662,10 +2662,14 @@ vc1_vdpau_hwaccel_deps="vdpau" vc1_vdpau_hwaccel_select="vc1_decoder" vp8_cuvid_hwaccel_deps="cuda cuvid" vp9_cuvid_hwaccel_deps="cuda cuvid" +vp8_mediacodec_decoder_deps="mediacodec" +vp8_mediacodec_hwaccel_deps="mediacodec" vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9" vp9_d3d11va_hwaccel_select="vp9_decoder" vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9" vp9_dxva2_hwaccel_select="vp9_decoder" +vp9_mediacodec_decoder_deps="mediacodec" +vp9_mediacodec_hwaccel_deps="mediacodec" vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9" vp9_vaapi_hwaccel_select="vp9_decoder" wmv3_crystalhd_decoder_select="crystalhd" diff --git a/libavcodec/Makefile b/libavcodec/Makefile index a1560ba..734c79d 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -595,9 +595,11 @@ OBJS-$(CONFIG_VP6_DECODER) += vp6.o vp56.o vp56data.o \ OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuvid.o +OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec_h2645.o OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9dsp.o vp56rac.o vp9dsp_8bpp.o \ vp9dsp_10bpp.o vp9dsp_12bpp.o OBJS-$(CONFIG_VP9_CUVID_DECODER) += cuvid.o +OBJS-$(CONFIG_VP9_MEDIACODEC_DECODER) += mediacodecdec_h2645.o OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o diff --git a/libavcodec/allcodecs.c b/libavcodec/allcodecs.c index fed740a..44f7205 100644 --- a/libavcodec/allcodecs.c +++ b/libavcodec/allcodecs.c @@ -115,9 +115,11 @@ void avcodec_register_all(void) REGISTER_HWACCEL(VC1_MMAL, vc1_mmal); REGISTER_HWACCEL(VC1_QSV, vc1_qsv); REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid); +REGISTER_HWACCEL(VP8_MEDIACODEC,vp8_mediacodec); REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid); REGISTER_HWACCEL(VP9_D3D11VA, vp9_d3d11va); REGISTER_HWACCEL(VP9_DXVA2, vp9_dxva2); +REGISTER_HWACCEL(VP9_MEDIACODEC,vp9_mediacodec); REGISTER_HWACCEL(VP9_VAAPI, vp9_vaapi); REGISTER_HWACCEL(WMV3_D3D11VA, wmv3_d3d11va); REGISTER_HWACCEL(WMV3_DXVA2,wmv3_dxva2); @@ -657,7 +659,9 @@ void avcodec_register_all(void) REGISTER_DECODER(MPEG4_CUVID, mpeg4_cuvid); REGISTER_DECODER(VC1_CUVID, vc1_cuvid); REGISTER_DECODER(VP8_CUVID, vp8_cuvid); +REGISTER_DECODER(VP8_MEDIACODEC,vp8_mediacodec); REGISTER_DECODER(VP9_CUVID, vp9_cuvid); +REGISTER_DECODER(VP9_MEDIACODEC,vp9_mediacodec); /* parsers */ REGISTER_PARSER(AAC,aac); diff --git a/libavcodec/mediacodecdec.c b/libavcodec/mediacodecdec.c index 8ff1138..e5a8dbc 100644 --- a/libavcodec/mediacodecdec.c +++ b/libavcodec/mediacodecdec.c @@ -766,3 +766,17 @@ AVHWAccel ff_hevc_mediacodec_hwaccel = { .id = AV_CODEC_ID_HEVC, .pix_fmt = AV_PIX_FMT_MEDIACODEC, }; + +AVHWAccel ff_vp8_mediacodec_hwaccel = { +.name= "mediacodec", +.type= AVMEDIA_TYPE_VIDEO, +.id = AV_CODEC_ID_VP8, +.pix_fmt = AV_PIX_FMT_MEDIACODEC, +}; + +AVHWAccel ff_vp9_mediacodec_hwaccel = { +.name= "mediacodec", +.type= AVMEDIA_TYPE_VIDEO, +.id = AV_CODEC_ID_VP9, +.pix_fmt = AV_PI
[FFmpeg-cvslog] lavc/mediacodec: use more meaningful filenames
ffmpeg | branch: master | Matthieu Bouron | Wed Oct 12 14:44:08 2016 +0200| [d5082a2ce776a2e43e25998aa07541c9ab7af0d3] | committer: Matthieu Bouron lavc/mediacodec: use more meaningful filenames Adds the following changes: * mediacodecdec.{c,h} -> mediacodecdec_common.{c,h} * mediacodecdec_h2645.c -> mediacodecdec.c > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d5082a2ce776a2e43e25998aa07541c9ab7af0d3 --- libavcodec/Makefile| 14 +- libavcodec/mediacodec.c|3 +- libavcodec/mediacodec_sw_buffer.c |2 +- libavcodec/mediacodec_sw_buffer.h |2 +- libavcodec/mediacodecdec.c | 1064 +--- libavcodec/mediacodecdec_common.c | 789 +++ .../{mediacodecdec.h => mediacodecdec_common.h}|6 +- libavcodec/mediacodecdec_h2645.c | 623 8 files changed, 1252 insertions(+), 1251 deletions(-) diff --git a/libavcodec/Makefile b/libavcodec/Makefile index e8b1b00..f1d5bf1 100644 --- a/libavcodec/Makefile +++ b/libavcodec/Makefile @@ -94,7 +94,7 @@ OBJS-$(CONFIG_LSP) += lsp.o OBJS-$(CONFIG_LZF) += lzf.o OBJS-$(CONFIG_MDCT)+= mdct_fixed.o mdct_float.o mdct_fixed_32.o OBJS-$(CONFIG_ME_CMP) += me_cmp.o -OBJS-$(CONFIG_MEDIACODEC) += mediacodecdec.o mediacodec_surface.o mediacodec_wrapper.o mediacodec_sw_buffer.o +OBJS-$(CONFIG_MEDIACODEC) += mediacodecdec_common.o mediacodec_surface.o mediacodec_wrapper.o mediacodec_sw_buffer.o OBJS-$(CONFIG_MPEG_ER) += mpeg_er.o OBJS-$(CONFIG_MPEGAUDIO) += mpegaudio.o mpegaudiodata.o \ mpegaudiodecheader.o @@ -316,7 +316,7 @@ OBJS-$(CONFIG_H264_DECODER)+= h264dec.o h264_cabac.o h264_cavlc.o \ h264_slice.o h264data.o h264_parse.o \ h2645_parse.o OBJS-$(CONFIG_H264_CUVID_DECODER) += cuvid.o -OBJS-$(CONFIG_H264_MEDIACODEC_DECODER) += mediacodecdec_h2645.o +OBJS-$(CONFIG_H264_MEDIACODEC_DECODER) += mediacodecdec.o OBJS-$(CONFIG_H264_MMAL_DECODER) += mmaldec.o OBJS-$(CONFIG_H264_NVENC_ENCODER) += nvenc_h264.o OBJS-$(CONFIG_NVENC_ENCODER) += nvenc_h264.o @@ -333,7 +333,7 @@ OBJS-$(CONFIG_HEVC_DECODER)+= hevc.o hevc_mvs.o hevc_ps.o hevc_sei.o hevc_cabac.o hevc_refs.o hevcpred.o \ hevcdsp.o hevc_filter.o h2645_parse.o hevc_data.o OBJS-$(CONFIG_HEVC_CUVID_DECODER) += cuvid.o -OBJS-$(CONFIG_HEVC_MEDIACODEC_DECODER) += mediacodecdec_h2645.o hevc_parse.o +OBJS-$(CONFIG_HEVC_MEDIACODEC_DECODER) += mediacodecdec.o hevc_parse.o OBJS-$(CONFIG_HEVC_NVENC_ENCODER) += nvenc_hevc.o OBJS-$(CONFIG_NVENC_HEVC_ENCODER) += nvenc_hevc.o OBJS-$(CONFIG_HEVC_QSV_DECODER)+= qsvdec_h2645.o @@ -413,7 +413,7 @@ OBJS-$(CONFIG_MPEG2_QSV_ENCODER) += qsvenc_mpeg2.o OBJS-$(CONFIG_MPEG2VIDEO_DECODER) += mpeg12dec.o mpeg12.o mpeg12data.o OBJS-$(CONFIG_MPEG2VIDEO_ENCODER) += mpeg12enc.o mpeg12.o OBJS-$(CONFIG_MPEG4_DECODER) += xvididct.o -OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec_h2645.o +OBJS-$(CONFIG_MPEG4_MEDIACODEC_DECODER) += mediacodecdec.o OBJS-$(CONFIG_MPEG4_OMX_ENCODER) += omx.o OBJS-$(CONFIG_MPL2_DECODER)+= mpl2dec.o ass.o OBJS-$(CONFIG_MSA1_DECODER)+= mss3.o @@ -596,11 +596,11 @@ OBJS-$(CONFIG_VP6_DECODER) += vp6.o vp56.o vp56data.o \ OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuvid.o -OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec_h2645.o +OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec.o OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9dsp.o vp56rac.o vp9dsp_8bpp.o \ vp9dsp_10bpp.o vp9dsp_12bpp.o OBJS-$(CONFIG_VP9_CUVID_DECODER) += cuvid.o -OBJS-$(CONFIG_VP9_MEDIACODEC_DECODER) += mediacodecdec_h2645.o +OBJS-$(CONFIG_VP9_MEDIACODEC_DECODER) += mediacodecdec.o OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o @@ -1008,7 +1008,7 @@ SKIPHEADERS-$(CONFIG_JNI) += ffjni.h SKIPHEADERS-$(CONFIG_LIBSCHROEDINGER) += libschroedinger.h SKIPHEADERS-$(CONFIG_LIBVPX) += libvpx.h SKIPHEADERS-$(CONFIG_LIBWEBP_ENCODER) += libwebpenc_common.h -SKIPHEADERS-$(CONFIG_MEDIACODEC) += mediacodecdec.h mediacodec_surface.h mediacodec_wrapper.h mediacodec_sw_buffer.h +SKIPHEADERS-$(CONFIG_MEDIACODEC) += mediacodecdec_common.h mediacodec_surface.h
[FFmpeg-cvslog] avcodec/nvenc: add test for Temporal AQ support
ffmpeg | branch: master | Sven C. Dack | Fri Oct 14 16:02:54 2016 +0100| [da4d0fa86b48d79398b0ccf7ecadc6ff69e3c947] | committer: Timo Rothenpieler avcodec/nvenc: add test for Temporal AQ support Adds a check to see if the hardware supports temporal aq. Signed-off-by: Timo Rothenpieler > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=da4d0fa86b48d79398b0ccf7ecadc6ff69e3c947 --- libavcodec/nvenc.c | 6 ++ 1 file changed, 6 insertions(+) diff --git a/libavcodec/nvenc.c b/libavcodec/nvenc.c index e6c1c94..2505c3d 100644 --- a/libavcodec/nvenc.c +++ b/libavcodec/nvenc.c @@ -356,6 +356,12 @@ static int nvenc_check_capabilities(AVCodecContext *avctx) return AVERROR(ENOSYS); } +ret = nvenc_check_cap(avctx, NV_ENC_CAPS_SUPPORT_TEMPORAL_AQ); +if (ctx->temporal_aq > 0 && ret <= 0) { +av_log(avctx, AV_LOG_VERBOSE, "Temporal AQ not supported\n"); +return AVERROR(ENOSYS); +} + return 0; } ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avfilter/vf_scale_npp: select cubic and lanczos as alternative where super-sampling is not supported
ffmpeg | branch: master | Sven C. Dack | Wed Oct 19 12:51:21 2016 +0200| [1aa8fa418a82211df447099a61c50bacde97be09] | committer: Timo Rothenpieler avfilter/vf_scale_npp: select cubic and lanczos as alternative where super-sampling is not supported Signed-off-by: Timo Rothenpieler > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=1aa8fa418a82211df447099a61c50bacde97be09 --- libavfilter/vf_scale_npp.c | 14 +- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/libavfilter/vf_scale_npp.c b/libavfilter/vf_scale_npp.c index 68cee39..35abe39 100644 --- a/libavfilter/vf_scale_npp.c +++ b/libavfilter/vf_scale_npp.c @@ -294,9 +294,21 @@ static int init_processing_chain(AVFilterContext *ctx, int in_width, int in_heig /* figure out which stages need to be done */ if (in_width != out_width || in_height != out_height || -in_deinterleaved_format != out_deinterleaved_format) +in_deinterleaved_format != out_deinterleaved_format) { s->stages[STAGE_RESIZE].stage_needed = 1; +if (s->interp_algo == NPPI_INTER_SUPER && +(out_width > in_width && out_height > in_height)) { +s->interp_algo = NPPI_INTER_LANCZOS; +av_log(ctx, AV_LOG_WARNING, "super-sampling not supported for output dimensions, using lanczos instead.\n"); +} +if (s->interp_algo == NPPI_INTER_SUPER && +!(out_width < in_width && out_height < in_height)) { +s->interp_algo = NPPI_INTER_CUBIC; +av_log(ctx, AV_LOG_WARNING, "super-sampling not supported for output dimensions, using cubic instead.\n"); +} +} + if (!s->stages[STAGE_RESIZE].stage_needed && in_format == out_format) s->passthrough = 1; ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avcodec/nvenc_hevc: Added missing option -temporal_aq
ffmpeg | branch: master | Sven C. Dack | Thu Oct 13 18:06:09 2016 +0100| [aebbcb2706ab0bc5ca4feec8e7ae1e91c57cd67a] | committer: Timo Rothenpieler avcodec/nvenc_hevc: Added missing option -temporal_aq The option is present in h264_nvenc, but was missing from hevc_nvenc. Signed-off-by: Timo Rothenpieler > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=aebbcb2706ab0bc5ca4feec8e7ae1e91c57cd67a --- libavcodec/nvenc_hevc.c | 1 + 1 file changed, 1 insertion(+) diff --git a/libavcodec/nvenc_hevc.c b/libavcodec/nvenc_hevc.c index 320f290..0fec77a 100644 --- a/libavcodec/nvenc_hevc.c +++ b/libavcodec/nvenc_hevc.c @@ -93,6 +93,7 @@ static const AVOption options[] = { { "forced-idr", "If forcing keyframes, force them as IDR frames.", OFFSET(forced_idr), AV_OPT_TYPE_BOOL, { .i64 = -1 }, -1, 1, VE }, { "spatial_aq", "set to 1 to enable Spatial AQ", OFFSET(aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, +{ "temporal_aq", "set to 1 to enable Temporal AQ", OFFSET(temporal_aq), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "zerolatency", "Set 1 to indicate zero latency operation (no reordering delay)", OFFSET(zerolatency), AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, { "nonref_p", "Set this to 1 to enable automatic insertion of non-reference P-frames", ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] FATE: Add test for muxing discontinuous MP4 fragments with large timestamps
ffmpeg | branch: master | Derek Buitenhuis | Tue Oct 18 16:30:08 2016 +0100| [dfe7e5501d4acf007f66f7ad8606499f7d7dc2cb] | committer: Michael Niedermayer FATE: Add test for muxing discontinuous MP4 fragments with large timestamps Signed-off-by: Derek Buitenhuis > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=dfe7e5501d4acf007f66f7ad8606499f7d7dc2cb --- libavformat/tests/movenc.c | 39 ++- tests/ref/fate/movenc | 5 + 2 files changed, 35 insertions(+), 9 deletions(-) diff --git a/libavformat/tests/movenc.c b/libavformat/tests/movenc.c index 41cd4fc..ab87176 100644 --- a/libavformat/tests/movenc.c +++ b/libavformat/tests/movenc.c @@ -243,7 +243,7 @@ static void init(int bf, int audio_preroll) init_fps(bf, audio_preroll, 30); } -static void mux_frames(int n) +static void mux_frames(int n, int c) { int end_frames = frames + n; while (1) { @@ -299,6 +299,12 @@ static void mux_frames(int n) continue; if (skip_write_audio && pkt.stream_index == 1) continue; + +if (c) { +pkt.pts += (1LL<<32); +pkt.dts += (1LL<<32); +} + if (do_interleave) av_interleaved_write_frame(ctx, &pkt); else @@ -308,7 +314,7 @@ static void mux_frames(int n) static void mux_gops(int n) { -mux_frames(gop_size * n); +mux_frames(gop_size * n, 0); } static void skip_gops(int n) @@ -665,6 +671,21 @@ int main(int argc, char **argv) finish(); +// Test muxing discontinuous fragments with very large (> (1<<31)) timestamps. +av_dict_set(&opts, "movflags", "frag_custom+delay_moov+dash+frag_discont", 0); +av_dict_set(&opts, "fragment_index", "2", 0); +init(1, 1); +signal_init_ts(); +skip_gops(1); +mux_frames(gop_size, 1); // Write the second fragment +init_out("delay-moov-elst-signal-init-discont-largets"); +av_write_frame(ctx, NULL); // Output the moov +close_out(); +init_out("delay-moov-elst-signal-second-frag-discont-largets"); +av_write_frame(ctx, NULL); // Output the second fragment +close_out(); +finish(); + // Test VFR content, with sidx atoms (which declare the pts duration // of a fragment, forcing overriding the start pts of the next one). // Here, the fragment duration in pts is significantly different from @@ -680,9 +701,9 @@ int main(int argc, char **argv) init_out("vfr"); av_dict_set(&opts, "movflags", "frag_keyframe+delay_moov+dash", 0); init_fps(1, 1, 3); -mux_frames(gop_size/2); +mux_frames(gop_size/2, 0); duration /= 10; -mux_frames(gop_size/2); +mux_frames(gop_size/2, 0); mux_gops(1); finish(); close_out(); @@ -699,9 +720,9 @@ int main(int argc, char **argv) init_out("vfr-noduration"); av_dict_set(&opts, "movflags", "frag_keyframe+delay_moov+dash", 0); init_fps(1, 1, 3); -mux_frames(gop_size/2); +mux_frames(gop_size/2, 0); duration /= 10; -mux_frames(gop_size/2); +mux_frames(gop_size/2, 0); mux_gops(1); finish(); close_out(); @@ -729,16 +750,16 @@ int main(int argc, char **argv) av_dict_set(&opts, "movflags", "frag_keyframe+delay_moov", 0); av_dict_set(&opts, "frag_duration", "65", 0); init_fps(1, 1, 30); -mux_frames(gop_size/2); +mux_frames(gop_size/2, 0); // Pretend that the packet duration is the normal, even if // we actually skip a bunch of frames. (I.e., simulate that // we don't know of the framedrop in advance.) fake_pkt_duration = duration; duration *= 10; -mux_frames(1); +mux_frames(1, 0); fake_pkt_duration = 0; duration /= 10; -mux_frames(gop_size/2 - 1); +mux_frames(gop_size/2 - 1, 0); mux_gops(1); finish(); close_out(); diff --git a/tests/ref/fate/movenc b/tests/ref/fate/movenc index d3a86bc..09e603a 100644 --- a/tests/ref/fate/movenc +++ b/tests/ref/fate/movenc @@ -108,6 +108,11 @@ c3681590a292cb9ca19a5a982e530166 1219 delay-moov-elst-signal-init-discont write_data len 996, time 97, type sync atom sidx aa5462cc0d2144f72154d9c309edb57d 996 delay-moov-elst-signal-second-frag-discont write_data len 110, time nopts, type trailer atom - +write_data len 1243, time nopts, type header atom ftyp +dac14c8795d5cbd91ae770c6e2880c62 1243 delay-moov-elst-signal-init-discont-largets +write_data len 996, time 27962123, type sync atom sidx +41cac4c3df656a87bb38363fdcd745e6 996 delay-moov-elst-signal-second-frag-discont-largets +write_data len 110, time nopts, type trailer atom - write_data len 1219, time nopts, type header atom ftyp write_data len 2572, time -33, type sync atom sidx write_data len 996, time 517, type sync atom sidx ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] lavf/mov: support gopro hero moments udta tag
ffmpeg | branch: master | Jean Caillé | Tue Oct 18 15:47:55 2016 +0200| [6498549fd75f679820a059a65ece1df4666aa46c] | committer: Michael Niedermayer lavf/mov: support gopro hero moments udta tag Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=6498549fd75f679820a059a65ece1df4666aa46c --- libavformat/mov.c | 19 +++ 1 file changed, 19 insertions(+) diff --git a/libavformat/mov.c b/libavformat/mov.c index 9b40090..dada1e0 100644 --- a/libavformat/mov.c +++ b/libavformat/mov.c @@ -268,6 +268,23 @@ static int mov_metadata_loci(MOVContext *c, AVIOContext *pb, unsigned len) return av_dict_set(&c->fc->metadata, key, buf, 0); } +static int mov_metadata_hmmt(MOVContext *c, AVIOContext *pb, unsigned len) +{ +int i, n_hmmt; + +if (len < 2) +return 0; +if (c->ignore_chapters) +return 0; + +n_hmmt = avio_rb32(pb); +for (i = 0; i < n_hmmt && !pb->eof_reached; i++) { +int moment_time = avio_rb32(pb); +avpriv_new_chapter(c->fc, i, av_make_q(1, 1000), moment_time, AV_NOPTS_VALUE, NULL); +} +return 0; +} + static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom) { char tmp_key[5]; @@ -303,6 +320,8 @@ static int mov_read_udta_string(MOVContext *c, AVIOContext *pb, MOVAtom atom) parse = mov_metadata_gnre; break; case MKTAG( 'h','d','v','d'): key = "hd_video"; parse = mov_metadata_int8_no_padding; break; +case MKTAG( 'H','M','M','T'): +return mov_metadata_hmmt(c, pb, atom.size); case MKTAG( 'k','e','y','w'): key = "keywords"; break; case MKTAG( 'l','d','e','s'): key = "synopsis"; break; case MKTAG( 'l','o','c','i'): ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avformat/movenc: Skip duration check for discontinuous fragments
ffmpeg | branch: master | Michael Niedermayer | Tue Oct 18 18:18:49 2016 +0200| [18ad44d14548a54e0e7926c97ab15d3daafaf771] | committer: Michael Niedermayer avformat/movenc: Skip duration check for discontinuous fragments Found-by: Daemon404 Signed-off-by: Michael Niedermayer > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=18ad44d14548a54e0e7926c97ab15d3daafaf771 --- libavformat/movenc.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/libavformat/movenc.c b/libavformat/movenc.c index d7c7158..50be8ff 100644 --- a/libavformat/movenc.c +++ b/libavformat/movenc.c @@ -4697,7 +4697,8 @@ static int check_pkt(AVFormatContext *s, AVPacket *pkt) if (trk->entry) { ref = trk->cluster[trk->entry - 1].dts; -} else if (trk->start_dts != AV_NOPTS_VALUE) { +} else if ( trk->start_dts != AV_NOPTS_VALUE + && !trk->frag_discont) { ref = trk->start_dts + trk->track_duration; } else ref = pkt->dts; // Skip tests for the first packet ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] avformat: prevent triggering request_probe assert in ff_read_packet
ffmpeg | branch: master | Andreas Cadhalpun | Wed Oct 19 19:23:49 2016 +0200| [a5b4476a602f31e451b11ca0c18bc92be130a50e] | committer: Andreas Cadhalpun avformat: prevent triggering request_probe assert in ff_read_packet If probe_codec is called with pkt == NULL, it sets probe_packets to 0 and request_probe to -1. However, request_probe can change when calling s->iformat->read_packet and thus a probe_packets value of 0 doesn't guarantee a request_probe value of -1. In that case calling probe_codec again is necessary to prevent triggering the assert. Reviewed-by: Michael Niedermayer Signed-off-by: Andreas Cadhalpun > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=a5b4476a602f31e451b11ca0c18bc92be130a50e --- libavformat/utils.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/utils.c b/libavformat/utils.c index 8a51aea..70dbfa1 100644 --- a/libavformat/utils.c +++ b/libavformat/utils.c @@ -803,7 +803,7 @@ int ff_read_packet(AVFormatContext *s, AVPacket *pkt) return ret; for (i = 0; i < s->nb_streams; i++) { st = s->streams[i]; -if (st->probe_packets) +if (st->probe_packets || st->request_probe > 0) if ((err = probe_codec(s, st, NULL)) < 0) return err; av_assert0(st->request_probe <= 0); ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog
[FFmpeg-cvslog] lavf/riff: Document the interleaving of VSM4 video.
ffmpeg | branch: master | Carl Eugen Hoyos | Wed Oct 19 23:39:19 2016 +0200| [d8716864f96749f4df0b6859b7ad0816b7a483a5] | committer: Carl Eugen Hoyos lavf/riff: Document the interleaving of VSM4 video. > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=d8716864f96749f4df0b6859b7ad0816b7a483a5 --- libavformat/riff.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libavformat/riff.c b/libavformat/riff.c index dceb979..3c5a37c 100644 --- a/libavformat/riff.c +++ b/libavformat/riff.c @@ -56,7 +56,7 @@ const AVCodecTag ff_codec_bmp_tags[] = { { AV_CODEC_ID_H263I,MKTAG('I', '2', '6', '3') }, /* Intel H.263 */ { AV_CODEC_ID_H261, MKTAG('H', '2', '6', '1') }, { AV_CODEC_ID_H263, MKTAG('U', '2', '6', '3') }, -{ AV_CODEC_ID_H263, MKTAG('V', 'S', 'M', '4') }, +{ AV_CODEC_ID_H263, MKTAG('V', 'S', 'M', '4') }, /* needs -vf il=l=i:c=i */ { AV_CODEC_ID_MPEG4,MKTAG('F', 'M', 'P', '4') }, { AV_CODEC_ID_MPEG4,MKTAG('D', 'I', 'V', 'X') }, { AV_CODEC_ID_MPEG4,MKTAG('D', 'X', '5', '0') }, ___ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog