mirror of
https://github.com/AyuGram/AyuGramDesktop.git
synced 2026-07-25 06:54:43 +00:00
Fix crash in several video removed from video call.
This commit is contained in:
@@ -791,13 +791,13 @@ void Viewport::updateTilesGeometryColumn(int outerWidth) {
|
||||
top += height + st::groupCallVideoSmallSkip;
|
||||
}
|
||||
};
|
||||
const auto topPeer = _large ? _large->row()->peer().get() : nullptr;
|
||||
const auto topPeer = _large ? _large->peer().get() : nullptr;
|
||||
const auto reorderNeeded = [&] {
|
||||
if (!topPeer) {
|
||||
return false;
|
||||
}
|
||||
for (const auto &tile : _tiles) {
|
||||
if (tile.get() != _large && tile->row()->peer() == topPeer) {
|
||||
if (tile.get() != _large && tile->peer() == topPeer) {
|
||||
return (tile.get() != _tiles.front().get())
|
||||
&& !tile->trackOrUserpicSize().isEmpty();
|
||||
}
|
||||
@@ -813,7 +813,7 @@ void Viewport::updateTilesGeometryColumn(int outerWidth) {
|
||||
ranges::stable_partition(
|
||||
_tilesForOrder,
|
||||
[&](not_null<VideoTile*> tile) {
|
||||
return (tile->row()->peer() == topPeer);
|
||||
return (tile->peer() == topPeer);
|
||||
});
|
||||
for (const auto &tile : _tilesForOrder) {
|
||||
layoutNext(tile);
|
||||
|
||||
@@ -460,7 +460,7 @@ void Viewport::RendererGL::validateUserpicFrame(
|
||||
}
|
||||
const auto size = tile->trackOrUserpicSize();
|
||||
tileData.userpicFrame = PeerData::GenerateUserpicImage(
|
||||
tile->row()->peer(),
|
||||
tile->peer(),
|
||||
tile->row()->ensureUserpicView(),
|
||||
size.width(),
|
||||
0);
|
||||
@@ -1239,7 +1239,7 @@ void Viewport::RendererGL::validateDatas() {
|
||||
j->stale = false;
|
||||
const auto index = (j - begin(_tileData));
|
||||
_tileDataIndices[i] = index;
|
||||
const auto peer = tiles[i]->row()->peer();
|
||||
const auto peer = tiles[i]->peer();
|
||||
if ((j->peer != peer)
|
||||
|| (j->nameVersion != peer->nameVersion())
|
||||
|| (j->nameRect.width() != width)) {
|
||||
@@ -1263,7 +1263,7 @@ void Viewport::RendererGL::validateDatas() {
|
||||
continue;
|
||||
}
|
||||
const auto id = quintptr(tiles[i]->track().get());
|
||||
const auto peer = tiles[i]->row()->peer();
|
||||
const auto peer = tiles[i]->peer();
|
||||
const auto paused = (tiles[i]->track()->state()
|
||||
== Webrtc::VideoState::Paused);
|
||||
auto index = int(_tileData.size());
|
||||
|
||||
@@ -82,7 +82,7 @@ void Viewport::RendererSW::validateUserpicFrame(
|
||||
const auto size = tile->trackOrUserpicSize();
|
||||
data.userpicFrame = Images::BlurLargeImage(
|
||||
PeerData::GenerateUserpicImage(
|
||||
tile->row()->peer(),
|
||||
tile->peer(),
|
||||
tile->row()->ensureUserpicView(),
|
||||
size.width(),
|
||||
0),
|
||||
|
||||
@@ -7,6 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL
|
||||
*/
|
||||
#include "calls/group/calls_group_viewport_tile.h"
|
||||
|
||||
#include "calls/group/calls_group_members_row.h"
|
||||
#include "webrtc/webrtc_video_track.h"
|
||||
#include "lang/lang_keys.h"
|
||||
#include "ui/round_rect.h"
|
||||
@@ -33,11 +34,11 @@ Viewport::VideoTile::VideoTile(
|
||||
: _endpoint(endpoint)
|
||||
, _update(std::move(update))
|
||||
, _track(std::move(track))
|
||||
, _peer(_track.row->peer())
|
||||
, _trackSize(std::move(trackSize))
|
||||
, _rtmp(endpoint.rtmp())
|
||||
, _self(self) {
|
||||
Expects(_track.track != nullptr);
|
||||
Expects(_track.row != nullptr);
|
||||
|
||||
using namespace rpl::mappers;
|
||||
_track.track->stateValue(
|
||||
|
||||
@@ -37,6 +37,9 @@ public:
|
||||
[[nodiscard]] not_null<MembersRow*> row() const {
|
||||
return _track.row;
|
||||
}
|
||||
[[nodiscard]] not_null<PeerData*> peer() const {
|
||||
return _peer;
|
||||
}
|
||||
[[nodiscard]] bool rtmp() const {
|
||||
return _rtmp;
|
||||
}
|
||||
@@ -113,8 +116,9 @@ private:
|
||||
|
||||
const VideoEndpoint _endpoint;
|
||||
const Fn<void()> _update;
|
||||
const VideoTileTrack _track;
|
||||
const not_null<PeerData*> _peer;
|
||||
|
||||
VideoTileTrack _track;
|
||||
QRect _geometry;
|
||||
TileAnimation _animation;
|
||||
rpl::variable<QSize> _trackSize;
|
||||
|
||||
Reference in New Issue
Block a user