From c6c2a44e9d5d837b213de054022ca0fd1438193c Mon Sep 17 00:00:00 2001 From: Alexander Kernozhitsky Date: Fri, 2 Sep 2022 01:27:25 +0300 Subject: [PATCH] Patch the remaining uses or FFmpeg APIs --- .../ffmpeg/ffmpeg_frame_generator.cpp | 6 +++--- .../media/audio/media_audio_capture.cpp | 2 +- .../media/audio/media_audio_ffmpeg_loader.cpp | 11 ++++++++--- .../media/streaming/media_streaming_file.cpp | 18 +++++++++--------- .../media/streaming/media_streaming_file.h | 4 ++-- 5 files changed, 23 insertions(+), 18 deletions(-) diff --git a/Telegram/SourceFiles/ffmpeg/ffmpeg_frame_generator.cpp b/Telegram/SourceFiles/ffmpeg/ffmpeg_frame_generator.cpp index 49cc6a92a7..cbc231b9df 100644 --- a/Telegram/SourceFiles/ffmpeg/ffmpeg_frame_generator.cpp +++ b/Telegram/SourceFiles/ffmpeg/ffmpeg_frame_generator.cpp @@ -47,11 +47,11 @@ private: return (_rotation == 90) || (_rotation == 270); } - [[nodiscard]] static int Read( + [[nodiscard]] static int _read( void *opaque, uint8_t *buf, int buf_size); - [[nodiscard]] static int64_t Seek( + [[nodiscard]] static int64_t _seek( void *opaque, int64_t offset, int whence); @@ -113,7 +113,7 @@ int FrameGenerator::Impl::Read(void *opaque, uint8_t *buf, int buf_size) { int FrameGenerator::Impl::read(uint8_t *buf, int buf_size) { const auto available = _bytes.size() - _deviceOffset; if (available <= 0) { - return -1; + return AVERROR_EOF; } const auto fill = std::min(int(available), buf_size); memcpy(buf, _bytes.data() + _deviceOffset, fill); diff --git a/Telegram/SourceFiles/media/audio/media_audio_capture.cpp b/Telegram/SourceFiles/media/audio/media_audio_capture.cpp index 8618603234..928582f8eb 100644 --- a/Telegram/SourceFiles/media/audio/media_audio_capture.cpp +++ b/Telegram/SourceFiles/media/audio/media_audio_capture.cpp @@ -181,7 +181,7 @@ struct Instance::Inner::Private { int32 nbytes = qMin(l->data.size() - l->dataPos, int32(buf_size)); if (nbytes <= 0) { - return 0; + return AVERROR_EOF; } memcpy(buf, l->data.constData() + l->dataPos, nbytes); diff --git a/Telegram/SourceFiles/media/audio/media_audio_ffmpeg_loader.cpp b/Telegram/SourceFiles/media/audio/media_audio_ffmpeg_loader.cpp index 7122e65e1e..9ce9a4d7e3 100644 --- a/Telegram/SourceFiles/media/audio/media_audio_ffmpeg_loader.cpp +++ b/Telegram/SourceFiles/media/audio/media_audio_ffmpeg_loader.cpp @@ -105,7 +105,7 @@ int AbstractFFMpegLoader::_read_data(void *opaque, uint8_t *buf, int buf_size) { auto nbytes = qMin(l->_data.size() - l->_dataPos, int32(buf_size)); if (nbytes <= 0) { - return 0; + return AVERROR_EOF; } memcpy(buf, l->_data.constData() + l->_dataPos, nbytes); @@ -138,7 +138,7 @@ int AbstractFFMpegLoader::_read_bytes(void *opaque, uint8_t *buf, int buf_size) auto nbytes = qMin(static_cast(l->_bytes.size()) - l->_dataPos, buf_size); if (nbytes <= 0) { - return 0; + return AVERROR_EOF; } memcpy(buf, l->_bytes.data() + l->_dataPos, nbytes); @@ -169,7 +169,12 @@ int64_t AbstractFFMpegLoader::_seek_bytes(void *opaque, int64_t offset, int when int AbstractFFMpegLoader::_read_file(void *opaque, uint8_t *buf, int buf_size) { auto l = reinterpret_cast(opaque); - return int(l->_f.read((char *)(buf), buf_size)); + int ret = l->_f.read((char *)(buf), buf_size); + switch (ret) { + case -1: return AVERROR_EXTERNAL; + case 0: return AVERROR_EOF; + default: return ret; + } } int64_t AbstractFFMpegLoader::_seek_file(void *opaque, int64_t offset, int whence) { diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_file.cpp b/Telegram/SourceFiles/media/streaming/media_streaming_file.cpp index 1fd884e212..a616400233 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_file.cpp +++ b/Telegram/SourceFiles/media/streaming/media_streaming_file.cpp @@ -44,12 +44,12 @@ File::Context::Context( File::Context::~Context() = default; -int File::Context::Read(void *opaque, uint8_t *buffer, int bufferSize) { +int File::Context::_read(void *opaque, uint8_t *buffer, int bufferSize) { return static_cast(opaque)->read( bytes::make_span(buffer, bufferSize)); } -int64_t File::Context::Seek(void *opaque, int64_t offset, int whence) { +int64_t File::Context::_seek(void *opaque, int64_t offset, int whence) { return static_cast(opaque)->seek(offset, whence); } @@ -59,13 +59,13 @@ int File::Context::read(bytes::span buffer) { const auto amount = std::min(_size - _offset, int64(buffer.size())); if (unroll()) { - return -1; + return AVERROR_EXTERNAL; } else if (amount > kMaxSingleReadAmount) { LOG(("Streaming Error: Read callback asked for too much data: %1" ).arg(amount)); - return -1; + return AVERROR_EXTERNAL; } else if (!amount) { - return amount; + return AVERROR_EOF; } buffer = buffer.subspan(0, amount); @@ -87,10 +87,10 @@ int File::Context::read(bytes::span buffer) { } _semaphore.acquire(); if (_interrupted) { - return -1; + return AVERROR_EXTERNAL; } else if (const auto error = _reader->streamingError()) { fail(*error); - return -1; + return AVERROR_EXTERNAL; } } @@ -276,9 +276,9 @@ void File::Context::start(crl::time position, bool hwAllow) { } auto format = FFmpeg::MakeFormatPointer( static_cast(this), - &Context::Read, + &Context::_read, nullptr, - &Context::Seek); + &Context::_seek); if (!format) { return fail(Error::OpenFailed); } diff --git a/Telegram/SourceFiles/media/streaming/media_streaming_file.h b/Telegram/SourceFiles/media/streaming/media_streaming_file.h index 8ffea94309..ab34ef3e87 100644 --- a/Telegram/SourceFiles/media/streaming/media_streaming_file.h +++ b/Telegram/SourceFiles/media/streaming/media_streaming_file.h @@ -62,8 +62,8 @@ private: Allowed, Disallowed, }; - static int Read(void *opaque, uint8_t *buffer, int bufferSize); - static int64_t Seek(void *opaque, int64_t offset, int whence); + static int _read(void *opaque, uint8_t *buffer, int bufferSize); + static int64_t _seek(void *opaque, int64_t offset, int whence); [[nodiscard]] int read(bytes::span buffer); [[nodiscard]] int64_t seek(int64_t offset, int whence);