From 4caf46cab416dc2fd71ca312901018596ad61313 Mon Sep 17 00:00:00 2001 From: Rajy Rawther Date: Mon, 22 Jul 2024 05:48:29 -0700 Subject: [PATCH] Rr/video dec mem sample update (#390) * remove hardcoded buffer size requirement * minor change [ROCm/rocdecode commit: 84c1dc9d03f71a99cc7363bc6cde4d3c8e8fc8c1] --- .../rocdecode/samples/videoDecodeMem/videodecodemem.cpp | 8 +++----- projects/rocdecode/utils/video_demuxer.h | 6 ++++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/projects/rocdecode/samples/videoDecodeMem/videodecodemem.cpp b/projects/rocdecode/samples/videoDecodeMem/videodecodemem.cpp index 7064133cae..5d7ea242a8 100644 --- a/projects/rocdecode/samples/videoDecodeMem/videodecodemem.cpp +++ b/projects/rocdecode/samples/videoDecodeMem/videodecodemem.cpp @@ -49,11 +49,7 @@ public: fp_in_.seekg (0, fp_in_.end); int length = fp_in_.tellg(); fp_in_.seekg (0, fp_in_.beg); - if (length > (100 * 1024 * 1024)) { // avioc_buffer_size = 100 * 1024 * 1024 in video_demuxer.h - std::cerr << "This app supports only file sizes upto 100MB! Please use a smaller file." << std::endl; - exit(-1); - } - + io_buffer_size_ = length; } ~FileStreamProvider() { fp_in_.close(); @@ -63,9 +59,11 @@ public: // We read a file for this example. You may get your data from network or somewhere else return static_cast(fp_in_.read(reinterpret_cast(p_buf), n_buf).gcount()); } + size_t GetBufferSize() { return io_buffer_size_; }; private: std::ifstream fp_in_; + size_t io_buffer_size_; }; void ShowHelpAndExit(const char *option = NULL) { diff --git a/projects/rocdecode/utils/video_demuxer.h b/projects/rocdecode/utils/video_demuxer.h index 4c5e438c43..2ede135701 100644 --- a/projects/rocdecode/utils/video_demuxer.h +++ b/projects/rocdecode/utils/video_demuxer.h @@ -32,6 +32,7 @@ extern "C" { } #include "rocdecode.h" + /*! * \file * \brief The AMD Video Demuxer for rocDecode Library. @@ -125,6 +126,7 @@ class VideoDemuxer { public: virtual ~StreamProvider() {} virtual int GetData(uint8_t *buf, int buf_size) = 0; + virtual size_t GetBufferSize() = 0; }; AVCodecID GetCodecID() { return av_video_codec_id_; }; VideoDemuxer(const char *input_file_path) : VideoDemuxer(CreateFmtContextUtil(input_file_path)) {} @@ -503,14 +505,14 @@ class VideoDemuxer { return nullptr; } uint8_t *avioc_buffer = nullptr; - int avioc_buffer_size = 100 * 1024 * 1024; + int avioc_buffer_size = stream_provider->GetBufferSize(); avioc_buffer = (uint8_t *)av_malloc(avioc_buffer_size); if (!avioc_buffer) { std::cerr << "ERROR: av_malloc failed!" << std::endl; return nullptr; } av_io_ctx_ = avio_alloc_context(avioc_buffer, avioc_buffer_size, - 0, stream_provider, &ReadPacket, nullptr, nullptr); + 0, stream_provider, &ReadPacket, nullptr, nullptr); if (!av_io_ctx_) { std::cerr << "ERROR: avio_alloc_context failed!" << std::endl; return nullptr;