From c436ab319dc9ce6db586d778669e93c7aca0bdf7 Mon Sep 17 00:00:00 2001 From: David McPaul Date: Tue, 25 May 2010 09:06:26 +0000 Subject: [PATCH] gcc4 fixes and add removal of buffer when source disconnected git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@36932 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- .../media-add-ons/video_mixer/BufferMixer.cpp | 16 +++++++++++++++- .../media-add-ons/video_mixer/BufferMixer.h | 1 + .../video_mixer/VideoMixerNodeConsumer.cpp | 2 ++ 3 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.cpp b/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.cpp index 7b89e61b72..36a09421bd 100644 --- a/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.cpp +++ b/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.cpp @@ -33,7 +33,7 @@ BufferMixer::GetOutputBuffer() { BBuffer *outputBuffer = groupedBuffers[0]; groupedBuffers[0] = NULL; - map::iterator each; + std::map::iterator each; for (each=groupedBuffers.begin(); each != groupedBuffers.end(); each++) { if (each->second != outputBuffer) { @@ -86,3 +86,17 @@ BufferMixer::AddBuffer(int32 id, BBuffer *buffer, bool isPrimary) { oldBuffer->Recycle(); } } + +void +BufferMixer::RemoveBuffer(int32 id) { + BBuffer *oldBuffer; + + if (id < groupedBuffers.size()) { + oldBuffer = groupedBuffers[id]; + groupedBuffers[id] = NULL; + + if (oldBuffer != NULL) { + oldBuffer->Recycle(); + } + } +} diff --git a/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.h b/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.h index 73d6f77044..e00946499a 100644 --- a/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.h +++ b/src/add-ons/media/media-add-ons/video_mixer/BufferMixer.h @@ -18,6 +18,7 @@ public: bool isBufferAvailable(); BBuffer *GetOutputBuffer(); void AddBuffer(int32 id, BBuffer *buffer, bool isPrimary); + void RemoveBuffer(int32 id); void Merge(BBuffer *input, BBuffer *output); private: diff --git a/src/add-ons/media/media-add-ons/video_mixer/VideoMixerNodeConsumer.cpp b/src/add-ons/media/media-add-ons/video_mixer/VideoMixerNodeConsumer.cpp index cf188a0777..eae92a0d1f 100644 --- a/src/add-ons/media/media-add-ons/video_mixer/VideoMixerNodeConsumer.cpp +++ b/src/add-ons/media/media-add-ons/video_mixer/VideoMixerNodeConsumer.cpp @@ -203,6 +203,8 @@ void VideoMixerNode::Disconnected( return; } + bufferMixer.RemoveBuffer(input->destination.id); + // disconnected but not deleted (important) input->source = media_source::null; GetInputFormat(&input->format);