Skip to content

Instantly share code, notes, and snippets.

@sberryman
Last active November 29, 2021 03:26
Show Gist options
  • Select an option

  • Save sberryman/936c3aa7918b94daf07bd4923533e9f6 to your computer and use it in GitHub Desktop.

Select an option

Save sberryman/936c3aa7918b94daf07bd4923533e9f6 to your computer and use it in GitHub Desktop.

Revisions

  1. sberryman revised this gist Oct 2, 2020. 1 changed file with 1 addition and 1 deletion.
    2 changes: 1 addition & 1 deletion hevc.patch
    Original file line number Diff line number Diff line change
    @@ -19,7 +19,7 @@ index 35919c3f5..19ebef10d 100644

    // Limit decode memory to 24MB (16M pixels at 4:2:0 = 24M bytes)
    - while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 1024 * 1024)
    + while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 16384 * 16384)
    + while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 8192 * 8192)
    createInfo_.ulNumDecodeSurfaces--;

    createInfo_.ChromaFormat = _chromaFormat;
  2. sberryman revised this gist Oct 2, 2020. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions hevc.patch
    Original file line number Diff line number Diff line change
    @@ -19,7 +19,7 @@ index 35919c3f5..19ebef10d 100644

    // Limit decode memory to 24MB (16M pixels at 4:2:0 = 24M bytes)
    - while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 1024 * 1024)
    + while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 8192 * 8192)
    + while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 16384 * 16384)
    createInfo_.ulNumDecodeSurfaces--;

    createInfo_.ChromaFormat = _chromaFormat;
    @@ -32,7 +32,7 @@ index 737f58511..a3488f16c 100644
    }

    - const int maxUnparsedPackets = 15;
    + const int maxUnparsedPackets = 60;
    + const int maxUnparsedPackets = 90;

    ++unparsedPackets_;
    if (unparsedPackets_ > maxUnparsedPackets)
  3. sberryman revised this gist Oct 1, 2020. 1 changed file with 2 additions and 2 deletions.
    4 changes: 2 additions & 2 deletions hevc.patch
    Original file line number Diff line number Diff line change
    @@ -19,7 +19,7 @@ index 35919c3f5..19ebef10d 100644

    // Limit decode memory to 24MB (16M pixels at 4:2:0 = 24M bytes)
    - while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 1024 * 1024)
    + while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 4096 * 4096)
    + while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 8192 * 8192)
    createInfo_.ulNumDecodeSurfaces--;

    createInfo_.ChromaFormat = _chromaFormat;
    @@ -32,7 +32,7 @@ index 737f58511..a3488f16c 100644
    }

    - const int maxUnparsedPackets = 15;
    + const int maxUnparsedPackets = 30;
    + const int maxUnparsedPackets = 60;

    ++unparsedPackets_;
    if (unparsedPackets_ > maxUnparsedPackets)
  4. sberryman revised this gist Oct 12, 2018. 1 changed file with 13 additions and 0 deletions.
    13 changes: 13 additions & 0 deletions hevc.patch
    Original file line number Diff line number Diff line change
    @@ -23,6 +23,19 @@ index 35919c3f5..19ebef10d 100644
    createInfo_.ulNumDecodeSurfaces--;

    createInfo_.ChromaFormat = _chromaFormat;
    diff --git a/modules/cudacodec/src/video_parser.cpp b/modules/cudacodec/src/video_parser.cpp
    index 737f58511..a3488f16c 100644
    --- a/modules/cudacodec/src/video_parser.cpp
    +++ b/modules/cudacodec/src/video_parser.cpp
    @@ -80,7 +80,7 @@ bool cv::cudacodec::detail::VideoParser::parseVideoData(const unsigned char* dat
    return false;
    }

    - const int maxUnparsedPackets = 15;
    + const int maxUnparsedPackets = 30;

    ++unparsedPackets_;
    if (unparsedPackets_ > maxUnparsedPackets)
    diff --git a/modules/videoio/src/cap_ffmpeg_impl.hpp b/modules/videoio/src/cap_ffmpeg_impl.hpp
    index de852abd2..367c7064e 100644
    --- a/modules/videoio/src/cap_ffmpeg_impl.hpp
  5. sberryman created this gist Oct 11, 2018.
    93 changes: 93 additions & 0 deletions hevc.patch
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,93 @@
    diff --git a/modules/cudacodec/src/video_decoder.cpp b/modules/cudacodec/src/video_decoder.cpp
    index 35919c3f5..19ebef10d 100644
    --- a/modules/cudacodec/src/video_decoder.cpp
    +++ b/modules/cudacodec/src/video_decoder.cpp
    @@ -63,6 +63,11 @@ void cv::cudacodec::detail::VideoDecoder::create(const FormatInfo& videoFormat)
    cudaVideoCodec_VC1 == _codec ||
    cudaVideoCodec_H264 == _codec ||
    cudaVideoCodec_JPEG == _codec ||
    + cudaVideoCodec_H264_SVC == _codec ||
    + cudaVideoCodec_H264_MVC == _codec ||
    + cudaVideoCodec_HEVC == _codec ||
    + cudaVideoCodec_VP8 == _codec ||
    + cudaVideoCodec_VP9 == _codec ||
    cudaVideoCodec_YUV420== _codec ||
    cudaVideoCodec_YV12 == _codec ||
    cudaVideoCodec_NV12 == _codec ||
    @@ -84,7 +89,7 @@ void cv::cudacodec::detail::VideoDecoder::create(const FormatInfo& videoFormat)
    createInfo_.ulNumDecodeSurfaces = FrameQueue::MaximumSize;

    // Limit decode memory to 24MB (16M pixels at 4:2:0 = 24M bytes)
    - while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 1024 * 1024)
    + while (createInfo_.ulNumDecodeSurfaces * videoFormat.width * videoFormat.height > 16 * 4096 * 4096)
    createInfo_.ulNumDecodeSurfaces--;

    createInfo_.ChromaFormat = _chromaFormat;
    diff --git a/modules/videoio/src/cap_ffmpeg_impl.hpp b/modules/videoio/src/cap_ffmpeg_impl.hpp
    index de852abd2..367c7064e 100644
    --- a/modules/videoio/src/cap_ffmpeg_impl.hpp
    +++ b/modules/videoio/src/cap_ffmpeg_impl.hpp
    @@ -1585,7 +1585,7 @@ static AVStream *icv_add_video_stream_FFMPEG(AVFormatContext *oc,
    and qmin since they will be set to reasonable defaults by the libx264
    preset system. Also, use a crf encode with the default quality rating,
    this seems easier than finding an appropriate default bitrate. */
    - if (c->codec_id == AV_CODEC_ID_H264) {
    + if (c->codec_id == AV_CODEC_ID_H264 || c->codec_id == AV_CODEC_ID_HEVC) {
    c->gop_size = -1;
    c->qmin = -1;
    c->bit_rate = 0;
    @@ -2582,6 +2582,9 @@ enum
    VideoCodec_JPEG,
    VideoCodec_H264_SVC,
    VideoCodec_H264_MVC,
    + VideoCodec_HEVC,
    + VideoCodec_VP8,
    + VideoCodec_VP9,

    // Uncompressed YUV
    VideoCodec_YUV420 = (('I'<<24)|('Y'<<16)|('U'<<8)|('V')), // Y,U,V (4:2:0)
    @@ -2692,6 +2695,10 @@ bool InputMediaStream_FFMPEG::open(const char* fileName, int* codec, int* chroma
    *codec = ::VideoCodec_H264;
    break;

    + case CV_CODEC(CODEC_ID_HEVC):
    + *codec = ::VideoCodec_HEVC;
    + break;
    +
    default:
    return false;
    };
    @@ -2699,6 +2706,7 @@ bool InputMediaStream_FFMPEG::open(const char* fileName, int* codec, int* chroma
    switch (enc->pix_fmt)
    {
    case AV_PIX_FMT_YUV420P:
    + case AV_PIX_FMT_YUVJ420P:
    *chroma_format = ::VideoChromaFormat_YUV420;
    break;

    diff --git a/modules/videoio/src/ffmpeg_codecs.hpp b/modules/videoio/src/ffmpeg_codecs.hpp
    index 61788e034..38a0a2081 100644
    --- a/modules/videoio/src/ffmpeg_codecs.hpp
    +++ b/modules/videoio/src/ffmpeg_codecs.hpp
    @@ -78,6 +78,7 @@ typedef struct AVCodecTag {
    } AVCodecTag;

    #if (LIBAVCODEC_VERSION_INT <= AV_VERSION_INT(54, 51, 100))
    +#define AV_CODEC_ID_HEVC CODEC_ID_HEVC
    #define AV_CODEC_ID_H264 CODEC_ID_H264
    #define AV_CODEC_ID_H263 CODEC_ID_H263
    #define AV_CODEC_ID_H263P CODEC_ID_H263P
    @@ -143,6 +144,13 @@ typedef struct AVCodecTag {
    #endif

    const AVCodecTag codec_bmp_tags[] = {
    + { AV_CODEC_ID_HEVC, MKTAG('H', 'E', 'V', 'C') },
    + { AV_CODEC_ID_HEVC, MKTAG('h', 'e', 'v', 'c') },
    + { AV_CODEC_ID_HEVC, MKTAG('H', '2', '6', '5') },
    + { AV_CODEC_ID_HEVC, MKTAG('h', '2', '6', '5') },
    + { AV_CODEC_ID_HEVC, MKTAG('X', '2', '6', '5') },
    + { AV_CODEC_ID_HEVC, MKTAG('x', '2', '6', '5') },
    +
    { AV_CODEC_ID_H264, MKTAG('H', '2', '6', '4') },
    { AV_CODEC_ID_H264, MKTAG('h', '2', '6', '4') },
    { AV_CODEC_ID_H264, MKTAG('X', '2', '6', '4') },