Projects
Multimedia
obs-studio
Sign Up
Log In
Username
Password
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
Expand all
Collapse all
Changes of Revision 56
View file
obs-studio.changes
Changed
@@ -1,4 +1,65 @@ ------------------------------------------------------------------- +Sat May 12 23:59:07 UTC 2018 - jimmy@boombatower.com + +- Update to version 21.1.2: + * libobs: Update version to 21.1.2 + * win-capture: Update D3D9 signature for Win10 April 2018 Update + * CI: Check out OSX branch of obs-browser + * cmake: Include windows style DLL when copying Qt files + * obs-browser: Update submodule to latest version + * UI/updater: Delete visual studio runtimes after execution + * deps/obs-scripting: Prevent python unload more than once + * obs-browser: Update submodule to latest version + * deps/obs-scripting: Don't allow unloading more than once + * enc-amf: Version 2.3.3 + * libobs: Update version to 21.1.0 + * deps/obs-scripting: Add obs_source_enum_filters + * rtmp-services: Update ingest list for Aparat.com + * mac-capture: Fix bug where audio device couldn't be changed + * UI: Add Help -> Crash Reports submenu + * UI: Add subdir param to OBSBasic::UploadLog + * UI: Specify whether crash/profiler/logs have prefix + * UI: Specify subdir/variable to save to for get_last_log + * rtmp-services: Update ingest list for Nood.tv + * UI: Replace gist with hastebin for log uploads + * UI/updater: Return false on integrity check failure + * UI/updater: Don't update modules of opposite arch + * UI/updater: Add automatic check/install for VS2017 redist + * UI/updater: Fix a few type size mismatch warnings + * UI/updater: Fix resource compiling bug + * UI/updater: Fix bug with restrict keyword on VS2017 + * UI/updater: Set license of windows update module to ISC + * UI/updater: Rewrite function + * Update translations from Crowdin + * UI: Refresh multiview projector menu per click + * cmake: Remove extraneous checks + * UI: Refresh system tray projector menu per click + * UI: Remove unnecessary casts + * Update README.rst + * libobs-opengl: Request at least 8 bits for alpha + * linux-capture: Request at least 8 bits for alpha + * UI: Remove check for updates on Linux + * cmake, libobs, win-capture: Fix VS2017 warnings + * cmake: Add .vs directories to .gitignore + * deps/obs-scripting: Fix tick function arg number + * obs-ffmpeg: Fix locale typo + * rtmp-services: Update ingest list for Restream.io + * deps/obs-scripting: Expose obs video info to swig + * image-source: Fade to transparency if slideshow list is cleared + * rtmp-services: Add Vimeo to services list + * libobs: Fix property text typo + * libobs/util: Fix blank config file values being ignored + * obs-ffmpeg: Use FFmpeg's "fast" AAC encoder by default + * obs-ffmpeg: Remove cutoff hack for AAC encoder + * win-mf: Deprecate plugin + * win-capture/graphics-hook: Fix memory offset calculation + * UI: Remove duplicate line + * obs-output: Update ftl-sdk version and ftl logging values + * enc-amf: Version 2.3.2 + * UI: Allow nested docks + * UI: Don't draw bounding boxes for sources without video flag + +------------------------------------------------------------------- Wed Feb 21 20:31:20 UTC 2018 - jimmy@boombatower.com - Update to version 21.0.3:
View file
obs-studio.spec
Changed
@@ -1,5 +1,5 @@ Name: obs-studio -Version: 21.0.3 +Version: 21.1.2 Release: 0 Summary: A recording/broadcasting program Group: Productivity/Multimedia/Video/Editors and Convertors
View file
_service
Changed
@@ -1,7 +1,7 @@ <services> <service name="tar_scm" mode="disabled"> <param name="versionformat">@PARENT_TAG@</param> - <param name="revision">refs/tags/21.0.3</param> + <param name="revision">refs/tags/21.1.2</param> <param name="url">git://github.com/jp9000/obs-studio.git</param> <param name="scm">git</param> <param name="changesgenerate">enable</param>
View file
_servicedata
Changed
@@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">git://github.com/jp9000/obs-studio.git</param> - <param name="changesrevision">90692c9791ed33648b40916fa353aa3f2df35f2f</param> + <param name="changesrevision">8718b33875695dc66eec701816d62158d01ac71e</param> </service> </servicedata>
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/HIDDEN_PARAMETERS.md
Deleted
@@ -1,1330 +0,0 @@ -For an unknown reason, there are hidden parameters in the Runtime that can be set. - -## AVC Properties -### Static -* FrameSize -* FrameRate -* ExtraData (Read-Only) -* Usage -* Profile<br/>Two new profiles are in the runtime, Constrained Base and Constrained High. -* Profile Level -* MaxOfLTRFrames -* ScanType -* QualityPreset - -### Dynamic -* RateControlMethod -* TargetBitrate -* PeakBitrate -* RateControlSkipFrameEnable -* MinQP -* MaxQP -* QPI -* QPP -* QPB -* VBVBufferSize -* VBVBufferFullness -* EnforceHRD -* MaxAUSize -* FillerDataEnable -* BPicturesDeltaQP -* ReferenceBPicturesDeltaQP -* HeaderInsertionSpacing -* IDRPeriod -* DeBlockingFilter -* IntraRefreshMBsNumberPerSlot -* SlicesPerFrame -* BPicturesPattern -* BReferenceEnable -* HalfPixel -* QuarterPixel - -### Unknown / New - -* **QualityEnhancementMode**<br/>So far always 0. -* **MaxNumRefFrames**<br/>Shouldn't this be a Capability instead? Could perhaps be used to control B-Pictures more. -* **MaxMBPerSec**<br/>Unknown value. -* **InstanceID** -* **EnableVBAQ**<br/>Unknown meaning. -* **RateControlPreanalysisEnable**<br/>Is this Two-Pass encoding? -* **GOPSize**<br/>Technically ignored, but still there in code. -* **AspectRatio** -* **NominalRange** -* **IntraRefreshNumOfStripes**<br/>New, was not here before. -* **SliceMode**<br/>New, was not here before. -* **MaxSliceSize**<br/>New, was not here before. -* **LowLatencyInternal** -* **CommonLowLatencyInternal** -* **SliceControlMode** -* **SliceControlSize** -* **CABACEnable**<br/>Not yet publicly available, but 16.10.3 always uses it anyway. -* **UniqueInstance** -* **EncoderMaxInstances** -* **MultiInstanceMode** -* **MultiInstanceCurrentQueue** -* **WaitForTask** - -23:23:47.388: [AMF Encoder] [CodecId] CodecId (Type: Int64, Index 0) -23:23:47.389: [AMF Encoder] Content Type: 0 -23:23:47.389: [AMF Encoder] Access: RW -23:23:47.389: [AMF Encoder] Values: -23:23:47.389: [AMF Encoder] Current: 5 -23:23:47.389: [AMF Encoder] Default: 5 -23:23:47.389: [AMF Encoder] Minimum: Empty -23:23:47.389: [AMF Encoder] Maximum: Empty -23:23:47.389: [AMF Encoder] Enumeration: -23:23:47.391: [AMF Encoder] H264 (5) -23:23:47.391: [AMF Encoder] UNKNOWN (0) -23:23:47.391: [AMF Encoder] H264SVC (8) -23:23:47.391: [AMF Encoder] UNKNOWN (0) -23:23:47.392: [AMF Encoder] [EngineType] EngineType (Type: Int64, Index 1) -23:23:47.392: [AMF Encoder] Content Type: 0 -23:23:47.392: [AMF Encoder] Access: RW -23:23:47.392: [AMF Encoder] Values: -23:23:47.393: [AMF Encoder] Current: 0 -23:23:47.393: [AMF Encoder] Default: 0 -23:23:47.393: [AMF Encoder] Minimum: Empty -23:23:47.393: [AMF Encoder] Maximum: Empty -23:23:47.393: [AMF Encoder] Enumeration: -23:23:47.393: [AMF Encoder] Auto (0) -23:23:47.394: [AMF Encoder] DX9 (1) -23:23:47.394: [AMF Encoder] DX11 (2) -23:23:47.395: [AMF Encoder] XVBA (3) -23:23:47.395: [AMF Encoder] [Usage] Usage (Type: Int64, Index 2) -23:23:47.395: [AMF Encoder] Content Type: 0 -23:23:47.395: [AMF Encoder] Access: RW -23:23:47.395: [AMF Encoder] Values: -23:23:47.395: [AMF Encoder] Current: 0 -23:23:47.396: [AMF Encoder] Default: 0 -23:23:47.396: [AMF Encoder] Minimum: Empty -23:23:47.396: [AMF Encoder] Maximum: Empty -23:23:47.397: [AMF Encoder] Enumeration: -23:23:47.397: [AMF Encoder] Transcoding (0) -23:23:47.397: [AMF Encoder] Ultra Low Latency (1) -23:23:47.397: [AMF Encoder] Low Latency (2) -23:23:47.397: [AMF Encoder] Webcam (3) -23:23:47.398: [AMF Encoder] [FrameSize] Width (Type: Size, Index 3) -23:23:47.398: [AMF Encoder] Content Type: 0 -23:23:47.398: [AMF Encoder] Access: RWX -23:23:47.398: [AMF Encoder] Values: -23:23:47.398: [AMF Encoder] Current: 1920x1080 -23:23:47.398: [AMF Encoder] Default: 1920x1080 -23:23:47.398: [AMF Encoder] Minimum: 64x64 -23:23:47.398: [AMF Encoder] Maximum: 4096x2160 -23:23:47.399: [AMF Encoder] [Profile] Profile (Type: Int64, Index 4) -23:23:47.399: [AMF Encoder] Content Type: 0 -23:23:47.399: [AMF Encoder] Access: RWX -23:23:47.400: [AMF Encoder] Values: -23:23:47.400: [AMF Encoder] Current: 77 -23:23:47.400: [AMF Encoder] Default: 77 -23:23:47.401: [AMF Encoder] Minimum: Empty -23:23:47.401: [AMF Encoder] Maximum: Empty -23:23:47.401: [AMF Encoder] Enumeration: -23:23:47.401: [AMF Encoder] Contrained Base (256) -23:23:47.401: [AMF Encoder] Baseline (66) -23:23:47.401: [AMF Encoder] Main (77) -23:23:47.401: [AMF Encoder] Contrained High (257) -23:23:47.402: [AMF Encoder] High (100) -23:23:47.402: [AMF Encoder] [ProfileLevel] Profile-Level (Type: Int64, Index 5) -23:23:47.402: [AMF Encoder] Content Type: 0 -23:23:47.402: [AMF Encoder] Access: RW -23:23:47.402: [AMF Encoder] Values: -23:23:47.402: [AMF Encoder] Current: 42 -23:23:47.402: [AMF Encoder] Default: 42 -23:23:47.402: [AMF Encoder] Minimum: Empty -23:23:47.403: [AMF Encoder] Maximum: Empty -23:23:47.403: [AMF Encoder] Enumeration: -23:23:47.403: [AMF Encoder] 1 (10) -23:23:47.403: [AMF Encoder] 1.1 (11) -23:23:47.403: [AMF Encoder] 1.2 (12) -23:23:47.403: [AMF Encoder] 1.3 (13) -23:23:47.404: [AMF Encoder] 2 (20) -23:23:47.404: [AMF Encoder] 2.1 (21) -23:23:47.404: [AMF Encoder] 2.2 (22) -23:23:47.404: [AMF Encoder] 3 (30) -23:23:47.404: [AMF Encoder] 3.1 (31) -23:23:47.404: [AMF Encoder] 3.2 (32) -23:23:47.404: [AMF Encoder] 4 (40) -23:23:47.404: [AMF Encoder] 4.1 (41) -23:23:47.405: [AMF Encoder] 4.2 (42) -23:23:47.405: [AMF Encoder] 5.0 (50) -23:23:47.405: [AMF Encoder] 5.1 (51) -23:23:47.405: [AMF Encoder] 5.2 (52) -23:23:47.405: [AMF Encoder] [QualityEnhancementMode] Quality Enhancement Mode (Type: Int64, Index 6) -23:23:47.405: [AMF Encoder] Content Type: 0 -23:23:47.405: [AMF Encoder] Access: -23:23:47.405: [AMF Encoder] Values: -23:23:47.406: [AMF Encoder] Current: Empty -23:23:47.406: [AMF Encoder] Default: 0 -23:23:47.406: [AMF Encoder] Minimum: Empty -23:23:47.406: [AMF Encoder] Maximum: Empty -23:23:47.409: [AMF Encoder] Enumeration: -23:23:47.410: [AMF Encoder] Disable (0) -23:23:47.410: [AMF Encoder] CGS (1) -23:23:47.410: [AMF Encoder] CGS Rewrite (2) -23:23:47.411: [AMF Encoder] MGS (3) -23:23:47.411: [AMF Encoder] [MaxOfLTRFrames] Max Of LTR (Type: Int64, Index 7) -23:23:47.411: [AMF Encoder] Content Type: 0 -23:23:47.412: [AMF Encoder] Access: RWX -23:23:47.412: [AMF Encoder] Values: -23:23:47.412: [AMF Encoder] Current: 0 -23:23:47.412: [AMF Encoder] Default: 0 -23:23:47.413: [AMF Encoder] Minimum: 0 -23:23:47.414: [AMF Encoder] Maximum: 2 -23:23:47.415: [AMF Encoder] [MaxNumRefFrames] MaxNumRefFrames (Type: Int64, Index 8) -23:23:47.415: [AMF Encoder] Content Type: 0 -23:23:47.416: [AMF Encoder] Access: RWX -23:23:47.416: [AMF Encoder] Values: -23:23:47.417: [AMF Encoder] Current: 4 -23:23:47.418: [AMF Encoder] Default: 4 -23:23:47.418: [AMF Encoder] Minimum: 1 -23:23:47.419: [AMF Encoder] Maximum: 16 -23:23:47.419: [AMF Encoder] [ConstraintSetFlags] ConstraintSetFlags (Type: Int64, Index 9) -23:23:47.419: [AMF Encoder] Content Type: 0 -23:23:47.419: [AMF Encoder] Access: RW -23:23:47.420: [AMF Encoder] Values: -23:23:47.420: [AMF Encoder] Current: 0 -23:23:47.420: [AMF Encoder] Default: 0 -23:23:47.420: [AMF Encoder] Minimum: 0 -23:23:47.420: [AMF Encoder] Maximum: 255 -23:23:47.420: [AMF Encoder] [MaxMBPerSec] MaxMBPerSec (Type: Int64, Index 10) -23:23:47.421: [AMF Encoder] Content Type: 0 -23:23:47.421: [AMF Encoder] Access: R -23:23:47.421: [AMF Encoder] Values: -23:23:47.421: [AMF Encoder] Current: 638704 -23:23:47.421: [AMF Encoder] Default: 638704 -23:23:47.421: [AMF Encoder] Minimum: 0 -23:23:47.421: [AMF Encoder] Maximum: 2147483647 -23:23:47.421: [AMF Encoder] [InstanceID] InstanceID (Type: Int64, Index 11) -23:23:47.421: [AMF Encoder] Content Type: 0 -23:23:47.422: [AMF Encoder] Access: RW -23:23:47.422: [AMF Encoder] Values: -23:23:47.422: [AMF Encoder] Current: -1 -23:23:47.422: [AMF Encoder] Default: -1 -23:23:47.422: [AMF Encoder] Minimum: -1 -23:23:47.422: [AMF Encoder] Maximum: 15 -23:23:47.422: [AMF Encoder] [TargetBitrate] Bitrate (Type: Int64, Index 12) -23:23:47.422: [AMF Encoder] Content Type: 0 -23:23:47.423: [AMF Encoder] Access: RWX -23:23:47.423: [AMF Encoder] Values: -23:23:47.423: [AMF Encoder] Current: 20000000 -23:23:47.423: [AMF Encoder] Default: 20000000 -23:23:47.423: [AMF Encoder] Minimum: 10000 -23:23:47.423: [AMF Encoder] Maximum: 100000000 -23:23:47.423: [AMF Encoder] [PeakBitrate] Peak Bitrate (Type: Int64, Index 13) -23:23:47.423: [AMF Encoder] Content Type: 0 -23:23:47.424: [AMF Encoder] Access: RWX -23:23:47.424: [AMF Encoder] Values: -23:23:47.424: [AMF Encoder] Current: 20000000 -23:23:47.424: [AMF Encoder] Default: 20000000 -23:23:47.424: [AMF Encoder] Minimum: 10000 -23:23:47.424: [AMF Encoder] Maximum: 100000000 -23:23:47.424: [AMF Encoder] [RateControlMethod] Rate Control Method (Type: Int64, Index 14) -23:23:47.424: [AMF Encoder] Content Type: 0 -23:23:47.424: [AMF Encoder] Access: RWX -23:23:47.425: [AMF Encoder] Values: -23:23:47.425: [AMF Encoder] Current: 2 -23:23:47.425: [AMF Encoder] Default: 2 -23:23:47.425: [AMF Encoder] Minimum: Empty -23:23:47.425: [AMF Encoder] Maximum: Empty -23:23:47.425: [AMF Encoder] Enumeration: -23:23:47.425: [AMF Encoder] Constant QP (0) -23:23:47.425: [AMF Encoder] CBR (1) -23:23:47.425: [AMF Encoder] Peak constrained VBR (2) -23:23:47.425: [AMF Encoder] Latency constrained VBR (3) -23:23:47.425: [AMF Encoder] [EanbleVBAQ] Eanble VBAQ (Type: Boolean, Index 15) -23:23:47.426: [AMF Encoder] Content Type: 0 -23:23:47.426: [AMF Encoder] Access: RWX -23:23:47.426: [AMF Encoder] Values: -23:23:47.426: [AMF Encoder] Current: false -23:23:47.426: [AMF Encoder] Default: false -23:23:47.426: [AMF Encoder] Minimum: Empty -23:23:47.426: [AMF Encoder] Maximum: Empty -23:23:47.426: [AMF Encoder] [RateControlPreanalysisEnable] Rate Control Preanalysis Enable (Type: Boolean, Index 16) -23:23:47.427: [AMF Encoder] Content Type: 0 -23:23:47.427: [AMF Encoder] Access: RWX -23:23:47.427: [AMF Encoder] Values: -23:23:47.427: [AMF Encoder] Current: false -23:23:47.427: [AMF Encoder] Default: false -23:23:47.427: [AMF Encoder] Minimum: Empty -23:23:47.427: [AMF Encoder] Maximum: Empty -23:23:47.428: [AMF Encoder] [RateControlSkipFrameEnable] Rate Control Based Frame Skip (Type: Boolean, Index 17) -23:23:47.428: [AMF Encoder] Content Type: 0 -23:23:47.428: [AMF Encoder] Access: RWX -23:23:47.428: [AMF Encoder] Values: -23:23:47.428: [AMF Encoder] Current: false -23:23:47.429: [AMF Encoder] Default: false -23:23:47.429: [AMF Encoder] Minimum: Empty -23:23:47.429: [AMF Encoder] Maximum: Empty -23:23:47.429: [AMF Encoder] [MinQP] Min QP (Type: Int64, Index 18) -23:23:47.429: [AMF Encoder] Content Type: 0 -23:23:47.429: [AMF Encoder] Access: RWX -23:23:47.430: [AMF Encoder] Values: -23:23:47.430: [AMF Encoder] Current: 18 -23:23:47.430: [AMF Encoder] Default: 18 -23:23:47.430: [AMF Encoder] Minimum: 0 -23:23:47.430: [AMF Encoder] Maximum: 51 -23:23:47.430: [AMF Encoder] [MaxQP] Max QP (Type: Int64, Index 19) -23:23:47.430: [AMF Encoder] Content Type: 0 -23:23:47.430: [AMF Encoder] Access: RWX -23:23:47.430: [AMF Encoder] Values: -23:23:47.431: [AMF Encoder] Current: 51 -23:23:47.431: [AMF Encoder] Default: 51 -23:23:47.431: [AMF Encoder] Minimum: 0 -23:23:47.431: [AMF Encoder] Maximum: 51 -23:23:47.431: [AMF Encoder] [QPI] QP I (Type: Int64, Index 20) -23:23:47.431: [AMF Encoder] Content Type: 0 -23:23:47.431: [AMF Encoder] Access: RWX -23:23:47.431: [AMF Encoder] Values: -23:23:47.431: [AMF Encoder] Current: 22 -23:23:47.431: [AMF Encoder] Default: 22 -23:23:47.432: [AMF Encoder] Minimum: 0 -23:23:47.432: [AMF Encoder] Maximum: 51 -23:23:47.432: [AMF Encoder] [QPP] QP P (Type: Int64, Index 21) -23:23:47.432: [AMF Encoder] Content Type: 0 -23:23:47.432: [AMF Encoder] Access: RWX -23:23:47.432: [AMF Encoder] Values: -23:23:47.432: [AMF Encoder] Current: 22 -23:23:47.432: [AMF Encoder] Default: 22 -23:23:47.432: [AMF Encoder] Minimum: 0 -23:23:47.433: [AMF Encoder] Maximum: 51 -23:23:47.433: [AMF Encoder] [QPB] QP B (Type: Int64, Index 22) -23:23:47.433: [AMF Encoder] Content Type: 0 -23:23:47.433: [AMF Encoder] Access: RWX -23:23:47.433: [AMF Encoder] Values: -23:23:47.433: [AMF Encoder] Current: 22 -23:23:47.433: [AMF Encoder] Default: 22 -23:23:47.433: [AMF Encoder] Minimum: 0 -23:23:47.433: [AMF Encoder] Maximum: 51 -23:23:47.434: [AMF Encoder] [GOPSize] GOP Size (Type: Int64, Index 23) -23:23:47.434: [AMF Encoder] Content Type: 0 -23:23:47.434: [AMF Encoder] Access: RWX -23:23:47.434: [AMF Encoder] Values: -23:23:47.434: [AMF Encoder] Current: 0 -23:23:47.434: [AMF Encoder] Default: 0 -23:23:47.434: [AMF Encoder] Minimum: 0 -23:23:47.434: [AMF Encoder] Maximum: 2147483647 -23:23:47.434: [AMF Encoder] [FrameRate] Frame Rate (Type: Rate, Index 24) -23:23:47.435: [AMF Encoder] Content Type: 0 -23:23:47.435: [AMF Encoder] Access: RWX -23:23:47.435: [AMF Encoder] Values: -23:23:47.435: [AMF Encoder] Current: 30/1 -23:23:47.435: [AMF Encoder] Default: 30/1 -23:23:47.435: [AMF Encoder] Minimum: Empty -23:23:47.435: [AMF Encoder] Maximum: Empty -23:23:47.435: [AMF Encoder] [AspectRatio] AspectRatio (Type: Rate, Index 25) -23:23:47.435: [AMF Encoder] Content Type: 0 -23:23:47.436: [AMF Encoder] Access: RWX -23:23:47.436: [AMF Encoder] Values: -23:23:47.436: [AMF Encoder] Current: 1/1 -23:23:47.436: [AMF Encoder] Default: 1/1 -23:23:47.436: [AMF Encoder] Minimum: Empty -23:23:47.436: [AMF Encoder] Maximum: Empty -23:23:47.436: [AMF Encoder] [NominalRange] NominalRange (Type: Boolean, Index 26) -23:23:47.436: [AMF Encoder] Content Type: 0 -23:23:47.436: [AMF Encoder] Access: RWX -23:23:47.436: [AMF Encoder] Values: -23:23:47.437: [AMF Encoder] Current: false -23:23:47.437: [AMF Encoder] Default: false -23:23:47.437: [AMF Encoder] Minimum: Empty -23:23:47.438: [AMF Encoder] Maximum: Empty -23:23:47.438: [AMF Encoder] [VBVBufferSize] VBV Buffer Size (Type: Int64, Index 27) -23:23:47.438: [AMF Encoder] Content Type: 0 -23:23:47.438: [AMF Encoder] Access: RWX -23:23:47.438: [AMF Encoder] Values: -23:23:47.438: [AMF Encoder] Current: 20000000 -23:23:47.438: [AMF Encoder] Default: 20000000 -23:23:47.439: [AMF Encoder] Minimum: 1000 -23:23:47.439: [AMF Encoder] Maximum: 100000000 -23:23:47.439: [AMF Encoder] [InitialVBVBufferFullness] Initial VBV Buffer Fullness (Type: Int64, Index 28) -23:23:47.439: [AMF Encoder] Content Type: 0 -23:23:47.439: [AMF Encoder] Access: RWX -23:23:47.439: [AMF Encoder] Values: -23:23:47.440: [AMF Encoder] Current: 64 -23:23:47.440: [AMF Encoder] Default: 64 -23:23:47.440: [AMF Encoder] Minimum: 0 -23:23:47.440: [AMF Encoder] Maximum: 64 -23:23:47.440: [AMF Encoder] [EnforceHRD] Enforce HRD (Type: Boolean, Index 29) -23:23:47.440: [AMF Encoder] Content Type: 0 -23:23:47.440: [AMF Encoder] Access: RWX -23:23:47.440: [AMF Encoder] Values: -23:23:47.441: [AMF Encoder] Current: false -23:23:47.441: [AMF Encoder] Default: false -23:23:47.441: [AMF Encoder] Minimum: Empty -23:23:47.441: [AMF Encoder] Maximum: Empty -23:23:47.441: [AMF Encoder] [MaxAUSize] Max AU Size (Type: Int64, Index 30) -23:23:47.441: [AMF Encoder] Content Type: 0 -23:23:47.441: [AMF Encoder] Access: RWX -23:23:47.441: [AMF Encoder] Values: -23:23:47.441: [AMF Encoder] Current: 0 -23:23:47.441: [AMF Encoder] Default: 0 -23:23:47.442: [AMF Encoder] Minimum: 0 -23:23:47.442: [AMF Encoder] Maximum: 100000000 -23:23:47.442: [AMF Encoder] [FillerDataEnable] Filler Data Enable (Type: Boolean, Index 31) -23:23:47.442: [AMF Encoder] Content Type: 0 -23:23:47.442: [AMF Encoder] Access: RWX -23:23:47.442: [AMF Encoder] Values: -23:23:47.442: [AMF Encoder] Current: false -23:23:47.442: [AMF Encoder] Default: false -23:23:47.442: [AMF Encoder] Minimum: Empty -23:23:47.442: [AMF Encoder] Maximum: Empty -23:23:47.443: [AMF Encoder] [BPicturesDeltaQP] B-picture Delta (Type: Int64, Index 32) -23:23:47.443: [AMF Encoder] Content Type: 0 -23:23:47.443: [AMF Encoder] Access: RWX -23:23:47.443: [AMF Encoder] Values: -23:23:47.443: [AMF Encoder] Current: 4 -23:23:47.443: [AMF Encoder] Default: 4 -23:23:47.443: [AMF Encoder] Minimum: -10 -23:23:47.443: [AMF Encoder] Maximum: 10 -23:23:47.443: [AMF Encoder] [ReferenceBPicturesDeltaQP] Reference B-picture Delta (Type: Int64, Index 33) -23:23:47.443: [AMF Encoder] Content Type: 0 -23:23:47.444: [AMF Encoder] Access: RWX -23:23:47.444: [AMF Encoder] Values: -23:23:47.444: [AMF Encoder] Current: 2 -23:23:47.444: [AMF Encoder] Default: 2 -23:23:47.444: [AMF Encoder] Minimum: -10 -23:23:47.444: [AMF Encoder] Maximum: 10 -23:23:47.444: [AMF Encoder] [HeaderInsertionSpacing] Header Insertion Spacing (Type: Int64, Index 34) -23:23:47.444: [AMF Encoder] Content Type: 0 -23:23:47.445: [AMF Encoder] Access: RWX -23:23:47.445: [AMF Encoder] Values: -23:23:47.445: [AMF Encoder] Current: 0 -23:23:47.445: [AMF Encoder] Default: 0 -23:23:47.445: [AMF Encoder] Minimum: 0 -23:23:47.445: [AMF Encoder] Maximum: 2147483647 -23:23:47.445: [AMF Encoder] [IDRPeriod] IDR Period (Type: Int64, Index 35) -23:23:47.445: [AMF Encoder] Content Type: 0 -23:23:47.446: [AMF Encoder] Access: RWX -23:23:47.446: [AMF Encoder] Values: -23:23:47.446: [AMF Encoder] Current: 30 -23:23:47.446: [AMF Encoder] Default: 30 -23:23:47.446: [AMF Encoder] Minimum: 0 -23:23:47.446: [AMF Encoder] Maximum: 2147483647 -23:23:47.446: [AMF Encoder] [DeBlockingFilter] De-blocking Filter (Type: Boolean, Index 36) -23:23:47.446: [AMF Encoder] Content Type: 0 -23:23:47.446: [AMF Encoder] Access: RWX -23:23:47.447: [AMF Encoder] Values: -23:23:47.447: [AMF Encoder] Current: true -23:23:47.447: [AMF Encoder] Default: true -23:23:47.447: [AMF Encoder] Minimum: Empty -23:23:47.447: [AMF Encoder] Maximum: Empty -23:23:47.447: [AMF Encoder] [IntraRefreshMBsNumberPerSlot] Intra Refresh MBs Number Per Slot (Type: Int64, Index 37) -23:23:47.447: [AMF Encoder] Content Type: 0 -23:23:47.447: [AMF Encoder] Access: RWX -23:23:47.447: [AMF Encoder] Values: -23:23:47.448: [AMF Encoder] Current: 0 -23:23:47.448: [AMF Encoder] Default: 0 -23:23:47.448: [AMF Encoder] Minimum: 0 -23:23:47.448: [AMF Encoder] Maximum: 8160 -23:23:47.448: [AMF Encoder] [IntraRefreshNumOfStripes] IntraRefreshNumOfStripes (Type: Int64, Index 38) -23:23:47.448: [AMF Encoder] Content Type: 0 -23:23:47.448: [AMF Encoder] Access: RWX -23:23:47.448: [AMF Encoder] Values: -23:23:47.448: [AMF Encoder] Current: 0 -23:23:47.448: [AMF Encoder] Default: 0 -23:23:47.448: [AMF Encoder] Minimum: 0 -23:23:47.449: [AMF Encoder] Maximum: 2147483647 -23:23:47.449: [AMF Encoder] [SliceMode] Slice Mode (Type: Int64, Index 39) -23:23:47.449: [AMF Encoder] Content Type: 0 -23:23:47.449: [AMF Encoder] Access: RWX -23:23:47.449: [AMF Encoder] Values: -23:23:47.449: [AMF Encoder] Current: 1 -23:23:47.449: [AMF Encoder] Default: 1 -23:23:47.450: [AMF Encoder] Minimum: 1 -23:23:47.450: [AMF Encoder] Maximum: 2 -23:23:47.450: [AMF Encoder] [SlicesPerFrame] Slices Per Frame (Type: Int64, Index 40) -23:23:47.450: [AMF Encoder] Content Type: 0 -23:23:47.450: [AMF Encoder] Access: RWX -23:23:47.450: [AMF Encoder] Values: -23:23:47.450: [AMF Encoder] Current: 1 -23:23:47.450: [AMF Encoder] Default: 1 -23:23:47.451: [AMF Encoder] Minimum: 1 -23:23:47.451: [AMF Encoder] Maximum: 8160 -23:23:47.451: [AMF Encoder] [MaxSliceSize] Max Slice Size (Type: Int64, Index 41) -23:23:47.451: [AMF Encoder] Content Type: 0 -23:23:47.451: [AMF Encoder] Access: RWX -23:23:47.451: [AMF Encoder] Values: -23:23:47.451: [AMF Encoder] Current: 2147483647 -23:23:47.451: [AMF Encoder] Default: 2147483647 -23:23:47.452: [AMF Encoder] Minimum: 1 -23:23:47.452: [AMF Encoder] Maximum: 2147483647 -23:23:47.452: [AMF Encoder] [BPicturesPattern] B-picture Pattern (Type: Int64, Index 42) -23:23:47.452: [AMF Encoder] Content Type: 0 -23:23:47.452: [AMF Encoder] Access: RWX -23:23:47.452: [AMF Encoder] Values: -23:23:47.452: [AMF Encoder] Current: 3 -23:23:47.452: [AMF Encoder] Default: 3 -23:23:47.453: [AMF Encoder] Minimum: 0 -23:23:47.453: [AMF Encoder] Maximum: 3 -23:23:47.454: [AMF Encoder] [BReferenceEnable] Enable B Refrence (Type: Boolean, Index 43) -23:23:47.454: [AMF Encoder] Content Type: 0 -23:23:47.454: [AMF Encoder] Access: RWX -23:23:47.454: [AMF Encoder] Values: -23:23:47.454: [AMF Encoder] Current: true -23:23:47.454: [AMF Encoder] Default: true -23:23:47.454: [AMF Encoder] Minimum: Empty -23:23:47.454: [AMF Encoder] Maximum: Empty -23:23:47.454: [AMF Encoder] [LowLatencyInternal] LowLatencyInternal (Type: Boolean, Index 44) -23:23:47.454: [AMF Encoder] Content Type: 0 -23:23:47.454: [AMF Encoder] Access: RWX -23:23:47.455: [AMF Encoder] Values: -23:23:47.455: [AMF Encoder] Current: false -23:23:47.455: [AMF Encoder] Default: false -23:23:47.455: [AMF Encoder] Minimum: Empty -23:23:47.455: [AMF Encoder] Maximum: Empty -23:23:47.455: [AMF Encoder] [CommonLowLatencyInternal] CommonLowLatencyInternal (Type: Boolean, Index 45) -23:23:47.455: [AMF Encoder] Content Type: 0 -23:23:47.455: [AMF Encoder] Access: RWX -23:23:47.455: [AMF Encoder] Values: -23:23:47.455: [AMF Encoder] Current: false -23:23:47.456: [AMF Encoder] Default: false -23:23:47.456: [AMF Encoder] Minimum: Empty -23:23:47.456: [AMF Encoder] Maximum: Empty -23:23:47.456: [AMF Encoder] [EnableGOPAlignment] EnableGOPAlignment (Type: Boolean, Index 46) -23:23:47.456: [AMF Encoder] Content Type: 0 -23:23:47.456: [AMF Encoder] Access: RWX -23:23:47.456: [AMF Encoder] Values: -23:23:47.456: [AMF Encoder] Current: true -23:23:47.457: [AMF Encoder] Default: true -23:23:47.457: [AMF Encoder] Minimum: Empty -23:23:47.457: [AMF Encoder] Maximum: Empty -23:23:47.457: [AMF Encoder] [SliceControlMode] SliceControlMode (Type: Int64, Index 47) -23:23:47.457: [AMF Encoder] Content Type: 0 -23:23:47.457: [AMF Encoder] Access: RWX -23:23:47.457: [AMF Encoder] Values: -23:23:47.457: [AMF Encoder] Current: 0 -23:23:47.457: [AMF Encoder] Default: 0 -23:23:47.457: [AMF Encoder] Minimum: 0 -23:23:47.457: [AMF Encoder] Maximum: 3 -23:23:47.458: [AMF Encoder] [SliceControlSize] SliceControlSize (Type: Int64, Index 48) -23:23:47.458: [AMF Encoder] Content Type: 0 -23:23:47.458: [AMF Encoder] Access: RWX -23:23:47.458: [AMF Encoder] Values: -23:23:47.458: [AMF Encoder] Current: 0 -23:23:47.458: [AMF Encoder] Default: 0 -23:23:47.458: [AMF Encoder] Minimum: 0 -23:23:47.458: [AMF Encoder] Maximum: 2147483647 -23:23:47.458: [AMF Encoder] [CABACEnable] CABACEnable (Type: Int64, Index 49) -23:23:47.458: [AMF Encoder] Content Type: 0 -23:23:47.459: [AMF Encoder] Access: RWX -23:23:47.459: [AMF Encoder] Values: -23:23:47.459: [AMF Encoder] Current: 0 -23:23:47.459: [AMF Encoder] Default: 0 -23:23:47.459: [AMF Encoder] Minimum: Empty -23:23:47.459: [AMF Encoder] Maximum: Empty -23:23:47.459: [AMF Encoder] Enumeration: -23:23:47.459: [AMF Encoder] Undefined (0) -23:23:47.460: [AMF Encoder] Cabac (1) -23:23:47.460: [AMF Encoder] Calv (2) -23:23:47.460: [AMF Encoder] [ScanType] Scan Type (Type: Int64, Index 50) -23:23:47.460: [AMF Encoder] Content Type: 0 -23:23:47.460: [AMF Encoder] Access: RWX -23:23:47.460: [AMF Encoder] Values: -23:23:47.460: [AMF Encoder] Current: 0 -23:23:47.460: [AMF Encoder] Default: 0 -23:23:47.460: [AMF Encoder] Minimum: Empty -23:23:47.461: [AMF Encoder] Maximum: Empty -23:23:47.461: [AMF Encoder] Enumeration: -23:23:47.461: [AMF Encoder] Progressive (0) -23:23:47.461: [AMF Encoder] Interlaced (1) -23:23:47.461: [AMF Encoder] [QualityPreset] Quality Preset (Type: Int64, Index 51) -23:23:47.461: [AMF Encoder] Content Type: 0 -23:23:47.461: [AMF Encoder] Access: RWX -23:23:47.461: [AMF Encoder] Values: -23:23:47.461: [AMF Encoder] Current: 0 -23:23:47.461: [AMF Encoder] Default: 0 -23:23:47.461: [AMF Encoder] Minimum: Empty -23:23:47.462: [AMF Encoder] Maximum: Empty -23:23:47.462: [AMF Encoder] Enumeration: -23:23:47.462: [AMF Encoder] Balanced (0) -23:23:47.462: [AMF Encoder] Speed (1) -23:23:47.462: [AMF Encoder] Quality (2) -23:23:47.462: [AMF Encoder] [HalfPixel] Half Pixel (Type: Boolean, Index 52) -23:23:47.462: [AMF Encoder] Content Type: 0 -23:23:47.462: [AMF Encoder] Access: RWX -23:23:47.462: [AMF Encoder] Values: -23:23:47.462: [AMF Encoder] Current: true -23:23:47.463: [AMF Encoder] Default: true -23:23:47.463: [AMF Encoder] Minimum: Empty -23:23:47.463: [AMF Encoder] Maximum: Empty -23:23:47.463: [AMF Encoder] [QuarterPixel] Quarter Pixel (Type: Boolean, Index 53) -23:23:47.463: [AMF Encoder] Content Type: 0 -23:23:47.463: [AMF Encoder] Access: RWX -23:23:47.463: [AMF Encoder] Values: -23:23:47.463: [AMF Encoder] Current: true -23:23:47.463: [AMF Encoder] Default: true -23:23:47.464: [AMF Encoder] Minimum: Empty -23:23:47.464: [AMF Encoder] Maximum: Empty -23:23:47.464: [AMF Encoder] [ExtraData] ExtraData (Type: Interface, Index 54) -23:23:47.464: [AMF Encoder] Content Type: 0 -23:23:47.464: [AMF Encoder] Access: RWX -23:23:47.464: [AMF Encoder] Values: -23:23:47.465: [AMF Encoder] -23:23:47.465: [AMF Encoder] Default: Empty -23:23:47.465: [AMF Encoder] Minimum: Empty -23:23:47.465: [AMF Encoder] Maximum: '' -23:23:47.465: [AMF Encoder] [UniqueInstance] Unique Instance (Type: Int64, Index 55) -23:23:47.466: [AMF Encoder] Content Type: 0 -23:23:47.466: [AMF Encoder] Access: RWX -23:23:47.466: [AMF Encoder] Values: -23:23:47.466: [AMF Encoder] Current: 0 -23:23:47.466: [AMF Encoder] Default: 0 -23:23:47.466: [AMF Encoder] Minimum: 0 -23:23:47.466: [AMF Encoder] Maximum: 2147483647 -23:23:47.466: [AMF Encoder] [EncoderMaxInstances] EncoderMaxInstances (Type: Int64, Index 56) -23:23:47.466: [AMF Encoder] Content Type: 0 -23:23:47.466: [AMF Encoder] Access: RWX -23:23:47.467: [AMF Encoder] Values: -23:23:47.467: [AMF Encoder] Current: 1 -23:23:47.467: [AMF Encoder] Default: 1 -23:23:47.467: [AMF Encoder] Minimum: 1 -23:23:47.467: [AMF Encoder] Maximum: 2 -23:23:47.467: [AMF Encoder] [MultiInstanceMode] MultiInstanceMode (Type: Boolean, Index 57) -23:23:47.467: [AMF Encoder] Content Type: 0 -23:23:47.467: [AMF Encoder] Access: RWX -23:23:47.467: [AMF Encoder] Values: -23:23:47.467: [AMF Encoder] Current: false -23:23:47.467: [AMF Encoder] Default: false -23:23:47.468: [AMF Encoder] Minimum: Empty -23:23:47.468: [AMF Encoder] Maximum: Empty -23:23:47.468: [AMF Encoder] [MultiInstanceCurrentQueue] MultiInstanceCurrentQueue (Type: Int64, Index 58) -23:23:47.468: [AMF Encoder] Content Type: 0 -23:23:47.468: [AMF Encoder] Access: RWX -23:23:47.468: [AMF Encoder] Values: -23:23:47.468: [AMF Encoder] Current: 0 -23:23:47.468: [AMF Encoder] Default: 0 -23:23:47.468: [AMF Encoder] Minimum: 0 -23:23:47.468: [AMF Encoder] Maximum: 1 -23:23:47.468: [AMF Encoder] [WaitForTask] WaitForTask (Type: Boolean, Index 59) -23:23:47.469: [AMF Encoder] Content Type: 0 -23:23:47.469: [AMF Encoder] Access: RWX -23:23:47.469: [AMF Encoder] Values: -23:23:47.469: [AMF Encoder] Current: false -23:23:47.469: [AMF Encoder] Default: false -23:23:47.469: [AMF Encoder] Minimum: Empty -23:23:47.470: [AMF Encoder] Maximum: Empty -23:23:47.470: [AMF Encoder] [TL0.QL0.BPicturesDeltaQP] TL0.QL0 B-picture Delta (Type: Int64, Index 60) -23:23:47.470: [AMF Encoder] Content Type: 0 -23:23:47.470: [AMF Encoder] Access: -23:23:47.470: [AMF Encoder] Values: -23:23:47.470: [AMF Encoder] Current: Empty -23:23:47.470: [AMF Encoder] Default: 4 -23:23:47.470: [AMF Encoder] Minimum: -10 -23:23:47.471: [AMF Encoder] Maximum: 10 -23:23:47.471: [AMF Encoder] [TL1.QL0.BPicturesDeltaQP] TL1.QL0 B-picture Delta (Type: Int64, Index 61) -23:23:47.471: [AMF Encoder] Content Type: 0 -23:23:47.471: [AMF Encoder] Access: -23:23:47.471: [AMF Encoder] Values: -23:23:47.471: [AMF Encoder] Current: Empty -23:23:47.471: [AMF Encoder] Default: 4 -23:23:47.471: [AMF Encoder] Minimum: -10 -23:23:47.471: [AMF Encoder] Maximum: 10 -23:23:47.472: [AMF Encoder] [TL2.QL0.BPicturesDeltaQP] TL2.QL0 B-picture Delta (Type: Int64, Index 62) -23:23:47.472: [AMF Encoder] Content Type: 0 -23:23:47.472: [AMF Encoder] Access: -23:23:47.472: [AMF Encoder] Values: -23:23:47.472: [AMF Encoder] Current: Empty -23:23:47.472: [AMF Encoder] Default: 4 -23:23:47.473: [AMF Encoder] Minimum: -10 -23:23:47.473: [AMF Encoder] Maximum: 10 -23:23:47.473: [AMF Encoder] [TL3.QL0.BPicturesDeltaQP] TL3.QL0 B-picture Delta (Type: Int64, Index 63) -23:23:47.474: [AMF Encoder] Content Type: 0 -23:23:47.474: [AMF Encoder] Access: -23:23:47.474: [AMF Encoder] Values: -23:23:47.474: [AMF Encoder] Current: Empty -23:23:47.474: [AMF Encoder] Default: 4 -23:23:47.475: [AMF Encoder] Minimum: -10 -23:23:47.475: [AMF Encoder] Maximum: 10 -23:23:47.475: [AMF Encoder] [TL0.QL0.EanbleVBAQ] TL0.QL0 Eanble VBAQ (Type: Boolean, Index 64) -23:23:47.475: [AMF Encoder] Content Type: 0 -23:23:47.475: [AMF Encoder] Access: -23:23:47.475: [AMF Encoder] Values: -23:23:47.475: [AMF Encoder] Current: Empty -23:23:47.475: [AMF Encoder] Default: false -23:23:47.475: [AMF Encoder] Minimum: Empty -23:23:47.476: [AMF Encoder] Maximum: Empty -23:23:47.476: [AMF Encoder] [TL1.QL0.EanbleVBAQ] TL1.QL0 Eanble VBAQ (Type: Boolean, Index 65) -23:23:47.476: [AMF Encoder] Content Type: 0 -23:23:47.476: [AMF Encoder] Access: -23:23:47.476: [AMF Encoder] Values: -23:23:47.476: [AMF Encoder] Current: Empty -23:23:47.476: [AMF Encoder] Default: false -23:23:47.476: [AMF Encoder] Minimum: Empty -23:23:47.476: [AMF Encoder] Maximum: Empty -23:23:47.477: [AMF Encoder] [TL2.QL0.EanbleVBAQ] TL2.QL0 Eanble VBAQ (Type: Boolean, Index 66) -23:23:47.477: [AMF Encoder] Content Type: 0 -23:23:47.477: [AMF Encoder] Access: -23:23:47.477: [AMF Encoder] Values: -23:23:47.477: [AMF Encoder] Current: Empty -23:23:47.477: [AMF Encoder] Default: false -23:23:47.477: [AMF Encoder] Minimum: Empty -23:23:47.477: [AMF Encoder] Maximum: Empty -23:23:47.477: [AMF Encoder] [TL3.QL0.EanbleVBAQ] TL3.QL0 Eanble VBAQ (Type: Boolean, Index 67) -23:23:47.477: [AMF Encoder] Content Type: 0 -23:23:47.477: [AMF Encoder] Access: -23:23:47.477: [AMF Encoder] Values: -23:23:47.477: [AMF Encoder] Current: Empty -23:23:47.478: [AMF Encoder] Default: false -23:23:47.478: [AMF Encoder] Minimum: Empty -23:23:47.478: [AMF Encoder] Maximum: Empty -23:23:47.478: [AMF Encoder] [TL0.QL0.EnforceHRD] TL0.QL0 Enforce HRD (Type: Boolean, Index 68) -23:23:47.478: [AMF Encoder] Content Type: 0 -23:23:47.478: [AMF Encoder] Access: -23:23:47.478: [AMF Encoder] Values: -23:23:47.478: [AMF Encoder] Current: Empty -23:23:47.478: [AMF Encoder] Default: true -23:23:47.478: [AMF Encoder] Minimum: Empty -23:23:47.478: [AMF Encoder] Maximum: Empty -23:23:47.478: [AMF Encoder] [TL1.QL0.EnforceHRD] TL1.QL0 Enforce HRD (Type: Boolean, Index 69) -23:23:47.479: [AMF Encoder] Content Type: 0 -23:23:47.479: [AMF Encoder] Access: -23:23:47.479: [AMF Encoder] Values: -23:23:47.479: [AMF Encoder] Current: Empty -23:23:47.479: [AMF Encoder] Default: true -23:23:47.479: [AMF Encoder] Minimum: Empty -23:23:47.479: [AMF Encoder] Maximum: Empty -23:23:47.479: [AMF Encoder] [TL2.QL0.EnforceHRD] TL2.QL0 Enforce HRD (Type: Boolean, Index 70) -23:23:47.479: [AMF Encoder] Content Type: 0 -23:23:47.479: [AMF Encoder] Access: -23:23:47.479: [AMF Encoder] Values: -23:23:47.479: [AMF Encoder] Current: Empty -23:23:47.480: [AMF Encoder] Default: true -23:23:47.480: [AMF Encoder] Minimum: Empty -23:23:47.480: [AMF Encoder] Maximum: Empty -23:23:47.480: [AMF Encoder] [TL3.QL0.EnforceHRD] TL3.QL0 Enforce HRD (Type: Boolean, Index 71) -23:23:47.480: [AMF Encoder] Content Type: 0 -23:23:47.480: [AMF Encoder] Access: -23:23:47.480: [AMF Encoder] Values: -23:23:47.480: [AMF Encoder] Current: Empty -23:23:47.480: [AMF Encoder] Default: true -23:23:47.480: [AMF Encoder] Minimum: Empty -23:23:47.480: [AMF Encoder] Maximum: Empty -23:23:47.481: [AMF Encoder] [TL0.QL0.FillerDataEnable] TL0.QL0 Filler Data Enable (Type: Boolean, Index 72) -23:23:47.481: [AMF Encoder] Content Type: 0 -23:23:47.481: [AMF Encoder] Access: -23:23:47.481: [AMF Encoder] Values: -23:23:47.481: [AMF Encoder] Current: Empty -23:23:47.481: [AMF Encoder] Default: false -23:23:47.481: [AMF Encoder] Minimum: Empty -23:23:47.481: [AMF Encoder] Maximum: Empty -23:23:47.481: [AMF Encoder] [TL1.QL0.FillerDataEnable] TL1.QL0 Filler Data Enable (Type: Boolean, Index 73) -23:23:47.481: [AMF Encoder] Content Type: 0 -23:23:47.481: [AMF Encoder] Access: -23:23:47.481: [AMF Encoder] Values: -23:23:47.482: [AMF Encoder] Current: Empty -23:23:47.482: [AMF Encoder] Default: false -23:23:47.482: [AMF Encoder] Minimum: Empty -23:23:47.482: [AMF Encoder] Maximum: Empty -23:23:47.482: [AMF Encoder] [TL2.QL0.FillerDataEnable] TL2.QL0 Filler Data Enable (Type: Boolean, Index 74) -23:23:47.482: [AMF Encoder] Content Type: 0 -23:23:47.482: [AMF Encoder] Access: -23:23:47.482: [AMF Encoder] Values: -23:23:47.482: [AMF Encoder] Current: Empty -23:23:47.482: [AMF Encoder] Default: false -23:23:47.482: [AMF Encoder] Minimum: Empty -23:23:47.483: [AMF Encoder] Maximum: Empty -23:23:47.483: [AMF Encoder] [TL3.QL0.FillerDataEnable] TL3.QL0 Filler Data Enable (Type: Boolean, Index 75) -23:23:47.483: [AMF Encoder] Content Type: 0 -23:23:47.483: [AMF Encoder] Access: -23:23:47.483: [AMF Encoder] Values: -23:23:47.483: [AMF Encoder] Current: Empty -23:23:47.483: [AMF Encoder] Default: false -23:23:47.483: [AMF Encoder] Minimum: Empty -23:23:47.483: [AMF Encoder] Maximum: Empty -23:23:47.483: [AMF Encoder] [TL0.QL0.FrameRate] TL0.QL0 Frame Rate (Type: Rate, Index 76) -23:23:47.483: [AMF Encoder] Content Type: 0 -23:23:47.484: [AMF Encoder] Access: -23:23:47.484: [AMF Encoder] Values: -23:23:47.484: [AMF Encoder] Current: Empty -23:23:47.484: [AMF Encoder] Default: 30/1 -23:23:47.484: [AMF Encoder] Minimum: Empty -23:23:47.484: [AMF Encoder] Maximum: Empty -23:23:47.484: [AMF Encoder] [TL1.QL0.FrameRate] TL1.QL0 Frame Rate (Type: Rate, Index 77) -23:23:47.485: [AMF Encoder] Content Type: 0 -23:23:47.485: [AMF Encoder] Access: -23:23:47.485: [AMF Encoder] Values: -23:23:47.485: [AMF Encoder] Current: Empty -23:23:47.485: [AMF Encoder] Default: 30/1 -23:23:47.485: [AMF Encoder] Minimum: Empty -23:23:47.485: [AMF Encoder] Maximum: Empty -23:23:47.485: [AMF Encoder] [TL2.QL0.FrameRate] TL2.QL0 Frame Rate (Type: Rate, Index 78) -23:23:47.485: [AMF Encoder] Content Type: 0 -23:23:47.485: [AMF Encoder] Access: -23:23:47.485: [AMF Encoder] Values: -23:23:47.485: [AMF Encoder] Current: Empty -23:23:47.486: [AMF Encoder] Default: 30/1 -23:23:47.486: [AMF Encoder] Minimum: Empty -23:23:47.486: [AMF Encoder] Maximum: Empty -23:23:47.486: [AMF Encoder] [TL3.QL0.FrameRate] TL3.QL0 Frame Rate (Type: Rate, Index 79) -23:23:47.486: [AMF Encoder] Content Type: 0 -23:23:47.486: [AMF Encoder] Access: -23:23:47.486: [AMF Encoder] Values: -23:23:47.486: [AMF Encoder] Current: Empty -23:23:47.486: [AMF Encoder] Default: 30/1 -23:23:47.486: [AMF Encoder] Minimum: Empty -23:23:47.486: [AMF Encoder] Maximum: Empty -23:23:47.486: [AMF Encoder] [TL0.QL0.GOPSize] TL0.QL0 GOP Size (Type: Int64, Index 80) -23:23:47.487: [AMF Encoder] Content Type: 0 -23:23:47.487: [AMF Encoder] Access: -23:23:47.487: [AMF Encoder] Values: -23:23:47.487: [AMF Encoder] Current: Empty -23:23:47.487: [AMF Encoder] Default: 0 -23:23:47.487: [AMF Encoder] Minimum: 0 -23:23:47.487: [AMF Encoder] Maximum: 2147483647 -23:23:47.487: [AMF Encoder] [TL1.QL0.GOPSize] TL1.QL0 GOP Size (Type: Int64, Index 81) -23:23:47.487: [AMF Encoder] Content Type: 0 -23:23:47.487: [AMF Encoder] Access: -23:23:47.487: [AMF Encoder] Values: -23:23:47.487: [AMF Encoder] Current: Empty -23:23:47.488: [AMF Encoder] Default: 0 -23:23:47.488: [AMF Encoder] Minimum: 0 -23:23:47.488: [AMF Encoder] Maximum: 2147483647 -23:23:47.488: [AMF Encoder] [TL2.QL0.GOPSize] TL2.QL0 GOP Size (Type: Int64, Index 82) -23:23:47.488: [AMF Encoder] Content Type: 0 -23:23:47.488: [AMF Encoder] Access: -23:23:47.488: [AMF Encoder] Values: -23:23:47.488: [AMF Encoder] Current: Empty -23:23:47.488: [AMF Encoder] Default: 0 -23:23:47.488: [AMF Encoder] Minimum: 0 -23:23:47.488: [AMF Encoder] Maximum: 2147483647 -23:23:47.488: [AMF Encoder] [TL3.QL0.GOPSize] TL3.QL0 GOP Size (Type: Int64, Index 83) -23:23:47.489: [AMF Encoder] Content Type: 0 -23:23:47.489: [AMF Encoder] Access: -23:23:47.489: [AMF Encoder] Values: -23:23:47.489: [AMF Encoder] Current: Empty -23:23:47.489: [AMF Encoder] Default: 0 -23:23:47.489: [AMF Encoder] Minimum: 0 -23:23:47.489: [AMF Encoder] Maximum: 2147483647 -23:23:47.489: [AMF Encoder] [TL0.QL0.InitialVBVBufferFullness] TL0.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 84) -23:23:47.489: [AMF Encoder] Content Type: 0 -23:23:47.489: [AMF Encoder] Access: -23:23:47.489: [AMF Encoder] Values: -23:23:47.489: [AMF Encoder] Current: Empty -23:23:47.489: [AMF Encoder] Default: 64 -23:23:47.490: [AMF Encoder] Minimum: 0 -23:23:47.490: [AMF Encoder] Maximum: 64 -23:23:47.490: [AMF Encoder] [TL1.QL0.InitialVBVBufferFullness] TL1.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 85) -23:23:47.490: [AMF Encoder] Content Type: 0 -23:23:47.490: [AMF Encoder] Access: -23:23:47.490: [AMF Encoder] Values: -23:23:47.490: [AMF Encoder] Current: Empty -23:23:47.490: [AMF Encoder] Default: 64 -23:23:47.490: [AMF Encoder] Minimum: 0 -23:23:47.490: [AMF Encoder] Maximum: 64 -23:23:47.490: [AMF Encoder] [TL2.QL0.InitialVBVBufferFullness] TL2.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 86) -23:23:47.490: [AMF Encoder] Content Type: 0 -23:23:47.491: [AMF Encoder] Access: -23:23:47.491: [AMF Encoder] Values: -23:23:47.491: [AMF Encoder] Current: Empty -23:23:47.491: [AMF Encoder] Default: 64 -23:23:47.491: [AMF Encoder] Minimum: 0 -23:23:47.491: [AMF Encoder] Maximum: 64 -23:23:47.491: [AMF Encoder] [TL3.QL0.InitialVBVBufferFullness] TL3.QL0 Initial VBV Buffer Fullness (Type: Int64, Index 87) -23:23:47.491: [AMF Encoder] Content Type: 0 -23:23:47.491: [AMF Encoder] Access: -23:23:47.491: [AMF Encoder] Values: -23:23:47.491: [AMF Encoder] Current: Empty -23:23:47.491: [AMF Encoder] Default: 64 -23:23:47.492: [AMF Encoder] Minimum: 0 -23:23:47.492: [AMF Encoder] Maximum: 64 -23:23:47.492: [AMF Encoder] [TL0.QL0.MaxAUSize] TL0.QL0 Max AU Size (Type: Int64, Index 88) -23:23:47.492: [AMF Encoder] Content Type: 0 -23:23:47.492: [AMF Encoder] Access: -23:23:47.492: [AMF Encoder] Values: -23:23:47.492: [AMF Encoder] Current: Empty -23:23:47.492: [AMF Encoder] Default: 0 -23:23:47.492: [AMF Encoder] Minimum: 0 -23:23:47.492: [AMF Encoder] Maximum: 100000000 -23:23:47.492: [AMF Encoder] [TL1.QL0.MaxAUSize] TL1.QL0 Max AU Size (Type: Int64, Index 89) -23:23:47.492: [AMF Encoder] Content Type: 0 -23:23:47.493: [AMF Encoder] Access: -23:23:47.493: [AMF Encoder] Values: -23:23:47.493: [AMF Encoder] Current: Empty -23:23:47.493: [AMF Encoder] Default: 0 -23:23:47.493: [AMF Encoder] Minimum: 0 -23:23:47.493: [AMF Encoder] Maximum: 100000000 -23:23:47.493: [AMF Encoder] [TL2.QL0.MaxAUSize] TL2.QL0 Max AU Size (Type: Int64, Index 90) -23:23:47.493: [AMF Encoder] Content Type: 0 -23:23:47.494: [AMF Encoder] Access: -23:23:47.494: [AMF Encoder] Values: -23:23:47.494: [AMF Encoder] Current: Empty -23:23:47.494: [AMF Encoder] Default: 0 -23:23:47.494: [AMF Encoder] Minimum: 0 -23:23:47.494: [AMF Encoder] Maximum: 100000000 -23:23:47.494: [AMF Encoder] [TL3.QL0.MaxAUSize] TL3.QL0 Max AU Size (Type: Int64, Index 91) -23:23:47.494: [AMF Encoder] Content Type: 0 -23:23:47.494: [AMF Encoder] Access: -23:23:47.494: [AMF Encoder] Values: -23:23:47.494: [AMF Encoder] Current: Empty -23:23:47.495: [AMF Encoder] Default: 0 -23:23:47.495: [AMF Encoder] Minimum: 0 -23:23:47.495: [AMF Encoder] Maximum: 100000000 -23:23:47.495: [AMF Encoder] [TL0.QL0.MaxQP] TL0.QL0 Max QP (Type: Int64, Index 92) -23:23:47.495: [AMF Encoder] Content Type: 0 -23:23:47.495: [AMF Encoder] Access: -23:23:47.495: [AMF Encoder] Values: -23:23:47.495: [AMF Encoder] Current: Empty -23:23:47.495: [AMF Encoder] Default: 51 -23:23:47.495: [AMF Encoder] Minimum: 0 -23:23:47.495: [AMF Encoder] Maximum: 51 -23:23:47.496: [AMF Encoder] [TL1.QL0.MaxQP] TL1.QL0 Max QP (Type: Int64, Index 93) -23:23:47.496: [AMF Encoder] Content Type: 0 -23:23:47.496: [AMF Encoder] Access: -23:23:47.496: [AMF Encoder] Values: -23:23:47.496: [AMF Encoder] Current: Empty -23:23:47.496: [AMF Encoder] Default: 51 -23:23:47.496: [AMF Encoder] Minimum: 0 -23:23:47.496: [AMF Encoder] Maximum: 51 -23:23:47.496: [AMF Encoder] [TL2.QL0.MaxQP] TL2.QL0 Max QP (Type: Int64, Index 94) -23:23:47.496: [AMF Encoder] Content Type: 0 -23:23:47.496: [AMF Encoder] Access: -23:23:47.496: [AMF Encoder] Values: -23:23:47.496: [AMF Encoder] Current: Empty -23:23:47.497: [AMF Encoder] Default: 51 -23:23:47.497: [AMF Encoder] Minimum: 0 -23:23:47.497: [AMF Encoder] Maximum: 51 -23:23:47.497: [AMF Encoder] [TL3.QL0.MaxQP] TL3.QL0 Max QP (Type: Int64, Index 95) -23:23:47.497: [AMF Encoder] Content Type: 0 -23:23:47.497: [AMF Encoder] Access: -23:23:47.497: [AMF Encoder] Values: -23:23:47.497: [AMF Encoder] Current: Empty -23:23:47.497: [AMF Encoder] Default: 51 -23:23:47.497: [AMF Encoder] Minimum: 0 -23:23:47.497: [AMF Encoder] Maximum: 51 -23:23:47.497: [AMF Encoder] [TL0.QL0.MinQP] TL0.QL0 Min QP (Type: Int64, Index 96) -23:23:47.497: [AMF Encoder] Content Type: 0 -23:23:47.498: [AMF Encoder] Access: -23:23:47.498: [AMF Encoder] Values: -23:23:47.498: [AMF Encoder] Current: Empty -23:23:47.498: [AMF Encoder] Default: 22 -23:23:47.498: [AMF Encoder] Minimum: 0 -23:23:47.498: [AMF Encoder] Maximum: 51 -23:23:47.498: [AMF Encoder] [TL1.QL0.MinQP] TL1.QL0 Min QP (Type: Int64, Index 97) -23:23:47.498: [AMF Encoder] Content Type: 0 -23:23:47.498: [AMF Encoder] Access: -23:23:47.498: [AMF Encoder] Values: -23:23:47.498: [AMF Encoder] Current: Empty -23:23:47.498: [AMF Encoder] Default: 22 -23:23:47.499: [AMF Encoder] Minimum: 0 -23:23:47.499: [AMF Encoder] Maximum: 51 -23:23:47.499: [AMF Encoder] [TL2.QL0.MinQP] TL2.QL0 Min QP (Type: Int64, Index 98) -23:23:47.499: [AMF Encoder] Content Type: 0 -23:23:47.499: [AMF Encoder] Access: -23:23:47.499: [AMF Encoder] Values: -23:23:47.499: [AMF Encoder] Current: Empty -23:23:47.499: [AMF Encoder] Default: 22 -23:23:47.499: [AMF Encoder] Minimum: 0 -23:23:47.499: [AMF Encoder] Maximum: 51 -23:23:47.499: [AMF Encoder] [TL3.QL0.MinQP] TL3.QL0 Min QP (Type: Int64, Index 99) -23:23:47.500: [AMF Encoder] Content Type: 0 -23:23:47.500: [AMF Encoder] Access: -23:23:47.500: [AMF Encoder] Values: -23:23:47.500: [AMF Encoder] Current: Empty -23:23:47.500: [AMF Encoder] Default: 22 -23:23:47.500: [AMF Encoder] Minimum: 0 -23:23:47.500: [AMF Encoder] Maximum: 51 -23:23:47.500: [AMF Encoder] [TL0.QL0.PeakBitrate] TL0.QL0 Peak Bitrate (Type: Int64, Index 100) -23:23:47.500: [AMF Encoder] Content Type: 0 -23:23:47.500: [AMF Encoder] Access: -23:23:47.501: [AMF Encoder] Values: -23:23:47.501: [AMF Encoder] Current: Empty -23:23:47.501: [AMF Encoder] Default: 10000000 -23:23:47.501: [AMF Encoder] Minimum: 10000 -23:23:47.501: [AMF Encoder] Maximum: 100000000 -23:23:47.501: [AMF Encoder] [TL1.QL0.PeakBitrate] TL1.QL0 Peak Bitrate (Type: Int64, Index 101) -23:23:47.501: [AMF Encoder] Content Type: 0 -23:23:47.501: [AMF Encoder] Access: -23:23:47.501: [AMF Encoder] Values: -23:23:47.501: [AMF Encoder] Current: Empty -23:23:47.502: [AMF Encoder] Default: 10000000 -23:23:47.502: [AMF Encoder] Minimum: 10000 -23:23:47.502: [AMF Encoder] Maximum: 100000000 -23:23:47.502: [AMF Encoder] [TL2.QL0.PeakBitrate] TL2.QL0 Peak Bitrate (Type: Int64, Index 102) -23:23:47.502: [AMF Encoder] Content Type: 0 -23:23:47.502: [AMF Encoder] Access: -23:23:47.502: [AMF Encoder] Values: -23:23:47.502: [AMF Encoder] Current: Empty -23:23:47.502: [AMF Encoder] Default: 10000000 -23:23:47.502: [AMF Encoder] Minimum: 10000 -23:23:47.502: [AMF Encoder] Maximum: 100000000 -23:23:47.502: [AMF Encoder] [TL3.QL0.PeakBitrate] TL3.QL0 Peak Bitrate (Type: Int64, Index 103) -23:23:47.502: [AMF Encoder] Content Type: 0 -23:23:47.503: [AMF Encoder] Access: -23:23:47.503: [AMF Encoder] Values: -23:23:47.503: [AMF Encoder] Current: Empty -23:23:47.503: [AMF Encoder] Default: 10000000 -23:23:47.503: [AMF Encoder] Minimum: 10000 -23:23:47.503: [AMF Encoder] Maximum: 100000000 -23:23:47.503: [AMF Encoder] [TL0.QL0.QPB] TL0.QL0 QP B (Type: Int64, Index 104) -23:23:47.503: [AMF Encoder] Content Type: 0 -23:23:47.503: [AMF Encoder] Access: -23:23:47.503: [AMF Encoder] Values: -23:23:47.503: [AMF Encoder] Current: Empty -23:23:47.503: [AMF Encoder] Default: 22 -23:23:47.504: [AMF Encoder] Minimum: 0 -23:23:47.504: [AMF Encoder] Maximum: 51 -23:23:47.504: [AMF Encoder] [TL1.QL0.QPB] TL1.QL0 QP B (Type: Int64, Index 105) -23:23:47.504: [AMF Encoder] Content Type: 0 -23:23:47.504: [AMF Encoder] Access: -23:23:47.504: [AMF Encoder] Values: -23:23:47.504: [AMF Encoder] Current: Empty -23:23:47.504: [AMF Encoder] Default: 22 -23:23:47.504: [AMF Encoder] Minimum: 0 -23:23:47.504: [AMF Encoder] Maximum: 51 -23:23:47.504: [AMF Encoder] [TL2.QL0.QPB] TL2.QL0 QP B (Type: Int64, Index 106) -23:23:47.504: [AMF Encoder] Content Type: 0 -23:23:47.504: [AMF Encoder] Access: -23:23:47.504: [AMF Encoder] Values: -23:23:47.505: [AMF Encoder] Current: Empty -23:23:47.505: [AMF Encoder] Default: 22 -23:23:47.505: [AMF Encoder] Minimum: 0 -23:23:47.505: [AMF Encoder] Maximum: 51 -23:23:47.505: [AMF Encoder] [TL3.QL0.QPB] TL3.QL0 QP B (Type: Int64, Index 107) -23:23:47.505: [AMF Encoder] Content Type: 0 -23:23:47.505: [AMF Encoder] Access: -23:23:47.505: [AMF Encoder] Values: -23:23:47.505: [AMF Encoder] Current: Empty -23:23:47.505: [AMF Encoder] Default: 22 -23:23:47.505: [AMF Encoder] Minimum: 0 -23:23:47.505: [AMF Encoder] Maximum: 51 -23:23:47.505: [AMF Encoder] [TL0.QL0.QPI] TL0.QL0 QP I (Type: Int64, Index 108) -23:23:47.506: [AMF Encoder] Content Type: 0 -23:23:47.506: [AMF Encoder] Access: -23:23:47.506: [AMF Encoder] Values: -23:23:47.506: [AMF Encoder] Current: Empty -23:23:47.506: [AMF Encoder] Default: 22 -23:23:47.506: [AMF Encoder] Minimum: 0 -23:23:47.506: [AMF Encoder] Maximum: 51 -23:23:47.506: [AMF Encoder] [TL1.QL0.QPI] TL1.QL0 QP I (Type: Int64, Index 109) -23:23:47.506: [AMF Encoder] Content Type: 0 -23:23:47.506: [AMF Encoder] Access: -23:23:47.506: [AMF Encoder] Values: -23:23:47.506: [AMF Encoder] Current: Empty -23:23:47.506: [AMF Encoder] Default: 22 -23:23:47.507: [AMF Encoder] Minimum: 0 -23:23:47.507: [AMF Encoder] Maximum: 51 -23:23:47.507: [AMF Encoder] [TL2.QL0.QPI] TL2.QL0 QP I (Type: Int64, Index 110) -23:23:47.507: [AMF Encoder] Content Type: 0 -23:23:47.507: [AMF Encoder] Access: -23:23:47.507: [AMF Encoder] Values: -23:23:47.507: [AMF Encoder] Current: Empty -23:23:47.507: [AMF Encoder] Default: 22 -23:23:47.507: [AMF Encoder] Minimum: 0 -23:23:47.507: [AMF Encoder] Maximum: 51 -23:23:47.507: [AMF Encoder] [TL3.QL0.QPI] TL3.QL0 QP I (Type: Int64, Index 111) -23:23:47.507: [AMF Encoder] Content Type: 0 -23:23:47.507: [AMF Encoder] Access: -23:23:47.507: [AMF Encoder] Values: -23:23:47.508: [AMF Encoder] Current: Empty -23:23:47.508: [AMF Encoder] Default: 22 -23:23:47.508: [AMF Encoder] Minimum: 0 -23:23:47.508: [AMF Encoder] Maximum: 51 -23:23:47.508: [AMF Encoder] [TL0.QL0.QPP] TL0.QL0 QP P (Type: Int64, Index 112) -23:23:47.508: [AMF Encoder] Content Type: 0 -23:23:47.508: [AMF Encoder] Access: -23:23:47.508: [AMF Encoder] Values: -23:23:47.508: [AMF Encoder] Current: Empty -23:23:47.508: [AMF Encoder] Default: 22 -23:23:47.508: [AMF Encoder] Minimum: 0 -23:23:47.508: [AMF Encoder] Maximum: 51 -23:23:47.508: [AMF Encoder] [TL1.QL0.QPP] TL1.QL0 QP P (Type: Int64, Index 113) -23:23:47.509: [AMF Encoder] Content Type: 0 -23:23:47.509: [AMF Encoder] Access: -23:23:47.509: [AMF Encoder] Values: -23:23:47.509: [AMF Encoder] Current: Empty -23:23:47.509: [AMF Encoder] Default: 22 -23:23:47.509: [AMF Encoder] Minimum: 0 -23:23:47.509: [AMF Encoder] Maximum: 51 -23:23:47.509: [AMF Encoder] [TL2.QL0.QPP] TL2.QL0 QP P (Type: Int64, Index 114) -23:23:47.509: [AMF Encoder] Content Type: 0 -23:23:47.509: [AMF Encoder] Access: -23:23:47.509: [AMF Encoder] Values: -23:23:47.509: [AMF Encoder] Current: Empty -23:23:47.509: [AMF Encoder] Default: 22 -23:23:47.509: [AMF Encoder] Minimum: 0 -23:23:47.509: [AMF Encoder] Maximum: 51 -23:23:47.510: [AMF Encoder] [TL3.QL0.QPP] TL3.QL0 QP P (Type: Int64, Index 115) -23:23:47.510: [AMF Encoder] Content Type: 0 -23:23:47.510: [AMF Encoder] Access: -23:23:47.510: [AMF Encoder] Values: -23:23:47.510: [AMF Encoder] Current: Empty -23:23:47.510: [AMF Encoder] Default: 22 -23:23:47.510: [AMF Encoder] Minimum: 0 -23:23:47.510: [AMF Encoder] Maximum: 51 -23:23:47.510: [AMF Encoder] [TL0.QL0.RateControlMethod] TL0.QL0 Rate Control Method (Type: Int64, Index 116) -23:23:47.510: [AMF Encoder] Content Type: 0 -23:23:47.510: [AMF Encoder] Access: -23:23:47.510: [AMF Encoder] Values: -23:23:47.510: [AMF Encoder] Current: Empty -23:23:47.510: [AMF Encoder] Default: 2 -23:23:47.511: [AMF Encoder] Minimum: Empty -23:23:47.511: [AMF Encoder] Maximum: Empty -23:23:47.511: [AMF Encoder] Enumeration: -23:23:47.511: [AMF Encoder] Constant QP (0) -23:23:47.511: [AMF Encoder] CBR (1) -23:23:47.511: [AMF Encoder] Peak constrained VBR (2) -23:23:47.511: [AMF Encoder] Latency constrained VBR (3) -23:23:47.511: [AMF Encoder] [TL1.QL0.RateControlMethod] TL1.QL0 Rate Control Method (Type: Int64, Index 117) -23:23:47.511: [AMF Encoder] Content Type: 0 -23:23:47.511: [AMF Encoder] Access: -23:23:47.511: [AMF Encoder] Values: -23:23:47.511: [AMF Encoder] Current: Empty -23:23:47.511: [AMF Encoder] Default: 2 -23:23:47.511: [AMF Encoder] Minimum: Empty -23:23:47.512: [AMF Encoder] Maximum: Empty -23:23:47.512: [AMF Encoder] Enumeration: -23:23:47.512: [AMF Encoder] Constant QP (0) -23:23:47.512: [AMF Encoder] CBR (1) -23:23:47.512: [AMF Encoder] Peak constrained VBR (2) -23:23:47.512: [AMF Encoder] Latency constrained VBR (3) -23:23:47.512: [AMF Encoder] [TL2.QL0.RateControlMethod] TL2.QL0 Rate Control Method (Type: Int64, Index 118) -23:23:47.512: [AMF Encoder] Content Type: 0 -23:23:47.512: [AMF Encoder] Access: -23:23:47.512: [AMF Encoder] Values: -23:23:47.512: [AMF Encoder] Current: Empty -23:23:47.512: [AMF Encoder] Default: 2 -23:23:47.512: [AMF Encoder] Minimum: Empty -23:23:47.513: [AMF Encoder] Maximum: Empty -23:23:47.513: [AMF Encoder] Enumeration: -23:23:47.513: [AMF Encoder] Constant QP (0) -23:23:47.513: [AMF Encoder] CBR (1) -23:23:47.513: [AMF Encoder] Peak constrained VBR (2) -23:23:47.513: [AMF Encoder] Latency constrained VBR (3) -23:23:47.513: [AMF Encoder] [TL3.QL0.RateControlMethod] TL3.QL0 Rate Control Method (Type: Int64, Index 119) -23:23:47.513: [AMF Encoder] Content Type: 0 -23:23:47.513: [AMF Encoder] Access: -23:23:47.513: [AMF Encoder] Values: -23:23:47.513: [AMF Encoder] Current: Empty -23:23:47.513: [AMF Encoder] Default: 2 -23:23:47.513: [AMF Encoder] Minimum: Empty -23:23:47.513: [AMF Encoder] Maximum: Empty -23:23:47.514: [AMF Encoder] Enumeration: -23:23:47.514: [AMF Encoder] Constant QP (0) -23:23:47.514: [AMF Encoder] CBR (1) -23:23:47.514: [AMF Encoder] Peak constrained VBR (2) -23:23:47.514: [AMF Encoder] Latency constrained VBR (3) -23:23:47.514: [AMF Encoder] [TL0.QL0.RateControlPreanalysisEnable] TL0.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 120) -23:23:47.514: [AMF Encoder] Content Type: 0 -23:23:47.514: [AMF Encoder] Access: -23:23:47.514: [AMF Encoder] Values: -23:23:47.514: [AMF Encoder] Current: Empty -23:23:47.514: [AMF Encoder] Default: false -23:23:47.514: [AMF Encoder] Minimum: Empty -23:23:47.514: [AMF Encoder] Maximum: Empty -23:23:47.514: [AMF Encoder] [TL1.QL0.RateControlPreanalysisEnable] TL1.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 121) -23:23:47.515: [AMF Encoder] Content Type: 0 -23:23:47.515: [AMF Encoder] Access: -23:23:47.515: [AMF Encoder] Values: -23:23:47.515: [AMF Encoder] Current: Empty -23:23:47.515: [AMF Encoder] Default: false -23:23:47.515: [AMF Encoder] Minimum: Empty -23:23:47.515: [AMF Encoder] Maximum: Empty -23:23:47.515: [AMF Encoder] [TL2.QL0.RateControlPreanalysisEnable] TL2.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 122) -23:23:47.515: [AMF Encoder] Content Type: 0 -23:23:47.515: [AMF Encoder] Access: -23:23:47.516: [AMF Encoder] Values: -23:23:47.516: [AMF Encoder] Current: Empty -23:23:47.516: [AMF Encoder] Default: false -23:23:47.516: [AMF Encoder] Minimum: Empty -23:23:47.516: [AMF Encoder] Maximum: Empty -23:23:47.516: [AMF Encoder] [TL3.QL0.RateControlPreanalysisEnable] TL3.QL0 Rate Control Preanalysis Enable (Type: Boolean, Index 123) -23:23:47.516: [AMF Encoder] Content Type: 0 -23:23:47.516: [AMF Encoder] Access: -23:23:47.516: [AMF Encoder] Values: -23:23:47.517: [AMF Encoder] Current: Empty -23:23:47.517: [AMF Encoder] Default: false -23:23:47.517: [AMF Encoder] Minimum: Empty -23:23:47.517: [AMF Encoder] Maximum: Empty -23:23:47.517: [AMF Encoder] [TL0.QL0.RateControlSkipFrameEnable] TL0.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 124) -23:23:47.517: [AMF Encoder] Content Type: 0 -23:23:47.517: [AMF Encoder] Access: -23:23:47.517: [AMF Encoder] Values: -23:23:47.517: [AMF Encoder] Current: Empty -23:23:47.517: [AMF Encoder] Default: true -23:23:47.517: [AMF Encoder] Minimum: Empty -23:23:47.517: [AMF Encoder] Maximum: Empty -23:23:47.517: [AMF Encoder] [TL1.QL0.RateControlSkipFrameEnable] TL1.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 125) -23:23:47.518: [AMF Encoder] Content Type: 0 -23:23:47.518: [AMF Encoder] Access: -23:23:47.518: [AMF Encoder] Values: -23:23:47.518: [AMF Encoder] Current: Empty -23:23:47.518: [AMF Encoder] Default: true -23:23:47.518: [AMF Encoder] Minimum: Empty -23:23:47.518: [AMF Encoder] Maximum: Empty -23:23:47.518: [AMF Encoder] [TL2.QL0.RateControlSkipFrameEnable] TL2.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 126) -23:23:47.518: [AMF Encoder] Content Type: 0 -23:23:47.518: [AMF Encoder] Access: -23:23:47.518: [AMF Encoder] Values: -23:23:47.518: [AMF Encoder] Current: Empty -23:23:47.518: [AMF Encoder] Default: true -23:23:47.518: [AMF Encoder] Minimum: Empty -23:23:47.519: [AMF Encoder] Maximum: Empty -23:23:47.519: [AMF Encoder] [TL3.QL0.RateControlSkipFrameEnable] TL3.QL0 Rate Control Based Frame Skip (Type: Boolean, Index 127) -23:23:47.519: [AMF Encoder] Content Type: 0 -23:23:47.519: [AMF Encoder] Access: -23:23:47.519: [AMF Encoder] Values: -23:23:47.519: [AMF Encoder] Current: Empty -23:23:47.519: [AMF Encoder] Default: true -23:23:47.519: [AMF Encoder] Minimum: Empty -23:23:47.519: [AMF Encoder] Maximum: Empty -23:23:47.519: [AMF Encoder] [TL0.QL0.ReferenceBPicturesDeltaQP] TL0.QL0 Reference B-picture Delta (Type: Int64, Index 128) -23:23:47.519: [AMF Encoder] Content Type: 0 -23:23:47.519: [AMF Encoder] Access: -23:23:47.520: [AMF Encoder] Values: -23:23:47.520: [AMF Encoder] Current: Empty -23:23:47.520: [AMF Encoder] Default: 2 -23:23:47.520: [AMF Encoder] Minimum: -10 -23:23:47.520: [AMF Encoder] Maximum: 10 -23:23:47.520: [AMF Encoder] [TL1.QL0.ReferenceBPicturesDeltaQP] TL1.QL0 Reference B-picture Delta (Type: Int64, Index 129) -23:23:47.520: [AMF Encoder] Content Type: 0 -23:23:47.520: [AMF Encoder] Access: -23:23:47.520: [AMF Encoder] Values: -23:23:47.520: [AMF Encoder] Current: Empty -23:23:47.520: [AMF Encoder] Default: 2 -23:23:47.520: [AMF Encoder] Minimum: -10 -23:23:47.521: [AMF Encoder] Maximum: 10 -23:23:47.521: [AMF Encoder] [TL2.QL0.ReferenceBPicturesDeltaQP] TL2.QL0 Reference B-picture Delta (Type: Int64, Index 130) -23:23:47.521: [AMF Encoder] Content Type: 0 -23:23:47.521: [AMF Encoder] Access: -23:23:47.521: [AMF Encoder] Values: -23:23:47.521: [AMF Encoder] Current: Empty -23:23:47.521: [AMF Encoder] Default: 2 -23:23:47.521: [AMF Encoder] Minimum: -10 -23:23:47.521: [AMF Encoder] Maximum: 10 -23:23:47.521: [AMF Encoder] [TL3.QL0.ReferenceBPicturesDeltaQP] TL3.QL0 Reference B-picture Delta (Type: Int64, Index 131) -23:23:47.521: [AMF Encoder] Content Type: 0 -23:23:47.521: [AMF Encoder] Access: -23:23:47.522: [AMF Encoder] Values: -23:23:47.522: [AMF Encoder] Current: Empty -23:23:47.522: [AMF Encoder] Default: 2 -23:23:47.522: [AMF Encoder] Minimum: -10 -23:23:47.522: [AMF Encoder] Maximum: 10 -23:23:47.522: [AMF Encoder] [TL0.QL0.TargetBitrate] TL0.QL0 Bitrate (Type: Int64, Index 132) -23:23:47.522: [AMF Encoder] Content Type: 0 -23:23:47.522: [AMF Encoder] Access: -23:23:47.522: [AMF Encoder] Values: -23:23:47.522: [AMF Encoder] Current: Empty -23:23:47.522: [AMF Encoder] Default: 10000000 -23:23:47.522: [AMF Encoder] Minimum: 10000 -23:23:47.523: [AMF Encoder] Maximum: 100000000 -23:23:47.523: [AMF Encoder] [TL1.QL0.TargetBitrate] TL1.QL0 Bitrate (Type: Int64, Index 133) -23:23:47.523: [AMF Encoder] Content Type: 0 -23:23:47.523: [AMF Encoder] Access: -23:23:47.523: [AMF Encoder] Values: -23:23:47.523: [AMF Encoder] Current: Empty -23:23:47.523: [AMF Encoder] Default: 10000000 -23:23:47.523: [AMF Encoder] Minimum: 10000 -23:23:47.523: [AMF Encoder] Maximum: 100000000 -23:23:47.523: [AMF Encoder] [TL2.QL0.TargetBitrate] TL2.QL0 Bitrate (Type: Int64, Index 134) -23:23:47.523: [AMF Encoder] Content Type: 0 -23:23:47.523: [AMF Encoder] Access: -23:23:47.523: [AMF Encoder] Values: -23:23:47.524: [AMF Encoder] Current: Empty -23:23:47.524: [AMF Encoder] Default: 10000000 -23:23:47.524: [AMF Encoder] Minimum: 10000 -23:23:47.524: [AMF Encoder] Maximum: 100000000 -23:23:47.524: [AMF Encoder] [TL3.QL0.TargetBitrate] TL3.QL0 Bitrate (Type: Int64, Index 135) -23:23:47.524: [AMF Encoder] Content Type: 0 -23:23:47.524: [AMF Encoder] Access: -23:23:47.524: [AMF Encoder] Values: -23:23:47.524: [AMF Encoder] Current: Empty -23:23:47.524: [AMF Encoder] Default: 10000000 -23:23:47.524: [AMF Encoder] Minimum: 10000 -23:23:47.525: [AMF Encoder] Maximum: 100000000 -23:23:47.525: [AMF Encoder] [TL0.QL0.VBVBufferSize] TL0.QL0 VBV Buffer Size (Type: Int64, Index 136) -23:23:47.525: [AMF Encoder] Content Type: 0 -23:23:47.525: [AMF Encoder] Access: -23:23:47.525: [AMF Encoder] Values: -23:23:47.525: [AMF Encoder] Current: Empty -23:23:47.525: [AMF Encoder] Default: 1000000 -23:23:47.525: [AMF Encoder] Minimum: 1000 -23:23:47.525: [AMF Encoder] Maximum: 100000000 -23:23:47.525: [AMF Encoder] [TL1.QL0.VBVBufferSize] TL1.QL0 VBV Buffer Size (Type: Int64, Index 137) -23:23:47.525: [AMF Encoder] Content Type: 0 -23:23:47.525: [AMF Encoder] Access: -23:23:47.526: [AMF Encoder] Values: -23:23:47.526: [AMF Encoder] Current: Empty -23:23:47.526: [AMF Encoder] Default: 1000000 -23:23:47.526: [AMF Encoder] Minimum: 1000 -23:23:47.526: [AMF Encoder] Maximum: 100000000 -23:23:47.526: [AMF Encoder] [TL2.QL0.VBVBufferSize] TL2.QL0 VBV Buffer Size (Type: Int64, Index 138) -23:23:47.526: [AMF Encoder] Content Type: 0 -23:23:47.528: [AMF Encoder] Access: -23:23:47.529: [AMF Encoder] Values: -23:23:47.529: [AMF Encoder] Current: Empty -23:23:47.529: [AMF Encoder] Default: 1000000 -23:23:47.530: [AMF Encoder] Minimum: 1000 -23:23:47.530: [AMF Encoder] Maximum: 100000000 -23:23:47.530: [AMF Encoder] [TL3.QL0.VBVBufferSize] TL3.QL0 VBV Buffer Size (Type: Int64, Index 139) -23:23:47.530: [AMF Encoder] Content Type: 0 -23:23:47.530: [AMF Encoder] Access: -23:23:47.530: [AMF Encoder] Values: -23:23:47.530: [AMF Encoder] Current: Empty -23:23:47.530: [AMF Encoder] Default: 1000000 -23:23:47.530: [AMF Encoder] Minimum: 1000 -23:23:47.531: [AMF Encoder] Maximum: 100000000 -23:23:47.531: [AMF Encoder] [NumOfTemporalEnhancmentLayers] Num Of Temporal Enhancment Layers (Type: Int64, Index 140) -23:23:47.531: [AMF Encoder] Content Type: 0 -23:23:47.531: [AMF Encoder] Access: -23:23:47.531: [AMF Encoder] Values: -23:23:47.531: [AMF Encoder] Current: Empty -23:23:47.531: [AMF Encoder] Default: 0 -23:23:47.531: [AMF Encoder] Minimum: 0 -23:23:47.531: [AMF Encoder] Maximum: 3 -23:23:47.531: [AMF Encoder] [NumOfQualityLayers] Num Of Quality Layers (Type: Int64, Index 141) -23:23:47.531: [AMF Encoder] Content Type: 0 -23:23:47.532: [AMF Encoder] Access: -23:23:47.533: [AMF Encoder] Values: -23:23:47.533: [AMF Encoder] Current: Empty -23:23:47.533: [AMF Encoder] Default: 0 -23:23:47.534: [AMF Encoder] Minimum: 0 -23:23:47.534: [AMF Encoder] Maximum: 0 -23:23:47.534: [AMF Encoder] [MGSVectorMode] MGS Vector Mode (Type: Boolean, Index 142) -23:23:47.534: [AMF Encoder] Content Type: 0 -23:23:47.534: [AMF Encoder] Access: -23:23:47.534: [AMF Encoder] Values: -23:23:47.534: [AMF Encoder] Current: Empty -23:23:47.534: [AMF Encoder] Default: false -23:23:47.534: [AMF Encoder] Minimum: Empty -23:23:47.534: [AMF Encoder] Maximum: Empty -23:23:47.535: [AMF Encoder] [MGSVector0] MGS Vector 0 (Type: Int64, Index 143) -23:23:47.535: [AMF Encoder] Content Type: 0 -23:23:47.535: [AMF Encoder] Access: -23:23:47.535: [AMF Encoder] Values: -23:23:47.535: [AMF Encoder] Current: Empty -23:23:47.535: [AMF Encoder] Default: 0 -23:23:47.535: [AMF Encoder] Minimum: 0 -23:23:47.535: [AMF Encoder] Maximum: 16 -23:23:47.535: [AMF Encoder] [MGSVector1] MGS Vector 1 (Type: Int64, Index 144) -23:23:47.535: [AMF Encoder] Content Type: 0 -23:23:47.535: [AMF Encoder] Access: -23:23:47.536: [AMF Encoder] Values: -23:23:47.536: [AMF Encoder] Current: Empty -23:23:47.536: [AMF Encoder] Default: 0 -23:23:47.536: [AMF Encoder] Minimum: 0 -23:23:47.536: [AMF Encoder] Maximum: 16 -23:23:47.536: [AMF Encoder] [MGSVector2] MGS Vector 2 (Type: Int64, Index 145) -23:23:47.536: [AMF Encoder] Content Type: 0 -23:23:47.536: [AMF Encoder] Access: -23:23:47.536: [AMF Encoder] Values: -23:23:47.536: [AMF Encoder] Current: Empty -23:23:47.537: [AMF Encoder] Default: 0 -23:23:47.537: [AMF Encoder] Minimum: 0 -23:23:47.537: [AMF Encoder] Maximum: 16 -23:23:47.537: [AMF Encoder] [MGSVector3] MGS Vector 3 (Type: Int64, Index 146) -23:23:47.537: [AMF Encoder] Content Type: 0 -23:23:47.537: [AMF Encoder] Access: -23:23:47.537: [AMF Encoder] Values: -23:23:47.537: [AMF Encoder] Current: Empty -23:23:47.537: [AMF Encoder] Default: 0 -23:23:47.537: [AMF Encoder] Minimum: 0 -23:23:47.537: [AMF Encoder] Maximum: 16 -23:23:47.538: [AMF Encoder] [MGSKeyPicturePeriod] MGS Key Picture Period (Type: Int64, Index 147) -23:23:47.538: [AMF Encoder] Content Type: 0 -23:23:47.538: [AMF Encoder] Access: -23:23:47.538: [AMF Encoder] Values: -23:23:47.538: [AMF Encoder] Current: Empty -23:23:47.538: [AMF Encoder] Default: 0 -23:23:47.538: [AMF Encoder] Minimum: 0 -23:23:47.538: [AMF Encoder] Maximum: 1000 -
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/detect-amf
Deleted
-(directory)
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/detect-amf/CMakeLists.txt
Deleted
@@ -1,42 +0,0 @@ -project(detect-amf) - -set(detect-amf_HEADERS - ) - -set(detect-amf_SOURCES - ../amf.cpp - ../amf-capabilities.cpp - ../amf-encoder.cpp - ../amf-encoder-h264.cpp - ../amf-encoder-h265.cpp - ../api-base.cpp - ../api-d3d9.cpp - ../api-d3d11.cpp - ../utility.cpp - detect-amf-support.cpp - ) - -if(MSVC) - add_compile_options("$<$<CONFIG:RelWithDebInfo>:/MT>") -endif() - -add_definitions(-DPIPED_PROCESS) - -add_executable(detect-amf - ${detect-amf_SOURCES} - ${detect-amf_HEADERS}) - -target_link_libraries(detect-amf - ${enc-amf_LIBRARIES}) - -if(CMAKE_SIZEOF_VOID_P EQUAL 8) - set(_output_suffix "64") -else() - set(_output_suffix "32") -endif() - -set_target_properties(detect-amf - PROPERTIES - OUTPUT_NAME "detect-amf${_output_suffix}") - -install_obs_datatarget(detect-amf "obs-plugins/enc-amf")
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/detect-amf/detect-amf-support.cpp
Deleted
@@ -1,45 +0,0 @@ -/* - * Piped program that detects AMF support to prevent startup crashes - * Copyright (C) 2018 Hugh Bailey - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - */ - -#include "plugin.h" -#include "api-base.h" -#include "amf.h" -#include "amf-capabilities.h" -#include <sstream> - -int main(void) { - SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS); - - try { - // AMF - Plugin::AMD::AMF::Initialize(); - - // Initialize Graphics APIs - Plugin::API::InitializeAPIs(); - - Plugin::AMD::CapabilityManager::Initialize(); - } catch (...) { - return 2; - } - - Plugin::AMD::CapabilityManager::Finalize(); - Plugin::API::FinalizeAPIs(); - Plugin::AMD::AMF::Finalize(); - return 3; -}
View file
obs-studio-21.0.3.tar.xz/.gitmodules -> obs-studio-21.1.2.tar.xz/.gitmodules
Changed
@@ -6,7 +6,7 @@ url = https://github.com/palana/Syphon-Framework.git [submodule "plugins/enc-amf"] path = plugins/enc-amf - url = https://github.com/jp9000/obs-studio_amf-encoder-plugin.git + url = https://github.com/Xaymar/obs-studio_amf-encoder-plugin.git [submodule "plugins/obs-browser"] path = plugins/obs-browser url = https://github.com/kc5nra/obs-browser.git
View file
obs-studio-21.0.3.tar.xz/CI/before-script-osx.sh -> obs-studio-21.1.2.tar.xz/CI/before-script-osx.sh
Changed
@@ -1,6 +1,10 @@ # Make sure ccache is found export PATH=/usr/local/opt/ccache/libexec:$PATH +cd ./plugins/obs-browser +git checkout origin/osx +cd - + mkdir build cd build cmake -DENABLE_SPARKLE_UPDATER=ON \
View file
obs-studio-21.0.3.tar.xz/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/CMakeLists.txt
Changed
@@ -60,7 +60,7 @@ endif() # Disable pointless constant condition warnings - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127 /wd4201") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /wd4127 /wd4201 /wd4456 /wd4457 /wd4458 /wd4459 /wd4595") endif() if(WIN32)
View file
obs-studio-21.0.3.tar.xz/README.rst -> obs-studio-21.1.2.tar.xz/README.rst
Changed
@@ -15,11 +15,11 @@ - Website: https://obsproject.com - - Help/Documentation/Guides: https://github.com/jp9000/obs-studio/wiki + - Help/Documentation/Guides: https://github.com/obsproject/obs-studio/wiki - Forums: https://obsproject.com/forum/ - - Build Instructions: https://github.com/jp9000/obs-studio/wiki/Install-Instructions + - Build Instructions: https://github.com/obsproject/obs-studio/wiki/Install-Instructions - Developer/API Documentation: https://obsproject.com/docs @@ -33,7 +33,7 @@ - If you wish to contribute code to the project, please make sure to read the coding and commit guidelines: - https://github.com/jp9000/obs-studio/blob/master/CONTRIBUTING.rst + https://github.com/obsproject/obs-studio/blob/master/CONTRIBUTING.rst - Developer/API documentation can be found here: https://obsproject.com/docs
View file
obs-studio-21.0.3.tar.xz/UI/data/locale.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale.ini
Changed
@@ -139,3 +139,11 @@ [nn-NO] Name=Norsk Nynorsk +[fil-PH] +Name=Wikang Filipino + +[sq-AL] +Name=gjuha shqipe + +[tl-PH] +Name=Wikang Tagalog
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/bg-BG.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/bg-BG.ini
Changed
@@ -546,12 +546,27 @@ Basic.Settings.Output.Simple.Warn.Lossless="Предупреждение: Оригиналното качество създава огромни файлове! Запис настроен на Оригинално качество може да заема над 7GB дисково пространство на минута, ако резолюцията и кадрите са високи. Не се препоръчва ако не разполагате със много пространство." Basic.Settings.Output.Simple.Warn.Lossless.Msg="Сигурни ли сте че искате да ползвате оригиналното качество на записа?" Basic.Settings.Output.Simple.Warn.Lossless.Title="Предупреждение при ползване на Оригинално Качество!" +Basic.Settings.Output.Simple.Warn.MultipleQSV="Предупреждение: Не можете да ползвате различни и отделни QSV енкодери докато предавате и записвате. Ако искате да предавате и да записвате едновременно, моля променете един от енкодерите." +Basic.Settings.Output.Simple.Encoder.Software="Програмно (x264)" +Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Хардуеър (QSV)" +Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Хардуеър (AMD)" +Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Хардуеър (NVENC)" +Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Програмно (x264 ниска употреба на процесора, увеличава размера на записа)" Basic.Settings.Output.VideoBitrate="Видео битрейт" Basic.Settings.Output.AudioBitrate="Аудио битрейт" Basic.Settings.Output.Reconnect="Автоматично повторно свързване" Basic.Settings.Output.RetryDelay="Отлагане на повторно свързване (секунди)" Basic.Settings.Output.MaxRetries="Максимален брой повторни опити" - +Basic.Settings.Output.Advanced="Включи Допълнителни Настройки за Енкодера" +Basic.Settings.Output.EncoderPreset="Настройка на Енкодера (по-висока = по-малко процесор)" +Basic.Settings.Output.CustomEncoderSettings="Допълнителни Настройки на Енкодера" +Basic.Settings.Output.CustomMuxerSettings="Допълнителни Настройки при Смесване" +Basic.Settings.Output.NoSpaceFileName="Създавай името на записа без Празни Места" + +Basic.Settings.Output.Adv.Rescale="Умащабяване на Изхода" +Basic.Settings.Output.Adv.AudioTrack="Звукова Писта" +Basic.Settings.Output.Adv.Streaming="Предаване" +Basic.Settings.Output.Adv.ApplyServiceSettings="Ползвай настройките на енкодера от платформата" Basic.Settings.Output.Adv.Audio.Track1="Писта 1" Basic.Settings.Output.Adv.Audio.Track2="Писта 2" Basic.Settings.Output.Adv.Audio.Track3="Писта 3" @@ -588,7 +603,9 @@ Basic.Settings.Output.Adv.FFmpeg.GOPSize="Интервал между ключови кадри (кадри)" Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Покажи всички кодеци (дори и ако са несъвместими)" +FilenameFormatting.completer="%ХХГГ-%ММ-%ДД %чч-%мм-%сс\n%ГГ-%ММ-%ДД %чч-%мм-%сс\n%Г-%м-%д %Ч-%М-%С\n%г-%м-%д %Ч-%М-%С\n%а %Г-%м-%д %Ч-%М-%С\n%А %Г-%м-%д %Ч-%М-%С\n%Г-%б-%д %Ч-%М-%С\n%Г-%Б-%д %Ч-%М-%С\n%Г- %м-%д %И-%М-%С-%п\n%Г-%м-%д %Ч-%М-%С-%з\n%Г-%м-%д %Ч-%М-%С-%ст" +FilenameFormatting.TT="%CCYY Година, четири цифри\n%YY Година, последни две цифри (00-99)\n%MM Месецът като цяло число (01-12)\n%DD Ден от месеца, със добавена нула (01-31)\n%hh Часът във 24ч формат (00-23)\n%mm Минута (00-59)\n%ss Секунда (00-61)\n%% % подпис\n%a Съкратено име на деня\n%A Пълно име на деня\n%b Съкратено име на месеца\n%B Пълно име на месеца\n%d Ден от месеца, със добавена нула (01-31)\n%H Часът във 24ч формат (00-23)\n%I Часът във 12ч формат (01-12)\n%m Месецът като цяло число (01-12)\n%M Минута (00-59)\n%p AM или PM посочен\n%S Секунда (00-61)\n%y Година, последни две цифри (00-99)\n%Y Година\n%z ISO 8601 разминаване със UTC или времева зона\n име или съкращение\n%Z Име на Времевата зона или съкращение\n" Basic.Settings.Video="Видео" Basic.Settings.Video.Adapter="Видео адаптер:" @@ -614,6 +631,10 @@ Basic.Settings.Audio="Аудио" Basic.Settings.Audio.SampleRate="Честота на дискретизацията" Basic.Settings.Audio.Channels="Канали" +Basic.Settings.Audio.MeterDecayRate="Брой за Звуков Разпад" +Basic.Settings.Audio.MeterDecayRate.Fast="Бързо" +Basic.Settings.Audio.MeterDecayRate.Medium="Средно (ТИП I PPM)" +Basic.Settings.Audio.MeterDecayRate.Slow="Бавно (Type II PPM)" Basic.Settings.Audio.MultiChannelWarning.Enabled="ПРЕДУПРЕЖДЕНИЕ: Включен е Surround sound." Basic.Settings.Audio.MultichannelWarning="Ако предавате, проверете дали вашата услуга за стрийминг поддържа едновременно приемане на съраунд звук и възпроизвеждане на съраунд звук. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast са примери, при които съраунд звукът е напълно поддържан. Въпреки че, Facebook Live и YouTube Live подържат и приемат съраунд, Facebook Live пемиксира към стерео звук, а YouTube Live възпроизвежда само два канала.\n\nЗвуковите филтъри на OBS подържат съраунд звук, въпреки това VST поддръжката не е гарантирана." Basic.Settings.Audio.MultichannelWarning.Title="Включи записването на съраунд звук?" @@ -635,6 +656,7 @@ Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Над Нормата" Basic.Settings.Advanced.General.ProcessPriority.Normal="Нормален" Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Под Нормата" +Basic.Settings.Advanced.General.ProcessPriority.Idle="Свободен" Basic.Settings.Advanced.FormatWarning="Предупреждение: Цветните формати освен NV12 се ползват главно при записи и не са препоръчани при предаване. Предаването може да упражни завишено ползване на Процесора поради прекодиране на форматите." Basic.Settings.Advanced.Audio.BufferingTime="Време за буфериране на звук" Basic.Settings.Advanced.Video.ColorFormat="Формат на цвета" @@ -644,22 +666,37 @@ Basic.Settings.Advanced.Video.ColorRange.Full="Пълен" Basic.Settings.Advanced.Audio.MonitoringDevice="Устройство за Звуково възпроизвеждане" Basic.Settings.Advanced.Audio.MonitoringDevice.Default="По подразбиране" +Basic.Settings.Advanced.Audio.DisableAudioDucking="Изключи намалянето на звука при разговори" +Basic.Settings.Advanced.StreamDelay="Забавяне на Предаването" Basic.Settings.Advanced.StreamDelay.Duration="Продължителност (секунди)" Basic.Settings.Advanced.StreamDelay.Preserve="Запази точката на прекъсване (увеличете забавянето) при повторно свързване" +Basic.Settings.Advanced.StreamDelay.MemoryUsage="Приблизително използвана памет: %1 MB" Basic.Settings.Advanced.Network="Мрежа" +Basic.Settings.Advanced.Network.BindToIP="Свържи към IP" +Basic.Settings.Advanced.Network.EnableNewSocketLoop="Позволи нов мрежов код" +Basic.Settings.Advanced.Network.EnableLowLatencyMode="Режим на ниска латенция" Basic.AdvAudio="Допълнителни Звукови Характеристики" Basic.AdvAudio.Name="Име" Basic.AdvAudio.Volume="Сила на звука (%)" Basic.AdvAudio.Mono="Премиксирай към Mono звук" +Basic.AdvAudio.Panning="Накланяне" +Basic.AdvAudio.SyncOffset="Забавяне (мс)" +Basic.AdvAudio.Monitoring="Звуков Мониториниг " Basic.AdvAudio.Monitoring.None="Мониторът Изключен" +Basic.AdvAudio.Monitoring.MonitorOnly="Само на Монитора (заглуши изхода)" +Basic.AdvAudio.Monitoring.Both="Монитор и Изход" Basic.AdvAudio.AudioTracks="Писти" Basic.Settings.Hotkeys="Горещи клавиши" +Basic.Settings.Hotkeys.Pair="Клавишни комбинации ползвани от `%1` действат като ключ" Basic.Hotkeys.SelectScene="Премини към сцена" +Basic.SystemTray.Show="Покажи" +Basic.SystemTray.Hide="Скрий" +Basic.SystemTray.Message.Reconnecting="Връзката Загубена. Свързване..." Hotkeys.Insert="Вмъкни" Hotkeys.Delete="Изтрий" @@ -668,9 +705,33 @@ Hotkeys.PageUp="Страница нагоре" Hotkeys.PageDown="Страница надолу" Hotkeys.NumLock="Num Lock" +Hotkeys.ScrollLock="Скрол Лок" +Hotkeys.CapsLock="Капс Лок" +Hotkeys.Backspace="Връщане" +Hotkeys.Tab="Таб" +Hotkeys.Print="Принт" +Hotkeys.Pause="Пауза" +Hotkeys.Left="Ляво" +Hotkeys.Right="Дясно" +Hotkeys.Up="Горе" +Hotkeys.Down="Долу" +Hotkeys.Windows="Windows" +Hotkeys.Super="Супер" +Hotkeys.Menu="Меню" +Hotkeys.Space="Спейс" +Hotkeys.NumpadNum="Нумпад %1" +Hotkeys.NumpadMultiply="Нумпад Умножи" +Hotkeys.NumpadDivide="Нумпад Раздели" Hotkeys.NumpadAdd="Цифрова клавиатура +" Hotkeys.NumpadSubtract="Цифрова клавиатура -" Hotkeys.NumpadDecimal="Цифрова клавиатура ." +Hotkeys.AppleKeypadNum="%1 (Клавиатура)" +Hotkeys.AppleKeypadMultiply="* (Клавиатура)" +Hotkeys.AppleKeypadDivide="/ (Клавиатура)" +Hotkeys.AppleKeypadAdd="+ (Клавиатура)" +Hotkeys.AppleKeypadSubtract="- (Клавиатура)" +Hotkeys.AppleKeypadDecimal=". (Клавиатура)" +Hotkeys.AppleKeypadEqual="= (Клавиатура)" Hotkeys.MouseButton="Мишка %1" Mute="Заглуши"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/cs-CZ.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/cs-CZ.ini
Changed
@@ -631,6 +631,9 @@ Basic.Settings.Audio="Zvuk" Basic.Settings.Audio.SampleRate="Vzorkovací frekvence" Basic.Settings.Audio.Channels="Kanály" +Basic.Settings.Audio.MeterDecayRate.Fast="Rychle" +Basic.Settings.Audio.MeterDecayRate.Medium="Střední (typ I PPM)" +Basic.Settings.Audio.MeterDecayRate.Slow="Pomalu (typ II PPM)" Basic.Settings.Audio.MultiChannelWarning.Enabled="VAROVÁNÍ: Prostorový zvuk je zapnut." Basic.Settings.Audio.MultichannelWarning="Předtím než začnete vysílat si zkontrolujte, zda vaše vysílací služba podporuje příjem a přehrávání prostorového zvuku. Twitch, Facebook 360 Live, Mixer RTMP, Smashcast jsou příklady služeb, které jej plně podporují. I když Facebook Live a YouTube Live oba podporují příjem prostorového zvuku, Facebook Live jej převede na stereo a YouTube Live přehrává pouze dva kanály.\n\nOBS filtry zvuku jej plně podporují, ale podpora u pluginu VST není garantována." Basic.Settings.Audio.MultichannelWarning.Title="Povolit prostorový zvuk?"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/en-US.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/en-US.ini
Changed
@@ -535,6 +535,9 @@ Basic.MainMenu.Help.Logs.UploadLastLog="Upload &Last Log File" Basic.MainMenu.Help.Logs.ViewCurrentLog="&View Current Log" Basic.MainMenu.Help.CheckForUpdates="Check For Updates" +Basic.MainMenu.Help.CrashLogs="Crash &Reports" +Basic.MainMenu.Help.CrashLogs.ShowLogs="&Show Crash Reports" +Basic.MainMenu.Help.CrashLogs.UploadLastLog="Upload &Last Crash Report" # basic mode settings dialog Basic.Settings.ProgramRestart="The program must be restarted for these settings to take effect."
View file
obs-studio-21.1.2.tar.xz/UI/data/locale/fil-PH.ini
Added
@@ -0,0 +1,748 @@ + + +OK="Sige" +Apply="Ilagay" +Cancel="Kanselahin" +Close="Sarado" +Save="Mag-impok" +Discard="Ialis" +Disable="Huwag paganahin" +Yes="Oo" +No="Hindi" +Add="Idagdag" +Remove="Tanggalin" +Rename="Baguhin ang pangalan" +Interact="Makipag-ugnayan" +Filters="Mga salaan" +Properties="Mga pag-aari" +MoveUp="Gumalaw pataas" +MoveDown="Bumaba" +Settings="Mga pagtatakda" +Display="Ipamalas" +Name="Pangalan" +Exit="Labasan" +Mixer="Panghalo" +Browse="Supling" +Mono="Mono" +Stereo="Stereo" +DroppedFrames="Bumaba ang mga frame %1 (%2%)" +StudioProgramProjector="Fullscreen Projector (Programa)" +PreviewProjector="Fullscreen Projector (Preview)" +SceneProjector="Fullsreen Projector (Eksena)" +SourceProjector="Fullscreen Projector (Pinagmulan)" +StudioProgramWindow="Windowed Projector (Programa)" +PreviewWindow="Windowed Projector (Preview)" +SceneWindow="Windowed Projector (Eksena)" +SourceWindow="Windowed Projector (Pinagmulan)" +MultiviewProjector="Multiview (Fullscreen)" +MultiviewWindowed="Multiview (Windowed)" +Clear="Linisin" +Revert="Ibalik" +Show="Ipakita" +Hide="Itago" +UnhideAll="Huwag itago lahat" +Untitled="Walang pamagat" +New="Bago" +Duplicate="Katulad" +Enable="Paganahin" +DisableOSXVSync="Huwag Paganahin OSX V-Sync" +ResetOSXVSyncOnExit="I-reset ang OSX V-Sync sa Labasan" +HighResourceUsage="Ang Encoding ay labis ang karga! Isaalang alang ang pagbaba ng video settings o gumamit ng mas mabilis na encoding preset." +Transition="Paglipat" +QuickTransitions="Mabilis na Paglipat" +Left="Kaliwa" +Right="Kanan" +Top="Pinakamataas" +Bottom="Kailaliman" +Reset="Baguhin" +Hours="Oras" +Minutes="Minuto" +Seconds="Segundo" +Deprecated="Hindi na ginagamit" +ReplayBuffer="Replay Buffer" +Import="Mag-angkat" +Export="I-export" +Copy="Kopyahin" +Paste="I-paste" +PasteReference="I-paste (Banggit)" +PasteDuplicate="I-paste (Pangalawang salin)" +RemuxRecordings="Mga Pagtatala ng Remux" +Next="Susunod" +Back="Bumalik" +Defaults="Mga hindi pagsipot" +HideMixer="Itago sa panghalo" +TransitionOverride="Override na ang Paglipat" +None="Wala" +StudioMode.Preview="Balikan" +StudioMode.Program="Programa" +ShowInMultiview="Ipakita sa Multiview" + +AlreadyRunning.Title="Tumatakbo na ngayon ang OBS" +AlreadyRunning.Text="Tumatakbo na ang OBS! Maliban na lamang kung gusto mong gawin ito, pakiusap patayin ang anomang nabubuhay na mga mungkahi ng OBS bago subukang magpatakbo ng panibagong mungkahi. Kung meron kang OBS set para mabawasan ang sistemang tray, pakiusap magsiyasat para makita kung ito ay tumatakbo parin." +AlreadyRunning.LaunchAnyway="Maglunsad parin" + +Copy.Filters="Kopyahin ang mga panala" +Paste.Filters="I-paste ang mga panala" + +BandwidthTest.Region="Rehiyon" +BandwidthTest.Region.US="Estados Unidos" +BandwidthTest.Region.EU="Europa" +BandwidthTest.Region.Asia="Asya" +BandwidthTest.Region.Other="Iba pa" + +Basic.FirstStartup.RunWizard="Gusto mo bang mapatakbo ang dalubhasa sa kusang pagkonpigurasyon? Maaari mo ring mano-manuhin ang pagkonpigura ng iyong settings sa pagpindot ng Settings button sa pangunahing window." +Basic.FirstStartup.RunWizard.BetaWarning="(Tandaan: Ang dalubhasang kusang pagkonpigurasyon ay kasalukuyang nasa beta)" +Basic.FirstStartup.RunWizard.NoClicked="Kung magbabago ka ng isip mo, pwede mong patakbuhin ang dalubhasang kusang konpigurasyon anomang oras ulit mula sa mga kasangkapan sa menu." + +Basic.AutoConfig="Dalubhasang Kusang Konpigurasyon" +Basic.AutoConfig.Beta="Dalubhasang Kusang Konpigurasyon (Beta)" +Basic.AutoConfig.ApplySettings="Ilapat ang mga Pagtatakda" +Basic.AutoConfig.StartPage="Paggamit ng Impormasyon" +Basic.AutoConfig.StartPage.SubTitle="Tukuyin ang tamang program na gusto mong gamitin" +Basic.AutoConfig.StartPage.PrioritizeStreaming="Optimize para sa streaming, pangalawa ay ang recording" +Basic.AutoConfig.StartPage.PrioritizeRecording="Optimize para sa recording, Hindi ako mag streaming" +Basic.AutoConfig.VideoPage="Ang mga video settings" +Basic.AutoConfig.VideoPage.SubTitle="Tukuyin ang naayong video settings na gusto mong gamitin" +Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Kasulukuyang gamitin(%1x%2)" +Basic.AutoConfig.VideoPage.BaseResolution.Display="I-Display %1 (%2x%3)" +Basic.AutoConfig.VideoPage.FPS.UseCurrent="Pangsulukuyang Gamitin (%1)" +Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="Sa 60 or kaya sa 30, Pero mas mabuti 60 kung maaari" +Basic.AutoConfig.VideoPage.FPS.PreferHighRes="Sa 60 or kaya sa 30, Pero mas mabuti 60 para sa mas magandang resolusyon" +Basic.AutoConfig.VideoPage.CanvasExplanation="Paalala: Ang kanbas (base) na ito ay hindi kinakailangan na kaparehas ng resolusyon ng iyong stream or record. Ang iyong actual stream/record na resolusyon ay maaaring pagkasyahin para sa resolusyon ng kanbas para mabawasan ang paggamit kinakailangan na bitrate." +Basic.AutoConfig.StreamPage="Mga batis ng impormasyon" +Basic.AutoConfig.StreamPage.SubTitle="Pakiusap ilagay ang iyong impormasyon pang stream" +Basic.AutoConfig.StreamPage.Service="Serbisyo" +Basic.AutoConfig.StreamPage.Service.ShowAll="Ipakita lahat..." +Basic.AutoConfig.StreamPage.Server="Serber" +Basic.AutoConfig.StreamPage.StreamKey="Ang susi ng iyong stream" +Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(link)" +Basic.AutoConfig.StreamPage.PerformBandwidthTest="I-estima ang bitrate kasama ang pag eksamina ng bandwidth (maaaring tumagal ng ilang minuto)" +Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Piliin ang hardware encoding" +Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Ang Hardware Encoding ay tinatanggal lahat ng nagamit na CPU, pero kailangan ng mas maraming bitrate para makuha ang parehong lebel ng kalidad" +Basic.AutoConfig.StreamPage.StreamWarning.Title="Babala sa pag stream" +Basic.AutoConfig.StreamPage.StreamWarning.Text="Ang bandwidth test ay tungkol sa stream randomized bidyo data at walang audio sa iyong channel. Kung maaari, mas inirerekomenda na pansamantalang i-off ang pag save ng vides of streams at itakda sa pribado hanggang matapos makumpleto ang pag eksamin" +Basic.AutoConfig.TestPage="Huling Resulta" +Basic.AutoConfig.TestPage.SubTitle.Testing="Ang program na ito ay isinasagawa ang mga set para eksamin para matantiya ang pinakamainam na settings" +Basic.AutoConfig.TestPage.SubTitle.Complete="Ang iyong pagsusuri ay kumpleto na" +Basic.AutoConfig.TestPage.TestingBandwidth="Pagsasagawa ng bandwidth test, ito ay maaaring tumagal ng ilang minuto..." +Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Kumukunekta sa: %1..." +Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Bigong kumunekta sa alin mang server, paki tignan ang koneksyon ng iyong internet at subukan ulet." +Basic.AutoConfig.TestPage.TestingBandwidth.Server="Pagsusuri ng bandwidth para sa: %1" +Basic.AutoConfig.TestPage.TestingStreamEncoder="Testingin ang stream encoder, ito ay maaaring tumagal ng isang minuto..." +Basic.AutoConfig.TestPage.TestingRecordingEncoder="Testingin ang recording encoder, ito ay maaaring tumagal ng isang minuto..." +Basic.AutoConfig.TestPage.TestingRes="Testingin ang resolusyon, ito ay maaaring tumagal ng ilang minuto..." +Basic.AutoConfig.TestPage.TestingRes.Fail="Bigong iandar ang encoder" +Basic.AutoConfig.TestPage.TestingRes.Resolution="Testingin %1x%2 %3 FPS..." +Basic.AutoConfig.TestPage.Result.StreamingEncoder="Streaming Encoder" +Basic.AutoConfig.TestPage.Result.RecordingEncoder="Recording Encoder" +Basic.AutoConfig.TestPage.Result.Header="Ang program na ito ay napagkaisahan na ang settings tinatayang lahat ay perpekto para sayo:" +Basic.AutoConfig.TestPage.Result.Footer="Para sa pag gamit ng settings, pindutin ang Apply Settings. Para ma reconfigure ang wizard at simulan muli, pindutin ang Back. Mano-mano i-configure ang settings, at pindutin ang Cancel at buksan ang Settings." + +Basic.Stats="Ang mga Statisktika" +Basic.Stats.CPUUsage="Ang nagamit na CPU" +Basic.Stats.HDDSpaceAvailable="Ang magagamit na espasyo ng HDD" +Basic.Stats.MemoryUsage="Ang nagamit na Memory" +Basic.Stats.AverageTimeToRender="Ang average time para ma render ang frame" +Basic.Stats.SkippedFrames="Laktawin ang frames dahil sa encoding lag" +Basic.Stats.MissedFrames="Nalampasan ang frames dahil sa rendering lag" +Basic.Stats.Output.Stream="Stream" +Basic.Stats.Output.Recording="Recording" +Basic.Stats.Status="Ang estado" +Basic.Stats.Status.Recording="Recording" +Basic.Stats.Status.Live="Naka LIVE" +Basic.Stats.Status.Reconnecting="Muling kumukonekta" +Basic.Stats.Status.Inactive="Hindi na aktiba" +Basic.Stats.DroppedFrames="Naihulog na Frames (Network)" +Basic.Stats.MegabytesSent="Ang total na Data Output" +Basic.Stats.Bitrate="Bitrate" + +Updater.Title="May bagong update na available" +Updater.Text="May bagong update na magagamit:" +Updater.UpdateNow="Mag update ngayon" +Updater.RemindMeLater="Paalalahanan mo ako mamaya" +Updater.Skip="Laktawan ang Bersyon" +Updater.Running.Title="Programa na kasalukuyang aktibo" +Updater.Running.Text="Ang mga output ay kasalukuyang aktibo, mangyaring i-shut down ang anumang mga aktibong output bago sinusubukang i-update" +Updater.NoUpdatesAvailable.Title="Walang magagamit na mga update" +Updater.NoUpdatesAvailable.Text="Walang mga update ang kasalukuyang magagamit" +Updater.FailedToLaunch="Nabigong ilunsad ang updater" +Updater.GameCaptureActive.Title="Kumuha ng laro na aktibo" +Updater.GameCaptureActive.Text="Kasalukuyang nakukuha sa library ang pagkuha ng hook library. Mangyaring isara ang anumang mga laro / programa na nakukuha (o i-restart ang mga bintana) at subukang muli." + +QuickTransitions.SwapScenes="Swap Preview / Output Scenes Pagkatapos Transitioning" +QuickTransitions.SwapScenesTT="Mag swap ng mga preview at output scenes matapos ang transitioning (Kung may orihinal na output scene na umiiral).\nIto ay hindi pwede baguhin ang orihinal na eksena." +QuickTransitions.DuplicateScene="Gayahin ang eksena" +QuickTransitions.DuplicateSceneTT="Kung mag i-edit ng parehas na eksena. pinapayag ang editing transform/visibility of sources kahit baguhin ang output.\nPara ma edit ang properties wag baguhin ang output, paganahin 'Duplicate Sources'.\nAng pagbago ng kalidad nito ay maaaring ma reset ang eksena (kung ito ay umiiral pa rin)." +QuickTransitions.EditProperties="Gayahin ang mga pinagmulang" +QuickTransitions.EditPropertiesTT="Kung mag i-edit ng kaparehas na eksena. payagan mag edit ng katangian ng mga pinagkukunan nang hindi binabago ang output.\nIto ay magagamit king 'Duplicate Scene' ay pinagana.\nAng mga pinagkukunan(gaya ng nakuhang media sources) hindi suportado at di pwede ma edit nang hiwalay.\nAng pagbago ng value nito ay maaaring ma reset ang kasulukuyang output scene(kung mayroon pa).\n\nBabala: Dahil sa pinagkukunan ay magiging doble, ito ay nangangailangan ng ekstrang sistema or video pagkukunan." +QuickTransitions.HotkeyName="Ilipat ng mabilis: %1" + +Basic.AddTransition="Magdagdag ng configurable na transisyon" +Basic.RemoveTransition="Tangalin ang configurable transition" +Basic.TransitionProperties="Mga Properties ng Transisyon" +Basic.SceneTransitions="Mga transisyon ng mga eksena" +Basic.TransitionDuration="Katagalan" +Basic.TogglePreviewProgramMode="Ang Studio Mode" + +TransitionNameDlg.Text="Pakilagay ang pangalan ng transisyon" +TransitionNameDlg.Title="Pangalan ng Transisyon" + +TitleBar.Profile="Ang Profile" +TitleBar.Scenes="Ang mga Eksena" + +NameExists.Title="Ang pangalan ay umiiral na" +NameExists.Text="Ang pangalan ay nagamit na." + +NoNameEntered.Title="Pakilagay ang balidong pangalan" +NoNameEntered.Text="Hindi pwede gumamit ng walang pangalan." + +ConfirmStart.Title="Magsimula ng mag Stream?" +ConfirmStart.Text="Sigurado ka ba na simulang ang pag stream?" + +ConfirmStop.Title="Itigil ba ang Steam?" +ConfirmStop.Text="Sigurado ka itigil ang pag i-stream?" + +ConfirmExit.Title="Lumabas sa OBS?" +ConfirmExit.Text="Ang OBS ay kasulukuyang aktibo. Lahat ng streams/recordings ay magsasara. Sigurado ka ba gusto mong mag exit?" + +ConfirmRemove.Title="I-kumpirma ang pagtangal" +ConfirmRemove.Text="Sigurado ka bang tangalin ang '$1'?" +ConfirmRemove.TextMultiple="Sigurado ka bang tangalin %1 items?" + +Output.StartStreamFailed="Bigong simulang ang pag stream" +Output.StartRecordingFailed="Bigong simulan ang pag record" +Output.StartReplayFailed="Bigong simulang ang replay buffer" +Output.StartFailedGeneric="Bigong simulang ang output. Pakitingnan ang talaan ng mga detalye.\n\nNote: kung ikaw ay gumagamit ng NVENC or AMD encoders, siguraduhin na nag video drivers ay naka update." + +Output.ConnectFail.Title="Bigung kumunekta" +Output.ConnectFail.BadPath="Hindi wasto ang Path or ang Connection URL. Pakitingnan ang settings para ma kumpirma na ito ay pwede." +Output.ConnectFail.ConnectFailed="Bigong kumunekta sa serber" +Output.ConnectFail.InvalidStream="Di maka pasok sa tinutukoy na channel or stream key, pakitignan ng maayos ang stream key. Kung tama, Maaaring may problema sa pagkunekta sa serber." +Output.ConnectFail.Error="Isang di-inaasahang error ng subukang kumunekta sa serber. Karagdagang impormasyon ay nasa log file." +Output.ConnectFail.Disconnected="Nadiskonek mula sa serber." + +Output.RecordFail.Title="Bigong simulang ang pag record" +Output.RecordFail.Unsupported="Ang output format ay maaring di suportado or di sinusuportahan ang higit sa isang audio track. Pakitingnan ang iyong settings at simulan ulet." +Output.RecordNoSpace.Title="Hindi sapat ang iyong espasyo" +Output.RecordNoSpace.Msg="Di sapat ang espasyo para ipatuloy ang pagrerekord." +Output.RecordError.Title="May error sa pagrekord" +Output.RecordError.Msg="Hindi tiyak na error habang nagrerekord." +Output.ReplayBuffer.NoHotkey.Title="Walang set ng hotkey!" +Output.ReplayBuffer.NoHotkey.Msg="Walang na i-save na hotkey para sa replay buffer. Paki \"Save\" ang gagamiting hotkey para ma i-save ang replay recordings." + +Output.BadPath.Title="Di mabuting File Path" +Output.BadPath.Text="Ang na configured na file output path ay di di-wasto. Pakitignan ang iyong settings para ma kumpirma na balido ang file path at na i-set ito." + +LogReturnDialog="Ang na i-uload na log ay tagumpay" +LogReturnDialog.CopyURL="Kupyahin ang URL" +LogReturnDialog.ErrorUploadingLog="Error sa pag-upload ng log file" + +LicenseAgreement="Ang lisensya ng kasunduan" +LicenseAgreement.PleaseReview="Pakitingnan ang lisensya bago gumamit ng OBS. Sa pag gamit ng program, kinikilala mo na nabasa at sumasang-ayon ka sa mga tuntunin nito <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a>. Maaaring mag scroll down para makita ang ibang bahagi ng kasunduan." +LicenseAgreement.ClickIAgreeToContinue="Kung iyong tinatanggap ang termino ng kasunuduan, pindutin ang I Agree to continue. Dapat sumang-ayon sa kasunduan sa pag-gamit ng OBS." +LicenseAgreement.IAgree="Sumasang-ayon Ako" +LicenseAgreement.Exit="Lumabas" + +Remux.SourceFile="Obs Recording" +Remux.TargetFile="Target File" +Remux.Remux="Remux" +Remux.OBSRecording="OBS Recording" +Remux.FinishedTitle="Tapos na ang Remuxing" +Remux.Finished="Ang Recording remuxed" +Remux.FinishedError="Ang Recording Remuxed, pero ang file ay hindi kumpleto" +Remux.SelectRecording="Pumuli ng OBS Recording…" +Remux.SelectTarget="Piliin ang gustong file …" +Remux.FileExistsTitle="Ang napiling file any umiiral na" +Remux.FileExists="Ang napiling file any umiiral na, gusto mo ba itong palitan?" +Remux.ExitUnfinishedTitle="Ang remuxing ay naka progress" +Remux.ExitUnfinished="Di pa tapos ang Remuxing, pag itigil ang render ang napiling file ay di magagamit.\nGusto mo bang huminto sa pag remuxing?" + +UpdateAvailable="May bagong update na available" +UpdateAvailable.Text="Ang Version %1.%2.%3 ay available na. <a href='%4'>Pindutin para i-download</a>" + +Basic.DesktopDevice1="Ang Desktop Audio" +Basic.DesktopDevice2="Ang Desktop Audio 2" +Basic.AuxDevice1="Ang Mic/Aux" +Basic.AuxDevice2="Ang Mic/Aux 2" +Basic.AuxDevice3="Ang Mic/Aux 3" +Basic.AuxDevice4="Ang Mic/Aux 4" + +Basic.Scene="Eksena" +Basic.DisplayCapture="Ang nakunan na display" + +Basic.Main.PreviewConextMenu.Enable="Ipakita muli ang Larawan" + +ScaleFiltering="I-filter iskala" +ScaleFiltering.Point="Punto" +ScaleFiltering.Bilinear="Bilinear" +ScaleFiltering.Bicubic="Bicubic" +ScaleFiltering.Lanczos="Lanczos" + +Deinterlacing="Deinterlacing" +Deinterlacing.Discard="Baliwalain" +Deinterlacing.Retro="Retro" +Deinterlacing.Blend="I-timpla" +Deinterlacing.Blend2x="I-timpla ng dalwang beses" +Deinterlacing.Linear="Linear" +Deinterlacing.Linear2x="Linear 2x" +Deinterlacing.Yadif="Yadif" +Deinterlacing.Yadif2x="Yadif 2x" +Deinterlacing.TopFieldFirst="Pang unang itaas na field" +Deinterlacing.BottomFieldFirst="Pang unang ibaba na field" + +VolControl.SliderUnmuted="Pandausdos ng volume para '%1': %2" +VolControl.SliderMuted="Pandausdos ng volume para '%1': %2 (kasulukuyang naka mute)" +VolControl.Mute="Mute '%1'" +VolControl.Properties="Mga katangian '%1'" + +Basic.Main.AddSceneDlg.Title="Magdagdag ng mga eksena" +Basic.Main.AddSceneDlg.Text="Pakiusap lagyan ng pangalan ang eksena" + +Basic.Main.DefaultSceneName.Text="Eksena %1" + +Basic.Main.AddSceneCollection.Title="Magdagdag ng Collection ng Eksena" +Basic.Main.AddSceneCollection.Text="Mangyaring ipasok ang pangalan ng koleksyon ng eksena" + +Basic.Main.RenameSceneCollection.Title="I-rename ang Scene Collection" + +AddProfile.Title="Magdagdag ng Profile" +AddProfile.Text="Pakipasok ang pangalan ng profile" + +RenameProfile.Title="Palitan ang pangalan ng Profile" + +Basic.Main.MixerRename.Title="Palitan ang pangalan ng Audio Source" +Basic.Main.MixerRename.Text="Mangyaring ipasok ang pangalan ng pinagmulang audio" + + +Basic.Main.PreviewDisabled="Kasalukuyang hindi pinagana ang pag-preview" + +Basic.SourceSelect="Lumikha / Piliin ang Pinagmulan" +Basic.SourceSelect.CreateNew="Gumawa ng bago" +Basic.SourceSelect.AddExisting="Magdagdag ng Umiiral na" +Basic.SourceSelect.AddVisible="Gawing nakikita ang mapagkukunan" + +Basic.PropertiesWindow="Mga Properties para sa '%1'" +Basic.PropertiesWindow.SelectColor="Pumili ng kulay" +Basic.PropertiesWindow.SelectFont="Piliin ang font" +Basic.PropertiesWindow.ConfirmTitle="Binago ang Mga Setting" +Basic.PropertiesWindow.Confirm="Mayroong mga hindi nai-save na pagbabago. Gusto mo bang panatilihin ang mga ito?" +Basic.PropertiesWindow.NoProperties="Walang magagamit na mga ari-arian" +Basic.PropertiesWindow.AddFiles="Magdagdag ng Mga File" +Basic.PropertiesWindow.AddDir="Magdagdag ng Direktoryo" +Basic.PropertiesWindow.AddURL="Magdagdag ng Path / URL" +Basic.PropertiesWindow.AddEditableListDir="Magdagdag ng direktoryo sa '%1'" +Basic.PropertiesWindow.AddEditableListFiles="Magdagdag ng mga file sa '%1'" +Basic.PropertiesWindow.AddEditableListEntry="Magdagdag ng entry sa '%1'" +Basic.PropertiesWindow.EditEditableListEntry="I-edit ang entry mula sa '%1'" + +Basic.PropertiesView.FPS.Simple="Mga Simpleng FPS na Halaga" +Basic.PropertiesView.FPS.Rational="Mga Rational Value FPS" +Basic.PropertiesView.FPS.ValidFPSRanges="Mga saklaw na wastong FPS:" + +Basic.InteractionWindow="Nakikisalamuha... '%1'" + +Basic.StatusBar.Reconnecting="Nadiskonek, muling kumukonekta sa loob ng %2 segundo(s) (pagtatangka %1)" +Basic.StatusBar.AttemptingReconnect="Sinusubukang kumunekta... (tangka %1)" +Basic.StatusBar.ReconnectSuccessful="Matagumpay na reconnection" +Basic.StatusBar.Delay="Pag antala (%1 segundo)" +Basic.StatusBar.DelayStartingIn="Na antala(magsisimula %1 sec)" +Basic.StatusBar.DelayStoppingIn="Na antala(hihinto %1 sec)" +Basic.StatusBar.DelayStartingStoppingIn="Na antala (hihinto %1 sec, sisimula %2 sec)" + +Basic.Filters="Mga Filter" +Basic.Filters.AsyncFilters="Mga Filter ng Audio / Video" +Basic.Filters.AudioFilters="Mga Filter ng Audio" +Basic.Filters.EffectFilters="Mga Filter ng Epekto" +Basic.Filters.Title="Filter para sa mga '%1'" +Basic.Filters.AddFilter.Title="Salain ang pangalan" +Basic.Filters.AddFilter.Text="Mangyaring tukuyin ang pangalan ng filter" + +Basic.TransformWindow="Pagbabago ng Eksena ng Eksena" +Basic.TransformWindow.Position="Posisyon" +Basic.TransformWindow.Rotation="Pag-ikot" +Basic.TransformWindow.Size="Sukat" +Basic.TransformWindow.Alignment="Positional Alignment" +Basic.TransformWindow.BoundsType="Bounding ng klase ng kahon" +Basic.TransformWindow.BoundsAlignment="Ang pagkahanay ng Bounding Kahon" +Basic.TransformWindow.Bounds="Ang Bounding Box Size" +Basic.TransformWindow.Crop="I-crop ito" + +Basic.TransformWindow.Alignment.TopLeft="Sa taas na kaliwa" +Basic.TransformWindow.Alignment.TopCenter="Sa gintang ibabaw" +Basic.TransformWindow.Alignment.TopRight="Sa taas ng kanan" +Basic.TransformWindow.Alignment.CenterLeft="Naiwan ang Gitna" +Basic.TransformWindow.Alignment.Center="Gitna" +Basic.TransformWindow.Alignment.CenterRight="Tama sa Gitna" +Basic.TransformWindow.Alignment.BottomLeft="Babang Kaliwa" +Basic.TransformWindow.Alignment.BottomCenter="Babang Gitna" +Basic.TransformWindow.Alignment.BottomRight="Baba sa Kanan" + +Basic.TransformWindow.BoundsType.None="Walang hangganan" +Basic.TransformWindow.BoundsType.MaxOnly="Pinakamalaki na sukat lamang" +Basic.TransformWindow.BoundsType.ScaleInner="Sukat sa panloob na hangganan" +Basic.TransformWindow.BoundsType.ScaleOuter="Sukat sa panlabas na hangganan" +Basic.TransformWindow.BoundsType.ScaleToWidth="Sukat sa lapad ng hangganan" +Basic.TransformWindow.BoundsType.ScaleToHeight="Sukat sa taas ng hangganan" +Basic.TransformWindow.BoundsType.Stretch="Mag-stretch sa hangganan" + +Basic.Main.AddSourceHelp.Title="Hindi maaring magdagdag ng pinagmulan" +Basic.Main.AddSourceHelp.Text="Kailangan mong magkaroon ng hindi bababa sa isang eksena sa pinagmulan." + +Basic.Main.Scenes="Mga eksena" +Basic.Main.Sources="Pinagmulan" +Basic.Main.Controls="Mga kontrol" +Basic.Main.Connecting="Kumukonekta..." +Basic.Main.StartRecording="Simula ng Pagtatala" +Basic.Main.StartReplayBuffer="Simulan na ang pag Replay Buffer" +Basic.Main.StartStreaming="Simulan ang mag stream" +Basic.Main.StopRecording="Itigil ang Pagtatala" +Basic.Main.StoppingRecording="Pagtigil sa Pagtatala..." +Basic.Main.StopReplayBuffer="Itigil ang pag Re-replay Buffer" +Basic.Main.StoppingReplayBuffer="Pagtigil sa Pagre-Replay Buffer..." +Basic.Main.StopStreaming="Itiigil ang Pag-stream" +Basic.Main.StoppingStreaming="Pagtigil sa Pag-stream..." +Basic.Main.ForceStopStreaming="Itigil ang Pag-stream (Iwaksi ang Pagkaantala)" + +Basic.MainMenu.File="&Talaksan" +Basic.MainMenu.File.Export="&I-export" +Basic.MainMenu.File.Import="&Angkat" +Basic.MainMenu.File.ShowRecordings="Ipakita at Pag-&record" +Basic.MainMenu.File.Remux="Re&mux Recordings" +Basic.MainMenu.File.Settings="Mga &Setting" +Basic.MainMenu.File.ShowSettingsFolder="Ipakita ang Folder ng Mga Setting" +Basic.MainMenu.File.ShowProfileFolder="Ipakita ang Folder ng Profile" +Basic.MainMenu.AlwaysOnTop="L&aging Nasa Tuktok" +Basic.MainMenu.File.Exit="E&xit" + +Basic.MainMenu.Edit="I-&edit" +Basic.MainMenu.Edit.Undo="&Pawalang-bisa" +Basic.MainMenu.Edit.Redo="&Mag-redo" +Basic.MainMenu.Edit.UndoAction="I-&undo ang $1" +Basic.MainMenu.Edit.RedoAction="&Redo $1" +Basic.MainMenu.Edit.LockPreview="&I-preview ang I-preview" +Basic.MainMenu.Edit.Scale="Preview &Scaling" +Basic.MainMenu.Edit.Scale.Window="Scale to Window" +Basic.MainMenu.Edit.Scale.Canvas="Kanbas (%1x%2)" +Basic.MainMenu.Edit.Scale.Output="Output (%1x%2)" +Basic.MainMenu.Edit.Transform="&Transform" +Basic.MainMenu.Edit.Transform.EditTransform="&Baguhin ang Transform..." +Basic.MainMenu.Edit.Transform.CopyTransform="Kopyahin ang Transform" +Basic.MainMenu.Edit.Transform.PasteTransform="I-paste ang Transform" +Basic.MainMenu.Edit.Transform.ResetTransform="I-&reset ang Transform" +Basic.MainMenu.Edit.Transform.Rotate90CW="I-rotate ang 90 degrees CW" +Basic.MainMenu.Edit.Transform.Rotate90CCW="I-rotate ang 90 degrees CCW" +Basic.MainMenu.Edit.Transform.Rotate180="I-rotate ang 180 degrees" +Basic.MainMenu.Edit.Transform.FlipHorizontal="Flip &Horizontal" +Basic.MainMenu.Edit.Transform.FlipVertical="Flip &Vertical" +Basic.MainMenu.Edit.Transform.FitToScreen="&Fit sa screen" +Basic.MainMenu.Edit.Transform.StretchToScreen="Mag-&stretch sa screen" +Basic.MainMenu.Edit.Transform.CenterToScreen="&Center sa screen" +Basic.MainMenu.Edit.Order="&Order" +Basic.MainMenu.Edit.Order.MoveUp="Ilipat at Pataas (&U)" +Basic.MainMenu.Edit.Order.MoveDown="Ibaba or bumaba (&D)" +Basic.MainMenu.Edit.Order.MoveToTop="Ilipat sa &Tuktok" +Basic.MainMenu.Edit.Order.MoveToBottom="Ilipat sa Ika (&B)" +Basic.MainMenu.Edit.AdvAudio="&Advanced Audio Properties" + +Basic.MainMenu.View="&View" +Basic.MainMenu.View.Toolbars="Mga &Toolbar" +Basic.MainMenu.View.Docks="Docks" +Basic.MainMenu.View.Docks.ResetUI="I-reset ang UI" +Basic.MainMenu.View.Docks.LockUI="I-lock ang UI" +Basic.MainMenu.View.Toolbars.Listboxes="Mga &Listbox" +Basic.MainMenu.View.SceneTransitions="S&cene Mga Paglilipat" +Basic.MainMenu.View.StatusBar="&Status bar" +Basic.MainMenu.View.Fullscreen.Interface="Fullscreen Interface" + +Basic.MainMenu.SceneCollection="Kolek&syon ng Eksena" +Basic.MainMenu.Profile="&Profile" +Basic.MainMenu.Profile.Import="Mag-import ng Profile" +Basic.MainMenu.Profile.Export="I-export ang Profile" +Basic.MainMenu.SceneCollection.Import="Pag Angkat ng Nakolektang eksena" +Basic.MainMenu.SceneCollection.Export="Magluwas ng Nakolektang Eksena" +Basic.MainMenu.Profile.Exists="Ang Profile ay umiiral na ngayon" +Basic.MainMenu.SceneCollection.Exists="Ang Nakolektang Eksena ay umiiral na ngayon" + +Basic.MainMenu.Tools="&Mga Kasangkapan" + +Basic.MainMenu.Help="&Tulong" +Basic.MainMenu.Help.HelpPortal="Tulong &lagusan" +Basic.MainMenu.Help.Website="Pagbisita &website" +Basic.MainMenu.Help.Logs="Mag-&log ng mga File" +Basic.MainMenu.Help.Logs.ShowLogs="&ipakita ang Pag-log ng mga File" +Basic.MainMenu.Help.Logs.UploadCurrentLog="Mag-upload &Kasalukuyang Mag-log ng File" +Basic.MainMenu.Help.Logs.UploadLastLog="Mag-upload &Huling pagla-log ng File" +Basic.MainMenu.Help.Logs.ViewCurrentLog="&Tignan ang Kasalukuyang pagla-log" +Basic.MainMenu.Help.CheckForUpdates="Magsiyasat para sa mga update" + +Basic.Settings.ProgramRestart="Ang mga programa ay dapat na-restart para sa mga maaapektuhan na setting." +Basic.Settings.ConfirmTitle="Konpirmahin ang mga pagbabago" +Basic.Settings.Confirm="Hindi mo nai-save ang mga pagbabago. Gusto mo bang i-save ang mga pagbabago?" + +Basic.Settings.General="Pangkalahatan" +Basic.Settings.General.Theme="Tema" +Basic.Settings.General.Language="Lenguwahe" +Basic.Settings.General.EnableAutoUpdates="Awtomatikong pagsusuri para sa mga update tungkol sa startup" +Basic.Settings.General.OpenStatsOnStartup="Magbukas ng palitang-usap ng awtomatikongng stats tungkol sa startup" +Basic.Settings.General.WarnBeforeStartingStream="Ipakita ang konpirmasyon ng palitang-usap nang magsimula ang mga stream" +Basic.Settings.General.WarnBeforeStoppingStream="Ipakita ang konpirmasyon ng palitang-usap nang ihinto ang mga stream" +Basic.Settings.General.Projectors="Mga prodyektor" +Basic.Settings.General.HideProjectorCursor="Itago ang kursor sa kabila ng mga prodyektor" +Basic.Settings.General.ProjectorAlwaysOnTop="Gumawa ng mga prodyektor na laging nakakataas" +Basic.Settings.General.Snapping="Pinagmulan ng Paghahanay na isnaping" +Basic.Settings.General.ScreenSnapping="Paglagot sa mga Pinagmulan ukol sa gilid ng iskrin" +Basic.Settings.General.CenterSnapping="Paglagot sa mga Pinagmulan ukol sa pahalang at patayong sentro" +Basic.Settings.General.SourceSnapping="Paglagot sa mga Pinagmulan ukol sa iba pang mga pinagmulan" +Basic.Settings.General.SnapDistance="Pagkamadamdam na Paglagot" +Basic.Settings.General.RecordWhenStreaming="awtomatikong pagtala nang anod" +Basic.Settings.General.KeepRecordingWhenStreamStops="Panatilihing ang pagtatala kahit tumigil ang stream" +Basic.Settings.General.ReplayBufferWhileStreaming="Awtomatikong pagsisimula ng replay buffer kapag streaming" +Basic.Settings.General.KeepReplayBufferStreamStops="Panatilihing aktibo ang replay buffer kahit tumigil ang stream" +Basic.Settings.General.SysTray="Bandehadong Sistema" +Basic.Settings.General.SysTrayWhenStarted="Magbawas sa bandehadong sistema kapag nagsimula na" +Basic.Settings.General.SystemTrayHideMinimize="Palaging magbawas sa bandehadong sistema sa halip na task bar" +Basic.Settings.General.SaveProjectors="I-save ang mga prodyektor sa labasan" +Basic.Settings.General.SwitchOnDoubleClick="Paglipat sa eksena kahit makadalawang-pindot" +Basic.Settings.General.StudioPortraitLayout="Paganahin ang larawan/vertical layout" +Basic.Settings.General.MultiviewLayout="Multiview Layout" +Basic.Settings.General.MultiviewLayout.Horizontal.Top="Pahalang, Itaas" +Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Pahalang, Pababa" +Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertical, Sa kaliwa" +Basic.Settings.General.MultiviewLayout.Vertical.Right="Vertical, sa kanan" + +Basic.Settings.Stream="Stream" +Basic.Settings.Stream.StreamType="Mga uri ng Stream" + +Basic.Settings.Output="Ang awput" +Basic.Settings.Output.Format="Pagtatala ng recording" +Basic.Settings.Output.Encoder="Encoder" +Basic.Settings.Output.SelectDirectory="Piliin ang direktoryong pagtatala" +Basic.Settings.Output.SelectFile="Piliin ang file ng pagtatala" +Basic.Settings.Output.EnforceBitrate="Ipatupad ang serbisyo ng limitadong bitrate" +Basic.Settings.Output.Mode="Awput Mode" +Basic.Settings.Output.Mode.Simple="Simple" +Basic.Settings.Output.Mode.Adv="Pagsulong" +Basic.Settings.Output.Mode.FFmpeg="FFmpeg Awput" +Basic.Settings.Output.UseReplayBuffer="Simulan ang pag replay ng buffer" +Basic.Settings.Output.ReplayBuffer.SecondsMax="Pinakamataas na oras ng replay (segundos)" +Basic.Settings.Output.ReplayBuffer.MegabytesMax="Pinakamataas na memorya (Megabytes)" +Basic.Settings.Output.ReplayBuffer.Estimate="Ang na estimang nagamit na memorya: %1 MB" +Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Hindi ma-estima ang nagamit na memorya. Pakilagay ng pinakamataas na limitasyon ng memorya." +Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Nota: Siguraduhin na naka takda ang hotkey para sa pag replay ng buffer sa bahaging hotkeys)" +Basic.Settings.Output.ReplayBuffer.Prefix="Ang panlapi ng Replay Buffer Filename" +Basic.Settings.Output.ReplayBuffer.Suffix="Suffix" +Basic.Settings.Output.Simple.SavePath="Recording Path" +Basic.Settings.Output.Simple.RecordingQuality="Pagrekord ng Kalidad" +Basic.Settings.Output.Simple.RecordingQuality.Stream="Parehong stream" +Basic.Settings.Output.Simple.RecordingQuality.Small="Mataas na Kalidad, Katamtamang Laki ng File" +Basic.Settings.Output.Simple.RecordingQuality.HQ="Indistinguishable Quality, Large File Size" +Basic.Settings.Output.Simple.RecordingQuality.Lossless="Lossless Quality, Napakalaki ng Laki ng File" +Basic.Settings.Output.Simple.Warn.VideoBitrate="Babala: Ang bitrate ng streaming video ay itatakda sa%1, na kung saan ay ang itaas na limitasyon para sa kasalukuyang streaming service. Kung sigurado ka na gusto mong pumunta sa itaas%1, paganahin ang mga advanced na mga pagpipilian sa encoder at alisan ng tsek ang \"Ipatupad ang mga limitasyong bitrate ng service streaming\"." +Basic.Settings.Output.Simple.Warn.AudioBitrate="Babala: Itatakda ang streaming audio bitrate, na kung saan ay ang itaas na limitasyon para sa kasalukuyang streaming service. Kung sigurado ka na gusto mong pumunta sa itaas, paganahin ang mga advanced na pagpipilian ng encoder at alisan ng tsek ang \"Ipataw ang mga limitasyong bitrate ng service streaming\"." +Basic.Settings.Output.Simple.Warn.Encoder="Babala: Ang pagrekord sa isang encoder ng software sa ibang kalidad kaysa sa stream ay mangangailangan ng dagdag na paggamit ng CPU kung mag-stream at mag-record ka sa parehong oras." +Basic.Settings.Output.Simple.Warn.Lossless="Babala: Hindi mawawalan ng kalidad ang bumubuo ng napakalaking malalaking sukat ng file! Maaaring gumamit ng walang humpay na kalidad ng hanggang 7 gigabytes ng puwang ng disk kada minuto sa mataas na resolution at framerates. Ang hindi nawawala ay hindi inirerekomenda para sa mahabang pag-record maliban kung mayroon kang isang napakalaking halaga ng disk space na magagamit." +Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sigurado ka bang gusto mong gumamit ng kalidad na walang pagkawala?" +Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless quality warning!" +Basic.Settings.Output.Simple.Warn.MultipleQSV="Babala: Hindi ka maaaring gumamit ng maraming magkahiwalay na mga encoder ng QSV kapag nag-stream at nagre-record nang sabay. Kung nais mong i-stream at i-record nang sabay-sabay, mangyaring baguhin ang alinman sa encoder ng pag-record o stream encoder." +Basic.Settings.Output.Simple.Encoder.Software="Software (x264)" +Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)" +Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)" +Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)" +Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 mababang preset ng paggamit ng CPU, nagpapataas ng laki ng file)" +Basic.Settings.Output.VideoBitrate="Bitrate ng Video" +Basic.Settings.Output.AudioBitrate="Bitrate ng Audio" +Basic.Settings.Output.Reconnect="Awtomatikong mag-reconnect" +Basic.Settings.Output.RetryDelay="Retry Delay (segundo)" +Basic.Settings.Output.MaxRetries="Pinakamataas na Retries" +Basic.Settings.Output.Advanced="Paganahin ang Mga Setting ng Advanced Encoder" +Basic.Settings.Output.EncoderPreset="Encoder Preset (mas mataas = mas CPU)" +Basic.Settings.Output.CustomEncoderSettings="Mga Setting ng Custom Encoder" +Basic.Settings.Output.CustomMuxerSettings="Mga Setting ng Custom Muxer" +Basic.Settings.Output.NoSpaceFileName="Bumuo ng Pangalan ng File nang walang Space" + +Basic.Settings.Output.Adv.Rescale="Rescale Output" +Basic.Settings.Output.Adv.AudioTrack="Audio Track" +Basic.Settings.Output.Adv.Streaming="Streaming" +Basic.Settings.Output.Adv.ApplyServiceSettings="Ipatupad ang mga setting ng encoder ng streaming ng serbisyo" +Basic.Settings.Output.Adv.Audio.Track1="Subaybayan ang 1" +Basic.Settings.Output.Adv.Audio.Track2="Subaybayan ang 2" +Basic.Settings.Output.Adv.Audio.Track3="Subaybayan ang 3" +Basic.Settings.Output.Adv.Audio.Track4="Subaybayan ang 4" +Basic.Settings.Output.Adv.Audio.Track5="Subaybayan ang 5" +Basic.Settings.Output.Adv.Audio.Track6="Subaybayan ang 6" + +Basic.Settings.Output.Adv.Recording="Pagre-record" +Basic.Settings.Output.Adv.Recording.Type="Uri" +Basic.Settings.Output.Adv.Recording.Type.Standard="Standard" +Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Custom Output (FFmpeg)" +Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gamitin ang stream encoder)" +Basic.Settings.Output.Adv.Recording.Filename="Pag-format ng Filename" +Basic.Settings.Output.Adv.Recording.OverwriteIfExists="I-overwrite kung umiiral ang file" +Basic.Settings.Output.Adv.FFmpeg.Type="FFmpeg Output Type" +Basic.Settings.Output.Adv.FFmpeg.Type.URL="Output sa URL" +Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Output to File" +Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Mga format ng karaniwang recording" +Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Lahat ng Mga File" +Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Landas ng file or ang URL" +Basic.Settings.Output.Adv.FFmpeg.Format="Lalagyang ng Format" +Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Tunog" +Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Bidyo" +Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Default Format" +Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Ang lagayan ng deskripsyon ng format" +Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Tunog/Bidyo Codec guessed mula sa landas ng File or URL" +Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Default Encoder" +Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Huwag paganahin ang Encoder" +Basic.Settings.Output.Adv.FFmpeg.VEncoder="Bidyo Encoder" +Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Ang settings ng Bidyo Encoder(kung mayroon)" +Basic.Settings.Output.Adv.FFmpeg.AEncoder="Tonog ng Encoder" +Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Ang Settings ng Tonog Encoder(kung mayroon)" +Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Ang mga Settings ng Muxer (kung mayroon)" +Basic.Settings.Output.Adv.FFmpeg.GOPSize="Ang pagitan ng Keyframe (frames)" +Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Ipakita lahat ng codecs (kahit itoy posibleng di-kompatibol)" + +FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z" + +FilenameFormatting.TT="%CCYY Taon, apat na numero\n%YY Taon, huling dalawang numero (00-99)\n%MM Buwan bilang decimal na numero (01-12)\n%DD Araw ng buwan, zero-padded (01-31)\n%hh Oras sa 24h format (00-23)\n%mm Minuto (00-59)\n%ss Segundo (00-61)\n%% A % tanda\n%a Paikliin ang pangalan at araw ng trabaho\n%A Buong araw ng trabaho ng pangalan\n%b Paikliin ang pangalan at Buwan ng trabaho\n%B Buong pangalan ng buwan\n%d Araw ng Buwan, zero-padded (01-31)\n%H Oras sa 24h format (00-23)\n%I Oras sa 12h format (01-12)\n%m Buwan bilang decimal na numero (01-12)\n%M Minute (00-59)\n%p AM or PM ng pagtatalaga\n%S Segundo (00-61)\n%y Taon, huling dalawang numero (00-99)\n%Y Taon\n%z ISO 8601 offset mula sa UTC or timezone\n Pangalan or Pangpaikli\n%Z Timezone na pangalan or pangpaikli\n" + +Basic.Settings.Video="Bidyo" +Basic.Settings.Video.Adapter="Adapter ng Bidyo" +Basic.Settings.Video.BaseResolution="Base (Kanbas) Resolusyon" +Basic.Settings.Video.ScaledResolution="Output (Pinaliit) Resolusyon" +Basic.Settings.Video.DownscaleFilter="Downscale Filter" +Basic.Settings.Video.DisableAeroWindows="Huwag Paganahin ang Aero (Windows only)" +Basic.Settings.Video.FPS="FPS" +Basic.Settings.Video.FPSCommon="Karaniwang Balyo ng FPS" +Basic.Settings.Video.FPSInteger="Balyo ng Integer FPS" +Basic.Settings.Video.FPSFraction="Balyo ng Fractional FPS" +Basic.Settings.Video.Numerator="Numerator" +Basic.Settings.Video.Denominator="Denominator" +Basic.Settings.Video.Renderer="Renderer" +Basic.Settings.Video.InvalidResolution="Ang Balyo ng resolusyong ay imbalido. Dapat ito [width]x[height] (i.e. 1920x1080)" +Basic.Settings.Video.CurrentlyActive="Ang kasulukuyang Bidyo output ay aktibo. Paki turn off ang anumang output para mabago ang bidyo settings." +Basic.Settings.Video.DisableAero="Hindi paganahin ang Aero" + +Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Pinakamabilis, pero malabo pag mag i-scaling)" +Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Sharpened scaling, 16 mga halimbawa)" +Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Sharpened scaling, 32 mga halimbawa)" + +Basic.Settings.Audio="Tunog" +Basic.Settings.Audio.SampleRate="Halimbawa ng Antas" +Basic.Settings.Audio.Channels="Mga Channel" +Basic.Settings.Audio.MeterDecayRate="Ang Audio Meter Decay Rate" +Basic.Settings.Audio.MeterDecayRate.Fast="Pabilisin" +Basic.Settings.Audio.MeterDecayRate.Medium="Katamtaman (Tipo I PPM)" +Basic.Settings.Audio.MeterDecayRate.Slow="Mabagal (Tipo II PPM)" +Basic.Settings.Audio.MultiChannelWarning.Enabled="Babala: Ang Surround sound audio ay naka andar." +Basic.Settings.Audio.MultichannelWarning="Kung nag streaming, paki tignan kung ang iyong streaming service ay parehong supportado ang surround sound ingest at surround sound playback. Twitch, Facebook, 360 Live, Mixer RTMP, Smashcast ay ang mga halimbawa kung saan ang surround sound ay ganap na suportado, pati YouTube Live umaandar lamang sa dawalang channels.\n\nOBS audio filters ay kompatibol lamang sa surround sound, pero hindi siguradong supportado ang VST plugin." +Basic.Settings.Audio.MultichannelWarning.Title="Paganahin ang surround sound audio?" +Basic.Settings.Audio.MultichannelWarning.Confirm="Sigurado ka ba gusto mong paganahin ang surround sound audio?" +Basic.Settings.Audio.DesktopDevice="Ang Kagamitan sa Desktop Audio" +Basic.Settings.Audio.DesktopDevice2="Ang 2 Kagamitan sa Desktop Audio" +Basic.Settings.Audio.AuxDevice="Mic / Auxiliary Audio Device" +Basic.Settings.Audio.AuxDevice2="Mic / Auxiliary Audio Device 2" +Basic.Settings.Audio.AuxDevice3="Mic / Auxiliary Audio Device 3" +Basic.Settings.Audio.EnablePushToMute="Paganahin ang Push-to-mute" +Basic.Settings.Audio.PushToMuteDelay="Push-to-mute delay" +Basic.Settings.Audio.EnablePushToTalk="Paganahin ang Push-to-talk" +Basic.Settings.Audio.PushToTalkDelay="Push-to-talk delay" +Basic.Settings.Audio.UnknownAudioDevice="[Hindi konektado o hindi magagamit ang device]" + +Basic.Settings.Advanced="Advanced" +Basic.Settings.Advanced.General.ProcessPriority="Prayoridad sa Proseso" +Basic.Settings.Advanced.General.ProcessPriority.High="Mataas" +Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Higit sa Normal" +Basic.Settings.Advanced.General.ProcessPriority.Normal="Normal" +Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Mas mababa sa normal" +Basic.Settings.Advanced.General.ProcessPriority.Idle="Walang ginagawa" +Basic.Settings.Advanced.FormatWarning="Babala: Ang mga format ng kulay maliban sa NV12 ay pangunahing inilaan para sa pag-record, at hindi inirerekomenda kapag nag-stream. Maaaring mapalawak ng streaming ang paggamit ng CPU dahil sa conversion ng format ng kulay." +Basic.Settings.Advanced.Audio.BufferingTime="Audio Buffering Time" +Basic.Settings.Advanced.Video.ColorFormat="Format ng Kulay" +Basic.Settings.Advanced.Video.ColorSpace="Ang espasyong kulay ng YUV" +Basic.Settings.Advanced.Video.ColorRange="Ang saklaw ng kulay ng YUV" +Basic.Settings.Advanced.Video.ColorRange.Partial="Bahagyang" +Basic.Settings.Advanced.Video.ColorRange.Full="Buo" +Basic.Settings.Advanced.Audio.MonitoringDevice="Ang kagamitan para sa Audio Monitoring" +Basic.Settings.Advanced.Audio.MonitoringDevice.Default="I-Default" +Basic.Settings.Advanced.Audio.DisableAudioDucking="Huwag paganahin ang Windows audio ducking" +Basic.Settings.Advanced.StreamDelay="Ang Antala ng Stream" +Basic.Settings.Advanced.StreamDelay.Duration="Ang Katagalan (segundo)" +Basic.Settings.Advanced.StreamDelay.Preserve="Ingatang ang cutoff point (pataas ng antala) kapang kumokonekta" +Basic.Settings.Advanced.StreamDelay.MemoryUsage="Ang na estimang nagamit na memorya: %1 MB" +Basic.Settings.Advanced.Network="Network" +Basic.Settings.Advanced.Network.BindToIP="Ibigkis sa IP" +Basic.Settings.Advanced.Network.EnableNewSocketLoop="Paganahin ang bagong networking code" +Basic.Settings.Advanced.Network.EnableLowLatencyMode="Mababang latency mode" + +Basic.AdvAudio="Ang aria-arian ng Advanced Audio" +Basic.AdvAudio.Name="Pangalan" +Basic.AdvAudio.Volume="Kalakasan (%)" +Basic.AdvAudio.Mono="Downmix ito sa Mono" +Basic.AdvAudio.Panning="Ang Panning" +Basic.AdvAudio.SyncOffset="Ang Sync Offset (ms)" +Basic.AdvAudio.Monitoring="Ang subaybay ng Audio" +Basic.AdvAudio.Monitoring.None="I-Off ang Monitor" +Basic.AdvAudio.Monitoring.MonitorOnly="Monitor lamang (i-mute ang output)" +Basic.AdvAudio.Monitoring.Both="Monitor at Awput" +Basic.AdvAudio.AudioTracks="Mga Tracks" + +Basic.Settings.Hotkeys="Ang mga Hotkeys" +Basic.Settings.Hotkeys.Pair="Ang nabahaging kombinasyon ng susi na may '%1' akto sa toggles" + +Basic.Hotkeys.SelectScene="Lumipat sa eksena" + +Basic.SystemTray.Show="Ipakita" +Basic.SystemTray.Hide="Itago" + +Basic.SystemTray.Message.Reconnecting="Nadiskonek. Kumokonekta..." + +Hotkeys.Insert="Ipasok" +Hotkeys.Delete="Burahin" +Hotkeys.Home="Pinagmulan" +Hotkeys.End="Tapos" +Hotkeys.PageUp="Itaas ng Pahina" +Hotkeys.PageDown="Ibaba ng pahina" +Hotkeys.NumLock="Num Lock" +Hotkeys.ScrollLock="Scroll Lock" +Hotkeys.CapsLock="Caps Lock" +Hotkeys.Backspace="Backspace" +Hotkeys.Tab="Tab" +Hotkeys.Print="Printa" +Hotkeys.Pause="Itigil" +Hotkeys.Left="Kaliwa" +Hotkeys.Right="Kanan" +Hotkeys.Up="Itaas" +Hotkeys.Down="Ibaba" +Hotkeys.Windows="Windows" +Hotkeys.Super="Super" +Hotkeys.Menu="Pagpipilian" +Hotkeys.Space="Espasyo" +Hotkeys.NumpadNum="Numpad %1" +Hotkeys.NumpadMultiply="Paramihin ang Numpad" +Hotkeys.NumpadDivide="Hatiin ang Numpad" +Hotkeys.NumpadAdd="Magdagdag ng Numpad" +Hotkeys.NumpadSubtract="Magbawas ng Numpad" +Hotkeys.NumpadDecimal="Numero ng Numpad" +Hotkeys.AppleKeypadNum="%1 (Keypad)" +Hotkeys.AppleKeypadMultiply="* (Keypad)" +Hotkeys.AppleKeypadDivide="/ (Keypad)" +Hotkeys.AppleKeypadAdd="+ (Keypad)" +Hotkeys.AppleKeypadSubtract="- (Keypad)" +Hotkeys.AppleKeypadDecimal=". (Keypad)" +Hotkeys.AppleKeypadEqual="= (Keypad)" +Hotkeys.MouseButton="Mouse %1" + +Mute="I-Mute" +Unmute="I-Unmute" +Push-to-mute="Pindutin-para-i-mute" +Push-to-talk="Pindutan-para-magsalita" + +SceneItemShow="Ipakita '%1'" +SceneItemHide="Itago '%1'" + +OutputWarnings.NoTracksSelected="Dapat pumili ka ng kahit isang track" +OutputWarnings.MultiTrackRecording="Babala: Tiyak na pormat (gaya ng FLV) hindi suportado ang maraming tracks kada recording" +OutputWarnings.MP4Recording="Babala: Ang Recording na naka-save sa MP4 ay hindi unrecoverable kung ang file any hindi tinapos (e.g bilang resulta nito BSODs, power losses, atbp.). Kung gusto mo i-record ng maraming audio tracks isaalang-alang ang paggamit ng MKV at remux ang recording para sa mp4 pagkatapos nitong matapos (File->Remux Recordings)" + +FinalScene.Title="Tanggaling ang Eksena" +FinalScene.Text="Doon kailangan ng kahit isang eksena." +
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/he-IL.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/he-IL.ini
Changed
@@ -28,16 +28,21 @@ Mono="מונו" Stereo="סטריאו" DroppedFrames="השמטת תמונות %1 (%2%)" +StudioProgramProjector="מקרן מסך מלא (תוכנה)" PreviewProjector="מקרן מסך מלא (תצוגה מקדימה)" SceneProjector="מקרן מסך מלא (סצנה)" SourceProjector="מקרן מסך מלא (מקור)" +StudioProgramWindow="מקרן חלון (תוכנה)" PreviewWindow="הקרנה בחלון (תצוגה מקדימה)" SceneWindow="הקרנה בחלון (סצנה)" SourceWindow="הקרנה בחלון (מקור)" +MultiviewProjector="תצוגה מרובה (מסך מלא)" +MultiviewWindowed="תצוגה מרובה (חלון)" Clear="נקה" Revert="החזר לקדמותו" Show="הצג" Hide="הסתר" +UnhideAll="הצג הכל" Untitled="ללא כותרת" New="חדש" Duplicate="שכפל" @@ -66,6 +71,13 @@ RemuxRecordings="רימיקס הקלטות" Next="הבא" Back="קודם" +Defaults="ברירות מחדל" +HideMixer="מוחבא בתוך המיקסר" +TransitionOverride="מעבר דרוס" +None="ללא" +StudioMode.Preview="תצוגה מקדימה" +StudioMode.Program="תוכנה" +ShowInMultiview="הראה בתצוגה מרובה" AlreadyRunning.Title="OBS פועל כבר" AlreadyRunning.Text="OBS פועל כבר! אלא אם התכוונת לעשות את זה, אנא סגור כל מופע קיים לפני נסיון להפעיל מופע חדש. אנא בדוק אם קיים מופע הגדר ממוזער במגש המערכת." @@ -110,6 +122,7 @@ Basic.AutoConfig.StreamPage.PreferHardwareEncoding="העדף קידוד בחומרה" Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="קידוד בחומרה מבטלת רוב השימוש ב- CPU, אבל עשויים לדרוש קצב נתונים גבוה יותר בכדי להשיג את אותה רמת איכות." Basic.AutoConfig.StreamPage.StreamWarning.Title="אזהרת זרם" +Basic.AutoConfig.StreamPage.StreamWarning.Text="בדיקת רוחב הפס עומדת להזרים נתוני וידאו אקראיים ללא שמע לערוץ שלך. אם אתה מסוגל, מומלץ לבטל באופן זמני את שמירת קטעי הוידאו של הזרם וקבע את הזרם לפרטי עד לאחר שהבדיקה תסתיים. להמשיך?" Basic.AutoConfig.TestPage="תוצאות סופיות" Basic.AutoConfig.TestPage.SubTitle.Testing="התוכנית מתבצעת עכשיו סט של בדיקות כדי להעריך את ההגדרות המיטביות" Basic.AutoConfig.TestPage.SubTitle.Complete="הבדיקה הסתיימה" @@ -156,6 +169,7 @@ Updater.NoUpdatesAvailable.Text="אין עדכונים זמינים כעת" Updater.FailedToLaunch="נכשלה הפעלת העידכון" Updater.GameCaptureActive.Title="לכידת משחק פעיל" +Updater.GameCaptureActive.Text="לכידת משחק נמצאת כעת בשימוש. בבקשה סגור את המשחקים/תוכנות שנמצאים בלכידה (או הפעל מחדש את ווינדוס) ונסה שינת." QuickTransitions.SwapScenes="החלף סצינות תצוגה מקדימה/פלט לאחר המעבר" QuickTransitions.SwapScenesTT="החלף הסצינות של התצוגה המקדימה ושל הפלט לאחר המעבר (באם הסצינה המקורית של הפלט עדיין קיימת). \n פעולה זו לא תבטל כל שינוי שייתכן ובוצע לסצינה המקורית של הפלט." @@ -200,6 +214,7 @@ Output.StartStreamFailed="נכשלה הפעלת זרימה" Output.StartRecordingFailed="נכשלה הפעלת הקלטה" Output.StartReplayFailed="נכשלה הפעלת מאגר החוזר" +Output.StartFailedGeneric="הפלט נכשל. בבקשה בדוק את הרישומים עבור. \n\nNote: אם אתה משתמש בNVNEC או AMD מקודדים, הקפד שמנהלי ההתקן של הכרטיס מסך מעודכנים." Output.ConnectFail.Title="ההתחברות נכשלה" Output.ConnectFail.BadPath="URL לא חוקי של נתיב או חיבור. נא בדוק את ההגדרות שלך כדי לוודא כי הם נכונים." @@ -214,6 +229,8 @@ Output.RecordNoSpace.Msg="אין די שטח דיסק כדי להמשיך הקלטה." Output.RecordError.Title="שגיאה הקלטה" Output.RecordError.Msg="אירעה שגיאה לא מוגדרת בזמן ההקלטה." +Output.ReplayBuffer.NoHotkey.Title="אין מקש קיצור שנבחר!" +Output.ReplayBuffer.NoHotkey.Msg="אין hotkey שמור למאגר החוזר. בבקשה הגדר את \"שמור\" hotkey לשימוש עבור שמירת מאגר חוזר להקלטות." Output.BadPath.Title="נתיב קובץ לא תקין" Output.BadPath.Text="נתיב פלט הקובץ שהוגדר אינו חוקי. נא בדוק את הגדרות כדי לוודא שנתיב קובץ תקני נקבע." @@ -295,6 +312,8 @@ RenameProfile.Title="שנה שם פרופיל" +Basic.Main.MixerRename.Title="שינוי שם מקור שמע" +Basic.Main.MixerRename.Text="בבקשה הכנס את שם קובץ השמע" Basic.Main.PreviewDisabled="תצוגה מקדימה אינה זמינה כעת" @@ -374,6 +393,7 @@ Basic.Main.Scenes="סצינות" Basic.Main.Sources="מקורות" +Basic.Main.Controls="בקרה" Basic.Main.Connecting="מתחבר..." Basic.Main.StartRecording="התחל הקלטה" Basic.Main.StartReplayBuffer="התחל מאגר החוזר" @@ -429,19 +449,27 @@ Basic.MainMenu.View="&מבט" Basic.MainMenu.View.Toolbars="&סרגלי כלים" +Basic.MainMenu.View.Docks="עגינה" +Basic.MainMenu.View.Docks.ResetUI="איפוס UI" +Basic.MainMenu.View.Docks.LockUI="נעילת UI" Basic.MainMenu.View.Toolbars.Listboxes="&תיבות רשימה" Basic.MainMenu.View.SceneTransitions="&מעברי סצינות" Basic.MainMenu.View.StatusBar="&שורת מצב" +Basic.MainMenu.View.Fullscreen.Interface="ממשק מסך מלא" Basic.MainMenu.SceneCollection="אוסף סצינות(&S)" Basic.MainMenu.Profile="פרופיל(&P)" Basic.MainMenu.Profile.Import="ייבא פרופיל" Basic.MainMenu.Profile.Export="ייצא פרופיל" +Basic.MainMenu.SceneCollection.Import="ייבא אוסף סצינות" +Basic.MainMenu.SceneCollection.Export="ייצא אוסף סצנות" Basic.MainMenu.Profile.Exists="הפרופיל קיים כבר" +Basic.MainMenu.SceneCollection.Exists="אוסף הסצנות כבר קיים" Basic.MainMenu.Tools="& כלים" Basic.MainMenu.Help="עזרה(&H)" +Basic.MainMenu.Help.HelpPortal="עזרה & פורטל" Basic.MainMenu.Help.Website="בקר אתר(&W)" Basic.MainMenu.Help.Logs="קבצי יומן רישום(&L)" Basic.MainMenu.Help.Logs.ShowLogs="הצג קבצי יומן רישום(&S)" @@ -458,10 +486,12 @@ Basic.Settings.General.Theme="ערכת עיצוב" Basic.Settings.General.Language="שפה" Basic.Settings.General.EnableAutoUpdates="בדוק באופן אוטומטי אם יש עדכונים בעת ההפעלה" +Basic.Settings.General.OpenStatsOnStartup="פתח סטטיסטיקת דיאלוג בעת ההפעלה" Basic.Settings.General.WarnBeforeStartingStream="הצג תיבת דו-שיח לאישור בעת הפעלת זרם נתונים" Basic.Settings.General.WarnBeforeStoppingStream="הצג תיבת דו-שיח לאישור בעת עצירת זרם נתונים" Basic.Settings.General.Projectors="מקרנים" Basic.Settings.General.HideProjectorCursor="הסתר את הסמן מעל מקרנים" +Basic.Settings.General.ProjectorAlwaysOnTop="הפוך מקרנים תמיד בעליון" Basic.Settings.General.Snapping="יישור הצמדת מקור" Basic.Settings.General.ScreenSnapping="הצמד מקורות לקצה המסך" Basic.Settings.General.CenterSnapping="הצמד מקורות למרכז אופקי ואנכי" @@ -469,10 +499,19 @@ Basic.Settings.General.SnapDistance="רגישות צמד" Basic.Settings.General.RecordWhenStreaming="הקלטה אוטומטית בעת הזרמת נתונים" Basic.Settings.General.KeepRecordingWhenStreamStops="המשך הקלטה כאשר הזרמת נתונים מפסיקה" +Basic.Settings.General.ReplayBufferWhileStreaming="הפעל מאגר חוזר באופן אוטומטי בעת הזרמה" +Basic.Settings.General.KeepReplayBufferStreamStops="השאר את המאגר החוזר פעיל כאשר ההזרמה מפסיקה" Basic.Settings.General.SysTray="מגש המערכת" Basic.Settings.General.SysTrayWhenStarted="מזער למגש המערכת בתחילה" Basic.Settings.General.SystemTrayHideMinimize="מזער תמיד למגש המערכת במקום שורת המשימות" Basic.Settings.General.SaveProjectors="שמור את המקרנים ביציאה" +Basic.Settings.General.SwitchOnDoubleClick="מעבר לסצנה על ידי הקלקה כפולה" +Basic.Settings.General.StudioPortraitLayout="אפשר פריסה אנכית/דיוקן" +Basic.Settings.General.MultiviewLayout="פריסת תצוגה מרובה" +Basic.Settings.General.MultiviewLayout.Horizontal.Top="אופקי, עליון" +Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="אופקי, תחתון" +Basic.Settings.General.MultiviewLayout.Vertical.Left="אנכי, שמאל" +Basic.Settings.General.MultiviewLayout.Vertical.Right="אנכי, ימין" Basic.Settings.Stream="זרם נתונים" Basic.Settings.Stream.StreamType="סוג זרם נתונים" @@ -592,6 +631,14 @@ Basic.Settings.Audio="אודיו" Basic.Settings.Audio.SampleRate="קצב דגימה" Basic.Settings.Audio.Channels="ערוצים" +Basic.Settings.Audio.MeterDecayRate="קצב דעיכה ממד שמע" +Basic.Settings.Audio.MeterDecayRate.Fast="מהיר" +Basic.Settings.Audio.MeterDecayRate.Medium="בינוני (סוג I PPM)" +Basic.Settings.Audio.MeterDecayRate.Slow="איטי (סוג II PPM)" +Basic.Settings.Audio.MultiChannelWarning.Enabled="אזהרה: שמע צליל היקפי מאופשר." +Basic.Settings.Audio.MultichannelWarning="אם הזרימה, בדוק את הזרמת השירות תומך בסראונד סאונד להבלע ואת היקפי הסראונד פלייבק. טוויץ',פייסבוק,360 Liev, מיקסר RTMP, Smashcast דוגמאות לאיפה שסראונד סאונד הוא נתמך. למרות פייסבוק לייב ויוטיוב לייב שניהם מאפשרים סראונד להבלע, פייסבוק לייב משנה לסטריאו ויוטיוב לייב מפעיל בשני ערוצים. \n\nOBS Studio מסנן עם הסראונד סאונד, למרות תמיכת תוסף VST אינו מאובטח." +Basic.Settings.Audio.MultichannelWarning.Title="האם להפעיל שמע צליל היקפי?" +Basic.Settings.Audio.MultichannelWarning.Confirm="אתה בטוח שאתה רוצה לאפשר קול שמע מקיף?" Basic.Settings.Audio.DesktopDevice="התקן שמע בשולחן עבודה" Basic.Settings.Audio.DesktopDevice2="התקן שמע בשולחן עבודה 2" Basic.Settings.Audio.AuxDevice="התקן שמע מיקרופון/עזר" @@ -608,6 +655,7 @@ Basic.Settings.Advanced.General.ProcessPriority.High="גבוה" Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="מעל לרגיל" Basic.Settings.Advanced.General.ProcessPriority.Normal="רגיל" +Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="מתחת לעדיפות רגילה" Basic.Settings.Advanced.General.ProcessPriority.Idle="לא פעיל" Basic.Settings.Advanced.FormatWarning="אזהרה: תבניות צבע שונות מ-NV12 נועדו בעיקר עבור הקלטה, והם אינם מומלצות בעת הזרמת נתונים. הזרמת נתונים עלולה לגרום למשאבי עיבוד מוגברים כתוצאה מהמרת תבנית צבע." Basic.Settings.Advanced.Audio.BufferingTime="זמן אוגר שמע"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/ja-JP.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/ja-JP.ini
Changed
@@ -28,15 +28,15 @@ Mono="モノラル" Stereo="ステレオ" DroppedFrames="ドロップしたフレーム %1 (%2%)" -StudioProgramProjector="全画面プロジェクター (プログラム)" +StudioProgramProjector="全画面プロジェクター (番組)" PreviewProjector="全画面プロジェクター (プレビュー)" SceneProjector="全画面プロジェクター (シーン)" SourceProjector="全画面プロジェクター (ソース)" -StudioProgramWindow="ウィンドウ付きプロジェクター (プログラム)" +StudioProgramWindow="ウィンドウ プロジェクター (番組)" PreviewWindow="ウィンドウ プロジェクター (プレビュー)" SceneWindow="ウィンドウ プロジェクター (シーン)" SourceWindow="ウィンドウ プロジェクター (ソース)" -MultiviewProjector="マルチビュー (フルスクリーン)" +MultiviewProjector="マルチビュー (全画面)" MultiviewWindowed="マルチビュー (ウィンドウ)" Clear="クリア" Revert="元に戻す"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/ka-GE.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/ka-GE.ini
Changed
@@ -1,6 +1,9 @@ +Language="ქართული" +Region="საქართველო" OK="კაი" +Apply="მიღება" Cancel="გაუქმება" Close="დახურვა" Save="შენახვა" @@ -11,16 +14,22 @@ Add="დამატება" Remove="წაშლა" Rename="გადარქმევა" +Interact="ურთიერთქმედება" Filters="ფილტრები" +Properties="პარამეტრები" MoveUp="ზევით" MoveDown="ქვევით" Settings="პარამეტრები" +Display="ეკრანი" Name="სახელი" Exit="გასვლა" Mixer="მიქშერი" Browse="მოძიება" Mono="მონო" Stereo="სტერეო" +DroppedFrames="კადრების ვარდნა %1 (%2%)" +Clear="გასუფთავება" +Revert="დაბრუნება" Show="ჩვენება" Hide="დამალვა" UnhideAll="ყველაფრის გამოჩენა" @@ -30,10 +39,32 @@ Enable="ჩართვა" DisableOSXVSync="OSX V-Sync-ის გამორთვა" ResetOSXVSyncOnExit="OSX V-Sync-ის გადატვირთვა გასვლისას" +HighResourceUsage="დამშიფრავი გადაიტვირთა! სცადეთ ვიდეოს პარამეტრების შემცირება, ან უფრო სწრაფი შიფრაციის პარამეტრების გამოყენება." +Transition="გადასვლა" +QuickTransitions="სწრაფი გადასვლები" +Left="მარცხნივ" +Right="მარჯვნივ" +Top="ზემოთ" +Bottom="ქვემოთ" +Reset="განულება" +Hours="საათი" Minutes="წუთი" Seconds="წამი" - - +Deprecated="მოძველებული" +ReplayBuffer="უკან გადახვევის დრო" +Import="შემოტანა" +Export="გატანა" +Copy="დაკოპირება" +Paste="ჩასმა" +Next="შემდეგ" +Back="უკან" +Defaults="ნაგულისხმევი" + +AlreadyRunning.Title="OBS უკვე გაშვებულია" +AlreadyRunning.Text="OBS უკვე გაშვებულია! გთხოვთ, ჯერ დახუროთ OBS-ის ყველა გაშვებული პროცესი, სანამ ახლის გაშვებას შეეცდებით. თუ მითითებული გაქვთ, რომ დახურვის ნაცვლად, OBS სისტემურ არეში უნდა ჩაიკეცოს, გთხოვთ მანდაც გადაამოწმოთ, დარჩენილი ხომ არაა." +AlreadyRunning.LaunchAnyway="მაინც გაშვება" + +Copy.Filters="ფილტრების დაკოპირება"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/nb-NO.ini
Changed
@@ -61,7 +61,7 @@ Minutes="Minutter" Seconds="Sekunder" Deprecated="Foreldet" -ReplayBuffer="Omspill Buffer" +ReplayBuffer="Omspillingsbuffer" Import="Importer" Export="Eksporter" Copy="Kopier"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/nn-NO.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/nn-NO.ini
Changed
@@ -7,6 +7,7 @@ Cancel="Avbryt" Close="Lukk" Save="Lagre" +Discard="Bryt av" Disable="Skrue av" Yes="Ja" No="Nei" @@ -22,9 +23,13 @@ Display="Skjerm" Name="Namn" Exit="Avslutt" +Mixer="Blandar" Browse="Bla gjennom" Mono="Mono" Stereo="Stereo" +DroppedFrames="Slopne bilete %1 (%2%)" +StudioProgramProjector="Fullskjermframvisar (program)" +PreviewProjector="Fullskjermframvisar (førehandsvising)" MultiviewProjector="Fleirvising (Fullskjerm)" MultiviewWindowed="Fleirvising (i vindauge)" Clear="Tøm" @@ -33,6 +38,22 @@ Untitled="Utan namn" New="Ny" Enable="Aktiver" +Left="Venstre" +Right="Høgre" +Top="Topp" +Bottom="Botn" +Reset="Attendeset" +Hours="Timar" +Minutes="Minutt" +Seconds="Sekund" +Import="Innfør" +Export="Utfør" +Copy="Kopier" +Paste="Lim inn" +Next="Neste" +Back="Attende" +Defaults="Standardar" +None="Ingen" StudioMode.Preview="Førehandsvising" StudioMode.Program="Program"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/ru-RU.ini
Changed
@@ -171,11 +171,11 @@ Updater.GameCaptureActive.Title="Производится захват игры" Updater.GameCaptureActive.Text="Библиотека захвата игр уже используется. Закройте захватываемые игры/программы (или перезапустите Windows) и попробуйте ещё раз." -QuickTransitions.SwapScenes="Замена Просмотра/Вывода Сцены После Перехода" -QuickTransitions.SwapScenesTT="Замена просмотра и вывода сцены после перехода (если выходная оригинальная сцена до сих пор существует).\nЭто будет не отмена каких-либо изменений, что, возможно, было сделано в выходной оригинальной сцены." -QuickTransitions.DuplicateScene="Повторяющиеся Сцены" +QuickTransitions.SwapScenes="Менять местами сцены предпросмотра и вывода после перехода" +QuickTransitions.SwapScenesTT="Меняет местами сцены предпросмотра и вывода после перехода (если оригинальная выходная сцена до сих пор существует).\nЭто не отменяет никаких изменений, которые возможно были сделаны в оригинальной выходной сцене." +QuickTransitions.DuplicateScene="Дублировать сцену" QuickTransitions.DuplicateSceneTT="При редактировании одной и той же сцены, функция позволяет трансформировать редактирования/видимости источников без изменения выхода.\nДля редактирования свойств источников без изменения выходного сигнала, включить \"дублировать источники'.\nИзменение этого параметра приведет к сбросу выходного сигнала в сцене (если оно еще существует)." -QuickTransitions.EditProperties="Дублировать Источники" +QuickTransitions.EditProperties="Дублировать источники" QuickTransitions.EditPropertiesTT="При редактировании одной и той же сцены, функция позволяет редактировать свойства источников без изменения выхода.\nЭто может только использоваться, если \"Повторяющиеся Сцены\" включен.\nНекоторые источники (такие как захват или медиа-источники) не поддерживаются и не могут быть отредактированы отдельно.\nИзменение этого параметра приведет к сбросу выходного сигнала в сцене (если оно еще существует).\n\nПредупреждение: поскольку источники будут дублироваться, это может потребовать дополнительных системных ресурсов или видео." QuickTransitions.HotkeyName="Быстрый переход: %1" @@ -274,10 +274,10 @@ Basic.Main.PreviewConextMenu.Enable="Включить предпросмотр" -ScaleFiltering="Фильтрация масштаба" -ScaleFiltering.Point="Точечная" -ScaleFiltering.Bilinear="Билинейная" -ScaleFiltering.Bicubic="Бикубическая" +ScaleFiltering="Фильтр масштабирования" +ScaleFiltering.Point="Точечный" +ScaleFiltering.Bilinear="Билинейный" +ScaleFiltering.Bicubic="Бикубический" ScaleFiltering.Lanczos="Метод Ланцоша" Deinterlacing="Устранение чересстрочности" @@ -399,12 +399,12 @@ Basic.Main.StartReplayBuffer="Запустить повтор" Basic.Main.StartStreaming="Запустить трансляцию" Basic.Main.StopRecording="Остановить запись" -Basic.Main.StoppingRecording="Остановка Записи..." +Basic.Main.StoppingRecording="Остановка записи..." Basic.Main.StopReplayBuffer="Остановить повтор" Basic.Main.StoppingReplayBuffer="Остановка повтора..." Basic.Main.StopStreaming="Остановить трансляцию" Basic.Main.StoppingStreaming="Остановка вещания..." -Basic.Main.ForceStopStreaming="Остановить передачу (отменить задержку)" +Basic.Main.ForceStopStreaming="Остановить трансляцию (сбросить задержку)" Basic.MainMenu.File="&Файл" Basic.MainMenu.File.Export="&Экспорт" @@ -413,7 +413,7 @@ Basic.MainMenu.File.Remux="Ре&мультиплексирование записей" Basic.MainMenu.File.Settings="&Настройки" Basic.MainMenu.File.ShowSettingsFolder="Показать папку с настройками" -Basic.MainMenu.File.ShowProfileFolder="Показать папку профиля" +Basic.MainMenu.File.ShowProfileFolder="Показать папку с профилями" Basic.MainMenu.AlwaysOnTop="&Поверх других окон" Basic.MainMenu.File.Exit="&Выход" @@ -423,15 +423,15 @@ Basic.MainMenu.Edit.UndoAction="&Отменить $1" Basic.MainMenu.Edit.RedoAction="&Повторить $1" Basic.MainMenu.Edit.LockPreview="&Заблокировать предпросмотр" -Basic.MainMenu.Edit.Scale="Просмотр и масштабирование" +Basic.MainMenu.Edit.Scale="&Масштабирование предпросмотра" Basic.MainMenu.Edit.Scale.Window="Масштаб окна" Basic.MainMenu.Edit.Scale.Canvas="Холст (%1x%2)" Basic.MainMenu.Edit.Scale.Output="Вывод (%1x%2)" -Basic.MainMenu.Edit.Transform="&Преобразовать" -Basic.MainMenu.Edit.Transform.EditTransform="&Изменить преобразование..." -Basic.MainMenu.Edit.Transform.CopyTransform="Копировать преобразование" -Basic.MainMenu.Edit.Transform.PasteTransform="Вставить преобразование" -Basic.MainMenu.Edit.Transform.ResetTransform="&Сбросить преобразование" +Basic.MainMenu.Edit.Transform="&Трансформировать" +Basic.MainMenu.Edit.Transform.EditTransform="&Изменить отображение..." +Basic.MainMenu.Edit.Transform.CopyTransform="Скопировать трансформацию" +Basic.MainMenu.Edit.Transform.PasteTransform="Вставить трансформацию" +Basic.MainMenu.Edit.Transform.ResetTransform="&Сбросить трансформацию" Basic.MainMenu.Edit.Transform.Rotate90CW="Повернуть на 90 градусов по часовой" Basic.MainMenu.Edit.Transform.Rotate90CCW="Повернуть на 90 градусов против часовой" Basic.MainMenu.Edit.Transform.Rotate180="Повернуть на 180 градусов" @@ -441,7 +441,7 @@ Basic.MainMenu.Edit.Transform.StretchToScreen="&Растянуть на весь экран" Basic.MainMenu.Edit.Transform.CenterToScreen="&Разместить по центру экрана" Basic.MainMenu.Edit.Order="&Порядок" -Basic.MainMenu.Edit.Order.MoveUp="Переместить &Выше" +Basic.MainMenu.Edit.Order.MoveUp="Переместить &выше" Basic.MainMenu.Edit.Order.MoveDown="Переместить &Ниже" Basic.MainMenu.Edit.Order.MoveToTop="Переместить &Наверх" Basic.MainMenu.Edit.Order.MoveToBottom="Переместить &Вниз" @@ -491,16 +491,16 @@ Basic.Settings.General.WarnBeforeStoppingStream="Показывать окно подтверждения при остановке трансляции" Basic.Settings.General.Projectors="Проекторы" Basic.Settings.General.HideProjectorCursor="Скрыть курсор за проекторы" -Basic.Settings.General.ProjectorAlwaysOnTop="Показывать проекторы поверх всего остального" +Basic.Settings.General.ProjectorAlwaysOnTop="Показывать проекторы поверх всех окон" Basic.Settings.General.Snapping="Привязка расположения источника" Basic.Settings.General.ScreenSnapping="Привязка к краю экрана" Basic.Settings.General.CenterSnapping="Привязка к центру по горизонтали и вертикали" Basic.Settings.General.SourceSnapping="Привязка к другим источникам" Basic.Settings.General.SnapDistance="Чувствительность привязки" -Basic.Settings.General.RecordWhenStreaming="Автоматическая запись при стриме" -Basic.Settings.General.KeepRecordingWhenStreamStops="Продолжить запись, когда стрим остановится" +Basic.Settings.General.RecordWhenStreaming="Автоматически включать запись во время трансляции" +Basic.Settings.General.KeepRecordingWhenStreamStops="Продолжать запись после завершения трансляции" Basic.Settings.General.ReplayBufferWhileStreaming="Автоматически запускать буфер повтора во время трансляции" -Basic.Settings.General.KeepReplayBufferStreamStops="Сохранять буфер повтора активным когда останавливается трансляция" +Basic.Settings.General.KeepReplayBufferStreamStops="Сохранять буфер повтора активным после завершения трансляции" Basic.Settings.General.SysTray="Системный трей" Basic.Settings.General.SysTrayWhenStarted="Скрывать окно в системный трей при запуске" Basic.Settings.General.SystemTrayHideMinimize="Всегда сворачивать в трей вместо панели задач" @@ -534,7 +534,7 @@ Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Примечание: Убедитесь, что установили горячую клавишу для воспроизведения буфера в разделе горячие клавиши)" Basic.Settings.Output.ReplayBuffer.Prefix="Префикс имени файла повтора" Basic.Settings.Output.ReplayBuffer.Suffix="Суффикс" -Basic.Settings.Output.Simple.SavePath="Путь к записи" +Basic.Settings.Output.Simple.SavePath="Путь записи" Basic.Settings.Output.Simple.RecordingQuality="Качество записи" Basic.Settings.Output.Simple.RecordingQuality.Stream="То же, что у трансляции" Basic.Settings.Output.Simple.RecordingQuality.Small="Высокое качество, средний размер файла" @@ -552,8 +552,8 @@ Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Аппаратный (AМD)" Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Аппаратный (NVENC)" Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Программный (x264 с низкой нагрузкой на ЦП, увеличивает размер файла)" -Basic.Settings.Output.VideoBitrate="Видео битрейт" -Basic.Settings.Output.AudioBitrate="Аудио битрейт" +Basic.Settings.Output.VideoBitrate="Битрейт видео" +Basic.Settings.Output.AudioBitrate="Битрейт аудио" Basic.Settings.Output.Reconnect="Автопереподключение" Basic.Settings.Output.RetryDelay="Переподключиться через (секунд)" Basic.Settings.Output.MaxRetries="Количество попыток подключиться"
View file
obs-studio-21.1.2.tar.xz/UI/data/locale/sq-AL.ini
Added
@@ -0,0 +1,170 @@ + +Language="Gjuha Angleze" +Region="Shtetet e Bashkuara" + +OK="OK" +Apply="Aplikoni" +Cancel="Anuloni" +Close="Mbylle" +Save="Ruaj" +Discard="Mos e ruaj" +Disable="Çaktivizo" +Yes="Po" +No="Jo" +Add="Shto" +Remove="Largoje" +Rename="Riemërto" +Interact="Bashkëveprim" +Filters="Filterar" +Properties="Vetitë" +MoveUp="Lëvize lart" +MoveDown="Lëvize poshtë" +Settings="Cilësimet" +Display="Ekrani" +Name="Emri" +Exit="Dil" +Mixer="Mikser" +Browse="Shfleto" +Mono="Mono" +Stereo="Stereo" +DroppedFrames="Kornizat e rëna %1 (%2%)" +StudioProgramProjector="Projektor me ekran të plotë (Program)" +PreviewProjector="Projektorë me ekran të plotë (Parashikim)" +SceneProjector="Ekran me ekran të plotë (Skena)" +SourceProjector="Projektorë me ekran të plotë (Burimi)" +StudioProgramWindow="Projektor Windowed (Program)" +PreviewWindow="Projektor Windowed (Parashikim)" +SceneWindow="Projektor Windowed (Skena)" +SourceWindow="Projektor Windowed (Burimi)" +MultiviewProjector="Shumë pamje (Ekran i plotë)" +MultiviewWindowed="Shumë pamje (Windowed)" +Clear="Pastro" +Revert="Rikthe" +Show="Shfaq" +Hide="Fsheh" +UnhideAll="Zbuloni të gjitha" +Untitled="I patitulluar" +New="I ri" +Duplicate="Dublikatë" +Enable="Aktivizo" +DisableOSXVSync="Çaktivizo OSX V-Sync" +ResetOSXVSyncOnExit="Rivendos OSX V-Sync në Mbyllje" +HighResourceUsage="Kodimi i mbingarkuar! Merrni parasysh uljen e cilësimeve të videos ose duke përdorur një parazgjedhje më të shpejtë të kodimit." +Transition="Tranzicion" +QuickTransitions="Tranzicione të shpejta" +Left="Majtas" +Right="Djathtas" +Top="Kreu" +Bottom="Fundi" +Reset="Rivë" +Hours="Orë" +Minutes="Minuta" +Seconds="Sekonda" +Deprecated="I pazëvëndësueshëm" +ReplayBuffer="Rifillimi Lustrues" +Import="Importo" +Export="Eksporto" +Copy="Kopjo" +Paste="Ngjit" +PasteReference="Ngjit (Referim)" +PasteDuplicate="Ngjit (Duplikatë)" +RemuxRecordings="Regjistrimet e Remux" +Next="Tjeter" +Back="Prapa" +Defaults="Parazgjedhura" +HideMixer="Fshiheni në Mixer" +TransitionOverride="Zhvendosja e tranzicionit" +None="Asnje" +StudioMode.Preview="Inspektim" +StudioMode.Program="Program" +ShowInMultiview="Shfaqe në Shumë Pamje" + +AlreadyRunning.Title="OBS tashmë po funksion" +AlreadyRunning.Text="OBS tashmë po kandidon! Nëse nuk keni ndërmend ta bëni këtë, mbyllni çdo rast ekzistues të OBS para se të provoni të shkoni në një instancë të re. Nëse keni OBS vendosur për të minimizuar në tabaka e sistemit, ju lutemi kontrolloni për të parë nëse vazhdon të ekzekutohet atje." +AlreadyRunning.LaunchAnyway="Filloje ne nje menyre" + +Copy.Filters="Kopjo Filterat" +Paste.Filters="Ngjit Filterat" + +BandwidthTest.Region="Regjioni" +BandwidthTest.Region.US="Shtetet e Bashkuara" +BandwidthTest.Region.EU="Evropë" +BandwidthTest.Region.Asia="Azi" +BandwidthTest.Region.Other="Të tjera" + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/sv-SE.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/sv-SE.ini
Changed
@@ -36,8 +36,8 @@ PreviewWindow="Fönsterprojektor (förhandsvisning)" SceneWindow="Fönsterprojektor (scen)" SourceWindow="Fönsterprojektor (källa)" -MultiviewProjector="Flervy (helskärm)" -MultiviewWindowed="Flervy (fönster)" +MultiviewProjector="Multivy (helskärm)" +MultiviewWindowed="Multivy (fönster)" Clear="Rensa" Revert="Återgå" Show="Visa" @@ -77,7 +77,7 @@ None="Ingen" StudioMode.Preview="Förhandsvisning" StudioMode.Program="Program" -ShowInMultiview="Visa i flervy" +ShowInMultiview="Visa i multivy" AlreadyRunning.Title="OBS körs redan" AlreadyRunning.Text="OBS körs redan! Såvida du gjorde detta med flit, stäng ned alla befintliga instanser av OBS innan du försöker köra en ny instans. Om du har minimerat OBS till systemfältet, kontroller om det fortfarande körs där." @@ -507,7 +507,7 @@ Basic.Settings.General.SaveProjectors="Spara projektorer vid avslut" Basic.Settings.General.SwitchOnDoubleClick="Övergång till scen vid dubbelklick" Basic.Settings.General.StudioPortraitLayout="Aktivera porträtt-/vertikalt utseende" -Basic.Settings.General.MultiviewLayout="Multivisningslayout" +Basic.Settings.General.MultiviewLayout="Utseende för multivy" Basic.Settings.General.MultiviewLayout.Horizontal.Top="Horisontal, överkant" Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Horisontal, nederkant" Basic.Settings.General.MultiviewLayout.Vertical.Left="Vertikal, vänster"
View file
obs-studio-21.1.2.tar.xz/UI/data/locale/tl-PH.ini
Added
@@ -0,0 +1,751 @@ + +Language="Ingles" +Region="Estados Unidos" + +OK="OK" +Apply="Gamitin" +Cancel="Kanselahin" +Close="Isara" +Save="I-save" +Discard="Alisin" +Disable="I-disable" +Yes="Oo" +No="Hindi" +Add="Idagdag" +Remove="Tanggalin" +Rename="Palitan ang pangalan" +Interact="Interact" +Filters="Pansala" +Properties="Mga Katangian" +MoveUp="I-taas" +MoveDown="I-baba" +Settings="Mga Setting" +Display="Ipakita" +Name="Pangalan" +Exit="Lumabas" +Mixer="Mixer" +Browse="Browse" +Mono="Mono" +Stereo="Stereo" +DroppedFrames="Mga imaheng hindi sinali %1 (%2%)" +StudioProgramProjector="Fullscreen Projector (Programa)" +PreviewProjector="Fullscreen Projector (Preview)" +SceneProjector="Fullscreen Projector (Eksena)" +SourceProjector="Fullscreen Projector (Pinagmulan)" +StudioProgramWindow="Windowed Projector (Programa)" +PreviewWindow="Windowed Projector (Preview)" +SceneWindow="Windowed Projector (Eksena)" +SourceWindow="Windowed Projector (Pinagmulan)" +MultiviewProjector="Multiview (Fullscreen)" +MultiviewWindowed="Multiview (Windowed)" +Clear="Linisin" +Revert="Ibalik" +Show="Ipakita" +Hide="Itago" +UnhideAll="Ipakita Lahat" +Untitled="Walang pamagat" +New="Bago" +Duplicate="Kahalintulad" +Enable="I-enable" +DisableOSXVSync="I-disable ang OSX V-Sync" +ResetOSXVSyncOnExit="I-set muli ang OSX V-Sync sa Exit" +HighResourceUsage="Labis na ang karga sa pag-eencode! Pagisipan ang pagpapababa ng mga video setting o ang pag-gamit ng mas mabilis na encoding preset." +Transition="Transisyon" +QuickTransitions="Mabilis na mga Transisyon" +Left="Kaliwa" +Right="Kanan" +Top="Tuktok" +Bottom="Pinakababa" +Reset="I-set muli" +Hours="Mga oras" +Minutes="Mga minuto" +Seconds="Mga segundo" +Deprecated="Hindi na ginagamit" +ReplayBuffer="Replay Buffer" +Import="I-angkat" +Export="I-export" +Copy="Kopyahin" +Paste="I-paste" +PasteReference="I-paste (Reperensya)" +PasteDuplicate="I-paste (Kopya)" +RemuxRecordings="Remux Recordings" +Next="Sunod" +Back="Bumalik" +Defaults="Mga Default" +HideMixer="Itago sa Mixer" +TransitionOverride="Pagpapawalang-bisa ng Transisyon" +None="Wala" +StudioMode.Preview="Preview" +StudioMode.Program="Programa" +ShowInMultiview="Ipakita sa Multiview" + +AlreadyRunning.Title="Ang OBS ay tumatakbo na" +AlreadyRunning.Text="Ang OBS ay tumatakbo na! Kung hindi mo ito sinasadya, mangyari lamang patayin ang mga umiiral na OBS bago subukang magpatakbo ng bago. Kung ikaw ay may OBS set na kailangan i-minimize sa system tray, mangyari lamang tingnan kung ito ay tumatakbo pa doon." +AlreadyRunning.LaunchAnyway="Ilunsad pa rin" + +Copy.Filters="Kopyahin ang mga Panala" +Paste.Filters="I-paste ang mga Panala" + +BandwidthTest.Region="Rehiyon" +BandwidthTest.Region.US="Estados Unidos" +BandwidthTest.Region.EU="Europa" +BandwidthTest.Region.Asia="Asya" +BandwidthTest.Region.Other="Iba pa" + +Basic.FirstStartup.RunWizard="Nais mo bang patakbuhin ang auto-configuration wizard? Maaari mo ring i-configure ang iyong mga setting ng mano-mano sa pamamagitan ng pagpindot ng Settings na button sa pangunahing window." +Basic.FirstStartup.RunWizard.BetaWarning="(Tandaan: Ang auto-configuration wizard ay kasukuyang nasa beta)" +Basic.FirstStartup.RunWizard.NoClicked="Kung magbabago ang iyong isip, maaari mong patakbuhin ang auto-configuration wizard sa anumang oras mula muli sa Tools na menu." + +Basic.AutoConfig="Auto-Configuration Wizard" +Basic.AutoConfig.Beta="Auto-Configuration Wizard (Beta)" +Basic.AutoConfig.ApplySettings="Gamitin ang mga Setting" +Basic.AutoConfig.StartPage="Impormasyon ukol sa Paggamit" +Basic.AutoConfig.StartPage.SubTitle="Tukuyin kung para saan mo gustong gamitin ang programa" +Basic.AutoConfig.StartPage.PrioritizeStreaming="I-optimize para sa pag-stream, pangalawa lamang pag-rerekord" +Basic.AutoConfig.StartPage.PrioritizeRecording="I-optimize para lamang sa pag-rerekord, Hindi ako mag-iistream" +Basic.AutoConfig.VideoPage="Mga Setting sa Video" +Basic.AutoConfig.VideoPage.SubTitle="Tukuyin ang mga setting ng video na gusto mong gamitin" +Basic.AutoConfig.VideoPage.BaseResolution.UseCurrent="Gamitin ang Pangkasalukuyang (%1x%2)" +Basic.AutoConfig.VideoPage.BaseResolution.Display="Ipakita ang %1 (%2x%3)" +Basic.AutoConfig.VideoPage.FPS.UseCurrent="Gamitin ang Pangkasalukuyang (%1)" +Basic.AutoConfig.VideoPage.FPS.PreferHighFPS="60 o 30, pero mas piliin ang 60 kung maaari" +Basic.AutoConfig.VideoPage.FPS.PreferHighRes="60 o 30, pero mas piliin ang mataas na resolution" +Basic.AutoConfig.VideoPage.CanvasExplanation="Tandaan: Ang kanbas (base) na resolution ay hindi kinakailangang katulad sa resolution na gagamitin mo sa pag-stream o pagrekord. Ang actual na resolution ng iyong stream/rekord ay maaaring pababain upang mabawasan ang gamit sa mga resource o mga kakailanganing bitrate." +Basic.AutoConfig.StreamPage="Mag-stream ng Impormasyon" +Basic.AutoConfig.StreamPage.SubTitle="Mangyari lamang ilagay ang impormasyon ng iyong pagstream" +Basic.AutoConfig.StreamPage.Service="Serbisyo" +Basic.AutoConfig.StreamPage.Service.ShowAll="Ipakita Lahat..." +Basic.AutoConfig.StreamPage.Server="Serber" +Basic.AutoConfig.StreamPage.StreamKey="Stream Key" +Basic.AutoConfig.StreamPage.StreamKey.LinkToSite="(Link)" +Basic.AutoConfig.StreamPage.PerformBandwidthTest="Estimahin ang bitrate gamit ang bandwith test (maaaring tumagal ng ilang minuto)" +Basic.AutoConfig.StreamPage.PreferHardwareEncoding="Mas piliin ang hardware encoding" +Basic.AutoConfig.StreamPage.PreferHardwareEncoding.ToolTip="Ang Hardware Encoding ay nagtatanggal ng karamihan sa paggamit ng CPU, ngunit maaaring nangangailangan ito ng mas maraming bitrate upang magkaroon ng katulad na lebel ng kalidad." +Basic.AutoConfig.StreamPage.StreamWarning.Title="Babala sa stream" +Basic.AutoConfig.StreamPage.StreamWarning.Text="Ang bandwith test ay mag-iistream ng datos ng video nang walang audio sa iyong channel. Kung kaya mo, minumungkahi namin na pansamantala mong i-off ang pag-save ng mga video ng mga stream at gawing pribado ang stream hanggang sa matapos ang test. Magpatuloy?" +Basic.AutoConfig.TestPage="Mga Huling Resulta" +Basic.AutoConfig.TestPage.SubTitle.Testing="Ang programang ito ay nagapapatupad ngayon ng mga pagsusuri upang matantiya ang pinakamainam na mga setting" +Basic.AutoConfig.TestPage.SubTitle.Complete="Natapos na ang pagsusuri" +Basic.AutoConfig.TestPage.TestingBandwidth="Nagsasagaw ng bandwidth test, maaaring itong magtagal ng ilang minuto..." +Basic.AutoConfig.TestPage.TestingBandwidth.Connecting="Kumukonekta sa: %1..." +Basic.AutoConfig.TestPage.TestingBandwidth.ConnectFailed="Bigong maka-konekta sa kahit anong mga serber, mangyari lamang suriin ang iyong koneksyon sa internet at subukan muli." +Basic.AutoConfig.TestPage.TestingBandwidth.Server="Sinusuri ang bandwidth para sa: %1" +Basic.AutoConfig.TestPage.TestingStreamEncoder="Sinusuri ang encoder ng stream, maaari itong magtagal ng isang minuto..." +Basic.AutoConfig.TestPage.TestingRecordingEncoder="Sinusuri ang encoder para sa pagrekord, maaari itong magtagal ng isang minuto..." +Basic.AutoConfig.TestPage.TestingRes="Sinusuri ang mga resolusyon, maaari itong magtagal ng ilang minuto..." +Basic.AutoConfig.TestPage.TestingRes.Fail="Bigong mapatakbo ang encoder" +Basic.AutoConfig.TestPage.TestingRes.Resolution="Sinusuri ang %1x%2 %3 FPS..." +Basic.AutoConfig.TestPage.Result.StreamingEncoder="Encoder para sa Pag-stream" +Basic.AutoConfig.TestPage.Result.RecordingEncoder="Encoder para sa Pagrekord" +Basic.AutoConfig.TestPage.Result.Header="Napagtanto ng programa na ang mga setting na ito ang pinakamainam para sa iyo:" +Basic.AutoConfig.TestPage.Result.Footer="Upang magamit ang mga setting, pindutin ang Apply Settings. Upang ma-configure muli ang wizard at subukang muli, pindutin ang Back. Upang ma-configure mo mismo nang mano-mano ang mga setting, pindutin ang Cancel at buksan ang mga Setting." + +Basic.Stats="Mga Statistika" +Basic.Stats.CPUUsage="Paggamit ng CPU" +Basic.Stats.HDDSpaceAvailable="Puwang sa HDD na magagamit pa" +Basic.Stats.MemoryUsage="Paggamit ng Memorya" +Basic.Stats.AverageTimeToRender="Karaniwang bilis upang ma-render ang frame" +Basic.Stats.SkippedFrames="Mga nalaktawang imahe dahil sa antala sa pag-encode" +Basic.Stats.MissedFrames="Mga imaheng di nakuha dahil sa antala sa pag-render" +Basic.Stats.Output.Stream="Stream" +Basic.Stats.Output.Recording="Pag-rerekord" +Basic.Stats.Status="Estado" +Basic.Stats.Status.Recording="Pagrerekord" +Basic.Stats.Status.Live="LIVE" +Basic.Stats.Status.Reconnecting="Muling kumukunekta" +Basic.Stats.Status.Inactive="Hindi aktibo" +Basic.Stats.DroppedFrames="Mga Imaheng hindi sinali (Network)" +Basic.Stats.MegabytesSent="Kabuuan ng Output ng mga Datos" +Basic.Stats.Bitrate="Bitrate" + +Updater.Title="Mga bagong update na magagamit" +Updater.Text="Mayroong bagong update na magagamit:" +Updater.UpdateNow="Iupdate na Ngayon" +Updater.RemindMeLater="Paalalahanan ako Maya-maya" +Updater.Skip="Laktawan ang Bersyon" +Updater.Running.Title="Ang programa ay kasalukuyang aktibo" +Updater.Running.Text="Ang mga output ay kasalukuyang aktibo, mangyari lamang i-shut down ang anumang mga output na aktibo bago subukang mag-update" +Updater.NoUpdatesAvailable.Title="Walang mga update na magagamit" +Updater.NoUpdatesAvailable.Text="Walang mga update ang kasalukuyang magagamit" +Updater.FailedToLaunch="Bigong malunsad ang updater" +Updater.GameCaptureActive.Title="Ang Game capture ay aktibo" +Updater.GameCaptureActive.Text="Ang hook library ng game capture ay kasalukuyang ginagamit. Mangyari lamang isara ang anumang mga laro/programang nahuli (o i-start muli ang windows) at subukan muli." + +QuickTransitions.SwapScenes="Pagpalitin ang Preview/Output ng mga Eksena Matapos ang Pag-transisyon" +QuickTransitions.SwapScenesTT="Pinagpapalit ang preview at output ng mga eksena matapos ang pagtransisyon (kung ang orihinal na eksena ng output ay nariyan pa).\nHindi nito mapapawalang-bisa ang mga pagbabagong napatupad sa orihinal na eksena ng output." +QuickTransitions.DuplicateScene="Gayahin ang Eksena" +QuickTransitions.DuplicateSceneTT="Kapag nag-eedit ng kaparehong eksena, pinapahintulutan ang pag-edit ng transform/visibility ng mga pinanggalingan nang hindi binabago ang output.\nUpang ma-edit ang mga katangian ng mga pinagmulan nang hindi binabago ang output, paganahin ang 'Duplicate Sources'.\nAng pag-bago ng value na ito ang magseset muli ng pangkasalukuyang output na eksena (kung ito ay nariyan pa)." +QuickTransitions.EditProperties="Gayahin ang mga Source" +QuickTransitions.EditPropertiesTT="Kapag nag-eedit ng kaparehong eksena, pinapahintulutan ang pag-edit ng mga pinagmulan nang hindi binabago ang output.\nMaaari lamang itong gamitin kung ang 'Duplicate Scene' ay gumagana.\nMayroong mga source (tulad ng capture o mga media source) na hindi hindi ito sinusuportahan at hindi maaaring i-edit nang nakahiwalay.\nAng pagbabago ng value na ito ang magseset muli ng kasalukuyang output na eksena (kung nariyan pa ito).\n\nBabala: Dahil kokopyahin ang mga source, maaari itong mangailangan ng dagdag na system o mga video source." +QuickTransitions.HotkeyName="Mabilis na Transisyon: %1" + +Basic.AddTransition="Idagdag ang Configurable na Transisyon" +Basic.RemoveTransition="Alisin ang Configurable na Transisyon" +Basic.TransitionProperties="Mga Katangian ng Transisyon" +Basic.SceneTransitions="Mga Transisyon ng Eksena" +Basic.TransitionDuration="Tagal" +Basic.TogglePreviewProgramMode="Studio Mode" + +TransitionNameDlg.Text="Mangyari lamang ilagay ang pangalan ng transisyon" +TransitionNameDlg.Title="Pangalan ng Transition" + +TitleBar.Profile="Profile" +TitleBar.Scenes="Mga Eksena" + +NameExists.Title="Ang pangalan ay umiiral na" +NameExists.Text="Ang pangalan na ito ay ginagamit na." + +NoNameEntered.Title="Mangyari lamang magbigay ng balidong pangalan" +NoNameEntered.Text="Hindi maaaring walang pangalan." + +ConfirmStart.Title="Umpisahan na ang pag-stream?" +ConfirmStart.Text="Sigurado ka bang gusto mo nang simulan ang pag-stream?" + +ConfirmStop.Title="Itigil ang pag-stream?" +ConfirmStop.Text="Sigurado ka bang gusto mong itigil ang pag-stream?" + +ConfirmExit.Title="Lumabas sa OBS?" +ConfirmExit.Text="Ang OBS ang kasalukuyang aktibo. Ang lahat ng pag-stream/pagrerekord ay magsasara. Sigurado ka bang gusto mong lumabas?" + +ConfirmRemove.Title="Kumpirmahin ang pagtanggal" +ConfirmRemove.Text="Sigurado ka bang gusto mong tanggalin ang '$1\"?" +ConfirmRemove.TextMultiple="Sigurado ka bang gusto mong tanggalin ang %1 na mga item?" + +Output.StartStreamFailed="Bigong masimulan ang pag-stream" +Output.StartRecordingFailed="Bigong masimulan ang pag-rerekord" +Output.StartReplayFailed="Bigong masimulan ang replay buffer" +Output.StartFailedGeneric="Bigong masimulan ang output. Mangyari lamang tingnan ang log para sa mga detalye. \n\nTandaan: Kung ikaw ay gumagamit ng NVENC o AMD na mga encoder, siguraduhing ang iyong mga video driver ay naka-update." + +Output.ConnectFail.Title="Bigong kumonekta" +Output.ConnectFail.BadPath="Hindi wasto ang Path o Connection URL. Mangyari lamang tingnan ang iyong mga setting upang makumpirma na sila ay balido." +Output.ConnectFail.ConnectFailed="Bigong kumonekta sa serber" +Output.ConnectFail.InvalidStream="Hindi madaanan ang tinutukoy na channel o stream key, mangyari lamang tingnan muli ang iyong stream key. Kung ito ay wasto, maaaring mayroong problema sa pagkonekta sa serber." +Output.ConnectFail.Error="Isang di-inaasahang error ang naganap habang sinusubukang kumonekta sa serber. Karagdagang impormasyon ay nasa log file." +Output.ConnectFail.Disconnected="Nadiskonek mula sa serber." + +Output.RecordFail.Title="Bigong masimulan ang pa-rerekord" +Output.RecordFail.Unsupported="Ang output format ay maaaring hindi suportado o di kaya'y hindi nagsusuporta ng higit sa isang audio track. Mangyari lamang tingnan ang iyong mga setting at subukan muli." +Output.RecordNoSpace.Title="Hindi sapat ang espasyo sa disk" +Output.RecordNoSpace.Msg="Hindi sapat ang espasyo sa disk upang magpatuloy sa pag-rerekord." +Output.RecordError.Title="Error sa Pag-rerekord" +Output.RecordError.Msg="Isang hindi matukoy na error ang naganap habang nag-rerekord." +Output.ReplayBuffer.NoHotkey.Title="Walang set ng hotkey!" +Output.ReplayBuffer.NoHotkey.Msg="Walang naka-save na hotkey set para sa replay buffer. Mangyari lamang magtalaga ng \"Save\" hotkey na gagamitin para sa pag-save ng mga replay recording." + +Output.BadPath.Title="Maling File Path" +Output.BadPath.Text="Ang na-configure na output path ay hindi wasto. Mangyari lamang tingnan ang iyong mga setting upang makumpirma na isang balidong file path ay nakatalaga." + +LogReturnDialog="Matagumpay na na-upload ang log" +LogReturnDialog.CopyURL="Kopyahin ang URL" +LogReturnDialog.ErrorUploadingLog="Error sa pag-uupload ng log file" + +LicenseAgreement="Kasunduan sa Lisensya" +LicenseAgreement.PleaseReview="Mangyari lamang basahin ang mga termino sa lisensya bago gamitin ang OBS. Sa paggamit ng programang ito, iyong kinikilala na binasa at sumasang-ayon ka sa mga termino ng <a href='http://www.gnu.org/licenses/gpl-2.0.html'>GNU General Public License v2.0</a>. Paki-scroll down upang makita ang iba pang bahagi ng kasunduan." +LicenseAgreement.ClickIAgreeToContinue="Kung iyong tinatanggap ang mga termino ng kasunduan, pindutin ang I Agree upang makapagpatulay. Kailangan mong sumang-ayon sa kasunduan upang magamit ang OBS." +LicenseAgreement.IAgree="Sumasang-ayon Ako" +LicenseAgreement.Exit="Lumabas" + +Remux.SourceFile="OBS Recording" +Remux.TargetFile="Target File" +Remux.Remux="Remux" +Remux.OBSRecording="OBS Recording" +Remux.FinishedTitle="Tapos na ang pag-remux" +Remux.Finished="Na-remux na ang recording" +Remux.FinishedError="Na-remux na ang recording, ngunit ay file ay maaaring hindi kumpleto" +Remux.SelectRecording="Pumili ng OBS Recording …" +Remux.SelectTarget="Pumili ng target file …" +Remux.FileExistsTitle="Ang target file ay umiiral na" +Remux.FileExists="Ang target file na ito ay umiiral na, gusto ma ba itong palitan?" +Remux.ExitUnfinishedTitle="Ang pagremux ay tinutuloy pa" +Remux.ExitUnfinished="Hindi pa tapos ang pag-remux. Kung ihihinto ito ngayon, maaaring hindi na magagamit ang target file.\nSigurado ka bang gusto mong ihinto ang pagremux?" + +UpdateAvailable="May Bagong Update na Magagamit" +UpdateAvailable.Text="Ang bersyon %1.%2.%3 ay maaari nang gamiting ngayon. <a href='%4'>Pindutin ito upang ma-download</a>" + +Basic.DesktopDevice1="Desktop Audio" +Basic.DesktopDevice2="Desktop Audio 2" +Basic.AuxDevice1="Mic/Aux" +Basic.AuxDevice2="Mic/Aux 2" +Basic.AuxDevice3="Mic/Aux 3" +Basic.AuxDevice4="Mic/Aux 4" + +Basic.Scene="Eksena" +Basic.DisplayCapture="Ipakita ang Kuha" + +Basic.Main.PreviewConextMenu.Enable="Paganahin ang Preview" + +ScaleFiltering="I-scale ang pag-fifilter" +ScaleFiltering.Point="Punto" +ScaleFiltering.Bilinear="Bilinear" +ScaleFiltering.Bicubic="Bicubic" +ScaleFiltering.Lanczos="Lanczos" + +Deinterlacing="Deinterlacing" +Deinterlacing.Discard="Discard" +Deinterlacing.Retro="Retro" +Deinterlacing.Blend="Blend" +Deinterlacing.Blend2x="Blend 2x" +Deinterlacing.Linear="Linear" +Deinterlacing.Linear2x="Linear 2x" +Deinterlacing.Yadif="Yadif" +Deinterlacing.Yadif2x="Yadif 2x" +Deinterlacing.TopFieldFirst="Itaas ang Patlang Una" +Deinterlacing.BottomFieldFirst="Ibaba ang Patlang Una" + +VolControl.SliderUnmuted="Dami ng islayder para sa '%1':%2" +VolControl.SliderMuted="Dami ng islayder para sa '%1':%2 (na kasalukuyang mahina)" +VolControl.Mute="Mahina '%1'" +VolControl.Properties="Ari-arian na para sa '%1'" + +Basic.Main.AddSceneDlg.Title="Idagdag sa Eksena" +Basic.Main.AddSceneDlg.Text="Pakiusap idagdag ang pangalan ng mga eksena" + +Basic.Main.DefaultSceneName.Text="Eksena %1" + +Basic.Main.AddSceneCollection.Title="Idagdag ang Eksena sa Koleksyon" +Basic.Main.AddSceneCollection.Text="Mangyari lamang ilagay ang pangalan ng koleksyon ng mga eksena" + +Basic.Main.RenameSceneCollection.Title="Palitan ang pangalan ng Koleksyon ng mga Eksena" + +AddProfile.Title="Idagdag ang Profile" +AddProfile.Text="Mangyari lamang ilagay ang pangalan ng profile" + +RenameProfile.Title="Palitan ang pangalan ng Profile" + +Basic.Main.MixerRename.Title="Palitan ang pangalan ng Audio Source" +Basic.Main.MixerRename.Text="Mangyari lamang ilagay ang pangalan ng audio source" + + +Basic.Main.PreviewDisabled="Ang preview ay kasalukuyang hindi gumagana" + +Basic.SourceSelect="Lumikha/Pumili ng Source" +Basic.SourceSelect.CreateNew="Lumikha ng bago" +Basic.SourceSelect.AddExisting="Idagdag ang Umiiral na" +Basic.SourceSelect.AddVisible="Palitawin ang source" + +Basic.PropertiesWindow="Mga Katangian para sa '%1'" +Basic.PropertiesWindow.AutoSelectFormat="%1 (autoselect: %2)" +Basic.PropertiesWindow.SelectColor="Pumili ng Kulay" +Basic.PropertiesWindow.SelectFont="Pumili ng font" +Basic.PropertiesWindow.ConfirmTitle="Binago ang mga Setting" +Basic.PropertiesWindow.Confirm="Mayroong mga pagbabagong hindi na-save. Nais mo bang panatilihin ang mga ito?" +Basic.PropertiesWindow.NoProperties="Walang mga katangiang magagamit" +Basic.PropertiesWindow.AddFiles="Idagdag ang mga File" +Basic.PropertiesWindow.AddDir="Idagdag ang Direktory" +Basic.PropertiesWindow.AddURL="Idagdag ang Path/URL" +Basic.PropertiesWindow.AddEditableListDir="Idagdag ang directory sa '%1'" +Basic.PropertiesWindow.AddEditableListFiles="Idagdag ang mga file sa '%1'" +Basic.PropertiesWindow.AddEditableListEntry="Magdagdag ng entry sa '%1'" +Basic.PropertiesWindow.EditEditableListEntry="Baguhin ang entry mula sa '%1'" + +Basic.PropertiesView.FPS.Simple="Simpleng mga FPS Value" +Basic.PropertiesView.FPS.Rational="Rasyonal na mga FPS Value" +Basic.PropertiesView.FPS.ValidFPSRanges="Balidong mga FPS Range:" + +Basic.InteractionWindow="Nakikipag-interact sa '%1'" + +Basic.StatusBar.Reconnecting="Na-diskonek, muling magku-kunek sa loob ng %2 segundo(mga) (pagtangka%1)" +Basic.StatusBar.AttemptingReconnect="Sinusubukang uling maka-konek... (tangka %1)" +Basic.StatusBar.ReconnectSuccessful="Matagumpay na muling naka-konek" +Basic.StatusBar.Delay="Antala (%1 segundo)" +Basic.StatusBar.DelayStartingIn="Antala (magsisimula sa loob ng %1 segundo)" +Basic.StatusBar.DelayStoppingIn="Antala (hihinto sa loob ng %1 segundo)" +Basic.StatusBar.DelayStartingStoppingIn="Antala (hihinto sa loob ng %1 segundo, magsisimula sa loob ng %2 segundo)" + +Basic.Filters="Mga Filter" +Basic.Filters.AsyncFilters="Audio/Video na mga Filter" +Basic.Filters.AudioFilters="Audio na mga Filter" +Basic.Filters.EffectFilters="Efeect na mga Filter" +Basic.Filters.Title="Mga Filter para sa '%1'" +Basic.Filters.AddFilter.Title="Pangalan ng Filter" +Basic.Filters.AddFilter.Text="Mangyari lamang tukuyin ang pangalan ng filter" + +Basic.TransformWindow="Pagbabago ng mga Bagay sa Eksena" +Basic.TransformWindow.Position="Posisyon" +Basic.TransformWindow.Rotation="Pag-ikot" +Basic.TransformWindow.Size="Sukat" +Basic.TransformWindow.Alignment="Pagkahanay-hanay ng mga posisyon" +Basic.TransformWindow.BoundsType="Tipo ng Nakagagapos na Kahon" +Basic.TransformWindow.BoundsAlignment="Pagkakahanay sa Bounding Kahon" +Basic.TransformWindow.Bounds="Kahon Sukat ng Bounding" +Basic.TransformWindow.Crop="I-krop" + +Basic.TransformWindow.Alignment.TopLeft="Itaas sa kaliwa" +Basic.TransformWindow.Alignment.TopCenter="Itaas sa Gitna" +Basic.TransformWindow.Alignment.TopRight="Itaas sa Kanan" +Basic.TransformWindow.Alignment.CenterLeft="Gitna sa Kaliwa" +Basic.TransformWindow.Alignment.Center="Gitna" +Basic.TransformWindow.Alignment.CenterRight="Gitna sa Kanan" +Basic.TransformWindow.Alignment.BottomLeft="Baba sa Kaliwa" +Basic.TransformWindow.Alignment.BottomCenter="Baba sa Gitna" +Basic.TransformWindow.Alignment.BottomRight="Baba sa Kanan" + +Basic.TransformWindow.BoundsType.None="Walang Hangganan" +Basic.TransformWindow.BoundsType.MaxOnly="Pinakamataas na sukat lamang" +Basic.TransformWindow.BoundsType.ScaleInner="Panloob na hangganan ng scale" +Basic.TransformWindow.BoundsType.ScaleOuter="Panlabas na hangganan ng scale" +Basic.TransformWindow.BoundsType.ScaleToWidth="Lapad ng hangganan ng scale" +Basic.TransformWindow.BoundsType.ScaleToHeight="Taas ng hangganan ng scale" +Basic.TransformWindow.BoundsType.Stretch="Kahabaan sa hangganan" + +Basic.Main.AddSourceHelp.Title="Hindi pwede idagdag sa Pinagmulan" +Basic.Main.AddSourceHelp.Text="Kailangan mo na magkaroon ng hindi bababa sa isang eksena na idadagdag sa pinagmulan." + +Basic.Main.Scenes="Eksena" +Basic.Main.Sources="Pinagmulan" +Basic.Main.Controls="Mga kontrol" +Basic.Main.Connecting="Pagkonekta..." +Basic.Main.StartRecording="Magsimula sa Pagtatala" +Basic.Main.StartReplayBuffer="Magsimula Mag replay Buffer" +Basic.Main.StartStreaming="Magsimula na mag Streaming" +Basic.Main.StopRecording="Huminto sa Pagtatala" +Basic.Main.StoppingRecording="Pagtigil sa Pagtatala..." +Basic.Main.StopReplayBuffer="Huminto Mag-replay Buffer" +Basic.Main.StoppingReplayBuffer="Pagtigil Mag-replay Buffer..." +Basic.Main.StopStreaming="Ihinto Mag-streaming" +Basic.Main.StoppingStreaming="Pagtigil ng Daloy..." +Basic.Main.ForceStopStreaming="Itigil ang pag-stream (tanggalin ang antala)" + +Basic.MainMenu.File="&File" +Basic.MainMenu.File.Export="&I-export" +Basic.MainMenu.File.Import="&I-angkat" +Basic.MainMenu.File.ShowRecordings="Ipakita ang mga &Recording" +Basic.MainMenu.File.Remux="Re&mux na mga Recording" +Basic.MainMenu.File.Settings="&Mga Setting" +Basic.MainMenu.File.ShowSettingsFolder="Ipakita ang Folder ng mga Setting" +Basic.MainMenu.File.ShowProfileFolder="Ipakita ang Profile Folder" +Basic.MainMenu.AlwaysOnTop="&Palaging Nasa Tuktok" +Basic.MainMenu.File.Exit="E&xit" + +Basic.MainMenu.Edit="I&edit" +Basic.MainMenu.Edit.Undo="Ipawalang-bisa (&U)" +Basic.MainMenu.Edit.Redo="Gawin Muli (&R)" +Basic.MainMenu.Edit.UndoAction="Ipawalang-bisa $1 (&U)" +Basic.MainMenu.Edit.RedoAction="Gawing Muli $1 (&R)" +Basic.MainMenu.Edit.LockPreview="&Naka-lock na Preview" +Basic.MainMenu.Edit.Scale="Preview &Scaling" +Basic.MainMenu.Edit.Scale.Window="Gawing Kasing-Laki ng Window" +Basic.MainMenu.Edit.Scale.Canvas="Kanbas (%1x%2)" +Basic.MainMenu.Edit.Scale.Output="Output (%1x%2)" +Basic.MainMenu.Edit.Transform="&Transform" +Basic.MainMenu.Edit.Transform.EditTransform="&Baguhin ang Transform..." +Basic.MainMenu.Edit.Transform.CopyTransform="Kopyahin ang Transform" +Basic.MainMenu.Edit.Transform.PasteTransform="I-paste ang Transform" +Basic.MainMenu.Edit.Transform.ResetTransform="&I-set muli ang Transform" +Basic.MainMenu.Edit.Transform.Rotate90CW="Iikot ng 90 degrees CW" +Basic.MainMenu.Edit.Transform.Rotate90CCW="Iikot ng 90 degrees CCW" +Basic.MainMenu.Edit.Transform.Rotate180="Iikot ng 180 degrees" +Basic.MainMenu.Edit.Transform.FlipHorizontal="Baliktarin ng &pahalang" +Basic.MainMenu.Edit.Transform.FlipVertical="Baliktarin ng &patayo" +Basic.MainMenu.Edit.Transform.FitToScreen="&Pagkasyahin sa Screen" +Basic.MainMenu.Edit.Transform.StretchToScreen="&I-stretch sa screen" +Basic.MainMenu.Edit.Transform.CenterToScreen="&I-sentro sa screen" +Basic.MainMenu.Edit.Order="&Pagkakasunod-sunod" +Basic.MainMenu.Edit.Order.MoveUp="Ilipat &Pataas" +Basic.MainMenu.Edit.Order.MoveDown="Ilipat &Pababa" +Basic.MainMenu.Edit.Order.MoveToTop="Ilipat sa &Pinaka taas" +Basic.MainMenu.Edit.Order.MoveToBottom="Ilipat sa &Pinaka baba" +Basic.MainMenu.Edit.AdvAudio="&Advanced na mga Katangian ng Audio" + +Basic.MainMenu.View="&View" +Basic.MainMenu.View.Toolbars="&Mga Toolbar" +Basic.MainMenu.View.Docks="Mga Dock" +Basic.MainMenu.View.Docks.ResetUI="I-set muli ang UI" +Basic.MainMenu.View.Docks.LockUI="I-lock UI" +Basic.MainMenu.View.Toolbars.Listboxes="&Mga Listbox" +Basic.MainMenu.View.SceneTransitions="Mga Transisyon ng S&cene" +Basic.MainMenu.View.StatusBar="&Status Bar" +Basic.MainMenu.View.Fullscreen.Interface="Interface gamit ang buong screen" + +Basic.MainMenu.SceneCollection="&Kolekysyon ng mga Scene" +Basic.MainMenu.Profile="&Profile" +Basic.MainMenu.Profile.Import="I-import ang Profile" +Basic.MainMenu.Profile.Export="I-export ang Profile" +Basic.MainMenu.SceneCollection.Import="I-import ang Koleksyon ng mga Eksena" +Basic.MainMenu.SceneCollection.Export="I-export ang Koleksyon ng mga Eksena" +Basic.MainMenu.Profile.Exists="May ganito ng Profile" +Basic.MainMenu.SceneCollection.Exists="Mayroon ng ganitong koleksyon ng mga eksena" + +Basic.MainMenu.Tools="&Mga Kasangkapan" + +Basic.MainMenu.Help="&Tulong" +Basic.MainMenu.Help.HelpPortal="Portal Para sa &Tulong" +Basic.MainMenu.Help.Website="Bisitahin ang &Website" +Basic.MainMenu.Help.Logs="&Mga Log File" +Basic.MainMenu.Help.Logs.ShowLogs="&Ipakita ang mga Log File" +Basic.MainMenu.Help.Logs.UploadCurrentLog="I-upload ang &Pangkasalukuyang Log File" +Basic.MainMenu.Help.Logs.UploadLastLog="I-upload ang Huling Log File" +Basic.MainMenu.Help.Logs.ViewCurrentLog="&Tingnan ang Pangkasalukuyang Log" +Basic.MainMenu.Help.CheckForUpdates="Maghanap ng mga Update" + +Basic.Settings.ProgramRestart="Ang programa ay kailangan i-start muli para gumana ang mga setting na ito." +Basic.Settings.ConfirmTitle="Kumpirmahin ang mga Pagbabago" +Basic.Settings.Confirm="Mayroon kang mga binago na hindi pa na-save. I-save ang mga pagbabago?" + +Basic.Settings.General="Pangkalahatan" +Basic.Settings.General.Theme="Tema" +Basic.Settings.General.Language="Lenggwahe" +Basic.Settings.General.EnableAutoUpdates="Awtomatikong maghanap ng mga update sa pag-start up" +Basic.Settings.General.OpenStatsOnStartup="Buksan ang dialogong panstatistiko sa pag-startup" +Basic.Settings.General.WarnBeforeStartingStream="Ipakita ang kumpirmasyon ng dialogo kapag nagumpisang mag-stream" +Basic.Settings.General.WarnBeforeStoppingStream="Ipakita ang kumpirmasyon ng dialogo kapag naghihinto ng pag-stream" +Basic.Settings.General.Projectors="Mga Projector" +Basic.Settings.General.HideProjectorCursor="Itago ang cursor sa ibabaw ng mga projector" +Basic.Settings.General.ProjectorAlwaysOnTop="Ilagay palagi sa tuktok ang mga projector" +Basic.Settings.General.Snapping="Pag-snap ng pagkakahanay ng source" +Basic.Settings.General.ScreenSnapping="I-snap ang mga source sa gilid ng screen" +Basic.Settings.General.CenterSnapping="I-snap ang mga source sa pahalang at patayong sentro" +Basic.Settings.General.SourceSnapping="I-snap ang mga Source sa iba pang mga source" +Basic.Settings.General.SnapDistance="I-snap ang pagka-sensitibo" +Basic.Settings.General.RecordWhenStreaming="Awtomatikong mag-rekord kapag nag-stream" +Basic.Settings.General.KeepRecordingWhenStreamStops="Patuloy na mag-rekord kapag tumigil ang pag-stream" +Basic.Settings.General.ReplayBufferWhileStreaming="Awtomatikong simulang ang replay buffer kapag nag-stream" +Basic.Settings.General.KeepReplayBufferStreamStops="Panatilihing aktibo ang replay buffer kapag huminto ang pagstream" +Basic.Settings.General.SysTray="System Tray" +Basic.Settings.General.SysTrayWhenStarted="Paliitin sa system tray kapag inumpisahan" +Basic.Settings.General.SystemTrayHideMinimize="Palaging paliitin sa system tray sa halip na task bar" +Basic.Settings.General.SaveProjectors="I-save ang mga projector sa paglabas" +Basic.Settings.General.SwitchOnDoubleClick="Lumipat sa eksena kapag dalawang beses pinindot" +Basic.Settings.General.StudioPortraitLayout="Paganahin ang portrait/patayong layout" +Basic.Settings.General.MultiviewLayout="Multiview Layout" +Basic.Settings.General.MultiviewLayout.Horizontal.Top="Pahalang, Tuktok" +Basic.Settings.General.MultiviewLayout.Horizontal.Bottom="Pahalang, Pinaka baba" +Basic.Settings.General.MultiviewLayout.Vertical.Left="Patayo, Kaliwa" +Basic.Settings.General.MultiviewLayout.Vertical.Right="Patayo, Kanan" + +Basic.Settings.Stream="Mag-stream" +Basic.Settings.Stream.StreamType="Uri ng Pag-stream" + +Basic.Settings.Output="Output" +Basic.Settings.Output.Format="Format ng Recording" +Basic.Settings.Output.Encoder="Encoder" +Basic.Settings.Output.SelectDirectory="Pumili ng Recording Directory" +Basic.Settings.Output.SelectFile="Pumili ng Recording File" +Basic.Settings.Output.EnforceBitrate="Ipatupad ang mga limitasyon sa serbisyo ng bitrate sa pag-stream" +Basic.Settings.Output.Mode="Paraan ng Output" +Basic.Settings.Output.Mode.Simple="Payak" +Basic.Settings.Output.Mode.Adv="Mas Mahusay" +Basic.Settings.Output.Mode.FFmpeg="FFmpeg Output" +Basic.Settings.Output.UseReplayBuffer="Paganahin ang Replay Buffer" +Basic.Settings.Output.ReplayBuffer.SecondsMax="Pinakamataas na Oras ng Replay (Segundo)" +Basic.Settings.Output.ReplayBuffer.MegabytesMax="Pinakamataas na Memorya (Megabytes)" +Basic.Settings.Output.ReplayBuffer.Estimate="Tantiyang gamit sa memorya: %1 MB" +Basic.Settings.Output.ReplayBuffer.EstimateUnknown="Hindi matantiya ang gamit sa memorya. Mangyari lamang mag-takda ng pinakamataas na limitasyon sa memorya." +Basic.Settings.Output.ReplayBuffer.HotkeyMessage="(Tandaan: Siguruhing nakapagtakda ka ng hotkey para sa replay buffer sa hotkeys section)" +Basic.Settings.Output.ReplayBuffer.Prefix="Panlapi para Filename ng Replay Buffer" +Basic.Settings.Output.ReplayBuffer.Suffix="Hulapi" +Basic.Settings.Output.Simple.SavePath="Landas ng Recording" +Basic.Settings.Output.Simple.RecordingQuality="Kalidad ng Recording" +Basic.Settings.Output.Simple.RecordingQuality.Stream="Katulad ng pag-stream" +Basic.Settings.Output.Simple.RecordingQuality.Small="Mataas na Kalidad, Katamtamang Laki ng File" +Basic.Settings.Output.Simple.RecordingQuality.HQ="Hindi Matukoy na Kalidad, Malaking File" +Basic.Settings.Output.Simple.RecordingQuality.Lossless="Walang nabago sa Kalidad, Lubhang napakalaking File" +Basic.Settings.Output.Simple.Warn.VideoBitrate="Babala: Ang video bitrate ng pag-stream ay itatakda sa %1, na siyang mataas na limitasyon para sa pangkasalukuyang serbisyo ng pagstream. Kung sigurado kang nais mong lumagpas sa %1, paganahin ang advanced encoder options at tanggalin ang check sa \"Enforce streaming bitrate limits\"." +Basic.Settings.Output.Simple.Warn.AudioBitrate="Babala: Ang audio bitrate ng pag-stream ay itatakda sa %1, na siyang mataas na limitasyon para sa pangkasalukuyang serbisyo ng pag-strean. Kung sigurado kang nais mong lumagpas sa %1, paganahin ang advanced encoder options at tanggalin ang check sa \"Enforce streaming service bitrate limits\"." +Basic.Settings.Output.Simple.Warn.Encoder="Babal: Ang pag-rekord gamit ang isang software encoder na iba ang kalidad sa pag-stream ay mangangailangan ng dagdag na pag-gamit sa CPU kung ikaw ay mag-stream at mag-rekord nang sabay." +Basic.Settings.Output.Simple.Warn.Lossless="Babala: Ang kalidad na lossless ay nagbibigay ng lubhang malalaking file. Ang kalidad na lossless ay maaaring gumamit ng 7 gigabytes ng espasyo ng disk kada minuto o higit pa sa matataas na mga resolusyon o mga framerate. Ang lossless ay hindi minumungkahi para sa mga mahahabang recording maliban na lamang kung mayroon kang napakalaking espasyo sa disk na magagamit." +Basic.Settings.Output.Simple.Warn.Lossless.Msg="Sigurado ka bang gusto mong gamitin ang lossless na kalidad?" +Basic.Settings.Output.Simple.Warn.Lossless.Title="Lossless na kalidad babala!" +Basic.Settings.Output.Simple.Warn.MultipleQSV="Babala: Hindi ka maaaring gumamit ng maraming magkahiwalay na QSV na mga encoder kapag say na nag-stream at nag-rerekord. Kung nais pagsabayin ang pag-stream at pag-rekord, mangyari lamang ibahin ang encoder para sa pag-rekord o ang encoder para sa pag-stream." +Basic.Settings.Output.Simple.Encoder.Software="Software (x264)" +Basic.Settings.Output.Simple.Encoder.Hardware.QSV="Hardware (QSV)" +Basic.Settings.Output.Simple.Encoder.Hardware.AMD="Hardware (AMD)" +Basic.Settings.Output.Simple.Encoder.Hardware.NVENC="Hardware (NVENC)" +Basic.Settings.Output.Simple.Encoder.SoftwareLowCPU="Software (x264 mababa ang nakatakdang paggamit ng CPU, dagdagan ang laki ng file)" +Basic.Settings.Output.VideoBitrate="Video Bitrate" +Basic.Settings.Output.AudioBitrate="Audio Bitrate" +Basic.Settings.Output.Reconnect="Pakusa Makipagkonek muli" +Basic.Settings.Output.RetryDelay="Subukan muling Maantala (Mga segundo)" +Basic.Settings.Output.MaxRetries="Pinakamaraming Retries" +Basic.Settings.Output.Advanced="Paganahin Pauna ang Enkoder Settings" +Basic.Settings.Output.EncoderPreset="Pangkasalukuyan enkoder (Nakatataas = Mas mababa CPU)" +Basic.Settings.Output.CustomEncoderSettings="Pasadyang enkoder Mga setting" +Basic.Settings.Output.CustomMuxerSettings="Pasadyang mga Setting ng Muxer" +Basic.Settings.Output.NoSpaceFileName="Gumawa ng Pangalan ng File nang walang Pagitan" + +Basic.Settings.Output.Adv.Rescale="I-re-iskala ang Output" +Basic.Settings.Output.Adv.AudioTrack="Pangsubaybay ng Audio" +Basic.Settings.Output.Adv.Streaming="Anod" +Basic.Settings.Output.Adv.ApplyServiceSettings="I-enpors ang anod ng serbisyo ng mga enkoder seting" +Basic.Settings.Output.Adv.Audio.Track1="Subaybayan 1" +Basic.Settings.Output.Adv.Audio.Track2="Subaybayan 2" +Basic.Settings.Output.Adv.Audio.Track3="Subaybayan 3" +Basic.Settings.Output.Adv.Audio.Track4="Subaybayan 4" +Basic.Settings.Output.Adv.Audio.Track5="Subaybayan 5" +Basic.Settings.Output.Adv.Audio.Track6="Subaybayan 6" + +Basic.Settings.Output.Adv.Recording="Pagtatala" +Basic.Settings.Output.Adv.Recording.Type="Uri" +Basic.Settings.Output.Adv.Recording.Type.Standard="Pamantayan" +Basic.Settings.Output.Adv.Recording.Type.FFmpegOutput="Pasadyang Palabas (FFmpeg)" +Basic.Settings.Output.Adv.Recording.UseStreamEncoder="(Gamitin ang stream encoder)" +Basic.Settings.Output.Adv.Recording.Filename="Pangalan ng File ng Pag-format" +Basic.Settings.Output.Adv.Recording.OverwriteIfExists="Higit na pasulat kung ang file ay umiiral" +Basic.Settings.Output.Adv.FFmpeg.Type="Ang Palabas na Uri ng FFmpeg" +Basic.Settings.Output.Adv.FFmpeg.Type.URL="Output sa URL" +Basic.Settings.Output.Adv.FFmpeg.Type.RecordToFile="Output sa File" +Basic.Settings.Output.Adv.FFmpeg.SaveFilter.Common="Mga Karaniwang format sa pagrekord" +Basic.Settings.Output.Adv.FFmpeg.SaveFilter.All="Lahat ng mga File" +Basic.Settings.Output.Adv.FFmpeg.SavePathURL="Landas ng file o URL" +Basic.Settings.Output.Adv.FFmpeg.Format="Format ng Container" +Basic.Settings.Output.Adv.FFmpeg.FormatAudio="Audio" +Basic.Settings.Output.Adv.FFmpeg.FormatVideo="Video" +Basic.Settings.Output.Adv.FFmpeg.FormatDefault="Default na Format" +Basic.Settings.Output.Adv.FFmpeg.FormatDesc="Paglalarawan ng Container Format" +Basic.Settings.Output.Adv.FFmpeg.FormatDescDef="Audio/Video Codec na hinulaan mula sa landas ng File o URL" +Basic.Settings.Output.Adv.FFmpeg.AVEncoderDefault="Default Encoder" +Basic.Settings.Output.Adv.FFmpeg.AVEncoderDisable="Huwag paganahin ang Encoder" +Basic.Settings.Output.Adv.FFmpeg.VEncoder="Video Encoder" +Basic.Settings.Output.Adv.FFmpeg.VEncoderSettings="Mga Setting para sa Video Encoder (kung mayroon)" +Basic.Settings.Output.Adv.FFmpeg.AEncoder="Audio Encoder" +Basic.Settings.Output.Adv.FFmpeg.AEncoderSettings="Mga Setting ng Audio Encoder(kung mayroon)" +Basic.Settings.Output.Adv.FFmpeg.MuxerSettings="Mga Setting ng Muxer (kung mayroon)" +Basic.Settings.Output.Adv.FFmpeg.GOPSize="Agwat ng Keyframe (mga imahe)" +Basic.Settings.Output.Adv.FFmpeg.IgnoreCodecCompat="Ipakita ang lahat ng mga code (kahit na maaaring hindi akma)" + +FilenameFormatting.completer="%CCYY-%MM-%DD %hh-%mm-%ss\n%YY-%MM-%DD %hh-%mm-%ss\n%Y-%m-%d %H-%M-%S\n%y-%m-%d %H-%M-%S\n%a %Y-%m-%d %H-%M-%S\n%A %Y-%m-%d %H-%M-%S\n%Y-%b-%d %H-%M-%S\n%Y-%B-%d %H-%M-%S\n%Y-%m-%d %I-%M-%S-%p\n%Y-%m-%d %H-%M-%S-%z\n%Y-%m-%d %H-%M-%S-%Z" + +FilenameFormatting.TT="%CCYY Taon, apat na tambilang\n%YY Taon, huling dalawang tambilang (00-99)\n%MM Buwan bilang isang decimal na numero (01-12)\n%DD Araw ng buwan, zero-padded (01-31)\n%hh Oras sa 24h na format (00-23)\n%mm Minuto(00-59)\n%ss Segundo (00-61)\n%% A % sign\n%a Pina-ikling ngalan ng araw\n%A Buong ngalan ng araw\n%b Pinaikling ngalan ng buwan\n%B Buong ngalan ng buwan\n%d Araw ng Buwan, zero-padded (01-31)\n%H Oras sa 24h na format (00-23)\n%I Oras sa 12h na format (01-12)\n%m Buwang bilang isang decimal na numero (01-12)\n%M Minuto (00-59)\n%p AM o PM na paghirang\n%S Segundo (00-61)\n%y Taon, huling dalawang tambilang (00-99)\n%Y Taon\n%z ISO 8601 kanselahin mula sa UTC o timezone\n pangalan ng pinaikli \n%Z Ngalan ng Timezone o abbreviation\n" + +Basic.Settings.Video="Video" +Basic.Settings.Video.Adapter="Video Adapter" +Basic.Settings.Video.BaseResolution="Resolusyon ng Base (Kanbas)" +Basic.Settings.Video.ScaledResolution="Resolution ng Output (Na-scale)" +Basic.Settings.Video.DownscaleFilter="Pababaan ang Filter" +Basic.Settings.Video.DisableAeroWindows="Huwag paganahin ang Aero (Windows lamang)" +Basic.Settings.Video.FPS="FPS" +Basic.Settings.Video.FPSCommon="Karaniwang mga FPS Value" +Basic.Settings.Video.FPSInteger="Integer ng FPS Value" +Basic.Settings.Video.FPSFraction="Praksyonal na FPS Value" +Basic.Settings.Video.Numerator="Numerador" +Basic.Settings.Video.Denominator="Denominador" +Basic.Settings.Video.Renderer="Renderer" +Basic.Settings.Video.InvalidResolution="Walang bisa ang value ng resolusyon. Kailangang [width]x[height] (hal. 1920x1080)" +Basic.Settings.Video.CurrentlyActive="Kasalukuyang aktibo ang video output. Mangyari lamang patayin ang anumang mga output upang mabago ang mga video setting." +Basic.Settings.Video.DisableAero="Huwag paganahin ang Aero" + +Basic.Settings.Video.DownscaleFilter.Bilinear="Bilinear (Pinakamabilis, ngunit hindi malinaw pag nag-scale)" +Basic.Settings.Video.DownscaleFilter.Bicubic="Bicubic (Matalas na pag-scale, 16 na mga halimbawa)" +Basic.Settings.Video.DownscaleFilter.Lanczos="Lanczos (Pinatalas na pag-scale, 32 na mga halimbawa)" + +Basic.Settings.Audio="Audio" +Basic.Settings.Audio.SampleRate="Sample Rate" +Basic.Settings.Audio.Channels="Mga Channel" +Basic.Settings.Audio.MeterDecayRate="Audio Meter Decay Rate" +Basic.Settings.Audio.MeterDecayRate.Fast="Mabilis" +Basic.Settings.Audio.MeterDecayRate.Medium="Medium (Type I PPM)" +Basic.Settings.Audio.MeterDecayRate.Slow="Mabagal (Type II PPM)" +Basic.Settings.Audio.MultiChannelWarning.Enabled="BABALA: Naka-enable ang surround sound audio." +Basic.Settings.Audio.MultichannelWarning="Kung nagsi-stream, tingnan kung ang streaming service ay sinusuportahan ang parehong surround sound ingest pat ang surround sound playback. Ang Twitch, Facebook 360 Live, Mixer RTMP, Smashcast ay mga halimbawa kung saan ang surround sound ay sinusuportahan ng buo. Kahit na ang Facebook Live at YouTube live ay parehong tumatanggap ng surround ingest, ang Facebook Live ay nagda-downmix sa stereo, at ang YouTube Live ay nagpapakita lamang ng dalawang channel. \n\nAng OBS audio na mga filter ay akma sa surround sound, pero ang suporta sa VST plugin ay hindi garantisado." +Basic.Settings.Audio.MultichannelWarning.Title="Mapapagana ba ang tunog ng palibot ng audio?" +Basic.Settings.Audio.MultichannelWarning.Confirm="Sigurado ka ba na gusto mong paganahin ang tunog ng palibot ng audio?" +Basic.Settings.Audio.DesktopDevice="Apatarong Desktop Awdiyo" +Basic.Settings.Audio.DesktopDevice2="Aparatong Desktop Awdiyo 2" +Basic.Settings.Audio.AuxDevice="Mic/Katulong na Aparato ng Awdiyo" +Basic.Settings.Audio.AuxDevice2="Mic/Katulong na Aparato ng Awdiyo 2" +Basic.Settings.Audio.AuxDevice3="Mic/Katulong na Aparato ng Awdiyo 3" +Basic.Settings.Audio.EnablePushToMute="Paganahin Itulak-para-ma-i-mute" +Basic.Settings.Audio.PushToMuteDelay="Pag-antala sa pagtulak-sa-walang tunog" +Basic.Settings.Audio.EnablePushToTalk="Paganahin itulak-sa-usapan" +Basic.Settings.Audio.PushToTalkDelay="Pag-antala sa pagtulak-sa-usapan" +Basic.Settings.Audio.UnknownAudioDevice="[Ang aparato ay hindi nakakonekta o hindi magagamit]" + +Basic.Settings.Advanced="Pauna" +Basic.Settings.Advanced.General.ProcessPriority="Prayoridad na Pagproseso" +Basic.Settings.Advanced.General.ProcessPriority.High="Mataas" +Basic.Settings.Advanced.General.ProcessPriority.AboveNormal="Sa Taas ng Karaniwan" +Basic.Settings.Advanced.General.ProcessPriority.Normal="Karaniwan" +Basic.Settings.Advanced.General.ProcessPriority.BelowNormal="Sa ibaba ng karaniwan" +Basic.Settings.Advanced.General.ProcessPriority.Idle="Walang ginagawa" +Basic.Settings.Advanced.FormatWarning="Babala: Ang mga format ng mga kulay maliban sa NV12 ay ginawa unsa lahat para sa pagrerekord, at hindi nirerekomenda para sa pag-stream. Ang pag-stream ay maaaring magdulot ng dagdag na gamit sa CPU dahil sa pagbago ng format ng kulay." +Basic.Settings.Advanced.Audio.BufferingTime="Bilis ng Pag-buffer ng Audio" +Basic.Settings.Advanced.Video.ColorFormat="Fomat ng Kulay" +Basic.Settings.Advanced.Video.ColorSpace="YUV Espasyo ng Kulay" +Basic.Settings.Advanced.Video.ColorRange="YUV Hanay ng Kulay" +Basic.Settings.Advanced.Video.ColorRange.Partial="Panguna" +Basic.Settings.Advanced.Video.ColorRange.Full="Buo" +Basic.Settings.Advanced.Audio.MonitoringDevice="Kagamitang Pangsubaybay ng Audio" +Basic.Settings.Advanced.Audio.MonitoringDevice.Default="Default" +Basic.Settings.Advanced.Audio.DisableAudioDucking="Huwag paganahin ang audio ducking ng Windows" +Basic.Settings.Advanced.StreamDelay="Antala sa Pag-stream" +Basic.Settings.Advanced.StreamDelay.Duration="Bilis (segundo)" +Basic.Settings.Advanced.StreamDelay.Preserve="Balikan kung saan huling pinutol (dagadagan ang antala) pagka konekta muli" +Basic.Settings.Advanced.StreamDelay.MemoryUsage="Tantiyang Gamit sa Memorya: %1 MB" +Basic.Settings.Advanced.Network="Network" +Basic.Settings.Advanced.Network.BindToIP="Bumigkis sa IP" +Basic.Settings.Advanced.Network.EnableNewSocketLoop="Paganahin ang bagong code ng pag-network" +Basic.Settings.Advanced.Network.EnableLowLatencyMode="Mode para sa low latency" + +Basic.AdvAudio="Pinahusay na mga Katangian ng Audio" +Basic.AdvAudio.Name="Pangalan" +Basic.AdvAudio.Volume="Lakas ng tunog (%)" +Basic.AdvAudio.Mono="I-downmix para maging Mono" +Basic.AdvAudio.Panning="Panning" +Basic.AdvAudio.SyncOffset="Sync Offset (ms)" +Basic.AdvAudio.Monitoring="Pagsubaybay sa Audio" +Basic.AdvAudio.Monitoring.None="Naka-off ang Monitor" +Basic.AdvAudio.Monitoring.MonitorOnly="Monitor Lamang (naka-mute na output)" +Basic.AdvAudio.Monitoring.Both="Monitor at Output" +Basic.AdvAudio.AudioTracks="Mga Track" + +Basic.Settings.Hotkeys="Mga Hotkey" +Basic.Settings.Hotkeys.Pair="Ang mga kombinasyon ng mga key kasama ang '%1' ay nagsisilbing mga toggle" + +Basic.Hotkeys.SelectScene="Lumipat sa eksena" + +Basic.SystemTray.Show="Ipakita" +Basic.SystemTray.Hide="Itago" + +Basic.SystemTray.Message.Reconnecting="Nadiskonekta. Kumukonekta muli..." + +Hotkeys.Insert="Isingit" +Hotkeys.Delete="Burahin" +Hotkeys.Home="Home" +Hotkeys.End="Wakas" +Hotkeys.PageUp="Itaas ng Pahina" +Hotkeys.PageDown="Ibaba ng Pahina" +Hotkeys.NumLock="Num Lock" +Hotkeys.ScrollLock="Scroll Lock" +Hotkeys.CapsLock="Caps Lock" +Hotkeys.Backspace="Backspace" +Hotkeys.Tab="Tab" +Hotkeys.Print="Ilimbag" +Hotkeys.Pause="Ihinto" +Hotkeys.Left="Kaliwa" +Hotkeys.Right="Kanan" +Hotkeys.Up="Taas" +Hotkeys.Down="Baba" +Hotkeys.Windows="Windows" +Hotkeys.Super="Super" +Hotkeys.Menu="Menu" +Hotkeys.Space="Espasyo" +Hotkeys.NumpadNum="Numpad %1" +Hotkeys.NumpadMultiply="Numpad Multiply" +Hotkeys.NumpadDivide="Numpad Divide" +Hotkeys.NumpadAdd="Numpad Add" +Hotkeys.NumpadSubtract="Numpad Subtract" +Hotkeys.NumpadDecimal="Numpad Decimal" +Hotkeys.AppleKeypadNum="%1 (Keypad)" +Hotkeys.AppleKeypadMultiply="* (Keypad)" +Hotkeys.AppleKeypadDivide="/ (Keypad)" +Hotkeys.AppleKeypadAdd="+ (Keypad)" +Hotkeys.AppleKeypadSubtract="- (Keypad)" +Hotkeys.AppleKeypadDecimal=". (Keypad)" +Hotkeys.AppleKeypadEqual="= (Keypad)" +Hotkeys.MouseButton="Mouse %1" + +Mute="I-mute" +Unmute="Ibalik ang Tunog" +Push-to-mute="Pindutin-para-i-mute" +Push-to-talk="Pindutin-para-makipagusap" + +SceneItemShow="Ipakita ang '%1'" +SceneItemHide="Itago '%1'" + +OutputWarnings.NoTracksSelected="Kailangan mong pumili ng kahit isang track" +OutputWarnings.MultiTrackRecording="Babala: May ilang mga format (tulad ng FLV) na hindi sumusuporta ng maramihang track kada isang pag-rekord" +OutputWarnings.MP4Recording="Babala: Ang mga rekording na naka-save sa MP4 ay hindi na muling mababawi kung ang file ay hindi maaaring tapusin (hal. bilang resulta ng mga BSOD, nawalan ng kuryente, at iba pa). Kung gusto mong mag-rekord ng maraming audio track, maaari mong gamitin ang MKV at i-remux ang recording sa mp4 pag natapos na ito (File->Remux Recordings)" + +FinalScene.Title="Burahin ang Eksena" +FinalScene.Text="Kailangan mayroon kahit isang eksena." +
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/tr-TR.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/tr-TR.ini
Changed
@@ -631,6 +631,10 @@ Basic.Settings.Audio="Ses" Basic.Settings.Audio.SampleRate="Örnekleme Sıklığı" Basic.Settings.Audio.Channels="Kanallar" +Basic.Settings.Audio.MeterDecayRate="Ses Ölçer Sönüm Hızı" +Basic.Settings.Audio.MeterDecayRate.Fast="Hızlı" +Basic.Settings.Audio.MeterDecayRate.Medium="Orta (Tür I PPM)" +Basic.Settings.Audio.MeterDecayRate.Slow="Yavaş (Tür II PPM)" Basic.Settings.Audio.MultiChannelWarning.Enabled="Uyarı: Surround ses etkin." Basic.Settings.Audio.MultichannelWarning="Yayın yapılıyorsa, yayın hizmetinizin hem surround ses alınımını hem de surround ses geri oynatımını desteklediğinden emin olun. Twitch, Facebook 360 Live, Karıştırıcı RTMP, Smashcast, surround sesin tam desteklendiği örneklerdir. Facebook Live'ın ve YouTube Live'ın her ikisi de surround alınımını desteklese de, Facebook Live stereo'ya indirger, ve YouTube Live sadece iki kanal oynatır.\n\nOBS ses filtreleri surround sesle uyumludur, ancak VST eklenti desteği kesin değildir." Basic.Settings.Audio.MultichannelWarning.Title="Surround ses etkinleştirilsin mi?"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/zh-CN.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/zh-CN.ini
Changed
@@ -631,6 +631,10 @@ Basic.Settings.Audio="音频" Basic.Settings.Audio.SampleRate="采样率" Basic.Settings.Audio.Channels="声道" +Basic.Settings.Audio.MeterDecayRate="音频表衰减率" +Basic.Settings.Audio.MeterDecayRate.Fast="快速" +Basic.Settings.Audio.MeterDecayRate.Medium="中速(峰值电平表I型)" +Basic.Settings.Audio.MeterDecayRate.Slow="慢速(峰值电平表II型)" Basic.Settings.Audio.MultiChannelWarning.Enabled="警告: 已启用环绕声音频。" Basic.Settings.Audio.MultichannelWarning="如果串流, 请检查串流服务是否支持环绕立体声接收和环绕立体声播放。 Twitch, Facebook 360 Live, Mixer RTMP, Smashcast 是充分支持环绕立体声的例子。 虽然 Facebook Live 和 Youtube Live 都支持环绕立体声接收, 但是Facebook Live 降低混合至立体声, 而 Youtube Live 则只播放两个声道。\n\nOBS 音频过滤器与环绕立体声兼容, 但 VST 插件支持无法保证。" Basic.Settings.Audio.MultichannelWarning.Title="是否启用环绕立体声?"
View file
obs-studio-21.0.3.tar.xz/UI/data/locale/zh-TW.ini -> obs-studio-21.1.2.tar.xz/UI/data/locale/zh-TW.ini
Changed
@@ -631,6 +631,10 @@ Basic.Settings.Audio="音效" Basic.Settings.Audio.SampleRate="取樣頻率" Basic.Settings.Audio.Channels="通道數" +Basic.Settings.Audio.MeterDecayRate="音量計衰減速率" +Basic.Settings.Audio.MeterDecayRate.Fast="快速" +Basic.Settings.Audio.MeterDecayRate.Medium="中 (Type I PPM)" +Basic.Settings.Audio.MeterDecayRate.Slow="慢 (Type II PPM)" Basic.Settings.Audio.MultiChannelWarning.Enabled="警告: 已啟用環繞聲音訊。" Basic.Settings.Audio.MultichannelWarning="如果是流媒體,請檢查您的流媒體服務是否同時支持環繞聲攝取和環繞聲播放。 Twitch,Facebook 360 Live,Mixer RTMP,Smashcast都是完全支持環繞聲的例子。 儘管Facebook Live和YouTube Live都接受環繞聲攝取,但是Facebook Live會混音為立體聲,而YouTube Live只播放兩個聲道。\n\n 儘管不支持VST插件,但OBS音頻濾波器與環繞聲兼容。" Basic.Settings.Audio.MultichannelWarning.Title="是否啟用環繞聲音訊?"
View file
obs-studio-21.0.3.tar.xz/UI/forms/OBSBasic.ui -> obs-studio-21.1.2.tar.xz/UI/forms/OBSBasic.ui
Changed
@@ -33,6 +33,9 @@ <property name="styleSheet"> <string notr="true"/> </property> + <property name="dockOptions"> + <set>QMainWindow::AllowNestedDocks|QMainWindow::AllowTabbedDocks|QMainWindow::AnimatedDocks</set> + </property> <widget class="QWidget" name="centralwidget"> <layout class="QVBoxLayout" name="verticalLayout"> <item> @@ -134,10 +137,19 @@ <addaction name="actionUploadLastLog"/> <addaction name="actionViewCurrentLog"/> </widget> + <widget class="QMenu" name="menuCrashLogs"> + <property name="title"> + <string>Basic.MainMenu.Help.CrashLogs</string> + </property> + <addaction name="actionShowCrashLogs"/> + <addaction name="actionUploadLastCrashLog"/> + </widget> <addaction name="actionHelpPortal"/> <addaction name="actionWebsite"/> <addaction name="separator"/> <addaction name="menuLogFiles"/> + <addaction name="menuCrashLogs"/> + <addaction name="separator"/> <addaction name="actionCheckForUpdates"/> </widget> <widget class="QMenu" name="menuBasic_MainMenu_Edit"> @@ -182,7 +194,7 @@ <addaction name="actionScaleCanvas"/> <addaction name="actionScaleOutput"/> </widget> - <action name="actionCopySource"> + <action name="actionCopySource"> <property name="text"> <string>Copy</string> </property> @@ -1579,6 +1591,16 @@ <string>Basic.MainMenu.Help.HelpPortal</string> </property> </action> + <action name="actionShowCrashLogs"> + <property name="text"> + <string>Basic.MainMenu.Help.CrashLogs.ShowLogs</string> + </property> + </action> + <action name="actionUploadLastCrashLog"> + <property name="text"> + <string>Basic.MainMenu.Help.CrashLogs.UploadLastLog</string> + </property> + </action> </widget> <customwidgets> <customwidget>
View file
obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/fil-PH.ini
Added
@@ -0,0 +1,42 @@ +SceneSwitcher="Awyomatikong Eskana Tagalipat" +SceneSwitcher.OnNoMatch="Kapag walang tumutugma sa bintana:" +SceneSwitcher.OnNoMatch.DontSwitch="Huwag lumipat" +SceneSwitcher.OnNoMatch.SwitchTo="Lumipat sa:" +SceneSwitcher.CheckInterval="Suriin ang aktibong pamagat ng bintana bawat:" +SceneSwitcher.ActiveOrNotActive="Ang Eskana Tagalipat ay:" +InvalidRegex.Title="Di-wastong Regular Expression" +InvalidRegex.Text="Siya ay regular na expression na ipinasok mo ay hindi wasto." +Active="Aktibo" +Inactive="Di-aktibo" +Start="Magsimula" +Stop="Ihinto" + +Captions="Mga Caption (Experimental)" +Captions.AudioSource="Pinagmulan ng audio" +Captions.CurrentSystemLanguage="Kasalukuyang Wika ng Wika (%1)" +Captions.Provider="Tagapagbigay" +Captions.Error.GenericFail="Nabigong magsimula ng mga caption" + +OutputTimer="Output ng Timer" +OutputTimer.Stream="Itigil ang streaming pagkatapos:" +OutputTimer.Record="Itigil ang pag-record pagkatapos ng:" +OutputTimer.Stream.StoppingIn="Ang pagtigil ng streaming sa:" +OutputTimer.Record.StoppingIn="Pagre-record ng pagtigil sa:" +OutputTimer.Stream.EnableEverytime="Paganahin ang streaming timer sa bawat oras" +OutputTimer.Record.EnableEverytime="Paganahin ang timer ng pag-record sa bawat oras" + +Scripts="Mga script" +LoadedScripts="Mga Loaded na Mga Script" +AddScripts="Magdagdag ng Mga Script" +RemoveScripts="Alisin ang Mga Script" +ReloadScripts="I-reload ang Mga Script" +PythonSettings="Mga Setting ng Python" +PythonSettings.PythonInstallPath32bit="Path ng Pag-install ng Python (32bit)" +PythonSettings.PythonInstallPath64bit="Path ng Pag-install ng Python (64bit)" +PythonSettings.BrowsePythonPath="Mag-browse sa Python Path" +ScriptLogWindow="Mag-log ng Script" +Description="Paglalarawan" + +FileFilter.ScriptFiles="Mga File ng Script" +FileFilter.AllFiles="Lahat ng Mga File" +
View file
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/he-IL.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/he-IL.ini
Changed
@@ -1,7 +1,9 @@ +SceneSwitcher="החלפת סצנה אוטומטית" SceneSwitcher.OnNoMatch="כאשר אין חלון מתאים:" SceneSwitcher.OnNoMatch.DontSwitch="אל תעבור" SceneSwitcher.OnNoMatch.SwitchTo="עבור ל:" SceneSwitcher.CheckInterval="בדוק כותרת חלון פעיל בכל:" +SceneSwitcher.ActiveOrNotActive="החלפת סצנה זה:" InvalidRegex.Title="ביטוי רגולרי לא חוקי" InvalidRegex.Text="הביטוי הרגולרי שהזנת אינו חוקי." Active="פעיל" @@ -23,6 +25,15 @@ OutputTimer.Stream.EnableEverytime="הפעל טיימר הזרמה כל פעם" OutputTimer.Record.EnableEverytime="הפעל טיימר הקלטה כל פעם" +Scripts="תסריטים" +LoadedScripts="תסריטים טעונים" +AddScripts="הוסף תסריט" +RemoveScripts="מחק תסריטים" +ReloadScripts="טען מחדש תסריטים" +PythonSettings="הגדרות פייתון" +PythonSettings.PythonInstallPath32bit="נתיב התקנת פייתון (32 סיביות)" +PythonSettings.PythonInstallPath64bit="התקנת נתיב פייתון (64 סיביות)" +PythonSettings.BrowsePythonPath="עיון בנתיב פייתון" ScriptLogWindow="סקריפט לוג" Description="תיאור"
View file
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ka-GE.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ka-GE.ini
Changed
@@ -1,11 +1,42 @@ +SceneSwitcher="სცენის თვითგადამრთველი" +SceneSwitcher.OnNoMatch="როცა არცერთი ფანჯარა არ ემთხვევა:" +SceneSwitcher.OnNoMatch.DontSwitch="არ გადაირთოს" +SceneSwitcher.OnNoMatch.SwitchTo="გადაირთოს:" +SceneSwitcher.CheckInterval="მოქმედი ფანჯრის დასახელების გადამოწმების დროის შუალედი:" +SceneSwitcher.ActiveOrNotActive="სცენის თვითგადამრთველი:" +InvalidRegex.Title="არამართებული რეგულარული გამოსახულება" +InvalidRegex.Text="შეყვანილი რეგულარული გამოსახულება არასწორია." Active="ჩართული" Inactive="გამორთული" Start="დაწყება" Stop="შეწყვეტა" +Captions="წარწერები (საცდელი)" Captions.AudioSource="აუდიოს წყარო" +Captions.CurrentSystemLanguage="სისტემის მიმდინარე ენა (%1)" +Captions.Provider="მომწოდებელი" +Captions.Error.GenericFail="წარწერების დადება ვერ მოხერხდა" +OutputTimer="ჩაწერის და ნაკადის წამზომი" +OutputTimer.Stream="ნაკადი გაეშვას არაუმეტეს:" +OutputTimer.Record="ჩაწერა გაგრძელდეს არაუმეტეს:" +OutputTimer.Stream.StoppingIn="ნაკადის შეჩერების დროა:" OutputTimer.Record.StoppingIn="ჩაწერის შეწყვეტის დრო:" +OutputTimer.Stream.EnableEverytime="ნაკადის წამზომის ჩართვა ყოველ ჯერზე" +OutputTimer.Record.EnableEverytime="ჩაწერის წამზომის ჩართვა ყოველ ჯერზე" +Scripts="სკრიპტები" +LoadedScripts="ჩატვირთული სკრიპტები" +AddScripts="სკრიპტების დამატება" +RemoveScripts="სკრიპტების მოცილება" +ReloadScripts="სკრიპტების გადატვირთვა" +PythonSettings="Python-ის პარამეტრები" +PythonSettings.PythonInstallPath32bit="Python-ის დასაყენებელი მდებარეობა (32bit)" +PythonSettings.PythonInstallPath64bit="Python-ის დასაყენებელი მდებარეობა (64bit)" +PythonSettings.BrowsePythonPath="Python-ის მდებარეობის მოძიება" +ScriptLogWindow="სკრიპტის აღრიცხვა" +Description="აღწერილობა" +FileFilter.ScriptFiles="სკრიპტის ფაილები" +FileFilter.AllFiles="ყველა ფაილი"
View file
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/nb-NO.ini
Changed
@@ -1,4 +1,4 @@ -SceneSwitcher="Automatisk Scene Skifter" +SceneSwitcher="Automatisk sceneskifter" SceneSwitcher.OnNoMatch="Når ingen vindu passer overens:" SceneSwitcher.OnNoMatch.DontSwitch="Ikke bytt" SceneSwitcher.OnNoMatch.SwitchTo="Bytt til:" @@ -22,8 +22,8 @@ OutputTimer.Record="Stopp opptak etter:" OutputTimer.Stream.StoppingIn="Streaming stopper om:" OutputTimer.Record.StoppingIn="Opptak stopper om:" -OutputTimer.Stream.EnableEverytime="Aktiver streaming timer hver gang" -OutputTimer.Record.EnableEverytime="Aktiver opptaks timer hver gang" +OutputTimer.Stream.EnableEverytime="Aktiver strømmeklokken hver gang" +OutputTimer.Record.EnableEverytime="Aktiver opptaksklokken hver gang" Scripts="Skripter" LoadedScripts="Innlastede skripter"
View file
obs-studio-21.0.3.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/ru-RU.ini
Changed
@@ -17,12 +17,12 @@ Captions.Provider="Поставщик" Captions.Error.GenericFail="Не удалось запустить субтитры" -OutputTimer="Таймер записи и стрима" -OutputTimer.Stream="Завершить стрим через:" +OutputTimer="Таймер записи и трансляции" +OutputTimer.Stream="Завершить трансляцию через:" OutputTimer.Record="Завершить запись через:" -OutputTimer.Stream.StoppingIn="Стрим будет завершён через:" +OutputTimer.Stream.StoppingIn="Трансляция будет завершена через:" OutputTimer.Record.StoppingIn="Запись будет завершена через:" -OutputTimer.Stream.EnableEverytime="Включать таймер стрима каждый раз" +OutputTimer.Stream.EnableEverytime="Включать таймер трансляции каждый раз" OutputTimer.Record.EnableEverytime="Включать таймер записи каждый раз" Scripts="Скрипты"
View file
obs-studio-21.1.2.tar.xz/UI/frontend-plugins/frontend-tools/data/locale/tl-PH.ini
Added
@@ -0,0 +1,42 @@ +SceneSwitcher="Awtomatikong Taga-palit ng Eksena" +SceneSwitcher.OnNoMatch="Kapag walang tumugmang window:" +SceneSwitcher.OnNoMatch.DontSwitch="Huwag lumipat" +SceneSwitcher.OnNoMatch.SwitchTo="Lumipat sa:" +SceneSwitcher.CheckInterval="Suriin ang pamagat ng aktibong window kada:" +SceneSwitcher.ActiveOrNotActive="Ang Tag-palit ng Eksena ay:" +InvalidRegex.Title="Di-wastong Regular Expression" +InvalidRegex.Text="Ang regular na ekspresyon na iyong ipinasok ay imbalido." +Active="Aktibo" +Inactive="Hindi aktibo" +Start="Simula" +Stop="Ihinto" + +Captions="Mga Pamagat (Eksparimento)" +Captions.AudioSource="Pinanggalingan ng Audio" +Captions.CurrentSystemLanguage="Kasalukuyang linggwahe ng sistema (%1)" +Captions.Provider="Tagapagtustos" +Captions.Error.GenericFail="Nabigo sa pasisimula ng mga pamagat" + +OutputTimer="Pamlabas na Orasan" +OutputTimer.Stream="Itigil ang pag-stream pagkatapos:" +OutputTimer.Record="Itigil ang pagtatala pagkatapos:" +OutputTimer.Stream.StoppingIn="Ang pagtigil ng stream sa:" +OutputTimer.Record.StoppingIn="Ang pagtigil ng pagtatala sa:" +OutputTimer.Stream.EnableEverytime="Paganahin ang streaming timer sa bawat oras" +OutputTimer.Record.EnableEverytime="Paganahin ang timer ng pagtatala bawat oras" + +Scripts="Mga iskrip" +LoadedScripts="Mga iskrip na naikarga" +AddScripts="Magdagdag ng iskrip" +RemoveScripts="Tanggalin ang mga iskrip" +ReloadScripts="Ikargang muli ang mga Iskrip" +PythonSettings="Mga Setting Python" +PythonSettings.PythonInstallPath32bit="I-install ang daan sa Python (32bit)" +PythonSettings.PythonInstallPath64bit="I-install ang Daan sa Python (64bit)" +PythonSettings.BrowsePythonPath="Daan ng Browse Python" +ScriptLogWindow="Mag-log sa Iskrip" +Description="Paglalarawan" + +FileFilter.ScriptFiles="Mga File ng Iskrip" +FileFilter.AllFiles="Lahat ng mga File" +
View file
obs-studio-21.0.3.tar.xz/UI/obs-app.cpp -> obs-studio-21.1.2.tar.xz/UI/obs-app.cpp
Changed
@@ -60,6 +60,7 @@ static string currentLogFile; static string lastLogFile; +static string lastCrashLogFile; bool portable_mode = false; static bool multi = false; @@ -1051,6 +1052,11 @@ return currentLogFile.c_str(); } +const char *OBSApp::GetLastCrashLog() const +{ + return lastCrashLogFile.c_str(); +} + bool OBSApp::TranslateString(const char *lookupVal, const char **out) const { for (obs_frontend_translate_ui_cb cb : translatorHooks) { @@ -1097,13 +1103,18 @@ return strref_cmp(&token.text, str) == 0; } -static uint64_t convert_log_name(const char *name) +static uint64_t convert_log_name(bool has_prefix, const char *name) { BaseLexer lex; string year, month, day, hour, minute, second; lexer_start(lex, name); + if (has_prefix) { + string temp; + if (!get_token(lex, temp, BASETOKEN_ALPHA)) return 0; + } + if (!get_token(lex, year, BASETOKEN_DIGIT)) return 0; if (!expect_token(lex, "-", BASETOKEN_OTHER)) return 0; if (!get_token(lex, month, BASETOKEN_DIGIT)) return 0; @@ -1120,7 +1131,7 @@ return std::stoull(timestring.str()); } -static void delete_oldest_file(const char *location) +static void delete_oldest_file(bool has_prefix, const char *location) { BPtr<char> logDir(GetConfigPathPtr(location)); string oldestLog; @@ -1138,7 +1149,8 @@ if (entry->directory || *entry->d_name == '.') continue; - uint64_t ts = convert_log_name(entry->d_name); + uint64_t ts = convert_log_name(has_prefix, + entry->d_name); if (ts) { if (ts < oldest_ts) { @@ -1161,9 +1173,10 @@ } } -static void get_last_log(void) +static void get_last_log(bool has_prefix, const char *subdir_to_use, + std::string &last) { - BPtr<char> logDir(GetConfigPathPtr("obs-studio/logs")); + BPtr<char> logDir(GetConfigPathPtr(subdir_to_use)); struct os_dirent *entry; os_dir_t *dir = os_opendir(logDir); uint64_t highest_ts = 0; @@ -1173,11 +1186,12 @@ if (entry->directory || *entry->d_name == '.') continue; - uint64_t ts = convert_log_name(entry->d_name); + uint64_t ts = convert_log_name(has_prefix, + entry->d_name); if (ts > highest_ts) { - lastLogFile = entry->d_name; - highest_ts = ts; + last = entry->d_name; + highest_ts = ts; } } @@ -1240,7 +1254,10 @@ { stringstream dst; - get_last_log(); + get_last_log(false, "obs-studio/logs", lastLogFile); +#ifdef _WIN32 + get_last_log(true, "obs-studio/crashes", lastCrashLogFile); +#endif currentLogFile = GenerateTimeDateFilename("txt"); dst << "obs-studio/logs/" << currentLogFile.c_str(); @@ -1258,7 +1275,7 @@ #endif if (logFile.is_open()) { - delete_oldest_file("obs-studio/logs"); + delete_oldest_file(false, "obs-studio/logs"); base_set_log_handler(do_log, &logFile); } else { blog(LOG_ERROR, "Failed to open log file"); @@ -1354,7 +1371,7 @@ OBSTranslator translator; create_log_file(logFile); - delete_oldest_file("obs-studio/profiler_data"); + delete_oldest_file(false, "obs-studio/profiler_data"); program.installTranslator(&translator); @@ -1441,7 +1458,7 @@ vsnprintf(text, MAX_CRASH_REPORT_SIZE, format, args); text[MAX_CRASH_REPORT_SIZE - 1] = 0; - delete_oldest_file("obs-studio/crashes"); + delete_oldest_file(true, "obs-studio/crashes"); string name = "obs-studio/crashes/Crash "; name += GenerateTimeDateFilename("txt");
View file
obs-studio-21.0.3.tar.xz/UI/obs-app.hpp -> obs-studio-21.1.2.tar.xz/UI/obs-app.hpp
Changed
@@ -116,6 +116,8 @@ const char *GetLastLog() const; const char *GetCurrentLog() const; + const char *GetLastCrashLog() const; + std::string GetVersionString() const; bool IsPortableMode();
View file
obs-studio-21.0.3.tar.xz/UI/properties-view.cpp -> obs-studio-21.1.2.tar.xz/UI/properties-view.cpp
Changed
@@ -236,7 +236,7 @@ { const char *name = obs_property_name(prop); const char *val = obs_data_get_string(settings, name); - obs_text_type type = obs_proprety_text_type(prop); + obs_text_type type = obs_property_text_type(prop); if (type == OBS_TEXT_MULTILINE) { QPlainTextEdit *edit = new QPlainTextEdit(QT_UTF8(val)); @@ -1529,7 +1529,7 @@ void WidgetInfo::TextChanged(const char *setting) { - obs_text_type type = obs_proprety_text_type(property); + obs_text_type type = obs_property_text_type(property); if (type == OBS_TEXT_MULTILINE) { QPlainTextEdit *edit = static_cast<QPlainTextEdit*>(widget);
View file
obs-studio-21.0.3.tar.xz/UI/win-update/updater/hash.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/hash.cpp
Changed
@@ -1,3 +1,19 @@ +/* + * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + #include "updater.hpp" #include <util/windows/WinHandle.hpp>
View file
obs-studio-21.0.3.tar.xz/UI/win-update/updater/http.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/http.cpp
Changed
@@ -1,3 +1,19 @@ +/* + * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + #include "Updater.hpp" #include <algorithm>
View file
obs-studio-21.0.3.tar.xz/UI/win-update/updater/patch.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/patch.cpp
Changed
@@ -1,9 +1,31 @@ +/* + * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + #include "updater.hpp" #include <stdint.h> #include <vector> -#include <lzma.h> +#ifdef _MSC_VER +# define restrict __restrict +# include <lzma.h> +# undef restrict +#else +# include <lzma.h> +#endif using namespace std; @@ -234,7 +256,7 @@ vector<uint8_t> newData; try { - newData.resize(newsize); + newData.resize((size_t)newsize); } catch (...) { throw int(-1); }
View file
obs-studio-21.0.3.tar.xz/UI/win-update/updater/updater.cpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/updater.cpp
Changed
@@ -1,20 +1,18 @@ -/****************************************************************************** - Copyright (C) 2017 Hugh Bailey <obs.jim@gmail.com> - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA. -******************************************************************************/ +/* + * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ #include "updater.hpp" @@ -59,50 +57,48 @@ /* ----------------------------------------------------------------------- */ -// http://www.codeproject.com/Articles/320748/Haephrati-Elevating-during-runtime -static bool IsAppRunningAsAdminMode() +static inline bool is_64bit_windows(void); + +static inline bool HasVS2017Redist2() { - BOOL fIsRunAsAdmin = FALSE; - DWORD dwError = ERROR_SUCCESS; - PSID pAdministratorsGroup = nullptr; - - /* Allocate and initialize a SID of the administrators group. */ - SID_IDENTIFIER_AUTHORITY NtAuthority = SECURITY_NT_AUTHORITY; - if (!AllocateAndInitializeSid(&NtAuthority, - 2, - SECURITY_BUILTIN_DOMAIN_RID, - DOMAIN_ALIAS_RID_ADMINS, - 0, - 0, - 0, - 0, - 0, - 0, - &pAdministratorsGroup)) { - dwError = GetLastError(); - goto Cleanup; - } + wchar_t base[MAX_PATH]; + wchar_t path[MAX_PATH]; + WIN32_FIND_DATAW wfd; + HANDLE handle; + int folder = (is32bit && is_64bit_windows()) + ? CSIDL_SYSTEMX86 + : CSIDL_SYSTEM; - /* Determine whether the SID of administrators group is enabled in the - * primary access token of the process. */ - if (!CheckTokenMembership(nullptr, pAdministratorsGroup, - &fIsRunAsAdmin)) { - dwError = GetLastError(); - goto Cleanup; - } + SHGetFolderPathW(NULL, folder, NULL, SHGFP_TYPE_CURRENT, base); -Cleanup: - /* Centralized cleanup for all allocated resources. */ - if (pAdministratorsGroup) { - FreeSid(pAdministratorsGroup); - pAdministratorsGroup = nullptr; + StringCbCopyW(path, sizeof(path), base); + StringCbCatW(path, sizeof(path), L"\\msvcp140.dll"); + handle = FindFirstFileW(path, &wfd); + if (handle == INVALID_HANDLE_VALUE) { + return false; + } else { + FindClose(handle); } - /* Throw the error if something failed in the function. */ - if (ERROR_SUCCESS != dwError) + StringCbCopyW(path, sizeof(path), base); + StringCbCatW(path, sizeof(path), L"\\vcruntime140.dll"); + handle = FindFirstFileW(path, &wfd); + if (handle == INVALID_HANDLE_VALUE) { return false; + } else { + FindClose(handle); + } - return !!fIsRunAsAdmin; + return true; +} + +static bool HasVS2017Redist() +{ + PVOID old = nullptr; + bool redirect = !!Wow64DisableWow64FsRedirection(&old); + bool success = HasVS2017Redist2(); + if (redirect) Wow64RevertWow64FsRedirection(old); + return success; } static void Status(const wchar_t *fmt, ...) @@ -608,6 +604,11 @@ strstr(file, "64.exe") != nullptr; } +static inline bool has_str(const char *file, const char *str) +{ + return (file && str) ? (strstr(file, str) != nullptr) : false; +} + #define UTF8ToWideBuf(wide, utf8) UTF8ToWide(wide, _countof(wide), utf8) #define WideToUTF8Buf(utf8, wide) WideToUTF8(utf8, _countof(utf8), wide) @@ -661,6 +662,12 @@ if (!isWin64 && is_64bit_file(fileUTF8)) continue; + /* ignore update files of opposite arch to reduce download */ + + if (( is32bit && has_str(fileUTF8, "/64bit/")) || + (!is32bit && has_str(fileUTF8, "/32bit/"))) + continue; + /* convert strings to wide */ wchar_t sourceURL[1024]; @@ -930,6 +937,156 @@ #define HASH_NULL \ L"0000000000000000000000000000000000000000" +static bool UpdateVS2017Redists(json_t *root) +{ + /* ------------------------------------------ * + * Initialize session */ + + const DWORD tlsProtocols = WINHTTP_FLAG_SECURE_PROTOCOL_TLS1_2; + + HttpHandle hSession = WinHttpOpen(L"OBS Studio Updater/2.1", + WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, + WINHTTP_NO_PROXY_NAME, + WINHTTP_NO_PROXY_BYPASS, + 0); + if (!hSession) { + Status(L"Update failed: Couldn't open obsproject.com"); + return false; + } + + WinHttpSetOption(hSession, WINHTTP_OPTION_SECURE_PROTOCOLS, + (LPVOID)&tlsProtocols, sizeof(tlsProtocols)); + + HttpHandle hConnect = WinHttpConnect(hSession, L"obsproject.com", + INTERNET_DEFAULT_HTTPS_PORT, 0); + if (!hConnect) { + Status(L"Update failed: Couldn't connect to obsproject.com"); + return false; + } + + int responseCode; + + DWORD waitResult = WaitForSingleObject(cancelRequested, 0); + if (waitResult == WAIT_OBJECT_0) { + return false; + } + + /* ------------------------------------------ * + * Download redist */ + + Status(L"Downloading %s", L"Visual C++ 2017 Redistributable"); + + const wchar_t *file = (is32bit) + ? L"vc2017redist_x86.exe" + : L"vc2017redist_x64.exe"; + + wstring sourceURL; + sourceURL += L"https://obsproject.com/downloads/"; + sourceURL += file; + + wstring destPath; + destPath += tempPath; + destPath += L"\\"; + destPath += file; + + if (!HTTPGetFile(hConnect, + sourceURL.c_str(), + destPath.c_str(), + L"Accept-Encoding: gzip", + &responseCode)) { + + DeleteFile(destPath.c_str()); + Status(L"Update failed: Could not download " + L"%s (error code %d)", + L"Visual C++ 2017 Redistributable", + responseCode); + return false; + } + + /* ------------------------------------------ * + * Get expected hash */ + + json_t *redistJson = json_object_get(root, is32bit + ? "vc2017_redist_x86" + : "vc2017_redist_x64"); + if (!redistJson) { + Status(L"Update failed: Could not parse VC2017 redist json"); + return false; + } + + const char *expectedHashUTF8 = json_string_value(redistJson); + wchar_t expectedHashWide[BLAKE2_HASH_STR_LENGTH]; + BYTE expectedHash[BLAKE2_HASH_LENGTH]; + + if (!UTF8ToWideBuf(expectedHashWide, expectedHashUTF8)) { + DeleteFile(destPath.c_str()); + Status(L"Update failed: Couldn't convert Json for redist hash"); + return false; + } + + StringToHash(expectedHashWide, expectedHash); + + wchar_t downloadHashWide[BLAKE2_HASH_STR_LENGTH]; + BYTE downloadHash[BLAKE2_HASH_LENGTH]; + + /* ------------------------------------------ * + * Get download hash */ + + if (!CalculateFileHash(destPath.c_str(), downloadHash)) { + DeleteFile(destPath.c_str()); + Status(L"Update failed: Couldn't verify integrity of %s", + L"Visual C++ 2017 Redistributable"); + return false; + } + + /* ------------------------------------------ * + * If hashes do not match, integrity failed */ + + HashToString(downloadHash, downloadHashWide); + if (wcscmp(expectedHashWide, downloadHashWide) != 0) { + DeleteFile(destPath.c_str()); + Status(L"Update failed: Couldn't verify integrity of %s", + L"Visual C++ 2017 Redistributable"); + return false; + } + + /* ------------------------------------------ * + * If hashes match, install redist */ + + wchar_t commandline[MAX_PATH + MAX_PATH]; + StringCbPrintf(commandline, sizeof(commandline), + L"%s /install /quiet /norestart", destPath.c_str()); + + PROCESS_INFORMATION pi = {}; + STARTUPINFO si = {}; + si.cb = sizeof(si); + + bool success = !!CreateProcessW(destPath.c_str(), commandline, + nullptr, nullptr, false, CREATE_NO_WINDOW, + nullptr, nullptr, &si, &pi); + if (success) { + Status(L"Installing %s...", L"Visual C++ 2017 Redistributable"); + + CloseHandle(pi.hThread); + WaitForSingleObject(pi.hProcess, INFINITE); + CloseHandle(pi.hProcess); + } else { + Status(L"Update failed: Could not execute " + L"%s (error code %d)", + L"Visual C++ 2017 Redistributable", + (int)GetLastError()); + } + + DeleteFile(destPath.c_str()); + + waitResult = WaitForSingleObject(cancelRequested, 0); + if (waitResult == WAIT_OBJECT_0) { + return false; + } + + return success; +} + static bool Update(wchar_t *cmdLine) { /* ------------------------------------- * @@ -1092,6 +1249,15 @@ } /* ------------------------------------- * + * Check for VS2017 redistributables */ + + if (!HasVS2017Redist()) { + if (!UpdateVS2017Redists(root)) { + return false; + } + } + + /* ------------------------------------- * * Generate file hash json */ Json files(json_array()); @@ -1219,7 +1385,7 @@ if (!RunDownloadWorkers(2)) return false; - if (completedUpdates != updates.size()) { + if ((size_t)completedUpdates != updates.size()) { Status(L"Update failed to download all files."); return false; } @@ -1431,11 +1597,28 @@ } } +static bool HasElevation() +{ + SID_IDENTIFIER_AUTHORITY sia = SECURITY_NT_AUTHORITY; + PSID sid = nullptr; + BOOL elevated = false; + BOOL success; + + success = AllocateAndInitializeSid(&sia, 2, SECURITY_BUILTIN_DOMAIN_RID, + DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, &sid); + if (success && sid) { + CheckTokenMembership(nullptr, sid, &elevated); + FreeSid(sid); + } + + return elevated; +} + int WINAPI wWinMain(HINSTANCE hInstance, HINSTANCE, LPWSTR lpCmdLine, int) { INITCOMMONCONTROLSEX icce; - if (!IsAppRunningAsAdminMode()) { + if (!HasElevation()) { HANDLE hLowMutex = CreateMutexW(nullptr, true, L"OBSUpdaterRunningAsNonAdminUser");
View file
obs-studio-21.0.3.tar.xz/UI/win-update/updater/updater.hpp -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/updater.hpp
Changed
@@ -1,3 +1,19 @@ +/* + * Copyright (c) 2017-2018 Hugh Bailey <obs.jim@gmail.com> + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ + #pragma once #define WINVER 0x0600
View file
obs-studio-21.0.3.tar.xz/UI/win-update/updater/updater.rc -> obs-studio-21.1.2.tar.xz/UI/win-update/updater/updater.rc
Changed
@@ -7,7 +7,7 @@ // // Generated from the TEXTINCLUDE 2 resource. // -#include "afxres.h" +#include "winres.h" ///////////////////////////////////////////////////////////////////////////// #undef APSTUDIO_READONLY_SYMBOLS
View file
obs-studio-21.0.3.tar.xz/UI/window-basic-main.cpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-main.cpp
Changed
@@ -1647,13 +1647,30 @@ ui->viewMenu->addSeparator(); - QMenu *multiviewProjectorMenu = new QMenu(QTStr("MultiviewProjector")); - AddProjectorMenuMonitors(multiviewProjectorMenu, this, - SLOT(OpenMultiviewProjector())); + multiviewProjectorMenu = new QMenu(QTStr("MultiviewProjector")); ui->viewMenu->addMenu(multiviewProjectorMenu); - + connect(ui->viewMenu->menuAction(), &QAction::hovered, this, + &OBSBasic::UpdateMultiviewProjectorMenu); ui->viewMenu->addAction(QTStr("MultiviewWindowed"), this, SLOT(OpenMultiviewWindow())); + +#if !defined(_WIN32) && !defined(__APPLE__) + delete ui->actionShowCrashLogs; + delete ui->actionUploadLastCrashLog; + delete ui->menuCrashLogs; + delete ui->actionCheckForUpdates; + ui->actionShowCrashLogs = nullptr; + ui->actionUploadLastCrashLog = nullptr; + ui->menuCrashLogs = nullptr; + ui->actionCheckForUpdates = nullptr; +#endif +} + +void OBSBasic::UpdateMultiviewProjectorMenu() +{ + multiviewProjectorMenu->clear(); + AddProjectorMenuMonitors(multiviewProjectorMenu, this, + SLOT(OpenMultiviewProjector())); } void OBSBasic::InitHotkeys() @@ -3520,10 +3537,10 @@ QString str = QString("%1 %2: %3x%4 @ %5,%6"). arg(QTStr("Display"), QString::number(i), - QString::number((int)screenGeometry.width()), - QString::number((int)screenGeometry.height()), - QString::number((int)screenGeometry.x()), - QString::number((int)screenGeometry.y())); + QString::number(screenGeometry.width()), + QString::number(screenGeometry.height()), + QString::number(screenGeometry.x()), + QString::number(screenGeometry.y())); action = parent->addAction(str, target, slot); action->setProperty("monitor", i); @@ -4220,10 +4237,10 @@ obs_sceneitem_set_order(item, OBS_ORDER_MOVE_BOTTOM); } -static BPtr<char> ReadLogFile(const char *log) +static BPtr<char> ReadLogFile(const char *subdir, const char *log) { char logDir[512]; - if (GetConfigPath(logDir, sizeof(logDir), "obs-studio/logs") <= 0) + if (GetConfigPath(logDir, sizeof(logDir), subdir) <= 0) return nullptr; string path = (char*)logDir; @@ -4237,9 +4254,9 @@ return file; } -void OBSBasic::UploadLog(const char *file) +void OBSBasic::UploadLog(const char *subdir, const char *file) { - BPtr<char> fileString{ReadLogFile(file)}; + BPtr<char> fileString{ReadLogFile(subdir, file)}; if (!fileString) return; @@ -4249,32 +4266,11 @@ ui->menuLogFiles->setEnabled(false); - auto data_deleter = [](obs_data_t *d) { obs_data_release(d); }; - using data_t = unique_ptr<struct obs_data, decltype(data_deleter)>; - - data_t content{obs_data_create(), data_deleter}; - data_t files{obs_data_create(), data_deleter}; - data_t request{obs_data_create(), data_deleter}; - - obs_data_set_string(content.get(), "content", fileString); - - obs_data_set_obj(files.get(), file, content.get()); - stringstream ss; ss << "OBS " << App()->GetVersionString() - << " log file uploaded at " << CurrentDateTimeString(); - obs_data_set_string(request.get(), "description", ss.str().c_str()); - obs_data_set_bool(request.get(), "public", false); - obs_data_set_obj(request.get(), "files", files.get()); + << " log file uploaded at " << CurrentDateTimeString() + << "\n\n" << fileString; - const char *json = obs_data_get_json(request.get()); - if (!json) { - blog(LOG_ERROR, "Failed to get JSON data for log upload"); - return; - } - - QBuffer *postData = new QBuffer(); - postData->setData(json, (int) strlen(json)); if (logUploadThread) { logUploadThread->wait(); @@ -4282,8 +4278,9 @@ } RemoteTextThread *thread = new RemoteTextThread( - "https://api.github.com/gists", - "application/json", json); + "https://hastebin.com/documents", + "text/plain", ss.str().c_str()); + logUploadThread = thread; connect(thread, &RemoteTextThread::Result, this, &OBSBasic::logUploadFinished); @@ -4302,12 +4299,12 @@ void OBSBasic::on_actionUploadCurrentLog_triggered() { - UploadLog(App()->GetCurrentLog()); + UploadLog("obs-studio/logs", App()->GetCurrentLog()); } void OBSBasic::on_actionUploadLastLog_triggered() { - UploadLog(App()->GetLastLog()); + UploadLog("obs-studio/logs", App()->GetLastLog()); } void OBSBasic::on_actionViewCurrentLog_triggered() @@ -4326,6 +4323,21 @@ QDesktopServices::openUrl(url); } +void OBSBasic::on_actionShowCrashLogs_triggered() +{ + char logDir[512]; + if (GetConfigPath(logDir, sizeof(logDir), "obs-studio/crashes") <= 0) + return; + + QUrl url = QUrl::fromLocalFile(QT_UTF8(logDir)); + QDesktopServices::openUrl(url); +} + +void OBSBasic::on_actionUploadLastCrashLog_triggered() +{ + UploadLog("obs-studio/crashes", App()->GetLastCrashLog()); +} + void OBSBasic::on_actionCheckForUpdates_triggered() { CheckForUpdates(true); @@ -4343,7 +4355,9 @@ } obs_data_t *returnData = obs_data_create_from_json(QT_TO_UTF8(text)); - QString logURL = obs_data_get_string(returnData, "html_url"); + string resURL = "https://hastebin.com/"; + resURL += obs_data_get_string(returnData, "key"); + QString logURL = resURL.c_str(); obs_data_release(returnData); OBSLogReply logDialog(this, logURL); @@ -6040,29 +6054,32 @@ connect(exit, SIGNAL(triggered()), this, SLOT(close())); - QMenu *previewProjector = new QMenu(QTStr("PreviewProjector")); - AddProjectorMenuMonitors(previewProjector, this, - SLOT(OpenPreviewProjector())); - QMenu *studioProgramProjector = new QMenu( - QTStr("StudioProgramProjector")); - AddProjectorMenuMonitors(studioProgramProjector, this, - SLOT(OpenStudioProgramProjector())); - trayMenu = new QMenu; - trayMenu->addAction(showHide); - trayMenu->addMenu(previewProjector); - trayMenu->addMenu(studioProgramProjector); - trayMenu->addAction(sysTrayStream); - trayMenu->addAction(sysTrayRecord); - trayMenu->addAction(sysTrayReplayBuffer); - trayMenu->addAction(exit); - trayIcon->setContextMenu(trayMenu); } void OBSBasic::IconActivated(QSystemTrayIcon::ActivationReason reason) { - if (reason == QSystemTrayIcon::Trigger) + if (reason == QSystemTrayIcon::Trigger) { ToggleShowHide(); + } else if (reason == QSystemTrayIcon::Context) { + QMenu *previewProjector = new QMenu(QTStr("PreviewProjector")); + AddProjectorMenuMonitors(previewProjector, this, + SLOT(OpenPreviewProjector())); + QMenu *studioProgramProjector = new QMenu( + QTStr("StudioProgramProjector")); + AddProjectorMenuMonitors(studioProgramProjector, this, + SLOT(OpenStudioProgramProjector())); + + trayMenu->clear(); + trayMenu->addAction(showHide); + trayMenu->addMenu(previewProjector); + trayMenu->addMenu(studioProgramProjector); + trayMenu->addAction(sysTrayStream); + trayMenu->addAction(sysTrayRecord); + trayMenu->addAction(sysTrayReplayBuffer); + trayMenu->addAction(exit); + trayMenu->popup(QCursor::pos()); + } } void OBSBasic::SysTrayNotify(const QString &text,
View file
obs-studio-21.0.3.tar.xz/UI/window-basic-main.hpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-main.hpp
Changed
@@ -186,6 +186,9 @@ QPointer<QAction> exit; QPointer<QMenu> trayMenu; + QPointer<QMenu> multiviewProjectorMenu; + void UpdateMultiviewProjectorMenu(); + void DrawBackdrop(float cx, float cy); void SetupEncoders(); @@ -196,7 +199,7 @@ void UpdateVolumeControlsDecayRate(); void ClearVolumeControls(); - void UploadLog(const char *file); + void UploadLog(const char *subdir, const char *file); void Save(const char *file); void Load(const char *file); @@ -586,6 +589,9 @@ void on_actionViewCurrentLog_triggered(); void on_actionCheckForUpdates_triggered(); + void on_actionShowCrashLogs_triggered(); + void on_actionUploadLastCrashLog_triggered(); + void on_actionEditTransform_triggered(); void on_actionCopyTransform_triggered(); void on_actionPasteTransform_triggered();
View file
obs-studio-21.0.3.tar.xz/UI/window-basic-preview.cpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-preview.cpp
Changed
@@ -1105,6 +1105,9 @@ if (obs_sceneitem_locked(item)) return true; + if (!SceneItemHasVideo(item)) + return true; + if (!obs_sceneitem_selected(item)) return true;
View file
obs-studio-21.0.3.tar.xz/UI/window-basic-settings.cpp -> obs-studio-21.1.2.tar.xz/UI/window-basic-settings.cpp
Changed
@@ -412,7 +412,6 @@ HookWidget(ui->fpsType, COMBO_CHANGED, VIDEO_CHANGED); HookWidget(ui->fpsCommon, COMBO_CHANGED, VIDEO_CHANGED); HookWidget(ui->fpsInteger, SCROLL_CHANGED, VIDEO_CHANGED); - HookWidget(ui->fpsInteger, SCROLL_CHANGED, VIDEO_CHANGED); HookWidget(ui->fpsNumerator, SCROLL_CHANGED, VIDEO_CHANGED); HookWidget(ui->fpsDenominator, SCROLL_CHANGED, VIDEO_CHANGED); HookWidget(ui->renderer, COMBO_CHANGED, ADV_RESTART); @@ -443,10 +442,13 @@ HookWidget(ui->enableNewSocketLoop, CHECK_CHANGED, ADV_CHANGED); HookWidget(ui->enableLowLatencyMode, CHECK_CHANGED, ADV_CHANGED); -#if !defined(_WIN32) && !defined(__APPLE__) && !HAVE_PULSEAUDIO +#if !defined(_WIN32) && !defined(__APPLE__) delete ui->enableAutoUpdates; - delete ui->advAudioGroupBox; ui->enableAutoUpdates = nullptr; +#endif + +#if !defined(_WIN32) && !defined(__APPLE__) && !HAVE_PULSEAUDIO + delete ui->advAudioGroupBox; ui->advAudioGroupBox = nullptr; #endif
View file
obs-studio-21.0.3.tar.xz/cmake/Modules/CopyMSVCBins.cmake -> obs-studio-21.1.2.tar.xz/cmake/Modules/CopyMSVCBins.cmake
Changed
@@ -147,27 +147,27 @@ ) endif() -if (CMAKE_CONFIGURATION_TYPES MATCHES "Debug") - file(GLOB QT_DEBUG_BIN_FILES - "${Qt5Core_DIR}/../../../bin/Qt5Cored.dll" - "${Qt5Core_DIR}/../../../bin/Qt5Guid.dll" - "${Qt5Core_DIR}/../../../bin/Qt5Widgetsd.dll" - "${Qt5Core_DIR}/../../../bin/libGLESv2d.dll" - "${Qt5Core_DIR}/../../../bin/libEGLd.dll") - file(GLOB QT_DEBUG_PLAT_BIN_FILES - "${Qt5Core_DIR}/../../../plugins/platforms/qwindowsd.dll") -endif() - -if (CMAKE_CONFIGURATION_TYPES MATCHES "Rel") - file(GLOB QT_BIN_FILES - "${Qt5Core_DIR}/../../../bin/Qt5Core.dll" - "${Qt5Core_DIR}/../../../bin/Qt5Gui.dll" - "${Qt5Core_DIR}/../../../bin/Qt5Widgets.dll" - "${Qt5Core_DIR}/../../../bin/libGLESv2.dll" - "${Qt5Core_DIR}/../../../bin/libEGL.dll") - file(GLOB QT_PLAT_BIN_FILES - "${Qt5Core_DIR}/../../../plugins/platforms/qwindows.dll") -endif() +file(GLOB QT_DEBUG_BIN_FILES + "${Qt5Core_DIR}/../../../bin/Qt5Cored.dll" + "${Qt5Core_DIR}/../../../bin/Qt5Guid.dll" + "${Qt5Core_DIR}/../../../bin/Qt5Widgetsd.dll" + "${Qt5Core_DIR}/../../../bin/libGLESv2d.dll" + "${Qt5Core_DIR}/../../../bin/libEGLd.dll") +file(GLOB QT_DEBUG_PLAT_BIN_FILES + "${Qt5Core_DIR}/../../../plugins/platforms/qwindowsd.dll") +file(GLOB QT_DEBUG_STYLES_BIN_FILES + "${Qt5Core_DIR}/../../../plugins/styles/qwindowsvistastyled.dll") + +file(GLOB QT_BIN_FILES + "${Qt5Core_DIR}/../../../bin/Qt5Core.dll" + "${Qt5Core_DIR}/../../../bin/Qt5Gui.dll" + "${Qt5Core_DIR}/../../../bin/Qt5Widgets.dll" + "${Qt5Core_DIR}/../../../bin/libGLESv2.dll" + "${Qt5Core_DIR}/../../../bin/libEGL.dll") +file(GLOB QT_PLAT_BIN_FILES + "${Qt5Core_DIR}/../../../plugins/platforms/qwindows.dll") +file(GLOB QT_STYLES_BIN_FILES + "${Qt5Core_DIR}/../../../plugins/styles/qwindowsvistastyle.dll") file(GLOB QT_ICU_BIN_FILES "${Qt5Core_DIR}/../../../bin/icu*.dll") @@ -190,16 +190,21 @@ ${QT_DEBUG_BIN_FILES}) set(ALL_PLATFORM_BIN_FILES) - set(ALL_PLATFORM_REL_BIN_FILES ${QT_PLAT_BIN_FILES}) - set(ALL_PLATFORM_DBG_BIN_FILES ${QT_DEBUG_PLAT_BIN_FILES}) +set(ALL_STYLES_BIN_FILES) +set(ALL_STYLES_REL_BIN_FILES + ${QT_STYLES_BIN_FILES}) +set(ALL_STYLES_DBG_BIN_FILES + ${QT_DEBUG_STYLES_BIN_FILES}) + foreach(list ALL_BASE_BIN_FILES ALL_REL_BIN_FILES ALL_DBG_BIN_FILES - ALL_PLATFORM_BIN_FILES ALL_PLATFORM_REL_BIN_FILES ALL_PLATFORM_DBG_BIN_FILES) + ALL_PLATFORM_BIN_FILES ALL_PLATFORM_REL_BIN_FILES ALL_PLATFORM_DBG_BIN_FILES + ALL_STYLES_BIN_FILES ALL_STYLES_REL_BIN_FILES ALL_STYLES_DBG_BIN_FILES) if(${list}) list(REMOVE_DUPLICATES ${list}) endif() @@ -215,8 +220,10 @@ message(STATUS "zlib files: ${ZLIB_BIN_FILES}") message(STATUS "QT Debug files: ${QT_DEBUG_BIN_FILES}") message(STATUS "QT Debug Platform files: ${QT_DEBUG_PLAT_BIN_FILES}") +message(STATUS "QT Debug Styles files: ${QT_DEBUG_STYLES_BIN_FILES}") message(STATUS "QT Release files: ${QT_BIN_FILES}") message(STATUS "QT Release Platform files: ${QT_PLAT_BIN_FILES}") +message(STATUS "QT Release Styles files: ${QT_STYLES_BIN_FILES}") message(STATUS "QT ICU files: ${QT_ICU_BIN_FILES}") foreach(BinFile ${ALL_BASE_BIN_FILES}) @@ -249,4 +256,19 @@ file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/platforms/") endforeach() +foreach(BinFile ${ALL_STYLES_BIN_FILES}) + make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}/styles") + file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}/styles/") +endforeach() + +foreach(BinFile ${ALL_STYLES_REL_BIN_FILES}) + make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r/styles") + file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}r/styles/") +endforeach() + +foreach(BinFile ${ALL_STYLES_DBG_BIN_FILES}) + make_directory("${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/styles") + file(COPY "${BinFile}" DESTINATION "${CMAKE_SOURCE_DIR}/additional_install_files/exec${_bin_suffix}d/styles/") +endforeach() + set(COPIED_DEPENDENCIES TRUE CACHE BOOL "Dependencies have been copied, set to false to copy again" FORCE)
View file
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting-lua.c -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obs-scripting-lua.c
Changed
@@ -377,7 +377,7 @@ lock_callback(); lua_pushnumber(script, (lua_Number)seconds); - call_func(obs_lua_tick_callback, 2, 0); + call_func(obs_lua_tick_callback, 1, 0); unlock_callback(); } @@ -581,6 +581,32 @@ /* -------------------------------------------- */ +static bool source_enum_filters_proc(obs_source_t *source, obs_source_t *filter, void *param) +{ + lua_State *script = param; + + obs_source_get_ref(filter); + ls_push_libobs_obj(obs_source_t, filter, false); + + size_t idx = lua_rawlen(script, -2); + lua_rawseti(script, -2, (int)idx + 1); + return true; +} + +static int source_enum_filters(lua_State *script) +{ + obs_source_t *source; + if (!ls_get_libobs_obj(obs_source_t, 1, &source)) + return 0; + + lua_newtable(script); + obs_source_enum_filters(source, source_enum_filters_proc, script); + return 1; +} + + +/* -------------------------------------------- */ + static bool enum_items_proc(obs_scene_t *scene, obs_sceneitem_t *item, void *param) { @@ -972,6 +998,7 @@ add_func("timer_remove", timer_remove); add_func("timer_add", timer_add); add_func("obs_enum_sources", enum_sources); + add_func("obs_source_enum_filters", source_enum_filters); add_func("obs_scene_enum_items", scene_enum_items); add_func("source_list_release", source_list_release); add_func("sceneitem_list_release", sceneitem_list_release);
View file
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting-python.c -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obs-scripting-python.c
Changed
@@ -1595,6 +1595,8 @@ extern void add_python_frontend_funcs(PyObject *module); +static bool python_loaded_at_all = false; + bool obs_scripting_load_python(const char *python_path) { if (python_loaded) @@ -1696,6 +1698,8 @@ obs_python_unload(); } + python_loaded_at_all = success; + if (python_loaded) obs_add_tick_callback(python_tick, NULL); @@ -1704,6 +1708,9 @@ void obs_python_unload(void) { + if (!python_loaded_at_all) + return; + if (python_loaded && Py_IsInitialized()) { PyGILState_Ensure(); @@ -1722,4 +1729,6 @@ pthread_mutex_destroy(&tick_mutex); pthread_mutex_destroy(&timer_mutex); dstr_free(&cur_py_log_chunk); + + python_loaded_at_all = false; }
View file
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obs-scripting.c -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obs-scripting.c
Changed
@@ -213,6 +213,8 @@ pthread_mutex_destroy(&defer_call_mutex); os_sem_destroy(defer_call_semaphore); + + scripting_loaded = false; } const char **obs_scripting_supported_formats(void)
View file
obs-studio-21.0.3.tar.xz/deps/obs-scripting/obslua/obslua.i -> obs-studio-21.1.2.tar.xz/deps/obs-scripting/obslua/obslua.i
Changed
@@ -59,6 +59,7 @@ %ignore obs_add_main_render_callback; %ignore obs_remove_main_render_callback; %ignore obs_enum_sources; +%ignore obs_source_enum_filters; %ignore obs_properties_add_button; %ignore obs_property_set_modified_callback; %ignore signal_handler_connect;
View file
obs-studio-21.0.3.tar.xz/docs/sphinx/reference-properties.rst -> obs-studio-21.1.2.tar.xz/docs/sphinx/reference-properties.rst
Changed
@@ -383,7 +383,7 @@ --------------------- -.. function:: enum obs_text_type obs_proprety_text_type(obs_property_t *p) +.. function:: enum obs_text_type obs_property_text_type(obs_property_t *p) ---------------------
View file
obs-studio-21.0.3.tar.xz/libobs-opengl/gl-x11.c -> obs-studio-21.1.2.tar.xz/libobs-opengl/gl-x11.c
Changed
@@ -59,6 +59,7 @@ GLX_STENCIL_SIZE, 0, GLX_DEPTH_SIZE, 0, GLX_BUFFER_SIZE, 32, + GLX_ALPHA_SIZE, 8, GLX_DOUBLEBUFFER, true, GLX_X_RENDERABLE, true, None
View file
obs-studio-21.0.3.tar.xz/libobs/audio-monitoring/win32/wasapi-output.h -> obs-studio-21.1.2.tar.xz/libobs/audio-monitoring/win32/wasapi-output.h
Changed
@@ -3,10 +3,16 @@ #include <audioclient.h> +#ifndef KSAUDIO_SPEAKER_2POINT1 #define KSAUDIO_SPEAKER_2POINT1 (KSAUDIO_SPEAKER_STEREO|SPEAKER_LOW_FREQUENCY) +#endif + #define KSAUDIO_SPEAKER_SURROUND_AVUTIL \ (KSAUDIO_SPEAKER_STEREO|SPEAKER_FRONT_CENTER) + +#ifndef KSAUDIO_SPEAKER_4POINT1 #define KSAUDIO_SPEAKER_4POINT1 (KSAUDIO_SPEAKER_SURROUND|SPEAKER_LOW_FREQUENCY) +#endif #define safe_release(ptr) \ do { \
View file
obs-studio-21.0.3.tar.xz/libobs/obs-config.h -> obs-studio-21.1.2.tar.xz/libobs/obs-config.h
Changed
@@ -34,14 +34,14 @@ * * Reset to zero each major version */ -#define LIBOBS_API_MINOR_VER 0 +#define LIBOBS_API_MINOR_VER 1 /* * Increment if backward-compatible bug fix * * Reset to zero each major or minor version */ -#define LIBOBS_API_PATCH_VER 3 +#define LIBOBS_API_PATCH_VER 2 #define MAKE_SEMANTIC_VERSION(major, minor, patch) \ ((major << 24) | \
View file
obs-studio-21.0.3.tar.xz/libobs/obs-output.c -> obs-studio-21.1.2.tar.xz/libobs/obs-output.c
Changed
@@ -2061,7 +2061,8 @@ struct caption_text *tail, struct caption_text **head) { struct caption_text *next = bzalloc(sizeof(struct caption_text)); - snprintf(&next->text[0], CAPTION_LINE_BYTES + 1, "%.*s", bytes, text); + snprintf(&next->text[0], CAPTION_LINE_BYTES + 1, "%.*s", + (int)bytes, text); if (!*head) { *head = next;
View file
obs-studio-21.0.3.tar.xz/libobs/obs-properties.c -> obs-studio-21.1.2.tar.xz/libobs/obs-properties.c
Changed
@@ -738,7 +738,7 @@ return data ? data->type : OBS_NUMBER_SCROLLER; } -enum obs_text_type obs_proprety_text_type(obs_property_t *p) +enum obs_text_type obs_property_text_type(obs_property_t *p) { struct text_data *data = get_type_data(p, OBS_PROPERTY_TEXT); return data ? data->type : OBS_TEXT_DEFAULT; @@ -1107,3 +1107,8 @@ data->ranges.array[idx].max_time : (struct media_frames_per_second){0}; } + +enum obs_text_type obs_proprety_text_type(obs_property_t *p) +{ + return obs_property_text_type(p); +}
View file
obs-studio-21.0.3.tar.xz/libobs/obs-properties.h -> obs-studio-21.1.2.tar.xz/libobs/obs-properties.h
Changed
@@ -263,7 +263,7 @@ EXPORT double obs_property_float_max(obs_property_t *p); EXPORT double obs_property_float_step(obs_property_t *p); EXPORT enum obs_number_type obs_property_float_type(obs_property_t *p); -EXPORT enum obs_text_type obs_proprety_text_type(obs_property_t *p); +EXPORT enum obs_text_type obs_property_text_type(obs_property_t *p); EXPORT enum obs_path_type obs_property_path_type(obs_property_t *p); EXPORT const char * obs_property_path_filter(obs_property_t *p); EXPORT const char * obs_property_path_default_path(obs_property_t *p); @@ -336,6 +336,11 @@ EXPORT struct media_frames_per_second obs_property_frame_rate_fps_range_max( obs_property_t *p, size_t idx); +#ifndef SWIG +DEPRECATED +EXPORT enum obs_text_type obs_proprety_text_type(obs_property_t *p); +#endif + #ifdef __cplusplus } #endif
View file
obs-studio-21.0.3.tar.xz/libobs/obs.h -> obs-studio-21.1.2.tar.xz/libobs/obs.h
Changed
@@ -145,15 +145,16 @@ struct vec2 bounds; }; -#ifndef SWIG /** * Video initialization structure */ struct obs_video_info { +#ifndef SWIG /** * Graphics module to use (usually "libobs-opengl" or "libobs-d3d11") */ const char *graphics_module; +#endif uint32_t fps_num; /**< Output FPS numerator */ uint32_t fps_den; /**< Output FPS denominator */ @@ -176,7 +177,6 @@ enum obs_scale_type scale_type; /**< How to scale if scaling */ }; -#endif /** * Audio initialization structure @@ -283,7 +283,6 @@ */ EXPORT profiler_name_store_t *obs_get_profiler_name_store(void); -#ifndef SWIG /** * Sets base video output base resolution/fps/format. * @@ -301,7 +300,6 @@ * OBS_VIDEO_FAIL for generic failure */ EXPORT int obs_reset_video(struct obs_video_info *ovi); -#endif /** * Sets base audio output format/channels/samples/etc @@ -310,10 +308,8 @@ */ EXPORT bool obs_reset_audio(const struct obs_audio_info *oai); -#ifndef SWIG /** Gets the current video settings, returns false if no video */ EXPORT bool obs_get_video_info(struct obs_video_info *ovi); -#endif /** Gets the current audio settings, returns false if no audio */ EXPORT bool obs_get_audio_info(struct obs_audio_info *oai);
View file
obs-studio-21.0.3.tar.xz/libobs/util/config-file.c -> obs-studio-21.1.2.tar.xz/libobs/util/config-file.c
Changed
@@ -212,8 +212,15 @@ strref_clear(&value); config_parse_string(lex, &value, 0); - if (!strref_is_empty(&value)) + if (strref_is_empty(&value)) { + struct config_item item; + item.name = bstrdup_n(name.array, name.len); + item.value = bzalloc(1); + darray_push_back(sizeof(struct config_item), + §ion->items, &item); + } else { config_add_item(§ion->items, &name, &value); + } } }
View file
obs-studio-21.1.2.tar.xz/plugins/coreaudio-encoder/data/locale/fil-PH.ini
Added
@@ -0,0 +1,6 @@ +CoreAudioAAC="CoreAudio AAC encoder" +Bitrate="Bitrate" +AllowHEAAC="Payagan ang HE-AAC" +OutputSamplerate="Output Sample Rate" +UseInputSampleRate="Gamitin ang Sample Rate ng Input (OBS) (maaaring maglista ng mga hindi suportadong bitrates)" +
View file
obs-studio-21.1.2.tar.xz/plugins/coreaudio-encoder/data/locale/ka-GE.ini
Added
@@ -0,0 +1,6 @@ +CoreAudioAAC="CoreAudio AAC გამშიფრავი" +Bitrate="ბიტური სიხშირე" +AllowHEAAC="HE-AAC დაშვება" +OutputSamplerate="გამომავალი სიგნალის სიხშირე" +UseInputSampleRate="შემავალი (OBS) სიგნალის სიხშირის გამოყენება (შესაძლოა მოიცავდეს მხარდაუჭერელ სიხშირეებსაც)" +
View file
obs-studio-21.1.2.tar.xz/plugins/coreaudio-encoder/data/locale/tl-PH.ini
Added
@@ -0,0 +1,6 @@ +CoreAudioAAC="Ang Buod ng Audio AAC encoder" +Bitrate="Baytreyt" +AllowHEAAC="Pahintulutan ang HE-AAC" +OutputSamplerate="Paglabas ng Sample Rate" +UseInputSampleRate="Gamitin ang pangpasok na (OBS) Sample Rate (Maaaring ilista ang mga hindi sinusuportahang bitrates)" +
View file
obs-studio-21.1.2.tar.xz/plugins/decklink/data/locale/fil-PH.ini
Added
@@ -0,0 +1,20 @@ +BlackmagicDevice="Blackmagic Device" +Device="Kagamitan" +Mode="Mode" +Buffering="Gamitin ang Buffering" +PixelFormat="Format ng Pixel" +ColorSpace="YUV Kulay Space" +ColorSpace.Default="Pangunahin" +ColorRange="Saklaw ng Kulay ng YUV" +ColorRange.Default="Pangunahin" +ColorRange.Partial="Bahagyang" +ColorRange.Full="Buong" +ChannelFormat="Pinagmulan" +ChannelFormat.None="Wala" +ChannelFormat.2_0ch="2ch" +ChannelFormat.2_1ch="2.1ch" +ChannelFormat.4_0ch="4ch" +ChannelFormat.4_1ch="4.1ch" +ChannelFormat.5_1ch="5.1ch" +ChannelFormat.7_1ch="7.1ch" +
View file
obs-studio-21.1.2.tar.xz/plugins/decklink/data/locale/ka-GE.ini
Added
@@ -0,0 +1,20 @@ +BlackmagicDevice="Blackmagic მოწყობილობა" +Device="მოწყობილობა" +Mode="რეჟიმი" +Buffering="ბუფერიზაციის გამოყენება" +PixelFormat="პიქსელის ფორმატი" +ColorSpace="YUV ფერთა სისტემა" +ColorSpace.Default="ნაგულისხმევი" +ColorRange="YUV ფერთა გამა" +ColorRange.Default="ნაგულისხმევი" +ColorRange.Partial="ნაწილობრივი" +ColorRange.Full="სრული" +ChannelFormat="არხი" +ChannelFormat.None="არცერთი" +ChannelFormat.2_0ch="2 არხიანი" +ChannelFormat.2_1ch="2.1 არხიანი" +ChannelFormat.4_0ch="4 არხიანი" +ChannelFormat.4_1ch="4.1 არხიანი" +ChannelFormat.5_1ch="5.1 არხიანი" +ChannelFormat.7_1ch="7.1 არხიანი" +
View file
obs-studio-21.1.2.tar.xz/plugins/decklink/data/locale/tl-PH.ini
Added
@@ -0,0 +1,20 @@ +BlackmagicDevice="Itim na salamangka na aparato" +Device="Aparato" +Mode="I-mode" +Buffering="Paggamit ng Buffering" +PixelFormat="Ang Format ng Pixel" +ColorSpace="Pagitan sa kulay na YUV" +ColorSpace.Default="I-default" +ColorRange="Ang Saklaw ng Kulay na YUV" +ColorRange.Default="I-default" +ColorRange.Partial="Bahagya" +ColorRange.Full="Puno" +ChannelFormat="Ang Channel" +ChannelFormat.None="Wala" +ChannelFormat.2_0ch="2ch" +ChannelFormat.2_1ch="2.1ch" +ChannelFormat.4_0ch="4ch" +ChannelFormat.4_1ch="4.1ch" +ChannelFormat.5_1ch="5.1ch" +ChannelFormat.7_1ch="7.1ch" +
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/Installer.in.iss -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/#Resources/Installer.in.iss
Changed
@@ -2,7 +2,7 @@ ; SEE THE DOCUMENTATION FOR DETAILS ON CREATING INNO SETUP SCRIPT FILES! #define MyAppName "AMD Encoder for OBS Studio" -#define MyAppVersion "@enc-amf_VERSION_MAJOR@.@enc-amf_VERSION_MINOR@.@enc-amf_VERSION_PATCH@" +#define MyAppVersion "@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@" #define MyAppPublisher "Xaymars Technology Workshop" #define MyAppURL "http://www.xaymar.com/portfolio/plugin-amd-vce-plugin-for-obs-studio/"
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/#Resources/PATCH_NOTES.md
Changed
@@ -1,13 +1,27 @@ -# 2.3.1 - The Blacklist and imroved support for Replay Buffer -It unfortunately had to come to this. The plugin now finally blacklists older drivers, as it otherwise would turn into an unmaintainable mess trying to support everything back to 16.11.5, the first driver that had AMD AMF support. That means that from this day on, all future versions will only work with a minimum runtime version of 1.4.6.0. So if you're still using an older driver: What are you doing? Update already! +# 2.3.3 - Changes to the Blacklist, Out-of-Process AMF Capability testing and more (Hotfix 1) +The Blacklist introduced with 2.3.0 unfortunately had the side effect that all Windows 8 users were no longer able to use the plugin and had to downgrade. With this version, the blacklist is instead now a warning written into the log file. This is all thanks to @jp9000's work on moving the initial AMF Capability test into a different process, stopping broken drivers from crashing OBS Studio. -In addition to that, the plugin should now work better with the new networking code as well as replay buffer. The 'Target Bitrate' property is now renamed internally so that external code can properly read it. +Not only that, but a bunch of previously unidentified issues were fixed. H264 VBR should no longer limit the Peak Bitrate to the Target Bitrate, H265 encoding shouldn't get stuck anymore, some older Drivers may now work again with the plugin and Direct 3D 11.1 is now used if it is available. + +Hotfix: Configuration Version should now match the plugin version again. ## Changelog +### 2.3.3 (Hotfix) +* Fixed H264 Plugin not properly adjusting config version number. +* Reduced subprocess 'amf-test' size, which is used to check for AMF compatibility. + +### 2.3.2 +* Fixed a bunch of startup crashed by moving AMF Capability tests to another process, thanks @jp9000 for doing a lot of the work to make this happen. +* Fixed the H265 encoder not stopping which was caused by 'Keyframe Interval' and 'GOP Size' being stuck at 0 internally. +* Replaced the blacklist with a warning message to allow Windows 8 users to use current versions. +* Fixed a crash with older Drivers which do not have Pre-Pass or VBAQ. +* Fixed 'Target Bitrate' being set as 'Peak Bitrate' in VBR rate control mode. +* Fixed Direct3D 11.1 not being used even if available, resulting in minimally lower performance. + ### 2.3.1 * Skipped 2.3.0 as it was not included with obs-studio. * Improved support for the "New Networking Code" and "Replay Buffer" features by renaming 'Bitrate.Target' to 'bitrate'. ### 2.3.0 * Added a blacklist for drivers exposing an AMF Runtime older than 1.4.6.0. -* Removed all hidden properties no longer exposed by the newest AMF Runtime. \ No newline at end of file +* Removed all hidden properties no longer exposed by the newest AMF Runtime.
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/#Resources/package.in.bat -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/#Resources/package.in.bat
Changed
@@ -1,7 +1,7 @@ @ECHO OFF REM Shut up, I'm just as lazy as anyone else. SET "CURDIR=%~dp0" -SET "FINALNAME=AMD-Encoder-for-OBS-Studio.@enc-amf_VERSION_MAJOR@.@enc-amf_VERSION_MINOR@.@enc-amf_VERSION_PATCH@" +SET "FINALNAME=AMD-Encoder-for-OBS-Studio.@PROJECT_VERSION_MAJOR@.@PROJECT_VERSION_MINOR@.@PROJECT_VERSION_PATCH@" SET "SevenZip=C:\Program Files\7-Zip\7z.exe" SET "InnoSetup=C:\Program Files (x86)\Inno Setup 5\Compil32.exe"
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/CMakeLists.txt
Changed
@@ -15,15 +15,12 @@ # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA -cmake_minimum_required(VERSION 2.8.12) -PROJECT(enc-amf) +cmake_minimum_required(VERSION 3.1.0) +PROJECT(enc-amf VERSION 2.3.3) ################################################################################ # Version ################################################################################ -SET(enc-amf_VERSION_MAJOR 2) -SET(enc-amf_VERSION_MINOR 3) -SET(enc-amf_VERSION_PATCH 1) configure_file( "${PROJECT_SOURCE_DIR}/#Resources/package.in.bat" "${PROJECT_SOURCE_DIR}/#Resources/package.bat" @@ -98,7 +95,7 @@ ################################################################################ # Standalone and OBS Studio Build Data ################################################################################ -if(TARGET obs) +if(TARGET libobs) # OBS Studio Specific # Variables @@ -177,7 +174,6 @@ "${PATH_OBSStudio}/" ) add_definitions(-D_CRT_SECURE_NO_WARNINGS) - add_definitions(-DNO_PIPED_DETECTION) endif() ################################################################################ @@ -195,27 +191,35 @@ # All Warnings, Extra Warnings, Pedantic if(MSVC) - # Force to always compile with W4 - if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") - string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") - else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") - endif() + # Force to always compile with W4 + if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") + endif() + + # Enable Options + # /Gy (Function-Level Linking) + # /OPT:REF + # /OPT:NOICF + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gy") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Gy") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF /OPT:NOICF") elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) - # Update if necessary - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") + # Update if necessary + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") endif() -if(TARGET obs) +# Main Project +if(TARGET libobs) install_obs_plugin_with_data(enc-amf Resources) - add_subdirectory(Source/detect-amf) else() math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}") add_custom_command(TARGET enc-amf POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory "${PROJECT_SOURCE_DIR}/Resources/locale" "${PROJECT_SOURCE_DIR}/#Build/data/obs-plugins/enc-amf/locale" - ) + ) add_custom_command(TARGET enc-amf POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy "$<TARGET_FILE:enc-amf>" @@ -223,7 +227,10 @@ ) add_custom_command(TARGET enc-amf POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy - "$<TARGET_FILE_DIR:enc-amf>/enc-amf.pdb" - "${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/enc-amf.pdb" + "$<TARGET_PDB_FILE:enc-amf>" + "${PROJECT_SOURCE_DIR}/#Build/obs-plugins/${BITS}bit/$<TARGET_PDB_FILE_NAME:enc-amf>" ) endif() + +# Sub Project +add_subdirectory(amf-test)
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Include/Version.h.in -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Include/Version.h.in
Changed
@@ -19,7 +19,7 @@ #pragma once -const uint16_t PLUGIN_VERSION_MAJOR = @enc-amf_VERSION_MAJOR@; -const uint16_t PLUGIN_VERSION_MINOR = @enc-amf_VERSION_MINOR@; -const uint32_t PLUGIN_VERSION_PATCH = @enc-amf_VERSION_PATCH@; +const uint16_t PLUGIN_VERSION_MAJOR = @PROJECT_VERSION_MAJOR@; +const uint16_t PLUGIN_VERSION_MINOR = @PROJECT_VERSION_MINOR@; +const uint32_t PLUGIN_VERSION_PATCH = @PROJECT_VERSION_PATCH@; const uint64_t PLUGIN_VERSION_FULL = (((uint64_t)(PLUGIN_VERSION_MAJOR & 0xFFFF) << 48ull) | ((uint64_t)(PLUGIN_VERSION_MINOR & 0xFFFF) << 32ull) | ((uint64_t)(PLUGIN_VERSION_PATCH) & 0xFFFFFFFF));
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Include/plugin.h -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Include/plugin.h
Changed
@@ -33,19 +33,11 @@ #define PLUGIN_NAME "AMD Advanced Media Framework" #include "Version.h" -#ifdef PIPED_PROCESS -#define PLOG(level, ...) -#define PLOG_ERROR(...) -#define PLOG_WARNING(...) -#define PLOG_INFO(...) -#define PLOG_DEBUG(...) -#else #define PLOG(level, ...) blog(level, "[AMF] " __VA_ARGS__); #define PLOG_ERROR(...) PLOG(LOG_ERROR, __VA_ARGS__) #define PLOG_WARNING(...) PLOG(LOG_WARNING, __VA_ARGS__) #define PLOG_INFO(...) PLOG(LOG_INFO, __VA_ARGS__) #define PLOG_DEBUG(...) PLOG(LOG_DEBUG, __VA_ARGS__) -#endif // Utility #define vstr(s) dstr(s) @@ -70,15 +62,17 @@ #endif #define OUT -#ifdef PIPED_PROCESS -#define QUICK_FORMAT_MESSAGE(var, ...) std::string var = ""; +#ifdef _WIN64 +#define BIT_STR "64" #else +#define BIT_STR "32" +#endif + #define QUICK_FORMAT_MESSAGE(var, ...) std::string var = ""; { \ std::vector<char> QUICK_FORMAT_MESSAGE_buf(1024); \ snprintf(QUICK_FORMAT_MESSAGE_buf.data(), QUICK_FORMAT_MESSAGE_buf.size(), __VA_ARGS__); \ var = std::string(QUICK_FORMAT_MESSAGE_buf.data()); \ } -#endif #ifndef __FUNCTION_NAME__ #if defined(_WIN32) || defined(_WIN64) //WINDOWS
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Resources/locale/nl-NL.ini
Changed
@@ -147,8 +147,7 @@ QueueSize="Wachtrij Grootte" QueueSize.Description="Zet zoveel frames in de wachtrij voor de encoder voordat getracht word om pakketten te ontvangen. Een hogere waarde introduceert meer vertraging terwijl een lagere waarde de encoder kan overbelasten. Het word niet geadviseerd om dit van de standaard waarde te wijzigen." View="Weergavemodus" -View.Description="Welke eigenschappen moeten worden getoond?\nAls u -'\@AMF.H264.View.Master\@' gebruikt dan ontvangt u verder geen ondersteuning." +View.Description="Welke eigenschappen moeten worden getoond?\nAls u '\@AMF.H264.View.Master\@' gebruikt dan ontvangt u verder geen ondersteuning." View.Basic="Simpel" View.Advanced="Geavanceerd" View.Expert="Expert"
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-capabilities.cpp
Changed
@@ -20,11 +20,6 @@ #include "amf-capabilities.h" #include "utility.h" -//#ifdef _WIN32 -//#include <windows.h> -//#include <VersionHelpers.h> -//#endif - using namespace Plugin; using namespace Plugin::AMD; @@ -51,6 +46,9 @@ #pragma endregion Singleton Plugin::AMD::CapabilityManager::CapabilityManager() { + // Potential fix for unintended crashes by AMD including asserts in release builds. + AMD::AMF::Instance()->EnableDebugTrace(false); + // Key order: API, Adapter, Codec for (auto api : API::EnumerateAPIs()) { for (auto adapter : api->EnumerateAdapters()) { @@ -69,7 +67,6 @@ isSupported = true; } catch (const std::exception& e) { PLOG_WARNING("%s", e.what()); - (void)e; } PLOG_DEBUG("[Capability Manager] Testing %s Adapter '%s' with codec %s: %s.",
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h264.cpp
Changed
@@ -1353,7 +1353,6 @@ // Internal void Plugin::AMD::EncoderH264::PacketPriorityAndKeyframe(amf::AMFDataPtr& pData, struct encoder_packet* packet) { -#ifndef PIPED_PROCESS AMFTRACECALL; uint64_t pktType; pData->GetProperty(AMF_VIDEO_ENCODER_OUTPUT_DATA_TYPE, &pktType); @@ -1370,10 +1369,6 @@ packet->priority = 0; break; } -#else - (void)pData; - (void)packet; -#endif } AMF_RESULT Plugin::AMD::EncoderH264::GetExtraDataInternal(amf::AMFVariant* p) { @@ -1498,7 +1493,6 @@ m_UniqueId, Utility::QualityPresetToString(GetQualityPreset())); auto profileLevel = static_cast<uint16_t>(GetProfileLevel()); - (void)profileLevel; PLOG_INFO(PREFIX " Profile: %s %" PRIu16 ".%" PRIu16, m_UniqueId, Utility::ProfileToString(GetProfile()),
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-encoder-h265.cpp
Changed
@@ -1402,7 +1402,6 @@ // Internal void Plugin::AMD::EncoderH265::PacketPriorityAndKeyframe(amf::AMFDataPtr& pData, struct encoder_packet* packet) { -#ifndef PIPED_PROCESS AMFTRACECALL; uint64_t pktType; @@ -1416,10 +1415,6 @@ packet->priority = 0; break; } -#else - (void)pData; - (void)packet; -#endif } AMF_RESULT Plugin::AMD::EncoderH265::GetExtraDataInternal(amf::AMFVariant* p) { @@ -1543,7 +1538,6 @@ m_UniqueId, Utility::QualityPresetToString(GetQualityPreset())); auto profileLevel = static_cast<uint16_t>(GetProfileLevel()); - (void)profileLevel; PLOG_INFO(PREFIX " Profile: %s %" PRIu16 ".%" PRIu16, m_UniqueId, Utility::ProfileToString(GetProfile()),
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf-encoder.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf-encoder.cpp
Changed
@@ -536,7 +536,6 @@ } void Plugin::AMD::Encoder::GetVideoInfo(struct video_scale_info* info) { -#ifndef PIPED_PROCESS AMFTRACECALL; if (!m_AMFContext || !m_AMFEncoder) @@ -572,9 +571,6 @@ } else { info->range = VIDEO_RANGE_PARTIAL; } -#else - (void)info; -#endif } bool Plugin::AMD::Encoder::GetExtraData(uint8_t** extra_data, size_t* size) { @@ -633,7 +629,6 @@ } bool Plugin::AMD::Encoder::EncodeStore(OUT amf::AMFSurfacePtr& surface, IN struct encoder_frame* frame) { -#ifndef PIPED_PROCESS AMFTRACECALL; AMF_RESULT res; @@ -731,10 +726,7 @@ surface->GetDuration(), printableType.c_str()); } -#else - (void)surface; - (void)frame; -#endif + return true; } @@ -938,7 +930,6 @@ } bool Plugin::AMD::Encoder::EncodeLoad(IN amf::AMFDataPtr& data, OUT struct encoder_packet* packet, OUT bool* received_packet) { -#ifndef PIPED_PROCESS AMFTRACECALL; if (data == nullptr) @@ -1045,18 +1036,12 @@ } *received_packet = true; -#else - (void)data; - (void)packet; - (void)received_packet; -#endif + return true; } int32_t Plugin::AMD::Encoder::AsyncSendMain(Encoder* obj) { -#ifndef PIPED_PROCESS os_set_thread_name("AMF Asynchronous Queue Sender"); -#endif return obj->AsyncSendLocalMain(); } @@ -1112,9 +1097,7 @@ } int32_t Plugin::AMD::Encoder::AsyncRetrieveMain(Encoder* obj) { -#ifndef PIPED_PROCESS os_set_thread_name("AMF Asynchronous Queue Retriever"); -#endif return obj->AsyncRetrieveLocalMain(); }
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/amf.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/amf.cpp
Changed
@@ -40,7 +40,6 @@ public: virtual void __cdecl Write(const wchar_t* scope, const wchar_t* message) override { -#ifndef PIPED_PROCESS const wchar_t* realmsg = &(message[(33 + wcslen(scope) + 2)]); // Skip Time & Scope size_t msgLen = wcslen(realmsg) - (sizeof(wchar_t)); @@ -48,10 +47,6 @@ 12, &(message[11]), scope, msgLen, realmsg); -#else - (void)scope; - (void)message; -#endif } virtual void __cdecl Flush() override {} @@ -137,7 +132,7 @@ VerQueryValueA(pBlock, "\\VarFileInfo\\Translation", (LPVOID*)&lpTranslate, &cbTranslate); std::vector<char> buf(1024); - _snprintf(buf.data(), buf.size(), "%s%04x%04x%s", + snprintf(buf.data(), buf.size(), "%s%04x%04x%s", "\\StringFileInfo\\", lpTranslate[0].wLanguage, lpTranslate[0].wCodePage, @@ -166,8 +161,7 @@ /// Blacklist Drivers with older SDK. if (m_AMFVersion_Runtime < AMF_MAKE_FULL_VERSION(1,4,6,0)) { - QUICK_FORMAT_MESSAGE(msg, "AMF Runtime Version is too old, please update your drivers."); - throw std::exception(msg.data()); + PLOG_WARNING("The AMF Runtime is very old and unsupported, consider updating your drivers."); } /// Initialize AMF
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/api-d3d11.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/api-d3d11.cpp
Changed
@@ -27,7 +27,7 @@ class SingletonDXGI { public: - #pragma region Singleton +#pragma region Singleton static std::shared_ptr<SingletonDXGI> GetInstance() { static std::shared_ptr<SingletonDXGI> __instance = std::make_shared<SingletonDXGI>(); static std::mutex __mutex; @@ -35,7 +35,7 @@ const std::lock_guard<std::mutex> lock(__mutex); return __instance; } - #pragma endregion Singleton +#pragma endregion Singleton SingletonDXGI() { hModule = LoadLibrary(TEXT("dxgi.dll")); @@ -80,7 +80,7 @@ class SingletonD3D11 { public: - #pragma region Singleton +#pragma region Singleton static std::shared_ptr<SingletonD3D11> GetInstance() { static std::shared_ptr<SingletonD3D11> __instance = std::make_shared<SingletonD3D11>(); static std::mutex __mutex; @@ -88,7 +88,7 @@ const std::lock_guard<std::mutex> lock(__mutex); return __instance; } - #pragma endregion Singleton +#pragma endregion Singleton SingletonD3D11() { hModule = LoadLibrary(TEXT("d3d11.dll")); @@ -150,7 +150,7 @@ continue; std::vector<char> buf(1024); - _snprintf(buf.data(), buf.size(), "%ls (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)", + snprintf(buf.data(), buf.size(), "%ls (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)", desc.Description, desc.VendorId, desc.DeviceId, @@ -230,37 +230,39 @@ D3D_FEATURE_LEVEL_11_1, D3D_FEATURE_LEVEL_11_0 }; - for (size_t c = 0; c < 3; c++) { - uint32_t flags = 0; - - switch (c) { - case 0: - flags |= D3D11_CREATE_DEVICE_VIDEO_SUPPORT; - case 1: - flags |= D3D11_CREATE_DEVICE_BGRA_SUPPORT; - case 2: + for (size_t featureLevel = 0; featureLevel < _countof(featureLevels); featureLevel++) { + for (size_t enabledFlags = 0; enabledFlags < 3; enabledFlags++) { + uint32_t flags = 0; + + switch (enabledFlags) { + case 0: + flags |= D3D11_CREATE_DEVICE_VIDEO_SUPPORT; + case 1: + flags |= D3D11_CREATE_DEVICE_BGRA_SUPPORT; + case 2: + break; + } + + hr = d3dInst->D3D11CreateDevice( + dxgiAdapter, + dxgiAdapter == NULL ? D3D_DRIVER_TYPE_HARDWARE : D3D_DRIVER_TYPE_UNKNOWN, + NULL, + flags, + featureLevels + featureLevel, UINT(_countof(featureLevels) - featureLevel), + D3D11_SDK_VERSION, + &m_Device, + NULL, + &m_DeviceContext); + if (SUCCEEDED(hr)) { break; - } - - hr = d3dInst->D3D11CreateDevice( - dxgiAdapter, - dxgiAdapter == NULL ? D3D_DRIVER_TYPE_HARDWARE : D3D_DRIVER_TYPE_UNKNOWN, - NULL, - flags, - featureLevels + 1, _countof(featureLevels) - 1, - D3D11_SDK_VERSION, - &m_Device, - NULL, - &m_DeviceContext); - if (SUCCEEDED(hr)) { - break; - } else { - PLOG_WARNING("<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X (mode %d).", hr, c); + } else { + PLOG_DEBUG("<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X (mode %lld, level %lld).", hr, enabledFlags, featureLevel); + } } } if (FAILED(hr)) { std::vector<char> buf(1024); - _snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X.", hr); + snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D11 device, error code %X.", hr); throw std::exception(buf.data()); } }
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/api-d3d9.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/api-d3d9.cpp
Changed
@@ -55,7 +55,7 @@ enumeratedLUIDs.push_back(adapterLUID); std::vector<char> buf(1024); - _snprintf(buf.data(), buf.size(), "%s [%s] (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)", + snprintf(buf.data(), buf.size(), "%s [%s] (VEN_%04x/DEV_%04x/SUB_%04x/REV_%04x)", adapterIdentifier.Description, adapterIdentifier.DeviceName, @@ -140,7 +140,7 @@ HRESULT hr = api->m_Direct3D9Ex->GetDeviceCaps((UINT)adapterNum, D3DDEVTYPE_HAL, &ddCaps); if (FAILED(hr)) { std::vector<char> buf(1024); - _snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to query capabilities for D3D9 adapter, error code %X.", hr); + snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to query capabilities for D3D9 adapter, error code %X.", hr); throw std::exception(buf.data()); } @@ -162,7 +162,7 @@ ); if (FAILED(hr)) { std::vector<char> buf(1024); - _snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D9 device, error code %X.", hr); + snprintf(buf.data(), buf.size(), "<" __FUNCTION_NAME__ "> Unable to create D3D9 device, error code %X.", hr); throw std::exception(buf.data()); } }
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/enc-h264.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/enc-h264.cpp
Changed
@@ -17,48 +17,48 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ -////////////////////////////////////////////////////////////////////////// -// New UI Design -////////////////////////////////////////////////////////////////////////// -// All: Preset -// ----------- Static Section -// Mas: Usage -// All: Quality Preset -// Adv: Profile -// Adv: Profile Level -// Mas: Aspect Ratio -// Exp: Coding Type -// Exp: Maximum Reference Frames -// ----------- Rate Control Section -// All: Rate Control Method -// Adv: Pre-Pass Encoding (if supported) -// All, CBR&VBR: Target Bitrate -// All, VBR: Peak Bitrate -// All, CQP: QP I/P/B -// Adv, CBR&VBR: Min/Max QP -// CBR: Filler Data -// Adv: Frame Skipping -// Exp: VBAQ -// Exp: Enforce HRD -// ----------- VBV Buffer -// Adv: VBV Buffer Size -// Exp: VBV Buffer Initial Fullness -// ----------- Picture Control -// All: Keyframe Interval (Float) -// Mas: IDR Period (Overrides Keyframe Interval if non-zero) -// Adv: B-Frames (if supported) -// Adv: B-Frame Delta QP (if supported, not CQP) -// Adv: B-Frame Reference (if supported and B-Frames enabled) -// Adv: B-Frame Reference Delta QP (if supported, not CQP) -// Exp: Deblocking Filter -// Exp: Motion Estimation (Dropdown) -// ----------- Intra-Refresh -// ToDo: Master Mode only? -// ----------- System -// Adv: API -// Adv: Adapter -// Exp: OpenCL -// All: View + ////////////////////////////////////////////////////////////////////////// + // New UI Design + ////////////////////////////////////////////////////////////////////////// + // All: Preset + // ----------- Static Section + // Mas: Usage + // All: Quality Preset + // Adv: Profile + // Adv: Profile Level + // Mas: Aspect Ratio + // Exp: Coding Type + // Exp: Maximum Reference Frames + // ----------- Rate Control Section + // All: Rate Control Method + // Adv: Pre-Pass Encoding (if supported) + // All, CBR&VBR: Target Bitrate + // All, VBR: Peak Bitrate + // All, CQP: QP I/P/B + // Adv, CBR&VBR: Min/Max QP + // CBR: Filler Data + // Adv: Frame Skipping + // Exp: VBAQ + // Exp: Enforce HRD + // ----------- VBV Buffer + // Adv: VBV Buffer Size + // Exp: VBV Buffer Initial Fullness + // ----------- Picture Control + // All: Keyframe Interval (Float) + // Mas: IDR Period (Overrides Keyframe Interval if non-zero) + // Adv: B-Frames (if supported) + // Adv: B-Frame Delta QP (if supported, not CQP) + // Adv: B-Frame Reference (if supported and B-Frames enabled) + // Adv: B-Frame Reference Delta QP (if supported, not CQP) + // Exp: Deblocking Filter + // Exp: Motion Estimation (Dropdown) + // ----------- Intra-Refresh + // ToDo: Master Mode only? + // ----------- System + // Adv: API + // Adv: Adapter + // Exp: OpenCL + // All: View #include "enc-h264.h" #include "amf-encoder-h264.h" @@ -136,13 +136,12 @@ } void Plugin::Interface::H264Interface::get_defaults(obs_data_t *data) { - #pragma region OBS - Enforce Streaming Service Restrictions - obs_data_set_default_int(data, "bitrate", 0); +#pragma region OBS - Enforce Streaming Service Restrictions obs_data_set_default_int(data, "keyint_sec", 0); obs_data_set_default_string(data, "rate_control", ""); obs_data_set_default_string(data, "profile", ""); obs_data_set_default_string(data, "preset", ""); - #pragma endregion OBS - Enforce Streaming Service Restrictions +#pragma endregion OBS - Enforce Streaming Service Restrictions // Preset obs_data_set_default_int(data, P_PRESET, static_cast<int64_t>(Presets::None)); @@ -243,7 +242,7 @@ obs_properties* props = obs_properties_create(); obs_property_t* p; - #pragma region Preset +#pragma region Preset p = obs_properties_add_list(props, P_PRESET, P_TRANSLATE(P_PRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_modified_callback(p, properties_modified); obs_property_list_add_int(p, "", -1); @@ -254,18 +253,18 @@ obs_property_list_add_int(p, P_TRANSLATE(P_PRESET_LOSSLESS), static_cast<int32_t>(Presets::Lossless)); obs_property_list_add_int(p, P_TRANSLATE(P_PRESET_TWITCH), static_cast<int32_t>(Presets::Twitch)); obs_property_list_add_int(p, P_TRANSLATE(P_PRESET_YOUTUBE), static_cast<int32_t>(Presets::YouTube)); - #pragma endregion Preset +#pragma endregion Preset // Static Properties - #pragma region Quality Preset +#pragma region Quality Preset p = obs_properties_add_list(props, P_QUALITYPRESET, P_TRANSLATE(P_QUALITYPRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUALITYPRESET))); obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_SPEED), static_cast<int32_t>(QualityPreset::Speed)); obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_BALANCED), static_cast<int32_t>(QualityPreset::Balanced)); obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_QUALITY), static_cast<int32_t>(QualityPreset::Quality)); - #pragma endregion Quality Preset +#pragma endregion Quality Preset - #pragma region Profile, Levels +#pragma region Profile, Levels p = obs_properties_add_list(props, P_PROFILE, P_TRANSLATE(P_PROFILE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PROFILE))); obs_property_list_add_int(p, "Constrained Baseline", static_cast<int32_t>(Profile::ConstrainedBaseline)); @@ -293,24 +292,24 @@ obs_property_list_add_int(p, "5.0", static_cast<int32_t>(ProfileLevel::L50)); obs_property_list_add_int(p, "5.1", static_cast<int32_t>(ProfileLevel::L51)); obs_property_list_add_int(p, "5.2", static_cast<int32_t>(ProfileLevel::L52)); - #pragma endregion Profile, Levels +#pragma endregion Profile, Levels - #pragma region Coding Type +#pragma region Coding Type p = obs_properties_add_list(props, P_CODINGTYPE, P_TRANSLATE(P_CODINGTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_CODINGTYPE))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), static_cast<int32_t>(CodingType::Automatic)); obs_property_list_add_int(p, "CABAC", static_cast<int32_t>(CodingType::CABAC)); obs_property_list_add_int(p, "CALVC", static_cast<int32_t>(CodingType::CALVC)); - #pragma endregion Coding Type +#pragma endregion Coding Type - #pragma region Maximum Reference Frames +#pragma region Maximum Reference Frames p = obs_properties_add_int_slider(props, P_MAXIMUMREFERENCEFRAMES, P_TRANSLATE(P_MAXIMUMREFERENCEFRAMES), 1, 16, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MAXIMUMREFERENCEFRAMES))); - #pragma endregion Maximum Reference Frames +#pragma endregion Maximum Reference Frames // Rate Control - #pragma region Rate Control Method +#pragma region Rate Control Method p = obs_properties_add_list(props, P_RATECONTROLMETHOD, P_TRANSLATE(P_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_RATECONTROLMETHOD))); obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_CQP), static_cast<int32_t>(RateControlMethod::ConstantQP)); @@ -318,16 +317,16 @@ obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBR), static_cast<int32_t>(RateControlMethod::PeakConstrainedVariableBitrate)); obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBRLAT), static_cast<int32_t>(RateControlMethod::LatencyConstrainedVariableBitrate)); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion Rate Control Method +#pragma endregion Rate Control Method - #pragma region Pre-Pass +#pragma region Pre-Pass p = obs_properties_add_list(props, P_PREPASSMODE, P_TRANSLATE(P_PREPASSMODE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PREPASSMODE))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), static_cast<int32_t>(PrePassMode::Disabled)); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), static_cast<int32_t>(PrePassMode::Enabled)); - #pragma endregion Pre-Pass +#pragma endregion Pre-Pass - #pragma region Parameters +#pragma region Parameters /// Bitrate Constraints p = obs_properties_add_int(props, "bitrate", P_TRANSLATE(P_BITRATE_TARGET), 0, 1, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BITRATE_TARGET))); @@ -347,16 +346,16 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_PFRAME))); p = obs_properties_add_int_slider(props, P_QP_BFRAME, P_TRANSLATE(P_QP_BFRAME), 0, 51, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_BFRAME))); - #pragma endregion Parameters +#pragma endregion Parameters - #pragma region Filler Data +#pragma region Filler Data p = obs_properties_add_list(props, P_FILLERDATA, P_TRANSLATE(P_FILLERDATA), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FILLERDATA))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion Filler Data +#pragma endregion Filler Data - #pragma region Frame Skipping +#pragma region Frame Skipping p = obs_properties_add_list(props, P_FRAMESKIPPING, P_TRANSLATE(P_FRAMESKIPPING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); @@ -367,49 +366,49 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING_BEHAVIOUR))); obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_SKIPNTH), 0); obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_KEEPNTH), 1); - #pragma endregion Frame Skipping +#pragma endregion Frame Skipping - #pragma region VBAQ +#pragma region VBAQ p = obs_properties_add_list(props, P_VBAQ, P_TRANSLATE(P_VBAQ), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBAQ))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion VBAQ +#pragma endregion VBAQ - #pragma region Enforce Hyptothetical Reference Decoder Restrictions +#pragma region Enforce Hyptothetical Reference Decoder Restrictions p = obs_properties_add_list(props, P_ENFORCEHRD, P_TRANSLATE(P_ENFORCEHRD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ENFORCEHRD))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion Enforce Hyptothetical Reference Decoder Restrictions +#pragma endregion Enforce Hyptothetical Reference Decoder Restrictions // VBV Buffer - #pragma region VBV Buffer Mode +#pragma region VBV Buffer Mode p = obs_properties_add_list(props, P_VBVBUFFER, P_TRANSLATE(P_VBVBUFFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_MANUAL), 1); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion VBV Buffer Mode +#pragma endregion VBV Buffer Mode - #pragma region VBV Buffer Strictness +#pragma region VBV Buffer Strictness p = obs_properties_add_float_slider(props, P_VBVBUFFER_STRICTNESS, P_TRANSLATE(P_VBVBUFFER_STRICTNESS), 0.0, 100.0, 0.1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_STRICTNESS))); - #pragma endregion VBV Buffer Strictness +#pragma endregion VBV Buffer Strictness - #pragma region VBV Buffer Size +#pragma region VBV Buffer Size p = obs_properties_add_int_slider(props, P_VBVBUFFER_SIZE, P_TRANSLATE(P_VBVBUFFER_SIZE), 1, 1000000, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_SIZE))); - #pragma endregion VBV Buffer Size +#pragma endregion VBV Buffer Size - #pragma region VBV Buffer Initial Fullness +#pragma region VBV Buffer Initial Fullness p = obs_properties_add_float_slider(props, P_VBVBUFFER_INITIALFULLNESS, P_TRANSLATE(P_VBVBUFFER_INITIALFULLNESS), 0.0, 100.0, 100.0 / 64.0); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_INITIALFULLNESS))); - #pragma endregion VBV Buffer Initial Fullness +#pragma endregion VBV Buffer Initial Fullness // Picture Control - #pragma region Interval and Periods - /// Keyframe, IDR +#pragma region Interval and Periods +/// Keyframe, IDR p = obs_properties_add_float(props, P_INTERVAL_KEYFRAME, P_TRANSLATE(P_INTERVAL_KEYFRAME), 0, 100, 0.001); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_KEYFRAME))); p = obs_properties_add_int(props, P_PERIOD_IDR_H264, P_TRANSLATE(P_PERIOD_IDR_H264), 0, 1000, 1); @@ -429,61 +428,61 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_BFRAME))); p = obs_properties_add_int(props, P_PERIOD_BFRAME, P_TRANSLATE(P_PERIOD_BFRAME), 0, 1000, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PERIOD_BFRAME))); - #pragma endregion Interval and Periods +#pragma endregion Interval and Periods - #pragma region B-Frames Pattern +#pragma region B-Frames Pattern p = obs_properties_add_int_slider(props, P_BFRAME_PATTERN, P_TRANSLATE(P_BFRAME_PATTERN), 0, 3, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_PATTERN))); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion B-Frames Pattern +#pragma endregion B-Frames Pattern - #pragma region B-Frames Reference +#pragma region B-Frames Reference p = obs_properties_add_list(props, P_BFRAME_REFERENCE, P_TRANSLATE(P_BFRAME_REFERENCE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_REFERENCE))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion B-Frames Reference +#pragma endregion B-Frames Reference - #pragma region B-Frames Delta QP +#pragma region B-Frames Delta QP p = obs_properties_add_int_slider(props, P_BFRAME_REFERENCEDELTAQP, P_TRANSLATE(P_BFRAME_REFERENCEDELTAQP), -10, 10, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_REFERENCEDELTAQP))); p = obs_properties_add_int_slider(props, P_BFRAME_DELTAQP, P_TRANSLATE(P_BFRAME_DELTAQP), -10, 10, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BFRAME_DELTAQP))); - #pragma endregion B-Frames Delta QP +#pragma endregion B-Frames Delta QP - #pragma region Deblocking Filter +#pragma region Deblocking Filter p = obs_properties_add_list(props, P_DEBLOCKINGFILTER, P_TRANSLATE(P_DEBLOCKINGFILTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_DEBLOCKINGFILTER))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion Deblocking Filter +#pragma endregion Deblocking Filter - #pragma region Motion Estimation +#pragma region Motion Estimation p = obs_properties_add_list(props, P_MOTIONESTIMATION, P_TRANSLATE(P_MOTIONESTIMATION), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MOTIONESTIMATION))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_HALF), 1); obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_QUARTER), 2); obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_FULL), 3); - #pragma endregion Motion Estimation +#pragma endregion Motion Estimation // System - #pragma region Video APIs +#pragma region Video APIs p = obs_properties_add_list(props, P_VIDEO_API, P_TRANSLATE(P_VIDEO_API), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_API))); obs_property_set_modified_callback(p, properties_modified); fill_api_list(p); - #pragma endregion Video APIs +#pragma endregion Video APIs - #pragma region Video Adapters +#pragma region Video Adapters p = obs_properties_add_list(props, P_VIDEO_ADAPTER, P_TRANSLATE(P_VIDEO_ADAPTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_ADAPTER))); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion Video Adapters +#pragma endregion Video Adapters - #pragma region OpenCL +#pragma region OpenCL p = obs_properties_add_list(props, P_OPENCL_TRANSFER, P_TRANSLATE(P_OPENCL_TRANSFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_TRANSFER))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); @@ -493,9 +492,9 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_CONVERSION))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion OpenCL +#pragma endregion OpenCL - #pragma region Asynchronous Queue +#pragma region Asynchronous Queue p = obs_properties_add_list(props, P_MULTITHREADING, P_TRANSLATE(P_MULTITHREADING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MULTITHREADING))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); @@ -503,9 +502,9 @@ p = obs_properties_add_int_slider(props, P_QUEUESIZE, P_TRANSLATE(P_QUEUESIZE), 1, 32, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUEUESIZE))); - #pragma endregion Asynchronous Queue +#pragma endregion Asynchronous Queue - #pragma region View Mode +#pragma region View Mode p = obs_properties_add_list(props, P_VIEW, P_TRANSLATE(P_VIEW), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIEW))); obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_BASIC), static_cast<int32_t>(ViewMode::Basic)); @@ -513,7 +512,7 @@ obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_EXPERT), static_cast<int32_t>(ViewMode::Expert)); obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_MASTER), static_cast<int32_t>(ViewMode::Master)); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion View Mode +#pragma endregion View Mode /// Debug p = obs_properties_add_bool(props, P_DEBUG, P_TRANSLATE(P_DEBUG)); @@ -526,10 +525,10 @@ } static void obs_data_transfer_settings(obs_data_t * data) { - #define TRANSFER_STRING(xold, xnew) obs_data_set_string(data, xnew, obs_data_get_string(data, xold)) - #define TRANSFER_FLOAT(xold, xnew) obs_data_set_double(data, xnew, obs_data_get_double(data, xold)) - #define TRANSFER_INT(xold, xnew) obs_data_set_int(data, xnew, obs_data_get_int(data, xold)) - #define TRANSFER_BOOL(xold, xnew) obs_data_set_bool(data, xnew, obs_data_get_bool(data, xold)) +#define TRANSFER_STRING(xold, xnew) obs_data_set_string(data, xnew, obs_data_get_string(data, xold)) +#define TRANSFER_FLOAT(xold, xnew) obs_data_set_double(data, xnew, obs_data_get_double(data, xold)) +#define TRANSFER_INT(xold, xnew) obs_data_set_int(data, xnew, obs_data_get_int(data, xold)) +#define TRANSFER_BOOL(xold, xnew) obs_data_set_bool(data, xnew, obs_data_get_bool(data, xold)) uint64_t version = obs_data_get_int(data, P_VERSION); switch (version) { @@ -594,11 +593,8 @@ TRANSFER_INT("H265.IDRPeriod", P_PERIOD_IDR_H265); case (((uint64_t)(2 & 0xFFFF) << 48ull) | ((uint64_t)(3 & 0xFFFF) << 32ull) | ((uint64_t)(0) & 0xFFFFFFFF)): TRANSFER_INT(P_BITRATE_TARGET, "bitrate"); - break; - case PLUGIN_VERSION_FULL: - obs_data_set_int(data, P_VERSION, PLUGIN_VERSION_FULL); - break; } + obs_data_set_int(data, P_VERSION, PLUGIN_VERSION_FULL); } bool Plugin::Interface::H264Interface::properties_modified(obs_properties_t *props, obs_property_t *, obs_data_t *data) { @@ -608,7 +604,7 @@ // Transfer settings from older Plugin versions to newer ones. obs_data_transfer_settings(data); - #pragma region Video API & Adapter +#pragma region Video API & Adapter // Video API const char *videoAPI_last = obs_data_get_string(data, ("last" P_VIDEO_API)), @@ -648,7 +644,7 @@ try { auto enc = EncoderH264(api, adapter); - #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \ + #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \ auto tmp_p = obs_properties_get(props, prop); \ auto tmp_l = enc.func(); \ enm tmp_s = static_cast<enm>(obs_data_get_int(data, obs_property_name(tmp_p))); \ @@ -666,12 +662,12 @@ obs_data_unset_user_value(data, obs_property_name(tmp_p)); \ } \ } - #define TEMP_LIMIT_SLIDER(func, prop) { \ + #define TEMP_LIMIT_SLIDER(func, prop) { \ auto tmp_p = obs_properties_get(props, prop); \ auto tmp_l = enc.func(); \ obs_property_int_set_limits(tmp_p, (int)tmp_l.first, (int)tmp_l.second, 1); \ } - #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \ + #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \ auto tmp_p = obs_properties_get(props, prop); \ auto tmp_l = enc.func(); \ obs_property_int_set_limits(tmp_p, (int)tmp_l.first / 1000, (int)tmp_l.second / 1000, 1); \ @@ -705,9 +701,9 @@ e.what()); } } - #pragma endregion Video API & Adapter +#pragma endregion Video API & Adapter - #pragma region Presets +#pragma region Presets Presets lastPreset = static_cast<Presets>(obs_data_get_int(data, ("last" P_PRESET))), preset = static_cast<Presets>(obs_data_get_int(data, P_PRESET)); if (lastPreset != preset) { // Reset State @@ -723,50 +719,50 @@ switch (preset) { case Presets::ResetToDefaults: - #pragma region Default - { - obs_property_t* pn = obs_properties_first(props); - do { - const char* name = obs_property_name(pn); - - // Do not reset Video Adapter or API. - if ((strcmp(name, P_VIDEO_API) == 0) || (strcmp(name, P_VIDEO_ADAPTER) == 0)) - continue; - - switch (obs_property_get_type(pn)) { - case obs_property_type::OBS_PROPERTY_BOOL: - obs_data_set_bool(data, name, obs_data_get_default_bool(data, name)); - break; - case obs_property_type::OBS_PROPERTY_FLOAT: - obs_data_set_double(data, name, obs_data_get_default_double(data, name)); - break; - case obs_property_type::OBS_PROPERTY_INT: - obs_data_set_int(data, name, obs_data_get_default_int(data, name)); - break; - case obs_property_type::OBS_PROPERTY_TEXT: - obs_data_set_string(data, name, obs_data_get_default_string(data, name)); - break; - case obs_property_type::OBS_PROPERTY_LIST: - switch (obs_property_list_format(pn)) { - case obs_combo_format::OBS_COMBO_FORMAT_INT: - obs_data_set_int(data, name, obs_data_get_default_int(data, name)); - break; - case obs_combo_format::OBS_COMBO_FORMAT_FLOAT: - obs_data_set_double(data, name, obs_data_get_default_double(data, name)); - break; - case obs_combo_format::OBS_COMBO_FORMAT_STRING: - obs_data_set_string(data, name, obs_data_get_default_string(data, name)); - break; - } - break; - } - obs_property_set_enabled(pn, true); - } while (obs_property_next(&pn)); - } - break; - #pragma endregion Default + #pragma region Default + { + obs_property_t* pn = obs_properties_first(props); + do { + const char* name = obs_property_name(pn); + + // Do not reset Video Adapter or API. + if ((strcmp(name, P_VIDEO_API) == 0) || (strcmp(name, P_VIDEO_ADAPTER) == 0)) + continue; + + switch (obs_property_get_type(pn)) { + case obs_property_type::OBS_PROPERTY_BOOL: + obs_data_set_bool(data, name, obs_data_get_default_bool(data, name)); + break; + case obs_property_type::OBS_PROPERTY_FLOAT: + obs_data_set_double(data, name, obs_data_get_default_double(data, name)); + break; + case obs_property_type::OBS_PROPERTY_INT: + obs_data_set_int(data, name, obs_data_get_default_int(data, name)); + break; + case obs_property_type::OBS_PROPERTY_TEXT: + obs_data_set_string(data, name, obs_data_get_default_string(data, name)); + break; + case obs_property_type::OBS_PROPERTY_LIST: + switch (obs_property_list_format(pn)) { + case obs_combo_format::OBS_COMBO_FORMAT_INT: + obs_data_set_int(data, name, obs_data_get_default_int(data, name)); + break; + case obs_combo_format::OBS_COMBO_FORMAT_FLOAT: + obs_data_set_double(data, name, obs_data_get_default_double(data, name)); + break; + case obs_combo_format::OBS_COMBO_FORMAT_STRING: + obs_data_set_string(data, name, obs_data_get_default_string(data, name)); + break; + } + break; + } + obs_property_set_enabled(pn, true); + } while (obs_property_next(&pn)); + } + break; + #pragma endregion Default case Presets::Recording: - #pragma region Recording + #pragma region Recording // Static Properties //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding)); //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false); @@ -795,9 +791,9 @@ obs_data_set_int(data, P_MOTIONESTIMATION, 3); obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false); break; - #pragma endregion Recording + #pragma endregion Recording case Presets::HighQuality: - #pragma region High Quality + #pragma region High Quality // Static Properties //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding)); //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false); @@ -824,9 +820,9 @@ obs_data_set_int(data, P_MOTIONESTIMATION, 3); obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false); break; - #pragma endregion High Quality + #pragma endregion High Quality case Presets::Indistinguishable: - #pragma region Indistinguishable + #pragma region Indistinguishable // Static Properties //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding)); //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false); @@ -853,9 +849,9 @@ obs_data_set_int(data, P_MOTIONESTIMATION, 3); obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false); break; - #pragma endregion Indistinguishable + #pragma endregion Indistinguishable case Presets::Lossless: - #pragma region Lossless + #pragma region Lossless // Static Properties //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding)); //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false); @@ -884,9 +880,9 @@ obs_data_set_int(data, P_MOTIONESTIMATION, 3); obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false); break; - #pragma endregion Lossless + #pragma endregion Lossless case Presets::Twitch: - #pragma region Twitch + #pragma region Twitch // Static Properties //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding)); //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false); @@ -915,9 +911,9 @@ obs_data_set_int(data, P_MOTIONESTIMATION, 3); obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false); break; - #pragma endregion Twitch + #pragma endregion Twitch case Presets::YouTube: - #pragma region YouTube + #pragma region YouTube // Static Properties //obs_data_set_int(data, P_USAGE, static_cast<int32_t>(Usage::Transcoding)); //obs_property_set_enabled(obs_properties_get(props, P_USAGE), false); @@ -946,11 +942,11 @@ obs_data_set_int(data, P_MOTIONESTIMATION, 3); obs_property_set_enabled(obs_properties_get(props, P_MOTIONESTIMATION), false); break; - #pragma endregion YouTube + #pragma endregion YouTube } - #pragma endregion Presets +#pragma endregion Presets - #pragma region View Mode +#pragma region View Mode ViewMode lastView = static_cast<ViewMode>(obs_data_get_int(data, ("last" P_VIEW))), curView = static_cast<ViewMode>(obs_data_get_int(data, P_VIEW)); if (lastView != curView) { @@ -1027,7 +1023,7 @@ } // Special Logic - #pragma region B-Frames +#pragma region B-Frames auto bframeProperty = obs_properties_get(props, P_BFRAME_PATTERN); bool bframeSupported = obs_property_int_max(bframeProperty) > 0; bool bframeVisible = (curView >= ViewMode::Advanced) && bframeSupported; @@ -1062,9 +1058,9 @@ obs_property_set_visible(obs_properties_get(props, P_BFRAME_REFERENCEDELTAQP), bframeVisible && usingBFrames && usingBFrameReference); if (!bframeVisible || !usingBFrames || !usingBFrameReference) obs_data_unset_user_value(data, P_BFRAME_REFERENCEDELTAQP); - #pragma endregion B-Frames +#pragma endregion B-Frames - #pragma region Rate Control +#pragma region Rate Control bool vis_rcm_bitrate_target = false, vis_rcm_bitrate_peak = false, vis_rcm_qp = false, @@ -1137,9 +1133,9 @@ obs_property_set_visible(obs_properties_get(props, P_FILLERDATA), vis_rcm_fillerdata); if (!vis_rcm_fillerdata) obs_data_unset_user_value(data, P_FILLERDATA); - #pragma endregion Rate Control +#pragma endregion Rate Control - #pragma region VBV Buffer +#pragma region VBV Buffer uint32_t vbvBufferMode = static_cast<uint32_t>(obs_data_get_int(data, P_VBVBUFFER)); bool vbvBufferVisible = (curView >= ViewMode::Advanced); @@ -1155,9 +1151,9 @@ obs_data_unset_user_value(data, P_VBVBUFFER_SIZE); if (!vbvBufferVisible || vbvBufferMode == 1) obs_data_unset_user_value(data, P_VBVBUFFER_STRICTNESS); - #pragma endregion VBV Buffer +#pragma endregion VBV Buffer - #pragma region B-Frame Interval +#pragma region B-Frame Interval bool bframeIntervalVisible = bframeSupported && (curView >= ViewMode::Master); obs_property_set_visible(obs_properties_get(props, P_PERIOD_BFRAME), bframeIntervalVisible); obs_property_set_visible(obs_properties_get(props, P_INTERVAL_BFRAME), bframeIntervalVisible); @@ -1165,8 +1161,8 @@ obs_data_unset_user_value(data, P_PERIOD_BFRAME); obs_data_unset_user_value(data, P_INTERVAL_BFRAME); } - #pragma endregion B-Frame Interval - #pragma endregion View Mode +#pragma endregion B-Frame Interval +#pragma endregion View Mode // Permanently disable static properties while encoding. void* enc = obs_properties_get_param(props); @@ -1331,7 +1327,7 @@ } // OBS - Enforce Streaming Service Restrictions - #pragma region OBS - Enforce Streaming Service Restrictions +#pragma region OBS - Enforce Streaming Service Restrictions { // Profile const char* p_str = obs_data_get_string(data, "profile"); @@ -1347,6 +1343,7 @@ } else if (strcmp(p_str, "high") == 0) { m_VideoEncoder->SetProfile(Profile::High); } + obs_data_unset_user_value(data, "profile"); } // Preset @@ -1360,9 +1357,10 @@ m_VideoEncoder->SetQualityPreset(QualityPreset::Quality); } obs_data_set_int(data, P_QUALITYPRESET, (int32_t)m_VideoEncoder->GetQualityPreset()); + obs_data_unset_user_value(data, "preset"); } } - #pragma endregion OBS - Enforce Streaming Service Restrictions +#pragma endregion OBS - Enforce Streaming Service Restrictions // Dynamic Properties (Can be changed during Encoding) this->update(data); @@ -1409,15 +1407,21 @@ } catch (...) { } } - m_VideoEncoder->SetPrePassMode(PrePassMode::Disabled); - m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(false); + try { + m_VideoEncoder->SetPrePassMode(PrePassMode::Disabled); + m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(false); + } catch (...) { + } } else { m_VideoEncoder->SetQPMinimum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MINIMUM))); m_VideoEncoder->SetQPMaximum(static_cast<uint8_t>(obs_data_get_int(data, P_QP_MAXIMUM))); m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(obs_data_get_int(data, "bitrate") * 1000)); m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, P_BITRATE_PEAK) * 1000)); - m_VideoEncoder->SetPrePassMode(static_cast<PrePassMode>(obs_data_get_int(data, P_PREPASSMODE))); - m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(!!obs_data_get_int(data, P_VBAQ)); + try { + m_VideoEncoder->SetPrePassMode(static_cast<PrePassMode>(obs_data_get_int(data, P_PREPASSMODE))); + m_VideoEncoder->SetVarianceBasedAdaptiveQuantizationEnabled(!!obs_data_get_int(data, P_VBAQ)); + } catch (...) { + } } if (rcm == RateControlMethod::ConstantBitrate) { m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(obs_data_get_int(data, "bitrate") * 1000)); @@ -1468,7 +1472,7 @@ } m_VideoEncoder->SetDeblockingFilterEnabled(!!obs_data_get_int(data, P_DEBLOCKINGFILTER)); - #pragma region B-Frames +#pragma region B-Frames if (m_VideoEncoder->CapsBFramePattern() > 0) { try { m_VideoEncoder->SetBFramePattern(static_cast<uint8_t>(obs_data_get_int(data, P_BFRAME_PATTERN))); @@ -1480,28 +1484,13 @@ } catch (...) { } } - #pragma endregion B-Frames +#pragma endregion B-Frames // Motion Estimation m_VideoEncoder->SetMotionEstimationHalfPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 1)); m_VideoEncoder->SetMotionEstimationQuarterPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 2)); - //#pragma region Experimental - //try { m_VideoEncoder->SetWaitForTaskEnabled(!!obs_data_get_int(data, P_WAITFORTASK)); } catch (...) {} - //if (m_VideoEncoder->GetUsage() == H264Usage::Transcoding || m_VideoEncoder->GetUsage() == H264Usage::Webcam) { - // try { m_VideoEncoder->SetGOPSize(static_cast<uint32_t>(obs_data_get_int(data, P_GOPSIZE))); } catch (...) {} - //} - //try { m_VideoEncoder->SetGOPAlignmentEnabled(!!obs_data_get_int(data, P_GOPALIGNMENT)); } catch (...) {} - //try { m_VideoEncoder->SetIntraRefreshNumberOfStripes(static_cast<uint32_t>(obs_data_get_int(data, P_INTRAREFRESH_NUMBEROFSTRIPES))); } catch (...) {} - //try { m_VideoEncoder->SetIntraRefreshMacroblocksPerSlot(static_cast<uint32_t>(obs_data_get_int(data, P_INTRAREFRESH_MACROBLOCKSPERSLOT))); } catch (...) {} - //try { m_VideoEncoder->SetSlicesPerFrame(static_cast<uint32_t>(obs_data_get_int(data, P_SLICESPERFRAME))); } catch (...) {} - //try { m_VideoEncoder->SetSliceMode(static_cast<H264SliceMode>(obs_data_get_int(data, P_SLICEMODE))); } catch (...) {} - //try { m_VideoEncoder->SetMaximumSliceSize(static_cast<uint32_t>(obs_data_get_int(data, P_MAXIMUMSLICESIZE))); } catch (...) {} - //try { m_VideoEncoder->SetSliceControlMode(static_cast<H264SliceControlMode>(obs_data_get_int(data, P_SLICECONTROLMODE))); } catch (...) {} - //try { m_VideoEncoder->SetSliceControlSize(static_cast<uint32_t>(obs_data_get_int(data, P_SLICECONTROLSIZE))); } catch (...) {} - //#pragma endregion Experimental - - #pragma region OBS Enforce Streaming Service Settings +#pragma region OBS Enforce Streaming Service Settings { // Rate Control Method const char* t_str = obs_data_get_string(data, "rate_control"); @@ -1518,18 +1507,7 @@ } obs_data_set_int(data, P_RATECONTROLMETHOD, (int32_t)m_VideoEncoder->GetRateControlMethod()); - } - - // Bitrate - uint64_t bitrateOvr = obs_data_get_int(data, "bitrate") * 1000; - if (bitrateOvr > 0) { - if (m_VideoEncoder->GetTargetBitrate() > bitrateOvr) - m_VideoEncoder->SetTargetBitrate(static_cast<uint32_t>(bitrateOvr)); - if (m_VideoEncoder->GetPeakBitrate() > bitrateOvr) - m_VideoEncoder->SetPeakBitrate(static_cast<uint32_t>(bitrateOvr)); - - obs_data_set_int(data, "bitrate", m_VideoEncoder->GetTargetBitrate() / 1000); - obs_data_set_int(data, P_BITRATE_PEAK, m_VideoEncoder->GetPeakBitrate() / 1000); + obs_data_unset_user_value(data, "rate_control"); } // IDR-Period (Keyframes) @@ -1540,9 +1518,10 @@ obs_data_set_double(data, P_INTERVAL_KEYFRAME, static_cast<double_t>(obs_data_get_int(data, "keyint_sec"))); obs_data_set_int(data, P_PERIOD_IDR_H264, static_cast<uint32_t>(obs_data_get_int(data, "keyint_sec") * (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen)))); + obs_data_unset_user_value(data, "keyint_sec"); } } - #pragma endregion OBS Enforce Streaming Service Settings +#pragma endregion OBS Enforce Streaming Service Settings m_VideoEncoder->SetDebug(obs_data_get_bool(data, P_DEBUG));
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/enc-h265.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/enc-h265.cpp
Changed
@@ -17,7 +17,6 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ - ////////////////////////////////////////////////////////////////////////// // New UI Design ////////////////////////////////////////////////////////////////////////// @@ -111,13 +110,13 @@ } void Plugin::Interface::H265Interface::get_defaults(obs_data_t *data) { - #pragma region OBS - Enforce Streaming Service Restrictions +#pragma region OBS - Enforce Streaming Service Restrictions obs_data_set_default_int(data, "bitrate", 0); obs_data_set_default_int(data, "keyint_sec", 0); obs_data_set_default_string(data, "rate_control", ""); obs_data_set_default_string(data, "profile", ""); obs_data_set_default_string(data, "preset", ""); - #pragma endregion OBS - Enforce Streaming Service Restrictions +#pragma endregion OBS - Enforce Streaming Service Restrictions // Static //obs_data_set_default_int(data, P_USAGE, static_cast<int64_t>(Usage::Transcoding)); @@ -220,15 +219,15 @@ obs_property_t* p; // Static Properties - #pragma region Quality Preset +#pragma region Quality Preset p = obs_properties_add_list(props, P_QUALITYPRESET, P_TRANSLATE(P_QUALITYPRESET), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUALITYPRESET))); obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_SPEED), static_cast<int32_t>(QualityPreset::Speed)); obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_BALANCED), static_cast<int32_t>(QualityPreset::Balanced)); obs_property_list_add_int(p, P_TRANSLATE(P_QUALITYPRESET_QUALITY), static_cast<int32_t>(QualityPreset::Quality)); - #pragma endregion Quality Preset +#pragma endregion Quality Preset - #pragma region Profile, Levels +#pragma region Profile, Levels p = obs_properties_add_list(props, P_PROFILE, P_TRANSLATE(P_PROFILE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PROFILE))); obs_property_list_add_int(p, "Main", static_cast<int32_t>(Profile::Main)); @@ -249,30 +248,30 @@ obs_property_list_add_int(p, "6.0", static_cast<int32_t>(ProfileLevel::L60)); obs_property_list_add_int(p, "6.1", static_cast<int32_t>(ProfileLevel::L61)); obs_property_list_add_int(p, "6.2", static_cast<int32_t>(ProfileLevel::L62)); - #pragma endregion Profile, Levels +#pragma endregion Profile, Levels - #pragma region Tier +#pragma region Tier p = obs_properties_add_list(props, P_TIER, P_TRANSLATE(P_TIER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_TIER))); obs_property_list_add_int(p, "Main", static_cast<int32_t>(H265::Tier::Main)); obs_property_list_add_int(p, "High", static_cast<int32_t>(H265::Tier::High)); - #pragma endregion Tier +#pragma endregion Tier - #pragma region Coding Type +#pragma region Coding Type p = obs_properties_add_list(props, P_CODINGTYPE, P_TRANSLATE(P_CODINGTYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_CODINGTYPE))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), static_cast<int32_t>(CodingType::Automatic)); obs_property_list_add_int(p, "CABAC", static_cast<int32_t>(CodingType::CABAC)); - #pragma endregion Coding Type +#pragma endregion Coding Type - #pragma region Maximum Reference Frames +#pragma region Maximum Reference Frames p = obs_properties_add_int_slider(props, P_MAXIMUMREFERENCEFRAMES, P_TRANSLATE(P_MAXIMUMREFERENCEFRAMES), 1, 16, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MAXIMUMREFERENCEFRAMES))); - #pragma endregion Maximum Reference Frames +#pragma endregion Maximum Reference Frames // Rate Control - #pragma region Rate Control Method +#pragma region Rate Control Method p = obs_properties_add_list(props, P_RATECONTROLMETHOD, P_TRANSLATE(P_RATECONTROLMETHOD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_RATECONTROLMETHOD))); obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_CQP), static_cast<int32_t>(RateControlMethod::ConstantQP)); @@ -280,16 +279,16 @@ obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBR), static_cast<int32_t>(RateControlMethod::PeakConstrainedVariableBitrate)); obs_property_list_add_int(p, P_TRANSLATE(P_RATECONTROLMETHOD_VBRLAT), static_cast<int32_t>(RateControlMethod::LatencyConstrainedVariableBitrate)); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion Rate Control Method +#pragma endregion Rate Control Method - #pragma region Pre-Pass +#pragma region Pre-Pass p = obs_properties_add_list(props, P_PREPASSMODE, P_TRANSLATE(P_PREPASSMODE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PREPASSMODE))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), static_cast<int32_t>(PrePassMode::Disabled)); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), static_cast<int32_t>(PrePassMode::Enabled)); - #pragma endregion Pre-Pass +#pragma endregion Pre-Pass - #pragma region Parameters +#pragma region Parameters /// Bitrate Constraints p = obs_properties_add_int(props, "bitrate", P_TRANSLATE(P_BITRATE_TARGET), 0, 1, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_BITRATE_TARGET))); @@ -311,16 +310,16 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_PFRAME_MINIMUM))); p = obs_properties_add_int_slider(props, P_QP_PFRAME_MAXIMUM, P_TRANSLATE(P_QP_PFRAME_MAXIMUM), 0, 51, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QP_PFRAME_MAXIMUM))); - #pragma endregion Parameters +#pragma endregion Parameters - #pragma region Filler Data +#pragma region Filler Data p = obs_properties_add_list(props, P_FILLERDATA, P_TRANSLATE(P_FILLERDATA), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FILLERDATA))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion Filler Data +#pragma endregion Filler Data - #pragma region Frame Skipping +#pragma region Frame Skipping p = obs_properties_add_list(props, P_FRAMESKIPPING, P_TRANSLATE(P_FRAMESKIPPING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); @@ -331,49 +330,49 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_FRAMESKIPPING_BEHAVIOUR))); obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_SKIPNTH), 0); obs_property_list_add_int(p, P_TRANSLATE(P_FRAMESKIPPING_KEEPNTH), 1); - #pragma endregion Frame Skipping +#pragma endregion Frame Skipping - #pragma region VBAQ +#pragma region VBAQ p = obs_properties_add_list(props, P_VBAQ, P_TRANSLATE(P_VBAQ), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBAQ))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion VBAQ +#pragma endregion VBAQ - #pragma region Enforce Hypothetical Reference Decoder Restrictions +#pragma region Enforce Hypothetical Reference Decoder Restrictions p = obs_properties_add_list(props, P_ENFORCEHRD, P_TRANSLATE(P_ENFORCEHRD), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_ENFORCEHRD))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion Enforce Hyptothetical Reference Decoder Restrictions +#pragma endregion Enforce Hyptothetical Reference Decoder Restrictions // VBV Buffer - #pragma region VBV Buffer Mode +#pragma region VBV Buffer Mode p = obs_properties_add_list(props, P_VBVBUFFER, P_TRANSLATE(P_VBVBUFFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_AUTOMATIC), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_MANUAL), 1); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion VBV Buffer Mode +#pragma endregion VBV Buffer Mode - #pragma region VBV Buffer Strictness +#pragma region VBV Buffer Strictness p = obs_properties_add_float_slider(props, P_VBVBUFFER_STRICTNESS, P_TRANSLATE(P_VBVBUFFER_STRICTNESS), 0.0, 100.0, 0.1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_STRICTNESS))); - #pragma endregion VBV Buffer Strictness +#pragma endregion VBV Buffer Strictness - #pragma region VBV Buffer Size +#pragma region VBV Buffer Size p = obs_properties_add_int_slider(props, P_VBVBUFFER_SIZE, P_TRANSLATE(P_VBVBUFFER_SIZE), 1, 1000000, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_SIZE))); - #pragma endregion VBV Buffer Size +#pragma endregion VBV Buffer Size - #pragma region VBV Buffer Initial Fullness +#pragma region VBV Buffer Initial Fullness p = obs_properties_add_float_slider(props, P_VBVBUFFER_INITIALFULLNESS, P_TRANSLATE(P_VBVBUFFER_INITIALFULLNESS), 0.0, 100.0, 100.0 / 64.0); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VBVBUFFER_INITIALFULLNESS))); - #pragma endregion VBV Buffer Initial Fullness +#pragma endregion VBV Buffer Initial Fullness // Picture Control - #pragma region Interval and Periods - /// Keyframe, IDR +#pragma region Interval and Periods +/// Keyframe, IDR p = obs_properties_add_float(props, P_INTERVAL_KEYFRAME, P_TRANSLATE(P_INTERVAL_KEYFRAME), 0, 100, 0.001); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_KEYFRAME))); p = obs_properties_add_int(props, P_PERIOD_IDR_H265, P_TRANSLATE(P_PERIOD_IDR_H265), 0, 1000, 1); @@ -388,17 +387,17 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_INTERVAL_PFRAME))); p = obs_properties_add_int(props, P_PERIOD_PFRAME, P_TRANSLATE(P_PERIOD_PFRAME), 0, 1000, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_PERIOD_PFRAME))); - #pragma endregion Interval and Periods +#pragma endregion Interval and Periods - #pragma region GOP Type +#pragma region GOP Type p = obs_properties_add_list(props, P_GOP_TYPE, P_TRANSLATE(P_GOP_TYPE), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_GOP_TYPE))); obs_property_list_add_int(p, P_TRANSLATE(P_GOP_TYPE_FIXED), static_cast<int64_t>(H265::GOPType::Fixed)); obs_property_list_add_int(p, P_TRANSLATE(P_GOP_TYPE_VARIABLE), static_cast<int64_t>(H265::GOPType::Variable)); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion GOP Type +#pragma endregion GOP Type - #pragma region GOP Size +#pragma region GOP Size p = obs_properties_add_int(props, P_GOP_SIZE, P_TRANSLATE(P_GOP_SIZE), 1, 1000, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_GOP_SIZE))); @@ -407,41 +406,41 @@ p = obs_properties_add_int(props, P_GOP_SIZE_MAXIMUM, P_TRANSLATE(P_GOP_SIZE_MAXIMUM), 1, 1000, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_GOP_SIZE_MAXIMUM))); - #pragma endregion GOP Size +#pragma endregion GOP Size /// GOP Alignment? - #pragma region Deblocking Filter +#pragma region Deblocking Filter p = obs_properties_add_list(props, P_DEBLOCKINGFILTER, P_TRANSLATE(P_DEBLOCKINGFILTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_DEBLOCKINGFILTER))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion Deblocking Filter +#pragma endregion Deblocking Filter - #pragma region Motion Estimation +#pragma region Motion Estimation p = obs_properties_add_list(props, P_MOTIONESTIMATION, P_TRANSLATE(P_MOTIONESTIMATION), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MOTIONESTIMATION))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_HALF), 1); obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_QUARTER), 2); obs_property_list_add_int(p, P_TRANSLATE(P_MOTIONESTIMATION_FULL), 3); - #pragma endregion Motion Estimation +#pragma endregion Motion Estimation // System - #pragma region Video APIs +#pragma region Video APIs p = obs_properties_add_list(props, P_VIDEO_API, P_TRANSLATE(P_VIDEO_API), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_STRING); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_API))); obs_property_set_modified_callback(p, properties_modified); fill_api_list(p); - #pragma endregion Video APIs +#pragma endregion Video APIs - #pragma region Video Adapters +#pragma region Video Adapters p = obs_properties_add_list(props, P_VIDEO_ADAPTER, P_TRANSLATE(P_VIDEO_ADAPTER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIDEO_ADAPTER))); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion Video Adapters +#pragma endregion Video Adapters - #pragma region OpenCL +#pragma region OpenCL p = obs_properties_add_list(props, P_OPENCL_TRANSFER, P_TRANSLATE(P_OPENCL_TRANSFER), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_TRANSFER))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); @@ -451,9 +450,9 @@ obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_OPENCL_CONVERSION))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_ENABLED), 1); - #pragma endregion OpenCL +#pragma endregion OpenCL - #pragma region Asynchronous Queue +#pragma region Asynchronous Queue p = obs_properties_add_list(props, P_MULTITHREADING, P_TRANSLATE(P_MULTITHREADING), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_MULTITHREADING))); obs_property_list_add_int(p, P_TRANSLATE(P_UTIL_SWITCH_DISABLED), 0); @@ -461,9 +460,9 @@ p = obs_properties_add_int_slider(props, P_QUEUESIZE, P_TRANSLATE(P_QUEUESIZE), 1, 32, 1); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_QUEUESIZE))); - #pragma endregion Asynchronous Queue +#pragma endregion Asynchronous Queue - #pragma region View Mode +#pragma region View Mode p = obs_properties_add_list(props, P_VIEW, P_TRANSLATE(P_VIEW), OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT); obs_property_set_long_description(p, P_TRANSLATE(P_DESC(P_VIEW))); obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_BASIC), static_cast<int32_t>(ViewMode::Basic)); @@ -471,7 +470,7 @@ obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_EXPERT), static_cast<int32_t>(ViewMode::Expert)); obs_property_list_add_int(p, P_TRANSLATE(P_VIEW_MASTER), static_cast<int32_t>(ViewMode::Master)); obs_property_set_modified_callback(p, properties_modified); - #pragma endregion View Mode +#pragma endregion View Mode /// Debug p = obs_properties_add_bool(props, P_DEBUG, P_TRANSLATE(P_DEBUG)); @@ -507,7 +506,7 @@ // Transfer settings from older Plugin versions to newer ones. obs_data_transfer_settings(data); - #pragma region Video API & Adapter +#pragma region Video API & Adapter // Video API const char *videoAPI_last = obs_data_get_string(data, ("last" P_VIDEO_API)), @@ -547,7 +546,7 @@ try { auto enc = EncoderH265(api, adapter); - #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \ + #define TEMP_LIMIT_DROPDOWN(func, enm, prop) { \ auto tmp_p = obs_properties_get(props, prop); \ auto tmp_l = enc.func(); \ enm tmp_s = static_cast<enm>(obs_data_get_int(data, obs_property_name(tmp_p))); \ @@ -565,12 +564,12 @@ obs_data_unset_user_value(data, obs_property_name(tmp_p)); \ } \ } - #define TEMP_LIMIT_SLIDER(func, prop) { \ + #define TEMP_LIMIT_SLIDER(func, prop) { \ auto tmp_p = obs_properties_get(props, prop); \ auto tmp_l = enc.func(); \ obs_property_int_set_limits(tmp_p, (int)tmp_l.first, (int)tmp_l.second, 1); \ } - #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \ + #define TEMP_LIMIT_SLIDER_BITRATE(func, prop) { \ auto tmp_p = obs_properties_get(props, prop); \ auto tmp_l = enc.func(); \ obs_property_int_set_limits(tmp_p, (int)tmp_l.first / 1000, (int)tmp_l.second / 1000, 1); \ @@ -598,9 +597,9 @@ e.what()); } } - #pragma endregion Video API & Adapter +#pragma endregion Video API & Adapter - #pragma region View Mode +#pragma region View Mode ViewMode lastView = static_cast<ViewMode>(obs_data_get_int(data, ("last" P_VIEW))), curView = static_cast<ViewMode>(obs_data_get_int(data, P_VIEW)); if (lastView != curView) { @@ -672,7 +671,7 @@ obs_data_unset_user_value(data, kv.first); } - #pragma region Rate Control +#pragma region Rate Control bool vis_rcm_bitrate_target = false, vis_rcm_bitrate_peak = false, vis_rcm_qp = false, @@ -746,9 +745,9 @@ if (!(curView >= ViewMode::Expert) || vis_rcm_qp) { obs_data_unset_user_value(data, P_VBAQ); } - #pragma endregion Rate Control +#pragma endregion Rate Control - #pragma region VBV Buffer +#pragma region VBV Buffer uint32_t vbvBufferMode = static_cast<uint32_t>(obs_data_get_int(data, P_VBVBUFFER)); bool vbvBufferVisible = (curView >= ViewMode::Advanced); @@ -764,9 +763,9 @@ obs_data_unset_user_value(data, P_VBVBUFFER_SIZE); if (!vbvBufferVisible || vbvBufferMode == 1) obs_data_unset_user_value(data, P_VBVBUFFER_STRICTNESS); - #pragma endregion VBV Buffer +#pragma endregion VBV Buffer - #pragma region GOP +#pragma region GOP bool gopvisible = (curView >= ViewMode::Expert); bool goptype_fixed = (static_cast<H265::GOPType>(obs_data_get_int(data, P_GOP_TYPE)) == H265::GOPType::Fixed); obs_property_set_visible(obs_properties_get(props, P_GOP_SIZE), goptype_fixed && gopvisible); @@ -778,8 +777,8 @@ obs_data_unset_user_value(data, P_GOP_SIZE_MINIMUM); obs_data_unset_user_value(data, P_GOP_SIZE_MAXIMUM); } - #pragma endregion GOP - #pragma endregion View Mode +#pragma endregion GOP +#pragma endregion View Mode // Permanently disable static properties while encoding. void* enc = obs_properties_get_param(props); @@ -941,7 +940,7 @@ } // Picture Control - uint32_t gopSize = static_cast<uint32_t>(floor(obsFPSden / (double_t)obsFPSnum)); + uint32_t gopSize = static_cast<uint32_t>(clamp(floor(obsFPSnum / (double_t)obsFPSden), 1, 1000)); H265::GOPType gopType = static_cast<H265::GOPType>(obs_data_get_int(data, P_GOP_TYPE)); m_VideoEncoder->SetGOPType(gopType); if (static_cast<ViewMode>(obs_data_get_int(data, P_VIEW)) >= ViewMode::Expert) { @@ -965,14 +964,14 @@ double_t keyinterv = obs_data_get_double(data, P_INTERVAL_KEYFRAME); idrperiod = static_cast<uint32_t>(ceil((keyinterv * framerate) / gopSize)); } - m_VideoEncoder->SetIDRPeriod(idrperiod); + m_VideoEncoder->SetIDRPeriod(clamp(idrperiod, 1, 1000)); } m_VideoEncoder->SetDeblockingFilterEnabled(!!obs_data_get_int(data, P_DEBLOCKINGFILTER)); m_VideoEncoder->SetMotionEstimationHalfPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 1)); m_VideoEncoder->SetMotionEstimationQuarterPixelEnabled(!!(obs_data_get_int(data, P_MOTIONESTIMATION) & 2)); // OBS - Enforce Streaming Service Restrictions - #pragma region OBS - Enforce Streaming Service Restrictions +#pragma region OBS - Enforce Streaming Service Restrictions { // Profile const char* p_str = obs_data_get_string(data, "profile"); @@ -980,12 +979,7 @@ if (strcmp(p_str, "main")) { m_VideoEncoder->SetProfile(Profile::Main); } - } else { - switch (m_VideoEncoder->GetProfile()) { - case Profile::Main: - obs_data_set_string(data, "profile", "main"); - break; - } + obs_data_unset_user_value(data, "profile"); } // Preset @@ -999,18 +993,7 @@ m_VideoEncoder->SetQualityPreset(QualityPreset::Quality); } obs_data_set_int(data, P_QUALITYPRESET, (int32_t)m_VideoEncoder->GetQualityPreset()); - } else { - switch (m_VideoEncoder->GetQualityPreset()) { - case QualityPreset::Speed: - obs_data_set_string(data, "preset", "speed"); - break; - case QualityPreset::Balanced: - obs_data_set_string(data, "preset", "balanced"); - break; - case QualityPreset::Quality: - obs_data_set_string(data, "preset", "quality"); - break; - } + obs_data_unset_user_value(data, "preset"); } // Rate Control Method @@ -1028,36 +1011,10 @@ } obs_data_set_int(data, P_RATECONTROLMETHOD, (int32_t)m_VideoEncoder->GetRateControlMethod()); - } else { - switch (m_VideoEncoder->GetRateControlMethod()) { - case RateControlMethod::ConstantBitrate: - obs_data_set_string(data, "rate_control", "CBR"); - break; - case RateControlMethod::PeakConstrainedVariableBitrate: - obs_data_set_string(data, "rate_control", "VBR"); - break; - case RateControlMethod::LatencyConstrainedVariableBitrate: - obs_data_set_string(data, "rate_control", "VBR_LAT"); - break; - case RateControlMethod::ConstantQP: - obs_data_set_string(data, "rate_control", "CQP"); - break; - } + obs_data_unset_user_value(data, "rate_control"); } - - // IDR-Period (Keyframes) - //uint32_t fpsNum = m_VideoEncoder->GetFrameRate().first; - //uint32_t fpsDen = m_VideoEncoder->GetFrameRate().second; - //if (obs_data_get_int(data, "keyint_sec") != -1) { - // m_VideoEncoder->SetIDRPeriod(static_cast<uint32_t>(obs_data_get_int(data, "keyint_sec") * (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen)))); - - // obs_data_set_double(data, P_INTERVAL_KEYFRAME, static_cast<double_t>(obs_data_get_int(data, "keyint_sec"))); - // obs_data_set_int(data, P_PERIOD_IDR_H264, static_cast<uint32_t>(obs_data_get_int(data, "keyint_sec") * (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen)))); - //} else { - // obs_data_set_int(data, "keyint_sec", static_cast<uint64_t>(m_VideoEncoder->GetIDRPeriod() / (static_cast<double_t>(fpsNum) / static_cast<double_t>(fpsDen)))); - //} } - #pragma endregion OBS - Enforce Streaming Service Restrictions +#pragma endregion OBS - Enforce Streaming Service Restrictions // Dynamic Properties (Can be changed during Encoding) this->update(data);
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/plugin.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/plugin.cpp
Changed
@@ -22,13 +22,12 @@ #include "api-base.h" #include "amf.h" #include "amf-capabilities.h" -#include <sstream> - #include "enc-h264.h" #include "enc-h265.h" - -#include "libobs/util/util.hpp" - +#include <sstream> +#include <libobs/util/pipe.h> +#include <libobs/util/platform.h> +#include <libobs/util/util.hpp> #ifdef _WIN32 #include <windows.h> #endif @@ -36,13 +35,53 @@ using namespace Plugin; using namespace Plugin::AMD; -////////////////////////////////////////////////////////////////////////// -// Code -////////////////////////////////////////////////////////////////////////// +#if defined(WIN32) BOOL WINAPI DllMain(HINSTANCE, DWORD, LPVOID) { return TRUE; } +static inline bool create_process(const char *cmd_line, HANDLE stdin_handle, + HANDLE stdout_handle, HANDLE *process) { + PROCESS_INFORMATION pi = { 0 }; + wchar_t *cmd_line_w = NULL; + STARTUPINFOW si = { 0 }; + bool success = false; + + si.cb = sizeof(si); + si.dwFlags = STARTF_USESTDHANDLES; + si.hStdInput = stdin_handle; + si.hStdOutput = stdout_handle; + + os_utf8_to_wcs_ptr(cmd_line, 0, &cmd_line_w); + if (cmd_line_w) { + success = !!CreateProcessW(NULL, cmd_line_w, NULL, NULL, true, + CREATE_NO_WINDOW, NULL, NULL, &si, &pi); + + if (success) { + *process = pi.hProcess; + CloseHandle(pi.hThread); + } + + bfree(cmd_line_w); + } + + return success; +} + +static bool create_pipe(HANDLE *input, HANDLE *output) { + SECURITY_ATTRIBUTES sa = { 0 }; + + sa.nLength = sizeof(sa); + sa.bInheritHandle = true; + + if (!CreatePipe(input, output, &sa, 0)) { + return false; + } + + return true; +} +#endif + OBS_DECLARE_MODULE(); OBS_MODULE_AUTHOR("Michael Fabian Dirks"); OBS_MODULE_USE_DEFAULT_LOCALE("enc-amf", "en-US"); @@ -165,71 +204,81 @@ } #endif -#ifndef NO_PIPED_DETECTION -static inline bool create_process(const char *cmd_line, HANDLE *process) -{ - PROCESS_INFORMATION pi = {0}; - STARTUPINFOW si = {0}; - wchar_t *cmd_line_w = NULL; - bool success = false; - - os_utf8_to_wcs_ptr(cmd_line, 0, &cmd_line_w); - if (cmd_line_w) { - si.cb = sizeof(si); - success = !!CreateProcessW(nullptr, cmd_line_w, nullptr, - nullptr, true, CREATE_NO_WINDOW, nullptr, - nullptr, &si, &pi); - - if (success) { - *process = pi.hProcess; - CloseHandle(pi.hThread); - } - - bfree(cmd_line_w); - } - - return success; -} -#endif - -/** -* Required: Called when the module is loaded. Use this function to load all -* the sources/encoders/outputs/services for your module, or anything else that -* may need loading. -* -* @return Return true to continue loading the module, otherwise -* false to indicate failure and unload the module -*/ MODULE_EXPORT bool obs_module_load(void) { PLOG_DEBUG("<" __FUNCTION_NAME__ "> Loading..."); -#ifndef NO_PIPED_DETECTION - HANDLE process = nullptr; - DWORD detect_code = 0; +#ifdef _WIN32 + // Out-of-process AMF Test + { + unsigned long returnCode = 0xFFFFFFFF; + HANDLE hProcess, hIn, hOut; + BPtr<char> path = obs_module_file("enc-amf-test" BIT_STR ".exe"); -#ifdef _WIN64 -#define BIT_STR "64" -#else -#define BIT_STR "32" -#endif + if (!create_pipe(&hIn, &hOut)) { + PLOG_ERROR("Failed to create pipes for AMF test."); + return false; + } + if (!SetHandleInformation(hIn, HANDLE_FLAG_INHERIT, false) + || !SetHandleInformation(hOut, HANDLE_FLAG_INHERIT, false)) { + CloseHandle(hIn); + CloseHandle(hOut); + PLOG_ERROR("Failed to modify pipes for AMF test."); + return false; + }; + if (!create_process(path, hIn, hOut, &hProcess)) { + CloseHandle(hIn); + CloseHandle(hOut); + PLOG_ERROR("Failed to start AMF test subprocess."); + return false; + } - // Call amf-detect process to check to see if AMF is available before - // initializing AMF in the process. This isolates the check and - // prevents potential startup crashes from affecting OBS startup. - BPtr<char> path = obs_module_file("detect-amf" BIT_STR ".exe"); - if (create_process(path, &process)) { - if (WaitForSingleObject(process, 2000) == WAIT_OBJECT_0) - GetExitCodeProcess(process, &detect_code); - CloseHandle(process); - } + std::vector<char> buf(1024); + DWORD bufread = 0; + while (ReadFile(hOut, buf.data(), 1024, &bufread, NULL)) { + PLOG_ERROR("%s", buf.data()); + } - if (detect_code != 3) { - if (detect_code == 2) { - PLOG_INFO("<" __FUNCTION_NAME__ "> AMF not supported (no AMD graphics)"); - } else { - PLOG_INFO("<" __FUNCTION_NAME__ "> AMF detection failure prevented! <3"); + if (WaitForSingleObject(hProcess, 2000) == WAIT_OBJECT_0) + GetExitCodeProcess(hProcess, &returnCode); + + CloseHandle(hProcess); + CloseHandle(hIn); + CloseHandle(hOut); + + switch (returnCode) { + case STATUS_ACCESS_VIOLATION: + case STATUS_ARRAY_BOUNDS_EXCEEDED: + case STATUS_BREAKPOINT: + case STATUS_DATATYPE_MISALIGNMENT: + case STATUS_FLOAT_DENORMAL_OPERAND: + case STATUS_FLOAT_DIVIDE_BY_ZERO: + case STATUS_FLOAT_INEXACT_RESULT: + case STATUS_FLOAT_INVALID_OPERATION: + case STATUS_FLOAT_OVERFLOW: + case STATUS_FLOAT_STACK_CHECK: + case STATUS_FLOAT_UNDERFLOW: + case STATUS_GUARD_PAGE_VIOLATION: + case STATUS_ILLEGAL_INSTRUCTION: + case STATUS_IN_PAGE_ERROR: + case STATUS_INTEGER_DIVIDE_BY_ZERO: + case STATUS_INTEGER_OVERFLOW: + case STATUS_INVALID_DISPOSITION: + case STATUS_INVALID_HANDLE: + case STATUS_NONCONTINUABLE_EXCEPTION: + case STATUS_PRIVILEGED_INSTRUCTION: + case STATUS_SINGLE_STEP: + case STATUS_STACK_OVERFLOW: + case STATUS_UNWIND_CONSOLIDATE: + default: + PLOG_ERROR("A critical error occured during AMF Testing."); + return false; + case 2: + case 1: + PLOG_ERROR("AMF Test failed due to one or more errors."); + return false; + case 0: + break; } - return false; } #endif @@ -262,7 +311,7 @@ Plugin::Interface::H264Interface::encoder_register(); Plugin::Interface::H265Interface::encoder_register(); -#if defined(_DEBUG) +#ifdef _DEBUG { PLOG_INFO("Dumping Parameter Information..."); const wchar_t* encoders[] = {
View file
obs-studio-21.0.3.tar.xz/plugins/enc-amf/Source/utility.cpp -> obs-studio-21.1.2.tar.xz/plugins/enc-amf/Source/utility.cpp
Changed
@@ -44,7 +44,6 @@ static std::map<std::string, std::string> translatedMap; const char* Utility::obs_module_text_multi(const char *key, uint8_t depth) { -#ifndef PIPED_PROCESS // Check if it already was translated. if (!translatedMap.count(std::string(key))) { // If not, translate it now. const char* out = obs_module_text(key); @@ -90,11 +89,6 @@ auto value = translatedMap.find(std::string(key)); return value->second.c_str(); -#else - (void)key; - (void)depth; - return nullptr; -#endif } @@ -338,7 +332,7 @@ throw std::runtime_error("Invalid Parameter"); } Plugin::AMD::Profile Utility::ProfileFromAMFH264(AMF_VIDEO_ENCODER_PROFILE_ENUM v) { - #pragma warning( disable: 4063 ) // Developer Note: I know better, Compiler. +#pragma warning( disable: 4063 ) // Developer Note: I know better, Compiler. switch (v) { case (AMF_VIDEO_ENCODER_PROFILE_ENUM)256: return Profile::ConstrainedBaseline;
View file
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test
Added
+(directory)
View file
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/CMakeLists.txt
Added
@@ -0,0 +1,109 @@ +# A Plugin that integrates the AMD AMF encoder into OBS Studio +# Copyright (C) 2016 - 2017 Michael Fabian Dirks +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +cmake_minimum_required(VERSION 3.1.0) +PROJECT(enc-amf-test) + +# All Warnings, Extra Warnings, Pedantic +if(MSVC) + # Hide Microsofts insecurities, as they are usually not cross-platform compatible changes. + add_definitions(-D_CRT_SECURE_NO_WARNINGS) + + # Force to always compile with W4 + if(CMAKE_CXX_FLAGS MATCHES "/W[0-4]") + string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + else() + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W4") + endif() + + # Use Static Linking instead of Dynamic Linking + string(REPLACE "/MT" "/MD" + "CMAKE_C_FLAGS" + "${CMAKE_C_FLAGS}") + string(REPLACE "/MT" "/MD" + "CMAKE_CXX_FLAGS" + "${CMAKE_CXX_FLAGS}") + string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" UPPER_CONFIG_TYPES) + foreach(CONFIG_TYPE ${UPPER_CONFIG_TYPES}) + string(REPLACE "/MT" "/MD" + "CMAKE_C_FLAGS_${CONFIG_TYPE}" + "${CMAKE_C_FLAGS_${CONFIG_TYPE}}") + + string(REPLACE "/MT" "/MD" + "CMAKE_CXX_FLAGS_${CONFIG_TYPE}" + "${CMAKE_CXX_FLAGS_${CONFIG_TYPE}}") + endforeach() + + # Enable Options + # /Gy (Function-Level Linking) + # /OPT:REF + # /OPT:NOICF + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Gy") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Gy") + set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} /OPT:REF /OPT:NOICF") +elseif(CMAKE_COMPILER_IS_GNUCC OR CMAKE_COMPILER_IS_GNUCXX) + # Update if necessary + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wno-long-long -pedantic") +endif() + +# Detect Architecture (Bitness) +math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}") + +# Project +add_executable(enc-amf-test + "${PROJECT_SOURCE_DIR}/main.cpp" + "${PROJECT_SOURCE_DIR}/libobs/obs-module.h" + "${PROJECT_SOURCE_DIR}/libobs/obs-module.c" + "${enc-amf_SOURCE_DIR}/Source/amf.cpp" + "${enc-amf_SOURCE_DIR}/Source/amf-capabilities.cpp" + "${enc-amf_SOURCE_DIR}/Source/amf-encoder.cpp" + "${enc-amf_SOURCE_DIR}/Source/amf-encoder-h264.cpp" + "${enc-amf_SOURCE_DIR}/Source/amf-encoder-h265.cpp" + "${enc-amf_SOURCE_DIR}/Source/api-base.cpp" + "${enc-amf_SOURCE_DIR}/Source/api-d3d9.cpp" + "${enc-amf_SOURCE_DIR}/Source/api-d3d11.cpp" + "${enc-amf_SOURCE_DIR}/Source/utility.cpp" + "${enc-amf_SOURCE_DIR}/Include/amf.h" + "${enc-amf_SOURCE_DIR}/Include/amf-capabilities.h" + "${enc-amf_SOURCE_DIR}/Include/amf-encoder.h" + "${enc-amf_SOURCE_DIR}/Include/amf-encoder-h264.h" + "${enc-amf_SOURCE_DIR}/Include/amf-encoder-h265.h" + "${enc-amf_SOURCE_DIR}/Include/api-base.h" + "${enc-amf_SOURCE_DIR}/Include/api-d3d9.h" + "${enc-amf_SOURCE_DIR}/Include/api-d3d11.h" + "${enc-amf_SOURCE_DIR}/Include/utility.h" +) +include_directories(enc-amf-test BEFORE ${PROJECT_SOURCE_DIR}) +target_link_libraries(enc-amf-test ${enc-amf_LIBRARIES}) +set_target_properties(enc-amf-test + PROPERTIES + OUTPUT_NAME "enc-amf-test${BITS}") + +if(TARGET libobs) + install_obs_datatarget(enc-amf-test "obs-plugins/enc-amf") +else() + add_custom_command(TARGET enc-amf-test POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + "$<TARGET_FILE:enc-amf-test>" + "${enc-amf_SOURCE_DIR}/#Build/data/obs-plugins/enc-amf/$<TARGET_FILE_NAME:enc-amf-test>" + ) + add_custom_command(TARGET enc-amf-test POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + "$<TARGET_PDB_FILE:enc-amf-test>" + "${enc-amf_SOURCE_DIR}/#Build/data/obs-plugins/enc-amf/$<TARGET_PDB_FILE_NAME:enc-amf-test>" + ) +endif()
View file
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/libobs
Added
+(directory)
View file
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/libobs/obs-module.c
Added
@@ -0,0 +1,33 @@ +/* + * A Plugin that integrates the AMD AMF encoder into OBS Studio + * Copyright (C) 2016 - 2017 Michael Fabian Dirks + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +const char *obs_module_text(const char *name) { + return name; +} + +void blog(int level, char* formatting, ...) { + level; + formatting; + return; +} + +void os_set_thread_name(const char *name) { + name; + return; +}
View file
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/libobs/obs-module.h
Added
@@ -0,0 +1,22 @@ +/* + * A Plugin that integrates the AMD AMF encoder into OBS Studio + * Copyright (C) 2016 - 2017 Michael Fabian Dirks + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +const char *obs_module_text(const char *); +void blog(int, char*, ...); +void os_set_thread_name(const char *name);
View file
obs-studio-21.1.2.tar.xz/plugins/enc-amf/amf-test/main.cpp
Added
@@ -0,0 +1,55 @@ +/* + * A Plugin that integrates the AMD AMF encoder into OBS Studio + * Copyright (C) 2016 - 2017 Michael Fabian Dirks + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#include "amf.h" +#include "amf-capabilities.h" +#include "api-base.h" +#include <iostream> + +#ifdef _WIN32 +#include "windows.h" +#endif + +using namespace Plugin; +using namespace Plugin::AMD; + +int main(int argc, char* argv[]) { + argc; + argv; + +#ifdef _WIN32 + SetErrorMode(SEM_NOGPFAULTERRORBOX | SEM_FAILCRITICALERRORS); +#endif + + try { + AMF::Initialize(); + API::InitializeAPIs(); + CapabilityManager::Initialize(); + CapabilityManager::Finalize(); + API::FinalizeAPIs(); + AMF::Finalize(); + return 0; + } catch (std::exception ex) { + std::cout << ex.what() << std::endl; + return 1; + } catch (...) { + std::cout << "Unknown Error" << std::endl; + return 2; + } +}
View file
obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/fil-PH.ini
Added
@@ -0,0 +1,36 @@ +ImageInput="Larawan" +File="Dokumentong Larawan" +UnloadWhenNotShowing="Mag-ibis ng imahe kapag hindi nagpapakita" + +SlideShow="Ipakita ang Slide ng Larawan" +SlideShow.TransitionSpeed="Bilis ng Paglipat (milliseconds)" +SlideShow.SlideTime="Oras sa Pagitan ng Mga Slide (millisecond)" +SlideShow.Files="Dokumentong Larawan" +SlideShow.CustomSize="Bounding Size / Aspect Ratio" +SlideShow.CustomSize.Auto="Awtomatikong" +SlideShow.Randomize="Simulan ang Pag-playback" +SlideShow.Loop="Silo" +SlideShow.Transition="Paglipat" +SlideShow.Transition.Cut="Kunin" +SlideShow.Transition.Fade="Fade" +SlideShow.Transition.Swipe="Mag-swipe" +SlideShow.Transition.Slide="Slide" +SlideShow.PlaybackBehavior="Pag-uugali ng Pagtingin" +SlideShow.PlaybackBehavior.StopRestart="Itigil kapag hindi nakikita, i-restart kapag nakikita" +SlideShow.PlaybackBehavior.PauseUnpause="I-pause kapag hindi nakikita, i-unpause kapag nakikita" +SlideShow.PlaybackBehavior.AlwaysPlay="Laging i-play kahit na hindi nakikita" +SlideShow.SlideMode="Slide Mode" +SlideShow.SlideMode.Auto="Awtomatikong" +SlideShow.SlideMode.Manual="Mano-manong (Gamitin ang mga hotkey upang kontrolin ang slideshow)" +SlideShow.PlayPause="I-play / I-pause" +SlideShow.Restart="I-restart" +SlideShow.Stop="Itigil" +SlideShow.NextSlide="Susunod na Slide" +SlideShow.PreviousSlide="Nakaraang Slide" +SlideShow.HideWhenDone="Itago kapag tapos na ang slideshow" + +ColorSource="Pinagmulan ng Kulay" +ColorSource.Color="Kulay" +ColorSource.Width="Lapad" +ColorSource.Height="Taas" +
View file
obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/ka-GE.ini
Added
@@ -0,0 +1,36 @@ +ImageInput="სურათი" +File="სურათის ფაილი" +UnloadWhenNotShowing="სურათის ამოღება, თუ არ გამოჩნდება" + +SlideShow="სლაიდშოუ" +SlideShow.TransitionSpeed="გადასვლის სიჩქარე (მილიწამებში)" +SlideShow.SlideTime="დაყოვნება სლაიდებს შორის (მილიწამებში)" +SlideShow.Files="სურათების ფაილები" +SlideShow.CustomSize="ჩარჩოს ზომა/გვერდების თანაფარდობა" +SlideShow.CustomSize.Auto="ავტომატური" +SlideShow.Randomize="შემთხვევითი შერჩევა" +SlideShow.Loop="გამეორება" +SlideShow.Transition="გადასვლები" +SlideShow.Transition.Cut="მოჭრა" +SlideShow.Transition.Fade="მილევა" +SlideShow.Transition.Swipe="შენაცვლება" +SlideShow.Transition.Slide="გადაწევა" +SlideShow.PlaybackBehavior="ხილვადობის მიხედვით მოქმედება" +SlideShow.PlaybackBehavior.StopRestart="შეწყვეტა თუ უხილავია, თავიდან გაშვება თუ ხილულია" +SlideShow.PlaybackBehavior.PauseUnpause="შეჩერება თუ უხილავია, გაშვება თუ ხილულია" +SlideShow.PlaybackBehavior.AlwaysPlay="ყოველთვის გაშვება, ხილვადობის მიუხედავად" +SlideShow.SlideMode="სლაიდების მართვა" +SlideShow.SlideMode.Auto="ავტომატური" +SlideShow.SlideMode.Manual="ხელით (ღილაკების გამოყენება სლაიდშოუს სამართავად)" +SlideShow.PlayPause="გაშვება/შეჩერება" +SlideShow.Restart="თავიდან გაშვება" +SlideShow.Stop="შეწყვეტა" +SlideShow.NextSlide="მომდევნო სლაიდი" +SlideShow.PreviousSlide="წინა სლაიდი" +SlideShow.HideWhenDone="დამალვა სლაიდშოუს დასრულებისას" + +ColorSource="ფონის ფერი" +ColorSource.Color="ფერი" +ColorSource.Width="სიგანე" +ColorSource.Height="სიმაღლე" +
View file
obs-studio-21.0.3.tar.xz/plugins/image-source/data/locale/ro-RO.ini -> obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/ro-RO.ini
Changed
@@ -5,9 +5,15 @@ SlideShow="Slide Show de imagini" SlideShow.TransitionSpeed="Viteza de tranziție (milisecunde)" SlideShow.SlideTime="Timpul dintre diapozitive (milisecunde)" +SlideShow.Files="Fișiere Imagine" +SlideShow.CustomSize.Auto="Automat" +SlideShow.Loop="Buclă" SlideShow.Transition="Tranziție" SlideShow.Transition.Cut="Decupare" SlideShow.Transition.Slide="Diapozitiv" +SlideShow.SlideMode.Auto="Automat" +SlideShow.NextSlide="Următorul diapozitiv" +SlideShow.PreviousSlide="Diapozitiv anterior" ColorSource.Color="Culoare" ColorSource.Width="Lățime"
View file
obs-studio-21.0.3.tar.xz/plugins/image-source/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/ru-RU.ini
Changed
@@ -11,7 +11,7 @@ SlideShow.Randomize="Случайное воспроизведение" SlideShow.Loop="Повтор" SlideShow.Transition="Переход" -SlideShow.Transition.Cut="Обрезать" +SlideShow.Transition.Cut="Обрезка" SlideShow.Transition.Fade="Затухание" SlideShow.Transition.Swipe="Перемещение" SlideShow.Transition.Slide="Сдвиг"
View file
obs-studio-21.1.2.tar.xz/plugins/image-source/data/locale/tl-PH.ini
Added
@@ -0,0 +1,36 @@ +ImageInput="Imahe" +File="Imahe ng File" +UnloadWhenNotShowing="Mag-ibis ng imahe kapag hindi nagpapakita" + +SlideShow="Ipakita ang pag-slide ng Larawan" +SlideShow.TransitionSpeed="Bilis ng Paglipat (milsegundo)" +SlideShow.SlideTime="Oras sa Pagitan ng mga Slide (milsegundo)" +SlideShow.Files="Mga Imahe ng File" +SlideShow.CustomSize="Karatig na Sukat/Ayos ng Ratio" +SlideShow.CustomSize.Auto="Awtomatiko" +SlideShow.Randomize="Pagkumpara sa Pag-play pabalik" +SlideShow.Loop="Silo" +SlideShow.Transition="Paglipat" +SlideShow.Transition.Cut="Kunin" +SlideShow.Transition.Fade="Kumupas" +SlideShow.Transition.Swipe="Mag-swipe" +SlideShow.Transition.Slide="Mag-slide" +SlideShow.PlaybackBehavior="Paggiging kita ng Pag-uugali" +SlideShow.PlaybackBehavior.StopRestart="Itigil kapag hindi ito makita, i-restart kapag nakikita na" +SlideShow.PlaybackBehavior.PauseUnpause="I-pause kapag hindi makita, i-unpause kapag kita na" +SlideShow.PlaybackBehavior.AlwaysPlay="Laging paandarin kahit hindi nakikita" +SlideShow.SlideMode="Naka-slide Mode" +SlideShow.SlideMode.Auto="Awtomatiko" +SlideShow.SlideMode.Manual="Mano-mano (gamitin ang mga hotkey para makontrol ang pagpapakita ng slide)" +SlideShow.PlayPause="Paganahin/I-pause" +SlideShow.Restart="I-restart" +SlideShow.Stop="Itigil" +SlideShow.NextSlide="Susunod na Slide" +SlideShow.PreviousSlide="Ang nakaraang Slide" +SlideShow.HideWhenDone="Itago kapag ang pagpapakita ng slide ay tapos na" + +ColorSource="Pinagmulan ng kulay" +ColorSource.Color="Kulay" +ColorSource.Width="Lapad" +ColorSource.Height="Taas" +
View file
obs-studio-21.0.3.tar.xz/plugins/image-source/obs-slideshow.c -> obs-studio-21.1.2.tar.xz/plugins/image-source/obs-slideshow.c
Changed
@@ -657,6 +657,20 @@ if (ss->pause_on_deactivate || ss->manual || ss->stop || ss->paused) return; + /* ----------------------------------------------------- */ + /* fade to transparency when the file list becomes empty */ + if (!ss->files.num) { + obs_source_t* active_transition_source = + obs_transition_get_active_source(ss->transition); + + if (active_transition_source) { + obs_source_release(active_transition_source); + do_transition(ss, true); + } + } + + /* ----------------------------------------------------- */ + /* do transition when slide time reached */ ss->elapsed += seconds; if (ss->elapsed > ss->slide_time) {
View file
obs-studio-21.1.2.tar.xz/plugins/linux-alsa/data/locale/fil-PH.ini
Added
@@ -0,0 +1,3 @@ +AlsaInput="Audio Capture Device (ALSA)" +Device="Device" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-alsa/data/locale/ka-GE.ini
Added
@@ -0,0 +1,3 @@ +AlsaInput="ხმის ჩამწერი მოწყობილობა (ALSA)" +Device="მოწყობილობა" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-alsa/data/locale/tl-PH.ini
Added
@@ -0,0 +1,3 @@ +AlsaInput="Aparatong Pangkuha ng Audio (APA)" +Device="Device" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-capture/data/locale/fil-PH.ini
Added
@@ -0,0 +1,16 @@ +X11SharedMemoryScreenInput="Screen Capture (XSHM)" +Screen="Screen" +CaptureCursor="Kunin ang Cursor" +AdvancedSettings="Mga Advanced na Setting" +XServer="X Server" +XCCapture="Pagkuha ng Window (Xcomposite)" +Window="Window" +CropTop="I-crop ang Tuktok (mga pixel)" +CropLeft="I-crop ang Kaliwa (mga pixel)" +CropRight="I-crop ang Kanan (mga pixel)" +CropBottom="I-crop ang Ika (pixels)" +SwapRedBlue="Magpalit ng pula at asul" +LockX="Lock X server kapag nakukuha" +IncludeXBorder="Isama ang X Border" +ExcludeAlpha="Gumamit ng alpha-less texture na format (Mesa workaround)" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-capture/data/locale/ka-GE.ini
Added
@@ -0,0 +1,16 @@ +X11SharedMemoryScreenInput="ეკრანის გადაღება (XSHM)" +Screen="ეკრანი" +CaptureCursor="მაჩვენებლის ასახვა" +AdvancedSettings="დამატებითი პარამეტრები" +XServer="X სერვერი" +XCCapture="ფანჯრის გადაღება (Xcomposite)" +Window="ფანჯარა" +CropTop="ზემოდან მოჭრა (პიქსელი)" +CropLeft="მარცხნიდან მოჭრა (პიქსელი)" +CropRight="მარჯვნიდან მოჭრა (პიქსელი)" +CropBottom="ქვემოდან მოჭრა (პიქსელი)" +SwapRedBlue="წითლისა ლურჯის შენაცვლება" +LockX="X სერვერის შეზღუდვა გადაღებისას" +IncludeXBorder="X ჩარჩოიანად" +ExcludeAlpha="გაუმჭვირვალე ზედაპირის გამოყენება (Mesa-ს ხარვეზის მოსაგვარებლად)" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-capture/data/locale/tl-PH.ini
Added
@@ -0,0 +1,16 @@ +X11SharedMemoryScreenInput="Pamagat ng Screen (XSHM)" +Screen="Ang Screen" +CaptureCursor="Pamagat ng kursor" +AdvancedSettings="Ang mga nauunang setting" +XServer="X tagapagsilbi" +XCCapture="Pamagat ng Bintana (Xpinaghalo)" +Window="Bintana" +CropTop="I-crop ang Top (mga pixel)" +CropLeft="I-crop ang kaliwa (mga pixel)" +CropRight="I-crop ang kanan (mga pixel)" +CropBottom="I-crop ang pinakailalim (mga pixel)" +SwapRedBlue="Pagpalitin ang pula at ang asul" +LockX="Kandado sa X server kapag kukuha" +IncludeXBorder="Kasama sa X na hangganan" +ExcludeAlpha="Gumamit ng alpha-less texture na format (Mesa workaround)" +
View file
obs-studio-21.0.3.tar.xz/plugins/linux-capture/xcompcap-main.cpp -> obs-studio-21.1.2.tar.xz/plugins/linux-capture/xcompcap-main.cpp
Changed
@@ -400,6 +400,7 @@ GLX_BIND_TO_TEXTURE_RGBA_EXT, GL_TRUE, GLX_DRAWABLE_TYPE, GLX_PIXMAP_BIT, GLX_BIND_TO_TEXTURE_TARGETS_EXT, GLX_TEXTURE_2D_BIT_EXT, + GLX_ALPHA_SIZE, 8, GLX_DOUBLEBUFFER, GL_FALSE, None };
View file
obs-studio-21.1.2.tar.xz/plugins/linux-jack/data/locale/fil-PH.ini
Added
@@ -0,0 +1,4 @@ +StartJACKServer="Simulan ang JACK Server" +Channels="Bilang ng Mga Channel" +JACKInput="JACK Input Client" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-jack/data/locale/ka-GE.ini
Added
@@ -0,0 +1,4 @@ +StartJACKServer="JACK სერვერის გაშვება" +Channels="არხების რაოდენობა" +JACKInput="JACK შეტანის კლიენტი" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-pulseaudio/data/locale/fil-PH.ini
Added
@@ -0,0 +1,4 @@ +PulseInput="Audio Input Capture (PulseAudio)" +PulseOutput="Audio Output Capture (PulseAudio)" +Device="Device" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-pulseaudio/data/locale/ka-GE.ini
Added
@@ -0,0 +1,4 @@ +PulseInput="შემავალი ხმოვანი სიგნალის ჩაწერა (PulseAudio)" +PulseOutput="გამომავალი ხმოვანი სიგნალის ჩაწერა (PulseAudio)" +Device="მოწყობილობა" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-v4l2/data/locale/fil-PH.ini
Added
@@ -0,0 +1,11 @@ +V4L2Input="Video Capture Device (V4L2)" +Device="Device" +Input="Input" +VideoFormat="Format ng Video" +VideoStandard="Standard Video" +DVTiming="DV Timing" +Resolution="Resolution" +FrameRate="Frame rate" +LeaveUnchanged="Mag-iwan ng hindi nabago" +UseBuffering="Gamitin ang Buffering" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-v4l2/data/locale/ka-GE.ini
Added
@@ -0,0 +1,11 @@ +V4L2Input="ვიდეოს ჩამწერი მოწყობილობა (V4L2)" +Device="მოწყობილობა" +Input="შემავალი" +VideoFormat="ვიდეოს ფორმატი" +VideoStandard="ვიდეოს სტანდარტი" +DVTiming="ციფრული ვიდეოს სინქრონიზაცია" +Resolution="გარჩევადობა" +FrameRate="კადრის სიხშირე" +LeaveUnchanged="უცვლელად დატოვება" +UseBuffering="ბუფერიზაციის გამოყენება" +
View file
obs-studio-21.1.2.tar.xz/plugins/linux-v4l2/data/locale/tl-PH.ini
Added
@@ -0,0 +1,11 @@ +V4L2Input="Pagkuha ng Video sa Aparato (V4L2)" +Device="Aparato" +Input="Pampasok" +VideoFormat="Ang Format ng Video" +VideoStandard="Ang Pamantayan ng Video" +DVTiming="Ang Tiyempong DV" +Resolution="Resulusyon" +FrameRate="Pag-Rate ng Frame" +LeaveUnchanged="Iniwa ng hindi nabago" +UseBuffering="Gamitin ang Buffering" +
View file
obs-studio-21.1.2.tar.xz/plugins/mac-avcapture/data/locale/fil-PH.ini
Added
@@ -0,0 +1,14 @@ +AVCapture="Video Capture aparato" +Device="Aparato" +UsePreset="Gamitin ang Preset" +Preset="Ang Preset" +Buffering="Gamitin ang Buffering" +FrameRate="Rate ng frame" +InputFormat="Format ng input" +ColorSpace="Kulay ng puwang" +VideoRange="Saklaw ng video" +VideoRange.Partial="Bahagyang" +VideoRange.Full="Buong" +Auto="I-Auto" +Unknown="Hindi kilalang ($1)" +
View file
obs-studio-21.1.2.tar.xz/plugins/mac-avcapture/data/locale/tl-PH.ini
Added
@@ -0,0 +1,14 @@ +AVCapture="Pagkuha ng Aparato ng Video" +Device="Aparato" +UsePreset="Gamitin ang Preset" +Preset="Ang Preset" +Buffering="Gamitin ang Buffering" +FrameRate="Pag-rate ng Frame" +InputFormat="Pampasok na format" +ColorSpace="Pagitan na Kulay" +VideoRange="Saklaw na Video" +VideoRange.Partial="Ang Partial" +VideoRange.Full="Puno" +Auto="Awto" +Unknown="Hindi kilalang ($1)" +
View file
obs-studio-21.1.2.tar.xz/plugins/mac-capture/data/locale/fil-PH.ini
Added
@@ -0,0 +1,21 @@ +CoreAudio.InputCapture="Awdyo Input KaptyuraPag-capture ng Audio Input" +CoreAudio.OutputCapture="Awdyo Awtput Kaptyura" +CoreAudio.Device="Aparato" +CoreAudio.Device.Default="Pumalya" +DisplayCapture="Ipakita paghuli" +DisplayCapture.Display="Ihayag" +DisplayCapture.ShowCursor="Ipakita ang Cursor" +WindowCapture="Pagkuha ng Window" +WindowCapture.ShowShadow="Ipakita ang anino ng Window" +WindowUtils.Window="Window" +WindowUtils.ShowEmptyNames="Ipakita ang Windows gamit ang mga walang laman na pangalan" +CropMode="I-crop" +CropMode.None="Wala" +CropMode.Manual="Mano-manong" +CropMode.ToWindow="Sa Window" +CropMode.ToWindowAndManual="Upang Window at Manu-manong" +Crop.origin.x="I-crop ang kaliwa" +Crop.origin.y="I-crop ang tuktok" +Crop.size.width="I-crop ang kanan" +Crop.size.height="I-crop ang ibaba" +
View file
obs-studio-21.1.2.tar.xz/plugins/mac-capture/data/locale/tl-PH.ini
Added
@@ -0,0 +1,21 @@ +CoreAudio.InputCapture="Pampasok na Pagkuha ng Audio" +CoreAudio.OutputCapture="Panglabas na pagkuha ng Audio" +CoreAudio.Device="Aparato" +CoreAudio.Device.Default="I-default" +DisplayCapture="Ipakita ang nakuha" +DisplayCapture.Display="Ipakita" +DisplayCapture.ShowCursor="Ipakita ang Kursor" +WindowCapture="Nakuhang bintana" +WindowCapture.ShowShadow="Ipakita ang Anino ng Bintana" +WindowUtils.Window="Bintana" +WindowUtils.ShowEmptyNames="Ipakita ang bintana na may mga walang laman na pangalan" +CropMode="I-crop" +CropMode.None="Wala" +CropMode.Manual="Mano-mano" +CropMode.ToWindow="Sa Bintana" +CropMode.ToWindowAndManual="Sa Bintana at mano-mano" +Crop.origin.x="I-crop sa kaliwa" +Crop.origin.y="I-crop sa taas" +Crop.size.width="I-crop sa kanan" +Crop.size.height="I-crop sa pinakailalim" +
View file
obs-studio-21.0.3.tar.xz/plugins/mac-capture/mac-audio.c -> obs-studio-21.1.2.tar.xz/plugins/mac-capture/mac-audio.c
Changed
@@ -89,6 +89,9 @@ if (!ca->device_uid) ca->device_uid = bstrdup("default"); + ca->default_device = false; + ca->no_devices = false; + /* have to do this because mac output devices don't actually exist */ if (astrcmpi(ca->device_uid, "default") == 0) { if (ca->input) {
View file
obs-studio-21.1.2.tar.xz/plugins/mac-syphon/data/locale/fil-PH.ini
Added
@@ -0,0 +1,13 @@ +Syphon="Pagkuha ng Laro (Siphon)" +Source="Pinagkukunan" +LaunchSyphonInject="Simulan ang SayponIngekt" +Inject="Turukan" +Application="Aplikasyon" +SyphonLicense="Ipahigod ang Lisensya" +Crop="I-crop" +Crop.origin.x="Gupitin ng maigsi sa kaliwa" +Crop.origin.y="Gupitin ng maigsi sa taas" +Crop.size.width="Gupitin ng maigsi sa kanan" +Crop.size.height="Gupitin ng maigsi sa ibaba" +AllowTransparency="Pahintulutan ang aninaw" +
View file
obs-studio-21.1.2.tar.xz/plugins/mac-vth264/data/locale/fil-PH.ini
Added
@@ -0,0 +1,14 @@ +VTH264EncHW="Apol VT H264 Softwer Enkoder" +VTH264EncSW="Apol VT H264 Softwer Enkoder" +VTEncoder="Bidyo ng Kahon ng kasangkapan Enkoder" +Bitrate="Bitreyt" +UseMaxBitrate="Limitasyon ng bitreyt" +MaxBitrate="Pinakamataas na bitreyt" +MaxBitrateWindow="Pinakamataas na bitreyt window (segundo)" +KeyframeIntervalSec="Ang Agwat ng Keypreym (segundo, 0=awto)" +Profile="Propayl" +None="(Wala)" +DefaultEncoder="(Depolt Enkoder)" +UseBFrames="Gamitin ang B-Preyms" + +
View file
obs-studio-21.1.2.tar.xz/plugins/mac-vth264/data/locale/tl-PH.ini
Added
@@ -0,0 +1,14 @@ +VTH264EncHW="Ang Hardware Encoder ng Apple VT H264" +VTH264EncSW="Ang Software Encoder ng Apple VT H264" +VTEncoder="Ang VideoToolbox ng Encoder" +Bitrate="Bitreyt" +UseMaxBitrate="Limitasyon sa Bitreyt" +MaxBitrate="Pinakamalakas na bitrate" +MaxBitrateWindow="Pinakamalakas na bitrate window (segundo)" +KeyframeIntervalSec="Ang Pagitan sa Keyframe (segundo, 0=awto)" +Profile="Bista sa Tagiliran" +None="(Wala)" +DefaultEncoder="(I-default ang Encoder)" +UseBFrames="Gumamit ng mga B-Frame" + +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/BSUtils.cmake -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/BSUtils.cmake
Changed
@@ -49,4 +49,4 @@ macro (set_xcode_property TARGET XCODE_PROPERTY XCODE_VALUE) set_property(TARGET ${TARGET} PROPERTY XCODE_ATTRIBUTE_${XCODE_PROPERTY} ${XCODE_VALUE}) -endmacro (set_xcode_property) \ No newline at end of file +endmacro (set_xcode_property)
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/CMakeLists.txt
Changed
@@ -16,14 +16,24 @@ option(USE_STATIC_CRT "Use static CRT" ON) if(USE_STATIC_CRT) - set(CMAKE_C_FLAGS_MINSIZEREL "${CMAKE_C_FLAGS} /MT") - set(CMAKE_C_FLAGS_RELWITHDEBINFO "${CMAKE_C_FLAGS} /MT") - set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} /MT") - set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS} /MTd") - set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS} /MT") - set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS} /MT") - set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} /MT") - set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS} /MTd") + string(REPLACE "/MD" "/MT" + "CMAKE_C_FLAGS" + "${CMAKE_C_FLAGS}") + + string(REPLACE "/MD" "/MT" + "CMAKE_CXX_FLAGS" + "${CMAKE_CXX_FLAGS}") + + string(TOUPPER "${CMAKE_CONFIGURATION_TYPES}" UPPER_CONFIG_TYPES) + foreach(CONFIG_TYPE ${UPPER_CONFIG_TYPES}) + string(REPLACE "/MD" "/MT" + "CMAKE_C_FLAGS_${CONFIG_TYPE}" + "${CMAKE_C_FLAGS_${CONFIG_TYPE}}") + + string(REPLACE "/MD" "/MT" + "CMAKE_CXX_FLAGS_${CONFIG_TYPE}" + "${CMAKE_CXX_FLAGS_${CONFIG_TYPE}}") + endforeach() endif() endif() @@ -318,7 +328,35 @@ COMMAND rm -rf "$<TARGET_FILE_DIR:cef-isolation>/../Frameworks/CEF Helper.app" COMMAND cp -Rf "$<TARGET_FILE_DIR:cef-bootstrap>/../../../CEF Helper.app" "$<TARGET_FILE_DIR:cef-isolation>/../Frameworks" ) - + +else(APPLE) + math(EXPR BITS "8*${CMAKE_SIZEOF_VOID_P}") + add_custom_command(TARGET obs-browser POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_directory + "${CEF_ROOT_DIR}/Resources" + "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/" + ) + + add_custom_command(TARGET obs-browser POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy + "${CEF_ROOT_DIR}/Release/chrome_elf.dll" + "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/" + COMMAND ${CMAKE_COMMAND} -E copy + "${CEF_ROOT_DIR}/Release/libcef.dll" + "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/" + COMMAND ${CMAKE_COMMAND} -E copy + "${CEF_ROOT_DIR}/Release/libEGL.dll" + "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/" + COMMAND ${CMAKE_COMMAND} -E copy + "${CEF_ROOT_DIR}/Release/libGLESv2.dll" + "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/" + COMMAND ${CMAKE_COMMAND} -E copy + "${CEF_ROOT_DIR}/Release/natives_blob.bin" + "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/" + COMMAND ${CMAKE_COMMAND} -E copy + "${CEF_ROOT_DIR}/Release/snapshot_blob.bin" + "${CMAKE_BINARY_DIR}/rundir/$<CONFIGURATION>/obs-plugins/${BITS}bit/" + ) endif(APPLE) if(APPLE)
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/FindCEF.cmake -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/FindCEF.cmake
Changed
@@ -1,5 +1,7 @@ include(FindPackageHandleStandardArgs) +SET(CEF_ROOT_DIR "" CACHE PATH "Path to a CEF distributed build") + message("Looking for Chromium Embedded Framework in ${CEF_ROOT_DIR}") find_path(CEF_INCLUDE_DIR "include/cef_version.h" @@ -8,10 +10,19 @@ find_library(CEF_LIBRARY NAMES cef libcef cef.lib libcef.o "Chromium Embedded Framework" PATHS ${CEF_ROOT_DIR} ${CEF_ROOT_DIR}/Release) +find_library(CEF_LIBRARY_DEBUG + NAMES cef libcef cef.lib libcef.o "Chromium Embedded Framework" + PATHS ${CEF_ROOT_DIR} ${CEF_ROOT_DIR}/Debug) find_library(CEFWRAPPER_LIBRARY NAMES cef_dll_wrapper libcef_dll_wrapper - PATHS ${CEF_ROOT_DIR}/build/libcef_dll ${CEF_ROOT_DIR}/build/libcef_dll_wrapper) + PATHS ${CEF_ROOT_DIR}/build/libcef_dll/Release + ${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Release + ${CEF_ROOT_DIR}/build/libcef_dll + ${CEF_ROOT_DIR}/build/libcef_dll_wrapper) +find_library(CEFWRAPPER_LIBRARY_DEBUG + NAMES cef_dll_wrapper libcef_dll_wrapper + PATHS ${CEF_ROOT_DIR}/build/libcef_dll/Debug ${CEF_ROOT_DIR}/build/libcef_dll_wrapper/Debug) if (NOT CEF_LIBRARY) message(FATAL_ERROR "Could not find the CEF shared library" ) @@ -22,8 +33,14 @@ endif (NOT CEFWRAPPER_LIBRARY) set(CEF_LIBRARIES - ${CEF_LIBRARY} - ${CEFWRAPPER_LIBRARY}) + optimized ${CEFWRAPPER_LIBRARY} + optimized ${CEF_LIBRARY}) + +if (CEF_LIBRARY_DEBUG AND CEFWRAPPER_LIBRARY_DEBUG) + list(APPEND CEF_LIBRARIES + debug ${CEFWRAPPER_LIBRARY_DEBUG} + debug ${CEF_LIBRARY_DEBUG}) +endif() find_package_handle_standard_args(CEF DEFAULT_MSG CEF_LIBRARY CEFWRAPPER_LIBRARY CEF_INCLUDE_DIR)
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/README.md -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/README.md
Changed
@@ -55,7 +55,22 @@ ### Get the current scene ``` -window.obsstudio.getCurrentScene(function(data) {console.log(data);}); +window.obsstudio.getCurrentScene(function(data) { console.log(data); }); + +data is a Javascript object containing the following properties: +* width +* height +* name +``` + +### Get OBS output status +``` +window.obsstudio.getStatus(function data) { console.log(data); }); + +data is a Javascript object containing the following properties: +* recording (true/false) +* streaming (true/false) +* replaybuffer (true/false) ``` ## Building on OSX @@ -104,7 +119,7 @@ ### Building CEF #### Getting * Download CEF Windows 64bit from [http://opensource.spotify.com/cefbuilds/index.html](http://opensource.spotify.com/cefbuilds/index.html) - * Use CEF branch 2987 + * Use CEF branch 2987, or newer branches up until 3112 * Extract and cd into the folder #### Setting Up Project
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-bootstrap/main.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-bootstrap/main.cpp
Changed
@@ -31,4 +31,4 @@ #endif CefRefPtr<BrowserApp> mainApp(new BrowserApp()); return CefExecuteProcess(mainArgs, mainApp.get(), NULL); -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-handle.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-handle.h
Changed
@@ -60,4 +60,3 @@ std::unique_ptr<BrowserTexture> browserTexture; }; -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.hpp
Changed
@@ -9,6 +9,7 @@ BrowserOBSBridgeMac(id<CEFIsolationService> cefIsolationService); const char* GetCurrentSceneJSONData() override; + const char* GetStatus() override; private: id<CEFIsolationService> cefIsolationService;
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-obs-bridge-mac.mm
Changed
@@ -8,3 +8,8 @@ { return [cefIsolationService getCurrentSceneJSONData]; } + +const char* BrowserOBSBridgeMac::GetStatus() +{ + return [cefIsolationService getStatus]; +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.hpp
Changed
@@ -42,4 +42,4 @@ public: IMPLEMENT_REFCOUNTING(BrowserRenderHandler); -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-render-handler.mm
Changed
@@ -48,4 +48,4 @@ (void)(dirtyRects); browserHandle->RenderToAvailableTexture(width, height, data); -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.h
Changed
@@ -34,4 +34,4 @@ const int height; const BrowserSurfaceHandle surfaceHandle; IOSurfaceRef ioSurfaceRef; -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/browser-texture-mac.mm
Changed
@@ -91,4 +91,4 @@ } return false; -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/cef-isolated-client.h
Changed
@@ -27,4 +27,3 @@ std::map<int, std::shared_ptr<BrowserHandle> > map; } @end -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/cef-isolation/service-connection-delegate.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/cef-isolation/service-connection-delegate.h
Changed
@@ -34,4 +34,4 @@ - (void)createConnectionThread; - (void)shutdown; -@end \ No newline at end of file +@end
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ca-ES.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Fitxer local" +URL="URL" +Width="Amplada" +Height="Alçada" +FPS="FPS" +CSS="CSS personalizat" +ShutdownSourceNotVisible="Apaga la font quan no sigui visible" +RefreshBrowserActive="Actualitza el navegador en activar-se l'escena" +RefreshNoCache="Actualitza la memòria cau de la pàgina actual" +RestartCEF="Reinicia CEF" +BrowserSource="Navegador"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/cs-CZ.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Místní soubor" +URL="Adresa URL" +Width="Šířka" +Height="Výška" +FPS="FPS" +CSS="Vlastní styly" +ShutdownSourceNotVisible="Vypnout zdroj, pokud není vidět" +RefreshBrowserActive="Obnovit stránku při aktivaci scény" +RefreshNoCache="Vyčistit mezipaměť (cache) aktuální stránky" +RestartCEF="Restartovat CEF" +BrowserSource="Prohlížeč"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/da-DK.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Lokal fil" +URL="URL" +Width="Bredde" +Height="Højde" +FPS="FPS" +CSS="Tilpasset CSS" +ShutdownSourceNotVisible="Luk kilden, når den ikke er synlig" +RefreshBrowserActive="Opfrisk browseren, når scenen bliver aktiv" +RefreshNoCache="Opfrisk aktuelle side-cache" +RestartCEF="Genstart CEF" +BrowserSource="Browser"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/de-DE.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Lokale Datei" +URL="URL" +Width="Breite" +Height="Höhe" +FPS="FPS" +CSS="Benutzerdefiniertes CSS" +ShutdownSourceNotVisible="Deaktivieren, wenn Quelle nicht sichtbar ist" +RefreshBrowserActive="Browser aktualisieren, wenn die Szene aktiv wird" +RefreshNoCache="Cache der aktuellen Seite aktualisieren" +RestartCEF="CEF neu starten" +BrowserSource="Browser"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/el-GR.ini
Added
@@ -0,0 +1,8 @@ +LocalFile="Τοπικό αρχείο" +URL="Διεύθυνση URL" +Width="Πλάτος" +Height="Ύψος" +FPS="Καρέ ανά δευτερόλεπτο" +CSS="Προσαρμοσμένο CSS" +RefreshNoCache="Ανανέωση της μνήμης cache της τρέχουσας σελίδας" +BrowserSource="Πρόγραμμα περιήγησης"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/es-ES.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Archivo local" +URL="URL" +Width="Ancho" +Height="Alto" +FPS="FPS" +CSS="CSS personalizado" +ShutdownSourceNotVisible="Apagar fuente cuando no sea visible" +RefreshBrowserActive="Actualizar el navegador cuando la escena se active" +RefreshNoCache="Actualizar la caché de la página actual" +RestartCEF="Reiniciar CEF" +BrowserSource="Navegador"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/eu-ES.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Bertako fitxategia" +URL="URL" +Width="Zabalera" +Height="Altuera" +FPS="FPS" +CSS="CSS pertsonalizatua" +ShutdownSourceNotVisible="Itzali iturburua ikusgai ez dagoenean" +RefreshBrowserActive="Freskatu nabigatzailea eszena aktibatzen denean" +RefreshNoCache="Freskatu uneko orriaren cachea" +RestartCEF="Berrabiarazi CEF" +BrowserSource="Nabigatzailea"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/fi-FI.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Paikallinen tiedosto" +URL="URL" +Width="Leveys" +Height="Korkeus" +FPS="FPS" +CSS="Mukautettu CSS" +ShutdownSourceNotVisible="Sulje lähde kun se ei ole näkyvissä" +RefreshBrowserActive="Lataa selain uudelleen kun skenestä tulee aktiivinen" +RefreshNoCache="Lataa nykyisen sivun välimuisti uudelleen" +RestartCEF="Uudelleenkäynnistä CEF" +BrowserSource="Selain"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/fr-FR.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Fichier local" +URL="URL" +Width="Largeur" +Height="Hauteur" +FPS="FPS" +CSS="CSS personnalisé" +ShutdownSourceNotVisible="Désactiver la source si elle n'est pas visible" +RefreshBrowserActive="Rafraîchir le navigateur lorsque la scène devient active" +RefreshNoCache="Rafraîchir le cache de cette page" +RestartCEF="Relancer le CEF" +BrowserSource="Navigateur"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/hu-HU.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Helyi fájl" +URL="Webcím" +Width="Szélesség" +Height="Magasság" +FPS="FPS" +CSS="Egyéni CSS" +ShutdownSourceNotVisible="Lekapcsolás, ha nem látható" +RefreshBrowserActive="Böngésző frissítése ha aktívvá válik" +RefreshNoCache="Aktuális oldal gyorsítótárának frissítése" +RestartCEF="CEF újraindítása" +BrowserSource="Böngésző"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/it-IT.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="File locale" +URL="URL" +Width="Larghezza" +Height="Altezza" +FPS="FPS (Fotogrammi al secondo)" +CSS="CSS personalizzato" +ShutdownSourceNotVisible="Arresta quando la sorgente non è visibile" +RefreshBrowserActive="Aggiorna il browser quando la scena diventa attiva" +RefreshNoCache="Ricarica cache della la pagina attuale" +RestartCEF="Riavvia il CEF" +BrowserSource="Browser"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ja-JP.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="ローカルファイル" +URL="URL" +Width="幅" +Height="高さ" +FPS="FPS" +CSS="カスタム CSS" +ShutdownSourceNotVisible="見えないときにソースをシャットダウン" +RefreshBrowserActive="シーンがアクティブになったときにブラウザの表示を更新" +RefreshNoCache="現在のページを再読込" +RestartCEF="CEF を再起動" +BrowserSource="ブラウザ"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ko-KR.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="로컬 파일" +URL="URL" +Width="너비" +Height="높이" +FPS="FPS" +CSS="CSS" +ShutdownSourceNotVisible="소스가 보이지 않는 경우 종료" +RefreshBrowserActive="장면이 활성화되면 브라우저를 새로고침" +RefreshNoCache="현재 페이지의 캐시를 새로고침" +RestartCEF="CEF 재시작" +BrowserSource="브라우저"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/nb-NO.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Lokal fil" +URL="URL" +Width="Bredde" +Height="Høyde" +FPS="FPS" +CSS="Egendefinert CSS" +ShutdownSourceNotVisible="Deaktiver kilde når ikke synlig" +RefreshBrowserActive="Oppdater nettleseren når scenen blir aktiv" +RefreshNoCache="Oppdater bufferen for denne siden" +RestartCEF="Restart CEF" +BrowserSource="Nettleser"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/nl-NL.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Lokaal bestand" +URL="URL" +Width="Breedte" +Height="Hoogte" +FPS="FPS" +CSS="Aangepaste CSS" +ShutdownSourceNotVisible="Schakel bron uit wanneer deze niet zichtbaar is" +RefreshBrowserActive="Vernieuw browser wanneer een scène actief wordt" +RefreshNoCache="Cache van de huidige pagina vernieuwen" +RestartCEF="CEF herstarten" +BrowserSource="Browser"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/pl-PL.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Plik lokalny" +URL="Adres URL" +Width="Szerokość" +Height="Wysokość" +FPS="FPS" +CSS="Własny CSS" +ShutdownSourceNotVisible="Zamknij źródło, gdy niewidoczne" +RefreshBrowserActive="Odśwież przeglądarkę, gdy scena zostanie aktywowana" +RefreshNoCache="Odśwież pamięć podręczną bieżącej strony" +RestartCEF="Uruchom ponownie CEF" +BrowserSource="Przeglądarka"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/pt-BR.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Arquivo local" +URL="URL" +Width="Largura" +Height="Altura" +FPS="FPS" +CSS="CSS Personalizado" +ShutdownSourceNotVisible="Desativar fonte quando Invisível" +RefreshBrowserActive="Atualizar o navegador quando a cena se tornar ativa" +RefreshNoCache="Atualizar o cache da página atual" +RestartCEF="Reiniciar o CEF" +BrowserSource="Navegador"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/ru-RU.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Локальный файл" +URL="Адрес URL" +Width="Ширина" +Height="Высота" +FPS="FPS" +CSS="CSS" +ShutdownSourceNotVisible="Отключать, когда не видим" +RefreshBrowserActive="Обновить браузер, когда сцена становится активной" +RefreshNoCache="Обновить кэш текущей страницы" +RestartCEF="Перезапустить CEF" +BrowserSource="Браузер"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/sk-SK.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Lokálny súbor" +URL="URL adresa" +Width="Šírka" +Height="Výška" +FPS="FPS" +CSS="Vlastné CSS" +ShutdownSourceNotVisible="Vypnúť zdroj, keď nie je viditeľný" +RefreshBrowserActive="Obnoviť prehliadač, keď sa scéna stane aktívna" +RefreshNoCache="Vyčistiť medzi-pamäť aktuálnej stránky" +RestartCEF="Reštartovať CEF" +BrowserSource="Prehliadač"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/sv-SE.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Lokal fil" +URL="URL" +Width="Bredd" +Height="Höjd" +FPS="Bildfrekvens" +CSS="Anpassad CSS" +ShutdownSourceNotVisible="Stäng ned källor som inte visas" +RefreshBrowserActive="Uppdatera webbläsaren när scenen blir aktiv" +RefreshNoCache="Uppdatera cachen för aktuell sida" +RestartCEF="Uppdatera CEF" +BrowserSource="Webbläsare"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/tr-TR.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Yerel dosya" +URL="URL" +Width="Genişlik" +Height="Yükseklik" +FPS="FPS" +CSS="Özel CSS" +ShutdownSourceNotVisible="Görünür değilken kaynağı kapat" +RefreshBrowserActive="Sahne etkin olduğunda tarayıcıyı yenile" +RefreshNoCache="Geçerli sayfanın önbelleğini yenile" +RestartCEF="CEF'i Yeniden Başlat" +BrowserSource="Tarayıcı"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/uk-UA.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="Локальний файл" +URL="URL-адреса" +Width="Ширина" +Height="Висота" +FPS="Кадрів в секунду" +CSS="Власний CSS код" +ShutdownSourceNotVisible="Вимикати джерело, коли воно не видиме" +RefreshBrowserActive="Оновити браузер, коли сцена стає активною" +RefreshNoCache="Оновити кеш поточної сторінки" +RestartCEF="Перезапустити CEF" +BrowserSource="Браузер"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/vi-VN.ini
Added
@@ -0,0 +1,10 @@ +LocalFile="Tập tin cục bộ" +URL="URL" +Width="Rộng" +Height="Cao" +FPS="FPS" +CSS="CSS tùy chỉnh" +ShutdownSourceNotVisible="Tắt máy khi không hiển thị" +RefreshNoCache="Làm mới cache trang hiện tại" +RestartCEF="Khởi động lại CEF" +BrowserSource="Trình duyệt"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/zh-CN.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="本地文件" +URL="URL" +Width="宽度" +Height="高度" +FPS="FPS" +CSS="自定义 CSS" +ShutdownSourceNotVisible="不可见时关闭源" +RefreshBrowserActive="场景变为活动状态时,刷新浏览器" +RefreshNoCache="刷新当前页面缓存" +RestartCEF="重启 CEF" +BrowserSource="浏览器"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-browser/data/locale/zh-TW.ini
Added
@@ -0,0 +1,11 @@ +LocalFile="本機檔案" +URL="網址" +Width="寬度" +Height="高度" +FPS="FPS (影格率)" +CSS="自訂CSS" +ShutdownSourceNotVisible="不可見時關閉來源" +RefreshBrowserActive="取得焦點時更新瀏覽器" +RefreshNoCache="更新當前頁面快取" +RestartCEF="重新啟動CEF" +BrowserSource="瀏覽器"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/encoding_errors.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/encoding_errors.hpp
Changed
@@ -55,4 +55,3 @@ #endif // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/encoding_utf.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/encoding_utf.hpp
Changed
@@ -81,4 +81,3 @@ #endif // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/scoped_ptr.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/scoped_ptr.hpp
Changed
@@ -90,4 +90,3 @@ #endif // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/nowide/utf.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/nowide/utf.hpp
Changed
@@ -466,4 +466,3 @@ #endif // vim: tabstop=4 expandtab shiftwidth=4 softtabstop=4 -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser-facade/main.c -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser-facade/main.c
Changed
@@ -76,4 +76,4 @@ } -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-listener-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-listener-mac.mm
Changed
@@ -140,4 +140,4 @@ obs_leave_graphics(); browserSource->GetParent()->UpdateBrowser(); -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.h
Changed
@@ -41,4 +41,4 @@ gs_samplerstate_t *sampler; gs_vertbuffer_t *vertexBuffer; -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/browser-source-mac.mm
Changed
@@ -53,7 +53,7 @@ { obs_enter_graphics(); - drawEffect = obs_get_default_rect_effect(); + drawEffect = obs_get_base_effect(OBS_EFFECT_DEFAULT_RECT); struct gs_sampler_info info = { .filter = GS_FILTER_LINEAR,
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/cef-isolation-service.mm
Changed
@@ -120,6 +120,12 @@ return jsonString; } +- (const char*)getStatus +{ + const char* jsonString = obsStatusToJSON(); + return jsonString; +} + - (void)invalidateClient:(id)client withException:(NSException *)exception { UNUSED_PARAMETER(client);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/client-connection-delegate.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/client-connection-delegate.h
Changed
@@ -29,4 +29,4 @@ - (void)restart; - (void)shutdown; -@end \ No newline at end of file +@end
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.c -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.c
Changed
@@ -67,4 +67,4 @@ { build_sprite(data, fabs(end_x - origin_x), fabs(end_y - origin_y), origin_x, end_x, origin_y, end_y); -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/apple/graphics-helpers.h
Changed
@@ -27,4 +27,4 @@ void build_sprite_rect( struct gs_vb_data *data, float origin_x, float origin_y, - float end_x, float end_y); \ No newline at end of file + float end_x, float end_y);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.cpp
Changed
@@ -45,4 +45,4 @@ frame->ExecuteJavaScript(script, href, 0); } -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-load-handler.hpp
Changed
@@ -41,4 +41,4 @@ private: IMPLEMENT_REFCOUNTING(BrowserLoadHandler); -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.cpp
Changed
@@ -10,6 +10,7 @@ #include "browser-render-handler.hpp" #include "browser-load-handler.hpp" #include "browser-obs-bridge-base.hpp" +#include "browser-listener.hpp" BrowserManager::BrowserManager() : pimpl(new BrowserManager::Impl()) @@ -35,6 +36,26 @@ return pimpl->CreateBrowser(browserSettings, browserListener); } +CefBrowserHost* BrowserManager::GetBrowserHost(int browserIdentifier) +{ + return pimpl->GetBrowserHost(browserIdentifier); +} + +CefBrowser* BrowserManager::GetBrowser(int browserIdentifier) +{ + return pimpl->GetBrowser(browserIdentifier); +} + +void BrowserManager::LoadURL(int browserIdentifier, CefString& url) +{ + return pimpl->LoadURL(browserIdentifier, url); +} + +bool BrowserManager::IsValidBrowserIdentifier(int browserIdentifier) +{ + return pimpl->IsValidBrowserIdentifier(browserIdentifier); +} + void BrowserManager::DestroyBrowser(int browserIdentifier) { pimpl->DestroyBrowser(browserIdentifier); @@ -128,7 +149,7 @@ const BrowserSettings &browserSettings, const std::shared_ptr<BrowserListener> &browserListener) { - int browserIdentifier = 0; + int browserIdentifier = -1; os_event_t *createdEvent; os_event_init(&createdEvent, OS_EVENT_TYPE_AUTO); @@ -167,6 +188,7 @@ if (browser != nullptr) { browserIdentifier = browser->GetIdentifier(); + browserListener->SetBrowserIdentifier(browserIdentifier); browserMap[browserIdentifier] = browser; } os_event_signal(createdEvent); @@ -177,15 +199,85 @@ return browserIdentifier; } +CefBrowserHost* BrowserManager::Impl::GetBrowserHost(int browserIdentifier) +{ + CefBrowserHost* result = NULL; + + os_event_t* complete_event; + os_event_init(&complete_event, OS_EVENT_TYPE_AUTO); + + CefPostTask(TID_UI, BrowserTask::newTask( + [&] + { + result = browserMap[browserIdentifier]->GetHost(); + + os_event_signal(complete_event); + })); + + os_event_wait(complete_event); + os_event_destroy(complete_event); + + return result; +} + +CefBrowser* BrowserManager::Impl::GetBrowser(int browserIdentifier) +{ + CefBrowser* result = NULL; + + os_event_t* complete_event; + os_event_init(&complete_event, OS_EVENT_TYPE_AUTO); + + CefPostTask(TID_UI, BrowserTask::newTask( + [&] + { + result = browserMap[browserIdentifier]; + + os_event_signal(complete_event); + })); + + os_event_wait(complete_event); + os_event_destroy(complete_event); + + return result; +} + +void BrowserManager::Impl::LoadURL(int browserIdentifier, CefString& url) +{ + os_event_t* complete_event; + os_event_init(&complete_event, OS_EVENT_TYPE_AUTO); + + CefPostTask(TID_UI, BrowserTask::newTask( + [&] + { + browserMap[browserIdentifier]->GetMainFrame()->LoadURL(url); + + os_event_signal(complete_event); + })); + + os_event_wait(complete_event); + os_event_destroy(complete_event); +} + +bool BrowserManager::Impl::IsValidBrowserIdentifier(int browserIdentifier) +{ + return browserIdentifier >= 0 && browserMap.count(browserIdentifier) > 0; +} + void BrowserManager::Impl::DestroyBrowser(int browserIdentifier) { if (browserMap.count(browserIdentifier) > 0) { CefRefPtr<CefBrowser> browser = browserMap[browserIdentifier]; + browserMap.erase(browserIdentifier); os_event_t *closeEvent; os_event_init(&closeEvent, OS_EVENT_TYPE_AUTO); CefPostTask(TID_UI, BrowserTask::newTask([&, browser] { + // This stops rendering + // http://magpcss.org/ceforum/viewtopic.php?f=6&t=12079 + // https://bitbucket.org/chromiumembedded/cef/issues/1363/washidden-api-got-broken-on-branch-2062) + browser->GetHost()->WasHidden(true); + browser->GetHost()->CloseBrowser(true); os_event_signal(closeEvent); }));
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-manager-base.hpp
Changed
@@ -33,6 +33,11 @@ const BrowserSettings &browserSettings, const std::shared_ptr<BrowserListener> &browserListener); + CefBrowserHost* GetBrowserHost(int browserIdentifier); + CefBrowser* GetBrowser(int browserIdentifier); + void LoadURL(int browserIdentifier, CefString& url); + + bool IsValidBrowserIdentifier(int browserIdentifier); void DestroyBrowser(int browserIdentifier); void TickBrowser(int browserIdentifier);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.cpp
Changed
@@ -15,3 +15,9 @@ return jsonString; } + +const char* BrowserOBSBridgeBase::GetStatus() +{ + const char* jsonString = obsStatusToJSON(); + return jsonString; +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-obs-bridge-base.hpp
Changed
@@ -8,4 +8,5 @@ BrowserOBSBridgeBase(); const char* GetCurrentSceneJSONData() override; + const char* GetStatus() override; };
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.cpp
Changed
@@ -106,7 +106,7 @@ { viewWidth = width; viewHeight = height; - if (surfaceHandles.size() < 2) { + if (surfaceHandles.size() < 1) { BrowserSurfaceHandle newSurfaceHandle = 0; browserListener->CreateSurface(width, height, &newSurfaceHandle); @@ -116,16 +116,10 @@ } } - int previousSurfaceHandle = currentSurfaceHandle; - - currentSurfaceHandle = (++currentSurfaceHandle % surfaceHandles.size()); - - if (currentSurfaceHandle != previousSurfaceHandle) { - obs_enter_graphics(); - gs_texture_set_image(surfaceHandles[currentSurfaceHandle], - (const uint8_t*)data, width * 4, false); - obs_leave_graphics(); - } + obs_enter_graphics(); + gs_texture_set_image(surfaceHandles[currentSurfaceHandle], + (const uint8_t*)data, width * 4, false); + obs_leave_graphics(); } else if (type == PET_POPUP && popupRect.width > 0 && popupRect.height > 0) @@ -156,4 +150,4 @@ browserListener->OnDraw(surfaceHandles[currentSurfaceHandle], viewWidth, viewHeight); -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-render-handler.hpp
Changed
@@ -64,7 +64,7 @@ const int height; const std::shared_ptr<BrowserListener> browserListener; std::vector<struct gs_texture *> surfaceHandles; - int currentSurfaceHandle; + int currentSurfaceHandle = 0; int viewWidth; int viewHeight; CefRect popupRect; @@ -73,4 +73,4 @@ private: IMPLEMENT_REFCOUNTING(BrowserRenderHandler); -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-source-base.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-source-base.hpp
Changed
@@ -39,4 +39,4 @@ BrowserSource *parent; gs_texture_t *activeTexture; -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/browser-source-listener-base.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/browser-source-listener-base.cpp
Changed
@@ -19,6 +19,7 @@ #include "browser-source-base.hpp" #include "browser-types.h" #include "browser-source-listener-base.hpp" +#include "browser-manager-base.hpp" void BrowserSource::Impl::Listener::OnDraw( BrowserSurfaceHandle surfaceHandle, int width, int height) @@ -26,6 +27,14 @@ UNUSED_PARAMETER(width); UNUSED_PARAMETER(height); + // Check if our browser has not been destroyed yet. + // + // Due to the asynchronous nature of CEF, we can get an OnDraw call after + // BrowserManager::Instance()->DestroyBrowser() call has been made. + // + if (!BrowserManager::Instance()->IsValidBrowserIdentifier(GetBrowserIdentifier())) + return; + if (textureSet.count(surfaceHandle) > 0) { obs_enter_graphics(); if (browserSource) @@ -102,4 +111,4 @@ browserSource->activeTexture = nullptr; obs_leave_graphics(); } -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/obs-browser/main-source.cpp
Changed
@@ -176,6 +176,16 @@ else { bs->ExecuteVisiblityJSCallback(true); } + + // Start animation + BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->WasHidden(false); + +#ifdef APPLE + BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->SetWindowVisibility(true); +#endif + + // Repaint the view + BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->Invalidate(PET_VIEW); } // Called when the source is no longer visible @@ -183,6 +193,13 @@ { BrowserSource *bs = static_cast<BrowserSource *>(data); + // Stop animation + BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->WasHidden(true); + +#ifdef APPLE + BrowserManager::Instance()->GetBrowser(bs->GetBrowserIdentifier())->GetHost()->SetWindowVisibility(false); +#endif + if (bs->GetShutdown()) { BrowserManager::Instance()->DestroyBrowser(bs->GetBrowserIdentifier()); } @@ -196,7 +213,17 @@ BrowserSource *browserSource = new BrowserSource(settings, source); if (browserSource->GetShutdown() && !obs_source_showing(source)) + { BrowserManager::Instance()->DestroyBrowser(browserSource->GetBrowserIdentifier()); + } + else + { + if (!obs_source_showing(source)) + { + // Stop animation + BrowserManager::Instance()->GetBrowser(browserSource->GetBrowserIdentifier())->GetHost()->WasHidden(true); + } + } return browserSource; } @@ -206,6 +233,7 @@ BrowserSource *bs = static_cast<BrowserSource *>(data); delete bs; + bs = nullptr; } @@ -294,4 +322,4 @@ return browser_source_info; -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.h
Changed
@@ -56,4 +56,3 @@ + (id)fromObsKeyEvent: (const obs_key_event *)event; @end -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.mm -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/browser-bridges.mm
Changed
@@ -83,4 +83,4 @@ return [[ObsKeyEventBridge alloc] initWithObsKeyEvent:event]; } -@end \ No newline at end of file +@end
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/cef-isolation.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/cef-isolation.h
Changed
@@ -38,6 +38,7 @@ surfaceHandle:(BrowserSurfaceHandle)surfaceHandle; - (void)invalidateClient:(id)client withException:(NSException *)exception; - (const char*)getCurrentSceneJSONData; +- (const char*)getStatus; @end @protocol CEFIsolatedClient @@ -63,5 +64,3 @@ - (void)executeSceneChangeJSCallback:(const char *)name; - (void)dispatchJSEvent:(const char *)eventName data:(const char*) jsonString; @end - -
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared-apple/cef-logging.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared-apple/cef-logging.h
Changed
@@ -23,4 +23,4 @@ #define CEFLogDebug(...) NSLog(__VA_ARGS__) #endif -#define CEFLogError(...) NSLog(__VA_ARGS__) \ No newline at end of file +#define CEFLogError(...) NSLog(__VA_ARGS__)
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/base64.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/base64.cpp
Changed
@@ -120,4 +120,4 @@ } return ret; -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/base64.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/base64.hpp
Changed
@@ -1,4 +1,4 @@ #include <string> std::string base64_encode(unsigned char const*, unsigned int len); -std::string base64_decode(std::string const& s); \ No newline at end of file +std::string base64_decode(std::string const& s);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-app.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-app.cpp
Changed
@@ -78,6 +78,9 @@ CefRefPtr<CefV8Value> func = CefV8Value::CreateFunction("getCurrentScene", this); obsStudioObj->SetValue("getCurrentScene", func, V8_PROPERTY_ATTRIBUTE_NONE); + + CefRefPtr<CefV8Value> getStatus = CefV8Value::CreateFunction("getStatus", this); + obsStudioObj->SetValue("getStatus", getStatus, V8_PROPERTY_ATTRIBUTE_NONE); } void BrowserApp::ExecuteJSFunction(CefRefPtr<CefBrowser> browser, @@ -164,23 +167,33 @@ return true; } - else if (message->GetName() == "executeCallback") { - CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context(); + else if (message->GetName() == "executeCallback") + { + CefRefPtr<CefV8Context> context = browser->GetMainFrame()->GetV8Context(); + CefRefPtr<CefV8Value> retval; + CefRefPtr<CefV8Exception> exception; - context->Enter(); + context->Enter(); + + CefRefPtr<CefListValue> arguments = message->GetArgumentList(); + int callbackID = arguments->GetInt(0); + CefString jsonString = arguments->GetString(1); - int callbackID = message->GetArgumentList()->GetInt(0); - CefString jsonString = message->GetArgumentList()->GetString(1); + std::string script = fmt::format( + "JSON.parse('{}');", + arguments->GetString(1).ToString(), + jsonString.ToString().c_str()); CefRefPtr<CefV8Value> callback = callbackMap[callbackID]; CefV8ValueList args; - args.push_back(CefV8Value::CreateString(jsonString)); - CefRefPtr<CefV8Value> retval; - CefRefPtr<CefV8Exception> exception; - callback->ExecuteFunction(NULL, args); + context->Eval(script, browser->GetMainFrame()->GetURL(), 0, retval, exception); + + args.push_back(retval); + + callback->ExecuteFunction(NULL, args); - context->Exit(); + context->Exit(); callbackMap.erase(callbackID); @@ -198,8 +211,8 @@ CefRefPtr<CefV8Value>& retval, CefString& exception) { - if (name == "getCurrentScene") { - + if (name == "getCurrentScene") + { if (arguments.size() == 1 && arguments[0]->IsFunction()) { callbackId++; callbackMap[callbackId] = arguments[0]; @@ -215,6 +228,22 @@ return true; } + else if (name == "getStatus") + { + if (arguments.size() == 1 && arguments[0]->IsFunction()) { + callbackId++; + callbackMap[callbackId] = arguments[0]; + } + + CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("getStatus"); + CefRefPtr<CefListValue> args = msg->GetArgumentList(); + args->SetInt(0, callbackId); + + CefRefPtr<CefBrowser> browser = CefV8Context::GetCurrentContext()->GetBrowser(); + browser->SendProcessMessage(PID_BROWSER, msg); + + return true; + } // Function does not exist. return false;
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-client.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-client.cpp
Changed
@@ -105,5 +105,20 @@ return true; } + else if (message_name == "getStatus") { + + int callbackID = message->GetArgumentList()->GetInt(0); + + CefString jsonString = browserOBSBridge->GetStatus(); + + CefRefPtr<CefProcessMessage> msg = CefProcessMessage::Create("executeCallback"); + CefRefPtr<CefListValue> args = msg->GetArgumentList(); + args->SetInt(0, callbackID); + args->SetString(1, jsonString); + + browser->SendProcessMessage(PID_RENDERER, msg); + + return true; + } return false; }
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-listener.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-listener.hpp
Changed
@@ -81,4 +81,18 @@ } virtual void Invalidated() override {} -}; \ No newline at end of file + +private: + int m_browserIdentifier = -1; + +public: + void SetBrowserIdentifier(const int browserIdentifier) + { + m_browserIdentifier = browserIdentifier; + } + + const int GetBrowserIdentifier() + { + return m_browserIdentifier; + } +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-manager.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-manager.hpp
Changed
@@ -19,6 +19,8 @@ #include <memory> #include <jansson.h> +#include <include/cef_base.h> +#include <include/cef_client.h> class BrowserListener; struct BrowserSettings; @@ -42,6 +44,12 @@ const std::shared_ptr<BrowserListener> &browserListener); + CefBrowserHost* GetBrowserHost(int browserIdentifier); + CefBrowser* GetBrowser(int browserIdentifier); + void LoadURL(int browserIdentifier, CefString& url); + + bool IsValidBrowserIdentifier(int browserIdentifier); + void DestroyBrowser(int browserIdentifier); void TickBrowser(int browserIdentifier);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-obs-bridge.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-obs-bridge.hpp
Changed
@@ -4,4 +4,5 @@ { public: virtual const char* GetCurrentSceneJSONData() = 0; -}; \ No newline at end of file + virtual const char* GetStatus() = 0; +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-scheme.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-scheme.cpp
Changed
@@ -116,4 +116,4 @@ { if (inputStream.is_open()) inputStream.close(); -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-scheme.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-scheme.hpp
Changed
@@ -59,4 +59,4 @@ public: IMPLEMENT_REFCOUNTING(BrowserSchemeHandler); -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-settings.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-settings.hpp
Changed
@@ -25,4 +25,4 @@ unsigned int width; unsigned int height; unsigned int fps; -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-task.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-task.cpp
Changed
@@ -25,4 +25,4 @@ void BrowserTask::Execute() { task(); -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-task.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-task.hpp
Changed
@@ -35,4 +35,4 @@ std::function<void()> task; private: IMPLEMENT_REFCOUNTING(BrowserTask); -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-texture-reference.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-texture-reference.hpp
Changed
@@ -36,4 +36,4 @@ private: class Impl; std::unique_ptr<Impl> pimpl; -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-texture.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-texture.hpp
Changed
@@ -36,4 +36,4 @@ private: class Impl; std::unique_ptr<Impl> pimpl; -}; \ No newline at end of file +};
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-types.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-types.h
Changed
@@ -25,4 +25,4 @@ typedef int BrowserSurfaceHandle; #else typedef struct gs_texture *BrowserSurfaceHandle; -#endif \ No newline at end of file +#endif
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/browser-version.h -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/browser-version.h
Changed
@@ -1,3 +1,3 @@ #pragma once -#define OBS_BROWSER_VERSION "1.30.1" \ No newline at end of file +#define OBS_BROWSER_VERSION "1.31.0"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/util.cpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/util.cpp
Changed
@@ -18,4 +18,21 @@ free(obj); return jsonString; -} \ No newline at end of file +} + +/** + Gets the OBS status and generates a JSON encoded string representing the status (recording, streaming etc.). + + @return json encoded string +*/ +const char* obsStatusToJSON() +{ + json_t *obj = json_object(); + json_object_set_new(obj, "recording", json_boolean(obs_frontend_recording_active())); + json_object_set_new(obj, "streaming", json_boolean(obs_frontend_streaming_active())); + json_object_set_new(obj, "replaybuffer", json_boolean(obs_frontend_replay_buffer_active())); + const char *jsonString = json_dumps(obj, 0); + free(obj); + + return jsonString; +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-browser/shared/util.hpp -> obs-studio-21.1.2.tar.xz/plugins/obs-browser/shared/util.hpp
Changed
@@ -3,4 +3,5 @@ #include <jansson.h> #include <obs-frontend-api.h> -extern const char* obsSourceToJSON(obs_source_t *source); \ No newline at end of file +extern const char* obsSourceToJSON(obs_source_t *source); +extern const char* obsStatusToJSON();
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ca-ES.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Parcial" ColorRange.Full="Màxim" RestartMedia="Reinicia els mitjans" +SpeedPercentage="Velocitat (percentatge)" Seekable="Cercable" MediaFileFilter.AllMediaFiles="Tots els arxius multimèdia"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/de-DE.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Teilweise" ColorRange.Full="Voll" RestartMedia="Medium neu starten" +SpeedPercentage="Geschwindigkeit (Prozent)" Seekable="Durchsuchbar" MediaFileFilter.AllMediaFiles="Alle Mediendateien"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/en-US.ini
Changed
@@ -36,7 +36,7 @@ ColorRange.Partial="Partial" ColorRange.Full="Full" RestartMedia="Restart Media" -SpeedPercentage="Speed (perecent)" +SpeedPercentage="Speed (percent)" Seekable="Seekable" MediaFileFilter.AllMediaFiles="All Media Files"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/fi-FI.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Osittainen" ColorRange.Full="Täysi" RestartMedia="Uudelleenkäynnistä media" +SpeedPercentage="Nopeus (prosentti)" Seekable="Haettava" MediaFileFilter.AllMediaFiles="Kaikki mediatiedostot"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/fil-PH.ini
Added
@@ -0,0 +1,51 @@ +FFmpegOutput="Ang Awput ng FFmpeg" +FFmpegAAC="Ang Default FFmpeg AAC Encoder" +FFmpegOpus="Ang FFmpeg Opus Encoder" +Bitrate="Bitrate" +Preset="Ang Preset" +RateControl="Kontrolin ang Antas" +KeyframeIntervalSec="Ang pagitan ng Keyframe (segundos, 0=auto)" +Lossless="Lossless" + +BFrames="B-frames" + +NVENC.Use2Pass="Gamitin ang Two-Pass Encoding" +NVENC.Preset.default="I-Default" +NVENC.Preset.hq="Itaas ang Kalidad" +NVENC.Preset.hp="Itaas ang Pagganap" +NVENC.Preset.bd="Bluray" +NVENC.Preset.ll="Mababa na Latency" +NVENC.Preset.llhq="Mababa na Latency Mataas na kalidad" +NVENC.Preset.llhp="Mababa na Latency Mataas na pagganap" +NVENC.Level="Lebel" + +FFmpegSource="Pagkunan ng Media" +LocalFile="Ang File na lokal" +Looping="I-Loop" +Input="Ang Input" +InputFormat="Ang Format ng Input" +BufferingMB="Nag buffering ang Network (MB)" +HardwareDecode="Gamitin ang hardware decoding kapag magagamit" +ClearOnMediaEnd="Itago ang pinagmulan kung tapos ang playback" +Advanced="I-Advanced" +RestartWhenActivated="Simulan mulang ang playback kapag aktibo ang pinagmulan" +CloseFileWhenInactive="Isarado ang file pag di aktibo" +CloseFileWhenInactive.ToolTip="Isarado ang file kapag ang pinagmulan ay di ipinapakita ang stream or\nrecording. Ito nagpapahintulot na baguhin ang pinagmulang pag hindi aktibo,'\n pero dapat mayroong startup delay kapang ang pinagmulan muliang aktibo." +ColorRange="Antas ng kulay ng YUV" +ColorRange.Auto="I-Auto" +ColorRange.Partial="I-Partial" +ColorRange.Full="Buo" +RestartMedia="Simulan muli ang Media" +Seekable="I-Seekable" + +MediaFileFilter.AllMediaFiles="Lahat ng Media Files" +MediaFileFilter.VideoFiles="Bidyo Files" +MediaFileFilter.AudioFiles="Audio Files" +MediaFileFilter.AllFiles="Lahat ng Files" + +ReplayBuffer="Ang Replay Buffer" +ReplayBuffer.Save="I-Save ang Replay" + +HelperProcessFailed="Hindi pwedeng simulan ang pag proseso ng recording helper. Tingan kung OBS file ay hindi hinarangan o tinanggal ng anumang 3rd part antivirus / security software." +UnableToWritePath="Hindi pwedeng sumulat sa %1. Siguraduhin na gamit ang recording path kung saan ang user account mo ay tanggap ang pagsulat at mayroon sapat na espasyo sa disk." +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/fr-FR.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Partielle" ColorRange.Full="Complète" RestartMedia="Redémarrez Media" +SpeedPercentage="Vitesse (pourcent)" Seekable="Navigable" MediaFileFilter.AllMediaFiles="Tous les fichiers multimédias"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/hu-HU.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Részleges" ColorRange.Full="Teljes" RestartMedia="Media újraindítása" +SpeedPercentage="Sebesség (százalékos)" Seekable="Kereshető" MediaFileFilter.AllMediaFiles="Minden médiafájl"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ja-JP.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="一部" ColorRange.Full="全部" RestartMedia="メディアを再開する" +SpeedPercentage="速度 (パーセント)" Seekable="シーク可能" MediaFileFilter.AllMediaFiles="すべてのメディアファイル"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ko-KR.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="부분" ColorRange.Full="전체" RestartMedia="미디어 다시재생" +SpeedPercentage="속도 (백분율)" Seekable="탐색 가능" MediaFileFilter.AllMediaFiles="모든 미디어 파일"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/nl-NL.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Gedeeltelijk" ColorRange.Full="Volledig" RestartMedia="Media herstarten" +SpeedPercentage="Snelheid (percentage)" Seekable="Zoekbaar" MediaFileFilter.AllMediaFiles="Alle mediabestanden"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/pl-PL.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Częściowy" ColorRange.Full="Pełny" RestartMedia="Zrestartuj plik audio-wideo" +SpeedPercentage="Szybkość (procent)" Seekable="Przeszukiwalny" MediaFileFilter.AllMediaFiles="Wszystkie pliki multimedialne"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/pt-BR.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Parcial" ColorRange.Full="Completo" RestartMedia="Reiniciar Mídia" +SpeedPercentage="Velocidade (percentagem)" Seekable="Procurável" MediaFileFilter.AllMediaFiles="Todos Arquivos de Mídia"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/ru-RU.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Частичный" ColorRange.Full="Полный" RestartMedia="Перезапустить медиа" +SpeedPercentage="Скорость (проценты)" Seekable="Перематываемый" MediaFileFilter.AllMediaFiles="Все медиа-файлы"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/sv-SE.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Delvis" ColorRange.Full="Full" RestartMedia="Starta om media" +SpeedPercentage="Hastighet (procent)" Seekable="Sökbar" MediaFileFilter.AllMediaFiles="Alla mediafiler"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/tl-PH.ini
Added
@@ -0,0 +1,51 @@ +FFmpegOutput="FFmpeg Panglabas" +FFmpegAAC="Ang hindi pagharap ng FFmpeg AAC Encoder" +FFmpegOpus="Ang FFmpeg Opus Encoder" +Bitrate="Bitreyt" +Preset="I-preset" +RateControl="Kontrolin ang Rate" +KeyframeIntervalSec="Ang Pagitan ng Keyframe (segundo, 0=awto)" +Lossless="Walang Pagkawala" + +BFrames="Ang mga B-frame" + +NVENC.Use2Pass="Gamitin ang Dalawang Pass ng Encoding" +NVENC.Preset.default="I-default" +NVENC.Preset.hq="Mataas na Kalidad" +NVENC.Preset.hp="Mataas na Pagganap" +NVENC.Preset.bd="Ang Bluray" +NVENC.Preset.ll="Mababang Pagkawalang kilos" +NVENC.Preset.llhq="Mababang-Pagkawalang kilos na Mataas ang Kalidad" +NVENC.Preset.llhp="Mababang-Pagkawalang kilos na Mataan ang Pagganap" +NVENC.Level="Antas" + +FFmpegSource="Pinagmulan ng Media" +LocalFile="Ang Lokal na File" +Looping="Silo" +Input="Pampasok" +InputFormat="Pampasok na Format" +BufferingMB="Ang Network Buffering (MB)" +HardwareDecode="Gamitin ang hardware sa pag-decode kapag itong magagamit na" +ClearOnMediaEnd="Itago ang pinagmulan kapag ang playback ay natapos" +Advanced="Nauuna" +RestartWhenActivated="I-restart ang playback kapag ang pinagmulan ay naging aktibo na" +CloseFileWhenInactive="Isarado ang file kapag hindi ito aktibo" +CloseFileWhenInactive.ToolTip="Tinatanggal ang file kapag ang pinagmulan ay hindi ipinapakita sa stream o\nnatala. Pinapayagan nito na mabago ang file kapag ang pinagmulan ay hindi aktibo,\nngunit maaaring may ilang pagkaantala sa startup kapag muling pinagana ang pinagmulan." +ColorRange="Ang Saklaw ng Kulay na YUV" +ColorRange.Auto="Awto" +ColorRange.Partial="Bahagya" +ColorRange.Full="Puno" +RestartMedia="I-restart ang Media" +Seekable="Maayos" + +MediaFileFilter.AllMediaFiles="Lahat ng mga Media File" +MediaFileFilter.VideoFiles="Ang mga Video File" +MediaFileFilter.AudioFiles="Ang mga Audio File" +MediaFileFilter.AllFiles="Lahat ng mga File" + +ReplayBuffer="I-replay ang Buffer" +ReplayBuffer.Save="I-save ang Replay" + +HelperProcessFailed="Hindi magawang simulan ang pagtatala ng proseso ng katulong. Suriin na ang mga file ng OBS ay hindi na-block o inalis ng anumang 3rd party antivirus / seguridad ng software." +UnableToWritePath="Hindi makapagsulat sa %1. Tiyaking gumagamit ka ng isang landas sa pagtatala kung saan pinahihintulutan ang iyong user account na magsulat at mayroong sapat na puwang sa disk." +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/tr-TR.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Kısmi" ColorRange.Full="Tam" RestartMedia="Ortamı Yeniden Başlat" +SpeedPercentage="Hız (yüzde)" Seekable="Aranabilir" MediaFileFilter.AllMediaFiles="Tüm Medya Dosyaları"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/uk-UA.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="Частковий" ColorRange.Full="Повний" RestartMedia="Перезапустити медіа" +SpeedPercentage="Швидкість (відсотків)" Seekable="HTTP з перемотуванням" MediaFileFilter.AllMediaFiles="Файли мультимедіа"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-CN.ini
Changed
@@ -30,12 +30,13 @@ Advanced="高级" RestartWhenActivated="当源变为活动状态时重新启动播放" CloseFileWhenInactive="非活跃状态时关闭文件" -CloseFileWhenInactive.ToolTip="当源没有显示在推流或者\n录像时关闭文件. 这使得在源不活跃状态时可以更改文件,\n但是当当源重新激活时, 可能有一些启动延迟." +CloseFileWhenInactive.ToolTip="当源没有显示在推流或者\n录像时关闭文件。这使得在源不活跃状态时可以更改文件,\n但是当当源重新激活时, 可能有一些启动延迟。" ColorRange="YUV 颜色范围" ColorRange.Auto="自动" ColorRange.Partial="局部" ColorRange.Full="全部" RestartMedia="重新启动媒体" +SpeedPercentage="速度(百分比)" Seekable="可搜索" MediaFileFilter.AllMediaFiles="所有媒体文件"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/data/locale/zh-TW.ini
Changed
@@ -36,6 +36,7 @@ ColorRange.Partial="部分" ColorRange.Full="全部" RestartMedia="重新播放媒體" +SpeedPercentage="速度 (百分比)" Seekable="可查找" MediaFileFilter.AllMediaFiles="所有媒體檔案"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c -> obs-studio-21.1.2.tar.xz/plugins/obs-ffmpeg/obs-ffmpeg-audio-encoders.c
Changed
@@ -20,6 +20,7 @@ #include <util/darray.h> #include <obs-module.h> +#include <libavutil/opt.h> #include <libavformat/avformat.h> #include "obs-ffmpeg-formats.h" @@ -229,17 +230,8 @@ enc->context->sample_rate = closest; } - /* if using FFmpeg's AAC encoder, at least set a cutoff value - * (recommended by konverter) */ if (strcmp(enc->codec->name, "aac") == 0) { - int cutoff1 = 4000 + (int)enc->context->bit_rate / 8; - int cutoff2 = 12000 + (int)enc->context->bit_rate / 8; - int cutoff3 = enc->context->sample_rate / 2; - int cutoff; - - cutoff = MIN(cutoff1, cutoff2); - cutoff = MIN(cutoff, cutoff3); - enc->context->cutoff = cutoff; + av_opt_set(enc->context->priv_data, "aac_coder", "fast", 0); } info("bitrate: %" PRId64 ", channels: %d, channel_layout: %x\n",
View file
obs-studio-21.1.2.tar.xz/plugins/obs-filters/data/locale/fil-PH.ini
Added
@@ -0,0 +1,77 @@ +ColorFilter="Pagtama ng Kulay" +ColorGradeFilter="Mag-aplay ng LUT" +MaskFilter="Imahe ng Maskara/Timpla" +AsyncDelayFilter="Naantalang bidyo (Async)" +CropFilter="I-Crop/Pad" +ScrollFilter="Mag-scroll" +ChromaKeyFilter="Susi ng Chroma" +ColorKeyFilter="Susi ng Kulay" +SharpnessFilter="I-Sharpen" +ScaleFilter="I-Scaling/Ratio ng Aspeto" +GPUDelayFilter="I-Render Delay" +UndistortCenter="Undistort center ng imahe kapang nag scaling mula sa ultrawide" +NoiseGate="Ang Noise Gate" +NoiseSuppress="Ang Noise Suppression" +Gain="Ang Gain" +DelayMs="I-Delay (millisegundos)" +Type="I-Type" +MaskBlendType.MaskColor="I-Alpha Mask (Kulang ng Channel)" +MaskBlendType.MaskAlpha="I-Alpha Mask (Alpha ng Channel)" +MaskBlendType.BlendMultiply="I-Blend (Paramihin)" +MaskBlendType.BlendAddition="I-Blend (Dagdagan)" +MaskBlendType.BlendSubtraction="I-Blend (Bawasan)" +Path="Ang Landas" +Color="Kulay" +Opacity="Kalabuan" +Contrast="Kaibahan" +Brightness="Kaliwanagan" +Gamma="Ang Gamma" +BrowsePath.Images="Lahat ng Image Files" +BrowsePath.AllFiles="Lahat ng Files" +KeyColorType="Susi ng Color Type" +KeyColor="Susi ng Kulay" +Similarity="Ang pagkapareho (1-1000)" +Smoothness="Ang pagkakinis (1-1000)" +ColorSpillReduction="Ang pagbawas ng Key Color Spill (1-1000)" +Crop.Left="Kaliwa" +Crop.Right="Kanan" +Crop.Top="Itaas" +Crop.Bottom="Ibaba" +Crop.Width="Ang Lapad" +Crop.Height="Ang Taas" +Crop.Relative="Ang Relative" +ScrollFilter.SpeedX="Ang Horizontal Speed" +ScrollFilter.SpeedY="Ang Vertical Speed" +ScrollFilter.LimitWidth="Limitasyon ng Lapad" +ScrollFilter.LimitHeight="Limitasyon ng Taas" +CustomColor="Pagsadya ng kulay" +Red="Pula" +Green="Berde" +Blue="Asul" +Magenta="Magenta" +NoiseGate.OpenThreshold="Buksan ang Threshold (dB)" +NoiseGate.CloseThreshold="Isarado ang Threshold (dB)" +NoiseGate.AttackTime="Oras ng Pag-atake (milsegudo)" +NoiseGate.HoldTime="Paghawak ng Oras (milsegudo)" +NoiseGate.ReleaseTime="Paglabas ng Oras (milsegudo)" +Gain.GainDB="Makakuha (dB)" +StretchImage="Mag-stretch ng Imahe (itapon ang imahe ng anyong panumbasan)" +Resolution="Resolusyon" +None="Wala" +ScaleFiltering="Iskala ng Pagsasala" +ScaleFiltering.Point="Punto" +ScaleFiltering.Bilinear="Bilinir" +ScaleFiltering.Bicubic="Bikyubik" +ScaleFiltering.Lanczos="Lankzos" +NoiseSuppress.SuppressLevel="Antas ng Pagpigil (dB)" +Saturation="Pagbababad" +HueShift="Kulay ng pagririlyebo" +Amount="Halaga" +Compressor="Kompresor" +Compressor.Ratio="Tumbasan (X:1)" +Compressor.Threshold="Threshold (dB)" +Compressor.AttackTime="Atake (ms)" +Compressor.ReleaseTime="Paglabas (ms)" +Compressor.OutputGain="Makakuha ng Awput (dB)" +Compressor.SidechainSource="Saydcheyn/Pinagmulan ng Daking" +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-filters/data/locale/ru-RU.ini
Changed
@@ -2,12 +2,12 @@ ColorGradeFilter="Применить LUT" MaskFilter="Маска изображения/Смешивание" AsyncDelayFilter="Задержка видео (асинхронность)" -CropFilter="Кадрировать" +CropFilter="Кадрирование" ScrollFilter="Прокрутка" ChromaKeyFilter="Хромакей" ColorKeyFilter="Цветовой ключ" SharpnessFilter="Увеличить резкость" -ScaleFilter="Коэффициент Масштабирования/Аспект" +ScaleFilter="Масштабирование/Соотношение сторон" GPUDelayFilter="Задержка отображения" UndistortCenter="Не искривлять центр изображения при масштабировании Ultrawide разрешения" NoiseGate="Пропускной уровень шума" @@ -58,10 +58,10 @@ StretchImage="Растянуть изображение (игнорировать пропорции изображения)" Resolution="Разрешение" None="Нет" -ScaleFiltering="Масштаб Фильтрации" -ScaleFiltering.Point="Точечная" -ScaleFiltering.Bilinear="Билинейная" -ScaleFiltering.Bicubic="Бикубическая" +ScaleFiltering="Фильтр масштабирования" +ScaleFiltering.Point="Точечный" +ScaleFiltering.Bilinear="Билинейный" +ScaleFiltering.Bicubic="Бикубический" ScaleFiltering.Lanczos="Метод Ланцоша" NoiseSuppress.SuppressLevel="Уровень подавления (дБ)" Saturation="Насыщенность"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-filters/data/locale/tl-PH.ini
Added
@@ -0,0 +1,77 @@ +ColorFilter="Koreksyon ng mga Kulay" +ColorGradeFilter="I-apply ang LUT" +MaskFilter="Imahe ng Mask/Blend" +AsyncDelayFilter="I-delay ang Video (Async)" +CropFilter="I-crop/Pad" +ScrollFilter="I-scroll" +ChromaKeyFilter="Ang Chroma Key" +ColorKeyFilter="Kulay ng mga Key" +SharpnessFilter="Patalasan pa" +ScaleFilter="Scaling/Aspect Ratio" +GPUDelayFilter="Mad-render ng Delay" +UndistortCenter="Ang sentro ay i-undistort kapag ang scaling ay mula sa ultrawide" +NoiseGate="Noise Gate" +NoiseSuppress="Pagtimpiin ang tunog" +Gain="Napunan" +DelayMs="I-delay (millisegundos)" +Type="Tipo" +MaskBlendType.MaskColor="Alpha Mask (Kulay ng Channel)" +MaskBlendType.MaskAlpha="Alpha Mask (Alpha Channel)" +MaskBlendType.BlendMultiply="I-blend (pagpaparami)" +MaskBlendType.BlendAddition="I-blend (pagsamahin)" +MaskBlendType.BlendSubtraction="I-blend (paghiwalayin)" +Path="Daanan" +Color="Kulay" +Opacity="Opacity" +Contrast="Kaibahan" +Brightness="Gaano kaliwanag" +Gamma="Gamma" +BrowsePath.Images="Lahat ng mga Imahen sa File" +BrowsePath.AllFiles="Lahat ng mga Files" +KeyColorType="Tipo ng Kulay sa Key" +KeyColor="Kulay ng Key" +Similarity="Kapareho (1-1000)" +Smoothness="Kakinisan (1-1000)" +ColorSpillReduction="Kulay ng Key sa Spill Reduction (1-1000)" +Crop.Left="Kaliwa" +Crop.Right="Kanan" +Crop.Top="Itaas" +Crop.Bottom="Ibaba" +Crop.Width="Lapad" +Crop.Height="Taas" +Crop.Relative="Kaugnayan" +ScrollFilter.SpeedX="Pahigang Bilis" +ScrollFilter.SpeedY="Patayong Bilis" +ScrollFilter.LimitWidth="Limitasyon ng Lapad" +ScrollFilter.LimitHeight="Limitasyon sa Haba" +CustomColor="Custom na Kulay" +Red="Pula" +Green="Kulay Luntian" +Blue="Bughaw" +Magenta="Magenta" +NoiseGate.OpenThreshold="I-open ang Threshold (dB)" +NoiseGate.CloseThreshold="Isarado ang Threshold (dB)" +NoiseGate.AttackTime="Atakihin ang Oras (millisegundo)" +NoiseGate.HoldTime="Pigilin ang Oras (millisegundo)" +NoiseGate.ReleaseTime="Pakawalan ang Oras (millisegundo)" +Gain.GainDB="Napunan (dB)" +StretchImage="I-stretch ang Imahe (baliwalain ang imahe mula sa aspect ratio)" +Resolution="Resulosyon" +None="Wala" +ScaleFiltering="I-filter ang Scale" +ScaleFiltering.Point="Tuldok" +ScaleFiltering.Bilinear="Bilinear" +ScaleFiltering.Bicubic="Bicubic" +ScaleFiltering.Lanczos="Lanczos" +NoiseSuppress.SuppressLevel="Lebel ng Suppression (dB)" +Saturation="Saturation" +HueShift="Hue Shift" +Amount="Ang Halaga" +Compressor="Ang Comppressor" +Compressor.Ratio="Proporsyon (X:1)" +Compressor.Threshold="Threshold (dB)" +Compressor.AttackTime="Atake (ms)" +Compressor.ReleaseTime="Pakawalan (ms)" +Compressor.OutputGain="Ang nadagdag sa panlabas (dB)" +Compressor.SidechainSource="Pinagmulan ng Sidechain/Ducking" +
View file
obs-studio-21.1.2.tar.xz/plugins/obs-libfdk/data/locale/fil-PH.ini
Added
@@ -0,0 +1,4 @@ +LibFDK="libfdk AAC Enkoder" +Bitrate="Bitreyt" +Afterburner="Paganhin ang AAC Afterburner" +
View file
obs-studio-21.1.2.tar.xz/plugins/obs-libfdk/data/locale/tl-PH.ini
Added
@@ -0,0 +1,4 @@ +LibFDK="libfdk na AAC Encoder" +Bitrate="Ang Bitrate" +Afterburner="Paganahin ang AAC Afterburner" +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/CMakeLists.txt
Changed
@@ -22,6 +22,8 @@ if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/ftl-sdk/CMakeLists.txt") find_package(Libcurl REQUIRED) + add_definitions(-DFTL_STATIC_COMPILE) + include_directories(${LIBCURL_INCLUDE_DIRS}) set(ftl_SOURCES
View file
obs-studio-21.1.2.tar.xz/plugins/obs-outputs/data/locale/fil-PH.ini
Added
@@ -0,0 +1,14 @@ +RTMPStream="Ang RTMP Stream" +RTMPStream.DropThreshold="Ang Drop Treshold (millisegundos)" +FLVOutput="Ang FLV File Awput" +FLVOutput.FilePath="Ang Landas ng File" +Default="I-Default" + +ConnectionTimedOut="Ang koneskyong ay nag time out. Siguraduhin na nakaayos at balido ang streaming service at walang firewall na nakaharang sa koneksyon." +PermissionDenied="Ang koneksyon ay hinarang. Suriin ang firewall / anti-virus settings upang matiyak na tiyak na may buong access sa internet ang OBS." +ConnectionAborted="Ang koneksyon ay naudlot. Ito ay karaniwang nagpapahiwatig na may problema sa iyong internet koneksyon at sa streaming service." +ConnectionReset="Ang koneksyon ay na i-reset ng peer. Ito ay karaniwang nagpapahiwatig na may problema sa iyong internet koneksyon at sa streaming service." +HostNotFound="Hindi makita ang Hostname. Siguraduhin na nilagay mo ay balidong streaming server at ang iyong internet koneksyon / DNS ay gumagana ng mabuti." +NoData="Ang hostname ay nakita, pero walang hinihinging tipo ng datus. Ito ay ay nangyayari kapag naka bound sa IPv6 address at ang iyong streaming service ay IPv4 lamang (tignan Settings / Advanced)." +AddressNotAvailable="Hindi magamit ang address. Ikaw ay gumamit at na i-bind ito sa di balidong IP address ( tingan ang Settings / Advanced)." +
View file
obs-studio-21.1.2.tar.xz/plugins/obs-outputs/data/locale/tl-PH.ini
Added
@@ -0,0 +1,14 @@ +RTMPStream="RTMP Stream" +RTMPStream.DropThreshold="Treshold ng pagbaba (millisegundos)" +FLVOutput="Ang kinalabasan ng FLV File" +FLVOutput.FilePath="Ang Daanan ng File" +Default="Ang Default" + +ConnectionTimedOut="Ang koneksyon ay nawala. Siguraduhing ikaw ay nag-configured ng isang balidong serbisyo ng streaming at walang firewall na nagpipigil sa koneksyon." +PermissionDenied="Ang koneksyon ay na-block. I-check ang iyong firewall / anti-virus na settings para masiguradong ang OBS ay pwedeng makapasok sa internet." +ConnectionAborted="Ang koneksyon ay nabigo. Ito ay kadalasang indikasyon na ang internet nakoneksyon ay may problema sa'yo o kay sa serbisyo ng streaming." +ConnectionReset="Ang koneksyon ay ni-reset ng peer. Ito ay kadalasang indikasyon na ang internet nakoneksyon ay may problema sa'yo o kay sa serbisyo ng streaming." +HostNotFound="Ang hostname ay hindi matagpuan. Siguraduhing ang nilagay mo ay isang balidong stereaming server at ang iyong internet koneksyon / DNS ay gumagana ng sakto." +NoData="Ang hostname ay natagpuan, ngunit walang data sa ni-request na tipo. Ito ay pwedeng mangyari kung wala kang bound para sa IPv6 na address at ang iyong streaming service ay meron lang IPv4 na mga address (tingnan ang Setting / Advanced)." +AddressNotAvailable="Ang address ay hindi pwede. Pwede kang sumubok na i-bind sa isang hindi balidong IP address (tingnan ang Setting / Advanced)." +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/CMakeLists.txt
Changed
@@ -3,64 +3,64 @@ project(libftl) option(DISABLE_AUTO_INGEST "Set to TRUE to disable auto ingest feature which removes curl and jansson dependancies" FALSE) +MESSAGE( STATUS "FTL DISABLE_AUTO_INGEST: " ${DISABLE_AUTO_INGEST}) find_package(Threads REQUIRED) set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) -FIND_PACKAGE(CURL) - if (DISABLE_AUTO_INGEST) -add_definitions(-DDISABLE_AUTO_INGEST) + add_definitions(-DDISABLE_AUTO_INGEST) endif() +# We will only try to include curl if we have auto ingest enabled. +if (NOT DISABLE_AUTO_INGEST) + FIND_PACKAGE(CURL) +endif() if (NOT CURL_FOUND AND NOT DISABLE_AUTO_INGEST) -SET(CURL_DISABLE_NTLM ON CACHE BOOL "Disabling NTLM") -SET(CURL_DISABLE_TELNET ON CACHE BOOL "Disabling Telnet") -SET(CURL_DISABLE_LDAP ON CACHE BOOL "Disabling Ldap") -SET(CURL_DISABLE_LDAPS ON CACHE BOOL "Disabling secure ldap") -SET(BUILD_CURL_EXE OFF CACHE BOOL "Building libcurl") -SET(HTTP_ONLY ON CACHE BOOL "using compiling HTTP") -SET(BUILD_TESTING OFF CACHE BOOL "Not building Tests") -add_subdirectory(libcurl) -SET(CURL_INCLUDE_DIRS libcurl/include ${CMAKE_CURRENT_BINARY_DIR}/libcurl/include/curl) -SET(CURL_LIBRARIES libcurl) + SET(CURL_DISABLE_NTLM ON CACHE BOOL "Disabling NTLM") + SET(CURL_DISABLE_TELNET ON CACHE BOOL "Disabling Telnet") + SET(CURL_DISABLE_LDAP ON CACHE BOOL "Disabling Ldap") + SET(CURL_DISABLE_LDAPS ON CACHE BOOL "Disabling secure ldap") + SET(BUILD_CURL_EXE OFF CACHE BOOL "Building libcurl") + SET(HTTP_ONLY ON CACHE BOOL "using compiling HTTP") + SET(BUILD_TESTING OFF CACHE BOOL "Not building Tests") + add_subdirectory(libcurl) + SET(CURL_INCLUDE_DIRS libcurl/include ${CMAKE_CURRENT_BINARY_DIR}/libcurl/include/curl) + SET(CURL_LIBRARIES libcurl) + include_directories(${CURL_INCLUDE_DIRS}) endif() -MESSAGE( STATUS "Curl include dir: " ${CURL_INCLUDE_DIRS}) -include_directories(${CURL_INCLUDE_DIRS}) +# We will only try to include lib jansson if auto ingest is enabled. +SET(JANSSON_LIBRARIES "") if (NOT DISABLE_AUTO_INGEST) -SET(JANSSON_BUILD_DOCS OFF CACHE BOOL "Jansson docs off") -SET(JANSSON_WITHOUT_TESTS ON CACHE BOOL "Jansson build without tests") -SET(JANSSON_EXAMPLES OFF CACHE BOOL "Jansson disable examples") -SET(USE_WINDOWS_CRYPTOAPI off) -add_subdirectory(libjansson) -include_directories(${CMAKE_CURRENT_BINARY_DIR}/libjansson/include) -SET(JANSSON_LIBRARIES jansson) + SET(JANSSON_BUILD_DOCS OFF CACHE BOOL "Jansson docs off") + SET(JANSSON_WITHOUT_TESTS ON CACHE BOOL "Jansson build without tests") + SET(JANSSON_EXAMPLES OFF CACHE BOOL "Jansson disable examples") + SET(USE_WINDOWS_CRYPTOAPI off) + add_subdirectory(libjansson) + include_directories(${CMAKE_CURRENT_BINARY_DIR}/libjansson/include) + SET(JANSSON_LIBRARIES jansson) endif() -include_directories(libftl libftl/gettimeofday) - - if (WIN32) - set(FTL_PLATFORM_FILES ftl_app/win32/xgetopt.c - ftl_app/win32/xgetopt.h - ftl_app/win32/ctrlc_handler.c) + set(FTL_PLATFORM_FILES ftl_app/win32/xgetopt.c + ftl_app/win32/xgetopt.h + ftl_app/win32/ctrlc_handler.c) #set(FTL_PLATFORM_LIBS kernel32 user32 gdi32 advapi32 ) #set(FTL_PLATFORM_LIBS ws2_32 ) set(FTLSDK_PLATFORM_FILES libftl/win32/socket.c - libftl/win32/socket.h - libftl/win32/threads.c - libftl/win32/threads.h) - + libftl/win32/socket.h + libftl/win32/threads.c + libftl/win32/threads.h) include_directories(libftl/win32) else() set(FTL_PLATFORM_FILES ftl_app/posix/ctrlc_handler.c) set(FTLSDK_PLATFORM_FILES libftl/posix/socket.c libftl/posix/socket.h - libftl/posix/threads.c - libftl/posix/threads.h) + libftl/posix/threads.c + libftl/posix/threads.h) include_directories(libftl/posix) endif() @@ -74,15 +74,18 @@ libftl/handshake.c libftl/ingest.c libftl/ftl_helpers.c - libftl/media.c + libftl/media.c libftl/logging.c libftl/ftl.h libftl/ftl_private.h ${FTLSDK_PLATFORM_FILES}) +include_directories(libftl libftl/gettimeofday) + set_target_properties(ftl PROPERTIES VERSION "0.5.0") set_target_properties(ftl PROPERTIES SOVERSION 0) target_link_libraries(ftl ${CURL_LIBRARIES} ${JANSSON_LIBRARIES}) + if(WIN32) target_link_libraries(ftl ws2_32) endif() @@ -93,24 +96,22 @@ ftl_app/file_parser.c ftl_app/file_parser.h ftl_app/gettimeofday.c - ftl_app/gettimeofday.h - ftl_app/bitstream.c - ftl_app/bitstream.h - ftl_app/cavlc.c - ftl_app/cavlc.h - ftl_app/decode.c - ftl_app/decode.h - ftl_app/nalu.c - ftl_app/nalu.h - ftl_app/utils.c - ftl_app/utils.h - ftl_app/dec_obj.h + ftl_app/gettimeofday.h + ftl_app/bitstream.c + ftl_app/bitstream.h + ftl_app/cavlc.c + ftl_app/cavlc.h + ftl_app/decode.c + ftl_app/decode.h + ftl_app/nalu.c + ftl_app/nalu.h + ftl_app/utils.c + ftl_app/utils.h + ftl_app/dec_obj.h ${FTL_PLATFORM_FILES}) target_link_libraries(ftl_app ftl ${CURL_LIBRARIES} ${JANSSON_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT} ${FTL_PLATFORM_LIBS}) target_include_directories(ftl_app PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}/ftl_app) # Install rules -install(TARGETS ftl DESTINATION lib) - - +install(TARGETS ftl DESTINATION lib) \ No newline at end of file
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl-sdk.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl-sdk.c
Changed
@@ -12,15 +12,20 @@ char error_message[1000]; FTL_API const int FTL_VERSION_MAJOR = 0; FTL_API const int FTL_VERSION_MINOR = 9; -FTL_API const int FTL_VERSION_MAINTENANCE = 9; +FTL_API const int FTL_VERSION_MAINTENANCE = 13; // Initializes all sublibraries used by FTL FTL_API ftl_status_t ftl_init() { + struct timeval now; + init_sockets(); os_init(); #ifndef DISABLE_AUTO_INGEST curl_global_init(CURL_GLOBAL_ALL); #endif + + gettimeofday(&now, NULL); + srand((unsigned int)now.tv_sec); return FTL_SUCCESS; } @@ -42,7 +47,7 @@ os_init_mutex(&ftl->disconnect_mutex); os_init_mutex(&ftl->status_q.mutex); - if (os_semaphore_create(&ftl->status_q.sem, "/StatusQueue", O_CREAT, 0) < 0) { + if (os_semaphore_create(&ftl->status_q.sem, "/StatusQueue", O_CREAT, 0, FALSE) < 0) { ret_status = FTL_MALLOC_FAILURE; break; } @@ -82,7 +87,7 @@ ftl->video.height = 720; ftl->video.media_component.peak_kbps = params->peak_kbps; - ftl->ingest_hostname = _strdup(params->ingest_hostname); + ftl->param_ingest_hostname = _strdup(params->ingest_hostname); ftl->status_q.count = 0; ftl->status_q.head = NULL; @@ -118,14 +123,16 @@ return status; } while (0); - internal_ingest_disconnect(ftl); + if (os_trylock_mutex(&ftl->disconnect_mutex)) { + internal_ingest_disconnect(ftl); + os_unlock_mutex(&ftl->disconnect_mutex); + } return status; } FTL_API ftl_status_t ftl_ingest_get_status(ftl_handle_t *ftl_handle, ftl_status_msg_t *msg, int ms_timeout) { ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv; - ftl_status_t status = FTL_SUCCESS; if (ftl == NULL) { return FTL_NOT_INITIALIZED; @@ -141,12 +148,12 @@ ftl->video.media_component.peak_kbps = params->peak_kbps; if (params->ingest_hostname != NULL) { - if (ftl->ingest_hostname != NULL) { - free(ftl->ingest_hostname); - ftl->ingest_hostname = NULL; + if (ftl->param_ingest_hostname != NULL) { + free(ftl->param_ingest_hostname); + ftl->param_ingest_hostname = NULL; } - ftl->ingest_hostname = _strdup(params->ingest_hostname); + ftl->param_ingest_hostname = _strdup(params->ingest_hostname); } /* not going to update fps for the moment*/ @@ -201,7 +208,7 @@ FTL_API int ftl_ingest_send_media(ftl_handle_t *ftl_handle, ftl_media_type_t media_type, uint8_t *data, int32_t len, int end_of_frame) { ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv; - int64_t dts_increment_usec, dts_usec; + int64_t dts_increment_usec, dts_usec = 0; if (media_type == FTL_AUDIO_DATA) { dts_usec = ftl->audio.dts_usec; @@ -316,6 +323,10 @@ free(ftl->ingest_hostname); } + if (ftl->param_ingest_hostname != NULL) { + free(ftl->param_ingest_hostname); + } + free(ftl); } @@ -324,14 +335,13 @@ FTL_API ftl_status_t ftl_ingest_destroy(ftl_handle_t *ftl_handle){ ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv; - ftl_status_t status = FTL_SUCCESS; ftl_handle->priv = NULL; return internal_ftl_ingest_destroy(ftl); } -char* ftl_status_code_to_string(ftl_status_t status) { +FTL_API char* ftl_status_code_to_string(ftl_status_t status) { switch (status) { case FTL_SUCCESS: @@ -406,8 +416,7 @@ } BOOL _get_chan_id_and_key(const char *stream_key, uint32_t *chan_id, char *key) { - size_t len; - int i; + size_t len, i = 0; len = strlen(stream_key); for (i = 0; i != len; i++) {
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl.h
Changed
@@ -28,10 +28,14 @@ #include <stdint.h> #ifdef _WIN32 -# ifdef __FTL_INTERNAL -# define FTL_API __declspec(dllexport) +# ifdef FTL_STATIC_COMPILE +# define FTL_API # else -# define FTL_API __declspec(dllimport) +# ifdef __FTL_INTERNAL +# define FTL_API __declspec(dllexport) +# else +# define FTL_API __declspec(dllimport) +# endif # endif #else # define FTL_API @@ -174,7 +178,8 @@ FTL_STATUS_VIDEO, FTL_STATUS_AUDIO, FTL_STATUS_FRAMES_DROPPED, - FTL_STATUS_NETWORK + FTL_STATUS_NETWORK, + FTL_BITRATE_CHANGED } ftl_status_types_t; typedef enum { @@ -233,16 +238,47 @@ int max_frame_size; }ftl_video_frame_stats_msg_t; +typedef enum +{ + FTL_BITRATE_DECREASED, + FTL_BITRATE_INCREASED, + FTL_BITRATE_STABILIZED +}ftl_bitrate_changed_type_t; + +typedef enum +{ + FTL_BANDWIDTH_CONSTRAINED, + FTL_UPGRADE_EXCESSIVE, + FTL_BANDWIDTH_AVAILABLE, + FTL_STABILIZE_ON_LOWER_BITRATE, + FTL_STABILIZE_ON_ORIGINAL_BITRATE, +} ftl_bitrate_changed_reason_t; + +typedef struct +{ + ftl_bitrate_changed_type_t bitrate_changed_type; + ftl_bitrate_changed_reason_t bitrate_changed_reason; + uint64_t current_encoding_bitrate; + uint64_t previous_encoding_bitrate; + float nacks_to_frames_ratio; + float avg_rtt; + uint64_t avg_frames_dropped; + float queue_fullness; +} ftl_bitrate_changed_msg_t; + /*status messages*/ -typedef struct { - ftl_status_types_t type; - union { - ftl_status_log_msg_t log; - ftl_status_event_msg_t event; - ftl_packet_stats_msg_t pkt_stats; - ftl_packet_stats_instant_msg_t ipkt_stats; - ftl_video_frame_stats_msg_t video_stats; - } msg; +typedef struct +{ + ftl_status_types_t type; + union + { + ftl_status_log_msg_t log; + ftl_status_event_msg_t event; + ftl_packet_stats_msg_t pkt_stats; + ftl_packet_stats_instant_msg_t ipkt_stats; + ftl_video_frame_stats_msg_t video_stats; + ftl_bitrate_changed_msg_t bitrate_changed_msg; + } msg; }ftl_status_msg_t; /*! @@ -285,8 +321,16 @@ FTL_API char* ftl_status_code_to_string(ftl_status_t status); -FTL_API ftl_status_t find_closest_available_ingest(const char* ingestIps[], int ingestsCount, char* bestIngestIpComputed); +FTL_API ftl_status_t ftl_get_video_stats(ftl_handle_t* handle, uint64_t* frames_sent, uint64_t* nacks_received, uint64_t* rtt_recorded, uint64_t* frames_dropped, float* queue_fullness); + +FTL_API ftl_status_t ftl_adaptive_bitrate_thread( + ftl_handle_t* ftl_handle, + void* context, + int(*change_bitrate_callback)(void*, uint64_t), + uint64_t initial_encoding_bitrate, + uint64_t min_encoding_bitrate, + uint64_t max_encoding_bitrate +); -FTL_API ftl_status_t ftl_get_video_stats(ftl_handle_t* handle, uint64_t* frames_sent, uint64_t* nacks_received); #endif // __FTL_H
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_helpers.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_helpers.c
Changed
@@ -261,34 +261,39 @@ return retval; } -ftl_status_t _set_ingest_ip(ftl_stream_configuration_private_t *ftl) { - char *ingest_ip = NULL; +ftl_status_t _set_ingest_hostname(ftl_stream_configuration_private_t *ftl) { + ftl_status_t ret_status = FTL_SUCCESS; do { - if (!isdigit(ftl->ingest_hostname[0])) { #ifndef DISABLE_AUTO_INGEST - if (strcmp(ftl->ingest_hostname, "auto") == 0) { - ingest_ip = ingest_find_best(ftl); + if (strcmp(ftl->param_ingest_hostname, "auto") == 0) { + ftl->ingest_hostname = ingest_find_best(ftl); } else #endif - { - ingest_ip = ingest_get_ip(ftl, ftl->ingest_hostname); - } + ftl->ingest_hostname = _strdup(ftl->param_ingest_hostname); + } while (0); - if (ingest_ip == NULL) { - ret_status = FTL_DNS_FAILURE; - break; - } - } - else { - ingest_ip = _strdup(ftl->ingest_hostname); + return ret_status; +} + +int _get_remote_ip(struct sockaddr *addr, size_t addrlen, char *remote_ip, size_t ip_len) { + if (addr->sa_family == AF_INET) + { + struct sockaddr_in *ipv4_addr = (struct sockaddr_in *)addr; + + if (inet_ntop(AF_INET, &ipv4_addr->sin_addr.s_addr, remote_ip, ip_len) == NULL) { + return -1; } + } + else if (addr->sa_family == AF_INET6) { + struct sockaddr_in6 *ipv6_addr = (struct sockaddr_in6 *)addr; - strcpy_s(ftl->ingest_ip, sizeof(ftl->ingest_ip), ingest_ip); - free(ingest_ip); - } while (0); + if (inet_ntop(AF_INET6, &ipv6_addr->sin6_addr.s6_addr, remote_ip, ip_len) == NULL) { + return -1; + } + } - return ret_status; + return 0; }
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_private.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ftl_private.h
Changed
@@ -58,6 +58,8 @@ #define SOCKET_RECV_TIMEOUT_MS 5000 #define SOCKET_SEND_TIMEOUT_MS 1000 #define KEEPALIVE_FREQUENCY_MS 5000 +#define KEEPALIVE_SEND_WARN_TOLERANCE_MS 1000 +#define STATUS_THREAD_SLEEP_TIME_MS 500 #define MAX_PACKET_BUFFER 1500 //Max length of buffer #define MAX_MTU 1392 #define FTL_UDP_MEDIA_PORT 8082 //legacy port @@ -71,16 +73,58 @@ #define VIDEO_RTP_TS_CLOCK_HZ 90000 #define AUDIO_SAMPLE_RATE 48000 #define AUDIO_PACKET_DURATION_MS 20 -#define IPV4_ADDR_ASCII_LEN INET_ADDRSTRLEN +#define IPVX_ADDR_ASCII_LEN INET6_ADDRSTRLEN #define INGEST_LIST_URI "https://mixer.com/api/v1/ingests/best" #define INGEST_LOAD_PORT 8079 #define INGEST_PING_PORT 8079 #define PEAK_BITRATE_KBPS 10000 /*if not supplied this is the peak from the perspective of the send buffer*/ #define PING_TX_INTERVAL_MS 25 -#define SENDER_REPORT_TX_INTERVAL_MS 5000 +#define SENDER_REPORT_TX_INTERVAL_MS 1000 #define PING_PTYPE 250 #define SENDER_REPORT_PTYPE 200 + // Adaptive bitrate constants + + // If the ratio of nacks received to packets sent is greater than the following value, we request a bitrate downgrade. +#define MIN_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FOR_BITRATE_DOWNGRADE 0.1 + + // Duration at which we capture stream stats , i.e frames sent and nacks received +#define STREAM_STATS_CAPTURE_MS 1000 + + // Duration over which we evaluate whether we need to downgrade/upgrade bitrate. Note that we + // look at stats over the last c_ulBwCheckDurationMs milliseconds, every c_ulStreamStatsCaptureMs milliseconds. +#define BW_CHECK_DURATION_MS 5000 + + // Interval to wait for bw test after we update bitrate. +#define BITRATE_CHANGED_COOLDOWN_INTERVAL_MS 10000 + + // Percentage to reduce the bitrate to if bandwidth seems too constrained +#define BW_INSUFFICIENT_BITRATE_DOWNGRADE_PERCENTAGE 50 + + // Percentange to reduce the bitrate to if bw upgrade was too excessive +#define REVERT_TO_STABLE_BITRATE_DOWNGRADE_PERCENTAGE 80 + + // Percentage to increase bitrate by if conditions look ideal +#define BW_IDEAL_BITRATE_UPGRADE_BPS 256000; + + // If ratio of nacks received to packets sent is below the following value bitrate update can be requested +#define MAX_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FORBITRATE_UPGRADE 0.01 + + // If bandwidth is constrained within MaxBitrateUpgradeExcessiveSeconds after bitrate update, revert to last stable bitrate. +#define MAX_MS_TO_DEEM_UPGRADE_EXCESSIVE 60000 + +#define MAX_AVG_RTT_TO_DEEM_BW_STABLE 100 + +#define MAX_QUEUE_FULLNESS_TO_DEEM_BW_STABLE 0.1 + +#define MIN_QUEUE_FULLNESS_TO_DEEM_BW_CONSTRAINED 0.3 + +#define MIN_AVG_RTT_TO_DEEM_BW_CONSTRAINED 300 + // If bitrate upgrade was excessive we freeze bitrate upgrade for the next c_bitrateUpgradeFreezeTimeMs milliseconds. +#define BITRATE_UPGRADE_FREEZE_TIME_MS 600000 // 10*60*1000 + +#define MAX_STAT_SIZE 5 + #ifndef _WIN32 #define strncpy_s(dst, dstsz, src, cnt) strncpy(dst, src, cnt) #define sprintf_s(buf, bufsz, fmt, ...) sprintf(buf, fmt, __VA_ARGS__) @@ -110,6 +154,7 @@ FTL_TX_THRD = 0x0080, FTL_DISABLE_TX_PING_PKTS = 0x0100, FTL_SPEED_TEST = 0x0200, + FTL_BITRATE_THRD = 0x0400, FTL_DISCONNECT_IN_PROGRESS = 0x1000, FTL_DISABLE_TX_SENDER_REPORT = 0x2000 }ftl_state_t; @@ -151,6 +196,7 @@ int first;/*first packet in frame*/ int last; /*last packet in frame*/ OS_MUTEX mutex; + BOOL isPartOfIframe; }nack_slot_t; typedef struct _ping_pkt_t { @@ -159,13 +205,13 @@ }ping_pkt_t; typedef struct _senderReport_pkt_t { - uint32_t header; - uint32_t ssrc; - uint32_t ntpTimestampHigh; - uint32_t ntpTimestampLow; - uint32_t rtpTimestamp; - uint32_t senderPacketCount; - uint32_t senderOctetCount; + uint32_t header; + uint32_t ssrc; + uint32_t ntpTimestampHigh; + uint32_t ntpTimestampLow; + uint32_t rtpTimestamp; + uint32_t senderPacketCount; + uint32_t senderOctetCount; }senderReport_pkt_t; typedef struct { @@ -244,7 +290,8 @@ } ftl_video_component_t; typedef struct { - struct sockaddr_in server_addr; + size_t ingest_addrlen; + struct sockaddr *ingest_addr; SOCKET media_socket; OS_MUTEX mutex; int assigned_port; @@ -260,19 +307,32 @@ } ftl_media_config_t; typedef struct _ftl_ingest_t { - char name[30]; - char ip[IPV4_ADDR_ASCII_LEN]; + char *name; + char *ip; + char *hostname; int rtt; struct _ftl_ingest_t *next; }ftl_ingest_t; +typedef struct +{ + ftl_handle_t* handle; + BOOL(*change_bitrate_callback)(void*, uint64_t); + void* context; + uint64_t initial_encoding_bitrate; + uint64_t max_encoding_bitrate; + uint64_t min_encoding_bitrate; +} ftl_adaptive_bitrate_thread_params_t; + typedef struct { SOCKET ingest_socket; ftl_state_t state; OS_MUTEX state_mutex; OS_MUTEX disconnect_mutex; + char *param_ingest_hostname; char *ingest_hostname; - char ingest_ip[IPV4_ADDR_ASCII_LEN];//ipv4 only + char *ingest_ip; + short socket_family; uint32_t channel_id; char *key; char hmacBuffer[512]; @@ -281,8 +341,10 @@ char vendor_version[20]; OS_THREAD_HANDLE connection_thread; OS_THREAD_HANDLE keepalive_thread; + OS_THREAD_HANDLE bitrate_monitor_thread; OS_SEMAPHORE connection_thread_shutdown; OS_SEMAPHORE keepalive_thread_shutdown; + OS_SEMAPHORE bitrate_thread_shutdown; ftl_media_config_t media; ftl_audio_component_t audio; ftl_video_component_t video; @@ -361,13 +423,13 @@ BOOL is_legacy_ingest(ftl_stream_configuration_private_t *ftl); ftl_status_t dequeue_status_msg(ftl_stream_configuration_private_t *ftl, ftl_status_msg_t *stats_msg, int ms_timeout); ftl_status_t enqueue_status_msg(ftl_stream_configuration_private_t *ftl, ftl_status_msg_t *stats_msg); -ftl_status_t _set_ingest_ip(ftl_stream_configuration_private_t *ftl); +ftl_status_t _set_ingest_hostname(ftl_stream_configuration_private_t *ftl); +int _get_remote_ip(struct sockaddr *addr, size_t addrlen, char *remote_ip, size_t ip_len); ftl_status_t _init_control_connection(ftl_stream_configuration_private_t *ftl); ftl_status_t _ingest_connect(ftl_stream_configuration_private_t *stream_config); ftl_status_t _ingest_disconnect(ftl_stream_configuration_private_t *stream_config); char * ingest_find_best(ftl_stream_configuration_private_t *ftl); -char * ingest_get_ip(ftl_stream_configuration_private_t *ftl, char *host); void ingest_release(ftl_stream_configuration_private_t *ftl); ftl_status_t media_init(ftl_stream_configuration_private_t *ftl);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.c
Changed
@@ -26,6 +26,7 @@ * SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. */ +#include <stddef.h> #include "gettimeofday.h" #define NSEC_IN_SEC 1000000000 @@ -98,10 +99,10 @@ differenceUs = timeval_subtract_to_us(end, start); // Get the number of seconds - result->tv_sec = USEC_TO_SEC(differenceUs); + result->tv_sec = (long)USEC_TO_SEC(differenceUs); // Put the remainder NS into the second value. - result->tv_usec = differenceUs - SEC_TO_USEC(result->tv_sec); + result->tv_usec = (long)(differenceUs - SEC_TO_USEC(result->tv_sec)); /* Return 1 if result is negative. */ return differenceUs < 0; @@ -161,13 +162,20 @@ uint64_t timeval_to_ntp(struct timeval * tv) { uint64_t ntpts; - ntpts = (((uint64_t)tv->tv_sec + 2208988800u) << 32) + ((uint32_t)tv->tv_usec * 4294.967296); + ntpts = (uint64_t)((((uint64_t)tv->tv_sec + 2208988800u) << 32) + ((uint32_t)tv->tv_usec * 4294.967296)); return (ntpts); } void us_to_timeval(struct timeval *outputTimeVal, const int64_t inputTimeUs) { - outputTimeVal->tv_sec = USEC_TO_SEC(inputTimeUs); - outputTimeVal->tv_usec = inputTimeUs - SEC_TO_USEC(outputTimeVal->tv_sec); -} \ No newline at end of file + outputTimeVal->tv_sec = (long)USEC_TO_SEC(inputTimeUs); + outputTimeVal->tv_usec = (long)(inputTimeUs - SEC_TO_USEC(outputTimeVal->tv_sec)); +} + +int64_t get_ms_elapsed_since(struct timeval *tv) +{ + struct timeval now; + gettimeofday(&now, NULL); + return timeval_subtract_to_ms(&now, tv); +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/gettimeofday/gettimeofday.h
Changed
@@ -20,5 +20,6 @@ uint64_t timeval_to_us(struct timeval *tv); uint64_t timeval_to_ntp(struct timeval *tv); void us_to_timeval(struct timeval *outputTimeVal, const int64_t inputTimeUs); +int64_t get_ms_elapsed_since(struct timeval *tv); #endif // __GETTIMEOFDAY_H
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/handshake.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/handshake.c
Changed
@@ -35,8 +35,6 @@ ftl_status_t _log_response(ftl_stream_configuration_private_t *ftl, int response_code); ftl_status_t _init_control_connection(ftl_stream_configuration_private_t *ftl) { - ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN; - int err = 0; SOCKET sock = 0; struct addrinfo hints; @@ -47,6 +45,8 @@ hints.ai_socktype = SOCK_STREAM; hints.ai_protocol = 0; + char ingest_ip[IPVX_ADDR_ASCII_LEN]; + struct addrinfo* resolved_names = 0; struct addrinfo* p = 0; @@ -59,13 +59,13 @@ snprintf(ingest_port_str, 10, "%d", ingest_port); - if ((retval = _set_ingest_ip(ftl)) != FTL_SUCCESS) { + if ((retval = _set_ingest_hostname(ftl)) != FTL_SUCCESS) { return retval; } - - err = getaddrinfo(ftl->ingest_ip, ingest_port_str, &hints, &resolved_names); + + err = getaddrinfo(ftl->ingest_hostname, ingest_port_str, &hints, &resolved_names); if (err != 0) { - FTL_LOG(ftl, FTL_LOG_ERROR, "getaddrinfo failed to look up ingest address %s.", ftl->ingest_ip); + FTL_LOG(ftl, FTL_LOG_ERROR, "getaddrinfo failed to look up ingest address %s.", ftl->ingest_hostname); FTL_LOG(ftl, FTL_LOG_ERROR, "gai error was: %s", gai_strerror(err)); return FTL_DNS_FAILURE; } @@ -79,6 +79,22 @@ continue; } + if (p->ai_family == AF_INET) { + struct sockaddr_in *ipv4_addr = (struct sockaddr_in *)p->ai_addr; + inet_ntop(p->ai_family, &ipv4_addr->sin_addr, ingest_ip, sizeof(ingest_ip)); + } + else if (p->ai_family == AF_INET6) { + struct sockaddr_in6 *ipv6_addr = (struct sockaddr_in6 *)p->ai_addr; + inet_ntop(p->ai_family, &ipv6_addr->sin6_addr, ingest_ip, sizeof(ingest_ip)); + } + else { + continue; + } + + FTL_LOG(ftl, FTL_LOG_DEBUG, "Got IP: %s\n", ingest_ip); + ftl->ingest_ip = _strdup(ingest_ip); + ftl->socket_family = p->ai_family; + /* Go for broke */ if (connect(sock, p->ai_addr, (int)p->ai_addrlen) == -1) { FTL_LOG(ftl, FTL_LOG_DEBUG, "failed to connect on candidate, error: %s", get_socket_error()); @@ -120,8 +136,6 @@ ftl_status_t _ingest_connect(ftl_stream_configuration_private_t *ftl) { ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN; - - int err = 0; char response[MAX_INGEST_COMMAND_LEN]; if (ftl_get_state(ftl, FTL_CONNECTED)) { @@ -213,12 +227,12 @@ ftl_set_state(ftl, FTL_CONNECTED); - if (os_semaphore_create(&ftl->connection_thread_shutdown, "/ConnectionThreadShutdown", O_CREAT, 0) < 0) { + if (os_semaphore_create(&ftl->connection_thread_shutdown, "/ConnectionThreadShutdown", O_CREAT, 0, FALSE) < 0) { response_code = FTL_MALLOC_FAILURE; break; } - if (os_semaphore_create(&ftl->keepalive_thread_shutdown, "/KeepAliveThreadShutdown", O_CREAT, 0) < 0) { + if (os_semaphore_create(&ftl->keepalive_thread_shutdown, "/KeepAliveThreadShutdown", O_CREAT, 0, FALSE) < 0) { response_code = FTL_MALLOC_FAILURE; break; } @@ -249,46 +263,54 @@ ftl_status_t _ingest_disconnect(ftl_stream_configuration_private_t *ftl) { - ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN; - char response[MAX_INGEST_COMMAND_LEN]; + ftl_response_code_t response_code = FTL_INGEST_RESP_UNKNOWN; + char response[MAX_INGEST_COMMAND_LEN]; - if (ftl_get_state(ftl, FTL_KEEPALIVE_THRD)) { - ftl_clear_state(ftl, FTL_KEEPALIVE_THRD); - os_semaphore_post(&ftl->keepalive_thread_shutdown); - os_wait_thread(ftl->keepalive_thread); - os_destroy_thread(ftl->keepalive_thread); - os_semaphore_delete(&ftl->keepalive_thread_shutdown); - } + if (ftl_get_state(ftl, FTL_KEEPALIVE_THRD)) { + ftl_clear_state(ftl, FTL_KEEPALIVE_THRD); + os_semaphore_post(&ftl->keepalive_thread_shutdown); + os_wait_thread(ftl->keepalive_thread); + os_destroy_thread(ftl->keepalive_thread); + os_semaphore_delete(&ftl->keepalive_thread_shutdown); + } - if (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) { - ftl_clear_state(ftl, FTL_CXN_STATUS_THRD); - os_semaphore_post(&ftl->connection_thread_shutdown); - os_wait_thread(ftl->connection_thread); - os_destroy_thread(ftl->connection_thread); - os_semaphore_delete(&ftl->connection_thread_shutdown); - } + if (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) { + ftl_clear_state(ftl, FTL_CXN_STATUS_THRD); + os_semaphore_post(&ftl->connection_thread_shutdown); + os_wait_thread(ftl->connection_thread); + os_destroy_thread(ftl->connection_thread); + os_semaphore_delete(&ftl->connection_thread_shutdown); + } - if (ftl_get_state(ftl, FTL_CONNECTED)) { + if (ftl_get_state(ftl, FTL_BITRATE_THRD)) + { + ftl_clear_state(ftl, FTL_BITRATE_THRD); + os_semaphore_post(&ftl->bitrate_thread_shutdown); + os_wait_thread(ftl->bitrate_monitor_thread); + os_destroy_thread(ftl->bitrate_monitor_thread); + os_semaphore_delete(&ftl->bitrate_thread_shutdown); + } - ftl_clear_state(ftl, FTL_CONNECTED); + if (ftl_get_state(ftl, FTL_CONNECTED)) { - FTL_LOG(ftl, FTL_LOG_INFO, "light-saber disconnect\n"); - if ((response_code = _ftl_send_command(ftl, FALSE, response, sizeof(response), "DISCONNECT", ftl->channel_id)) != FTL_INGEST_RESP_OK) { - FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest Disconnect failed with %d (%s)\n", response_code, response); + ftl_clear_state(ftl, FTL_CONNECTED); + + FTL_LOG(ftl, FTL_LOG_INFO, "light-saber disconnect\n"); + if ((response_code = _ftl_send_command(ftl, FALSE, response, sizeof(response), "DISCONNECT", ftl->channel_id)) != FTL_INGEST_RESP_OK) { + FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest Disconnect failed with %d (%s)\n", response_code, response); + } } - } - if (ftl->ingest_socket > 0) { - close_socket(ftl->ingest_socket); - ftl->ingest_socket = 0; - } - - return FTL_SUCCESS; + if (ftl->ingest_socket > 0) { + close_socket(ftl->ingest_socket); + ftl->ingest_socket = 0; + } + + return FTL_SUCCESS; } static ftl_response_code_t _ftl_get_response(ftl_stream_configuration_private_t *ftl, char *response_buf, int response_len){ int len; - int resp_code = FTL_INGEST_RESP_OK; memset(response_buf, 0, response_len); len = recv_all(ftl->ingest_socket, response_buf, response_len, '\n'); @@ -322,7 +344,6 @@ static ftl_response_code_t _ftl_send_command(ftl_stream_configuration_private_t *ftl, BOOL need_response, char *response_buf, int response_len, const char *cmd_fmt, ...) { int resp_code = FTL_INGEST_RESP_OK; va_list valist; - double sum = 0.0; char *buf = NULL; int len; int buflen = MAX_INGEST_COMMAND_LEN * sizeof(char); @@ -376,6 +397,10 @@ { ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)data; ftl_response_code_t response_code; + struct timeval last_send_time, now; + int64_t ms_since_send = 0; + + gettimeofday(&last_send_time, NULL); while (ftl_get_state(ftl, FTL_KEEPALIVE_THRD)) { os_semaphore_pend(&ftl->keepalive_thread_shutdown, KEEPALIVE_FREQUENCY_MS); @@ -385,6 +410,16 @@ break; } + // Check how long it has been since we sent a ping last. + gettimeofday(&now, NULL); + ms_since_send = timeval_subtract_to_ms(&now, &last_send_time); + if (ms_since_send > KEEPALIVE_FREQUENCY_MS + KEEPALIVE_SEND_WARN_TOLERANCE_MS) + { + FTL_LOG(ftl, FTL_LOG_INFO, "Warning, ping time tolerance warning. Time since last ping %d ms", ms_since_send); + } + gettimeofday(&last_send_time, NULL); + + // Send the ping to ingest now. if ((response_code = _ftl_send_command(ftl, FALSE, NULL, 0, "PING %d", ftl->channel_id)) != FTL_INGEST_RESP_OK) { FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest ping failed with %d\n", response_code); } @@ -397,73 +432,108 @@ OS_THREAD_ROUTINE connection_status_thread(void *data) { - ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)data; - char buf[1024]; - ftl_status_msg_t status; - struct timeval last_ping, now; - int ms_since_ping = 0; - int keepalive_is_late = KEEPALIVE_FREQUENCY_MS + KEEPALIVE_FREQUENCY_MS; // Add a 5s buffer to the wait time - - gettimeofday(&last_ping, NULL); + ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)data; + char buf[1024]; + ftl_status_msg_t status; + struct timeval last_ping, now; + int64_t ms_since_ping = 0; + + // We ping every 5 seconds, but don't timeout the connection until 30 seconds has passed + // without hearing anything back from the ingest. This time is high, but some some poor networks + // this can happen. + int keepalive_is_late = 6 * KEEPALIVE_FREQUENCY_MS; + + gettimeofday(&last_ping, NULL); + + // Loop while the connection status thread should be alive. + while (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) { + + // Wait on the shutdown event for at most STATUS_THREAD_SLEEP_TIME_MS + os_semaphore_pend(&ftl->connection_thread_shutdown, STATUS_THREAD_SLEEP_TIME_MS); + if (!ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) + { + break; + } - while (ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) { + ftl_status_t error_code = FTL_SUCCESS; - os_semaphore_pend(&ftl->connection_thread_shutdown, 500); - if (!ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) - { - break; - } + // Check if there is any data for us to consume. + unsigned long bytesAvailable = 0; + int ret = get_socket_bytes_available(ftl->ingest_socket, &bytesAvailable); + if (ret < 0) + { + FTL_LOG(ftl, FTL_LOG_ERROR, "Failed to call get_socket_bytes_available, %s", get_socket_error()); + error_code = FTL_UNKNOWN_ERROR_CODE; + } + else + { + // If we have data waiting, consume it now. + if (bytesAvailable > 0) + { + int resp_code = _ftl_get_response(ftl, buf, sizeof(buf)); + + // If we got a ping response, mark the time and loop again. + if (resp_code == FTL_INGEST_RESP_PING) { + gettimeofday(&last_ping, NULL); + continue; + } + + // If it's anything else, it's an error. + error_code = _log_response(ftl, resp_code); + } + } - int ret = recv(ftl->ingest_socket, buf, sizeof(buf), MSG_PEEK); + // If we don't have an error, check if the ping has timed out. + if (error_code == FTL_SUCCESS) + { + // Get the current time and figure out the time since the last ping was recieved. + gettimeofday(&now, NULL); + ms_since_ping = timeval_subtract_to_ms(&now, &last_ping); + if (ms_since_ping < keepalive_is_late) { + continue; + } + + // Otherwise, we havn't gotten the ping in too long. + FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest ping timeout, we haven't gotten a ping in %d ms.", ms_since_ping); + error_code = FTL_NO_PING_RESPONSE; + } - gettimeofday(&now, NULL); - ms_since_ping = timeval_subtract_to_ms(&now, &last_ping); + // At this point something is wrong, and we are going to shutdown the connection. Do one more check that we + // should still be running. + if (!ftl_get_state(ftl, FTL_CXN_STATUS_THRD)) + { + break; + } + FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest connection has dropped: error code %d\n", error_code); - if (ret == 0 && ftl_get_state(ftl, FTL_CXN_STATUS_THRD) || ret > 0 || ms_since_ping > keepalive_is_late) { - ftl_status_t error_code = FTL_SUCCESS; + // Clear the state that this thread is running. If we don't do this we will dead lock + // in the internal_ingest_disconnect. + ftl_clear_state(ftl, FTL_CXN_STATUS_THRD); - if (ret > 0) { - int resp_code; - if ((resp_code = _ftl_get_response(ftl, buf, sizeof(buf))) == FTL_INGEST_RESP_PING) { - gettimeofday(&last_ping, NULL); - continue; + // Shutdown the ingest connection. + if (os_trylock_mutex(&ftl->disconnect_mutex)) { + internal_ingest_disconnect(ftl); + os_unlock_mutex(&ftl->disconnect_mutex); } - if (resp_code > 0) { - error_code = _log_response(ftl, resp_code); + // Fire an event indicating we shutdown. + status.type = FTL_STATUS_EVENT; + if (error_code == FTL_NO_MEDIA_TIMEOUT) { + status.msg.event.reason = FTL_STATUS_EVENT_REASON_NO_MEDIA; } - } - - if (ms_since_ping > keepalive_is_late) { - error_code = FTL_NO_PING_RESPONSE; - } - - FTL_LOG(ftl, FTL_LOG_ERROR, "ingest connection has dropped: %s\n", get_socket_error()); - - ftl_clear_state(ftl, FTL_CXN_STATUS_THRD); + else { + status.msg.event.reason = FTL_STATUS_EVENT_REASON_UNKNOWN; + } + status.msg.event.type = FTL_STATUS_EVENT_TYPE_DISCONNECTED; + status.msg.event.error_code = error_code; + enqueue_status_msg(ftl, &status); - if (os_trylock_mutex(&ftl->disconnect_mutex)) { - internal_ingest_disconnect(ftl); - os_unlock_mutex(&ftl->disconnect_mutex); - } - - status.type = FTL_STATUS_EVENT; - if (error_code == FTL_NO_MEDIA_TIMEOUT) { - status.msg.event.reason = FTL_STATUS_EVENT_REASON_NO_MEDIA; - } - else { - status.msg.event.reason = FTL_STATUS_EVENT_REASON_UNKNOWN; - } - status.msg.event.type = FTL_STATUS_EVENT_TYPE_DISCONNECTED; - status.msg.event.error_code = error_code; - enqueue_status_msg(ftl, &status); - break; + // Exit the loop. + break; } - } - - FTL_LOG(ftl, FTL_LOG_INFO, "Exited connection_status_thread\n"); - return 0; + FTL_LOG(ftl, FTL_LOG_INFO, "Exited connection_status_thread"); + return 0; } ftl_status_t _log_response(ftl_stream_configuration_private_t *ftl, int response_code){ @@ -522,6 +592,9 @@ case FTL_INGEST_RESP_INTERNAL_SOCKET_TIMEOUT: FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest socket timeout."); return FTL_INGEST_SOCKET_TIMEOUT; + case FTL_INGEST_RESP_UNKNOWN: + FTL_LOG(ftl, FTL_LOG_ERROR, "Ingest unknown response."); + return FTL_INTERNAL_ERROR; } // TODO revert back
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/hmac/hmac.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/hmac/hmac.c
Changed
@@ -17,7 +17,7 @@ const char * key; if (keyLen > SHA512_BLOCK_SIZE) { Sha512Initialise(&ctx); - Sha512Update(&ctx, (void*)rawKey, keyLen); + Sha512Update(&ctx, (void*)rawKey, (uint32_t)keyLen); Sha512Finalise(&ctx, &computedHash); key = (const char *)computedHash.bytes; @@ -32,7 +32,7 @@ memset(oKeyPad, O_KEY_PAD, SHA512_BLOCK_SIZE); memset(iKeyPad, I_KEY_PAD, SHA512_BLOCK_SIZE); - int i; + size_t i = 0; for(i = 0; i < keyLen; i++) { oKeyPad[i] ^= key[i]; iKeyPad[i] ^= key[i]; @@ -60,4 +60,4 @@ memset(computedHash.bytes, 0, sizeof(computedHash.bytes)); return SHA512_HEX_STRING_HASH_SIZE; -} \ No newline at end of file +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ingest.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/ingest.c
Changed
@@ -14,47 +14,63 @@ ftl_stream_configuration_private_t *ftl; }_tmp_ingest_thread_data_t; -static int _ping_server(const char *ip, int port) { +static int _ping_server(const char *hostname, int port) { SOCKET sock; - struct sockaddr_in server_addr; - unsigned char buf[sizeof(struct in_addr)]; - uint8_t dummy[4]; + struct addrinfo hints; + char dummy[4]; struct timeval start, stop, delta; int retval = -1; + struct addrinfo* resolved_names = 0; + struct addrinfo* p = 0; + int err = 0; + int off = 0; + + memset(&hints, 0, sizeof(hints)); + hints.ai_family = PF_UNSPEC; + hints.ai_socktype = SOCK_DGRAM; + hints.ai_protocol = 0; - do { - if ((sock = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) - { - break; - } + int ingest_port = INGEST_PORT; + char port_str[10]; - if (inet_pton(AF_INET, ip, buf) == 0) { - break; - } + snprintf(port_str, 10, "%d", port); + + err = getaddrinfo(hostname, port_str, &hints, &resolved_names); + if (err != 0) { + return FTL_DNS_FAILURE; + } + + do { + for (p = resolved_names; p != NULL; p = p->ai_next) { + sock = socket(p->ai_family, p->ai_socktype, p->ai_protocol); + if (sock == -1) { + continue; + } - //Prepare the sockaddr_in structure - server_addr.sin_family = AF_INET; - memcpy((char *)&server_addr.sin_addr.s_addr, (char *)buf, sizeof(buf)); - server_addr.sin_port = htons(port); + setsockopt(sock, IPPROTO_IPV6, IPV6_V6ONLY, (char *)&off, sizeof(off)); + set_socket_recv_timeout(sock, 500); - set_socket_recv_timeout(sock, 500); + gettimeofday(&start, NULL); - gettimeofday(&start, NULL); + if (sendto(sock, dummy, sizeof(dummy), 0, p->ai_addr, (int)p->ai_addrlen) == SOCKET_ERROR) { + printf("Sendto error: %s\n", get_socket_error()); + break; + } - if (sendto(sock, dummy, sizeof(dummy), 0, (struct sockaddr*) &server_addr, sizeof(struct sockaddr_in)) == SOCKET_ERROR) { - break; - } + if (recv(sock, dummy, sizeof(dummy), 0) < 0) { + break; + } - if (recv(sock, dummy, sizeof(dummy), 0) < 0) { - break; + gettimeofday(&stop, NULL); + timeval_subtract(&delta, &stop, &start); + retval = (int)timeval_to_ms(&delta); } - - gettimeofday(&stop, NULL); - timeval_subtract(&delta, &stop, &start); - retval = (int)timeval_to_ms(&delta); } while (0); + /* Free the resolved name struct */ + freeaddrinfo(resolved_names); + shutdown_socket(sock, SD_BOTH); close_socket(sock); @@ -69,92 +85,13 @@ ingest->rtt = 1000; - if ((ping = _ping_server(ingest->ip, INGEST_PING_PORT)) >= 0) { + if ((ping = _ping_server(ingest->hostname, INGEST_PING_PORT)) >= 0) { ingest->rtt = ping; } return 0; } -ftl_status_t find_closest_available_ingest(const char* ingestIps[], int ingestsCount, char* bestIngestIpComputed) -{ - ftl_ingest_t* ingestElements; - int i; - - if ((ingestElements = malloc(sizeof(ftl_ingest_t) * ingestsCount)) == NULL) { - return FTL_MALLOC_FAILURE; - } - - for (i =0; i < ingestsCount; i++) { - strcpy_s(ingestElements[i].ip, sizeof(ingestElements[i].ip), ingestIps[i]); - ingestElements[i].rtt = 1000; - ingestElements[i].next = NULL; - } - - OS_THREAD_HANDLE *handles; - _tmp_ingest_thread_data_t *data; - - ftl_ingest_t *elmt, *best = NULL; - struct timeval start, stop, delta; - - if ((handles = (OS_THREAD_HANDLE *)malloc(sizeof(OS_THREAD_HANDLE) * ingestsCount)) == NULL) { - free(ingestElements); - return FTL_MALLOC_FAILURE; - } - - if ((data = (_tmp_ingest_thread_data_t *)malloc(sizeof(_tmp_ingest_thread_data_t) * ingestsCount)) == NULL) { - free(ingestElements); - free(handles); - return FTL_MALLOC_FAILURE; - } - - gettimeofday(&start, NULL); - - /*query all the ingests about cpu and rtt*/ - for (i = 0; i < ingestsCount; i++) { - handles[i] = 0; - data[i].ingest = &ingestElements[i]; - data[i].ftl = NULL; - os_create_thread(&handles[i], NULL, _ingest_get_rtt, &data[i]); - sleep_ms(5); //space out the pings - } - - /*wait for all the ingests to complete*/ - for (i = 0; i < ingestsCount; i++) { - - if (handles[i] != 0) { - os_wait_thread(handles[i]); - } - - if (best == NULL || ingestElements[i].rtt < best->rtt) { - best = &ingestElements[i]; - } - } - - gettimeofday(&stop, NULL); - timeval_subtract(&delta, &stop, &start); - int ms = (int)timeval_to_ms(&delta); - - for (i = 0; i < ingestsCount; i++) { - if (handles[i] != 0) { - os_destroy_thread(handles[i]); - } - } - - free(handles); - free(data); - - if (best) { - strcpy_s(bestIngestIpComputed, sizeof(best->ip), best->ip); - free(ingestElements); - return FTL_SUCCESS; - } - - free(ingestElements); - - return FTL_UNKNOWN_ERROR_CODE; -} - #ifndef DISABLE_AUTO_INGEST OS_THREAD_ROUTINE _ingest_get_hosts(ftl_stream_configuration_private_t *ftl); @@ -218,9 +155,11 @@ size_t size = json_array_size(ingests); for (i = 0; i < size; i++) { - const char *name, *ip; + char *name = NULL, *ip=NULL, *hostname=NULL; ingest_item = json_array_get(ingests, i); - json_unpack(ingest_item, "{s:s, s:s}", "name", &name, "ip", &ip); + if (json_unpack(ingest_item, "{s:s, s:s, s:s}", "name", &name, "ip", &ip, "hostname", &hostname) < 0) { + continue; + } ftl_ingest_t *ingest_elmt; @@ -228,8 +167,10 @@ goto cleanup; } - strcpy_s(ingest_elmt->name, sizeof(ingest_elmt->name), name); - strcpy_s(ingest_elmt->ip, sizeof(ingest_elmt->ip), ip); + ingest_elmt->name = _strdup(name); + ingest_elmt->ip = _strdup(ip); + ingest_elmt->hostname = _strdup(hostname); + ingest_elmt->rtt = 500; ingest_elmt->next = NULL; @@ -273,6 +214,9 @@ while (ftl->ingest_list != NULL) { elmt = ftl->ingest_list; ftl->ingest_list = elmt->next; + free(elmt->hostname); + free(elmt->ip); + free(elmt->name); free(elmt); } @@ -335,8 +279,8 @@ free(data); if (best){ - FTL_LOG(ftl, FTL_LOG_INFO, "%s at ip %s had the shortest RTT of %d ms\n", best->name, best->ip, best->rtt); - return _strdup(best->ip); + FTL_LOG(ftl, FTL_LOG_INFO, "%s at ip %s had the shortest RTT of %d ms\n", best->hostname, best->ip, best->rtt); + return _strdup(best->hostname); } return NULL; @@ -355,81 +299,3 @@ elmt = tmp; } } - -char * ingest_get_ip(ftl_stream_configuration_private_t *ftl, char *host) { - int total_ips; - char **ips; - char *ip; - int i; - - if ((total_ips = _ingest_lookup_ip(host, &ips)) <= 0) { - return NULL; - } - - ip = _strdup(ips[0]); - - for (i = 0; i < total_ips; i++) { - free(ips[i]); - } - - free(ips); - - return ip; -} - -static int _ingest_lookup_ip(const char *ingest_location, char ***ingest_ip) { - struct addrinfo hints; - struct addrinfo *result, *rp; - struct sockaddr_in *sockaddr_ipv4; - int ips_found = 0; - int s; - BOOL success = FALSE; - ingest_ip[0] = '\0'; - char ip[INET_ADDRSTRLEN]; - - if (*ingest_ip != NULL) { - return -1; - } - - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_INET; - hints.ai_socktype = 0; - hints.ai_flags = 0; - hints.ai_protocol = 0; - hints.ai_canonname = NULL; - hints.ai_addr = NULL; - hints.ai_next = NULL; - - if ((s = getaddrinfo(ingest_location, NULL, &hints, &result)) != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); - return 0; - } - - int total_ips = 0; - for (rp = result; rp != NULL; rp = rp->ai_next) { - total_ips++; - } - - if ((*ingest_ip = malloc(sizeof(char*) * total_ips)) == NULL) { - return 0; - } - - ips_found = 0; - for (rp = result; rp != NULL; rp = rp->ai_next, ips_found++) { - if (((*ingest_ip)[ips_found] = malloc(IPV4_ADDR_ASCII_LEN)) == NULL) { - return 0; - } - - sockaddr_ipv4 = (struct sockaddr_in *) rp->ai_addr; - - if (inet_ntop(AF_INET, &sockaddr_ipv4->sin_addr, ip, sizeof(ip)) == NULL) { - continue; - } - - strcpy_s((*ingest_ip)[ips_found], IPV4_ADDR_ASCII_LEN, ip); - } - - freeaddrinfo(result); - - return ips_found; -}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/media.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/media.c
Changed
@@ -1,5 +1,7 @@ +#define __FTL_INTERNAL #include "ftl.h" #include "ftl_private.h" +#include <assert.h> #define MAX_RTT_FACTOR 1.3 #define USEC_IN_SEC 1000000 @@ -8,6 +10,7 @@ OS_THREAD_ROUTINE audio_send_thread(void *data); OS_THREAD_ROUTINE recv_thread(void *data); OS_THREAD_ROUTINE ping_thread(void *data); +OS_THREAD_ROUTINE adaptive_bitrate_thread(void* data); ftl_status_t _internal_media_destroy(ftl_stream_configuration_private_t *ftl); static int _nack_init(ftl_media_component_common_t *media); static int _nack_destroy(ftl_media_component_common_t *media); @@ -28,10 +31,70 @@ static int _send_video_stats(ftl_stream_configuration_private_t *ftl, ftl_media_component_common_t *mc, int interval_ms); static int _send_instant_pkt_stats(ftl_stream_configuration_private_t *ftl, ftl_media_component_common_t *mc, int interval_ms); +size_t ingest_addrlen; +struct sockaddr *ingest_addr; + +ftl_status_t _get_addr_info(short family, char *ip, short port, struct sockaddr **addr, size_t *addrlen) { + + ftl_status_t retval = FTL_SUCCESS; + + do { + if (family == AF_INET) { + struct sockaddr_in *ipv4_addr = NULL; + size_t len; + + len = sizeof(struct sockaddr_in); + + if ((ipv4_addr = malloc(len)) == NULL) { + retval = FTL_MALLOC_FAILURE; + break; + } + + memset(ipv4_addr, 0, len); + + ipv4_addr->sin_family = family; + ipv4_addr->sin_port = htons(port); + + if (inet_pton(family, ip, &ipv4_addr->sin_addr) != 1) { + retval = FTL_DNS_FAILURE; + break; + } + + *addrlen = len; + *addr = (struct sockaddr *)ipv4_addr; + } + else if (family == AF_INET6) { + struct sockaddr_in6 *ipv6_addr = NULL; + size_t len; + + len = sizeof(struct sockaddr_in6); + + if ((ipv6_addr = malloc(len)) == NULL) { + retval = FTL_MALLOC_FAILURE; + break; + } + + memset(ipv6_addr, 0, len); + + ipv6_addr->sin6_family = family; + ipv6_addr->sin6_port = htons(port); + + if (inet_pton(family, ip, &ipv6_addr->sin6_addr) != 1) { + retval = FTL_DNS_FAILURE; + break; + } + + *addrlen = len; + *addr = (struct sockaddr *)ipv6_addr; + } + } + while (0); + return retval; +} + ftl_status_t media_init(ftl_stream_configuration_private_t *ftl) { ftl_media_config_t *media = &ftl->media; - unsigned char buf[sizeof(struct in_addr)]; ftl_status_t status = FTL_SUCCESS; int idx; @@ -44,27 +107,16 @@ os_init_mutex(&ftl->video.mutex); os_init_mutex(&ftl->audio.mutex); - //Create a socket - if ((media->media_socket = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET) - { - FTL_LOG(ftl, FTL_LOG_ERROR, "Could not create socket : %s", get_socket_error()); - status = FTL_INTERNAL_ERROR; - break; + //use the same socket family as the control connection + media->media_socket = socket(ftl->socket_family, SOCK_DGRAM, IPPROTO_UDP); + if (media->media_socket == -1) { + return FTL_DNS_FAILURE; } - set_socket_send_buf(media->media_socket, 2048); - - FTL_LOG(ftl, FTL_LOG_INFO, "Socket created\n"); - - if (inet_pton(AF_INET, ftl->ingest_ip, buf) == 0) { - break; + if ((status = _get_addr_info(ftl->socket_family, ftl->ingest_ip, media->assigned_port, &media->ingest_addr, &media->ingest_addrlen)) != FTL_SUCCESS) { + return status; } - //Prepare the sockaddr_in structure - media->server_addr.sin_family = AF_INET; - memcpy((char *)&media->server_addr.sin_addr.s_addr, (char *)buf, sizeof(buf)); - media->server_addr.sin_port = htons(media->assigned_port); - media->max_mtu = MAX_MTU; gettimeofday(&media->stats_tv, NULL); media->sender_report_base_ntp.tv_usec = 0; @@ -110,12 +162,12 @@ break; } - if (os_semaphore_create(&ftl->video.media_component.pkt_ready, "/VideoPkt", O_CREAT, 0) < 0) { + if (os_semaphore_create(&ftl->video.media_component.pkt_ready, "/VideoPkt", O_CREAT, 0, FALSE) < 0) { status = FTL_MALLOC_FAILURE; break; } - if (os_semaphore_create(&ftl->audio.media_component.pkt_ready, "/AudioPkt", O_CREAT, 0) < 0) { + if (os_semaphore_create(&ftl->audio.media_component.pkt_ready, "/AudioPkt", O_CREAT, 0, FALSE) < 0) { status = FTL_MALLOC_FAILURE; break; } @@ -138,7 +190,7 @@ break; } - if (os_semaphore_create(&media->ping_thread_shutdown, "/PingThreadShutdown", O_CREAT, 0) < 0) { + if (os_semaphore_create(&media->ping_thread_shutdown, "/PingThreadShutdown", O_CREAT, 0, FALSE) < 0) { status = FTL_MALLOC_FAILURE; break; } @@ -217,6 +269,9 @@ shutdown_socket(media->media_socket, SD_BOTH); close_socket(media->media_socket); media->media_socket = INVALID_SOCKET; + if (media->ingest_addr) { + free(media->ingest_addr); + } } os_unlock_mutex(&media->mutex); } @@ -278,6 +333,7 @@ slot->len = 0; slot->sn = -1; + slot->isPartOfIframe = 0; } os_init_mutex(&media->nack_slots_lock); @@ -487,7 +543,7 @@ float adjusted_bytes_sent = (float)total_sent * (1.f - pkt_loss_percent); int64_t actual_send_time = total_ms + final_rtt - initial_rtt; - effective_kbps = (int)(adjusted_bytes_sent * 8.f * 1000.f / (float)actual_send_time) / 1000.f; + effective_kbps = (int)(((float)adjusted_bytes_sent * 8.f * 1000.f / (float)actual_send_time) / 1000.f); results->pkts_sent = (int)pkts_sent; results->nack_requests = (int)lost_pkts; @@ -655,7 +711,7 @@ } os_unlock_mutex(&ftl->video.mutex); return bytes_queued; - } + } os_lock_mutex(&slot->mutex); @@ -682,6 +738,7 @@ slot->len = pkt_len; slot->sn = sn; gettimeofday(&slot->insert_time, NULL); + slot->isPartOfIframe = nalu_type == H264_NALU_TYPE_IDR; os_unlock_mutex(&slot->mutex); os_semaphore_post(&mc->pkt_ready); @@ -781,13 +838,19 @@ static int _media_send_slot(ftl_stream_configuration_private_t *ftl, nack_slot_t *slot) { int tx_len; + uint8_t pkt[MAX_PACKET_BUFFER]; + int pkt_len; + os_lock_mutex(&ftl->media.mutex); - if ((tx_len = sendto(ftl->media.media_socket, slot->packet, slot->len, 0, (struct sockaddr*) &ftl->media.server_addr, sizeof(struct sockaddr_in))) == SOCKET_ERROR) + memcpy(pkt, slot->packet, slot->len); + pkt_len = slot->len; + os_unlock_mutex(&ftl->media.mutex); + + if ((tx_len = sendto(ftl->media.media_socket, pkt, pkt_len, 0, (struct sockaddr*) ftl->media.ingest_addr, (int)ftl->media.ingest_addrlen)) == SOCKET_ERROR) { FTL_LOG(ftl, FTL_LOG_ERROR, "sendto() failed with error: %s", get_socket_error()); } - os_unlock_mutex(&ftl->media.mutex); - + return tx_len; } @@ -866,7 +929,7 @@ if (mc->nack_enabled) { tx_len = _media_send_slot(ftl, slot); - FTL_LOG(ftl, FTL_LOG_INFO, "[%d] resent sn %d, request delay was %d ms", ssrc, sn, req_delay); + FTL_LOG(ftl, FTL_LOG_INFO, "[%d] resent sn %d, request delay was %d ms, was part of iframe? %d", ssrc, sn, req_delay, slot->isPartOfIframe); } mc->stats.nack_requests++; @@ -988,9 +1051,20 @@ ftl_media_config_t *media = &ftl->media; int ret; unsigned char *buf; - struct sockaddr_in remote_addr; - socklen_t addr_len; - char remote_ip[INET_ADDRSTRLEN]; + struct sockaddr_in6 ipv6_addrinfo; + struct sockaddr_in ipv4_addrinfo; + struct sockaddr* addrinfo; + socklen_t addr_len, addrinfo_len; + char remote_ip[IPVX_ADDR_ASCII_LEN]; + + if (ftl->socket_family == AF_INET) { + addrinfo = (struct sockaddr *)&ipv4_addrinfo; + addrinfo_len = sizeof(struct sockaddr_in); + } + else { + addrinfo = (struct sockaddr *)&ipv6_addrinfo; + addrinfo_len = sizeof(struct sockaddr_in6); + } #ifdef _WIN32 if (!SetThreadPriority(GetCurrentThread(), THREAD_PRIORITY_TIME_CRITICAL)) { @@ -1021,14 +1095,15 @@ } // We have data on the socket, read it. - addr_len = sizeof(remote_addr); - ret = recvfrom(media->media_socket, buf, MAX_PACKET_BUFFER, 0, (struct sockaddr *)&remote_addr, &addr_len); + addr_len = addrinfo_len; + ret = recvfrom(media->media_socket, buf, MAX_PACKET_BUFFER, 0, (struct sockaddr *)addrinfo, &addr_len); if (ret <= 0) { // This shouldn't be possible, we should only be here is poll above told us there was data. + FTL_LOG(ftl, FTL_LOG_INFO, "recv from failed with %s\n", get_socket_error()); continue; } - if (inet_ntop(AF_INET, &remote_addr.sin_addr.s_addr, remote_ip, sizeof(remote_ip)) == NULL) { + if (_get_remote_ip(addrinfo, addr_len, remote_ip, sizeof(remote_ip)) < 0) { continue; } @@ -1093,7 +1168,7 @@ media_stats_t *pkt_stats = &ftl->video.media_component.stats; gettimeofday(&now, NULL); - delay_ms = timeval_subtract_to_ms(&now, &ping->xmit_time); + delay_ms = (int)timeval_subtract_to_ms(&now, &ping->xmit_time); if (delay_ms > pkt_stats->pkt_rtt_max) { pkt_stats->pkt_rtt_max = delay_ms; @@ -1242,7 +1317,7 @@ static int _update_stats(ftl_stream_configuration_private_t *ftl) { struct timeval now; gettimeofday(&now, NULL); - int stats_interval = timeval_subtract_to_ms(&now, &ftl->media.stats_tv); + int stats_interval = (int)timeval_subtract_to_ms(&now, &ftl->media.stats_tv); if (stats_interval > 5000) { @@ -1293,10 +1368,11 @@ mc->stats.total_xmit_delay = 0; mc->stats.xmit_delay_samples = 0; + // rtt stats are cleared by adaptive bitrate thread. mc->stats.pkt_rtt_max = 0; mc->stats.pkt_rtt_min = 10000; - mc->stats.total_rtt = 0; - mc->stats.rtt_samples = 0; + //mc->stats.total_rtt = 0; + //mc->stats.rtt_samples = 0; enqueue_status_msg(ftl, &m); @@ -1387,7 +1463,6 @@ // For each media component... ftl_media_component_common_t *media_comp[] = { &ftl->video.media_component, &ftl->audio.media_component }; ftl_media_component_common_t *comp; - struct timeval delta_tv; int mediaCount = 0; for (mediaCount = 0; mediaCount < sizeof(media_comp) / sizeof(media_comp[0]); mediaCount++) { @@ -1401,13 +1476,13 @@ // Set the ssrc and packet counts senderReport->ssrc = htonl(comp->ssrc); - senderReport->senderOctetCount = htonl(comp->stats.payload_bytes_sent); - senderReport->senderPacketCount = htonl(comp->stats.packets_sent); + senderReport->senderOctetCount = htonl((uint32_t)comp->stats.payload_bytes_sent); + senderReport->senderPacketCount = htonl((uint32_t)comp->stats.packets_sent); // Grab the last rtp timestamp. Since this is multi threaded we need it locally to ensure it doesn't change. uint64_t timestamp = comp->timestamp; uint64_t timestamp_dts_usec = comp->timestamp_dts_usec; - senderReport->rtpTimestamp = htonl(timestamp); + senderReport->rtpTimestamp = htonl((uint32_t)timestamp); // For the NTP time, we will take the base ntp time for this stream and increment it by the amount of time // that has passed from this rtp timestamp and the base timestamp. This way all of the values are derived from @@ -1434,10 +1509,478 @@ return 0; } -ftl_status_t ftl_get_video_stats(ftl_handle_t* handle, uint64_t* frames_sent, uint64_t* nacks_received) +// ================================================ Bitrate Monitor Logic =================================================== // + +FTL_API ftl_status_t ftl_get_video_stats( + ftl_handle_t* handle, + uint64_t* frames_sent, + uint64_t* nacks_received, + uint64_t* rtt_recorded, + uint64_t* frames_dropped, + float* queue_fullness +) { ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)handle->priv; + ftl_media_component_common_t *mc = &ftl->video.media_component; *frames_sent = ftl->video.media_component.stats.frames_sent; *nacks_received = ftl->video.media_component.stats.nack_requests; + *rtt_recorded = (mc->stats.rtt_samples) ? mc->stats.total_rtt / mc->stats.rtt_samples : 0; + *frames_dropped = mc->stats.dropped_frames; + *queue_fullness = _media_get_queue_fullness(ftl, mc->ssrc); + + mc->stats.pkt_rtt_max = 0; + mc->stats.pkt_rtt_min = 10000; + mc->stats.total_rtt = 0; + mc->stats.rtt_samples = 0; + return FTL_SUCCESS; -} \ No newline at end of file +} + +BOOL is_bitrate_reduction_required( + const float nacks_to_frames_ratio, + const float avg_rtt, + const uint64_t avg_frames_dropped_per_second, + const float queue_fullness) +{ + // TODO : Improve estimation of rtt stability. + if (nacks_to_frames_ratio > MIN_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FOR_BITRATE_DOWNGRADE + || avg_frames_dropped_per_second > 3 + || avg_rtt > MIN_AVG_RTT_TO_DEEM_BW_CONSTRAINED + || queue_fullness > MIN_QUEUE_FULLNESS_TO_DEEM_BW_CONSTRAINED + ) + { + return TRUE; + } + return FALSE; +} + +BOOL is_bw_stable( + const float nacks_to_frames_ratio, + const float avg_rtt, + const uint64_t avg_frames_dropped_per_second, + const float queue_fullness) +{ + // TODO : Improve estimation of rtt stability + if (nacks_to_frames_ratio < MAX_NACKS_RECEIVED_TO_PACKETS_SENT_RATIO_FORBITRATE_UPGRADE + && avg_frames_dropped_per_second == 0 + && avg_rtt < MAX_AVG_RTT_TO_DEEM_BW_STABLE + && queue_fullness < MAX_QUEUE_FULLNESS_TO_DEEM_BW_STABLE + ) + { + return TRUE; + } + return FALSE; +} + +uint64_t compute_recommended_bitrate( + const uint64_t current_encoding_bitrate, + const uint64_t max_encoding_bitrate, + const uint64_t min_encoding_bitrate, + ftl_bitrate_changed_reason_t reason +) +{ + uint64_t recommended_bitrate = 0; + + if (reason == FTL_BANDWIDTH_CONSTRAINED) + { + recommended_bitrate = BW_INSUFFICIENT_BITRATE_DOWNGRADE_PERCENTAGE * current_encoding_bitrate / 100; + } + + else if (reason == FTL_BANDWIDTH_AVAILABLE) + { + recommended_bitrate = current_encoding_bitrate + BW_IDEAL_BITRATE_UPGRADE_BPS; + } + else + { + recommended_bitrate = REVERT_TO_STABLE_BITRATE_DOWNGRADE_PERCENTAGE * current_encoding_bitrate / 100; + } + + if (recommended_bitrate < min_encoding_bitrate) + { + recommended_bitrate = min_encoding_bitrate; + } + + if (recommended_bitrate > max_encoding_bitrate) + { + recommended_bitrate = max_encoding_bitrate; + } + return recommended_bitrate; +} + +FTL_API ftl_status_t ftl_adaptive_bitrate_thread(ftl_handle_t* ftl_handle, void* context, int(*change_bitrate_callback)(void*, uint64_t), uint64_t initial_encoding_bitrate, uint64_t min_encoding_bitrate, uint64_t max_encoding_bitrate) +{ + ftl_status_t ret_status = FTL_SUCCESS; + ftl_stream_configuration_private_t *ftl = (ftl_stream_configuration_private_t *)ftl_handle->priv; + ftl_adaptive_bitrate_thread_params_t* thread_params = NULL; + + do + { + if ((thread_params = (ftl_adaptive_bitrate_thread_params_t*)malloc(sizeof(ftl_adaptive_bitrate_thread_params_t))) == NULL) + { + ret_status = FTL_MALLOC_FAILURE; + break; + } + + memset(thread_params, 0, sizeof(thread_params)); + + thread_params->handle = ftl_handle; + thread_params->change_bitrate_callback = change_bitrate_callback; + thread_params->initial_encoding_bitrate = initial_encoding_bitrate; + thread_params->max_encoding_bitrate = max_encoding_bitrate; + thread_params->min_encoding_bitrate = min_encoding_bitrate; + thread_params->context = context; + + if (os_semaphore_create(&ftl->bitrate_thread_shutdown, "/BitrateThreadShutdown", O_CREAT, 0, FALSE) < 0) + { + ret_status = FTL_MALLOC_FAILURE; + break; + } + + if ((os_create_thread(&ftl->bitrate_monitor_thread, NULL, adaptive_bitrate_thread, thread_params)) != 0) + { + os_semaphore_delete(&ftl->bitrate_thread_shutdown); + ret_status = FTL_MALLOC_FAILURE; + break; + } + // Only set this after the thread has actually been created. + ftl_set_state(ftl, FTL_BITRATE_THRD); + } while (0); + + if (ret_status != FTL_SUCCESS) + { + free(thread_params); + } + return ret_status; +} + +// The threads looks at the stats over the last 5 seconds of data to estimate bandwidth conditoins and compute whether upgrade or downgrade +// is required. If bandwidth is constrained we go down by a large amount and come back up slowly. Once upgrade is too excessive +// we revert to the previous bitrate, and do not try an upgrade for 10 mins. +OS_THREAD_ROUTINE adaptive_bitrate_thread(void* data) +{ + ftl_adaptive_bitrate_thread_params_t *params = (ftl_adaptive_bitrate_thread_params_t *)data; + ftl_stream_configuration_private_t* ftl = (ftl_stream_configuration_private_t*)params->handle->priv; + + // We choose a duration of BW_CHECK_DURATION_MS milliseconds to estimate bandiwidth conditions. The duration is sampled at a period of + // STREAM_STATS_CAPTURE_MS. Hence the number of stats we save in our circular buffer is MAX_STAT_SIZE. + assert(MAX_STAT_SIZE == BW_CHECK_DURATION_MS / STREAM_STATS_CAPTURE_MS); + + FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Starting adaptive bitrate thread"); + + // Circular buffers to hold bw stats data queried via ftl_get_video_params. + // The stats data shows data aggregated over the last c_ulBwCheckDurationMs milliseconds. + uint64_t nacks_received[MAX_STAT_SIZE] = {0}; + uint64_t frames_sent[MAX_STAT_SIZE] = {0}; + uint64_t rtts_received[MAX_STAT_SIZE] = {0}; + uint64_t frames_dropped[MAX_STAT_SIZE] = {0}; + float queue_fullness = 0; // queue fullness doesnt need to be aggregated. If it goes above a threshold value we deem bw unstable. + + uint32_t current_position_of_circular_buffer = 0; + BOOL circular_buffer_is_full = FALSE; + + uint64_t last_frames_sent_recorded = 0; + uint64_t last_nacks_received_recorded = 0; + uint64_t last_frames_dropped_recorded = 0; + uint64_t last_rtt_received = 0; + + ftl_get_video_stats( + params->handle, + &last_frames_sent_recorded, + &last_nacks_received_recorded, + &last_rtt_received, + &last_frames_dropped_recorded, + &queue_fullness + ); + // Current bitrate encoding as a percentage of the original encoding bitrate. + uint64_t current_encoding_bitrate = params->initial_encoding_bitrate; + + struct timeval last_bitrate_upgrade_time, bw_upgrade_freeze_start_time; + gettimeofday(&last_bitrate_upgrade_time, NULL); + bw_upgrade_freeze_start_time = (struct timeval) { 0 }; + + BOOL bitrate_changed = FALSE; + BOOL attempt_to_revert_to_stable_bandwidth_first = FALSE; + + // If a bitrate is deemed as stable after update, we report it to telemetry. + // bitrate is only deemed stable when we reach back to original bitrate, or when we revert to a bitrate after an excessive upgrade. + BOOL check_bitrate_for_stability = FALSE; + + while (1) + { + os_semaphore_pend(&ftl->bitrate_thread_shutdown, 0); + if (!ftl_get_state(params->handle->priv, FTL_BITRATE_THRD)) + { + break; + } + + uint64_t nacks_received_recorded = 0; + uint64_t frames_sent_recorded = 0; + uint64_t rtt_received = 0; + uint64_t frames_dropped_recorded = 0; + + ftl_get_video_stats(params->handle, &frames_sent_recorded, &nacks_received_recorded, &rtt_received, &frames_dropped_recorded, &queue_fullness); + + uint64_t nacks_received_since_last_check = nacks_received_recorded - last_nacks_received_recorded; + uint64_t frames_sent_since_last_check = frames_sent_recorded - last_frames_sent_recorded; + uint64_t frames_dropped_since_last_check = frames_dropped_recorded - last_frames_dropped_recorded; + + last_nacks_received_recorded = nacks_received_recorded; + last_frames_sent_recorded = frames_sent_recorded; + last_frames_dropped_recorded = frames_dropped_recorded; + + nacks_received[current_position_of_circular_buffer] = nacks_received_since_last_check; + frames_sent[current_position_of_circular_buffer] = frames_sent_since_last_check; + rtts_received[current_position_of_circular_buffer] = rtt_received; + frames_dropped[current_position_of_circular_buffer] = frames_dropped_since_last_check; + + // Once circular buffer is full, set the flag as we now have enough data to check bandwidth is constrained. + if (current_position_of_circular_buffer + 1 >= MAX_STAT_SIZE) + { + circular_buffer_is_full = TRUE; + } + // Update position in circular buffer. + current_position_of_circular_buffer = (current_position_of_circular_buffer + 1) % MAX_STAT_SIZE; + + // This conditions ensures that we have stats of the last c_ulBwCheckDurationMs milliseconds. + if (circular_buffer_is_full) + { + uint64_t nacks_received_total = 0; + uint64_t frames_sent_total = 0; + uint64_t total_rtt = 0; + float avg_rtt = 0; + uint64_t frames_dropped_total = 0; + uint64_t avg_frames_dropped_per_second = 0; + float nacks_to_frames_ratio = 0; + int i; + + // Count all nacks received for the last c_ulBwCheckDurationMs milliseconds + for (i = 0; i < MAX_STAT_SIZE; i++) + { + nacks_received_total += nacks_received[i]; + } + // Count all frames sent over the last c_ulBwCheckDurationMs milliseconds + for (i = 0; i< MAX_STAT_SIZE; i++) + { + frames_sent_total += frames_sent[i]; + } + + if (frames_sent_total != 0) + { + nacks_to_frames_ratio = (float)nacks_received_total / (float)frames_sent_total; + } + + for (i = 0; i< MAX_STAT_SIZE; i++) + { + total_rtt += rtts_received[i]; + } + avg_rtt = (float)total_rtt / (float)MAX_STAT_SIZE; + + for (i = 0; i < MAX_STAT_SIZE; i++) + { + frames_dropped_total += frames_dropped[i]; + } + avg_frames_dropped_per_second = (frames_dropped_total / (BW_CHECK_DURATION_MS / 1000)); + + // Check if bandwidth is constrained and bitrate reduction is required. The bandwidth can be constrained for two reasons. + // Either the available bandwidth has decreased, or we tried to upgrade the bitrate and its too excessive. + if (is_bitrate_reduction_required(nacks_to_frames_ratio, avg_rtt, avg_frames_dropped_per_second, queue_fullness)) + { + FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Bitrate reduction required. Nacks Received %d , Frames Sent %d rtt %d queue_fullness %4.2f", + nacks_received_total, + frames_sent_total, + avg_rtt, + queue_fullness + ); + + // If we had previously upgraded the bitrate and we started seeing the + // constrain within c_iMaxSecondsToDeemBitrateUpgradeExcessive seconds, it means our bitrate upgrade was excessiver. + // we should revert back to a lower bitrate and freeze all upgrades for c_uBitrateUpgradeFreezeTimeMs milliseconds. + if (attempt_to_revert_to_stable_bandwidth_first && get_ms_elapsed_since(&last_bitrate_upgrade_time) < MAX_MS_TO_DEEM_UPGRADE_EXCESSIVE) + { + FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Reverting to a stable bitrate and freezing upgrade"); + uint64_t recommended_bitrate = compute_recommended_bitrate(current_encoding_bitrate, params->max_encoding_bitrate, params->min_encoding_bitrate, FTL_UPGRADE_EXCESSIVE); + + BOOL changeBitrateResult = params->change_bitrate_callback(params->context, recommended_bitrate); + + if (changeBitrateResult) + { + ftl_bitrate_changed_msg_t msg = + { + FTL_BITRATE_DECREASED, + FTL_UPGRADE_EXCESSIVE, + recommended_bitrate, + current_encoding_bitrate, + 0.f, + avg_rtt, + avg_frames_dropped_per_second, + queue_fullness + }; + ftl_status_msg_t status_msg; + status_msg.type = FTL_BITRATE_CHANGED; + status_msg.msg.bitrate_changed_msg = msg; + enqueue_status_msg(params->handle->priv, &status_msg); + + bitrate_changed = TRUE; + check_bitrate_for_stability = TRUE; + attempt_to_revert_to_stable_bandwidth_first = FALSE; + current_encoding_bitrate = recommended_bitrate; + gettimeofday(&bw_upgrade_freeze_start_time, NULL); + } + } + // This means the available bandiwdth seems to have decreased and we need to reduce our bitrate to comply. + else + { + uint64_t recommended_bitrate = compute_recommended_bitrate(current_encoding_bitrate, params->max_encoding_bitrate, params->min_encoding_bitrate, FTL_BANDWIDTH_CONSTRAINED); + BOOL changeBitrateResult = params->change_bitrate_callback(params->context, recommended_bitrate); + // We had to lower bitrate. Bitrate is not stable. + check_bitrate_for_stability = FALSE; + if (changeBitrateResult) + { + ftl_bitrate_changed_msg_t msg = + { + FTL_BITRATE_DECREASED, + FTL_BANDWIDTH_CONSTRAINED, + recommended_bitrate, + current_encoding_bitrate, + nacks_to_frames_ratio, + avg_rtt, + avg_frames_dropped_per_second, + queue_fullness + }; + ftl_status_msg_t status_msg; + status_msg.type = FTL_BITRATE_CHANGED; + status_msg.msg.bitrate_changed_msg = msg; + enqueue_status_msg(params->handle->priv, &status_msg); + + bitrate_changed = TRUE; + current_encoding_bitrate = recommended_bitrate; + } + } + } + // If bandwidth is stable and we are haven't frozen bitrate upgrades due to excessive + // bitrate upgrade in the last BwUpgradeFreezeTime millisecods, we upgrade the bitrate. + else if (is_bw_stable(nacks_to_frames_ratio, avg_rtt, avg_frames_dropped_per_second, queue_fullness)) + { + if (get_ms_elapsed_since(&bw_upgrade_freeze_start_time) > 180000) + { + uint64_t recommended_bitrate = compute_recommended_bitrate(current_encoding_bitrate, params->max_encoding_bitrate, params->min_encoding_bitrate, FTL_BANDWIDTH_AVAILABLE); + if (recommended_bitrate != current_encoding_bitrate) + { + attempt_to_revert_to_stable_bandwidth_first = TRUE; + + BOOL changeBitrateResult = params->change_bitrate_callback(params->context, recommended_bitrate); + if (changeBitrateResult) + { + ftl_bitrate_changed_msg_t msg = + { + FTL_BITRATE_INCREASED, + FTL_BANDWIDTH_AVAILABLE, + recommended_bitrate, + current_encoding_bitrate, + nacks_to_frames_ratio, + avg_rtt, + avg_frames_dropped_per_second, + queue_fullness + }; + ftl_status_msg_t status_msg; + status_msg.type = FTL_BITRATE_CHANGED; + status_msg.msg.bitrate_changed_msg = msg; + enqueue_status_msg(params->handle->priv, &status_msg); + + bitrate_changed = TRUE; + current_encoding_bitrate = recommended_bitrate; + // We have reached a MAX_SUPPORTED_BITRATE_BPS. Check for stbility. + if (recommended_bitrate == params->max_encoding_bitrate) + { + check_bitrate_for_stability = TRUE; + } + gettimeofday(&last_bitrate_upgrade_time, NULL); + } + } + } + } + // If bitrate was changed by one of the steps above, + // we sleep for a cooldown period and clear our circular buffers. + if (bitrate_changed) + { + // Clear out the circular buffer as we dont want it to impact our calculations further. + circular_buffer_is_full = FALSE; + current_position_of_circular_buffer = 0; + + // set the peak kbps for throttling + ftl_media_component_common_t *video = &ftl->video.media_component; + video->peak_kbps = (int)(5 * current_encoding_bitrate / 1000); + + // Sleep for a c_ulBitrateChangedCooldownIntervalMs period. If hBroadcastTerminated signal is received exit. + os_semaphore_pend(&ftl->bitrate_thread_shutdown, BITRATE_CHANGED_COOLDOWN_INTERVAL_MS); + if (!ftl_get_state(params->handle->priv, FTL_BITRATE_THRD)) + { + break; + } + // Update ullLastFramesSentRecorded and ullLastNacksReceivedRecorded, so the cool down has no impact on our calculations. + ftl_get_video_stats(params->handle, &last_frames_sent_recorded, &last_nacks_received_recorded, &rtt_received, &last_frames_dropped_recorded, &queue_fullness); + bitrate_changed = FALSE; + } + else + { + if (check_bitrate_for_stability) + { + FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Stable Bitrate acheived"); + + check_bitrate_for_stability = FALSE; + if (current_encoding_bitrate == params->max_encoding_bitrate) + { + //Uncomment the following 3 lines to demo adaptive bitrate + //FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Zapping back to low value for demo."); + //current_encoding_bitrate = 512 * 1000; + //params->change_bitrate_callback(params->context, 512 * 1000); + + ftl_bitrate_changed_msg_t msg = + { + FTL_BITRATE_STABILIZED, + FTL_STABILIZE_ON_ORIGINAL_BITRATE, + params->max_encoding_bitrate, + current_encoding_bitrate, + nacks_to_frames_ratio, + avg_rtt, + avg_frames_dropped_per_second, + queue_fullness + }; + ftl_status_msg_t status_msg; + status_msg.type = FTL_BITRATE_CHANGED; + status_msg.msg.bitrate_changed_msg = msg; + enqueue_status_msg(params->handle->priv, &status_msg); + } + else + { + ftl_bitrate_changed_msg_t msg = + { + FTL_BITRATE_STABILIZED, + FTL_STABILIZE_ON_LOWER_BITRATE, + current_encoding_bitrate, + current_encoding_bitrate, + nacks_to_frames_ratio, + avg_rtt, + avg_frames_dropped_per_second, + queue_fullness + }; + ftl_status_msg_t status_msg; + status_msg.type = FTL_BITRATE_CHANGED; + status_msg.msg.bitrate_changed_msg = msg; + enqueue_status_msg(params->handle->priv, &status_msg); + } + } + } + } + + // Sleep for c_ulStreamStatsCaptureMs before capturing the next stats + os_semaphore_pend(&ftl->bitrate_thread_shutdown, STREAM_STATS_CAPTURE_MS); + if (!ftl_get_state(params->handle->priv, FTL_BITRATE_THRD)) + { + break; + } + } + FTL_LOG(params->handle->priv, FTL_LOG_INFO, "Shutting down bitrate thread"); + free(params); + return 0; +}
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.c
Changed
@@ -28,6 +28,7 @@ #include <string.h> #include <unistd.h> #include <sys/socket.h> +#include <sys/ioctl.h> #include <errno.h> #include <poll.h> @@ -85,6 +86,10 @@ return setsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char*)&buffer_space, sizeof(buffer_space)); } +int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available) { + return ioctl(socket, FIONREAD, bytes_available); +} + int poll_socket_for_receive(SOCKET socket, int timeoutMs) { // timeoutMs behavior
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/socket.h
Changed
@@ -13,4 +13,5 @@ int get_socket_send_buf(SOCKET socket, int *buffer_space); int set_socket_send_buf(SOCKET socket, int buffer_space); int poll_socket_for_receive(SOCKET socket, int ms_timeout); +int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available); int shutdown_socket(SOCKET sock, int how);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.c
Changed
@@ -66,29 +66,62 @@ return 0; } -int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value) { +int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global) { - if ((sem->name = strdup(name)) == NULL) { - return -1; - } + int retval = 0; - if (name == NULL || name[0] != '/') { - return -2; - } + sem->name = NULL; + sem->sem = NULL; + + do { + if (name == NULL || name[0] != '/') { + retval = -1; + break; + } + + //if the semaphore is intended to only be used by the same process and not across processes, give it unique name + if(!is_global) { + int name_len = strlen(name); + + if ((sem->name = (char*)malloc( (name_len + 20) * sizeof(char))) == NULL) { + retval = -2; + break; + } + + sprintf(sem->name, "%s_%d", name, (unsigned int)rand()); + } + else { + if ((sem->name = strdup(name)) == NULL) { + return -2; + } + } #ifdef __ANDROID__ - if ((sem->sem = (sem_t*)malloc(sizeof(sem_t))) == NULL) { - return -4; - } + if ((sem->sem = (sem_t*)malloc(sizeof(sem_t))) == NULL) { + retval = -4; + break; + } - if (sem_init(sem->sem, 0 /* pshared */, 0 /* value */)) { + if (sem_init(sem->sem, 0 /* pshared */, 0 /* value */)) { #else - if ((sem->sem = sem_open(name, oflag, 0644, value)) == SEM_FAILED) { + if ((sem->sem = sem_open(sem->name, oflag, 0644, value)) == SEM_FAILED) { #endif - return -3; + retval = -3; + break; + } + + return retval; + }while(0); + + if(sem->name != NULL){ + free(sem->name); } - return 0; + if(sem->sem != NULL){ + free(sem->sem); + } + + return retval; } int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout) {
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/posix/threads.h
Changed
@@ -23,6 +23,7 @@ **/ #include <stdbool.h> +#include <stdio.h> #include <pthread.h> #include <semaphore.h> #include <fcntl.h> @@ -58,7 +59,7 @@ int os_unlock_mutex(OS_MUTEX *mutex); int os_delete_mutex(OS_MUTEX *mutex); -int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value); +int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global); int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout); int os_semaphore_post(OS_SEMAPHORE *sem); int os_semaphore_delete(OS_SEMAPHORE *sem);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.c
Changed
@@ -77,6 +77,10 @@ return setsockopt(socket, SOL_SOCKET, SO_SNDBUF, (char*)&buffer_space, sizeof(buffer_space)); } +int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available) { + return ioctlsocket(socket, FIONREAD, bytes_available); +} + int poll_socket_for_receive(SOCKET socket, int timeoutMs) { // timeoutMs behavior
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/socket.h
Changed
@@ -7,4 +7,5 @@ int get_socket_send_buf(SOCKET socket, int *buffer_space); int set_socket_send_buf(SOCKET socket, int buffer_space); int poll_socket_for_receive(SOCKET socket, int ms_timeout); +int get_socket_bytes_available(SOCKET socket, unsigned long *bytes_available); int shutdown_socket(SOCKET sock, int how);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.c
Changed
@@ -22,6 +22,7 @@ * SOFTWARE. **/ +#include <stdlib.h> #include "threads.h" int os_init(){ @@ -86,22 +87,47 @@ return 0; } -char tmp[1024]; - -int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value) { - - if (name == NULL) { - return -1; - } - - if ( (*sem = CreateSemaphore(NULL, value, MAX_SEM_COUNT, name)) == NULL){ - - FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, NULL, GetLastError(), 0, (LPTSTR)&tmp, 1000, NULL); - - return -3; +int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global) { + + char *internal_name = NULL; + int retval = 0; + + do { + if (name == NULL) { + retval = -1; + break; + } + + //if the semaphore is intended to only be used by the same process and not across processes, give it unique name + if(!is_global) { + size_t name_len = strlen(name); + size_t max_name = name_len + 20; + + if ((internal_name = (char*)malloc(max_name * sizeof(char))) == NULL) { + retval = -2; + break; + } + + sprintf_s(internal_name, max_name, "%s_%d", name, (unsigned int)rand()); + } + else { + if ((internal_name = _strdup(name)) == NULL) { + retval = -2; + break; + } + } + + if ( (*sem = CreateSemaphoreA(NULL, value, MAX_SEM_COUNT, (LPCSTR)internal_name)) == NULL){ + retval = -3; + break; + } + }while(0); + + if(internal_name != NULL){ + free(internal_name); } - return 0; + return retval; } int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout) {
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.h -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-sdk/libftl/win32/threads.h
Changed
@@ -23,6 +23,7 @@ **/ #include <Windows.h> +#include <stdio.h> typedef CRITICAL_SECTION OS_MUTEX; @@ -51,7 +52,7 @@ int os_unlock_mutex(OS_MUTEX *mutex); int os_delete_mutex(OS_MUTEX *mutex); -int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value); +int os_semaphore_create(OS_SEMAPHORE *sem, const char *name, int oflag, unsigned int value, BOOL is_global); int os_semaphore_pend(OS_SEMAPHORE *sem, int ms_timeout); int os_semaphore_post(OS_SEMAPHORE *sem); int os_semaphore_delete(OS_SEMAPHORE *sem);
View file
obs-studio-21.0.3.tar.xz/plugins/obs-outputs/ftl-stream.c -> obs-studio-21.1.2.tar.xz/plugins/obs-outputs/ftl-stream.c
Changed
@@ -930,7 +930,7 @@ p->nack_reqs -stream->last_nack_count; stream->last_nack_count = p->nack_reqs; - int log_level = p->nack_reqs > 2 ? LOG_INFO : LOG_DEBUG; + int log_level = p->nack_reqs > 0 ? LOG_INFO : LOG_DEBUG; blog(log_level, "Avg packet send per second %3.1f, " "total nack requests %d", @@ -941,7 +941,7 @@ ftl_packet_stats_instant_msg_t *p = &status.msg.ipkt_stats; - int log_level = p->avg_rtt > 200 ? LOG_INFO : LOG_DEBUG; + int log_level = p->avg_rtt > 20 ? LOG_INFO : LOG_DEBUG; blog(log_level, "avg transmit delay %dms " "(min: %d, max: %d), " @@ -954,7 +954,7 @@ ftl_video_frame_stats_msg_t *v = &status.msg.video_stats; - int log_level = v->queue_fullness > 5 ? + int log_level = v->queue_fullness > 0 ? LOG_INFO : LOG_DEBUG; blog(log_level, "Queue an average of %3.2f fps "
View file
obs-studio-21.1.2.tar.xz/plugins/obs-qsv11/data/locale/fil-PH.ini
Added
@@ -0,0 +1,12 @@ +TargetUsage="Paggamit ng Target" +Bitrate="Bitreyt" +MaxBitrate="Malakas na Bitreyt" +RateControl="Pagkontrol ng rate" +KeyframeIntervalSec="Pagitan ng Keyframe (segundo, 0=awto)" +Profile="Anyo sa tagiliran" +AsyncDepth="Lalim ng Async" +Accuracy="Katumapakan" +Convergence="Tagpo" +ICQQuality="Kalidad ng ICQ" +LookAheadDepth="Tignan mo ang nasa unahan ng Malalim" +
View file
obs-studio-21.1.2.tar.xz/plugins/obs-qsv11/data/locale/tl-PH.ini
Added
@@ -0,0 +1,12 @@ +TargetUsage="Ang Target ng Usage" +Bitrate="Bitrate" +MaxBitrate="Pinakamataas na bitrate" +RateControl="Ang Rate Kontrol" +KeyframeIntervalSec="Ang Keyframe Interval (segundos, 0=awtomatik)" +Profile="Ang Profile" +AsyncDepth="Async Depth" +Accuracy="Kahusayan" +Convergence="Patagpo" +ICQQuality="Kalidad ng ICQ" +LookAheadDepth="Lalim ng Lookahead" +
View file
obs-studio-21.1.2.tar.xz/plugins/obs-text/data/locale/fil-PH.ini
Added
@@ -0,0 +1,34 @@ +TextGDIPlus="Teksto (GDI+)" +Font="Benditahan" +Text="Teksto" +ReadFromFile="Basahin galing sa file" +TextFile="Tekstong file (UTF-8)" +Filter.TextFiles="Teksto ng mga file" +Filter.AllFiles="Ang lahat ng mga file" +Color="Kulay" +Opacity="Kalabuan" +Gradient="Mapagmahal" +Gradient.Color="Mapagmahal na Kulay" +Gradient.Opacity="Mapagmahal na kalabuan" +Gradient.Direction="Mapagmahal na Direksyon" +BkColor="Panglikuran na Kulay" +BkOpacity="Panglikuran na Kalabuan" +Alignment="Pagkakahanay" +Alignment.Left="Kaliwa" +Alignment.Center="Gitna" +Alignment.Right="Kanan" +Vertical="Patayo" +VerticalAlignment="Patayong Pagkakahanay" +VerticalAlignment.Top="Nangunguna" +VerticalAlignment.Bottom="Pinakailalim" +Outline="Balangkas" +Outline.Size="Balangkas na Sukat" +Outline.Color="Balangkas na kulay" +Outline.Opacity="Balangkas ng kalabuan" +ChatlogMode="Chatlag Mowd" +ChatlogMode.Lines="Linya ng limitasyon sa Chatlog" +UseCustomExtents="Gamitin ang Pasadyang Nakakalawak na Teksto" +UseCustomExtents.Wrap="Ibalot" +Width="Lapad" +Height="Taas" +
View file
obs-studio-21.1.2.tar.xz/plugins/obs-text/data/locale/tl-PH.ini
Added
@@ -0,0 +1,34 @@ +TextGDIPlus="Teksto (GDI+)" +Font="AngFont" +Text="Teksto" +ReadFromFile="Magbasa mula sa file" +TextFile="Teksto File (UTF-8)" +Filter.TextFiles="Teksto ng mgaFiles" +Filter.AllFiles="Lahat ng mga Files" +Color="Kulay" +Opacity="Opacity" +Gradient="Gradient" +Gradient.Color="Gradient na Kulay" +Gradient.Opacity="Gradient na Opacity" +Gradient.Direction="Gradient na Direksyon" +BkColor="Kulay sa Background" +BkOpacity="Backround na Opacity" +Alignment="Amgpagka-align" +Alignment.Left="Kaliwa" +Alignment.Center="Gitna" +Alignment.Right="Kanan" +Vertical="Patayo" +VerticalAlignment="Patayo ang Pagka-align" +VerticalAlignment.Top="Taas" +VerticalAlignment.Bottom="Baba" +Outline="Ang Outline" +Outline.Size="Ang laki ng Outline" +Outline.Color="Ang Kulay ng Outline" +Outline.Opacity="Ang Outline Opacity" +ChatlogMode="Modo ng Chatlog" +ChatlogMode.Lines="Limitasyon ng linya sa Chatlog" +UseCustomExtents="Gumamit ng Custom na Teksto sa Extents" +UseCustomExtents.Wrap="Wrap" +Width="Ang lapad" +Height="Ang Taas" +
View file
obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/fil-PH.ini
Added
@@ -0,0 +1,66 @@ +FadeTransition="Kumupas" +CutTransition="Gumupit" +SwipeTransition="Nakawin" +SlideTransition="Magpadulas" +StingerTransition="Tibo" +FadeToColorTransition="Paglabong sagad sa kulay" +Direction="Direksyon" +Direction.Left="Kaliwa" +Direction.Right="Kanan" +Direction.Up="Pataas" +Direction.Down="Pababa" +SwipeIn="Mag-swipe In" +Color="Kulay" +VideoFile="Bidyo File" +TransitionPoint="Paglipat ng tuldok (milsegundo)" +TransitionPointFrame="Paglipat ng Punto (preym)" +TransitionPointType="Paglipat ng Uri ng Punto" +TransitionPointTypeFrame="Preym" +TransitionPointTypeTime="Oras (milsegundo)" +AudioFadeStyle="Lumabo ang Estilo ng Awdiyo" +AudioFadeStyle.FadeOutFadeIn="Lumalabo sa paglipat ng punto pagkatapos maglabo" +AudioFadeStyle.CrossFade="Kruspeyd" +SwitchPoint="Tugatok ng Kulay ng Punto (porsyento)" +LumaWipeTransition="Pamunas na Luma" +LumaWipe.Image="Larawan" +LumaWipe.Invert="Baliktarin" +LumaWipe.Softness="Lambot" +LumaWipe.Type.BarndoorBottomLeft="Kamalig na pinto sa Kailaliman ng Kaliwa" +LumaWipe.Type.BarndoorHorizontal="Kamalig na pintong Pahalang" +LumaWipe.Type.BarndoorTopLeft="Kamalig na pinto sa Taas ng kaliwa" +LumaWipe.Type.BarndoorVertical="Kamalig na pintong Patayo" +LumaWipe.Type.BlindsHorizontal="Mga blind na Pahalang" +LumaWipe.Type.BoxBottomLeft="Kahon sa Kailaliman ng Kaliwa" +LumaWipe.Type.BoxBottomRight="Kahon sa Kailaliman ng Kanan" +LumaWipe.Type.BoxTopLeft="Kahon sa tuktok ng kaliwang bahagi" +LumaWipe.Type.BoxTopRight="Kahon sa Tuktok ng Kanang bahagi" +LumaWipe.Type.Burst="Pagputok" +LumaWipe.Type.CheckerboardSmall="Damahang maliit" +LumaWipe.Type.Circles="Mga lupon" +LumaWipe.Type.Clock="Orasan" +LumaWipe.Type.Cloud="Ulap" +LumaWipe.Type.Curtain="Kurtina" +LumaWipe.Type.Fan="Pamaypay" +LumaWipe.Type.Fractal="Fraktal" +LumaWipe.Type.Iris="Ayris" +LumaWipe.Type.LinearHorizontal="Sa guhit na Pahalang" +LumaWipe.Type.LinearTopLeft="Guhit sa Kaliwang tuktok" +LumaWipe.Type.LinearTopRight="Guhit sa kanang tuktok" +LumaWipe.Type.LinearVertical="Sa guhit na patayo" +LumaWipe.Type.ParallelZigzagHorizontal="Nakahirelang Palikong Pahalang" +LumaWipe.Type.ParallelZigzagVertical="Pahirelang Palikong Patayo" +LumaWipe.Type.Sinus9="Sinus na 9" +LumaWipe.Type.Spiral="Pilipit" +LumaWipe.Type.Square="Kuwadrado" +LumaWipe.Type.Squares="Mga kuwadrado" +LumaWipe.Type.Stripes="Mga guhit" +LumaWipe.Type.StripsHorizontal="Pahalang na Simutin" +LumaWipe.Type.StripsVertical="Patayong simutin" +LumaWipe.Type.Watercolor="Waterkolor" +LumaWipe.Type.ZigzagHorizontal="Palikong Pahalang" +LumaWipe.Type.ZigzagVertical="Palikong Patayo" +AudioMonitoring="Pagsubaybay sa Audio" +AudioMonitoring.None="I-off ang Pagsubaybay" +AudioMonitoring.MonitorOnly="Magsubaybay lang (i-mute ang output)" +AudioMonitoring.Both="Subaybayan at Output" +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/ru-RU.ini
Changed
@@ -1,5 +1,5 @@ FadeTransition="Затухание" -CutTransition="Обрезать" +CutTransition="Обрезка" SwipeTransition="Перемещение" SlideTransition="Сдвиг" StingerTransition="Стингер"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/tl-PH.ini
Added
@@ -0,0 +1,66 @@ +FadeTransition="Palabo" +CutTransition="Putulin" +SwipeTransition="I-swipe" +SlideTransition="I-slide" +StingerTransition="Stinger" +FadeToColorTransition="Palabo sa Kulay" +Direction="Direksyon" +Direction.Left="Kaliwa" +Direction.Right="Kanan" +Direction.Up="Pataas" +Direction.Down="Pababa" +SwipeIn="Mag-swipe papasok" +Color="Kulay" +VideoFile="File ng mga video" +TransitionPoint="Pinagmulan ng Pagbabago (millisegundos)" +TransitionPointFrame="Pinagmulan ng Pagbabago (Frame)" +TransitionPointType="Pinagmulan ng Pagbabago ng Tipo" +TransitionPointTypeFrame="Ang frame" +TransitionPointTypeTime="Oras (millisegundos)" +AudioFadeStyle="Palabo ang istilo ng Audio" +AudioFadeStyle.FadeOutFadeIn="Palabo ang palabas sa pinagmulan ng pagbabago tapos palabo papasok" +AudioFadeStyle.CrossFade="Crossfade" +SwitchPoint="Peak Color Point (porsyento)" +LumaWipeTransition="Luma Wipe" +LumaWipe.Image="Imahe" +LumaWipe.Invert="Ibaliktad" +LumaWipe.Softness="Kalambutan" +LumaWipe.Type.BarndoorBottomLeft="Barndoor Pailalim sa Kaliwa" +LumaWipe.Type.BarndoorHorizontal="Barndoor Pahiga" +LumaWipe.Type.BarndoorTopLeft="Barndoor Pataas sa Kaliwa" +LumaWipe.Type.BarndoorVertical="Barndoor Patayo" +LumaWipe.Type.BlindsHorizontal="Blinds Pahiga" +LumaWipe.Type.BoxBottomLeft="Box Pailalim sa Kaliwa" +LumaWipe.Type.BoxBottomRight="Box Pailalim sa Kanan" +LumaWipe.Type.BoxTopLeft="Box Paitaas sa Kaliwa" +LumaWipe.Type.BoxTopRight="Box Paitaas sa Kanan" +LumaWipe.Type.Burst="Pasabog" +LumaWipe.Type.CheckerboardSmall="Maliit na Checkerboard" +LumaWipe.Type.Circles="Mga Bilog" +LumaWipe.Type.Clock="Orasan" +LumaWipe.Type.Cloud="Ulap" +LumaWipe.Type.Curtain="Kurtina" +LumaWipe.Type.Fan="Fan" +LumaWipe.Type.Fractal="Fractal" +LumaWipe.Type.Iris="Iris" +LumaWipe.Type.LinearHorizontal="Linear Pahiga" +LumaWipe.Type.LinearTopLeft="Linear Pataas sa Kaliwa" +LumaWipe.Type.LinearTopRight="Linear Pataas sa Kanan" +LumaWipe.Type.LinearVertical="Linear Patayo" +LumaWipe.Type.ParallelZigzagHorizontal="Parallel Zigzag Pahiga" +LumaWipe.Type.ParallelZigzagVertical="Parallel Zigzag Patayo" +LumaWipe.Type.Sinus9="Sinus 9" +LumaWipe.Type.Spiral="Pilipit" +LumaWipe.Type.Square="Kuwadrado" +LumaWipe.Type.Squares="Mga kuwadrado" +LumaWipe.Type.Stripes="Mga guhit" +LumaWipe.Type.StripsHorizontal="Pahiga na strips" +LumaWipe.Type.StripsVertical="Patayo na mga strips" +LumaWipe.Type.Watercolor="Watercolor" +LumaWipe.Type.ZigzagHorizontal="Zigzag Pahiga" +LumaWipe.Type.ZigzagVertical="Vertical" +AudioMonitoring="Pag-monitor sa audio" +AudioMonitoring.None="Patayin ang Monitor" +AudioMonitoring.MonitorOnly="Monitor lamang (i-mute ang output)" +AudioMonitoring.Both="Monitor at Output" +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-transitions/data/locale/tr-TR.ini
Changed
@@ -2,7 +2,7 @@ CutTransition="Kes" SwipeTransition="Kaydır" SlideTransition="Kaydır" -StingerTransition="Isırıcı" +StingerTransition="Stinger" FadeToColorTransition="Fade to Color" Direction="Yönlendir" Direction.Left="Sol"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/fil-PH.ini
Added
@@ -0,0 +1,13 @@ +Bitrate="Bitreyt" +CustomBufsize="Gamitin ang Pasadyang Sukat ng Buffer" +BufferSize="Sukat Buffer" +RateControl="Kontrolin ang Singil" +CRF="CRF" +KeyframeIntervalSec="Pagitan ng Keyframe (segundo, 0=awto)" +CPUPreset="Paggamit sa Preset ng CPU (mataas=konti CPU)" +Profile="Propayl" +Tune="Tono" +None="(Wala)" +EncoderOptions="x264 Pagpipilian (magkahiwalay sa pamamagitan ng patlang)" +VFR="Pabago-bago ng Framerate (VFR)" +
View file
obs-studio-21.0.3.tar.xz/plugins/obs-x264/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/nb-NO.ini
Changed
@@ -4,7 +4,7 @@ RateControl="Hastighetskontroll" CRF="CRF" KeyframeIntervalSec="Nøkkelbildeintervall (sekunder, 0 = automatisk)" -CPUPreset="Forhåndsinstilling for prosessorbruk (raskere betyr mindre belastning)" +CPUPreset="Forhåndsinnstilling for prosessorbruk (raskere = mindre CPU-bruk)" Profile="Profil" Tune="Still inn" None="(Ingen)"
View file
obs-studio-21.0.3.tar.xz/plugins/obs-x264/data/locale/ru-RU.ini -> obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/ru-RU.ini
Changed
@@ -6,7 +6,7 @@ KeyframeIntervalSec="Интервал ключевых кадров (сек, 0=авто)" CPUPreset="Предустановка использования ЦП (выше = меньше)" Profile="Профиль" -Tune="Настроить" +Tune="Настройка" None="(Нет)" EncoderOptions="Настройки x264 (разделённые пробелом)" VFR="Переменная частота кадров (VFR)"
View file
obs-studio-21.1.2.tar.xz/plugins/obs-x264/data/locale/tl-PH.ini
Added
@@ -0,0 +1,13 @@ +Bitrate="Ang Bitrate" +CustomBufsize="Gamitin ang Custom Buffer Size" +BufferSize="Laki ng Buffer" +RateControl="Kontrol ng Rate" +CRF="CRF" +KeyframeIntervalSec="Interbalng Keyframe (segundos, 0=awtomatik)" +CPUPreset="Ang Usage Preset ng CPU (mataas = mababang CPU)" +Profile="Ang Profile" +Tune="Ang tono" +None="(Wala)" +EncoderOptions="x264 Mga opsyon (pinaghiwalay ng espasyo)" +VFR="Variable Framerate (VFR)" +
View file
obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/locale/fil-PH.ini
Added
@@ -0,0 +1,11 @@ +StreamingServices="Serbisyong Striming" +CustomStreamingServer="Pagsadya ng striming na serber" +Service="Serbisyo" +Server="Serber" +Server.Auto="Awto (Nirekomenda)" +StreamKey="Susi ng Strim" +UseAuth="Paggamit ng pagpapatunay" +Username="Ginagamit na pangalan" +Password="Password" +ShowAll="Ipakita ang lahat ng mga serbisyo" +
View file
obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/locale/nb-NO.ini -> obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/locale/nb-NO.ini
Changed
@@ -3,7 +3,7 @@ Service="Tjeneste" Server="Tjener" Server.Auto="Auto (Anbefales)" -StreamKey="Strømingsnøkkel" +StreamKey="Strømmenøkkel" UseAuth="Bruk godkjenning" Username="Brukernavn" Password="Passord"
View file
obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/locale/tl-PH.ini
Added
@@ -0,0 +1,11 @@ +StreamingServices="Serbisyo ng Streaming" +CustomStreamingServer="Ang Server ng Custom Streaming" +Service="Serbisyo" +Server="Ang Server" +Server.Auto="Awtomatik (Nirokomenda)" +StreamKey="Ang Stream key" +UseAuth="Gumamit ng patunay" +Username="Username" +Password="Password" +ShowAll="Ipakita ang lahat ng mga serbisyo" +
View file
obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/package.json -> obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/package.json
Changed
@@ -1,10 +1,10 @@ { "url": "https://obsproject.com/obs2_update/rtmp-services", - "version": 78, + "version": 80, "files": [ { "name": "services.json", - "version": 78 + "version": 80 } ] }
View file
obs-studio-21.0.3.tar.xz/plugins/rtmp-services/data/services.json -> obs-studio-21.1.2.tar.xz/plugins/rtmp-services/data/services.json
Changed
@@ -714,6 +714,10 @@ "url": "rtmp://seoul.restream.io/live" }, { + "name": "Asia (Tokyo, Japan)", + "url": "rtmp://tokyo.restream.io/live" + }, + { "name": "Australia (Sydney)", "url": "rtmp://au.restream.io/live" } @@ -725,39 +729,74 @@ { "name": "Nood", "servers": [ - { - "name": "EU Central: Frankfurt, Germany", - "url": "rtmp://broadcast-frf.nood.tv/20D2AB/live" - }, - { - "name": "EU North: Amsterdam, Netherlands", - "url": "rtmp://broadcast-ams.nood.tv/20D2AB/live" - }, - { - "name": "EU West: Stockholm, Sweden", - "url": "rtmp://broadcast-arn.nood.tv/20D2AB/live" - }, - { - "name": "US East: Washington, DC", - "url": "rtmp://broadcast-dca.nood.tv/20D2AB/live" - }, - { - "name": "US West: Los Angeles, CA", - "url": "rtmp://broadcast-oxr.nood.tv/20D2AB/live" - }, - { - "name": "Australia: Sydney", - "url": "rtmp://broadcast-syd.nood.tv/20D2AB/live" - }, - { - "name": "Asia: Hong Kong, China", - "url": "rtmp://broadcast-hhp.nood.tv/20D2AB/live" - } + { + "name": "Global: Fastest (Recommended)", + "url": "rtmp://stream.nood.tv/live_source" + }, + { + "name": "NA East: Ashburn, VA, USA", + "url": "rtmp://us-east-1.stream.nood.tv/live_source" + }, + { + "name": "NA East: Columbus, OH, USA", + "url": "rtmp://us-east-2.stream.nood.tv/live_source" + }, + { + "name": "NA East: Montreal, QC, CAN", + "url": "rtmp://ca-central-1.stream.nood.tv/live_source" + }, + { + "name": "NA West: San Francisco, CA, USA", + "url": "rtmp://us-west-1.stream.nood.tv/live_source" + }, + { + "name": "NA West: Portland, OR, USA", + "url": "rtmp://us-west-2.stream.nood.tv/live_source" + }, + { + "name": "SA East: Sao Paulo, BRA", + "url": "rtmp://sa-east-1.stream.nood.tv/live_source" + }, + { + "name": "EU West: Dublin, IRL", + "url": "rtmp://eu-west-1.stream.nood.tv/live_source" + }, + { + "name": "EU West: London, GBR", + "url": "rtmp://eu-west-2.stream.nood.tv/live_source" + }, + { + "name": "EU West: Paris, FRA", + "url": "rtmp://eu-west-3.stream.nood.tv/live_source" + }, + { + "name": "EU West: Frankfurt, DEU", + "url": "rtmp://eu-central-1.stream.nood.tv/live_source" + }, + { + "name": "Asia North-East: Tokyo, JPN", + "url": "rtmp://ap-northeast-1.stream.nood.tv/live_source" + }, + { + "name": "Asia North-East: Seoul, KOR", + "url": "rtmp://ap-northeast-2.stream.nood.tv/live_source" + }, + { + "name": "Asia South-East: Singapore, SGP", + "url": "rtmp://ap-southeast-1.stream.nood.tv/live_source" + }, + { + "name": "Asia South-East: Sydney, AUS", + "url": "rtmp://ap-southeast-2.stream.nood.tv/live_source" + }, + { + "name": "Asia South: Mumbai, IND", + "url": "rtmp://ap-south-1.stream.nood.tv/live_source" + } ], "recommended": { "keyint": 2, - "profile": "main", - "max video bitrate": 3500, + "max video bitrate": 25000, "max audio bitrate": 192 } }, @@ -1175,6 +1214,24 @@ "max video bitrate": 1000, "max audio bitrate": 64 } + }, + { + "name": "Vimeo", + "servers": [ + { + "name": "Default", + "url": "rtmp://rtmp.cloud.vimeo.com/live" + } + ] + }, + { + "name": "Aparat", + "servers": [ + { + "name": "Default", + "url": "rtmp://rtmp.cdn.asset.aparat.com:443/event" + } + ] } ] }
View file
obs-studio-21.1.2.tar.xz/plugins/text-freetype2/data/locale/fil-PH.ini
Added
@@ -0,0 +1,14 @@ +TextFreetype2="Teksto (Libreng uri 2)" +Font="Benditahan" +Text="Teksto" +TextFile="Pagkikil sa Teksto (UTF-8 o UTF-16)" +TextFileFilter="Pakikil sa mga Teksto (*. txt);;" +ChatLogMode="Ang Satsatan ay nasa paraan na log (huling anim na mga linya)" +Color1="Kulay isa" +Color2="Kulay pangalawa" +Outline="Balangkas" +DropShadow="I-drop ang Anino" +ReadFromFile="Bahasin mula sa payl" +CustomWidth="Pasadyang pahalang na teksto" +WordWrap="Salitang Na-i-wrap" +
View file
obs-studio-21.1.2.tar.xz/plugins/text-freetype2/data/locale/tl-PH.ini
Added
@@ -0,0 +1,14 @@ +TextFreetype2="Teskto (FreeType 2)" +Font="Ang font" +Text="Teksto" +TextFile="Teksto ng file (UTF-8 or UTF-16)" +TextFileFilter="Teksto ng mga nilalaman (*.txt);;" +ChatLogMode="Ang log modeng chat (huling 6 na linya)" +Color1="Unang Kulay" +Color2="Pangalawang Kulay" +Outline="Ang Outline" +DropShadow="I-drop ang Shadow" +ReadFromFile="Magabasa mula sa aking file" +CustomWidth="Ang custom width ng teksto" +WordWrap="Wrap ng mga Salita" +
View file
obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/fil-PH.ini
Added
@@ -0,0 +1,15 @@ +VLCSource="VLC Pinagmulan ng Bidyo" +Playlist="Playlist" +LoopPlaylist="Talaan ng siluin" +Shuffle="I-shuffle na Playlist" +PlaybackBehavior="Pagiging kita ng PagPag-uugali" +PlaybackBehavior.StopRestart="Itigil kapag hindi nakikita, i-restart kapag nakikita na" +PlaybackBehavior.PauseUnpause="I-pause kapag hindi nakikita, i-unpause kapag nakikita na" +PlaybackBehavior.AlwaysPlay="Palaging paganahin kahit na hindi nakikita" +NetworkCaching="Network Kaching (ms)" +PlayPause="Patugtugin/I-pause" +Restart="I-restart" +Stop="Itigil" +PlaylistNext="Susunod" +PlaylistPrev="Nakaraan" +
View file
obs-studio-21.0.3.tar.xz/plugins/vlc-video/data/locale/he-IL.ini -> obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/he-IL.ini
Changed
@@ -1,8 +1,15 @@ VLCSource="מקור וידאו VLC" Playlist="רשימת השמעה" LoopPlaylist="לולאת רשימת השמעה" +Shuffle="ערבב רשימת השמעה" PlaybackBehavior="התנהגות ניראות" PlaybackBehavior.StopRestart="עצור כאשר אינו נראה, התחל מחדש כאשר נראה" PlaybackBehavior.PauseUnpause="השהה כאשר אינו נראה, בטל השהייה כאשר נראה" PlaybackBehavior.AlwaysPlay="נגן תמיד גם כאשר לא נראה" +NetworkCaching="רשת אחסון מטמטון (מילי שניות)" +PlayPause="הפעל/הפסק" +Restart="הפעל מחדש" +Stop="עצור" +PlaylistNext="הבא" +PlaylistPrev="הקודם"
View file
obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/ro-RO.ini
Added
@@ -0,0 +1,2 @@ +VLCSource="Sursă Video VLC" +
View file
obs-studio-21.1.2.tar.xz/plugins/vlc-video/data/locale/tl-PH.ini
Added
@@ -0,0 +1,15 @@ +VLCSource="Pinagmulan ng VLC Video" +Playlist="Mga Playlist" +LoopPlaylist="Loop ng mga Playlist" +Shuffle="I-shuffle ang mga Playlist" +PlaybackBehavior="Ang nakikitang kilos" +PlaybackBehavior.StopRestart="Huminto kung wala ng makita, i-restart kung mero ng makita" +PlaybackBehavior.PauseUnpause="Ihinto kung walang makita, magpatuloy kungwala ng makita" +PlaybackBehavior.AlwaysPlay="Patuloy na mag-play kahit wala ng makita" +NetworkCaching="Network Caching (ms)" +PlayPause="I-play/Ihinto" +Restart="I-restart" +Stop="Ihinto" +PlaylistNext="Susunod" +PlaylistPrev="Nakaraan" +
View file
obs-studio-21.0.3.tar.xz/plugins/win-capture/data/locale/cs-CZ.ini -> obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/cs-CZ.ini
Changed
@@ -7,6 +7,7 @@ WindowCapture.Priority.Exe="Shoda názvu, jinak najít okno stejného procesu" CaptureCursor="Zaznamenávat kurzor" Compatibility="Více-adaptérová kompaktibilita" +SLIFix="Zaznamenávací mód SLI/Crossfire (pomalý)" AllowTransparency="Povolit průhlednost" Monitor="Obrazovka" PrimaryMonitor="Primární obrazovka"
View file
obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/fil-PH.ini
Added
@@ -0,0 +1,26 @@ +MonitorCapture="Ipakita ang Kumuha" +WindowCapture="Kumuha ng window" +WindowCapture.Window="Bintana" +WindowCapture.Priority="Bintanang Tugma sa Prayoridad" +WindowCapture.Priority.Title="Pamagat ng Window na mas tugma" +WindowCapture.Priority.Class="Tugmang pamagat, kung hindi matatagpuan ang window sa parehong uri" +WindowCapture.Priority.Exe="Tugmang pamagat, kung hindi makikita ang window sa parehong maipapatupad" +CaptureCursor="Kumuha ng Cursor" +Compatibility="Ang Pagkatugma ng Multi-adapter" +SLIFix="SLI/Crossfire nasa Mode ng Pagkuha (Mabagal)" +AllowTransparency="Pahintulutan ang Pag-aninaw" +Monitor="Magpakita" +PrimaryMonitor="Pangunahing pagsubaybay" +GameCapture="Makuha ang Laro" +GameCapture.AnyFullscreen="Kumuha ng kahit na anong fullscreen ng aplikasyon" +GameCapture.CaptureWindow="Kumuha ng tiyak na window" +GameCapture.UseHotkey="Kumuha ng pangbungad na window kasama ang hotkey" +GameCapture.ForceScaling="Pwersahang Pagsusukat" +GameCapture.ScaleRes="Antas ng Paglutas" +GameCapture.LimitFramerate="Limitahan ang pagkuha ng framerate" +GameCapture.CaptureOverlays="Kumuha ng ikatlong-parte ng mga overlays (tulad ng koponan)" +GameCapture.AntiCheatHook="Gamitin ang iwas-daya para sa pagkatugma ng hook" +GameCapture.HotkeyStart="Kumuha ng pangbungad na window" +GameCapture.HotkeyStop="I-de-aktibo ang pagkuha" +Mode="Paraan" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/he-IL.ini
Added
@@ -0,0 +1,26 @@ +MonitorCapture="לכידת תצוגה" +WindowCapture="לכידת חלון" +WindowCapture.Window="חלון" +WindowCapture.Priority="חלון התאמת עדיפות" +WindowCapture.Priority.Title="כותרת חלון חייבת להתאים" +WindowCapture.Priority.Class="התאם כותרת, אחרת מצא חלון מאותו סוג" +WindowCapture.Priority.Exe="התאם כותרת, אחרת תמצא חלון של אותו קובץ הפעלה" +CaptureCursor="לכד סמן" +Compatibility="מתאם מרובה תאימות" +SLIFix="SLI/Crossfire מצב לכידה (איטי)" +AllowTransparency="אפשר שקיפות" +Monitor="צג" +PrimaryMonitor="צג ראשי" +GameCapture="לכידת משחק" +GameCapture.AnyFullscreen="לכוד כל יישום מסך מלא" +GameCapture.CaptureWindow="לכידת חלון ספציפי" +GameCapture.UseHotkey="לכוד חלון חזית עם hotkey" +GameCapture.ForceScaling="הכרח שינוי גודל" +GameCapture.ScaleRes="גודל רזולוציה" +GameCapture.LimitFramerate="מגבלת לכידת קצב פריימים" +GameCapture.CaptureOverlays="לכידת כיסוי צד שלישי (כגון סטים)" +GameCapture.AntiCheatHook="השתמש באנטי-צ'יט לרמות הוק" +GameCapture.HotkeyStart="לכידת חלון חזית" +GameCapture.HotkeyStop="בטל לכידה" +Mode="מצב" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/tl-PH.ini
Added
@@ -0,0 +1,26 @@ +MonitorCapture="Mag Capture ng Display" +WindowCapture="Mag Capture ng Window" +WindowCapture.Window="Ang Window" +WindowCapture.Priority="Ang Match Priority ng Window" +WindowCapture.Priority.Title="Ang paksa ay dapat tumugma sa Window" +WindowCapture.Priority.Class="Tumugma ang paksa, kung hindi hanapin ang kapareho" +WindowCapture.Priority.Exe="Tumugma ang paksa, kung hindi hanapin ang kaparehong pinatutupad" +CaptureCursor="Ang Capture Cursor" +Compatibility="Maraming-adapter Compatibility" +SLIFix="SLI/Crossfire Capture Mode (Mahina)" +AllowTransparency="Hayaan ang Transparency" +Monitor="Ang Display" +PrimaryMonitor="Ang Primirong Monitor" +GameCapture="Ang GameCapture" +GameCapture.AnyFullscreen="Mag-capture ng kahit alin sa fullscreen na aplikasyon" +GameCapture.CaptureWindow="Mag-capture ng partikular na window" +GameCapture.UseHotkey="Mag-capture ng foreground window kasama ang hotkey" +GameCapture.ForceScaling="Pwersa ng Scaling" +GameCapture.ScaleRes="Resolusyon ng Scale" +GameCapture.LimitFramerate="Limitahan ang capture framerate" +GameCapture.CaptureOverlays="Mag-capture ng mga third-party overlays (katulad ng steam)" +GameCapture.AntiCheatHook="Gumamit ng pangkontra-cheat compatibility hook" +GameCapture.HotkeyStart="Mag-capture ng foreground window" +GameCapture.HotkeyStop="I-deactivate ang capture" +Mode="Ang Moda" +
View file
obs-studio-21.0.3.tar.xz/plugins/win-capture/data/locale/zh-CN.ini -> obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/zh-CN.ini
Changed
@@ -7,6 +7,7 @@ WindowCapture.Priority.Exe="匹配标题, 否则查找同样可执行程序的窗口" CaptureCursor="捕捉光标" Compatibility="多适配器的兼容性" +SLIFix="SLI/Crossfire 捕获模式 (慢)" AllowTransparency="允许透明度" Monitor="显示器" PrimaryMonitor="主监视器"
View file
obs-studio-21.0.3.tar.xz/plugins/win-capture/data/locale/zh-TW.ini -> obs-studio-21.1.2.tar.xz/plugins/win-capture/data/locale/zh-TW.ini
Changed
@@ -7,6 +7,7 @@ WindowCapture.Priority.Exe="與標題相符,如沒有則找尋相同執行檔的視窗" CaptureCursor="擷取游標" Compatibility="多顯示卡相容性" +SLIFix="SLI/Crossfire擷取模式(慢)" AllowTransparency="允許透明" Monitor="顯示器" PrimaryMonitor="主顯示器"
View file
obs-studio-21.0.3.tar.xz/plugins/win-capture/game-capture.c -> obs-studio-21.1.2.tar.xz/plugins/win-capture/game-capture.c
Changed
@@ -456,7 +456,7 @@ if (pressed && gc->config.mode == CAPTURE_MODE_HOTKEY) { info("Activate hotkey pressed"); os_atomic_set_long(&gc->hotkey_window, - (long)GetForegroundWindow()); + (long)(uintptr_t)GetForegroundWindow()); os_atomic_set_bool(&gc->deactivate_hook, true); os_atomic_set_bool(&gc->activate_hook_now, true); } @@ -1582,7 +1582,8 @@ bool activate_now = os_atomic_set_bool(&gc->activate_hook_now, false); if (activate_now) { - HWND hwnd = (HWND)os_atomic_load_long(&gc->hotkey_window); + HWND hwnd = (HWND)(uintptr_t)os_atomic_load_long( + &gc->hotkey_window); if (is_uwp_window(hwnd)) hwnd = get_uwp_actual_window(hwnd);
View file
obs-studio-21.0.3.tar.xz/plugins/win-capture/get-graphics-offsets/d3d9-offsets.cpp -> obs-studio-21.1.2.tar.xz/plugins/win-capture/get-graphics-offsets/d3d9-offsets.cpp
Changed
@@ -95,7 +95,13 @@ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0xF8, 0xF8, 0x00, 0x00, 0x00, 0x00 - } + }, + { + 0xF8, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0x00, + 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00 + }, }; static const uint8_t mask_cmp[][MAX_CMP_SIZE] = { @@ -124,6 +130,21 @@ 0x39, 0x80, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x40, 0xB8, 0x00, 0x00, 0x00, 0x00 + }, + /* + * Windows 10 April 2018 + * 49 8B 87 58 40 00 00 mov rax, [r15+4058h] + * 39 98 C0 53 00 00 cmp [rax+53C0h], ebx + * 75 12 jnz short loc_1800A7FEC + * 48 8D 15 7F B6 09 00 lea rdx, addrErrorMsg + * + * Note: different instructions, last byte skipped due to MAX_CMP_SIZE + */ + { + 0x48, 0x8B, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x39, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x75, 0x00, + 0x48, 0x8D, 0x00, 0x00, 0x00, 0x00 } }; @@ -131,6 +152,7 @@ static const uint32_t code_offsets[][2] = { {3, 10}, {3, 9}, + {3, 9}, }; #else @@ -148,7 +170,13 @@ 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00, 0x00 - } + }, + { + 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0xFF, + 0xFF, 0x00, + 0xFF, 0x00, 0x00, 0x00, 0x00 + }, }; static const uint8_t mask_cmp[][MAX_CMP_SIZE] = { @@ -177,6 +205,20 @@ 0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x75, 0x00, 0x68, 0x00, 0x00, 0x00, 0x00 + }, + + /* + * Windows 10 April 2018 Update + * 8B 86 68 2B 00 00 mov eax, [esi+2B68h] + * 83 B8 F4 4D 00 00 00 cmp dword ptr [eax+4DF4h], 0 + * 75 0F jnz short loc_100D9A9C + * BA 08 71 01 10 mov edx, offset errMsg + */ + { + 0x8B, 0x80, 0x00, 0x00, 0x00, 0x00, + 0x83, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x75, 0x00, + 0xBA, 0x00, 0x00, 0x00, 0x00 } }; @@ -184,6 +226,7 @@ static const uint32_t code_offsets[][2] = { {2, 8}, {2, 8}, + {2, 8}, }; #endif
View file
obs-studio-21.0.3.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c -> obs-studio-21.1.2.tar.xz/plugins/win-capture/graphics-hook/graphics-hook.c
Changed
@@ -690,7 +690,7 @@ uint32_t tex_size = cy * pitch; uint32_t aligned_header = ALIGN(sizeof(struct shmem_data), 32); uint32_t aligned_tex = ALIGN(tex_size, 32); - uint32_t total_size = aligned_header + aligned_tex * 2; + uint32_t total_size = aligned_header + aligned_tex * 2 + 32; uintptr_t align_pos; if (!init_shared_info(total_size)) { @@ -706,6 +706,9 @@ align_pos &= ~(32 - 1); align_pos -= (uintptr_t)shmem_info; + if (align_pos < sizeof(struct shmem_data)) + align_pos += 32; + (*data)->last_tex = -1; (*data)->tex1_offset = (uint32_t)align_pos; (*data)->tex2_offset = (*data)->tex1_offset + aligned_tex;
View file
obs-studio-21.0.3.tar.xz/plugins/win-capture/nt-stuff.h -> obs-studio-21.1.2.tar.xz/plugins/win-capture/nt-stuff.h
Changed
@@ -140,7 +140,7 @@ OBS_SYSTEM_PROCESS_INFORMATION2 *spi = data; for (;;) { - if (spi->UniqueProcessId == (HANDLE)process_id) { + if (spi->UniqueProcessId == (HANDLE)(DWORD_PTR)process_id) { break; } @@ -156,7 +156,7 @@ sti = (OBS_SYSTEM_THREAD_INFORMATION*)((BYTE*)spi + sizeof(*spi)); for (ULONG i = 0; i < spi->ThreadCount; i++) { - if (sti[i].UniqueThreadId == (HANDLE)thread_id) { + if (sti[i].UniqueThreadId == (HANDLE)(DWORD_PTR)thread_id) { info = &sti[i]; break; }
View file
obs-studio-21.1.2.tar.xz/plugins/win-dshow/data/locale/fil-PH.ini
Added
@@ -0,0 +1,39 @@ +VideoCaptureDevice="Pagkuha ng Bidyo na device" +Device="Device" +ColorSpace="Kulay sa Pagitan ng YUV" +ColorSpace.Default="I-Default" +ColorRange="Saklaw ng Kulat ng YUV" +ColorRange.Partial="Partial" +ColorRange.Full="Puno" +ConfigureAudio="I-Configure ang Audio" +ConfigureVideo="Ang Configure Bidyo" +ConfigureCrossbar="I-Configure ang Crossbar" +ResFPSType="Ang Resolusyon/Tipo ng FPS" +ResFPSType.Custom="I-Custom" +ResFPSType.DevPreferred="I-Device Default" +FPS.Matching="I-Match Output FPS" +FPS.Highest="Pinakamataas na FPS" +Resolution="Ang Resolusyon" +VideoFormat="Ang Bidyo Format" +VideoFormat.Any="Kahit Ano" +VideoFormat.Unknown="Unknown (%1)" +AudioOutputMode="Ang Audio Output Mode" +AudioOutputMode.Capture="I-Capture lamang ang audio" +AudioOutputMode.DirectSound="Ang Awput desktop audio (DirectSound)" +AudioOutputMode.WaveOut="Ang Output desktop audio (WaveOut)" +UseCustomAudioDevice="Gamitin ang custom audio device" +AudioDevice="Ang Audio Device" +Buffering="Nag Buffering" +Buffering.ToolTip="Kapag pinagana, buffer video/audi datus para masiguro ang smoothest at pinakamainam\ntumpak na possibleng playback, pero nadagdagan ng latency. Kapag gamit\nnagbuffering na may bidyo capture kard, inirekomenda na itakda ang kard at ang \nprogram sa parehong framerate para sa magandang resulta.\n\nKapag di pinagana, tiyakin na mababa nag latency playback, pero kapalit nito ang frame\nplayback accuracy. Ito ay perpekto sa mukha ng kamera, o kaya gusto gumamit ng \nprogram's preview window para i-play ang console.\n\nAuto-detect (default) itakda ito para ipagana kung and device ay delay, at di pinagana\nkung ito ay walang delay." +Buffering.AutoDetect="I-Auto-Detect" +Buffering.Enable="I-Enable" +Buffering.Disable="I-Disable" +Activate="I-Activate" +Deactivate="I-Deactivate" +FlipVertically="I-paltik patayo" +DeactivateWhenNotShowing="I-Deactivate kapag di nagpapakita" + +Bitrate="Bitrate" +Encoder.C985="Ang AVerMedia H.264 Encoder (c985)" +Encoder.C353="Ang AVerMedia H.264 Encoder" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-dshow/data/locale/he-IL.ini
Added
@@ -0,0 +1,38 @@ +VideoCaptureDevice="התקן לכידת וידאו" +Device="התקן" +ColorSpace="מרחב צבע YUV" +ColorSpace.Default="ברירת מחדל" +ColorRange="טווח צבע YUV" +ColorRange.Partial="חלקי" +ColorRange.Full="מלא" +ConfigureAudio="הגדר שמע" +ConfigureVideo="הגדר וידאו" +ConfigureCrossbar="קביעת תצורה של המוט" +ResFPSType="סוג רזולוציה/קצב פריימים לשנייה" +ResFPSType.Custom="מותאם אישית" +ResFPSType.DevPreferred="התקן ברירת מחדל" +FPS.Matching="התאמת פלט קצב פריימים לשנייה" +FPS.Highest="קצב הפריימים לשנייה הגבוה ביותר" +Resolution="רזולוציה" +VideoFormat="פורמט וידאו" +VideoFormat.Any="כל" +VideoFormat.Unknown="לא ידוע (1%)" +AudioOutputMode="מצב פלט קול" +AudioOutputMode.Capture="לכידת שמע בלבד" +AudioOutputMode.DirectSound="פלט שמע בשולחן העבודה (DirectSound)" +AudioOutputMode.WaveOut="פלט שמע בשולחן העבודה (צליל יוצא)" +UseCustomAudioDevice="השתמש בהתקן שמע מותאם אישית" +AudioDevice="התקן שמע" +Buffering="אגירה" +Buffering.ToolTip="כאשר מאופשר, מאגר נתונים וידאו / אודיו כדי להבטיח את ההשמעה חלקה ביותר \n accurate אפשרי, אבל במחיר של חביון מוגברת. בעת שימוש \n בכביסה עם כרטיס לכידת וידאו, מומלץ להגדיר את הכרטיס ואת \ nprogram לאותו פרמטרט לקבלת התוצאות הטובות ביותר. \n\n כאשר הוא מושבת, מבטיח השמעת חביון נמוכה ביותר, אך במחיר של מסגרת \n דיוק חזרה. זה אידיאלי למצלמות פנים, או כאשר ברצונך להשתמש בחלון התצוגה המקדימה של \n כדי להציג קונסולה. \n\n גילוי אוטומטי (ברירת מחדל) מגדיר אותו כך שאם המכשיר יש עיכוב, והוא מושבת \ nif ללא עיכוב." +Buffering.AutoDetect="זיהוי אוטומטי" +Buffering.Enable="אפשר" +Buffering.Disable="בטל" +Activate="הפעל" +Deactivate="השבת" +FlipVertically="הפוך אנכית" +DeactivateWhenNotShowing="השבת כאשר לא נראה" + +Bitrate="קצב נתונים" +Encoder.C985="מקודד AverMedia H.264 (c985)" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-dshow/data/locale/tl-PH.ini
Added
@@ -0,0 +1,39 @@ +VideoCaptureDevice="Ang Video Capture Device" +Device="Ang Device" +ColorSpace="Ang Kulay Ispasyo ng YUV" +ColorSpace.Default="Mga Default" +ColorRange="Ang Kulay Hangganan ng YUV" +ColorRange.Partial="Pang-una" +ColorRange.Full="Lahat" +ConfigureAudio="I-configure ang Audio" +ConfigureVideo="I-configure ang Video" +ConfigureCrossbar="I-configure ang Crossbar" +ResFPSType="Resolusyon/FPS na Tipo" +ResFPSType.Custom="Ang Custom" +ResFPSType.DevPreferred="Ang Default ng Device" +FPS.Matching="I-match ang Output ng FPS" +FPS.Highest="Pinakamataas na FPS" +Resolution="Resolusyon" +VideoFormat="Ang format ng video" +VideoFormat.Any="Kahit ano" +VideoFormat.Unknown="Hindi matukoy (%1)" +AudioOutputMode="Ang Audio Output Mode" +AudioOutputMode.Capture="Mag-capture ng mga audio lamang" +AudioOutputMode.DirectSound="Ang kinalabasan ng desktop audio (DirektangTunog)" +AudioOutputMode.WaveOut="Ang kinalabasan ng desktop audio (WaveOut)" +UseCustomAudioDevice="Gumamit ng mga audio device" +AudioDevice="Mga Audio Device" +Buffering="Ang Buffering" +Buffering.ToolTip="Kapag pinagana na, ang buffers ng video/audio data ay para masiguro ang pinakamaayos at lahat\nsakto ang posibleng playback, ngunit ang kapalit ay ang pagtaas ng latency. Kung gamit\nbuffering kasama ang video capture na card, inirekomendana i-set angcard at ang\nprograma sa mga kaparehong framerate para sa maayos na resulta.\n\nKung hindi pinagana, tiyakin ang pinakamamabang latency playback, pero sa paggamit ng frame\nplayback na sakto. Ito ay tama para sa mukha ng camera, or kung gusto mong gamitin ang\nang preview ng programa sa window para maglaro ng console.\n\nAwtomatik-detect (default) ang i-set upang mapagana kung ang device ay nagkaroon ng delay, at hindi paganahin\nkung walang delay." +Buffering.AutoDetect="Awtomatik-detect" +Buffering.Enable="Paganahin" +Buffering.Disable="Hindi paganahin" +Activate="Gawing aktibo" +Deactivate="Ihinto ang pagiging aktibo" +FlipVertically="Patayong i-flip" +DeactivateWhenNotShowing="Ihinto ang pagiging aktibo kung walangpinapakita" + +Bitrate="Ang Bitrate" +Encoder.C985="Ang AVerMedia H.264 Encoder (c985)" +Encoder.C353="Ang AVerMedia H.264 Encoder" +
View file
obs-studio-21.0.3.tar.xz/plugins/win-mf/CMakeLists.txt -> obs-studio-21.1.2.tar.xz/plugins/win-mf/CMakeLists.txt
Changed
@@ -1,32 +1,58 @@ project(win-mf) -set(win-mf_SOURCES - mf-plugin.cpp - mf-aac.cpp - mf-aac-encoder.cpp - mf-common.cpp - mf-encoder-descriptor.cpp - mf-h264.cpp - mf-h264-encoder.cpp) - -set(win-mf_HEADERS - mf-common.hpp - mf-encoder-descriptor.hpp - mf-aac-encoder.hpp - mf-h264-encoder.hpp) +set(ENABLE_WINMF FALSE CACHE BOOL "Enables the now deprecated win-mf plugin") + +configure_file( + "${CMAKE_CURRENT_SOURCE_DIR}/mf-config.hpp.in" + "${CMAKE_CURRENT_BINARY_DIR}/mf-config.hpp") + +set(win-mf_config_HEADERS + "${CMAKE_CURRENT_BINARY_DIR}/mf-config.hpp") + +if(ENABLE_WINMF) + set(win-mf_SOURCES + mf-plugin.cpp + mf-aac.cpp + mf-aac-encoder.cpp + mf-common.cpp + mf-encoder-descriptor.cpp + mf-h264.cpp + mf-h264-encoder.cpp) + + set(win-mf_HEADERS + mf-common.hpp + mf-encoder-descriptor.hpp + mf-aac-encoder.hpp + mf-h264-encoder.hpp) + + set(win-mf_DEPS + d3d9 + dxva2 + uuid + mfplat + mfuuid + mf + wmcodecdspuuid) +else() + set(win-mf_SOURCES + mf-plugin.cpp) +endif() add_library(win-mf MODULE + ${win-mf_config_HEADERS} ${win-mf_SOURCES} ${win-mf_HEADERS}) target_link_libraries(win-mf - d3d9 - dxva2 - uuid - mfplat - mfuuid - mf - wmcodecdspuuid + ${win-mf_DEPS} libobs) -install_obs_plugin_with_data(win-mf data) +target_include_directories(win-mf + PUBLIC + "$<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}>") + +if(ENABLE_WINMF) + install_obs_plugin_with_data(win-mf data) +else() + install_obs_plugin(win-mf) +endif()
View file
obs-studio-21.1.2.tar.xz/plugins/win-mf/data/locale/fil-PH.ini
Added
@@ -0,0 +1,30 @@ +MFAACEnc="Saligan ng Media AAC Enkoder" +Bitrate="Bitreyt" + +MF.H264.EncoderName="Saligan ng Media H264 Encoder" +MF.H264.Encoder="Pangalan ng Encoder" +MF.H264.LowLatency="Mababang Pagwalang-kilos (Huwag paganahin sa muling pag-order ng frame)" +MF.H264.BFrames="Magkakasunod na pagbilang ng B-Frame" +MF.H264.CustomBufsize="Gamitin ang Pasadyang Sukat ng Buffer" +MF.H264.BufferSize="Sukat ng Buffer" +MF.H264.CustomMaxBitrate="Gamitin ang pasadyang Max Bitrate" +MF.H264.Bitrate="Bitreyt" +MF.H264.MaxBitrate="Max Bitreyt" +MF.H264.KeyframeIntervalSec="Pagitan ng Keyframe (segundo, 0=awto)" +MF.H264.RateControl="Pagkontral ng Rate" +MF.H264.CBR="CBR (Patuloy na Bitrate)" +MF.H264.VBR="VBR (Baryante Bitrate)" +MF.H264.CQP="CQP (Patuloy na Kalidad)" +MF.H264.MinQP="Pinakamababang QP" +MF.H264.MaxQP="Pinakamataas QP" +MF.H264.QPI="QP Ay-Freym" +MF.H264.QPP="QP Pi-Freym" +MF.H264.QPB="QP Bi-Freym" +MF.H264.Profile="Propayl" +MF.H264.Advanced="Masulong" + +MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Enkoder" +MF.H264.EncoderHWAMD="AMD Coding Video ng Makina H. 264 Encoder (Pundasyon ng Media)" +MF.H264.EncoderHWIntel="Mabilis na Intel Sync H.264 Encoder (Pundasyon ng Media)" +MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Pundasyon ng Media)" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-mf/data/locale/he-IL.ini
Added
@@ -0,0 +1,30 @@ +MFAACEnc="מקודד מדיה על בסיס AAC" +Bitrate="קצב נתונים" + +MF.H264.EncoderName="מקודד מדיה על בסיס H264" +MF.H264.Encoder="שם מקודד" +MF.H264.LowLatency="השהיה נמוכה (ביטול מסגרת הזמנה-חדשה)" +MF.H264.BFrames="ספירה B-מסגרת רצופה" +MF.H264.CustomBufsize="השתמש בגודל מותאם אישית לאוגר" +MF.H264.BufferSize="גודל אוגר" +MF.H264.CustomMaxBitrate="שימוש מותאם אישית במקסימום קצב נתונים" +MF.H264.Bitrate="קצב נתונים" +MF.H264.MaxBitrate="מקסימום קצב נתונים" +MF.H264.KeyframeIntervalSec="מרווח ערך המפתח פריים בשניות (0=אוטומטי)" +MF.H264.RateControl="בקרת קצב" +MF.H264.CBR="CBR(קצב נתונים קבוע)" +MF.H264.VBR="VBR(קצב נתונים משתנה)" +MF.H264.CQP="CQP(איכות קבועה)" +MF.H264.MinQP="מינימום QP" +MF.H264.MaxQP="מקסימום QP" +MF.H264.QPI="מסגרת-QP" +MF.H264.QPP="P-מסגרת QP" +MF.H264.QPB="B-מסגרת QP" +MF.H264.Profile="פרופיל" +MF.H264.Advanced="מתקדם" + +MF.H264.EncoderSWMicrosoft="מקודד תוכנת מייקרוסופט H.264" +MF.H264.EncoderHWAMD="קידוד מנוע AMD H.264 מקודד (בסיס מדיה)" +MF.H264.EncoderHWIntel="סנכרון מהיר Intel H.264 מקודד (בסיס מדיה)" +MF.H264.EncoderHWNVIDIA="מקודד NVIDIA NVENC H.264 מקודד (בסיס מדיה)" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-mf/data/locale/tl-PH.ini
Added
@@ -0,0 +1,30 @@ +MFAACEnc="Ang Media Foundation AAC Encoder" +Bitrate="Ang Bitrate" + +MF.H264.EncoderName="Ang Media Foundation H264 Encoder" +MF.H264.Encoder="Pangalan ng Encoder" +MF.H264.LowLatency="Mababang Latency (Hindi paganahin ang frame re-ordering)" +MF.H264.BFrames="Magkasunod na B-Frame na pagbilang" +MF.H264.CustomBufsize="Gumamit ng Custom Buffer Size" +MF.H264.BufferSize="Ang Buffer Size" +MF.H264.CustomMaxBitrate="Gumamit ng Custom Max Bitrate" +MF.H264.Bitrate="Ang Bitrate" +MF.H264.MaxBitrate="Ang pinakamataas na Bitrate" +MF.H264.KeyframeIntervalSec="Ang Keyframe Interval (segundos, 0=awtomatik)" +MF.H264.RateControl="Ang Rate ng Kontrol" +MF.H264.CBR="Ang CBR (Constant Bitrate)" +MF.H264.VBR="Ang VBR (Variable Bitrate)" +MF.H264.CQP="Ang VBR (Variable Bitrate)" +MF.H264.MinQP="Pinakamaliit QP" +MF.H264.MaxQP="Pinakamataas QP" +MF.H264.QPI="Ang QP I-Frame" +MF.H264.QPP="Ang QP P-Frame" +MF.H264.QPB="Ang QP B-Frame" +MF.H264.Profile="Ang Profile" +MF.H264.Advanced="Advanced" + +MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Encoder" +MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Encoder (Media Foundation)" +MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Encoder (Media Foundation)" +MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Encoder (Media Foundation)" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-mf/mf-config.hpp.in
Added
@@ -0,0 +1,17 @@ +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef ON +#define ON 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +#ifndef OFF +#define OFF 0 +#endif + +#define ENABLE_WINMF @ENABLE_WINMF@
View file
obs-studio-21.0.3.tar.xz/plugins/win-mf/mf-plugin.cpp -> obs-studio-21.1.2.tar.xz/plugins/win-mf/mf-plugin.cpp
Changed
@@ -1,26 +1,36 @@ #include <obs-module.h> -#include <util/profiler.h> +#include "mf-config.hpp" +#if ENABLE_WINMF +#include <util/profiler.h> #include "mf-common.hpp" extern "C" extern void RegisterMFAACEncoder(); extern void RegisterMFH264Encoders(); +#endif extern "C" bool obs_module_load(void) { +#if ENABLE_WINMF MFStartup(MF_VERSION, MFSTARTUP_FULL); RegisterMFAACEncoder(); RegisterMFH264Encoders(); +#endif return true; } extern "C" void obs_module_unload(void) { +#if ENABLE_WINMF MFShutdown(); +#endif } OBS_DECLARE_MODULE() + +#if ENABLE_WINMF OBS_MODULE_USE_DEFAULT_LOCALE("win-mf", "en-US") +#endif
View file
obs-studio-21.1.2.tar.xz/plugins/win-wasapi/data/locale/fil-PH.ini
Added
@@ -0,0 +1,6 @@ +AudioInput="Pagkuha ng Pangpasok sa Awdyio" +AudioOutput="Kumuha ng Palabas na Awdiyo" +Device="Aparato" +Default="Kawalan" +UseDeviceTiming="Gamitin ang Kawalan ng mga selyo ng oras" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-wasapi/data/locale/he-IL.ini
Added
@@ -0,0 +1,6 @@ +AudioInput="לכידת קלט שמע" +AudioOutput="לכידת פלט קולי" +Device="התקן" +Default="ברירת מחדל" +UseDeviceTiming="השתמש בהתקן חותמת זמן" +
View file
obs-studio-21.1.2.tar.xz/plugins/win-wasapi/data/locale/tl-PH.ini
Added
@@ -0,0 +1,6 @@ +AudioInput="Pampasok Audio Capture" +AudioOutput="Pamlabas na Audio Capture" +Device="Ang Device" +Default="Ang Default" +UseDeviceTiming="Gumamit ng Device Timestamps" +
Locations
Projects
Search
Status Monitor
Help
Open Build Service
OBS Manuals
API Documentation
OBS Portal
Reporting a Bug
Contact
Mailing List
Forums
Chat (IRC)
Twitter
Open Build Service (OBS)
is an
openSUSE project
.