Unified · Split
| @@ -10,7 +10,7 @@ version <next>: · 9 unmodified lines | |||
| 10 | - curves filter doesn't automatically insert points at x=0 and x=1 anymore | 10 | - curves filter doesn't automatically insert points at x=0 and x=1 anymore |
| 11 | - 16-bit support in curves filter and selectivecolor filter | 11 | - 16-bit support in curves filter and selectivecolor filter |
| 12 | - OpenH264 decoder wrapper | 12 | - OpenH264 decoder wrapper |
| 13 | - MediaCodec H.264 and HEVC hwaccel | 13 | - MediaCodec H.264/HEVC/VP8/VP9 hwaccel |
| 14 | - True Audio (TTA) muxer | 14 | - True Audio (TTA) muxer |
| 15 | - crystalizer audio filter | 15 | - crystalizer audio filter |
| 16 | - acrusher audio filter | 16 | - acrusher audio filter |
| @@ -28,7 +28,7 @@ version <next>: · 11 unmodified lines | |||
| 28 | - gblur filter | 28 | - gblur filter |
| 29 | - avgblur filter | 29 | - avgblur filter |
| 30 | - sobel and prewitt filter | 30 | - sobel and prewitt filter |
| 31 | - MediaCodec HEVC decoding | 31 | - MediaCodec HEVC/VP8/VP9 decoding |
| 32 | - Meridian Lossless Packing (MLP) / TrueHD encoder | 32 | - Meridian Lossless Packing (MLP) / TrueHD encoder |
| 33 | - Non-Local Means (nlmeans) denoising filter | 33 | - Non-Local Means (nlmeans) denoising filter |
| 34 | - sdl2 output device and ffplay support | 34 | - sdl2 output device and ffplay support |
| @@ -2662,10 +2662,14 @@ vc1_vdpau_hwaccel_deps="vdpau" · 2661 unmodified lines | |||
| 2662 | vc1_vdpau_hwaccel_select="vc1_decoder" | 2662 | vc1_vdpau_hwaccel_select="vc1_decoder" |
| 2663 | vp8_cuvid_hwaccel_deps="cuda cuvid" | 2663 | vp8_cuvid_hwaccel_deps="cuda cuvid" |
| 2664 | vp9_cuvid_hwaccel_deps="cuda cuvid" | 2664 | vp9_cuvid_hwaccel_deps="cuda cuvid" |
| 2665 | vp8_mediacodec_decoder_deps="mediacodec" | ||
| 2666 | vp8_mediacodec_hwaccel_deps="mediacodec" | ||
| 2665 | vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9" | 2667 | vp9_d3d11va_hwaccel_deps="d3d11va DXVA_PicParams_VP9" |
| 2666 | vp9_d3d11va_hwaccel_select="vp9_decoder" | 2668 | vp9_d3d11va_hwaccel_select="vp9_decoder" |
| 2667 | vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9" | 2669 | vp9_dxva2_hwaccel_deps="dxva2 DXVA_PicParams_VP9" |
| 2668 | vp9_dxva2_hwaccel_select="vp9_decoder" | 2670 | vp9_dxva2_hwaccel_select="vp9_decoder" |
| 2671 | vp9_mediacodec_decoder_deps="mediacodec" | ||
| 2672 | vp9_mediacodec_hwaccel_deps="mediacodec" | ||
| 2669 | vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9" | 2673 | vp9_vaapi_hwaccel_deps="vaapi VADecPictureParameterBufferVP9" |
| 2670 | vp9_vaapi_hwaccel_select="vp9_decoder" | 2674 | vp9_vaapi_hwaccel_select="vp9_decoder" |
| 2671 | wmv3_crystalhd_decoder_select="crystalhd" | 2675 | wmv3_crystalhd_decoder_select="crystalhd" |
| @@ -595,9 +595,11 @@ OBJS-$(CONFIG_VP6_DECODER) += vp6.o vp56.o vp56data.o \ · 594 unmodified lines | |||
| 595 | OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o | 595 | OBJS-$(CONFIG_VP7_DECODER) += vp8.o vp56rac.o |
| 596 | OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o | 596 | OBJS-$(CONFIG_VP8_DECODER) += vp8.o vp56rac.o |
| 597 | OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuvid.o | 597 | OBJS-$(CONFIG_VP8_CUVID_DECODER) += cuvid.o |
| 598 | OBJS-$(CONFIG_VP8_MEDIACODEC_DECODER) += mediacodecdec_h2645.o | ||
| 598 | OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9dsp.o vp56rac.o vp9dsp_8bpp.o \ | 599 | OBJS-$(CONFIG_VP9_DECODER) += vp9.o vp9dsp.o vp56rac.o vp9dsp_8bpp.o \ |
| 599 | vp9dsp_10bpp.o vp9dsp_12bpp.o | 600 | vp9dsp_10bpp.o vp9dsp_12bpp.o |
| 600 | OBJS-$(CONFIG_VP9_CUVID_DECODER) += cuvid.o | 601 | OBJS-$(CONFIG_VP9_CUVID_DECODER) += cuvid.o |
| 602 | OBJS-$(CONFIG_VP9_MEDIACODEC_DECODER) += mediacodecdec_h2645.o | ||
| 601 | OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o | 603 | OBJS-$(CONFIG_VPLAYER_DECODER) += textdec.o ass.o |
| 602 | OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o | 604 | OBJS-$(CONFIG_VQA_DECODER) += vqavideo.o |
| 603 | OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o | 605 | OBJS-$(CONFIG_WAVPACK_DECODER) += wavpack.o |
| @@ -115,9 +115,11 @@ void avcodec_register_all(void) · 114 unmodified lines | |||
| 115 | REGISTER_HWACCEL(VC1_MMAL, vc1_mmal); | 115 | REGISTER_HWACCEL(VC1_MMAL, vc1_mmal); |
| 116 | REGISTER_HWACCEL(VC1_QSV, vc1_qsv); | 116 | REGISTER_HWACCEL(VC1_QSV, vc1_qsv); |
| 117 | REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid); | 117 | REGISTER_HWACCEL(VP8_CUVID, vp8_cuvid); |
| 118 | REGISTER_HWACCEL(VP8_MEDIACODEC, vp8_mediacodec); | ||
| 118 | REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid); | 119 | REGISTER_HWACCEL(VP9_CUVID, vp9_cuvid); |
| 119 | REGISTER_HWACCEL(VP9_D3D11VA, vp9_d3d11va); | 120 | REGISTER_HWACCEL(VP9_D3D11VA, vp9_d3d11va); |
| 120 | REGISTER_HWACCEL(VP9_DXVA2, vp9_dxva2); | 121 | REGISTER_HWACCEL(VP9_DXVA2, vp9_dxva2); |
| 122 | REGISTER_HWACCEL(VP9_MEDIACODEC, vp9_mediacodec); | ||
| 121 | REGISTER_HWACCEL(VP9_VAAPI, vp9_vaapi); | 123 | REGISTER_HWACCEL(VP9_VAAPI, vp9_vaapi); |
| 122 | REGISTER_HWACCEL(WMV3_D3D11VA, wmv3_d3d11va); | 124 | REGISTER_HWACCEL(WMV3_D3D11VA, wmv3_d3d11va); |
| 123 | REGISTER_HWACCEL(WMV3_DXVA2, wmv3_dxva2); | 125 | REGISTER_HWACCEL(WMV3_DXVA2, wmv3_dxva2); |
| @@ -657,7 +659,9 @@ void avcodec_register_all(void) · 533 unmodified lines | |||
| 657 | REGISTER_DECODER(MPEG4_CUVID, mpeg4_cuvid); | 659 | REGISTER_DECODER(MPEG4_CUVID, mpeg4_cuvid); |
| 658 | REGISTER_DECODER(VC1_CUVID, vc1_cuvid); | 660 | REGISTER_DECODER(VC1_CUVID, vc1_cuvid); |
| 659 | REGISTER_DECODER(VP8_CUVID, vp8_cuvid); | 661 | REGISTER_DECODER(VP8_CUVID, vp8_cuvid); |
| 662 | REGISTER_DECODER(VP8_MEDIACODEC, vp8_mediacodec); | ||
| 660 | REGISTER_DECODER(VP9_CUVID, vp9_cuvid); | 663 | REGISTER_DECODER(VP9_CUVID, vp9_cuvid); |
| 664 | REGISTER_DECODER(VP9_MEDIACODEC, vp9_mediacodec); | ||
| 661 | 665 | ||
| 662 | /* parsers */ | 666 | /* parsers */ |
| 663 | REGISTER_PARSER(AAC, aac); | 667 | REGISTER_PARSER(AAC, aac); |
| @@ -766,3 +766,17 @@ AVHWAccel ff_hevc_mediacodec_hwaccel = { · 765 unmodified lines | |||
| 766 | .id = AV_CODEC_ID_HEVC, | 766 | .id = AV_CODEC_ID_HEVC, |
| 767 | .pix_fmt = AV_PIX_FMT_MEDIACODEC, | 767 | .pix_fmt = AV_PIX_FMT_MEDIACODEC, |
| 768 | }; | 768 | }; |
| 769 | |||
| 770 | AVHWAccel ff_vp8_mediacodec_hwaccel = { | ||
| 771 | .name = "mediacodec", | ||
| 772 | .type = AVMEDIA_TYPE_VIDEO, | ||
| 773 | .id = AV_CODEC_ID_VP8, | ||
| 774 | .pix_fmt = AV_PIX_FMT_MEDIACODEC, | ||
| 775 | }; | ||
| 776 | |||
| 777 | AVHWAccel ff_vp9_mediacodec_hwaccel = { | ||
| 778 | .name = "mediacodec", | ||
| 779 | .type = AVMEDIA_TYPE_VIDEO, | ||
| 780 | .id = AV_CODEC_ID_VP9, | ||
| 781 | .pix_fmt = AV_PIX_FMT_MEDIACODEC, | ||
| 782 | }; | ||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * Android MediaCodec H.264 / H.265 decoders | 2 | * Android MediaCodec H.264 / H.265 / VP8 / VP9 decoders |
| 3 | * | 3 | * |
| 4 | * Copyright (c) 2015-2016 Matthieu Bouron <matthieu.bouron stupeflix.com> | 4 | * Copyright (c) 2015-2016 Matthieu Bouron <matthieu.bouron stupeflix.com> |
| 5 | * | 5 | * |
| @@ -65,6 +65,7 @@ static av_cold int mediacodec_decode_close(AVCodecContext *avctx) · 59 unmodified lines | |||
| 65 | return 0; | 65 | return 0; |
| 66 | } | 66 | } |
| 67 | 67 | ||
| 68 | #if CONFIG_H264_MEDIACODEC_DECODER || CONFIG_HEVC_MEDIACODEC_DECODER | ||
| 68 | static int h2645_ps_to_nalu(const uint8_t *src, int src_size, uint8_t **out, int *out_size) | 69 | static int h2645_ps_to_nalu(const uint8_t *src, int src_size, uint8_t **out, int *out_size) |
| 69 | { | 70 | { |
| 70 | int i; | 71 | int i; |
| @@ -116,6 +117,7 @@ done: · 45 unmodified lines | |||
| 116 | 117 | ||
| 117 | return ret; | 118 | return ret; |
| 118 | } | 119 | } |
| 120 | #endif | ||
| 119 | 121 | ||
| 120 | #if CONFIG_H264_MEDIACODEC_DECODER | 122 | #if CONFIG_H264_MEDIACODEC_DECODER |
| 121 | static int h264_set_extradata(AVCodecContext *avctx, FFAMediaFormat *format) | 123 | static int h264_set_extradata(AVCodecContext *avctx, FFAMediaFormat *format) |
| @@ -264,6 +266,19 @@ done: · 142 unmodified lines | |||
| 264 | } | 266 | } |
| 265 | #endif | 267 | #endif |
| 266 | 268 | ||
| 269 | #if CONFIG_VP8_MEDIACODEC_DECODER || CONFIG_VP9_MEDIACODEC_DECODER | ||
| 270 | static int vpx_set_extradata(AVCodecContext *avctx, FFAMediaFormat *format) | ||
| 271 | { | ||
| 272 | int ret = 0; | ||
| 273 | |||
| 274 | if (avctx->extradata) { | ||
| 275 | ff_AMediaFormat_setBuffer(format, "csd-0", avctx->extradata, avctx->extradata_size); | ||
| 276 | } | ||
| 277 | |||
| 278 | return ret; | ||
| 279 | } | ||
| 280 | #endif | ||
| 281 | |||
| 267 | static av_cold int mediacodec_decode_init(AVCodecContext *avctx) | 282 | static av_cold int mediacodec_decode_init(AVCodecContext *avctx) |
| 268 | { | 283 | { |
| 269 | int ret; | 284 | int ret; |
| @@ -303,6 +318,24 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) · 33 unmodified lines | |||
| 303 | if (ret < 0) | 318 | if (ret < 0) |
| 304 | goto done; | 319 | goto done; |
| 305 | break; | 320 | break; |
| 321 | #endif | ||
| 322 | #if CONFIG_VP8_MEDIACODEC_DECODER | ||
| 323 | case AV_CODEC_ID_VP8: | ||
| 324 | codec_mime = "video/x-vnd.on2.vp8"; | ||
| 325 | |||
| 326 | ret = vpx_set_extradata(avctx, format); | ||
| 327 | if (ret < 0) | ||
| 328 | goto done; | ||
| 329 | break; | ||
| 330 | #endif | ||
| 331 | #if CONFIG_VP9_MEDIACODEC_DECODER | ||
| 332 | case AV_CODEC_ID_VP9: | ||
| 333 | codec_mime = "video/x-vnd.on2.vp9"; | ||
| 334 | |||
| 335 | ret = vpx_set_extradata(avctx, format); | ||
| 336 | if (ret < 0) | ||
| 337 | goto done; | ||
| 338 | break; | ||
| 306 | #endif | 339 | #endif |
| 307 | default: | 340 | default: |
| 308 | av_assert0(0); | 341 | av_assert0(0); |
| @@ -332,6 +365,7 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) · 23 unmodified lines | |||
| 332 | goto done; | 365 | goto done; |
| 333 | } | 366 | } |
| 334 | 367 | ||
| 368 | if (bsf_name) { | ||
| 335 | bsf = av_bsf_get_by_name(bsf_name); | 369 | bsf = av_bsf_get_by_name(bsf_name); |
| 336 | if(!bsf) { | 370 | if(!bsf) { |
| 337 | ret = AVERROR_BSF_NOT_FOUND; | 371 | ret = AVERROR_BSF_NOT_FOUND; |
| @@ -346,6 +380,7 @@ static av_cold int mediacodec_decode_init(AVCodecContext *avctx) · 8 unmodified lines | |||
| 346 | ((ret = av_bsf_init(s->bsf)) < 0)) { | 380 | ((ret = av_bsf_init(s->bsf)) < 0)) { |
| 347 | goto done; | 381 | goto done; |
| 348 | } | 382 | } |
| 383 | } | ||
| 349 | 384 | ||
| 350 | av_init_packet(&s->filtered_pkt); | 385 | av_init_packet(&s->filtered_pkt); |
| 351 | 386 | ||
| @@ -436,6 +471,7 @@ static int mediacodec_decode_frame(AVCodecContext *avctx, void *data, · 84 unmodified lines | |||
| 436 | 471 | ||
| 437 | av_fifo_generic_read(s->fifo, &input_pkt, sizeof(input_pkt), NULL); | 472 | av_fifo_generic_read(s->fifo, &input_pkt, sizeof(input_pkt), NULL); |
| 438 | 473 | ||
| 474 | if (s->bsf) { | ||
| 439 | ret = av_bsf_send_packet(s->bsf, &input_pkt); | 475 | ret = av_bsf_send_packet(s->bsf, &input_pkt); |
| 440 | if (ret < 0) { | 476 | if (ret < 0) { |
| 441 | return ret; | 477 | return ret; |
| @@ -445,6 +481,9 @@ static int mediacodec_decode_frame(AVCodecContext *avctx, void *data, · 3 unmodified lines | |||
| 445 | if (ret == AVERROR(EAGAIN)) { | 481 | if (ret == AVERROR(EAGAIN)) { |
| 446 | goto done; | 482 | goto done; |
| 447 | } | 483 | } |
| 484 | } else { | ||
| 485 | av_packet_move_ref(&s->filtered_pkt, &input_pkt); | ||
| 486 | } | ||
| 448 | 487 | ||
| 449 | /* {h264,hevc}_mp4toannexb are used here and do not require flushing */ | 488 | /* {h264,hevc}_mp4toannexb are used here and do not require flushing */ |
| 450 | av_assert0(ret != AVERROR_EOF); | 489 | av_assert0(ret != AVERROR_EOF); |
| @@ -512,3 +551,35 @@ AVCodec ff_hevc_mediacodec_decoder = { · 61 unmodified lines | |||
| 512 | .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, | 551 | .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, |
| 513 | }; | 552 | }; |
| 514 | #endif | 553 | #endif |
| 554 | |||
| 555 | #if CONFIG_VP8_MEDIACODEC_DECODER | ||
| 556 | AVCodec ff_vp8_mediacodec_decoder = { | ||
| 557 | .name = "vp8_mediacodec", | ||
| 558 | .long_name = NULL_IF_CONFIG_SMALL("VP8 Android MediaCodec decoder"), | ||
| 559 | .type = AVMEDIA_TYPE_VIDEO, | ||
| 560 | .id = AV_CODEC_ID_VP8, | ||
| 561 | .priv_data_size = sizeof(MediaCodecH264DecContext), | ||
| 562 | .init = mediacodec_decode_init, | ||
| 563 | .decode = mediacodec_decode_frame, | ||
| 564 | .flush = mediacodec_decode_flush, | ||
| 565 | .close = mediacodec_decode_close, | ||
| 566 | .capabilities = CODEC_CAP_DELAY, | ||
| 567 | .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, | ||
| 568 | }; | ||
| 569 | #endif | ||
| 570 | |||
| 571 | #if CONFIG_VP9_MEDIACODEC_DECODER | ||
| 572 | AVCodec ff_vp9_mediacodec_decoder = { | ||
| 573 | .name = "vp9_mediacodec", | ||
| 574 | .long_name = NULL_IF_CONFIG_SMALL("VP9 Android MediaCodec decoder"), | ||
| 575 | .type = AVMEDIA_TYPE_VIDEO, | ||
| 576 | .id = AV_CODEC_ID_VP9, | ||
| 577 | .priv_data_size = sizeof(MediaCodecH264DecContext), | ||
| 578 | .init = mediacodec_decode_init, | ||
| 579 | .decode = mediacodec_decode_frame, | ||
| 580 | .flush = mediacodec_decode_flush, | ||
| 581 | .close = mediacodec_decode_close, | ||
| 582 | .capabilities = CODEC_CAP_DELAY, | ||
| 583 | .caps_internal = FF_CODEC_CAP_SETS_PKT_DTS, | ||
| 584 | }; | ||
| 585 | #endif | ||
| @@ -28,7 +28,7 @@ · 27 unmodified lines | |||
| 28 | #include "libavutil/version.h" | 28 | #include "libavutil/version.h" |
| 29 | 29 | ||
| 30 | #define LIBAVCODEC_VERSION_MAJOR 57 | 30 | #define LIBAVCODEC_VERSION_MAJOR 57 |
| 31 | #define LIBAVCODEC_VERSION_MINOR 61 | 31 | #define LIBAVCODEC_VERSION_MINOR 62 |
| 32 | #define LIBAVCODEC_VERSION_MICRO 103 | 32 | #define LIBAVCODEC_VERSION_MICRO 103 |
| 33 | 33 | ||
| 34 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ | 34 | #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ |