@@ -579,12 +579,15 @@ caf::message_handler MediaActor::message_handler() {
579579
580580 [=](media_reader::get_thumbnail_atom,
581581 float position) -> result<thumbnail::ThumbnailBufferPtr> {
582- if (base_.empty () or not media_sources_.count (base_.current (MT_IMAGE)))
582+ auto tu = base_.current (MT_THUMBNAIL);
583+ if (not tu)
584+ tu = base_.current (MT_IMAGE);
585+ if (base_.empty () or not tu)
583586 return make_error (xstudio_error::error, " No MediaSources" );
584587
585588 auto rp = make_response_promise<thumbnail::ThumbnailBufferPtr>();
586589 mail (media_reader::get_thumbnail_atom_v, position)
587- .request (media_sources_.at (base_. current (media::MT_IMAGE) ), infinite)
590+ .request (media_sources_.at (tu ), infinite)
588591 .then (
589592 [=](thumbnail::ThumbnailBufferPtr &buf) mutable {
590593 rp.deliver (buf);
@@ -959,21 +962,22 @@ caf::message_handler MediaActor::message_handler() {
959962 auto rp =
960963 make_response_promise<std::vector<std::pair<utility::Uuid, std::string>>>();
961964
962- // make a vector of our MediaSourceActor(s)
963- auto sources = map_value_to_vec (media_sources_ );
965+ // get the uuid of the current thumbnail, if set
966+ const auto tu = base_. current (MT_THUMBNAIL );
964967
965968 // here we remove sources that don't contain any streams matching 'mt'
966969 // i.e. mt = MT_IMAGE and a source only provides audio streams then
967970 // we exclude it from 'sources'
971+ auto sources = std::vector<caf::actor>();
972+ sources.reserve (media_sources_.size ());
968973 caf::scoped_actor sys (system ());
969- auto p = sources.begin ();
970- while (p != sources.end ()) {
974+ for (const auto &[u, a] : media_sources_) {
975+ if (u == tu)
976+ continue ;
971977 auto stream_details = request_receive<std::vector<ContainerDetail>>(
972- *sys, *p, utility::detail_atom_v, mt);
973- if (stream_details.empty ())
974- p = sources.erase (p);
975- else
976- p++;
978+ *sys, a, utility::detail_atom_v, mt);
979+ if (not stream_details.empty () and u != tu)
980+ sources.push_back (a);
977981 }
978982
979983 if (sources.empty ()) {
@@ -2071,6 +2075,8 @@ void MediaActor::duplicate(
20712075 for (const auto &i : base_.media_sources ())
20722076 new_media_srcs.push_back (dmedia_srcs_map[i]);
20732077
2078+ auto tu = base_.current (MT_THUMBNAIL);
2079+
20742080 // bulk add srcs.
20752081 mail (add_media_source_atom_v, new_media_srcs)
20762082 .request (actor, infinite)
@@ -2087,6 +2093,10 @@ void MediaActor::duplicate(
20872093 .request (actor, infinite)
20882094 .then (
20892095 [=](const bool ) mutable {
2096+ if (tu)
2097+ anon_mail (current_media_source_atom_v,
2098+ dmedia_srcs_map[tu].uuid (), MT_THUMBNAIL)
2099+ .send (actor);
20902100 auto uua =
20912101 UuidUuidActor (base_.uuid (), UuidActor (uuid, actor));
20922102
0 commit comments