// private void SliderContrast_ValueChanged(object sender, RangeBaseValueChangedEventArgs e) // { // if (EffectIndex is -1) { return; } // int value = Convert.ToInt32(SliderContrast.Value); // if (value is 0) { NoFilter(); return; } // switch (EffectIndex) // { // case 0: /*add*/ break; // case 1: Brightness(value); break; // case 2: Contrast(value); break; // case 3: Temperature(value); break; // case 4: ColorBoost(value); break; // case 5: /*Add*/ break; // case 6: /*add*/ break; // } // } // private void EditsList_ItemClick(object sender, ItemClickEventArgs e) // { // var data = e.ClickedItem as GridViewEditItem; // EffectIndex = data.Target; // _NameEffect.Text = data.Text; // EditRoot.Visibility = Visibility.Visible; // } // private void Cancel_Click(object sender, RoutedEventArgs e) // { // EditRoot.Visibility = Visibility.Collapsed; // } // private void Done_Click(object sender, RoutedEventArgs e) // { // EditRoot.Visibility = Visibility.Collapsed; // } async Task <Uri> SaveToImage() { using (var source = new StorageFileImageSource(imageStorageFile)) using (var renderer = new JpegRenderer(LastEffect, JpegOutputColorMode.Yuv420)) { var info = await source.GetInfoAsync(); var R = AspectRatioHelper.Aspect(Convert.ToInt32(info.ImageSize.Width), Convert.ToInt32(info.ImageSize.Height)); if (!SupportedAspectRatio(R)) { var max = Math.Max(info.ImageSize.Height, info.ImageSize.Width); renderer.Size = new Size(max, max); } var saveAsTarget = await ApplicationData.Current.LocalFolder.CreateFileAsync("file.Jpg", CreationCollisionOption.GenerateUniqueName); var render = await renderer.RenderAsync(); using (var fs = await saveAsTarget.OpenAsync(FileAccessMode.ReadWrite)) { await fs.WriteAsync(render); await fs.FlushAsync(); return(new Uri($"ms-appdata:///local/{saveAsTarget.Name}", UriKind.RelativeOrAbsolute)); } } }
public override void BeginRecording(RecordingSession session) { int screenWidth = Screen.width; int screenHeight = Screen.height; #if UNITY_EDITOR switch (scSettings.m_OutputSize) { case EImageDimension.Window: { GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight); outputWidth = screenWidth; outputHeight = screenHeight; if (scSettings.m_ForceEvenSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } break; } default: { outputHeight = (int)scSettings.m_OutputSize; outputWidth = (int)(outputHeight * AspectRatioHelper.GetRealAR(scSettings.m_AspectRatio)); if (scSettings.m_ForceEvenSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } break; } } int w, h; GameViewSize.GetGameRenderSize(out w, out h); if (w != outputWidth || h != outputHeight) { var size = GameViewSize.SetCustomSize(outputWidth, outputHeight) ?? GameViewSize.AddSize(outputWidth, outputHeight); if (GameViewSize.m_ModifiedResolutionCount == 0) { GameViewSize.BackupCurrentSize(); } else { if (size != GameViewSize.currentSize) { Debug.LogError("Requestion a resultion change while a recorder's input has already requested one! Undefined behaviour."); } } GameViewSize.m_ModifiedResolutionCount++; m_ModifiedResolution = true; GameViewSize.SelectSize(size); } #endif }
public override void BeginRecording(RecordingSession session) { m_quad = CreateFullscreenQuad(); switch (cbSettings.source) { case EImageSource.GameDisplay: case EImageSource.MainCamera: { int screenWidth = Screen.width; int screenHeight = Screen.height; #if UNITY_EDITOR switch (cbSettings.m_RenderSize) { case EImageDimension.Window: { GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight); outputWidth = screenWidth; outputHeight = screenHeight; if (cbSettings.m_PadSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } break; } default: { outputHeight = (int)cbSettings.m_RenderSize; outputWidth = (int)(outputHeight * AspectRatioHelper.GetRealAR(cbSettings.m_RenderAspect)); if (cbSettings.m_PadSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } var size = GameViewSize.FindSize(outputWidth, outputHeight); if (size == null) { size = GameViewSize.AddSize(outputWidth, outputHeight); } GameViewSize.SelectSize(size); break; } } #endif break; } case EImageSource.TaggedCamera: default: throw new ArgumentOutOfRangeException(); } }
public override void BeginRecording(RecordingSession session) { superShader = Shader.Find("Hidden/Volund/BS4SuperShader"); accumulateShader = Shader.Find("Hidden/BeautyShot/Accumulate"); normalizeShader = Shader.Find("Hidden/BeautyShot/Normalize"); if (rtsSettings.m_FlipFinalOutput) { m_VFlipper = new TextureFlipper(); } // Below here is considered 'void StartVertice()', but we run it for directly "various reasons". if (rtsSettings.m_OutputSize > rtsSettings.m_RenderSize) { throw new UnityException("Upscaling is not supported! Output dimension must be smaller or equal to render dimension."); } // Calculate aspect and render/output sizes // Clamp size to 16K, which is the min always supported size in d3d11 // Force output to divisible by two as x264 doesn't approve of odd image dimensions. var aspect = AspectRatioHelper.GetRealAR(rtsSettings.m_AspectRatio); m_renderHeight = (int)rtsSettings.m_RenderSize; m_renderWidth = Mathf.Min(16 * 1024, Mathf.RoundToInt(m_renderHeight * aspect)); outputHeight = (int)rtsSettings.m_OutputSize; outputWidth = Mathf.Min(16 * 1024, Mathf.RoundToInt(outputHeight * aspect)); if (rtsSettings.m_ForceEvenSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } m_superMaterial = new Material(superShader); m_superMaterial.hideFlags = HideFlags.DontSave; m_accumulateMaterial = new Material(accumulateShader); m_accumulateMaterial.hideFlags = HideFlags.DontSave; m_normalizeMaterial = new Material(normalizeShader); m_normalizeMaterial.hideFlags = HideFlags.DontSave; m_renderRT = new RenderTexture(m_renderWidth, m_renderHeight, 24, RenderTextureFormat.DefaultHDR, RenderTextureReadWrite.Linear); m_renderRT.wrapMode = TextureWrapMode.Clamp; for (int i = 0; i < 2; ++i) { m_accumulateRTs[i] = new RenderTexture(m_renderWidth, m_renderHeight, 0, RenderTextureFormat.DefaultHDR, RenderTextureReadWrite.Linear); m_accumulateRTs[i].wrapMode = TextureWrapMode.Clamp; m_accumulateRTs[i].Create(); } var rt = new RenderTexture(outputWidth, outputHeight, 0, RenderTextureFormat.DefaultHDR, RenderTextureReadWrite.Linear); rt.Create(); outputRT = rt; m_samples = new Vector2[(int)rtsSettings.m_SuperSampling]; GenerateSamplesMSAA(m_samples, rtsSettings.m_SuperSampling); m_hookedCameras = new List <HookedCamera>(); }
async void ImportFile(StorageFile file) { try { var editNeeded = false; double width = 0, height = 0; var decoder = await BitmapDecoder.CreateAsync(await file.OpenReadAsync()); width = decoder.PixelWidth; height = decoder.PixelHeight; var wRatio = AspectRatioHelper.GetAspectRatioForMedia(width, height); var hRatio = AspectRatioHelper.GetAspectRatioForMedia(height, width); //if (wRatio > 1.91 && wRatio < 0.8) // editNeeded = true; //else //{ // if (hRatio > 1.91 && hRatio < 0.8) // editNeeded = true; //} //if (height > width) editNeeded = true; if (!editNeeded) { CropGrid.Visibility = Visibility.Visible; ImageView.Visibility = Visibility.Collapsed; UploadButton.IsEnabled = false; AspectRatioSlider.Value = wRatio; ImageCropper.AspectRatio = wRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } else { CropGrid.Visibility = Visibility.Visible; ImageView.Visibility = Visibility.Collapsed; UploadButton.IsEnabled = false; //Helper.ShowNotify("Your photo is not in a acceptable aspect ratio." + // "\r\nYou need to crop it and then you can upload it.", 4500); AspectRatioSlider.Value = DefaultAspectRatio; ImageCropper.AspectRatio = DefaultAspectRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } } catch { } }
private double GetImageDisplayHeight(ItemListViewModel viewModel) { var imageDisplayWidth = viewModel.ImageDisplayWidth; var medianPrimaryImageAspectRatio = viewModel.MedianPrimaryImageAspectRatio ?? 0; var imageType = GetPreferredImageTypes(viewModel).First(); if (imageType == ImageType.Backdrop || imageType == ImageType.Screenshot || imageType == ImageType.Thumb) { double height = imageDisplayWidth; return(height / AspectRatioHelper.GetAspectRatio(ImageType.Backdrop, medianPrimaryImageAspectRatio)); } if (!medianPrimaryImageAspectRatio.Equals(0) && imageType == ImageType.Primary) { double height = imageDisplayWidth; height /= medianPrimaryImageAspectRatio; return(height); } return(viewModel.DefaultImageDisplayHeight); }
public override void BeginRecording(RecordingSession session) { if (cbSettings.m_FlipFinalOutput) { m_VFlipper = new TextureFlipper(); } m_quad = CreateFullscreenQuad(); switch (cbSettings.source) { case EImageSource.ActiveCameras: case EImageSource.MainCamera: case EImageSource.TaggedCamera: { int screenWidth = Screen.width; int screenHeight = Screen.height; #if UNITY_EDITOR switch (cbSettings.m_OutputSize) { case EImageDimension.Window: { GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight); outputWidth = screenWidth; outputHeight = screenHeight; if (cbSettings.m_ForceEvenSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } break; } default: { outputHeight = (int)cbSettings.m_OutputSize; outputWidth = (int)(outputHeight * AspectRatioHelper.GetRealAR(cbSettings.m_AspectRatio)); if (cbSettings.m_ForceEvenSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } var size = GameViewSize.SetCustomSize(outputWidth, outputHeight); if (size == null) { size = GameViewSize.AddSize(outputWidth, outputHeight); } if (GameViewSize.m_ModifiedResolutionCount == 0) { GameViewSize.BackupCurrentSize(); } else { if (size != GameViewSize.currentSize) { Debug.LogError("Requestion a resultion change while a recorder's input has already requested one! Undefined behaviour."); } } GameViewSize.m_ModifiedResolutionCount++; m_ModifiedResolution = true; GameViewSize.SelectSize(size); break; } } #endif break; } default: throw new ArgumentOutOfRangeException(); } if (cbSettings.m_CaptureUI) { var uiGO = new GameObject(); uiGO.name = "UICamera"; uiGO.transform.parent = session.m_RecorderGO.transform; m_UICamera = uiGO.AddComponent <Camera>(); m_UICamera.cullingMask = 1 << 5; m_UICamera.clearFlags = CameraClearFlags.Depth; m_UICamera.renderingPath = RenderingPath.DeferredShading; m_UICamera.targetTexture = outputRT; m_UICamera.enabled = false; } }
public async Task SetFileAsync(StorageFile file) { try { Editing = true; CanCrop = false; LoadingUc.Start(); if (file.IsVideo()) { VideoButton.Visibility = Visibility.Visible; IsVideo = true; FileToUpload = file; ThumbnailFile = await file.GetSnapshotFromD3D(TimeSpan.Zero, true); ThumbnailFile = await new PhotoHelper().SaveToImage(ThumbnailFile, false); double width = 0, height = 0; var decoder = await BitmapDecoder.CreateAsync(await ThumbnailFile.OpenReadAsync()); width = decoder.PixelWidth; height = decoder.PixelHeight; var wRatio = AspectRatioHelper.GetAspectRatioForMedia(width, height); var hRatio = AspectRatioHelper.GetAspectRatioForMedia(height, width); MainCanvas.Visibility = Visibility.Collapsed; AspectRatioSlider.Value = wRatio; ImageCropper.AspectRatio = wRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(ThumbnailFile); CropGrid.Visibility = Visibility.Visible; await Task.Delay(1500); ImageCropper.AspectRatio = DefaultAspectRatio; AspectRatioSlider.Value = DefaultAspectRatio; CanCrop = true; LoadingUc.Stop(); } else { VideoButton.Visibility = Visibility.Collapsed; IsVideo = false; ThumbnailFile = null; BitmapDecoder = null; var editNeeded = false; double width = 0, height = 0; var decoder = await BitmapDecoder.CreateAsync(await file.OpenReadAsync()); width = decoder.PixelWidth; height = decoder.PixelHeight; var wRatio = AspectRatioHelper.GetAspectRatioForMedia(width, height); var hRatio = AspectRatioHelper.GetAspectRatioForMedia(height, width); if (wRatio > 1.91 && wRatio < 0.8) { editNeeded = true; } else { if (hRatio > 1.91 && hRatio < 0.8) { editNeeded = true; } } if (height > width) { editNeeded = true; } //in paeini comment bod FileToUpload = await new PhotoHelper().SaveToImage(file, false); if (!editNeeded) { CropGrid.Visibility = Visibility.Visible; MainCanvas.Visibility = Visibility.Collapsed; AspectRatioSlider.Value = wRatio; ImageCropper.AspectRatio = wRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } else { CropGrid.Visibility = Visibility.Visible; MainCanvas.Visibility = Visibility.Collapsed; AspectRatioSlider.Value = DefaultAspectRatio; ImageCropper.AspectRatio = DefaultAspectRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } //await Task.Delay(1500); CanCrop = true; LoadingUc.Stop(); } } catch { } }
async void Next_Click(object sender, RoutedEventArgs e) { // Width of Photo should be 1080 at last // photo that has a width between 320 and 1080 pixels, // photo's aspect ratio is between 1.91:1 and 4:5 (a height between 566 and 1350 pixels with a width of 1080 pixels) using (var source = new StorageFileImageSource(imageStorageFile)) { var size = (await source.GetInfoAsync()).ImageSize; var R = AspectRatioHelper.Aspect(Convert.ToInt32(size.Width), Convert.ToInt32(size.Height)); Frame.Navigate(typeof(FinalizeAddView), (FiltersList.SelectedItem as FilterListItem).bitmapSource); //var res = await AppCore.InstaApi.UploadPhotoAsync( // new InstaSharper.Classes.Models.InstaImage((FiltersList.SelectedItem as FilterListItem).bitmapSource.LocalPath, (int)size.Width, (int)size.Height), "#تست #موقت"); } StorageFile F2S = null; if (FiltersList.SelectedItem == null) { F2S = imageStorageFile; } else { F2S = await StorageFile.GetFileFromApplicationUriAsync((FiltersList.SelectedItem as FilterListItem).bitmapSource); } var fsp = new FileSavePicker(); fsp.FileTypeChoices.Add(".jpg", new List <string> { ".jpg" }); fsp.SuggestedFileName = "WinGoTag"; fsp.SuggestedStartLocation = PickerLocationId.PicturesLibrary; var fs = await fsp.PickSaveFileAsync(); if (fs == null) { return; } await F2S.CopyAndReplaceAsync(fs); // using (var source = new StorageFileImageSource(imageStorageFile)) // using (var contrastEffect = new BlurEffect(source) { KernelSize = 40 }) // using (var renderer = new JpegRenderer(contrastEffect, JpegOutputColorMode.Yuv420)) // { // var info = await source.GetInfoAsync(); // var saveAsTarget = await ApplicationData.Current.LocalFolder.CreateFileAsync("TempImage1.Jpg", CreationCollisionOption.OpenIfExists); // var render = await renderer.RenderAsync(); // using (var fs = await saveAsTarget.OpenAsync(FileAccessMode.ReadWrite)) // { // await fs.WriteAsync(render); // await fs.FlushAsync(); // } // } // var res = await AppCore.InstaApi.UploadPhotoAsync(new InstaSharper.Classes.Models.InstaImage() // { // URI = new Uri("ms-appdata:///TempImage1.Jpg", UriKind.Absolute).LocalPath, // Width = 391, // Height = 428 // }, "از بیرون تحریم؛ از داخل فیلتر :|"); }
async void ImportFile(StorageFile file) { try { if (Path.GetExtension(file.Path).ToLower() == ".mp4" || Path.GetExtension(file.Path).ToLower() == ".mkv") { IsVideo = true; FileToUpload = file; ThumbnailFile = await file.GetSnapshotFromD3D(TimeSpan.Zero, true); ThumbnailFile = await new PhotoHelper().SaveToImage(ThumbnailFile, false); double width = 0, height = 0; var decoder = await BitmapDecoder.CreateAsync(await ThumbnailFile.OpenReadAsync()); width = decoder.PixelWidth; height = decoder.PixelHeight; var wRatio = AspectRatioHelper.GetAspectRatioForMedia(width, height); var hRatio = AspectRatioHelper.GetAspectRatioForMedia(height, width); MainCanvas.Visibility = /*ImageView.Visibility =*/ Visibility.Collapsed; UploadButton.IsEnabled = false; AspectRatioSlider.Value = wRatio; ImageCropper.AspectRatio = wRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(ThumbnailFile); AspectRatioSlider.Value = DefaultAspectRatio; ImageCropper.AspectRatio = DefaultAspectRatio; //await Task.Delay(2500); //using (var fileStream = await ThumbnailFile.OpenAsync(FileAccessMode.ReadWrite, StorageOpenOptions.None)) // await ImageCropper.SaveAsync(fileStream, BitmapFileFormat.Jpeg); //ThumbnailFile = await new PhotoHelper().SaveToImage(ThumbnailFile, false); //decoder = await BitmapDecoder.CreateAsync(await ThumbnailFile.OpenReadAsync()); //VideoBitmapDecoder = decoder; //CurrentCroppedRectForVideo = ImageCropper.CurrentCroppedRect; //ShowImagePreview(ThumbnailFile); //CropGrid.Visibility = Visibility.Collapsed; //MainCanvas.Visibility = /*ImageView.Visibility =*/ Visibility.Visible; //UploadButton.IsEnabled = true; var editNeeded = false; if (wRatio > 1.91 && wRatio < 0.8) { editNeeded = true; } else { if (hRatio > 1.91 && hRatio < 0.8) { editNeeded = true; } } if (height > width) { editNeeded = true; } if (!editNeeded) { FileToUpload = await new PhotoHelper().SaveToImage(file, false); CropGrid.Visibility = Visibility.Visible; CropGrid.Opacity = 1; MainCanvas.Visibility = /*ImageView.Visibility =*/ Visibility.Collapsed; UploadButton.IsEnabled = false; AspectRatioSlider.Value = wRatio; ImageCropper.AspectRatio = wRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } else { CropGrid.Opacity = 1; CropGrid.Visibility = Visibility.Visible; MainCanvas.Visibility = /*ImageView.Visibility =*/ Visibility.Collapsed; UploadButton.IsEnabled = false; AspectRatioSlider.Value = DefaultAspectRatio; ImageCropper.AspectRatio = DefaultAspectRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } } else { IsVideo = false; ThumbnailFile = null; VideoBitmapDecoder = null; var editNeeded = false; double width = 0, height = 0; var decoder = await BitmapDecoder.CreateAsync(await file.OpenReadAsync()); width = decoder.PixelWidth; height = decoder.PixelHeight; var wRatio = AspectRatioHelper.GetAspectRatioForMedia(width, height); var hRatio = AspectRatioHelper.GetAspectRatioForMedia(height, width); if (wRatio > 1.91 && wRatio < 0.8) { editNeeded = true; } else { if (hRatio > 1.91 && hRatio < 0.8) { editNeeded = true; } } if (height > width) { editNeeded = true; } if (!editNeeded) { //CropGrid.Visibility = Visibility.Collapsed; //ImageView.Visibility = Visibility.Visible; //UploadButton.IsEnabled = true; //ShowImagePreview(file); //in paeini comment bod FileToUpload = await new PhotoHelper().SaveToImage(file, false); CropGrid.Visibility = Visibility.Visible; CropGrid.Opacity = 1; MainCanvas.Visibility = /*ImageView.Visibility =*/ Visibility.Collapsed; UploadButton.IsEnabled = false; AspectRatioSlider.Value = wRatio; ImageCropper.AspectRatio = wRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } else { CropGrid.Opacity = 1; CropGrid.Visibility = Visibility.Visible; MainCanvas.Visibility = /*ImageView.Visibility =*/ Visibility.Collapsed; UploadButton.IsEnabled = false; //Helper.ShowNotify("Your photo is not in a acceptable aspect ratio." + // "\r\nYou need to crop it and then you can upload it.", 4500); AspectRatioSlider.Value = DefaultAspectRatio; ImageCropper.AspectRatio = DefaultAspectRatio; ImageCropper.CropShape = CropShape.Rectangular; await ImageCropper.LoadImageFromFile(file); } //using (var source = new StorageFileImageSource(file)) //using (var renderer = new JpegRenderer(source, JpegOutputColorMode.Yuv420, OutputOption.PreserveAspectRatio)) //{ // var info = await source.GetInfoAsync(); // width = info.ImageSize.Width; // height = info.ImageSize.Height; //} } } catch { } }
public static async Task <WebMediaInfo> ProcessAsync(IOwinContext context, string itemId, WebMediaType type) { if (itemId == null) { throw new BadRequestException("GetMediaInfo: itemId is null"); } Guid mediaItemId; MediaItem item; long duration = 0; string container = string.Empty; MetadataContainer info; List <WebVideoStream> webVideoStreams = new List <WebVideoStream>(); List <WebAudioStream> webAudioStreams = new List <WebAudioStream>(); List <WebSubtitleStream> webSubtitleStreams = new List <WebSubtitleStream>(); if (type == WebMediaType.TV || type == WebMediaType.Radio) { int channelIdInt; if (int.TryParse(itemId, out channelIdInt)) { item = new LiveTvMediaItem(Guid.Empty); info = MediaAnalyzer.ParseChannelStreamAsync(channelIdInt, (LiveTvMediaItem)item).Result; if (info == null) { throw new BadRequestException(String.Format("GetMediaInfo: Channel {0} stream not available", itemId)); } } else { throw new BadRequestException(String.Format("GetMediaInfo: Channel {0} not found", itemId)); } } else if (Guid.TryParse(itemId, out mediaItemId) == true) { ISet <Guid> necessaryMIATypes = new HashSet <Guid>(); necessaryMIATypes.Add(MediaAspect.ASPECT_ID); necessaryMIATypes.Add(ProviderResourceAspect.ASPECT_ID); necessaryMIATypes.Add(ImporterAspect.ASPECT_ID); ISet <Guid> optionalMIATypes = new HashSet <Guid>(); optionalMIATypes.Add(VideoAspect.ASPECT_ID); optionalMIATypes.Add(VideoStreamAspect.ASPECT_ID); optionalMIATypes.Add(VideoAudioStreamAspect.ASPECT_ID); optionalMIATypes.Add(AudioAspect.ASPECT_ID); optionalMIATypes.Add(ImageAspect.ASPECT_ID); item = MediaLibraryAccess.GetMediaItemById(context, itemId, necessaryMIATypes, optionalMIATypes); if (item == null) { throw new BadRequestException(String.Format("GetMediaInfo: No MediaItem found with id: {0}", itemId)); } } else { throw new BadRequestException(String.Format("GetMediaInfo: Media not found with id: {0}", itemId)); } // decide which type of media item we have info = await MediaAnalyzer.ParseMediaItemAsync(item); if (item.Aspects.ContainsKey(VideoAspect.ASPECT_ID)) { var videoAspect = item.GetAspect(VideoAspect.Metadata); var videoStreamAspect = item.GetAspect(VideoStreamAspect.Metadata); duration = Convert.ToInt64(videoStreamAspect.GetAttributeValue <long?>(VideoStreamAspect.ATTR_DURATION) ?? 0); bool interlaced = (videoStreamAspect.GetAttributeValue <string>(VideoStreamAspect.ATTR_VIDEO_TYPE) ?? "").ToLowerInvariant().Contains("interlaced"); foreach (var data in info.Metadata) { int edition = data.Key; int editionOffset = 0; if (edition >= 0) { editionOffset = (edition + 1) * ProfileMediaItem.EDITION_OFFSET; } if (info.IsVideo(edition)) { // Video WebVideoStream webVideoStream = new WebVideoStream(); webVideoStream.Codec = Convert.ToString(info.Video[edition].Codec); webVideoStream.DisplayAspectRatio = Convert.ToDecimal(info.Video[edition].AspectRatio ?? 0); webVideoStream.DisplayAspectRatioString = AspectRatioHelper.AspectRatioToString(Convert.ToDecimal(info.Video[edition].AspectRatio ?? 0)); webVideoStream.Height = Convert.ToInt32(info.Video[edition].Height ?? 0); webVideoStream.Width = Convert.ToInt32(info.Video[edition].Width ?? 0); webVideoStreams.Add(webVideoStream); webVideoStream.ID = info.Video[edition].StreamIndex + editionOffset; webVideoStream.Index = 0; webVideoStream.Interlaced = interlaced; container = info.Metadata[edition].VideoContainerType.ToString(); // Audio for (int i = 0; i < info.Audio[edition].Count; i++) { WebAudioStream webAudioStream = new WebAudioStream(); if (info.Audio[edition][i].Channels != null) { webAudioStream.Channels = info.Audio[edition][i].Channels.Value; } webAudioStream.Codec = info.Audio[edition][i].Codec.ToString(); webAudioStream.ID = info.Audio[edition][i].StreamIndex + editionOffset; webAudioStream.Index = i; if (info.Audio[edition][i].Language != null) { string language = info.Audio[edition][i].Language == string.Empty ? UNDEFINED : info.Audio[edition][i].Language; webAudioStream.Language = language; if (language != UNDEFINED) { webAudioStream.LanguageFull = new CultureInfo(language).EnglishName; if (item.HasEditions && item.Editions.Any(e => e.Value.SetNo == edition)) { webAudioStream.Title = item.Editions.First(e => e.Key == edition).Value.Name; } else if (item.GetPlayData(out var mime, out var mediaName)) { webAudioStream.Title = mediaName; } else { webAudioStream.Title = "?"; } if (string.IsNullOrEmpty(webAudioStream.Codec) == false) { webAudioStream.Title += webAudioStream.Title?.Length > 0 ? $" ({webAudioStream.Codec.ToUpperInvariant()})" : webAudioStream.Codec.ToUpperInvariant(); } } } webAudioStreams.Add(webAudioStream); } // Subtitles if (info.Subtitles[edition].Any()) { int firstMediaIdx = info.Subtitles[edition].Keys.First(); for (int i = 0; i < info.Subtitles[edition][firstMediaIdx].Count; i++) { WebSubtitleStream webSubtitleStream = new WebSubtitleStream(); webSubtitleStream.Filename = info.Subtitles[edition][firstMediaIdx][i].IsEmbedded ? "Embedded" : info.Subtitles[edition][firstMediaIdx][i].SourcePath; webSubtitleStream.ID = info.Subtitles[edition][firstMediaIdx][i].StreamIndex + editionOffset; webSubtitleStream.Index = i; if (info.Subtitles[edition][firstMediaIdx][i].Language != null) { string language = info.Subtitles[edition][firstMediaIdx][i].Language == string.Empty ? UNDEFINED : info.Subtitles[edition][firstMediaIdx][i].Language; webSubtitleStream.Language = language; webSubtitleStream.LanguageFull = language; if (language != UNDEFINED) { webSubtitleStream.LanguageFull = new CultureInfo(language).EnglishName; } } webSubtitleStreams.Add(webSubtitleStream); } } } } } else if (item.Aspects.ContainsKey(AudioAspect.ASPECT_ID)) { int edition = info.Metadata.Min(d => d.Key); if (info.IsAudio(edition)) { var audioAspect = item.GetAspect(AudioAspect.Metadata); duration = (long)audioAspect[AudioAspect.ATTR_DURATION]; container = info.Metadata[edition].AudioContainerType.ToString(); } } else if (item.Aspects.ContainsKey(ImageAspect.ASPECT_ID)) { int edition = info.Metadata.Min(d => d.Key); if (info.IsImage(edition)) { container = info.Metadata[edition].ImageContainerType.ToString(); } } WebMediaInfo webMediaInfo = new WebMediaInfo { Duration = duration * 1000, Container = container, VideoStreams = webVideoStreams, AudioStreams = webAudioStreams, SubtitleStreams = webSubtitleStreams }; return(webMediaInfo); }
public override void BeginRecording(RecordingSession session) { m_quad = CreateFullscreenQuad(); switch (cbSettings.source) { case EImageSource.GameDisplay: case EImageSource.MainCamera: { int screenWidth = Screen.width; int screenHeight = Screen.height; #if UNITY_EDITOR switch (cbSettings.m_RenderSize) { case EImageDimension.Window: { GameViewSize.GetGameRenderSize(out screenWidth, out screenHeight); outputWidth = screenWidth; outputHeight = screenHeight; if (cbSettings.m_ForceEvenSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } break; } default: { outputHeight = (int)cbSettings.m_RenderSize; outputWidth = (int)(outputHeight * AspectRatioHelper.GetRealAR(cbSettings.m_RenderAspect)); if (cbSettings.m_ForceEvenSize) { outputWidth = (outputWidth + 1) & ~1; outputHeight = (outputHeight + 1) & ~1; } var size = GameViewSize.SetCustomSize(outputWidth, outputHeight); if (size == null) { size = GameViewSize.AddSize(outputWidth, outputHeight); } if (m_ModifiedResolutionCount == 0) { GameViewSize.BackupCurrentSize(); } else { if (size != GameViewSize.currentSize) { Debug.LogError("Requestion a resultion change while a recorder's input has already requested one! Undefined behaviour."); } } m_ModifiedResolutionCount++; m_ModifiedResulution = true; GameViewSize.SelectSize(size); break; } } #endif break; } case EImageSource.TaggedCamera: default: throw new ArgumentOutOfRangeException(); } }