public List <LiveVideoStream> GetStreamLayout(int resolutionWidth, int resolutionHeight) { var viewFramesVisible = ViewFrameList.Where(viewFrame => viewFrame.IsOpened && viewFrame.Visibility == Visibility.Visible); var viewFramesByDesending = viewFramesVisible.OrderBy(viewFrame => viewFrame.ViewOrder); var orderViewFrames = viewFramesByDesending.ToList(); List <LiveVideoStream> liveVideoStreamInfos = new List <LiveVideoStream>(); foreach (var orderViewFrame in orderViewFrames) { LiveVideoStream newLiveVideoStreamInfo = new LiveVideoStream(); RefreshLiveLayout(ref newLiveVideoStreamInfo, orderViewFrame, resolutionWidth, resolutionHeight); liveVideoStreamInfos.Add(newLiveVideoStreamInfo); } if (liveVideoStreamInfos.Count >= 5) { Log.Logger.Debug($"the number of recording video is {liveVideoStreamInfos.Count}"); int height = liveVideoStreamInfos[0].Height; int count = liveVideoStreamInfos.Count(stream => stream.Height == height); if (count >= 5) { int suitHeight = (int)(liveVideoStreamInfos[0].Width * 0.5625); Log.Logger.Debug($"average mode of recording {liveVideoStreamInfos.Count} videos"); int extraY = resolutionHeight / 2 - suitHeight; for (int i = 0; i < count; i++) { liveVideoStreamInfos[i].Height = suitHeight; if (liveVideoStreamInfos[i].Y == 0) { liveVideoStreamInfos[i].Y += extraY; } else { liveVideoStreamInfos[i].Y = resolutionHeight / 2; } } //foreach (var item in liveVideoStreamInfos.Where(stream => stream.Y != 0).ToList()) //{ // item.Y -= extraY; //} //foreach (var item in liveVideoStreamInfos.Where(stream => stream.Y == 0).ToList()) //{ // item.Y += extraY; //} } } return(liveVideoStreamInfos); }
private void RefreshLiveLayout(ref LiveVideoStream liveVideoStreamInfo, ViewFrame viewFrame, int resolutionWidth, int resolutionHeight) { liveVideoStreamInfo.Handle = (uint)viewFrame.Hwnd.ToInt32(); liveVideoStreamInfo.X = (int)((viewFrame.Column / Columns) * resolutionWidth); liveVideoStreamInfo.Width = (int)((viewFrame.ColumnSpan / Columns) * resolutionWidth); liveVideoStreamInfo.Y = (int)((viewFrame.Row / Rows) * resolutionHeight); liveVideoStreamInfo.Height = (int)((viewFrame.RowSpan / Rows) * resolutionHeight - 0.5); }
public List <LiveVideoStream> GetStreamLayout(int resolutionWidth, int resolutionHeight) { var viewFramesVisible = ViewFrameList.Where(viewFrame => viewFrame.IsOpened && viewFrame.Visibility == Visibility.Visible); var viewFramesByDesending = viewFramesVisible.OrderBy(viewFrame => viewFrame.ViewOrder); var orderViewFrames = viewFramesByDesending.ToList(); List <LiveVideoStream> liveVideoStreamInfos = new List <LiveVideoStream>(); foreach (var orderViewFrame in orderViewFrames) { LiveVideoStream newLiveVideoStreamInfo = new LiveVideoStream(); RefreshLiveLayout(ref newLiveVideoStreamInfo, orderViewFrame, resolutionWidth, resolutionHeight); liveVideoStreamInfos.Add(newLiveVideoStreamInfo); } return(liveVideoStreamInfos); }