diff --git a/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.cpp b/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.cpp index f3a2a8bd2c8218f9dd379bdbd889dbdb22516518..837fb4184d09ab8db366f0639d7638ad86afbaab 100644 --- a/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.cpp +++ b/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.cpp @@ -288,14 +288,15 @@ ErrorCode AudioDecoderFilter::FinishFrame() return TranslatePluginStatus(status); } -void AudioDecoderFilter::OnInputBufferDone(std::shared_ptr& input) +void AudioDecoderFilter::OnInputBufferDone(const std::shared_ptr& input) { MEDIA_LOG_I("AudioDecoderFilter::OnInputBufferDone"); } -void AudioDecoderFilter::OnOutputBufferDone(std::shared_ptr& output) +void AudioDecoderFilter::OnOutputBufferDone(const std::shared_ptr& output) { MEDIA_LOG_D("begin"); + // push to port auto oPort = outPorts_[0]; if (oPort->GetWorkMode() == WorkMode::PUSH) { @@ -303,8 +304,9 @@ void AudioDecoderFilter::OnOutputBufferDone(std::shared_ptr& out } else { MEDIA_LOG_W("decoder out port works in pull mode"); } + // 释放buffer 如果没有被缓存使其回到buffer pool 如果被sink缓存 则从buffer pool拿其他的buffer - output.reset(); + std::const_pointer_cast(output).reset(); MEDIA_LOG_D("end"); } } // Pipeline diff --git a/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.h b/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.h index 7525e533734a95737604b3a98becfbf07f414b2a..129618b80cd3bf3a1f6dfa6f4e358ca4fde09f5a 100644 --- a/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.h +++ b/engine/pipeline/filters/codec/audio_decoder/audio_decoder_filter.h @@ -60,8 +60,8 @@ private: ErrorCode Release(); - void OnInputBufferDone(std::shared_ptr& input) override; - void OnOutputBufferDone(std::shared_ptr& output) override; + void OnInputBufferDone(const std::shared_ptr& input) override; + void OnOutputBufferDone(const std::shared_ptr& output) override; private: std::shared_ptr> outBufferPool_ {}; bool isFlushing_ {false}; diff --git a/engine/pipeline/filters/codec/codec_filter_base.cpp b/engine/pipeline/filters/codec/codec_filter_base.cpp index 259b7f58e10e1de04a3de3ace9b92e12fff9f3a0..f30c6234f547bf4b3cbc0a0324a1ab72e477b946 100644 --- a/engine/pipeline/filters/codec/codec_filter_base.cpp +++ b/engine/pipeline/filters/codec/codec_filter_base.cpp @@ -114,12 +114,12 @@ ErrorCode CodecFilterBase::GetParameter(int32_t key, Plugin::Any& outVal) return TranslatePluginStatus(plugin_->GetParameter(tag, outVal)); } -void CodecFilterBase::OnInputBufferDone(std::shared_ptr& input) +void CodecFilterBase::OnInputBufferDone(const std::shared_ptr& input) { MEDIA_LOG_I("CodecFilterBase::OnInputBufferDone"); } -void CodecFilterBase::OnOutputBufferDone(std::shared_ptr& output) +void CodecFilterBase::OnOutputBufferDone(const std::shared_ptr& output) { MEDIA_LOG_I("CodecFilterBase::OnOutputBufferDone"); } diff --git a/engine/pipeline/filters/codec/codec_filter_base.h b/engine/pipeline/filters/codec/codec_filter_base.h index acb88345313a5ca59e2dbbc27a783eaec2d4de9f..b34e6763385408466f5dc3cd5c4c680b1627efbb 100644 --- a/engine/pipeline/filters/codec/codec_filter_base.h +++ b/engine/pipeline/filters/codec/codec_filter_base.h @@ -42,9 +42,9 @@ public: ErrorCode GetParameter(int32_t key, Plugin::Any& outVal) override; - void OnInputBufferDone(std::shared_ptr& input) override; + void OnInputBufferDone(const std::shared_ptr& input) override; - void OnOutputBufferDone(std::shared_ptr& output) override; + void OnOutputBufferDone(const std::shared_ptr& output) override; protected: ErrorCode ConfigureWithMetaLocked(const std::shared_ptr& meta); diff --git a/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.cpp b/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.cpp index f4e3579d78beefb3d0f8d4491323f60dbb09c566..71cf61a4c25b0e56d1757cbeb5175ddb1a24baba 100644 --- a/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.cpp +++ b/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.cpp @@ -47,12 +47,12 @@ public: ~DataCallbackImpl() override = default; - void OnInputBufferDone(std::shared_ptr& input) override + void OnInputBufferDone(const std::shared_ptr& input) override { decFilter_.OnInputBufferDone(input); } - void OnOutputBufferDone(std::shared_ptr& output) override + void OnOutputBufferDone(const std::shared_ptr& output) override { decFilter_.OnOutputBufferDone(output); } diff --git a/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.h b/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.h index f247f0ff18bd5091ce75756ef51c04f5cd732882..417d857852ced6dd2afe5b1f542485bc84c4fdcb 100644 --- a/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.h +++ b/engine/pipeline/filters/codec/video_decoder/video_decoder_filter.h @@ -56,9 +56,9 @@ public: */ ErrorCode PushData(const std::string &inPort, AVBufferPtr buffer, int64_t offset) override; - void OnInputBufferDone(const std::shared_ptr &buffer); + void OnInputBufferDone(const std::shared_ptr &buffer) override; - void OnOutputBufferDone(const std::shared_ptr &buffer); + void OnOutputBufferDone(const std::shared_ptr &buffer) override; private: class DataCallbackImpl; diff --git a/engine/pipeline/filters/codec/video_encoder/video_encoder_filter.cpp b/engine/pipeline/filters/codec/video_encoder/video_encoder_filter.cpp index 551eac91b3ef57c5d54bcaae6afbc4b521769e55..8fe474d7eb133668380efcce001797f115ade5ce 100644 --- a/engine/pipeline/filters/codec/video_encoder/video_encoder_filter.cpp +++ b/engine/pipeline/filters/codec/video_encoder/video_encoder_filter.cpp @@ -46,12 +46,12 @@ public: ~DataCallbackImpl() override = default; - void OnInputBufferDone(std::shared_ptr& input) override + void OnInputBufferDone(const std::shared_ptr& input) override { encFilter_.OnInputBufferDone(input); } - void OnOutputBufferDone(std::shared_ptr& output) override + void OnOutputBufferDone(const std::shared_ptr& output) override { encFilter_.OnOutputBufferDone(output); } diff --git a/engine/plugin/core/codec.cpp b/engine/plugin/core/codec.cpp index 6fa425c9d2ce727a42fd930a91d63a2ba0c1f986..0779b803c36bbaf578cb1e339130aa2b26d367cc 100644 --- a/engine/plugin/core/codec.cpp +++ b/engine/plugin/core/codec.cpp @@ -60,12 +60,12 @@ DataCallbackWrapper(uint32_t pkgVersion, DataCallbackHelper* dataCallback) ~DataCallbackWrapper() override = default; -void OnInputBufferDone(std::shared_ptr& input) override +void OnInputBufferDone(const std::shared_ptr& input) override { dataCallbackHelper->OnInputBufferDone(input); } -void OnOutputBufferDone(std::shared_ptr& output) override +void OnOutputBufferDone(const std::shared_ptr& output) override { dataCallbackHelper->OnOutputBufferDone(output); } diff --git a/engine/plugin/core/codec.h b/engine/plugin/core/codec.h index f6995262ebef71bfa5a38768f3c97536a265cf7a..5b148375d95b2d70d7fb45dc7e49b677002bf4cf 100644 --- a/engine/plugin/core/codec.h +++ b/engine/plugin/core/codec.h @@ -28,8 +28,8 @@ namespace Media { namespace Plugin { struct DataCallbackHelper { virtual ~DataCallbackHelper() = default; - virtual void OnInputBufferDone(std::shared_ptr &input) = 0; - virtual void OnOutputBufferDone(std::shared_ptr &output) = 0; + virtual void OnInputBufferDone(const std::shared_ptr &input) = 0; + virtual void OnOutputBufferDone(const std::shared_ptr &output) = 0; }; struct CodecPlugin; diff --git a/engine/plugin/interface/codec_plugin.h b/engine/plugin/interface/codec_plugin.h index 0a73bb19b5ab3f33cfb616cfc0621589f479cb9e..9679e77d2be0c201a69858badd0cd5e117da4c30 100644 --- a/engine/plugin/interface/codec_plugin.h +++ b/engine/plugin/interface/codec_plugin.h @@ -40,7 +40,7 @@ struct DataCallback { * * @param input Indicates the pointer to the input data. */ - virtual void OnInputBufferDone(std::shared_ptr& input) = 0; + virtual void OnInputBufferDone(const std::shared_ptr& input) = 0; /** * @brief When the out buffer has been produced inside the plugin. @@ -49,7 +49,7 @@ struct DataCallback { * * @param output Indicates the pointer to the output data. */ - virtual void OnOutputBufferDone(std::shared_ptr& output) = 0; + virtual void OnOutputBufferDone(const std::shared_ptr& output) = 0; }; /** diff --git a/engine/plugin/plugins/ffmpeg_adapter/video_decoder/video_ffmpeg_decoder_plugin.cpp b/engine/plugin/plugins/ffmpeg_adapter/video_decoder/video_ffmpeg_decoder_plugin.cpp index eebfb6b98343af20d0bf986647eb62ec337c321a..8dbdd2353c4d7fde16cc6c4c1324adf27f64d21a 100644 --- a/engine/plugin/plugins/ffmpeg_adapter/video_decoder/video_ffmpeg_decoder_plugin.cpp +++ b/engine/plugin/plugins/ffmpeg_adapter/video_decoder/video_ffmpeg_decoder_plugin.cpp @@ -594,14 +594,14 @@ void VideoFfmpegDecoderPlugin::ReceiveBuffer() void VideoFfmpegDecoderPlugin::NotifyInputBufferDone(const std::shared_ptr& input) { if (dataCb_ != nullptr) { - dataCb_->OnInputBufferDone(const_cast&>(input)); + dataCb_->OnInputBufferDone(input); } } void VideoFfmpegDecoderPlugin::NotifyOutputBufferDone(const std::shared_ptr& output) { if (dataCb_ != nullptr) { - dataCb_->OnOutputBufferDone(const_cast&>(output)); + dataCb_->OnOutputBufferDone(output); } }