Bladeren bron

plugins: Drop win-mf

The win-mf plugin is deprecated, and disabled by default. Let's drop
it entirely.
Georges Basile Stavracas Neto 3 jaren geleden
bovenliggende
commit
4ab9cd1005
69 gewijzigde bestanden met toevoegingen van 0 en 4166 verwijderingen
  1. 0 1
      plugins/CMakeLists.txt
  2. 0 3
      plugins/win-mf/.clang-format
  3. 0 49
      plugins/win-mf/CMakeLists.txt
  4. 0 24
      plugins/win-mf/data/locale/ar-SA.ini
  5. 0 12
      plugins/win-mf/data/locale/ba-RU.ini
  6. 0 12
      plugins/win-mf/data/locale/bg-BG.ini
  7. 0 26
      plugins/win-mf/data/locale/bn-BD.ini
  8. 0 24
      plugins/win-mf/data/locale/ca-ES.ini
  9. 0 21
      plugins/win-mf/data/locale/cs-CZ.ini
  10. 0 21
      plugins/win-mf/data/locale/da-DK.ini
  11. 0 23
      plugins/win-mf/data/locale/de-DE.ini
  12. 0 27
      plugins/win-mf/data/locale/el-GR.ini
  13. 0 29
      plugins/win-mf/data/locale/en-US.ini
  14. 0 24
      plugins/win-mf/data/locale/es-ES.ini
  15. 0 27
      plugins/win-mf/data/locale/et-EE.ini
  16. 0 27
      plugins/win-mf/data/locale/eu-ES.ini
  17. 0 27
      plugins/win-mf/data/locale/fa-IR.ini
  18. 0 24
      plugins/win-mf/data/locale/fi-FI.ini
  19. 0 26
      plugins/win-mf/data/locale/fil-PH.ini
  20. 0 24
      plugins/win-mf/data/locale/fr-FR.ini
  21. 0 26
      plugins/win-mf/data/locale/gd-GB.ini
  22. 0 24
      plugins/win-mf/data/locale/gl-ES.ini
  23. 0 24
      plugins/win-mf/data/locale/he-IL.ini
  24. 0 24
      plugins/win-mf/data/locale/hi-IN.ini
  25. 0 26
      plugins/win-mf/data/locale/hr-HR.ini
  26. 0 24
      plugins/win-mf/data/locale/hu-HU.ini
  27. 0 27
      plugins/win-mf/data/locale/hy-AM.ini
  28. 0 21
      plugins/win-mf/data/locale/id-ID.ini
  29. 0 27
      plugins/win-mf/data/locale/it-IT.ini
  30. 0 27
      plugins/win-mf/data/locale/ja-JP.ini
  31. 0 27
      plugins/win-mf/data/locale/ka-GE.ini
  32. 0 16
      plugins/win-mf/data/locale/kab-KAB.ini
  33. 0 24
      plugins/win-mf/data/locale/kmr-TR.ini
  34. 0 24
      plugins/win-mf/data/locale/ko-KR.ini
  35. 0 27
      plugins/win-mf/data/locale/ms-MY.ini
  36. 0 23
      plugins/win-mf/data/locale/nb-NO.ini
  37. 0 14
      plugins/win-mf/data/locale/nl-NL.ini
  38. 0 2
      plugins/win-mf/data/locale/nn-NO.ini
  39. 0 1
      plugins/win-mf/data/locale/oc-FR.ini
  40. 0 24
      plugins/win-mf/data/locale/pl-PL.ini
  41. 0 24
      plugins/win-mf/data/locale/pt-BR.ini
  42. 0 24
      plugins/win-mf/data/locale/pt-PT.ini
  43. 0 24
      plugins/win-mf/data/locale/ro-RO.ini
  44. 0 27
      plugins/win-mf/data/locale/ru-RU.ini
  45. 0 25
      plugins/win-mf/data/locale/si-LK.ini
  46. 0 25
      plugins/win-mf/data/locale/sk-SK.ini
  47. 0 27
      plugins/win-mf/data/locale/sl-SI.ini
  48. 0 26
      plugins/win-mf/data/locale/sr-CS.ini
  49. 0 26
      plugins/win-mf/data/locale/sr-SP.ini
  50. 0 24
      plugins/win-mf/data/locale/sv-SE.ini
  51. 0 12
      plugins/win-mf/data/locale/ta-IN.ini
  52. 0 21
      plugins/win-mf/data/locale/tl-PH.ini
  53. 0 26
      plugins/win-mf/data/locale/tr-TR.ini
  54. 0 27
      plugins/win-mf/data/locale/uk-UA.ini
  55. 0 21
      plugins/win-mf/data/locale/vi-VN.ini
  56. 0 27
      plugins/win-mf/data/locale/zh-CN.ini
  57. 0 27
      plugins/win-mf/data/locale/zh-TW.ini
  58. 0 339
      plugins/win-mf/mf-aac-encoder.cpp
  59. 0 91
      plugins/win-mf/mf-aac-encoder.hpp
  60. 0 165
      plugins/win-mf/mf-aac.cpp
  61. 0 384
      plugins/win-mf/mf-common.cpp
  62. 0 61
      plugins/win-mf/mf-common.hpp
  63. 0 17
      plugins/win-mf/mf-config.hpp.in
  64. 0 194
      plugins/win-mf/mf-encoder-descriptor.cpp
  65. 0 76
      plugins/win-mf/mf-encoder-descriptor.hpp
  66. 0 774
      plugins/win-mf/mf-h264-encoder.cpp
  67. 0 175
      plugins/win-mf/mf-h264-encoder.hpp
  68. 0 555
      plugins/win-mf/mf-h264.cpp
  69. 0 39
      plugins/win-mf/mf-plugin.cpp

+ 0 - 1
plugins/CMakeLists.txt

@@ -20,7 +20,6 @@ if(OS_WINDOWS)
   add_subdirectory(win-dshow)
   add_subdirectory(win-capture)
   add_subdirectory(decklink)
-  add_subdirectory(win-mf)
   add_subdirectory(obs-qsv11)
   add_subdirectory(obs-text)
   add_subdirectory(vlc-video)

+ 0 - 3
plugins/win-mf/.clang-format

@@ -1,3 +0,0 @@
-Language: Cpp
-SortIncludes: false
-DisableFormat: true

+ 0 - 49
plugins/win-mf/CMakeLists.txt

@@ -1,49 +0,0 @@
-option(ENABLE_WINMF "Enable building with deprecated win-mf plugin" OFF)
-mark_as_advanced(ENABLE_WINMF)
-
-project(win-mf)
-
-add_library(win-mf MODULE)
-add_library(OBS::win-mf ALIAS win-mf)
-
-set(MODULE_DESCRIPTION "OBS Windows Media Foundations H.264/AAC encoder")
-configure_file(${CMAKE_SOURCE_DIR}/cmake/bundle/windows/obs-module.rc.in
-               win-mf.rc)
-
-target_sources(win-mf PRIVATE win-mf.rc)
-
-if(ENABLE_WINMF)
-  target_sources(
-    win-mf
-    PRIVATE mf-plugin.cpp
-            mf-aac.cpp
-            mf-aac-encoder.cpp
-            mf-aac-encoder.hpp
-            mf-common.cpp
-            mf-common.hpp
-            mf-encoder-descriptor.cpp
-            mf-encoder-descriptor.hpp
-            mf-h264.cpp
-            mf-h264-encoder.cpp
-            mf-h264-encoder.hpp)
-
-  target_link_libraries(
-    win-mf
-    PRIVATE d3d9
-            dxva2
-            uuid
-            mfplat
-            mfuuid
-            mf
-            wmcodecdspuuid)
-
-  target_compile_definitions(win-mf PRIVATE ENABLE_WINMF)
-else()
-  target_sources(win-mf PRIVATE mf-plugin.cpp win-mf.rc)
-endif()
-
-target_link_libraries(win-mf PRIVATE OBS::libobs)
-
-set_target_properties(win-mf PROPERTIES FOLDER "plugins")
-
-setup_plugin_target(win-mf)

+ 0 - 24
plugins/win-mf/data/locale/ar-SA.ini

@@ -1,24 +0,0 @@
-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.Profile="الملف الشخصي"
-MF.H264.Advanced="متقدم"
-MF.H264.EncoderSWMicrosoft="أداة ترميز مايكروسوفت H.264"
-MF.H264.EncoderHWAMD="محرك ترميز فيديو H.264 من AMD (مؤسسة إعلامية)"
-MF.H264.EncoderHWIntel="أداة ترميز إنتل Quick Sync H.264 (مؤسسة إعلامية)"
-MF.H264.EncoderHWNVIDIA="أداة ترميز إنفيديا NVENC H.264 (مؤسسة إعلامية)"

+ 0 - 12
plugins/win-mf/data/locale/ba-RU.ini

@@ -1,12 +0,0 @@
-Bitrate="Битрейт"
-MF.H264.Encoder="Билдәгәрткес исеме"
-MF.H264.BufferSize="Буфер ҙурлығы"
-MF.H264.Bitrate="Битрейт"
-MF.H264.MaxBitrate="Максималь битрейт"
-MF.H264.CBR="CBR (даими битрейт)"
-MF.H264.VBR="VBR (үҙгәреүсән битрейт)"
-MF.H264.MinQP="Минималь QP"
-MF.H264.MaxQP="Максималь QP"
-MF.H264.QPI="QP I-кадр"
-MF.H264.QPP="QP P-кадр"
-MF.H264.QPB="QP B-кадр"

+ 0 - 12
plugins/win-mf/data/locale/bg-BG.ini

@@ -1,12 +0,0 @@
-Bitrate="Битрейт"
-MF.H264.Encoder="Име на енкодера"
-MF.H264.BufferSize="Големина на буфера"
-MF.H264.Bitrate="Битрейт"
-MF.H264.MaxBitrate="Макс. битрейт"
-MF.H264.KeyframeIntervalSec="Интервал между ключови кадри (0=автоматично)"
-MF.H264.MinQP="Минимално QP"
-MF.H264.MaxQP="Максимално QP"
-MF.H264.Profile="Профил"
-MF.H264.Advanced="Разширено"
-MF.H264.EncoderSWMicrosoft="Кодер на софтуер на Майкрософт H.264"
-MF.H264.EncoderHWNVIDIA="Кодиращо ус-тво NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 26
plugins/win-mf/data/locale/bn-BD.ini

@@ -1,26 +0,0 @@
-MFAACEnc="মিডিয়া ফাউন্ডেশন AACএনকোডার"
-Bitrate="বিটরেট"
-MF.H264.EncoderName="Media Foundation H264 এনকোডার"
-MF.H264.Encoder="এনকোডার নাম"
-MF.H264.LowLatency="নিম্ন (Disable কাঠামো পুনরায় ক্রম) সুপ্ত"
-MF.H264.BFrames="ধারাবাহিক বি-ফ্রেমের গণনা"
-MF.H264.CustomBufsize="কৃত্রিম বাফার আকার ব্যবহার করুন"
-MF.H264.BufferSize="বাফারের আয়তন"
-MF.H264.CustomMaxBitrate="কাস্টম ব্যবহার করে সর্বাধিক বিটের হার।"
-MF.H264.Bitrate="বিটরেট"
-MF.H264.MaxBitrate="সর্বোচ্চ বিটরেট"
-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="কিউপি আই-ফ্রেম"
-MF.H264.QPP="কিউপি পি-ফ্রেম"
-MF.H264.QPB="কিউপি বি-ফ্রেম"
-MF.H264.Profile="প্রোফাইল"
-MF.H264.Advanced="উন্নত"
-MF.H264.EncoderSWMicrosoft="Microsoft সফটওয়্যার H.264 এনকোডার"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 এনকোডার (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 এনকোডার (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 এনকোডার (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/ca-ES.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Codificador Media Foundation AAC"
-Bitrate="Taxa de bits"
-MF.H264.EncoderName="Codificador H264 de Media Foundation"
-MF.H264.Encoder="Nom del codificador"
-MF.H264.LowLatency="Baixa latència (desactiva la reorganització de fotogrames)"
-MF.H264.BFrames="Número de B-Frame consecutius"
-MF.H264.CustomBufsize="Utilitza grandària de memòria cau personalitzada"
-MF.H264.BufferSize="Mida de la memòria intermèdia"
-MF.H264.CustomMaxBitrate="Utilitza grandària màxima de taxa de bits personalitzada"
-MF.H264.Bitrate="Taxa de bits"
-MF.H264.MaxBitrate="Taxa de bits màxima"
-MF.H264.KeyframeIntervalSec="Interval de fotogrames clau (0=auto)"
-MF.H264.RateControl="Control de la taxa"
-MF.H264.CBR="CBR (Constant Bitrate, taxa de bits constant)"
-MF.H264.VBR="CBR (Variable Bitrate, taxa de bits variable)"
-MF.H264.CQP="CQP (Constant Quality, qualitat constant)"
-MF.H264.MinQP="QP mínima"
-MF.H264.MaxQP="QP màxima"
-MF.H264.Profile="Perfil"
-MF.H264.Advanced="Avançat"
-MF.H264.EncoderSWMicrosoft="Codificador H.264 de Microsoft Software"
-MF.H264.EncoderHWAMD="Codificador AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Codificador Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Codificador NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 21
plugins/win-mf/data/locale/cs-CZ.ini

@@ -1,21 +0,0 @@
-MFAACEnc="Enkodér Media Foundation AAC"
-MF.H264.EncoderName="Enkodér Media Foundation H264"
-MF.H264.Encoder="Název enkodéru"
-MF.H264.LowLatency="Nízká odezva (zakázat přeřazování snímků)"
-MF.H264.BFrames="Počet po sobě jdoucích B-snímků"
-MF.H264.CustomBufsize="Použít vlastní velikost vyrovnávací paměti"
-MF.H264.BufferSize="Velikost vyrovnávací paměti"
-MF.H264.CustomMaxBitrate="Použít vlastní maximální bitrate"
-MF.H264.MaxBitrate="Maximální bitrate"
-MF.H264.KeyframeIntervalSec="Interval klíč. snímků (0=auto)"
-MF.H264.RateControl="Řízení toku"
-MF.H264.CBR="CBR (Konstantní bitrate)"
-MF.H264.VBR="VBR (Měnící se snímkování)"
-MF.H264.CQP="CQP (Konstantní kvalita)"
-MF.H264.MinQP="Minimální QP"
-MF.H264.MaxQP="Maximální QP"
-MF.H264.QPI="QP I-snímku"
-MF.H264.QPP="QP P-snímku"
-MF.H264.QPB="QP B-snímku"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Rozšířené"

+ 0 - 21
plugins/win-mf/data/locale/da-DK.ini

@@ -1,21 +0,0 @@
-Bitrate="Bit-hastighed"
-MF.H264.Encoder="Encodernavn"
-MF.H264.LowLatency="Lav responstid (deaktiver billedomarrangering)"
-MF.H264.BFrames="Efterfølgende B-frame antal"
-MF.H264.CustomBufsize="Benyt tilpasset bufferstørrelse"
-MF.H264.BufferSize="Bufferstørrelse"
-MF.H264.CustomMaxBitrate="Benyt tilpasset maks. bit-hastighed"
-MF.H264.Bitrate="Bit-hastighed"
-MF.H264.MaxBitrate="Maks. bit-hastighed"
-MF.H264.KeyframeIntervalSec="Keyframe-interval (0=auto)"
-MF.H264.RateControl="Hastighedskontrol"
-MF.H264.CBR="CBR (konstant bit-hastighed)"
-MF.H264.VBR="VBR (variabel bit-hastighed)"
-MF.H264.CQP="CQP (konstant kvalitet)"
-MF.H264.MaxQP="Maksimum QP"
-MF.H264.QPI="QP I-frame"
-MF.H264.QPP="QP P-frame"
-MF.H264.QPB="QP B-frame"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Advanceret"
-MF.H264.EncoderSWMicrosoft="Microsoft software H.264 encoder"

+ 0 - 23
plugins/win-mf/data/locale/de-DE.ini

@@ -1,23 +0,0 @@
-MFAACEnc="Media-Foundation-AAC-Encoder"
-MF.H264.EncoderName="Media-Foundation-H264-Encoder"
-MF.H264.Encoder="Encodername"
-MF.H264.LowLatency="Niedrige Latenz (deaktiviert Frame-Neuanordnung)"
-MF.H264.BFrames="Konsekutive B-Frameanzahl"
-MF.H264.CustomBufsize="Benutzerdefinierte Puffergröße verwenden"
-MF.H264.BufferSize="Puffergröße"
-MF.H264.CustomMaxBitrate="Benutzerdefinierte max. Bitrate verwenden"
-MF.H264.MaxBitrate="Max. Bitrate"
-MF.H264.KeyframeIntervalSec="Keyframeintervall (0 = automatisch)"
-MF.H264.RateControl="Qualitätsregulierungsmethode"
-MF.H264.CBR="CBR (konstante Bitrate)"
-MF.H264.VBR="VBR (variable Bitrate)"
-MF.H264.CQP="CQP (konstante Qualität)"
-MF.H264.QPI="QP-I-Frame"
-MF.H264.QPP="QP-P-Frame"
-MF.H264.QPB="QP-B-Frame"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Erweitert"
-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)"

+ 0 - 27
plugins/win-mf/data/locale/el-GR.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC Κωδικοποιητής"
-Bitrate="Ρυθμός μετάδοσης bit"
-MF.H264.EncoderName="Media Foundation H264 Κωδικοποιητής"
-MF.H264.Encoder="Όνομα κωδικοποιητή"
-MF.H264.LowLatency="Χαμηλή Καθυστέρηση (Απενεργοποίηση αναδιευθέτησης καρέ)"
-MF.H264.BFrames="Αριθμός συνεχόμενων B-πλαισίων"
-MF.H264.CustomBufsize="Χρήση Προσαρμοσμένου Μεγέθους Buffer"
-MF.H264.BufferSize="Μέγεθος buffer"
-MF.H264.CustomMaxBitrate="Χρήση Προσαρμοσμένου Μέγιστου Ρυθμού μετάδοσης bit"
-MF.H264.Bitrate="Ρυθμός μετάδοσης bit"
-MF.H264.MaxBitrate="Μέγιστος ρυθμός μετάδοσης bit"
-MF.H264.KeyframeIntervalSec="Διάστημα Πλαισίου Αναφοράς (0=αυτόματο)"
-MF.H264.RateControl="Έλεγχος ρυθμού"
-MF.H264.CBR="CBR (Σταθερός ρυθμός μετάδοσης bit)"
-MF.H264.VBR="VBR (Μεταβλητός ρυθμός μετάδοσης bit)"
-MF.H264.CQP="CQP (Σταθερή Ποιότητα)"
-MF.H264.MinQP="Ελάχιστο QP"
-MF.H264.MaxQP="Μέγιστο QP"
-MF.H264.QPI="QP Ι-πλαίσιο"
-MF.H264.QPP="QP Π-πλαίσιο"
-MF.H264.QPB="QP Β-πλαίσιο"
-MF.H264.Profile="Προφίλ"
-MF.H264.Advanced="Σύνθετες επιλογές"
-MF.H264.EncoderSWMicrosoft="H.264 Κωδικοποιητής Λογισμικού της Microsoft"
-MF.H264.EncoderHWAMD="AMD κωδικοποίησης κινητήρα H.264 κωδικοποιητής βίντεο (υποδομή πολυμέσων)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 κωδικοποιητής (υποδομή πολυμέσων)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 κωδικοποιητής (υποδομή πολυμέσων)"

+ 0 - 29
plugins/win-mf/data/locale/en-US.ini

@@ -1,29 +0,0 @@
-MFAACEnc="Media Foundation AAC Encoder"
-Bitrate="Bitrate"
-
-MF.H264.EncoderName="Media Foundation H264 Encoder"
-MF.H264.Encoder="Encoder Name"
-MF.H264.LowLatency="Low Latency (Disable frame re-ordering)"
-MF.H264.BFrames="Consecutive B-Frame count"
-MF.H264.CustomBufsize="Use Custom Buffer Size"
-MF.H264.BufferSize="Buffer Size"
-MF.H264.CustomMaxBitrate="Use Custom Max Bitrate"
-MF.H264.Bitrate="Bitrate"
-MF.H264.MaxBitrate="Max Bitrate"
-MF.H264.KeyframeIntervalSec="Keyframe Interval (0=auto)"
-MF.H264.RateControl="Rate Control"
-MF.H264.CBR="CBR (Constant Bitrate)"
-MF.H264.VBR="VBR (Variable Bitrate)"
-MF.H264.CQP="CQP (Constant Quality)"
-MF.H264.MinQP="Minimum QP"
-MF.H264.MaxQP="Maximum QP"
-MF.H264.QPI="QP I-Frame"
-MF.H264.QPP="QP P-Frame"
-MF.H264.QPB="QP B-Frame"
-MF.H264.Profile="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)"

+ 0 - 24
plugins/win-mf/data/locale/es-ES.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Codificador AAC de Media Foundation"
-Bitrate="Tasa de bits"
-MF.H264.EncoderName="Codificador H264 de Media Foundation"
-MF.H264.Encoder="Nombre de codificador"
-MF.H264.LowLatency="Baja latencia (desactivar la reorganización de fotogramas)"
-MF.H264.BFrames="Numero de B-Frame consecutivas"
-MF.H264.CustomBufsize="Usar tamaño de caché personalizado"
-MF.H264.BufferSize="Tamaño de búfer"
-MF.H264.CustomMaxBitrate="Usar tamaño máximo de bitrate personalizado"
-MF.H264.Bitrate="Tasa de bits"
-MF.H264.MaxBitrate="Tasa de bits máxima"
-MF.H264.KeyframeIntervalSec="Intervalo de fotogramas clave (0=auto)"
-MF.H264.RateControl="Control de la frecuencia"
-MF.H264.CBR="CBR (Bitrate constante)"
-MF.H264.VBR="VBR (Bitrate Variable)"
-MF.H264.CQP="CQP (Calidad Constante)"
-MF.H264.MinQP="Mínimo QP"
-MF.H264.MaxQP="Máximo QP"
-MF.H264.Profile="Perfíl"
-MF.H264.Advanced="Avanzado"
-MF.H264.EncoderSWMicrosoft="Codificador H.264 de Microsoft Software"
-MF.H264.EncoderHWAMD="Codificador AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Codificador Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Codificador NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/et-EE.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC kodeerija"
-Bitrate="Bitikiirus"
-MF.H264.EncoderName="Media Foundation H264 kodeerija"
-MF.H264.Encoder="Kodeerija nimi"
-MF.H264.LowLatency="Madal viivitus (Lülitab välja kaadri reorganiseerimise)"
-MF.H264.BFrames="Järjestikuste B-kaadrite arv"
-MF.H264.CustomBufsize="Kasuta kohandatud puhvri suurust"
-MF.H264.BufferSize="Puhvri suurus"
-MF.H264.CustomMaxBitrate="Kasuta kohandatud maksimaalset bitikiirust"
-MF.H264.Bitrate="Bitikiirus"
-MF.H264.MaxBitrate="Maksimaalne bitikiirus"
-MF.H264.KeyframeIntervalSec="Võtmekaadri intervall (0=automaatne)"
-MF.H264.RateControl="Bitrite kontroll"
-MF.H264.CBR="CBR (Pidev bitikiirus)"
-MF.H264.VBR="VBR (muutuv bitikiirus)"
-MF.H264.CQP="CQP (pidev kvaliteet)"
-MF.H264.MinQP="Miinimum QP"
-MF.H264.MaxQP="Miinimum QP"
-MF.H264.QPI="QP I-kaader"
-MF.H264.QPP="QP P-kaader"
-MF.H264.QPB="QP B-kaader"
-MF.H264.Profile="Profiil"
-MF.H264.Advanced="Täpsemad seaded"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 kodeerija"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Kodeerija (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Kodeerija (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Kodeerija (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/eu-ES.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC kodetzailea"
-Bitrate="Bit-tasa"
-MF.H264.EncoderName="Media Foundation H264 kodetzailea"
-MF.H264.Encoder="Kodetzaile Izena"
-MF.H264.LowLatency="Latentzia txikia (ezgaitu fotogramen berrordenatzea)"
-MF.H264.BFrames="B-Frame kontaketa jarraia"
-MF.H264.CustomBufsize="Erabili buffer tamaina pertsonalizatua"
-MF.H264.BufferSize="Buffer tamaina"
-MF.H264.CustomMaxBitrate="Erabili Max Bit-tasa pertsonalizatua"
-MF.H264.Bitrate="Bit-tasa"
-MF.H264.MaxBitrate="Max Bit-tasa"
-MF.H264.KeyframeIntervalSec="Gako-fotogramen tartea (0=automatikoa)"
-MF.H264.RateControl="Tasa kontrola"
-MF.H264.CBR="CBR (Bit-tasa konstantea)"
-MF.H264.VBR="VBR (Bit-tasa aldakorra)"
-MF.H264.CQP="CQP (kalitate konstantea)"
-MF.H264.MinQP="Gutxienezko QP"
-MF.H264.MaxQP="Gehienezko QP"
-MF.H264.QPI="QP I-Fotograma"
-MF.H264.QPP="QP P-Fotograma"
-MF.H264.QPB="QP B-Fotograma"
-MF.H264.Profile="Profila"
-MF.H264.Advanced="Aurreratua"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 kodetzailea"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 kodetzailea (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 kodetzailea (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 kodetzailea (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/fa-IR.ini

@@ -1,27 +0,0 @@
-MFAACEnc="واسط رمزگذار بنیاد AAC"
-Bitrate="نرخ بیت"
-MF.H264.EncoderName="واسط رمزگذار بنیاد H264"
-MF.H264.Encoder="نام رمز گذار"
-MF.H264.LowLatency="تأخیر کم (غیرفعال کردن سفارش مجدد فریم)"
-MF.H264.BFrames="شمارش متوالی B-Frame"
-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="فریم-l QP"
-MF.H264.QPP="فریم P QP"
-MF.H264.QPB="فریم QP B"
-MF.H264.Profile="پروفایل"
-MF.H264.Advanced="پیشرفته"
-MF.H264.EncoderSWMicrosoft="مایکروسافت نرم افزار تخمین H.264"
-MF.H264.EncoderHWAMD="رمزگذار موتور ویدئو AMD H.264 (بنیاد رسانه)"
-MF.H264.EncoderHWIntel="اینتل سریع همگام سازی تخمین H.264 (رسانه بنیاد)"
-MF.H264.EncoderHWNVIDIA="انویدیا NVENC H.264 رمزگذار (رسانه بنیاد)"

+ 0 - 24
plugins/win-mf/data/locale/fi-FI.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Media Foundation AAC-enkooderi"
-Bitrate="Bittinopeus"
-MF.H264.EncoderName="Media Foundation H264 enkooderi"
-MF.H264.Encoder="Enkooderin nimi"
-MF.H264.LowLatency="Matala viive (Poista ruutujen uudelleenjärjestely käytöstä)"
-MF.H264.BFrames="Peräkkäisten B-ruutujen määrä"
-MF.H264.CustomBufsize="Käytä valinnaista puskurin kokoa"
-MF.H264.BufferSize="Puskurin koko"
-MF.H264.CustomMaxBitrate="Käytä mukautettua maksimibittinopeutta"
-MF.H264.Bitrate="Bittinopeus"
-MF.H264.MaxBitrate="Maksimibittinopeus"
-MF.H264.KeyframeIntervalSec="Avainruutujen väli (0=automaattinen)"
-MF.H264.RateControl="Bittinopeuden säätely"
-MF.H264.CBR="CBR (vakiobittinopeus)"
-MF.H264.VBR="VBR (muuttuva bittinopeus)"
-MF.H264.CQP="CQP (vakiolaatu)"
-MF.H264.MinQP="QP-minimi"
-MF.H264.MaxQP="QP-maksimi"
-MF.H264.Profile="Profiili"
-MF.H264.Advanced="Lisäasetukset"
-MF.H264.EncoderSWMicrosoft="Microsoft H.264 ohjelmistopohjainen enkooderi"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 enkooderi (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 enkooderi (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 enkooderi (Media Foundation)"

+ 0 - 26
plugins/win-mf/data/locale/fil-PH.ini

@@ -1,26 +0,0 @@
-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.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)"

+ 0 - 24
plugins/win-mf/data/locale/fr-FR.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Encodeur AAC Media Foundation"
-Bitrate="Débit"
-MF.H264.EncoderName="Encodeur H264 Media Foundation"
-MF.H264.Encoder="Nom de l'encodeur"
-MF.H264.LowLatency="Faible Latence (désactive la réorganisation des images)"
-MF.H264.BFrames="Nombre de B-Frames consécutives"
-MF.H264.CustomBufsize="Utiliser une taille de tampon personnalisée"
-MF.H264.BufferSize="Taille du tampon"
-MF.H264.CustomMaxBitrate="Utiliser un débit maximum personnalisé"
-MF.H264.Bitrate="Débit"
-MF.H264.MaxBitrate="Débit max."
-MF.H264.KeyframeIntervalSec="Intervalle d'images clés (0 = auto)"
-MF.H264.RateControl="Contrôle du débit"
-MF.H264.CBR="CBR (débit constant)"
-MF.H264.VBR="VBR (débit variable)"
-MF.H264.CQP="CQP (qualité constante)"
-MF.H264.MinQP="QP minimal"
-MF.H264.MaxQP="QP maximal"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Options avancées"
-MF.H264.EncoderSWMicrosoft="Encodeur logiciel Microsoft H.264"
-MF.H264.EncoderHWAMD="Encodeur AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Encodeur Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Encodeur NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 26
plugins/win-mf/data/locale/gd-GB.ini

@@ -1,26 +0,0 @@
-MFAACEnc="Inneal-còdachaidh Media Foundation AAC"
-Bitrate="Reat bhiodan"
-MF.H264.EncoderName="Inneal-còdachaidh Media Foundation H264"
-MF.H264.Encoder="Ainm an inneil-chòdachaidh"
-MF.H264.LowLatency="Foillidheachd ìosal (ath-òrdachadh nam frèamaichean à comas)"
-MF.H264.BFrames="Cunntas leantach nam frèamaichean-B"
-MF.H264.CustomBufsize="Cleachd meud bufair gnàthaichte"
-MF.H264.BufferSize="Meud a’ bhufair"
-MF.H264.CustomMaxBitrate="Cleachd reat bhiodan as motha gnàthaichte"
-MF.H264.Bitrate="Reat bhiodan"
-MF.H264.MaxBitrate="Reat bhiodan as motha"
-MF.H264.RateControl="Smachd air an reat"
-MF.H264.CBR="CBR (reat bhiodan cunbhalach)"
-MF.H264.VBR="VBR (reat bhiodan caochlaideach)"
-MF.H264.CQP="CQP (càileachd chunbhalach)"
-MF.H264.MinQP="QP as lugha"
-MF.H264.MaxQP="QP as motha"
-MF.H264.QPI="Frèam-I QP"
-MF.H264.QPP="Frèam-P QP"
-MF.H264.QPB="Frèam-B QP"
-MF.H264.Profile="Pròifil"
-MF.H264.Advanced="Adhartach"
-MF.H264.EncoderSWMicrosoft="Inneal-còdachaidh bathair-bhog Microsoft H.264"
-MF.H264.EncoderHWAMD="Inneal-còdachaidh AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Inneal-còdachaidh Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Inneal-còdachaidh NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/gl-ES.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Codificador AAC de Media Foundation"
-Bitrate="Taxa de bits"
-MF.H264.EncoderName="Codificador H264 de Media Foundation"
-MF.H264.Encoder="Nome do codificador"
-MF.H264.LowLatency="Baixa latencia (desactivar a reorganización de fotogramas)"
-MF.H264.BFrames="Numero de B-Frame consecutivos"
-MF.H264.CustomBufsize="Utilizar tamaño personalizado da memoria temporal"
-MF.H264.BufferSize="Tamaño da memoria temporal"
-MF.H264.CustomMaxBitrate="Usar unha taxa de bits máxima personalizada"
-MF.H264.Bitrate="Taxa de bits"
-MF.H264.MaxBitrate="Taxa de bits máxima"
-MF.H264.KeyframeIntervalSec="Intervalo de fotogramas clave (0=auto)"
-MF.H264.RateControl="Control da taxa"
-MF.H264.CBR="CBR (taxa de bits constante)"
-MF.H264.VBR="VBR (taxa de bits variábel)"
-MF.H264.CQP="CQP (calidade constante)"
-MF.H264.MinQP="QP mínimo"
-MF.H264.MaxQP="QP máximo"
-MF.H264.Profile="Perfil"
-MF.H264.Advanced="Avanzado"
-MF.H264.EncoderSWMicrosoft="Codificador H.264 de Microsoft Software"
-MF.H264.EncoderHWAMD="Codificador AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Codificador Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Codificador NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/he-IL.ini

@@ -1,24 +0,0 @@
-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.Profile="פרופיל"
-MF.H264.Advanced="מתקדם"
-MF.H264.EncoderSWMicrosoft="מקודד תוכנת מייקרוסופט H.264"
-MF.H264.EncoderHWAMD="קידוד מנוע AMD H.264 מקודד (בסיס מדיה)"
-MF.H264.EncoderHWIntel="סנכרון מהיר Intel H.264 מקודד (בסיס מדיה)"
-MF.H264.EncoderHWNVIDIA="מקודד H.264 של NVENC מבית NVIDIA‏ (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/hi-IN.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Media Foundation AAC एनकोडर"
-Bitrate="बिटरेट"
-MF.H264.EncoderName="Media Foundation H264 एनकोडर"
-MF.H264.Encoder="एनकोडर नाम"
-MF.H264.LowLatency="कम विलंबता (फ़्रेम पुनः क्रमित करना अक्षम करें)"
-MF.H264.BFrames="निरन्तर बी-फ़्रेम गणना"
-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.Profile="प्रोफ़ाइल"
-MF.H264.Advanced="उन्नत"
-MF.H264.EncoderSWMicrosoft="माइक्रोसॉफ्ट सॉफ्टवेयर H.264 एनकोडर"
-MF.H264.EncoderHWAMD="AMD वीडियो कोडिंग इंजन H.264 एनकोडर (मीडिया फाउंडेशन)"
-MF.H264.EncoderHWIntel="इंटेल क्विक सिंक H.264 एनकोडर (मीडिया फाउंडेशन)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 एनकोडर (मीडिया फाउंडेशन)"

+ 0 - 26
plugins/win-mf/data/locale/hr-HR.ini

@@ -1,26 +0,0 @@
-MFAACEnc="Media Foundation AAC Enkoder"
-Bitrate="Protok"
-MF.H264.EncoderName="Media Foundation H264 enkoder"
-MF.H264.Encoder="Ime enkodera"
-MF.H264.LowLatency="Nisko kašnjenje (onemogući preraspodelu frejmova)"
-MF.H264.BFrames="Broj uzastopnih B-frejmova"
-MF.H264.CustomBufsize="Koristi posebnu veličinu bafera"
-MF.H264.BufferSize="Veličina bafera"
-MF.H264.CustomMaxBitrate="Koristi poseban maksimalni protok"
-MF.H264.Bitrate="Protok"
-MF.H264.MaxBitrate="Maksimalni protok"
-MF.H264.RateControl="Kontrola protoka"
-MF.H264.CBR="CBR (konstantni protok)"
-MF.H264.VBR="VBR (promenjivi protok)"
-MF.H264.CQP="CQP (konstantan kvalitet)"
-MF.H264.MinQP="Minimalni QP"
-MF.H264.MaxQP="Maksimalni QP"
-MF.H264.QPI="QP I-frejm"
-MF.H264.QPP="QP P-frejm"
-MF.H264.QPB="QP B-frejm"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Napredno"
-MF.H264.EncoderSWMicrosoft="Microsoft softverski H.264 enkoder"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 enkoder (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 enkoder (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 enkoder (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/hu-HU.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Media Foundation AAC kódoló"
-Bitrate="Bitsebesség"
-MF.H264.EncoderName="Media Foundation H264 kódoló"
-MF.H264.Encoder="Kódoló név"
-MF.H264.LowLatency="Alacsony késleltetés (Kikapcsolt képkocka utórendszerezés)"
-MF.H264.BFrames="Egymást követő B-Frame szám"
-MF.H264.CustomBufsize="Egyéni pufferméret használata"
-MF.H264.BufferSize="Pufferméret"
-MF.H264.CustomMaxBitrate="Egyéni maximális bitsebesség használata"
-MF.H264.Bitrate="Bitsebesség"
-MF.H264.MaxBitrate="Max bitsebesség"
-MF.H264.KeyframeIntervalSec="Kulcsképkockák időköze (0=automatikus)"
-MF.H264.RateControl="Sebesség vezérlés"
-MF.H264.CBR="CBR (állandó bitsebesség)"
-MF.H264.VBR="VBR (változó bitsebesség)"
-MF.H264.CQP="CQP (állandó minőség)"
-MF.H264.MinQP="Minimális QP"
-MF.H264.MaxQP="Maximális QP"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Haladó"
-MF.H264.EncoderSWMicrosoft="Microsoft Szoftveres H.264 kódoló"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 kódoló (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 kódoló (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 kódoló (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/hy-AM.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC կոդավորիչ"
-Bitrate="Բիթրեյթ"
-MF.H264.EncoderName="Media Foundation 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 I-կադր"
-MF.H264.QPP="QP P-կադր"
-MF.H264.QPB="QP B-կադր"
-MF.H264.Profile="Պրոֆիլ"
-MF.H264.Advanced="Ընդլայնված"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 կոդավորիչ"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 (Media Foundation) կոդավորիչ"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 (Media Foundation) կոդավորիչ"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 (Media Foundation) կոդավորիչ"

+ 0 - 21
plugins/win-mf/data/locale/id-ID.ini

@@ -1,21 +0,0 @@
-MFAACEnc="Enkoder AAC Media Foundation"
-MF.H264.EncoderName="Enkoder H264 Media Foundation"
-MF.H264.Encoder="Nama Enkoder"
-MF.H264.LowLatency="Latensi Rendah (Nonaktifkan penyusunan ulang frame)"
-MF.H264.BFrames="Hitungan B-Frame berturut-turut"
-MF.H264.CustomBufsize="Gunakan Ukuran Buffer Yang Dapat Disesuaikan"
-MF.H264.BufferSize="Ukuran Buffer"
-MF.H264.CustomMaxBitrate="Gunakan Bitrate Maksimum Yang Dapat Disesuaikan"
-MF.H264.MaxBitrate="Bitrate Maksimum"
-MF.H264.KeyframeIntervalSec="Interval Keyframe (0=otomatis)"
-MF.H264.RateControl="Kontrol Rate"
-MF.H264.CBR="CBR (Bitrate Konstan)"
-MF.H264.VBR="VBR (Bitrate Variabel)"
-MF.H264.CQP="CQP (Kualitas Konstan)"
-MF.H264.MaxQP="Maksimum QP"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Tingkat Lanjut"
-MF.H264.EncoderSWMicrosoft="Enkoder Microsoft Software H.264"
-MF.H264.EncoderHWAMD="Enkoder AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Enkoder Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Enkoder NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/it-IT.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Codifica Media Foundation AAC"
-Bitrate="Velocità in bit"
-MF.H264.EncoderName="Codifica Media Foundation H264"
-MF.H264.Encoder="Nome della codifica"
-MF.H264.LowLatency="Bassa latenza (disattiva il riordinamento dei fotogrammi)"
-MF.H264.BFrames="Numero dei B-Frame consecutivi"
-MF.H264.CustomBufsize="Utilizza una dimensione personalizzata del buffer"
-MF.H264.BufferSize="Dimensioni del buffer"
-MF.H264.CustomMaxBitrate="Utilizza una velocità in bit massima personalizzata"
-MF.H264.Bitrate="Velocità in bit"
-MF.H264.MaxBitrate="Velocità in bit massima"
-MF.H264.KeyframeIntervalSec="Intervallo fotogramma chiave (0=automatico)"
-MF.H264.RateControl="Tipo di controllo della frequenza"
-MF.H264.CBR="CBR (velocità in bit costante)"
-MF.H264.VBR="VBR (velocità in bit variabile)"
-MF.H264.CQP="CQP (qualità costante)"
-MF.H264.MinQP="QP minimo"
-MF.H264.MaxQP="QP massimo"
-MF.H264.QPI="I-Frame QP"
-MF.H264.QPP="P-Frame QP"
-MF.H264.QPB="B-Frame QP"
-MF.H264.Profile="Profilo"
-MF.H264.Advanced="Avanzate"
-MF.H264.EncoderSWMicrosoft="Codifica Microsoft Software H.264"
-MF.H264.EncoderHWAMD="Codifica AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Codifica Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Codifica NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/ja-JP.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC エンコーダ"
-Bitrate="ビットレート"
-MF.H264.EncoderName="Media Foundation 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 I フレーム"
-MF.H264.QPP="QP P フレーム"
-MF.H264.QPB="QP B フレーム"
-MF.H264.Profile="プロファイル"
-MF.H264.Advanced="高度な設定"
-MF.H264.EncoderSWMicrosoft="Microsoft ソフトウェア H.264 エンコーダ"
-MF.H264.EncoderHWAMD="AMD ビデオ符号化エンジン H.264 エンコーダ (Media Foundation)"
-MF.H264.EncoderHWIntel="インテル Quick Sync H.264 エンコーダ (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 エンコーダ (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/ka-GE.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC დამშიფრავი"
-Bitrate="ბიტური სიხშირე"
-MF.H264.EncoderName="Media Foundation 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 I-კადრი"
-MF.H264.QPP="QP P-კადრი"
-MF.H264.QPB="QP B-კადრი"
-MF.H264.Profile="პროფილი"
-MF.H264.Advanced="გაფართოებული"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 დამშიფრავი"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine (VCE) H.264 დამშიფრავი (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 დამშიფრავი (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 დამშიფრავი (Media Foundation)"

+ 0 - 16
plugins/win-mf/data/locale/kab-KAB.ini

@@ -1,16 +0,0 @@
-Bitrate="Aktum"
-MF.H264.Encoder="Isem n usettengal"
-MF.H264.CustomBufsize="Seqdec tiddi yugnen i tkatut n weḥraz"
-MF.H264.BufferSize="Tiddi n tkatut n uḥraz"
-MF.H264.CustomMaxBitrate="Seqdec aktum afellay yugnen"
-MF.H264.Bitrate="Aktum"
-MF.H264.MaxBitrate="Aktum afellay"
-MF.H264.RateControl="Asenqed n uktum"
-MF.H264.MinQP="QP adday"
-MF.H264.MaxQP="QP afellay"
-MF.H264.Profile="Amaɣnu"
-MF.H264.Advanced="Anaẓi"
-MF.H264.EncoderSWMicrosoft="Asettengal Microsoft Software H.264"
-MF.H264.EncoderHWAMD="Asettengal AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Asettengal Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Asettengal NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/kmr-TR.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Kodkerê Media Foundation AAC"
-Bitrate="Rêjeya bitê "
-MF.H264.EncoderName="Media Foundation H264 kodker"
-MF.H264.Encoder="Navê kodker"
-MF.H264.LowLatency="Derengmayîna kêm (Ji nû ve sazkirina çarçoveyê neçalak bike)"
-MF.H264.BFrames="Hejmara B-Çarçoveya li pey hev"
-MF.H264.CustomBufsize="Mezinahiya pêşbîra demkî ya kesanekirî bi kar bîne"
-MF.H264.BufferSize="Mezinahiya pêşbîra demkî"
-MF.H264.CustomMaxBitrate="Rêjeya bîtê herî bilind a kesanekirî bi kar bîne"
-MF.H264.Bitrate="Rêjeya bitê "
-MF.H264.MaxBitrate="Leza bit herî pir"
-MF.H264.KeyframeIntervalSec="Dabeşkera demkî di navbera çarçoveyan de (0=xweber)"
-MF.H264.RateControl="Kontrolkirina rêjeyê"
-MF.H264.CBR="RBN (rêjeya bît a neguhêr )"
-MF.H264.VBR="RBG (rêjeya bît a guhêrî)"
-MF.H264.CQP="KD (kalîteya domdar)"
-MF.H264.MinQP="Kêmtirîn qalîteya wêneyê"
-MF.H264.MaxQP="Baştirîn qalîteya wêneyê"
-MF.H264.Profile="Profîl"
-MF.H264.Advanced="Pêşketî"
-MF.H264.EncoderSWMicrosoft="Kodkerê Microsoft software H.264"
-MF.H264.EncoderHWAMD="Kodkerê AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Kodkerê Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Kodkerê NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/ko-KR.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Media Foundation AAC 인코더"
-Bitrate="비트레이트"
-MF.H264.EncoderName="Media Foundation 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.Profile="프로파일"
-MF.H264.Advanced="고급"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 인코더"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 인코더 (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 인코더 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 인코더 (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/ms-MY.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Pengekod AAC Media Foundation"
-Bitrate="Kadar Bit"
-MF.H264.EncoderName="Pengekod H264 Media Foundation"
-MF.H264.Encoder="Nama Pengekod"
-MF.H264.LowLatency="Kependaman Rendah (Lumpuh penertiban-semula bingkai)"
-MF.H264.BFrames="Kiraan Bingkai-B berturutan"
-MF.H264.CustomBufsize="Guna Saiz Penimbal Suai"
-MF.H264.BufferSize="Saiz Penimbal"
-MF.H264.CustomMaxBitrate="Guna Kadar Bit Maks. Suai"
-MF.H264.Bitrate="Kadar Bit"
-MF.H264.MaxBitrate="Kadar Bit Maks"
-MF.H264.KeyframeIntervalSec="Sela Bingkai Kunci (0=auto)"
-MF.H264.RateControl="Kawalan Kadar"
-MF.H264.CBR="CBR (Kadar Bit Malar)"
-MF.H264.VBR="VBR (Kadar Bit Boleh Ubah)"
-MF.H264.CQP="CQP (Kualiti Malar)"
-MF.H264.MinQP="QP Minimum"
-MF.H264.MaxQP="QP Maksimum"
-MF.H264.QPI="Bingkai-I QP"
-MF.H264.QPP="Bingkai-P QP"
-MF.H264.QPB="Bingkai-B QP"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Lanjutan"
-MF.H264.EncoderSWMicrosoft="Pengekod H.264 Perisian Microsoft"
-MF.H264.EncoderHWAMD="Pengekod H.264 Enjin Pengekodan Video AMD (Media Foundation)"
-MF.H264.EncoderHWIntel="Pengekod H.264 Quick Sync Intel (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Pengekod H.264 NVENC NVIDIA (Media Foundation)"

+ 0 - 23
plugins/win-mf/data/locale/nb-NO.ini

@@ -1,23 +0,0 @@
-MFAACEnc="Media Foundation AAC-koder"
-MF.H264.EncoderName="Media Foundation H264-koder"
-MF.H264.Encoder="Kodernavn"
-MF.H264.LowLatency="Lav latens (Deaktiver bilderearrangering)"
-MF.H264.BFrames="Antall påfølgende B-Frames"
-MF.H264.CustomBufsize="Egendefinert bufferstørrelse"
-MF.H264.BufferSize="Bufferstørrelse"
-MF.H264.CustomMaxBitrate="Bruk tilpasset maks bithastighet"
-MF.H264.Bitrate="Bithastighet"
-MF.H264.MaxBitrate="Maks bithastighet"
-MF.H264.RateControl="Hastighetskontroll"
-MF.H264.CBR="CBR (konstant bithastighet)"
-MF.H264.VBR="VBR (variabel bithastighet)"
-MF.H264.CQP="CQP (konstant kvalitet)"
-MF.H264.MinQP="Minste QP"
-MF.H264.MaxQP="Største QP"
-MF.H264.QPB="QP B-ramme"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Avansert"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264-koder"
-MF.H264.EncoderHWAMD="AMD Video Codec Engine H.264-koder (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264-koder (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264-koder (Media Foundation)"

+ 0 - 14
plugins/win-mf/data/locale/nl-NL.ini

@@ -1,14 +0,0 @@
-MF.H264.Encoder="Encodernaam"
-MF.H264.LowLatency="Low Latency (Geen frames herschikken)"
-MF.H264.BFrames="Aantal opeenvolgende B-Frames"
-MF.H264.CustomBufsize="Aangepaste buffergrootte gebruiken"
-MF.H264.BufferSize="Buffergrootte"
-MF.H264.CustomMaxBitrate="Gebruik Aangepaste Max Bitrate"
-MF.H264.KeyframeIntervalSec="Tijd tussen keyframes (0=auto)"
-MF.H264.CBR="CBR (Constante Bitrate)"
-MF.H264.VBR="VBR (Variabele Bitrate)"
-MF.H264.CQP="CQP (Constante Kwaliteit)"
-MF.H264.MinQP="Minimale QP"
-MF.H264.MaxQP="Maximale QP"
-MF.H264.Profile="Profiel"
-MF.H264.Advanced="Geavanceerd"

+ 0 - 2
plugins/win-mf/data/locale/nn-NO.ini

@@ -1,2 +0,0 @@
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Avansert"

+ 0 - 1
plugins/win-mf/data/locale/oc-FR.ini

@@ -1 +0,0 @@
-MF.H264.Profile="Perfil"

+ 0 - 24
plugins/win-mf/data/locale/pl-PL.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Enkoder Media Foundation AAC"
-Bitrate="Przepływność (bitrate)"
-MF.H264.EncoderName="Enkoder Media Foundation H264"
-MF.H264.Encoder="Nazwa enkodera"
-MF.H264.LowLatency="Niskie opóźnienie (wyłączony re-ordering klatek)"
-MF.H264.BFrames="Liczba kolejnych ramek B-frame"
-MF.H264.CustomBufsize="Użyj własnego rozmiaru bufora"
-MF.H264.BufferSize="Rozmiar bufora"
-MF.H264.CustomMaxBitrate="Użyj własnego maksymalnego rozmiaru bufora"
-MF.H264.Bitrate="Przepływność (bitrate)"
-MF.H264.MaxBitrate="Maksymalna przepływność (bitrate)"
-MF.H264.KeyframeIntervalSec="Odstęp między klatkami kluczowymi (0=automatyczny)"
-MF.H264.RateControl="Kontrola przepływności"
-MF.H264.CBR="CBR (stała wartość przepływności)"
-MF.H264.VBR="VBR (zmienna wartość przepływności)"
-MF.H264.CQP="CQP (stała jakość)"
-MF.H264.MinQP="Minimalna QP"
-MF.H264.MaxQP="Maksymalna QP"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Zaawansowane"
-MF.H264.EncoderSWMicrosoft="Enkoder Microsoft Software H.264"
-MF.H264.EncoderHWAMD="Enkoder AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Enkoder Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Enkoder NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/pt-BR.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Codificador AAC da Media Foundation"
-Bitrate="Taxa de bits"
-MF.H264.EncoderName="Codificador H264 da Media Foundation"
-MF.H264.Encoder="Nome do Codificador"
-MF.H264.LowLatency="Baixa latência (Desativar reordenação de quadros)"
-MF.H264.BFrames="Contagem de B-Frame consecutiva"
-MF.H264.CustomBufsize="Usar Tamado de Buffer Personalizado"
-MF.H264.BufferSize="Tamanho do Buffer"
-MF.H264.CustomMaxBitrate="Usar Taxa Máxima de Bits Personalizada"
-MF.H264.Bitrate="Taxa de Bits"
-MF.H264.MaxBitrate="Taxa de Bits Máxima"
-MF.H264.KeyframeIntervalSec="Intervalo de Keyframe (0=auto)"
-MF.H264.RateControl="Controle da Taxa de Bits"
-MF.H264.CBR="CBR (Taxa de bits constante)"
-MF.H264.VBR="VBR (Taxa de bits variável)"
-MF.H264.CQP="CQP (Qualidade Constante)"
-MF.H264.MinQP="Mínima QP"
-MF.H264.MaxQP="Máxima QP"
-MF.H264.Profile="Perfil"
-MF.H264.Advanced="Avançado"
-MF.H264.EncoderSWMicrosoft="Codificador H.264 da Microsoft"
-MF.H264.EncoderHWAMD="Motor de Codificação de Vídeo H.264 AMD (Media Foundation)"
-MF.H264.EncoderHWIntel="Codificador da Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Codificador da NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/pt-PT.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Codificador AAC da Media Foundation"
-Bitrate="Taxa de bits"
-MF.H264.EncoderName="Codificador H264 da Media Foundation"
-MF.H264.Encoder="Nome do codificador"
-MF.H264.LowLatency="Baixa latência (desativar reordenação de fotogramas)"
-MF.H264.BFrames="Total de B-Frames consecutivas"
-MF.H264.CustomBufsize="Utilizar tamanho personalizado de memória temporária"
-MF.H264.BufferSize="Tamanho da memória temporária"
-MF.H264.CustomMaxBitrate="Usar taxa de bits personalizada"
-MF.H264.Bitrate="Taxa de bits"
-MF.H264.MaxBitrate="Taxa de bits máxima"
-MF.H264.KeyframeIntervalSec="Intervalo de fotogramas-chave ( 0=automático)"
-MF.H264.RateControl="Controlo de taxa"
-MF.H264.CBR="CBR (taxa de bits constante)"
-MF.H264.VBR="VBR (taxa de bits variável)"
-MF.H264.CQP="CQP (qualidade constante)"
-MF.H264.MinQP="Mínimo de QP"
-MF.H264.MaxQP="Máximo de QP"
-MF.H264.Profile="Perfil"
-MF.H264.Advanced="Avançado"
-MF.H264.EncoderSWMicrosoft="Codificador H.264 da Microsoft Software"
-MF.H264.EncoderHWAMD="Codificador da AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Codificador da Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Codificador da NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/ro-RO.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Codificator AAC Media Foundation"
-Bitrate="Rată de biți"
-MF.H264.EncoderName="Codificator H264 Media Foundation"
-MF.H264.Encoder="Numele codificatorului"
-MF.H264.LowLatency="Latență scăzută (Dezactivează reordonarea cadrelor)"
-MF.H264.BFrames="Număr de B-Frame consecutive"
-MF.H264.CustomBufsize="Folosește dimensiune personalizată pentru buffer"
-MF.H264.BufferSize="Dimensiune pentru buffer"
-MF.H264.CustomMaxBitrate="Folosește rată de biți maximă personalizată"
-MF.H264.Bitrate="Rată de biți"
-MF.H264.MaxBitrate="Rată de biți maximă"
-MF.H264.KeyframeIntervalSec="Interval de cadre cheie (0=auto)"
-MF.H264.RateControl="Controlul ratei"
-MF.H264.CBR="CBR (Rată de biți constantă)"
-MF.H264.VBR="VBR (Rată de biți variabilă)"
-MF.H264.CQP="CQP (Calitate constantă)"
-MF.H264.MinQP="QP minim"
-MF.H264.MaxQP="QP maxim"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Avansat"
-MF.H264.EncoderSWMicrosoft="Codificator software Microsoft H.264"
-MF.H264.EncoderHWAMD="Codificator AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Codificator Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Codificator NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/ru-RU.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC кодировщик"
-Bitrate="Битрейт"
-MF.H264.EncoderName="Кодировщик Media Foundation 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 I-кадр"
-MF.H264.QPP="QP P-кадр"
-MF.H264.QPB="QP B-кадр"
-MF.H264.Profile="Профиль"
-MF.H264.Advanced="Расширенные параметры"
-MF.H264.EncoderSWMicrosoft="Кодировщик Microsoft Software H.264"
-MF.H264.EncoderHWAMD="Кодировщик AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Кодировщик Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Кодировщик NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 25
plugins/win-mf/data/locale/si-LK.ini

@@ -1,25 +0,0 @@
-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.RateControl="අනුපාත පාලනය"
-MF.H264.CBR="CBR (නියත බිටුුඅනු.)"
-MF.H264.CQP="CQP (නියත ගුණත්වය)"
-MF.H264.MinQP="අවම QP"
-MF.H264.MaxQP="උපරිම QP"
-MF.H264.QPI="QP I-රාමු"
-MF.H264.QPP="QP P-රාමු"
-MF.H264.QPB="QP B-රාමු"
-MF.H264.Profile="පැතිකඩ"
-MF.H264.Advanced="වැඩිදුර"
-MF.H264.EncoderSWMicrosoft="මයික්‍රොසොෆ්ට් මෘදුකාංග H.264 ආකේතකය"
-MF.H264.EncoderHWAMD="AMD දෘශ්‍ය කේතන යන්ත්‍රය H.264 ආකේතකය (මාධ්‍ය පදනම)"
-MF.H264.EncoderHWIntel="ඉන්ටෙල් කුයික් සයින් H.264 ආකේතකය (මාධ්‍ය පදනම)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 ආකේතකය (මාධ්‍ය පදනම)"

+ 0 - 25
plugins/win-mf/data/locale/sk-SK.ini

@@ -1,25 +0,0 @@
-MFAACEnc="Media Foundation AAC Enkodér"
-MF.H264.EncoderName="Media Foundation H264 Enkodér"
-MF.H264.Encoder="Názov enkodéra"
-MF.H264.LowLatency="Nízka odozva (zakázať preraďovanie snímok)"
-MF.H264.BFrames="Počet po sebe idúcich B-snímok"
-MF.H264.CustomBufsize="Použiť vlastnú veľkosť medzipamäte"
-MF.H264.BufferSize="Veľkosť medzipamäte"
-MF.H264.CustomMaxBitrate="Použiť vlastný maximálny bitrate"
-MF.H264.MaxBitrate="Max. bitrate"
-MF.H264.KeyframeIntervalSec="Interval kľúčových snímkov (0=automaticky)"
-MF.H264.RateControl="Riadenie toku"
-MF.H264.CBR="CBR (Konštantný Bitrate)"
-MF.H264.VBR="VBR (Variabilný Bitrate)"
-MF.H264.CQP="CQP (Konštantná kvalita)"
-MF.H264.MinQP="Minimálne QP"
-MF.H264.MaxQP="Minimálne QP"
-MF.H264.QPI="QP I-snímka"
-MF.H264.QPP="QP P-snímka"
-MF.H264.QPB="QP B-snímka"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Rozšírené"
-MF.H264.EncoderSWMicrosoft="Microsoft H.264 Softvérový Enkodér"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Enkodér (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Enkodér (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Enkodér (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/sl-SI.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Kodirnik AAC Media Foundation"
-Bitrate="Bitna hitrost"
-MF.H264.EncoderName="Kodirnik H264 Media Foundation"
-MF.H264.Encoder="Ime kodirnika"
-MF.H264.LowLatency="Nizka zakasnitev (onemogoči prerazporejanje sličic)"
-MF.H264.BFrames="Število zaporednih sličic B"
-MF.H264.CustomBufsize="Uporabi velikost medpomnilnika po meri"
-MF.H264.BufferSize="Velikost medpomnilnika"
-MF.H264.CustomMaxBitrate="Uporabi največjo bitno hitrost po meri"
-MF.H264.Bitrate="Bitna hitrost"
-MF.H264.MaxBitrate="Največja bitna hitrost"
-MF.H264.KeyframeIntervalSec="Razmik med ključnimi sličicami (0=samodejno)"
-MF.H264.RateControl="Nadzor hitrosti"
-MF.H264.CBR="Konstantna bitna hitrost"
-MF.H264.VBR="Spremenljiva bitna hitrost"
-MF.H264.CQP="CQP (konstantna kakovost)"
-MF.H264.MinQP="Najmanjši QP"
-MF.H264.MaxQP="Največji QP"
-MF.H264.QPI="QP I-sličic"
-MF.H264.QPP="QP sličic P"
-MF.H264.QPB="QP sličic B"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Napredno"
-MF.H264.EncoderSWMicrosoft="Microsoftov programski kodirnik H.264"
-MF.H264.EncoderHWAMD="Kodirnik H.264 AMD Video Coding Engine (Media Foundation)"
-MF.H264.EncoderHWIntel="Kodirnik H.264 Intel Quick Sync (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Kodirnik H.264 NVIDIA NVENC (Media Foundation)"

+ 0 - 26
plugins/win-mf/data/locale/sr-CS.ini

@@ -1,26 +0,0 @@
-MFAACEnc="Media Foundation AAC Enkoder"
-Bitrate="Protok"
-MF.H264.EncoderName="Media Foundation H264 enkoder"
-MF.H264.Encoder="Ime enkodera"
-MF.H264.LowLatency="Nisko kašnjenje (onemogući preraspodelu frejmova)"
-MF.H264.BFrames="Broj uzastopnih B-frejmova"
-MF.H264.CustomBufsize="Koristi posebnu veličinu bafera"
-MF.H264.BufferSize="Veličina bafera"
-MF.H264.CustomMaxBitrate="Koristi poseban maksimalni protok"
-MF.H264.Bitrate="Protok"
-MF.H264.MaxBitrate="Maksimalni protok"
-MF.H264.RateControl="Kontrola protoka"
-MF.H264.CBR="CBR (konstantni protok)"
-MF.H264.VBR="VBR (promenjivi protok)"
-MF.H264.CQP="CQP (konstantan kvalitet)"
-MF.H264.MinQP="Minimalni QP"
-MF.H264.MaxQP="Maksimalni QP"
-MF.H264.QPI="QP I-frejm"
-MF.H264.QPP="QP P-frejm"
-MF.H264.QPB="QP B-frejm"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Napredno"
-MF.H264.EncoderSWMicrosoft="Microsoft softverski H.264 enkoder"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 enkoder (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 enkoder (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 enkoder (Media Foundation)"

+ 0 - 26
plugins/win-mf/data/locale/sr-SP.ini

@@ -1,26 +0,0 @@
-MFAACEnc="Media Foundation AAC Енкодер"
-Bitrate="Проток"
-MF.H264.EncoderName="Media Foundation H264 енкодер"
-MF.H264.Encoder="Име енкодера"
-MF.H264.LowLatency="Ниско кашњење (онемогући прерасподелу фрејмова)"
-MF.H264.BFrames="Број узастопних Б-фрејмова"
-MF.H264.CustomBufsize="Користи посебну величину бафера"
-MF.H264.BufferSize="Величина бафера"
-MF.H264.CustomMaxBitrate="Користи посебан максимални проток"
-MF.H264.Bitrate="Проток"
-MF.H264.MaxBitrate="Максимални проток"
-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 I-фрејм"
-MF.H264.QPP="QP P-фрејм"
-MF.H264.QPB="QP B-фрејм"
-MF.H264.Profile="Профил"
-MF.H264.Advanced="Напредно"
-MF.H264.EncoderSWMicrosoft="Microsoft софтверски H.264 енкодер"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 енкодер (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 енкодер (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 енкодер (Media Foundation)"

+ 0 - 24
plugins/win-mf/data/locale/sv-SE.ini

@@ -1,24 +0,0 @@
-MFAACEnc="Media Foundation AAC-kodare"
-Bitrate="Bithastighet"
-MF.H264.EncoderName="Media Foundation H264-kodare"
-MF.H264.Encoder="Kodarnamn"
-MF.H264.LowLatency="Låg latens (Avaktivera bildrute-platsförändring)"
-MF.H264.BFrames="Antal efterföljande B-Frames"
-MF.H264.CustomBufsize="Använd anpassad buffertstorlek"
-MF.H264.BufferSize="Buffertstorlek"
-MF.H264.CustomMaxBitrate="Använd anpassad maximal bithastighet"
-MF.H264.Bitrate="Bithastighet"
-MF.H264.MaxBitrate="Maximal bithastighet"
-MF.H264.KeyframeIntervalSec="Intervall för keyframes (0=automatiskt)"
-MF.H264.RateControl="Hastighetskontroll"
-MF.H264.CBR="CBR (konstant bithastighet)"
-MF.H264.VBR="VBR (varierande bithastighet)"
-MF.H264.CQP="CQP (konstant kvalitet)"
-MF.H264.MinQP="Minimal QP"
-MF.H264.MaxQP="Maximal QP"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Avancerat"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264-kodare"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264-kodare (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264-kodare (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264-kodare (Media Foundation)"

+ 0 - 12
plugins/win-mf/data/locale/ta-IN.ini

@@ -1,12 +0,0 @@
-Bitrate="பிட்விகிதம்"
-MF.H264.Encoder="குறியாக்கிப் பெயர்"
-MF.H264.CustomBufsize="குறிப்பிட்ட பப்பர் அளவை பயன்படுத்தவும்"
-MF.H264.BufferSize="பப்பர் அளவு"
-MF.H264.CustomMaxBitrate="அதிகபட்ச பிட்விகித்தை உபயோகபடுத்தவும்"
-MF.H264.Bitrate="பிட்விகிதம்"
-MF.H264.MaxBitrate="அதிகபட்ச பிட்விகிதம்"
-MF.H264.Profile="விவரம்"
-MF.H264.EncoderSWMicrosoft="Microsoft மென்பொருள் H.264 குறியாக்கி"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 குறியாக்கி (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 குறியாக்கி(Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 குறியாக்கி (Media Foundation)"

+ 0 - 21
plugins/win-mf/data/locale/tl-PH.ini

@@ -1,21 +0,0 @@
-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.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"

+ 0 - 26
plugins/win-mf/data/locale/tr-TR.ini

@@ -1,26 +0,0 @@
-MFAACEnc="Medya Vakfı AAC Kodlayıcısı"
-Bitrate="Bit hızı"
-MF.H264.EncoderName="Medya Vakfı H264 Kodlayıcısı"
-MF.H264.Encoder="Kodlayıcı Adı"
-MF.H264.LowLatency="Düşük Gecikme (Kare yeniden sıralamasını devre dışı bırak)"
-MF.H264.BFrames="Ardışık B-Kare sayısı"
-MF.H264.CustomBufsize="İsteğe Bağlı Arabellek Boyutu Kullan"
-MF.H264.BufferSize="Arabellek Boyutu"
-MF.H264.CustomMaxBitrate="Özel Maksimum Bit Hızı Kullan"
-MF.H264.Bitrate="Bit hızı"
-MF.H264.MaxBitrate="Maksimum Bit Hızı"
-MF.H264.KeyframeIntervalSec="Anahtar Kare Aralığı (0=otomatik)"
-MF.H264.RateControl="Oran Kontrolü"
-MF.H264.CBR="CBR (Sabit Bit Hızı)"
-MF.H264.VBR="VBR (Değişken Bit Hızı)"
-MF.H264.CQP="CQP (Sabit Kalite)"
-MF.H264.MaxQP="Maksimum QP"
-MF.H264.QPI="QP I-Kare"
-MF.H264.QPP="QP P-Kare"
-MF.H264.QPB="QP B-Kare"
-MF.H264.Profile="Profil"
-MF.H264.Advanced="Gelişmiş"
-MF.H264.EncoderSWMicrosoft="Microsoft Software H.264 Kodlayıcısı"
-MF.H264.EncoderHWAMD="AMD Video Coding Engine H.264 Kodlayıcısı (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 Kodlayıcısı (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 Kodlayıcısı (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/uk-UA.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Кодувальник Media Foundation AAC"
-Bitrate="Бітрейт"
-MF.H264.EncoderName="Кодувальник Media Foundation 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 для I-кадрів"
-MF.H264.QPP="QP для P-кадрів"
-MF.H264.QPB="QP для B-кадрів"
-MF.H264.Profile="Профіль"
-MF.H264.Advanced="Розширені параметри"
-MF.H264.EncoderSWMicrosoft="Кодувальник Microsoft Software H.264"
-MF.H264.EncoderHWAMD="Кодувальник AMD Video Coding Engine H.264 (Media Foundation)"
-MF.H264.EncoderHWIntel="Кодувальник Intel Quick Sync H.264 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="Кодувальник NVIDIA NVENC H.264 (Media Foundation)"

+ 0 - 21
plugins/win-mf/data/locale/vi-VN.ini

@@ -1,21 +0,0 @@
-MFAACEnc="Bộ biên mã AAC Media Foundation"
-MF.H264.EncoderName="Bộ biên mã H264 Media Foundation"
-MF.H264.Encoder="Tên bộ biên mã"
-MF.H264.LowLatency="Độ trễ thấp (Tắt frame re-ordering)"
-MF.H264.BFrames="Số khung B liên tục"
-MF.H264.CustomBufsize="Sử dụng tùy chỉnh bộ đệm kích thước"
-MF.H264.BufferSize="Kích cỡ bộ đệm"
-MF.H264.CustomMaxBitrate="Sử dụng tùy chỉnh Bitrate cao nhất"
-MF.H264.MaxBitrate="Bitrate Cao nhất"
-MF.H264.KeyframeIntervalSec="Thời Gian Giữa Các Khung Chính (0=tự động)"
-MF.H264.RateControl="Cách kiểm soát bitrate"
-MF.H264.CBR="CBR (Bitrate cố định)"
-MF.H264.VBR="VBR (Bitrate thay đổi được)"
-MF.H264.CQP="CQP (Chất lượng cố định)"
-MF.H264.MinQP="QP Thấp nhất"
-MF.H264.MaxQP="QP Cao nhất"
-MF.H264.Profile="Hồ sơ"
-MF.H264.Advanced="Nâng cao"
-MF.H264.EncoderSWMicrosoft="Bộ biên mã H.264 Microsoft Software"
-MF.H264.EncoderHWAMD="Bộ biên mã H.264 AMD Video Coding Engine (Media Foundation)"
-MF.H264.EncoderHWIntel="Bộ biên mã H.264 Intel Quick Sync (Media Foundation)"

+ 0 - 27
plugins/win-mf/data/locale/zh-CN.ini

@@ -1,27 +0,0 @@
-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 I帧"
-MF.H264.QPP="QP P帧"
-MF.H264.QPB="QP B帧"
-MF.H264.Profile="配置文件"
-MF.H264.Advanced="高级"
-MF.H264.EncoderSWMicrosoft="微软软件 H.264 编码器"
-MF.H264.EncoderHWAMD="AMD 视频编码引擎 H.264 编码器 (媒体基金会)"
-MF.H264.EncoderHWIntel="英特尔快速同步 H.264 编码器 (媒体基金会)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 编码器 (媒体基金会)"

+ 0 - 27
plugins/win-mf/data/locale/zh-TW.ini

@@ -1,27 +0,0 @@
-MFAACEnc="Media Foundation AAC 編碼器"
-Bitrate="位元率"
-MF.H264.EncoderName="Media Foundation 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="I 訊框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 Video Coding Engine H.264 編碼器 (Media Foundation)"
-MF.H264.EncoderHWIntel="Intel Quick Sync H.264 編碼器 (Media Foundation)"
-MF.H264.EncoderHWNVIDIA="NVIDIA NVENC H.264 編碼器 (Media Foundation)"

+ 0 - 339
plugins/win-mf/mf-aac-encoder.cpp

@@ -1,339 +0,0 @@
-#include <obs-module.h>
-
-#include "mf-aac-encoder.hpp"
-
-#include <mferror.h>
-#include <mftransform.h>
-#include <wmcodecdsp.h>
-#include <comdef.h>
-
-#define MF_LOG_AAC(level, format, ...) \
-	MF_LOG_ENCODER("AAC", ObsEncoder(), level, format, ##__VA_ARGS__)
-
-#define MF_LOG_COM(msg, hr) MF_LOG_AAC(LOG_ERROR, \
-		msg " failed,  %S (0x%08lx)", \
-		_com_error(hr).ErrorMessage(), hr)
-
-#define HRC(r) \
-	if(FAILED(hr = (r))) { \
-		MF_LOG_COM(#r, hr); \
-		goto fail; \
-	}
-
-using namespace MFAAC;
-
-#define CONST_ARRAY(name, ...) static const UINT32 name[] = { __VA_ARGS__ };
-
-CONST_ARRAY(VALID_BITRATES, 96, 128, 160, 192);
-CONST_ARRAY(VALID_CHANNELS, 1, 2);
-CONST_ARRAY(VALID_BITS_PER_SAMPLE, 16);
-CONST_ARRAY(VALID_SAMPLERATES, 44100, 48000 );
-
-#undef CONST_ARRAY
-
-template <int N>
-static UINT32 FindBestMatch(const UINT32 (&validValues)[N], UINT32 value)
-{
-	for (UINT32 val : validValues) {
-		if (val >= value)
-			return val;
-	}
-
-	// Only downgrade if no values are better
-	return validValues[N - 1];
-}
-
-template <int N>
-static bool IsValid(const UINT32 (&validValues)[N], UINT32 value)
-{
-	for (UINT32 val : validValues) {
-		if (val == value)
-			return true;
-	}
-
-	return false;
-};
-
-UINT32 MFAAC::FindBestBitrateMatch(UINT32 value)
-{
-	return FindBestMatch(VALID_BITRATES, value);
-}
-
-UINT32 MFAAC::FindBestChannelsMatch(UINT32 value)
-{
-	return FindBestMatch(VALID_CHANNELS, value);
-}
-
-UINT32 MFAAC::FindBestBitsPerSampleMatch(UINT32 value)
-{
-	return FindBestMatch(VALID_BITS_PER_SAMPLE, value);
-}
-
-UINT32 MFAAC::FindBestSamplerateMatch(UINT32 value)
-{
-	return FindBestMatch(VALID_SAMPLERATES, value);
-}
-
-bool MFAAC::BitrateValid(UINT32 value)
-{
-	return IsValid(VALID_BITRATES, value);
-}
-
-bool MFAAC::ChannelsValid(UINT32 value)
-{
-	return IsValid(VALID_CHANNELS, value);
-}
-
-bool MFAAC::BitsPerSampleValid(UINT32 value)
-{
-	return IsValid(VALID_BITS_PER_SAMPLE, value);
-}
-
-bool MFAAC::SamplerateValid(UINT32 value)
-{
-	return IsValid(VALID_SAMPLERATES, value);
-}
-
-HRESULT MFAAC::Encoder::CreateMediaTypes(ComPtr<IMFMediaType> &i,
-		ComPtr<IMFMediaType> &o)
-{
-	HRESULT hr;
-	HRC(MFCreateMediaType(&i));
-	HRC(MFCreateMediaType(&o));
-
-	HRC(i->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio));
-	HRC(i->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_PCM));
-	HRC(i->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, bitsPerSample));
-	HRC(i->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, sampleRate));
-	HRC(i->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, channels));
-
-	HRC(o->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Audio));
-	HRC(o->SetGUID(MF_MT_SUBTYPE, MFAudioFormat_AAC));
-	HRC(o->SetUINT32(MF_MT_AUDIO_BITS_PER_SAMPLE, bitsPerSample));
-	HRC(o->SetUINT32(MF_MT_AUDIO_SAMPLES_PER_SECOND, sampleRate));
-	HRC(o->SetUINT32(MF_MT_AUDIO_NUM_CHANNELS, channels));
-	HRC(o->SetUINT32(MF_MT_AUDIO_AVG_BYTES_PER_SECOND,
-			(bitrate * 1000) / 8));
-
-	return S_OK;
-fail:
-	return hr;
-}
-
-void MFAAC::Encoder::InitializeExtraData()
-{
-	UINT16 *extraData16 = (UINT16 *)extraData;
-	UINT16 profile = 2; //Low Complexity
-#define SWAPU16(x) (x>>8) | (x<<8)
-	// Profile
-	// XXXX X... .... ....
-	*extraData16 = profile << 11;
-	// Sample Index (3=48, 4=44.1)
-	// .... .XXX X... ....
-	*extraData16 |= (sampleRate == 48000 ? 3 : 4) << 7;
-	// Channels
-	// .... .... .XXX X...
-	*extraData16 |= channels << 3;
-	*extraData16 = SWAPU16(*extraData16);
-
-	extraData[2] = 0;
-#undef SWAPU16
-}
-
-bool MFAAC::Encoder::Initialize()
-{
-	HRESULT hr;
-
-	ComPtr<IMFTransform> transform_;
-	ComPtr<IMFMediaType> inputType, outputType;
-
-	if (!BitrateValid(bitrate)) {
-		MF_LOG_AAC(LOG_WARNING, "invalid bitrate (kbps) '%d'", bitrate);
-		return false;
-	}
-	if (!ChannelsValid(channels)) {
-		MF_LOG_AAC(LOG_WARNING, "invalid channel count '%d", channels);
-		return false;
-	}
-	if (!SamplerateValid(sampleRate)) {
-		MF_LOG_AAC(LOG_WARNING, "invalid sample rate (hz) '%d",
-				sampleRate);
-		return false;
-	}
-	if (!BitsPerSampleValid(bitsPerSample)) {
-		MF_LOG_AAC(LOG_WARNING, "invalid bits-per-sample (bits) '%d'",
-				bitsPerSample);
-		return false;
-	}
-
-	InitializeExtraData();
-
-	HRC(CoCreateInstance(CLSID_AACMFTEncoder, NULL, CLSCTX_INPROC_SERVER,
-			IID_PPV_ARGS(&transform_)));
-	HRC(CreateMediaTypes(inputType, outputType));
-
-	HRC(transform_->SetInputType(0, inputType.Get(), 0));
-	HRC(transform_->SetOutputType(0, outputType.Get(), 0));
-
-	HRC(transform_->ProcessMessage(MFT_MESSAGE_NOTIFY_BEGIN_STREAMING,
-			NULL));
-	HRC(transform_->ProcessMessage(MFT_MESSAGE_NOTIFY_START_OF_STREAM,
-			NULL));
-
-	MF_LOG_AAC(LOG_INFO, "encoder created\n"
-			"\tbitrate: %d\n"
-			"\tchannels: %d\n"
-			"\tsample rate: %d\n"
-			"\tbits-per-sample: %d\n",
-			bitrate, channels, sampleRate, bitsPerSample);
-
-	transform = transform_;
-	return true;
-
-fail:
-	return false;
-}
-
-HRESULT MFAAC::Encoder::CreateEmptySample(ComPtr<IMFSample> &sample,
-		ComPtr<IMFMediaBuffer> &buffer, DWORD length)
-{
-	HRESULT hr;
-
-	HRC(MFCreateSample(&sample));
-	HRC(MFCreateMemoryBuffer(length, &buffer));
-	HRC(sample->AddBuffer(buffer.Get()));
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-HRESULT MFAAC::Encoder::EnsureCapacity(ComPtr<IMFSample> &sample, DWORD length)
-{
-	HRESULT hr;
-	ComPtr<IMFMediaBuffer> buffer;
-	DWORD currentLength;
-
-	if (!sample) {
-		HRC(CreateEmptySample(sample, buffer, length));
-	} else {
-		HRC(sample->GetBufferByIndex(0, &buffer));
-	}
-
-	HRC(buffer->GetMaxLength(&currentLength));
-	if (currentLength < length) {
-		HRC(sample->RemoveAllBuffers());
-		HRC(MFCreateMemoryBuffer(length, &buffer));
-		HRC(sample->AddBuffer(buffer));
-	} else {
-		buffer->SetCurrentLength(0);
-	}
-
-	packetBuffer.reserve(length);
-
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-bool MFAAC::Encoder::ProcessInput(UINT8 *data, UINT32 data_length,
-		UINT64 pts, Status *status)
-{
-	HRESULT hr;
-	ComPtr<IMFSample> sample;
-	ComPtr<IMFMediaBuffer> buffer;
-	BYTE *bufferData;
-	INT64 samplePts;
-	UINT32 samples;
-	UINT64 sampleDur;
-
-	HRC(CreateEmptySample(sample, buffer, data_length));
-
-	HRC(buffer->Lock(&bufferData, NULL, NULL));
-	memcpy(bufferData, data, data_length);
-	HRC(buffer->Unlock());
-	HRC(buffer->SetCurrentLength(data_length));
-
-	samples = data_length / channels / (bitsPerSample / 8);
-	sampleDur = (UINT64)(((float) sampleRate / channels / samples) * 10000);
-	samplePts = pts / 100;
-
-	HRC(sample->SetSampleTime(samplePts));
-	HRC(sample->SetSampleDuration(sampleDur));
-
-	hr = transform->ProcessInput(0, sample, 0);
-	if (hr == MF_E_NOTACCEPTING) {
-		*status = NOT_ACCEPTING;
-		return true;
-	} else if (FAILED(hr)) {
-		MF_LOG_COM("process input", hr);
-		return false;
-	}
-
-	*status = SUCCESS;
-	return true;
-
-fail:
-	*status = FAILURE;
-	return false;
-}
-
-bool MFAAC::Encoder::ProcessOutput(UINT8 **data, UINT32 *dataLength,
-		UINT64 *pts, Status *status)
-{
-	HRESULT hr;
-
-	DWORD outputFlags, outputStatus;
-	MFT_OUTPUT_STREAM_INFO outputInfo = {0};
-	MFT_OUTPUT_DATA_BUFFER output = {0};
-	ComPtr<IMFMediaBuffer> outputBuffer;
-	BYTE *bufferData;
-	DWORD bufferLength;
-	INT64 samplePts;
-
-	HRC(transform->GetOutputStatus(&outputFlags));
-	if (outputFlags != MFT_OUTPUT_STATUS_SAMPLE_READY) {
-		*status = NEED_MORE_INPUT;
-		return true;
-	}
-
-	HRC(transform->GetOutputStreamInfo(0, &outputInfo));
-	EnsureCapacity(outputSample, outputInfo.cbSize);
-
-	output.pSample = outputSample.Get();
-
-	hr = transform->ProcessOutput(0, 1, &output, &outputStatus);
-	if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT) {
-		*status = NEED_MORE_INPUT;
-		return true;
-	} else if (FAILED(hr)) {
-		MF_LOG_COM("process output", hr);
-		return false;
-	}
-
-	HRC(outputSample->GetBufferByIndex(0, &outputBuffer));
-
-	HRC(outputBuffer->Lock(&bufferData, NULL, &bufferLength));
-	packetBuffer.assign(bufferData, bufferData + bufferLength);
-	HRC(outputBuffer->Unlock());
-
-	HRC(outputSample->GetSampleTime(&samplePts));
-
-	*pts = samplePts * 100;
-	*data = &packetBuffer[0];
-	*dataLength = bufferLength;
-	*status = SUCCESS;
-	return true;
-
-fail:
-	*status = FAILURE;
-	return false;
-}
-
-bool MFAAC::Encoder::ExtraData(UINT8 **extraData_, UINT32 *extraDataLength)
-{
-	*extraData_ = extraData;
-	*extraDataLength = sizeof(extraData);
-	return true;
-}

+ 0 - 91
plugins/win-mf/mf-aac-encoder.hpp

@@ -1,91 +0,0 @@
-#pragma once
-
-#define WIN32_MEAN_AND_LEAN
-#include <Windows.h>
-#undef WIN32_MEAN_AND_LEAN
-
-#include <mfapi.h>
-#include <mfidl.h>
-
-#include <stdint.h>
-#include <vector>
-
-#include <util/windows/ComPtr.hpp>
-
-#define MF_LOG(level, format, ...) \
-	blog(level, "[Media Foundation encoder]: " format, ##__VA_ARGS__)
-#define MF_LOG_ENCODER(format_name, encoder, level, format, ...) \
-	blog(level, "[Media Foundation %s: '%s']: " format, \
-			format_name, obs_encoder_get_name(encoder), \
-			##__VA_ARGS__)
-
-namespace MFAAC {
-
-enum Status {
-	FAILURE,
-	SUCCESS,
-	NOT_ACCEPTING,
-	NEED_MORE_INPUT
-};
-
-class Encoder {
-public:
-	Encoder(const obs_encoder_t *encoder, UINT32 bitrate, UINT32 channels,
-			UINT32 sampleRate, UINT32 bitsPerSample)
-		: encoder(encoder),
-		  bitrate(bitrate),
-		  channels(channels),
-		  sampleRate(sampleRate),
-		  bitsPerSample(bitsPerSample)
-	{}
-
-	Encoder& operator=(Encoder const&) = delete;
-
-	bool Initialize();
-	bool ProcessInput(UINT8 *data, UINT32 dataLength,
-			UINT64 pts, MFAAC::Status *status);
-	bool ProcessOutput(UINT8 **data, UINT32 *dataLength,
-			UINT64 *pts, MFAAC::Status *status);
-	bool ExtraData(UINT8 **extraData, UINT32 *extraDataLength);
-
-	const obs_encoder_t *ObsEncoder() { return encoder; }
-	UINT32 Bitrate() { return bitrate; }
-	UINT32 Channels() { return channels; }
-	UINT32 SampleRate() { return sampleRate; }
-	UINT32 BitsPerSample() { return bitsPerSample; }
-
-	static const UINT32 FrameSize = 1024;
-
-private:
-	void InitializeExtraData();
-	HRESULT CreateMediaTypes(ComPtr<IMFMediaType> &inputType,
-			ComPtr<IMFMediaType> &outputType);
-	HRESULT EnsureCapacity(ComPtr<IMFSample> &sample, DWORD length);
-	HRESULT CreateEmptySample(ComPtr<IMFSample> &sample,
-			ComPtr<IMFMediaBuffer> &buffer, DWORD length);
-
-private:
-	const obs_encoder_t *encoder;
-	const UINT32 bitrate;
-	const UINT32 channels;
-	const UINT32 sampleRate;
-	const UINT32 bitsPerSample;
-
-	ComPtr<IMFTransform> transform;
-	ComPtr<IMFSample> outputSample;
-	std::vector<BYTE> packetBuffer;
-	UINT8 extraData[3];
-};
-
-static const UINT32 FrameSize = 1024;
-
-UINT32 FindBestBitrateMatch(UINT32 value);
-UINT32 FindBestChannelsMatch(UINT32 value);
-UINT32 FindBestBitsPerSampleMatch(UINT32 value);
-UINT32 FindBestSamplerateMatch(UINT32 value);
-bool BitrateValid(UINT32 value);
-bool ChannelsValid(UINT32 value);
-bool BitsPerSampleValid(UINT32 value);
-bool SamplerateValid(UINT32 value);
-
-}

+ 0 - 165
plugins/win-mf/mf-aac.cpp

@@ -1,165 +0,0 @@
-#include <obs-module.h>
-
-#include <memory>
-
-#include "mf-aac-encoder.hpp"
-
-#include <VersionHelpers.h>
-
-using namespace MFAAC;
-
-static const char *MFAAC_GetName(void*)
-{
-	return obs_module_text("MFAACEnc");
-}
-
-static obs_properties_t *MFAAC_GetProperties(void *)
-{
-	obs_properties_t *props = obs_properties_create();
-
-	obs_properties_add_int(props, "bitrate",
-			obs_module_text("Bitrate"), 96, 192, 32);
-
-	return props;
-}
-
-static void MFAAC_GetDefaults(obs_data_t *settings)
-{
-	obs_data_set_default_int(settings, "bitrate", 128);
-}
-
-static void *MFAAC_Create(obs_data_t *settings, obs_encoder_t *encoder)
-{
-	UINT32 bitrate = (UINT32)obs_data_get_int(settings, "bitrate");
-	if (!bitrate) {
-		MF_LOG_ENCODER("AAC", encoder, LOG_ERROR,
-			"Invalid bitrate specified");
-		return NULL;
-	}
-
-	audio_t *audio = obs_encoder_audio(encoder);
-	UINT32 channels = (UINT32)audio_output_get_channels(audio);
-	UINT32 sampleRate = audio_output_get_sample_rate(audio);
-	UINT32 bitsPerSample = 16;
-
-	UINT32 recommendedSampleRate = FindBestSamplerateMatch(sampleRate);
-	if (recommendedSampleRate != sampleRate) {
-		MF_LOG_ENCODER("AAC", encoder, LOG_WARNING,
-			"unsupported sample rate; "
-			"resampling to best guess '%d' instead of '%d'",
-			recommendedSampleRate, sampleRate);
-		sampleRate = recommendedSampleRate;
-	}
-
-	UINT32 recommendedBitRate = FindBestBitrateMatch(bitrate);
-	if (recommendedBitRate != bitrate) {
-		MF_LOG_ENCODER("AAC", encoder, LOG_WARNING,
-			"unsupported bitrate; "
-			"resampling to best guess '%d' instead of '%d'",
-			recommendedBitRate, bitrate);
-		bitrate = recommendedBitRate;
-	}
-
-	std::unique_ptr<Encoder> enc(new Encoder(encoder,
-			bitrate, channels, sampleRate, bitsPerSample));
-
-	if (!enc->Initialize())
-		return nullptr;
-
-	return enc.release();
-}
-
-static void MFAAC_Destroy(void *data)
-{
-	Encoder *enc = static_cast<Encoder *>(data);
-	delete enc;
-}
-
-static bool MFAAC_Encode(void *data, struct encoder_frame *frame,
-		struct encoder_packet *packet, bool *received_packet)
-{
-	Encoder *enc = static_cast<Encoder *>(data);
-	Status status;
-
-	if (!enc->ProcessInput(frame->data[0], frame->linesize[0], frame->pts,
-			&status))
-		return false;
-
-	// This shouldn't happen since we drain right after
-	// we process input
-	if (status == NOT_ACCEPTING)
-		return false;
-
-	UINT8 *outputData;
-	UINT32 outputDataLength;
-	UINT64 outputPts;
-
-	if (!enc->ProcessOutput(&outputData, &outputDataLength, &outputPts,
-			&status))
-		return false;
-
-	// Needs more input, not a failure case
-	if (status == NEED_MORE_INPUT)
-		return true;
-
-	packet->pts = outputPts;
-	packet->dts = outputPts;
-	packet->data = outputData;
-	packet->size = outputDataLength;
-	packet->type = OBS_ENCODER_AUDIO;
-	packet->timebase_num = 1;
-	packet->timebase_den = enc->SampleRate();
-
-	return *received_packet = true;
-}
-
-static bool MFAAC_GetExtraData(void *data, uint8_t **extra_data, size_t *size)
-{
-	Encoder *enc = static_cast<Encoder *>(data);
-
-	UINT32 length;
-	if (enc->ExtraData(extra_data, &length)) {
-		*size = length;
-		return true;
-	}
-	return false;
-}
-
-static void MFAAC_GetAudioInfo(void *, struct audio_convert_info *info)
-{
-	info->format = AUDIO_FORMAT_16BIT;
-	info->samples_per_sec = FindBestSamplerateMatch(info->samples_per_sec);
-}
-
-static size_t MFAAC_GetFrameSize(void *)
-{
-	return Encoder::FrameSize;
-}
-
-extern "C" void RegisterMFAACEncoder()
-{
-	if (!IsWindows8OrGreater()) {
-		MF_LOG(LOG_WARNING, "plugin is disabled for performance "
-			"reasons on Windows versions prior to 8");
-		return;
-	}
-
-	obs_encoder_info info = {};
-	info.id                        = "mf_aac";
-	info.type                      = OBS_ENCODER_AUDIO;
-	info.codec                     = "AAC";
-	info.get_name                  = MFAAC_GetName;
-	info.create                    = MFAAC_Create;
-	info.destroy                   = MFAAC_Destroy;
-	info.encode                    = MFAAC_Encode;
-	info.get_frame_size            = MFAAC_GetFrameSize;
-	info.get_defaults              = MFAAC_GetDefaults;
-	info.get_properties            = MFAAC_GetProperties;
-	info.get_extra_data            = MFAAC_GetExtraData;
-	info.get_audio_info            = MFAAC_GetAudioInfo;
-
-	MF_LOG(LOG_DEBUG, "Adding Media Foundation AAC Encoder");
-
-	obs_register_encoder(&info);
-
-}

+ 0 - 384
plugins/win-mf/mf-common.cpp

@@ -1,384 +0,0 @@
-#include "mf-common.hpp"
-
-#include <util/platform.h>
-
-#include <Mferror.h>
-#include <strsafe.h>
-#include <wrl/client.h>
-
-#include <string>
-
-using namespace std;
-
-static void DBGMSG(PCWSTR format, ...)
-{
-	va_list args;
-	va_start(args, format);
-
-	WCHAR msg[MAX_PATH];
-
-	if (SUCCEEDED(StringCbVPrintf(msg, sizeof(msg), format, args)))
-	{
-		char *cmsg;
-		os_wcs_to_utf8_ptr(msg, 0, &cmsg);
-		MF_LOG(LOG_INFO, "%s", cmsg);
-		bfree(cmsg);
-	}
-	va_end(args);
-}
-
-#ifndef IF_EQUAL_RETURN
-#define IF_EQUAL_RETURN(param, val) if(val == param) return L#val
-#endif
-
-static LPCWSTR GetGUIDNameConst(const GUID& guid)
-{
-	IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE);
-	IF_EQUAL_RETURN(guid, MF_MT_MAJOR_TYPE);
-	IF_EQUAL_RETURN(guid, MF_MT_SUBTYPE);
-	IF_EQUAL_RETURN(guid, MF_MT_ALL_SAMPLES_INDEPENDENT);
-	IF_EQUAL_RETURN(guid, MF_MT_FIXED_SIZE_SAMPLES);
-	IF_EQUAL_RETURN(guid, MF_MT_COMPRESSED);
-	IF_EQUAL_RETURN(guid, MF_MT_SAMPLE_SIZE);
-	IF_EQUAL_RETURN(guid, MF_MT_WRAPPED_TYPE);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_NUM_CHANNELS);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_SECOND);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FLOAT_SAMPLES_PER_SECOND);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_AVG_BYTES_PER_SECOND);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BLOCK_ALIGNMENT);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_BITS_PER_SAMPLE);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_VALID_BITS_PER_SAMPLE);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_SAMPLES_PER_BLOCK);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_CHANNEL_MASK);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_FOLDDOWN_MATRIX);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKREF);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_PEAKTARGET);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGREF);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_WMADRC_AVGTARGET);
-	IF_EQUAL_RETURN(guid, MF_MT_AUDIO_PREFER_WAVEFORMATEX);
-	IF_EQUAL_RETURN(guid, MF_MT_AAC_PAYLOAD_TYPE);
-	IF_EQUAL_RETURN(guid, MF_MT_AAC_AUDIO_PROFILE_LEVEL_INDICATION);
-	IF_EQUAL_RETURN(guid, MF_MT_FRAME_SIZE);
-	IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE);
-	IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MAX);
-	IF_EQUAL_RETURN(guid, MF_MT_FRAME_RATE_RANGE_MIN);
-	IF_EQUAL_RETURN(guid, MF_MT_PIXEL_ASPECT_RATIO);
-	IF_EQUAL_RETURN(guid, MF_MT_DRM_FLAGS);
-	IF_EQUAL_RETURN(guid, MF_MT_PAD_CONTROL_FLAGS);
-	IF_EQUAL_RETURN(guid, MF_MT_SOURCE_CONTENT_HINT);
-	IF_EQUAL_RETURN(guid, MF_MT_VIDEO_CHROMA_SITING);
-	IF_EQUAL_RETURN(guid, MF_MT_INTERLACE_MODE);
-	IF_EQUAL_RETURN(guid, MF_MT_TRANSFER_FUNCTION);
-	IF_EQUAL_RETURN(guid, MF_MT_VIDEO_PRIMARIES);
-	IF_EQUAL_RETURN(guid, MF_MT_CUSTOM_VIDEO_PRIMARIES);
-	IF_EQUAL_RETURN(guid, MF_MT_YUV_MATRIX);
-	IF_EQUAL_RETURN(guid, MF_MT_VIDEO_LIGHTING);
-	IF_EQUAL_RETURN(guid, MF_MT_VIDEO_NOMINAL_RANGE);
-	IF_EQUAL_RETURN(guid, MF_MT_GEOMETRIC_APERTURE);
-	IF_EQUAL_RETURN(guid, MF_MT_MINIMUM_DISPLAY_APERTURE);
-	IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_APERTURE);
-	IF_EQUAL_RETURN(guid, MF_MT_PAN_SCAN_ENABLED);
-	IF_EQUAL_RETURN(guid, MF_MT_AVG_BITRATE);
-	IF_EQUAL_RETURN(guid, MF_MT_AVG_BIT_ERROR_RATE);
-	IF_EQUAL_RETURN(guid, MF_MT_MAX_KEYFRAME_SPACING);
-	IF_EQUAL_RETURN(guid, MF_MT_DEFAULT_STRIDE);
-	IF_EQUAL_RETURN(guid, MF_MT_PALETTE);
-	IF_EQUAL_RETURN(guid, MF_MT_USER_DATA);
-	IF_EQUAL_RETURN(guid, MF_MT_AM_FORMAT_TYPE);
-	IF_EQUAL_RETURN(guid, MF_MT_MPEG_START_TIME_CODE);
-	IF_EQUAL_RETURN(guid, MF_MT_MPEG2_PROFILE);
-	IF_EQUAL_RETURN(guid, MF_MT_MPEG2_LEVEL);
-	IF_EQUAL_RETURN(guid, MF_MT_MPEG2_FLAGS);
-	IF_EQUAL_RETURN(guid, MF_MT_MPEG_SEQUENCE_HEADER);
-	IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_0);
-	IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_0);
-	IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_SRC_PACK_1);
-	IF_EQUAL_RETURN(guid, MF_MT_DV_AAUX_CTRL_PACK_1);
-	IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_SRC_PACK);
-	IF_EQUAL_RETURN(guid, MF_MT_DV_VAUX_CTRL_PACK);
-	IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_HEADER);
-	IF_EQUAL_RETURN(guid, MF_MT_ARBITRARY_FORMAT);
-	IF_EQUAL_RETURN(guid, MF_MT_IMAGE_LOSS_TOLERANT);
-	IF_EQUAL_RETURN(guid, MF_MT_MPEG4_SAMPLE_DESCRIPTION);
-	IF_EQUAL_RETURN(guid, MF_MT_MPEG4_CURRENT_SAMPLE_ENTRY);
-	IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_4CC);
-	IF_EQUAL_RETURN(guid, MF_MT_ORIGINAL_WAVE_FORMAT_TAG);
-
-	// Media types
-
-	IF_EQUAL_RETURN(guid, MFMediaType_Audio);
-	IF_EQUAL_RETURN(guid, MFMediaType_Video);
-	IF_EQUAL_RETURN(guid, MFMediaType_Protected);
-	IF_EQUAL_RETURN(guid, MFMediaType_SAMI);
-	IF_EQUAL_RETURN(guid, MFMediaType_Script);
-	IF_EQUAL_RETURN(guid, MFMediaType_Image);
-	IF_EQUAL_RETURN(guid, MFMediaType_HTML);
-	IF_EQUAL_RETURN(guid, MFMediaType_Binary);
-	IF_EQUAL_RETURN(guid, MFMediaType_FileTransfer);
-
-	IF_EQUAL_RETURN(guid, MFVideoFormat_AI44); //     FCC('AI44')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_ARGB32); //   D3DFMT_A8R8G8B8
-	IF_EQUAL_RETURN(guid, MFVideoFormat_AYUV); //     FCC('AYUV')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_DV25); //     FCC('dv25')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_DV50); //     FCC('dv50')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_DVH1); //     FCC('dvh1')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_DVSD); //     FCC('dvsd')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_DVSL); //     FCC('dvsl')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_H264); //     FCC('H264')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_I420); //     FCC('I420')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_IYUV); //     FCC('IYUV')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_M4S2); //     FCC('M4S2')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_MJPG);
-	IF_EQUAL_RETURN(guid, MFVideoFormat_MP43); //     FCC('MP43')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_MP4S); //     FCC('MP4S')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_MP4V); //     FCC('MP4V')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_MPG1); //     FCC('MPG1')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_MSS1); //     FCC('MSS1')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_MSS2); //     FCC('MSS2')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_NV11); //     FCC('NV11')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_NV12); //     FCC('NV12')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_P010); //     FCC('P010')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_P016); //     FCC('P016')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_P210); //     FCC('P210')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_P216); //     FCC('P216')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_RGB24); //    D3DFMT_R8G8B8
-	IF_EQUAL_RETURN(guid, MFVideoFormat_RGB32); //    D3DFMT_X8R8G8B8
-	IF_EQUAL_RETURN(guid, MFVideoFormat_RGB555); //   D3DFMT_X1R5G5B5
-	IF_EQUAL_RETURN(guid, MFVideoFormat_RGB565); //   D3DFMT_R5G6B5
-	IF_EQUAL_RETURN(guid, MFVideoFormat_RGB8);
-	IF_EQUAL_RETURN(guid, MFVideoFormat_UYVY); //     FCC('UYVY')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_v210); //     FCC('v210')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_v410); //     FCC('v410')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_WMV1); //     FCC('WMV1')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_WMV2); //     FCC('WMV2')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_WMV3); //     FCC('WMV3')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_WVC1); //     FCC('WVC1')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_Y210); //     FCC('Y210')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_Y216); //     FCC('Y216')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_Y410); //     FCC('Y410')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_Y416); //     FCC('Y416')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_Y41P);
-	IF_EQUAL_RETURN(guid, MFVideoFormat_Y41T);
-	IF_EQUAL_RETURN(guid, MFVideoFormat_YUY2); //     FCC('YUY2')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_YV12); //     FCC('YV12')
-	IF_EQUAL_RETURN(guid, MFVideoFormat_YVYU);
-
-	IF_EQUAL_RETURN(guid, MFAudioFormat_PCM); //              WAVE_FORMAT_PCM
-	IF_EQUAL_RETURN(guid, MFAudioFormat_Float); //            WAVE_FORMAT_IEEE_FLOAT
-	IF_EQUAL_RETURN(guid, MFAudioFormat_DTS); //              WAVE_FORMAT_DTS
-	IF_EQUAL_RETURN(guid, MFAudioFormat_Dolby_AC3_SPDIF); //  WAVE_FORMAT_DOLBY_AC3_SPDIF
-	IF_EQUAL_RETURN(guid, MFAudioFormat_DRM); //              WAVE_FORMAT_DRM
-	IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV8); //        WAVE_FORMAT_WMAUDIO2
-	IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudioV9); //        WAVE_FORMAT_WMAUDIO3
-	IF_EQUAL_RETURN(guid, MFAudioFormat_WMAudio_Lossless); // WAVE_FORMAT_WMAUDIO_LOSSLESS
-	IF_EQUAL_RETURN(guid, MFAudioFormat_WMASPDIF); //         WAVE_FORMAT_WMASPDIF
-	IF_EQUAL_RETURN(guid, MFAudioFormat_MSP1); //             WAVE_FORMAT_WMAVOICE9
-	IF_EQUAL_RETURN(guid, MFAudioFormat_MP3); //              WAVE_FORMAT_MPEGLAYER3
-	IF_EQUAL_RETURN(guid, MFAudioFormat_MPEG); //             WAVE_FORMAT_MPEG
-	IF_EQUAL_RETURN(guid, MFAudioFormat_AAC); //              WAVE_FORMAT_MPEG_HEAAC
-	IF_EQUAL_RETURN(guid, MFAudioFormat_ADTS); //             WAVE_FORMAT_MPEG_ADTS_AAC
-
-	return NULL;
-}
-
-static float OffsetToFloat(const MFOffset& offset)
-{
-	return offset.value + (static_cast<float>(offset.fract) / 65536.0f);
-}
-
-static HRESULT LogVideoArea(wstring &str, const PROPVARIANT& var)
-{
-	if (var.caub.cElems < sizeof(MFVideoArea)) {
-		return MF_E_BUFFERTOOSMALL;
-	}
-
-	MFVideoArea *pArea = (MFVideoArea*)var.caub.pElems;
-
-	str += L"(";
-	str += to_wstring(OffsetToFloat(pArea->OffsetX));
-	str += L",";
-	str += to_wstring(OffsetToFloat(pArea->OffsetY));
-	str += L") (";
-	str += to_wstring(pArea->Area.cx);
-	str += L",";
-	str += to_wstring(pArea->Area.cy);
-	str += L")";
-	return S_OK;
-}
-
-
-static HRESULT GetGUIDName(const GUID& guid, WCHAR **ppwsz)
-{
-	HRESULT hr = S_OK;
-	WCHAR *pName = NULL;
-
-	LPCWSTR pcwsz = GetGUIDNameConst(guid);
-	if (pcwsz) {
-		size_t cchLength = 0;
-
-		hr = StringCchLength(pcwsz, STRSAFE_MAX_CCH, &cchLength);
-		if (FAILED(hr)) {
-			goto done;
-		}
-
-		pName = (WCHAR*)CoTaskMemAlloc((cchLength + 1) * sizeof(WCHAR));
-
-		if (pName == NULL) {
-			hr = E_OUTOFMEMORY;
-			goto done;
-		}
-
-		hr = StringCchCopy(pName, cchLength + 1, pcwsz);
-		if (FAILED(hr)) {
-			goto done;
-		}
-	} else {
-		hr = StringFromCLSID(guid, &pName);
-	}
-
-done:
-	if (FAILED(hr)) {
-		*ppwsz = NULL;
-		CoTaskMemFree(pName);
-	} else {
-		*ppwsz = pName;
-	}
-	return hr;
-}
-
-static void LogUINT32AsUINT64(wstring &str, const PROPVARIANT& var)
-{
-	UINT32 uHigh = 0, uLow = 0;
-	Unpack2UINT32AsUINT64(var.uhVal.QuadPart, &uHigh, &uLow);
-	str += to_wstring(uHigh);
-	str += L" x ";
-	str += to_wstring(uLow);
-}
-
-
-// Handle certain known special cases.
-static HRESULT SpecialCaseAttributeValue(wstring &str, GUID guid,
-		const PROPVARIANT& var)
-{
-	if ((guid == MF_MT_FRAME_RATE) || (guid == MF_MT_FRAME_RATE_RANGE_MAX) ||
-		(guid == MF_MT_FRAME_RATE_RANGE_MIN) || (guid == MF_MT_FRAME_SIZE) ||
-		(guid == MF_MT_PIXEL_ASPECT_RATIO)) {
-
-		// Attributes that contain two packed 32-bit values.
-		LogUINT32AsUINT64(str, var);
-
-	} else if ((guid == MF_MT_GEOMETRIC_APERTURE) ||
-		(guid == MF_MT_MINIMUM_DISPLAY_APERTURE) ||
-		(guid == MF_MT_PAN_SCAN_APERTURE)) {
-
-		// Attributes that an MFVideoArea structure.
-		return LogVideoArea(str, var);
-
-	} else {
-		return S_FALSE;
-	}
-	return S_OK;
-}
-
-static HRESULT LogAttributeValueByIndex(IMFAttributes *pAttr, DWORD index)
-{
-	wstring str;
-
-	WCHAR *pGuidName = NULL;
-	WCHAR *pGuidValName = NULL;
-
-	GUID guid = { 0 };
-
-	PROPVARIANT var;
-	PropVariantInit(&var);
-
-	HRESULT hr = pAttr->GetItemByIndex(index, &guid, &var);
-	if (FAILED(hr)) {
-		goto done;
-	}
-
-	hr = GetGUIDName(guid, &pGuidName);
-	if (FAILED(hr)) {
-		goto done;
-	}
-
-	str += L"    ";
-	str += pGuidName;
-	str += L": ";
-
-	hr = SpecialCaseAttributeValue(str, guid, var);
-	if (FAILED(hr)) {
-		goto done;
-	}
-	if (hr == S_FALSE) {
-		switch (var.vt) {
-		case VT_UI4:
-			str += to_wstring(var.ulVal);
-			break;
-
-		case VT_UI8:
-			str += to_wstring(var.uhVal.QuadPart);
-			break;
-
-		case VT_R8:
-			str += to_wstring(var.dblVal);
-			break;
-
-		case VT_CLSID:
-			hr = GetGUIDName(*var.puuid, &pGuidValName);
-			if (SUCCEEDED(hr))
-			{
-				str += pGuidValName;
-			}
-			break;
-
-		case VT_LPWSTR:
-			str += var.pwszVal;
-			break;
-
-		case VT_VECTOR | VT_UI1:
-			str += L"<<byte array>>";
-			break;
-
-		case VT_UNKNOWN:
-			str += L"IUnknown";
-			break;
-
-		default:
-			str += L"Unexpected attribute type (vt = ";
-			str += to_wstring(var.vt);
-			str += L")";
-			break;
-		}
-	}
-
-	DBGMSG(L"%s", str.c_str());
-
-done:
-	CoTaskMemFree(pGuidName);
-	CoTaskMemFree(pGuidValName);
-	PropVariantClear(&var);
-	return hr;
-}
-
-bool MF::LogMediaType(IMFMediaType *pType)
-{
-	UINT32 count = 0;
-
-	HRESULT hr = pType->GetCount(&count);
-	if (FAILED(hr)) {
-		return false;
-	}
-
-	if (count == 0) {
-		DBGMSG(L"Empty media type.");
-	}
-
-	for (UINT32 i = 0; i < count; i++) {
-		hr = LogAttributeValueByIndex(pType, i);
-		if (FAILED(hr)) {
-			return false;
-		}
-	}
-	return true;
-}

+ 0 - 61
plugins/win-mf/mf-common.hpp

@@ -1,61 +0,0 @@
-#pragma once
-
-#include <obs-module.h>
-
-#include <mfapi.h>
-#include <functional>
-#include <comdef.h>
-#include <chrono>
-
-
-#ifndef MF_LOG
-#define MF_LOG(level, format, ...) \
-	blog(level, "[Media Foundation encoder]: " format, ##__VA_ARGS__)
-#endif
-#ifndef MF_LOG_ENCODER
-#define MF_LOG_ENCODER(format_name, encoder, level, format, ...) \
-	blog(level, "[Media Foundation %s: '%s']: " format, \
-			format_name, obs_encoder_get_name(encoder), \
-			##__VA_ARGS__)
-#endif
-
-#ifndef MF_LOG_COM
-#define MF_LOG_COM(level, msg, hr) MF_LOG(level, \
-		msg " failed,  %S (0x%08lx)", \
-		_com_error(hr).ErrorMessage(), hr)
-#endif
-
-#ifndef HRC
-#define HRC(r) \
-	if(FAILED(hr = (r))) { \
-		MF_LOG_COM(LOG_ERROR, #r, hr); \
-		goto fail; \
-	}
-#endif
-
-#ifndef HR_CHECK
-#define HR_CHECK(level, r) \
-	if(FAILED(hr = (r))) { \
-		MF_LOG_COM(level, #r, hr); \
-		goto fail; \
-		}
-#endif
-
-#ifndef HRL
-#define HRL(r) \
-	if(FAILED(hr = (r))) \
-		MF_LOG_COM(LOG_WARNING, #r, hr);
-#endif
-
-namespace MF {
-
-enum Status {
-	FAILURE,
-	SUCCESS,
-	NOT_ACCEPTING,
-	NEED_MORE_INPUT
-};
-
-bool LogMediaType(IMFMediaType *mediaType);
-
-}

+ 0 - 17
plugins/win-mf/mf-config.hpp.in

@@ -1,17 +0,0 @@
-#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@

+ 0 - 194
plugins/win-mf/mf-encoder-descriptor.cpp

@@ -1,194 +0,0 @@
-#include <obs-module.h>
-#include <util/platform.h>
-#include <memory>
-#include <algorithm>
-
-#include "mf-encoder-descriptor.hpp"
-
-using namespace MF;
-
-template<class T> class ComHeapPtr {
-
-protected:
-	T *ptr;
-
-	inline void Kill()
-	{
-		if (ptr)
-			CoTaskMemFree(ptr);
-	}
-
-	inline void Replace(T *p)
-	{
-		if (ptr != p) {
-			if (ptr) ptr->Kill();
-			ptr = p;
-		}
-	}
-
-public:
-	inline ComHeapPtr() : ptr(nullptr)                 {}
-	inline ComHeapPtr(T *p) : ptr(p)                   {}
-	inline ComHeapPtr(const ComHeapPtr<T> &c)          = delete;
-	inline ComHeapPtr(ComHeapPtr<T> &&c)               = delete;
-	inline ~ComHeapPtr()                               { Kill(); }
-
-	inline void Clear()
-	{
-		if (ptr) {
-			Kill();
-			ptr = nullptr;
-		}
-	}
-
-	inline ComPtr<T> &operator=(T *p)
-	{
-		Replace(p);
-		return *this;
-	}
-
-	inline T *Detach()
-	{
-		T *out = ptr;
-		ptr = nullptr;
-		return out;
-	}
-
-	inline T **Assign()                { Clear(); return &ptr; }
-	inline void Set(T *p)              { Kill(); ptr = p; }
-
-	inline T *Get() const              { return ptr; }
-
-	inline T **operator&()             { return Assign(); }
-
-	inline    operator T*() const      { return ptr; }
-	inline T *operator->() const       { return ptr; }
-
-	inline bool operator==(T *p) const { return ptr == p; }
-	inline bool operator!=(T *p) const { return ptr != p; }
-
-	inline bool operator!() const      { return !ptr; }
-};
-
-struct EncoderEntry {
-	const char *guid;
-	const char *name;
-	const char *id;
-	EncoderType type;
-
-} guidNameMap[] = {
-	{
-		"{6CA50344-051A-4DED-9779-A43305165E35}",
-		"MF.H264.EncoderSWMicrosoft",
-		"mf_h264_software",
-		EncoderType::H264_SOFTWARE
-	},
-	{
-		"{ADC9BC80-0F41-46C6-AB75-D693D793597D}",
-		"MF.H264.EncoderHWAMD",
-		"mf_h264_vce",
-		EncoderType::H264_VCE,
-	},
-	{
-		"{4BE8D3C0-0515-4A37-AD55-E4BAE19AF471}",
-		"MF.H264.EncoderHWIntel",
-		"mf_h264_qsv",
-		EncoderType::H264_QSV
-	},
-	{
-		"{60F44560-5A20-4857-BFEF-D29773CB8040}",
-		"MF.H264.EncoderHWNVIDIA",
-		"mf_h264_nvenc",
-		EncoderType::H264_NVENC
-	}
-};
-
-static std::string MBSToString(wchar_t *mbs)
-{
-	char *cstr;
-	os_wcs_to_utf8_ptr(mbs, 0, &cstr);
-	std::string str = cstr;
-	bfree(cstr);
-	return str;
-}
-
-static std::unique_ptr<EncoderDescriptor> CreateDescriptor(
-		ComPtr<IMFActivate> activate)
-{
-	UINT32 flags;
-	if (FAILED(activate->GetUINT32(MF_TRANSFORM_FLAGS_Attribute, &flags)))
-		return nullptr;
-
-	bool isAsync = !(flags & MFT_ENUM_FLAG_SYNCMFT);
-	isAsync |= !!(flags & MFT_ENUM_FLAG_ASYNCMFT);
-	bool isHardware = !!(flags & MFT_ENUM_FLAG_HARDWARE);
-
-	GUID guid = {0};
-
-	if (FAILED(activate->GetGUID(MFT_TRANSFORM_CLSID_Attribute, &guid)))
-		return nullptr;
-
-	ComHeapPtr<WCHAR> guidW;
-	StringFromIID(guid, &guidW);
-	std::string guidString = MBSToString(guidW);
-
-	auto pred = [guidString](const EncoderEntry &name) {
-		return guidString == name.guid;
-	};
-
-	EncoderEntry *entry = std::find_if(std::begin(guidNameMap),
-			std::end(guidNameMap), pred);
-
-	std::unique_ptr<EncoderDescriptor> descriptor(new EncoderDescriptor(
-			activate, entry->name, entry->id, guid, guidString,
-			isAsync, isHardware, entry->type));
-
-	return descriptor;
-}
-
-std::vector<std::shared_ptr<EncoderDescriptor>> EncoderDescriptor::Enumerate()
-{
-	HRESULT hr;
-	UINT32 count = 0;
-	std::vector<std::shared_ptr<EncoderDescriptor>> descriptors;
-
-	ComHeapPtr<IMFActivate *> ppActivate;
-
-	MFT_REGISTER_TYPE_INFO info = { MFMediaType_Video, MFVideoFormat_H264 };
-
-	UINT32 unFlags = 0;
-
-	unFlags |= MFT_ENUM_FLAG_LOCALMFT;
-	unFlags |= MFT_ENUM_FLAG_TRANSCODE_ONLY;
-
-	unFlags |= MFT_ENUM_FLAG_SYNCMFT;
-	unFlags |= MFT_ENUM_FLAG_ASYNCMFT;
-	unFlags |= MFT_ENUM_FLAG_HARDWARE;
-
-	unFlags |= MFT_ENUM_FLAG_SORTANDFILTER;
-
-	hr = MFTEnumEx(MFT_CATEGORY_VIDEO_ENCODER,
-		unFlags,
-		NULL,
-		&info,
-		&ppActivate,
-		&count);
-
-	if (SUCCEEDED(hr) && count == 0) {
-		return descriptors;
-	}
-
-	if (SUCCEEDED(hr)) {
-		for (decltype(count) i = 0; i < count; i++) {
-			auto p = std::move(CreateDescriptor(ppActivate[i]));
-			if (p)
-				descriptors.emplace_back(std::move(p));
-		}
-	}
-
-	for (UINT32 i = 0; i < count; i++) {
-		ppActivate[i]->Release();
-	}
-
-	return descriptors;
-}

+ 0 - 76
plugins/win-mf/mf-encoder-descriptor.hpp

@@ -1,76 +0,0 @@
-#pragma once
-
-#define WIN32_MEAN_AND_LEAN
-#include <Windows.h>
-#undef WIN32_MEAN_AND_LEAN
-
-#include <mfapi.h>
-#include <mfidl.h>
-
-#include <stdint.h>
-#include <vector>
-
-#include <util/windows/ComPtr.hpp>
-
-namespace MF {
-
-enum class EncoderType {
-	H264_SOFTWARE,
-	H264_QSV,
-	H264_NVENC,
-	H264_VCE,
-};
-
-static const char *typeNames[] = {
-	"Software",
-	"Quicksync",
-	"NVENC",
-	"AMD VCE",
-};
-
-class EncoderDescriptor {
-public:
-	static std::vector<std::shared_ptr<EncoderDescriptor>> EncoderDescriptor::Enumerate();
-
-public:
-	EncoderDescriptor(ComPtr<IMFActivate> activate_,
-			const char *name_,
-			const char *id_,
-			GUID &guid_,
-			const std::string &guidString_,
-			bool isAsync_,
-			bool isHardware_,
-			EncoderType type_)
-		: activate             (activate_),
-		  name                 (name_),
-		  id                   (id_),
-		  guid                 (guid_),
-		  guidString           (guidString_),
-		  isAsync              (isAsync_),
-		  isHardware           (isHardware_),
-		  type                 (type_)
-	{}
-
-	EncoderDescriptor(const EncoderDescriptor &) = delete;
-
-public:
-	const char *Name() const { return name; }
-	const char *Id() const { return id; }
-	ComPtr<IMFActivate> &Activator() { return activate; }
-	GUID &Guid() { return guid; }
-	std::string GuidString() const { return guidString; }
-	bool Async() const { return isAsync; }
-	bool Hardware() const { return isHardware; }
-	EncoderType Type() const { return type; }
-
-private:
-	ComPtr<IMFActivate> activate;
-	const char *name;
-	const char *id;
-	GUID guid;
-	std::string guidString;
-	bool isAsync;
-	bool isHardware;
-	EncoderType type;
-};
-};

+ 0 - 774
plugins/win-mf/mf-h264-encoder.cpp

@@ -1,774 +0,0 @@
-#include <obs-module.h>
-#include <util/profiler.hpp>
-
-#include "mf-common.hpp"
-#include "mf-h264-encoder.hpp"
-
-#include <codecapi.h>
-#include <mferror.h>
-
-using namespace MF;
-
-static eAVEncH264VProfile MapProfile(H264Profile profile)
-{
-	switch (profile) {
-	case H264ProfileBaseline: return eAVEncH264VProfile_Base;
-	case H264ProfileMain:     return eAVEncH264VProfile_Main;
-	case H264ProfileHigh:     return eAVEncH264VProfile_High;
-	default:                  return eAVEncH264VProfile_Base;
-	}
-}
-
-static eAVEncCommonRateControlMode MapRateControl(H264RateControl rc)
-{
-	switch (rc) {
-	case H264RateControlCBR:
-		return eAVEncCommonRateControlMode_CBR;
-	case H264RateControlConstrainedVBR:
-		return eAVEncCommonRateControlMode_PeakConstrainedVBR;
-	case H264RateControlVBR:
-		return eAVEncCommonRateControlMode_UnconstrainedVBR;
-	case H264RateControlCQP:
-		return eAVEncCommonRateControlMode_Quality;
-	default:
-		return eAVEncCommonRateControlMode_CBR;
-	}
-}
-
-static UINT32 MapQpToQuality(H264QP &qp)
-{
-	return 100 - (UINT32)floor(100.0 / 51.0 * qp.defaultQp + 0.5f);
-}
-
-static bool ProcessNV12(std::function<void(UINT32 height, INT32 plane)> func,
-	UINT32 height)
-{
-	INT32 plane = 0;
-
-	func(height, plane++);
-	func(height / 2, plane);
-
-	return true;
-}
-
-H264Encoder::H264Encoder(const obs_encoder_t *encoder,
-	std::shared_ptr<EncoderDescriptor> descriptor,
-	UINT32 width,
-	UINT32 height,
-	UINT32 framerateNum,
-	UINT32 framerateDen,
-	H264Profile profile,
-	UINT32 bitrate)
-	: encoder(encoder),
-	descriptor(descriptor),
-	width(width),
-	height(height),
-	framerateNum(framerateNum),
-	framerateDen(framerateDen),
-	initialBitrate(bitrate),
-	profile(profile),
-	createOutputSample(false)
-{}
-
-H264Encoder::~H264Encoder()
-{
-	HRESULT hr;
-
-	if (!descriptor->Async() || !eventGenerator || !pendingRequests)
-		return;
-
-	// Make sure all events have finished before releasing, and drain
-	// all output requests until it makes an input request.
-	// If you do not do this, you risk it releasing while there's still
-	// encoder activity, which can cause a crash with certain interfaces.
-	while (inputRequests == 0) {
-		hr = ProcessOutput();
-		if (hr != MF_E_TRANSFORM_NEED_MORE_INPUT && FAILED(hr)) {
-			MF_LOG_COM(LOG_ERROR, "H264Encoder::~H264Encoder: "
-					"ProcessOutput()", hr);
-			break;
-		}
-
-		if (inputRequests == 0)
-			Sleep(1);
-	}
-}
-
-HRESULT H264Encoder::CreateMediaTypes(ComPtr<IMFMediaType> &i,
-		ComPtr<IMFMediaType> &o)
-{
-	HRESULT hr;
-	HRC(MFCreateMediaType(&i));
-	HRC(MFCreateMediaType(&o));
-
-	HRC(i->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));
-	HRC(i->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_NV12));
-	HRC(MFSetAttributeSize(i, MF_MT_FRAME_SIZE, width, height));
-	HRC(MFSetAttributeRatio(i, MF_MT_FRAME_RATE, framerateNum,
-			framerateDen));
-	HRC(i->SetUINT32(MF_MT_INTERLACE_MODE,
-			MFVideoInterlaceMode::MFVideoInterlace_Progressive));
-	HRC(MFSetAttributeRatio(i, MF_MT_PIXEL_ASPECT_RATIO, 1, 1));
-
-	HRC(o->SetGUID(MF_MT_MAJOR_TYPE, MFMediaType_Video));
-	HRC(o->SetGUID(MF_MT_SUBTYPE, MFVideoFormat_H264));
-	HRC(MFSetAttributeSize(o, MF_MT_FRAME_SIZE, width, height));
-	HRC(MFSetAttributeRatio(o, MF_MT_FRAME_RATE, framerateNum,
-			framerateDen));
-	HRC(o->SetUINT32(MF_MT_AVG_BITRATE, initialBitrate * 1000));
-	HRC(o->SetUINT32(MF_MT_INTERLACE_MODE,
-			MFVideoInterlaceMode::MFVideoInterlace_Progressive));
-	HRC(MFSetAttributeRatio(o, MF_MT_PIXEL_ASPECT_RATIO, 1, 1));
-	HRC(o->SetUINT32(MF_MT_MPEG2_LEVEL, (UINT32)-1));
-	HRC(o->SetUINT32(MF_MT_MPEG2_PROFILE, MapProfile(profile)));
-
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-HRESULT H264Encoder::DrainEvents()
-{
-	HRESULT hr;
-	while ((hr = DrainEvent(false)) == S_OK);
-	if (hr == MF_E_NO_EVENTS_AVAILABLE)
-		hr = S_OK;
-	return hr;
-}
-
-HRESULT H264Encoder::DrainEvent(bool block)
-{
-	HRESULT hr, eventStatus;
-	ComPtr<IMFMediaEvent> event;
-	MediaEventType type;
-
-	hr = eventGenerator->GetEvent(
-		block ? 0 : MF_EVENT_FLAG_NO_WAIT, &event);
-
-	if (hr != MF_E_NO_EVENTS_AVAILABLE && FAILED(hr))
-		goto fail;
-	if (hr == MF_E_NO_EVENTS_AVAILABLE)
-		return hr;
-
-	HRC(event->GetType(&type));
-	HRC(event->GetStatus(&eventStatus));
-
-	if (SUCCEEDED(eventStatus)) {
-		if (type == METransformNeedInput) {
-			inputRequests++;
-		}
-		else if (type == METransformHaveOutput) {
-			outputRequests++;
-		}
-	}
-
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-HRESULT H264Encoder::InitializeEventGenerator()
-{
-	HRESULT hr;
-
-	HRC(transform->QueryInterface(&eventGenerator));
-
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-HRESULT H264Encoder::InitializeExtraData()
-{
-	HRESULT hr;
-	ComPtr<IMFMediaType> inputType;
-	UINT32 headerSize;
-
-	extraData.clear();
-
-	HRC(transform->GetOutputCurrentType(0, &inputType));
-
-	HRC(inputType->GetBlobSize(MF_MT_MPEG_SEQUENCE_HEADER, &headerSize));
-
-	extraData.resize(headerSize);
-
-	HRC(inputType->GetBlob(MF_MT_MPEG_SEQUENCE_HEADER, extraData.data(),
-			headerSize, NULL));
-
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-static HRESULT SetCodecProperty(ComPtr<ICodecAPI> &codecApi, GUID guid,
-	bool value)
-{
-	VARIANT v;
-	v.vt = VT_BOOL;
-	v.boolVal = value ? VARIANT_TRUE : VARIANT_FALSE;
-	return codecApi->SetValue(&guid, &v);
-}
-
-static HRESULT SetCodecProperty(ComPtr<ICodecAPI> &codecApi, GUID guid,
-	UINT32 value)
-{
-	VARIANT v;
-	v.vt = VT_UI4;
-	v.ulVal = value;
-	return codecApi->SetValue(&guid, &v);
-}
-
-static HRESULT SetCodecProperty(ComPtr<ICodecAPI> &codecApi, GUID guid,
-	UINT64 value)
-{
-	VARIANT v;
-	v.vt = VT_UI8;
-	v.ullVal = value;
-	return codecApi->SetValue(&guid, &v);
-}
-
-bool H264Encoder::SetBitrate(UINT32 bitrate)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-				CODECAPI_AVEncCommonMeanBitRate,
-				UINT32(bitrate * 1000)));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetQP(H264QP &qp)
-{
-	HRESULT hr;
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-				CODECAPI_AVEncCommonQuality,
-				UINT32(MapQpToQuality(qp))));
-		HRL(SetCodecProperty(codecApi,
-				CODECAPI_AVEncVideoEncodeQP,
-				UINT64(qp.Pack(true))));
-		HRL(SetCodecProperty(codecApi,
-				CODECAPI_AVEncVideoEncodeFrameTypeQP,
-				UINT64(qp.Pack(false))));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetMinQP(UINT32 minQp)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-				CODECAPI_AVEncVideoMinQP,
-				UINT32(minQp)));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetMaxQP(UINT32 maxQp)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-				CODECAPI_AVEncVideoMaxQP,
-				UINT32(maxQp)));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetRateControl(H264RateControl rateControl)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-				CODECAPI_AVEncCommonRateControlMode,
-				UINT32(MapRateControl(rateControl))));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetKeyframeInterval(UINT32 seconds)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		float gopSize = float(framerateNum) / framerateDen * seconds;
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-				CODECAPI_AVEncMPVGOPSize,
-				UINT32(gopSize)));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetMaxBitrate(UINT32 maxBitrate)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-			CODECAPI_AVEncCommonMaxBitRate,
-			UINT32(maxBitrate * 1000)));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetLowLatency(bool lowLatency)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-			CODECAPI_AVEncCommonLowLatency,
-			lowLatency));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetBufferSize(UINT32 bufferSize)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-			CODECAPI_AVEncCommonBufferSize,
-			UINT32(bufferSize * 1000)));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetBFrameCount(UINT32 bFrames)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-			CODECAPI_AVEncMPVDefaultBPictureCount,
-			UINT32(bFrames)));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::SetEntropyEncoding(H264EntropyEncoding entropyEncoding)
-{
-	HRESULT hr;
-
-	if (codecApi) {
-		HR_CHECK(LOG_WARNING, SetCodecProperty(codecApi,
-				CODECAPI_AVEncH264CABACEnable,
-				entropyEncoding == H264EntropyEncodingCABAC));
-	}
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::Initialize(std::function<bool(void)> func)
-{
-	ProfileScope("H264Encoder::Initialize");
-
-	HRESULT hr;
-
-	ComPtr<IMFMediaType> inputType, outputType;
-	ComPtr<IMFAttributes> transformAttributes;
-	MFT_OUTPUT_STREAM_INFO streamInfo = {0};
-
-	HRC(CoCreateInstance(descriptor->Guid(), NULL, CLSCTX_INPROC_SERVER,
-			IID_PPV_ARGS(&transform)));
-
-	HRC(CreateMediaTypes(inputType, outputType));
-
-	if (descriptor->Async()) {
-		HRC(transform->GetAttributes(&transformAttributes));
-		HRC(transformAttributes->SetUINT32(MF_TRANSFORM_ASYNC_UNLOCK,
-				TRUE));
-	}
-
-	HRC(transform->QueryInterface(&codecApi));
-
-	if (func && !func()) {
-		MF_LOG(LOG_ERROR, "Failed setting custom properties");
-		goto fail;
-	}
-
-	MF_LOG(LOG_INFO, "Activating encoder: %s",
-			typeNames[(int)descriptor->Type()]);
-
-	MF_LOG(LOG_INFO, "  Setting output type to transform:");
-	LogMediaType(outputType.Get());
-	HRC(transform->SetOutputType(0, outputType.Get(), 0));
-
-	MF_LOG(LOG_INFO, "  Setting input type to transform:");
-	LogMediaType(inputType.Get());
-	HRC(transform->SetInputType(0, inputType.Get(), 0));
-
-	HRC(transform->ProcessMessage(MFT_MESSAGE_NOTIFY_BEGIN_STREAMING,
-		NULL));
-
-	HRC(transform->ProcessMessage(MFT_MESSAGE_NOTIFY_START_OF_STREAM,
-		NULL));
-
-	if (descriptor->Async())
-		HRC(InitializeEventGenerator());
-
-	HRC(transform->GetOutputStreamInfo(0, &streamInfo));
-	createOutputSample = !(streamInfo.dwFlags &
-			       (MFT_OUTPUT_STREAM_PROVIDES_SAMPLES |
-			        MFT_OUTPUT_STREAM_CAN_PROVIDE_SAMPLES));
-
-	return true;
-
-fail:
-	return false;
-}
-
-bool H264Encoder::ExtraData(UINT8 **data, UINT32 *dataLength)
-{
-	if (extraData.empty())
-		return false;
-
-	*data = extraData.data();
-	*dataLength = (UINT32)extraData.size();
-
-	return true;
-}
-
-HRESULT H264Encoder::CreateEmptySample(ComPtr<IMFSample> &sample,
-	ComPtr<IMFMediaBuffer> &buffer, DWORD length)
-{
-	HRESULT hr;
-
-	HRC(MFCreateSample(&sample));
-	HRC(MFCreateMemoryBuffer(length, &buffer));
-	HRC(sample->AddBuffer(buffer.Get()));
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-HRESULT H264Encoder::EnsureCapacity(ComPtr<IMFSample> &sample, DWORD length)
-{
-	HRESULT hr;
-	ComPtr<IMFMediaBuffer> buffer;
-	DWORD currentLength;
-
-	if (!sample) {
-		HRC(CreateEmptySample(sample, buffer, length));
-	}
-	else {
-		HRC(sample->GetBufferByIndex(0, &buffer));
-	}
-
-	HRC(buffer->GetMaxLength(&currentLength));
-	if (currentLength < length) {
-		HRC(sample->RemoveAllBuffers());
-		HRC(MFCreateMemoryBuffer(length, &buffer));
-		HRC(sample->AddBuffer(buffer));
-	}
-	else {
-		buffer->SetCurrentLength(0);
-	}
-
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-HRESULT H264Encoder::ProcessInput(ComPtr<IMFSample> &sample)
-{
-	ProfileScope("H264Encoder::ProcessInput(sample)");
-
-	HRESULT hr = S_OK;
-	if (descriptor->Async()) {
-		if (inputRequests == 1 && inputSamples.empty()) {
-			inputRequests--;
-			return transform->ProcessInput(0, sample, 0);
-		}
-
-		inputSamples.push(sample);
-
-		while (inputRequests > 0) {
-			if (inputSamples.empty())
-				return hr;
-			ComPtr<IMFSample> queuedSample = inputSamples.front();
-			inputSamples.pop();
-			inputRequests--;
-			HRC(transform->ProcessInput(0, queuedSample, 0));
-		}
-	} else {
-		return transform->ProcessInput(0, sample, 0);
-	}
-
-fail:
-	return hr;
-}
-
-bool H264Encoder::ProcessInput(UINT8 **data, UINT32 *linesize, UINT64 pts,
-		Status *status)
-{
-	ProfileScope("H264Encoder::ProcessInput");
-
-	HRESULT hr;
-	ComPtr<IMFSample> sample;
-	ComPtr<IMFMediaBuffer> buffer;
-	BYTE *bufferData;
-	UINT64 sampleDur;
-	UINT32 imageSize;
-
-	HRC(MFCalculateImageSize(MFVideoFormat_NV12, width, height, &imageSize));
-
-	HRC(CreateEmptySample(sample, buffer, imageSize));
-
-	{
-		ProfileScope("H264EncoderCopyInputSample");
-
-		HRC(buffer->Lock(&bufferData, NULL, NULL));
-
-		ProcessNV12([&, this](DWORD height, int plane) {
-			MFCopyImage(bufferData, width, data[plane],
-					linesize[plane], width, height);
-			bufferData += width * height;
-		}, height);
-	}
-
-	HRC(buffer->Unlock());
-	HRC(buffer->SetCurrentLength(imageSize));
-
-	MFFrameRateToAverageTimePerFrame(framerateNum, framerateDen, &sampleDur);
-
-	HRC(sample->SetSampleTime(pts * sampleDur));
-	HRC(sample->SetSampleDuration(sampleDur));
-
-	if (descriptor->Async()) {
-		HRC(DrainEvents());
-
-		while (outputRequests > 0 && (hr = ProcessOutput()) == S_OK);
-
-		if (hr != MF_E_TRANSFORM_NEED_MORE_INPUT && FAILED(hr)) {
-			MF_LOG_COM(LOG_ERROR, "ProcessOutput()", hr);
-			goto fail;
-		}
-
-
-		while (inputRequests == 0) {
-			hr = DrainEvent(false);
-			if (hr == MF_E_NO_EVENTS_AVAILABLE) {
-				Sleep(1);
-				continue;
-			}
-			if (FAILED(hr)) {
-				MF_LOG_COM(LOG_ERROR, "DrainEvent()", hr);
-				goto fail;
-			}
-			if (outputRequests > 0) {
-				hr = ProcessOutput();
-				if (hr != MF_E_TRANSFORM_NEED_MORE_INPUT &&
-				    FAILED(hr))
-					goto fail;
-			}
-		}
-	}
-
-	HRC(ProcessInput(sample));
-
-	pendingRequests++;
-
-	*status = SUCCESS;
-	return true;
-
-fail:
-	*status = FAILURE;
-	return false;
-}
-
-HRESULT H264Encoder::ProcessOutput()
-{
-	HRESULT hr;
-	ComPtr<IMFSample> sample;
-	MFT_OUTPUT_STREAM_INFO outputInfo = { 0 };
-
-	DWORD outputStatus = 0;
-	MFT_OUTPUT_DATA_BUFFER output = { 0 };
-	ComPtr<IMFMediaBuffer> buffer;
-	BYTE *bufferData;
-	DWORD bufferLength;
-	INT64 samplePts;
-	INT64 sampleDts;
-	INT64 sampleDur;
-	std::unique_ptr<std::vector<BYTE>> data(new std::vector<BYTE>());
-	ComPtr<IMFMediaType> type;
-	std::unique_ptr<H264Frame> frame;
-
-	if (descriptor->Async()) {
-		HRC(DrainEvents());
-
-		if (outputRequests == 0)
-			return S_OK;
-
-		outputRequests--;
-	}
-
-	if (createOutputSample) {
-		HRC(transform->GetOutputStreamInfo(0, &outputInfo));
-		HRC(CreateEmptySample(sample, buffer, outputInfo.cbSize));
-		output.pSample = sample;
-	} else {
-		output.pSample = NULL;
-	}
-
-	while (true) {
-		hr = transform->ProcessOutput(0, 1, &output,
-				&outputStatus);
-		ComPtr<IMFCollection> events(output.pEvents);
-
-		if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT)
-			return hr;
-
-		if (hr == MF_E_TRANSFORM_STREAM_CHANGE) {
-			HRC(transform->GetOutputAvailableType(0, 0, &type));
-			HRC(transform->SetOutputType(0, type, 0));
-			MF_LOG(LOG_INFO, "Updating output type to transform");
-			LogMediaType(type);
-			if (descriptor->Async() && outputRequests > 0) {
-				outputRequests--;
-				continue;
-			} else {
-				return MF_E_TRANSFORM_NEED_MORE_INPUT;
-			}
-		}
-
-		if (hr != S_OK) {
-			MF_LOG_COM(LOG_ERROR, "transform->ProcessOutput()",
-					hr);
-			return hr;
-		}
-
-		break;
-	}
-
-	if (!createOutputSample)
-		sample.Set(output.pSample);
-
-
-	HRC(sample->GetBufferByIndex(0, &buffer));
-
-	bool keyframe = !!MFGetAttributeUINT32(sample,
-			MFSampleExtension_CleanPoint, FALSE);
-
-	HRC(buffer->Lock(&bufferData, NULL, &bufferLength));
-
-	if (keyframe && extraData.empty())
-		HRC(InitializeExtraData());
-
-	data->reserve(bufferLength + extraData.size());
-
-	if (keyframe)
-		data->insert(data->end(), extraData.begin(), extraData.end());
-
-	data->insert(data->end(), &bufferData[0], &bufferData[bufferLength]);
-	HRC(buffer->Unlock());
-
-	HRC(sample->GetSampleDuration(&sampleDur));
-	HRC(sample->GetSampleTime(&samplePts));
-
-	sampleDts = MFGetAttributeUINT64(sample,
-			MFSampleExtension_DecodeTimestamp, samplePts);
-
-	frame.reset(new H264Frame(keyframe,
-			samplePts / sampleDur,
-			sampleDts / sampleDur,
-			std::move(data)));
-
-	encodedFrames.push(std::move(frame));
-
-	return S_OK;
-
-fail:
-	return hr;
-}
-
-bool H264Encoder::ProcessOutput(UINT8 **data, UINT32 *dataLength,
-		UINT64 *pts, UINT64 *dts, bool *keyframe, Status *status)
-{
-	ProfileScope("H264Encoder::ProcessOutput");
-
-	HRESULT hr;
-
-	hr = ProcessOutput();
-
-	if (hr == MF_E_TRANSFORM_NEED_MORE_INPUT || encodedFrames.empty()) {
-		*status = NEED_MORE_INPUT;
-		return true;
-	}
-
-	if (FAILED(hr) && encodedFrames.empty()) {
-		*status = FAILURE;
-		return false;
-	}
-
-	activeFrame = std::move(encodedFrames.front());
-	encodedFrames.pop();
-
-	*data = activeFrame.get()->Data();
-	*dataLength = activeFrame.get()->DataLength();
-	*pts = activeFrame.get()->Pts();
-	*dts = activeFrame.get()->Dts();
-	*keyframe = activeFrame.get()->Keyframe();
-	*status = SUCCESS;
-
-	pendingRequests--;
-
-	return true;
-}

+ 0 - 175
plugins/win-mf/mf-h264-encoder.hpp

@@ -1,175 +0,0 @@
-#pragma once
-
-#include <obs-module.h>
-
-#define WIN32_MEAN_AND_LEAN
-#include <Windows.h>
-#undef WIN32_MEAN_AND_LEAN
-
-#include <mfapi.h>
-#include <mfidl.h>
-
-#include <wmcodecdsp.h>
-
-#include <vector>
-#include <queue>
-#include <memory>
-#include <atomic>
-
-#include <util/windows/ComPtr.hpp>
-
-#include "mf-encoder-descriptor.hpp"
-#include "mf-common.hpp"
-
-namespace MF {
-	enum H264Profile {
-		H264ProfileBaseline,
-		H264ProfileMain,
-		H264ProfileHigh
-	};
-
-	enum H264RateControl {
-		H264RateControlCBR,
-		H264RateControlConstrainedVBR,
-		H264RateControlVBR,
-		H264RateControlCQP
-	};
-
-	struct H264QP {
-		UINT16 defaultQp;
-		UINT16 i;
-		UINT16 p;
-		UINT16 b;
-
-		UINT64 Pack(bool packDefault) {
-			int shift = packDefault ? 0 : 16;
-			UINT64 packedQp;
-			if (packDefault)
-				packedQp = defaultQp;
-
-			packedQp |= i << shift;
-			shift += 16;
-			packedQp |= p << shift;
-			shift += 16;
-			packedQp |= b << shift;
-
-			return packedQp;
-		}
-	};
-
-	enum H264EntropyEncoding {
-		H264EntropyEncodingCABLC,
-		H264EntropyEncodingCABAC
-	};
-
-	struct H264Frame {
-	public:
-		H264Frame(bool keyframe, UINT64 pts, UINT64 dts,
-				std::unique_ptr<std::vector<uint8_t>> data)
-			: keyframe(keyframe), pts(pts), dts(dts),
-			  data(std::move(data))
-		{}
-		bool Keyframe() { return keyframe; }
-		BYTE *Data() { return data.get()->data(); }
-		DWORD DataLength() { return (DWORD)data.get()->size(); }
-		INT64 Pts() { return pts; }
-		INT64 Dts() { return dts; }
-
-	private:
-		H264Frame(H264Frame const&) = delete;
-		H264Frame& operator=(H264Frame const&) = delete;
-	private:
-		bool keyframe;
-		INT64 pts;
-		INT64 dts;
-		std::unique_ptr<std::vector<uint8_t>> data;
-	};
-
-	class H264Encoder {
-	public:
-		H264Encoder(const obs_encoder_t *encoder,
-			std::shared_ptr<EncoderDescriptor> descriptor,
-			UINT32 width,
-			UINT32 height,
-			UINT32 framerateNum,
-			UINT32 framerateDen,
-			H264Profile profile,
-			UINT32 bitrate);
-
-		~H264Encoder();
-
-		bool Initialize(std::function<bool(void)> func);
-		bool ProcessInput(UINT8 **data, UINT32 *linesize, UINT64 pts,
-			Status *status);
-		bool ProcessOutput(UINT8 **data, UINT32 *dataLength,
-			UINT64 *pts, UINT64 *dts, bool *keyframe,
-			Status *status);
-		bool ExtraData(UINT8 **data, UINT32 *dataLength);
-
-		const obs_encoder_t *ObsEncoder() { return encoder; }
-
-	public:
-		bool SetBitrate(UINT32 bitrate);
-		bool SetQP(H264QP &qp);
-		bool SetMaxBitrate(UINT32 maxBitrate);
-		bool SetRateControl(H264RateControl rateControl);
-		bool SetKeyframeInterval(UINT32 seconds);
-		bool SetLowLatency(bool lowLatency);
-		bool SetBufferSize(UINT32 bufferSize);
-		bool SetBFrameCount(UINT32 bFrames);
-		bool SetEntropyEncoding(H264EntropyEncoding entropyEncoding);
-		bool SetMinQP(UINT32 minQp);
-		bool SetMaxQP(UINT32 maxQp);
-
-	private:
-		H264Encoder(H264Encoder const&) = delete;
-		H264Encoder& operator=(H264Encoder const&) = delete;
-
-	private:
-		HRESULT InitializeEventGenerator();
-		HRESULT InitializeExtraData();
-		HRESULT CreateMediaTypes(ComPtr<IMFMediaType> &inputType,
-			ComPtr<IMFMediaType> &outputType);
-		HRESULT EnsureCapacity(ComPtr<IMFSample> &sample, DWORD length);
-		HRESULT CreateEmptySample(ComPtr<IMFSample> &sample,
-			ComPtr<IMFMediaBuffer> &buffer, DWORD length);
-
-		HRESULT ProcessInput(ComPtr<IMFSample> &sample);
-		HRESULT ProcessOutput();
-
-		HRESULT DrainEvent(bool block);
-		HRESULT DrainEvents();
-	private:
-		const obs_encoder_t *encoder;
-		std::shared_ptr<EncoderDescriptor> descriptor;
-		const UINT32 width;
-		const UINT32 height;
-		const UINT32 framerateNum;
-		const UINT32 framerateDen;
-		const UINT32 initialBitrate;
-		const H264Profile profile;
-
-		bool createOutputSample;
-		ComPtr<IMFTransform> transform;
-		ComPtr<ICodecAPI> codecApi;
-
-		std::vector<BYTE> extraData;
-
-		// The frame returned by ProcessOutput
-		// Valid until the next call to ProcessOutput
-		std::unique_ptr<H264Frame> activeFrame;
-
-		// Queued input samples that the encoder was not ready
-		// to process
-		std::queue<ComPtr<IMFSample>> inputSamples;
-
-		// Queued output samples that have not been returned from
-		// ProcessOutput yet
-		std::queue<std::unique_ptr<H264Frame>> encodedFrames;
-
-		ComPtr<IMFMediaEventGenerator> eventGenerator;
-		std::atomic<UINT32> inputRequests = 0;
-		std::atomic<UINT32> outputRequests = 0;
-		std::atomic<UINT32> pendingRequests = 0;
-	};
-}

+ 0 - 555
plugins/win-mf/mf-h264.cpp

@@ -1,555 +0,0 @@
-#include <obs-module.h>
-#include <util/profiler.hpp>
-
-#include <memory>
-#include <chrono>
-
-#include "mf-h264-encoder.hpp"
-#include "mf-encoder-descriptor.hpp"
-#include <VersionHelpers.h>
-
-using namespace MF;
-
-struct MFH264_Encoder {
-	obs_encoder_t *encoder;
-	std::shared_ptr<EncoderDescriptor> descriptor;
-	std::unique_ptr<H264Encoder> h264Encoder;
-	uint32_t width;
-	uint32_t height;
-	uint32_t framerateNum;
-	uint32_t framerateDen;
-	uint32_t keyint;
-	bool advanced;
-	uint32_t bitrate;
-	uint32_t maxBitrate;
-	bool useMaxBitrate;
-	uint32_t bufferSize;
-	bool useBufferSize;
-	H264Profile profile;
-	H264RateControl rateControl;
-	H264QP qp;
-	uint32_t minQp;
-	uint32_t maxQp;
-	bool lowLatency;
-	uint32_t bFrames;
-
-	const char *profiler_encode = nullptr;
-};
-
-#define MFTEXT(x) obs_module_text("MF.H264." x)
-#define TEXT_ADVANCED        MFTEXT("Advanced")
-#define TEXT_LOW_LAT         MFTEXT("LowLatency")
-#define TEXT_B_FRAMES        MFTEXT("BFrames")
-#define TEXT_BITRATE         MFTEXT("Bitrate")
-#define TEXT_CUSTOM_BUF      MFTEXT("CustomBufsize")
-#define TEXT_BUF_SIZE        MFTEXT("BufferSize")
-#define TEXT_USE_MAX_BITRATE MFTEXT("CustomMaxBitrate")
-#define TEXT_MAX_BITRATE     MFTEXT("MaxBitrate")
-#define TEXT_KEYINT_SEC      MFTEXT("KeyframeIntervalSec")
-#define TEXT_RATE_CONTROL    MFTEXT("RateControl")
-#define TEXT_MIN_QP          MFTEXT("MinQP")
-#define TEXT_MAX_QP          MFTEXT("MaxQP")
-#define TEXT_QPI             MFTEXT("QPI")
-#define TEXT_QPP             MFTEXT("QPP")
-#define TEXT_QPB             MFTEXT("QPB")
-#define TEXT_PROFILE         MFTEXT("Profile")
-#define TEXT_CBR             MFTEXT("CBR")
-#define TEXT_VBR             MFTEXT("VBR")
-#define TEXT_CQP             MFTEXT("CQP")
-
-#define MFP(x) "mf_h264_" ## x
-#define MFP_USE_ADVANCED     MFP("use_advanced")
-#define MFP_USE_LOWLAT       MFP("use_low_latency")
-#define MFP_B_FRAMES         MFP("b_frames")
-#define MFP_BITRATE          MFP("bitrate")
-#define MFP_USE_BUF_SIZE     MFP("use_buf_size")
-#define MFP_BUF_SIZE         MFP("buf_size")
-#define MFP_USE_MAX_BITRATE  MFP("use_max_bitrate")
-#define MFP_MAX_BITRATE      MFP("max_bitrate")
-#define MFP_KEY_INT          MFP("key_int")
-#define MFP_RATE_CONTROL     MFP("rate_control")
-#define MFP_MIN_QP           MFP("min_qp")
-#define MFP_MAX_QP           MFP("max_qp")
-#define MFP_QP_I             MFP("qp_i")
-#define MFP_QP_P             MFP("qp_p")
-#define MFP_QP_B             MFP("qp_b")
-#define MFP_PROFILE          MFP("profile")
-
-struct TypeData {
-	std::shared_ptr<EncoderDescriptor> descriptor;
-
-	inline TypeData(std::shared_ptr<EncoderDescriptor> descriptor_)
-		: descriptor(descriptor_)
-	{}
-};
-
-static const char *MFH264_GetName(void *type_data)
-{
-	TypeData &typeData = *reinterpret_cast<TypeData*>(type_data);
-	return obs_module_text(typeData.descriptor->Name());
-}
-
-static void set_visible(obs_properties_t *ppts, const char *name, bool visible)
-{
-	obs_property_t *p = obs_properties_get(ppts, name);
-	obs_property_set_visible(p, visible);
-}
-
-static bool use_bufsize_modified(obs_properties_t *ppts, obs_property_t *p,
-	obs_data_t *settings)
-{
-	UNUSED_PARAMETER(p);
-
-	bool use_bufsize = obs_data_get_bool(settings, MFP_USE_BUF_SIZE);
-
-	set_visible(ppts, MFP_BUF_SIZE, use_bufsize);
-
-	return true;
-}
-
-static bool use_max_bitrate_modified(obs_properties_t *ppts, obs_property_t *p,
-	obs_data_t *settings)
-{
-	UNUSED_PARAMETER(p);
-
-	bool advanced        = obs_data_get_bool(settings, MFP_USE_ADVANCED);
-	bool use_max_bitrate = obs_data_get_bool(settings, MFP_USE_MAX_BITRATE);
-
-	set_visible(ppts, MFP_MAX_BITRATE, advanced && use_max_bitrate);
-
-	return true;
-}
-
-static bool use_advanced_modified(obs_properties_t *ppts, obs_property_t *p,
-	obs_data_t *settings)
-{
-	UNUSED_PARAMETER(p);
-
-	bool advanced = obs_data_get_bool(settings, MFP_USE_ADVANCED);
-
-	set_visible(ppts, MFP_MIN_QP,       advanced);
-	set_visible(ppts, MFP_MAX_QP,       advanced);
-	set_visible(ppts, MFP_USE_LOWLAT,   advanced);
-	set_visible(ppts, MFP_B_FRAMES,     advanced);
-
-	H264RateControl rateControl = (H264RateControl)obs_data_get_int(
-		settings, MFP_RATE_CONTROL);
-
-	if (rateControl == H264RateControlCBR ||
-	    rateControl == H264RateControlVBR) {
-		set_visible(ppts, MFP_USE_MAX_BITRATE, advanced);
-		use_max_bitrate_modified(ppts, NULL, settings);
-	}
-
-	return true;
-}
-
-static bool rate_control_modified(obs_properties_t *ppts, obs_property_t *p,
-	obs_data_t *settings)
-{
-	UNUSED_PARAMETER(p);
-
-	H264RateControl rateControl = (H264RateControl)obs_data_get_int(
-		settings, MFP_RATE_CONTROL);
-
-	bool advanced = obs_data_get_bool(settings, MFP_USE_ADVANCED);
-
-	set_visible(ppts, MFP_BITRATE,         false);
-	set_visible(ppts, MFP_USE_BUF_SIZE,    false);
-	set_visible(ppts, MFP_BUF_SIZE,        false);
-	set_visible(ppts, MFP_USE_MAX_BITRATE, false);
-	set_visible(ppts, MFP_MAX_BITRATE,     false);
-	set_visible(ppts, MFP_QP_I,            false);
-	set_visible(ppts, MFP_QP_P,            false);
-	set_visible(ppts, MFP_QP_B,            false);
-
-	switch (rateControl) {
-	case H264RateControlCBR:
-		use_bufsize_modified(ppts,     NULL, settings);
-		use_max_bitrate_modified(ppts, NULL, settings);
-
-		set_visible(ppts, MFP_BITRATE,         true);
-		set_visible(ppts, MFP_USE_BUF_SIZE,    true);
-		set_visible(ppts, MFP_USE_MAX_BITRATE, advanced);
-
-		break;
-	case H264RateControlVBR:
-		use_bufsize_modified(ppts,     NULL, settings);
-		use_max_bitrate_modified(ppts, NULL, settings);
-
-		set_visible(ppts, MFP_BITRATE,         true);
-		set_visible(ppts, MFP_USE_BUF_SIZE,    true);
-		set_visible(ppts, MFP_USE_MAX_BITRATE, advanced);
-
-		break;
-	case H264RateControlCQP:
-		set_visible(ppts, MFP_QP_I,            true);
-		set_visible(ppts, MFP_QP_P,            true);
-		set_visible(ppts, MFP_QP_B,            true);
-
-		break;
-	default: break;
-	}
-
-	return true;
-}
-
-static obs_properties_t *MFH264_GetProperties(void *)
-{
-	obs_properties_t *props = obs_properties_create();
-	obs_property_t *p;
-
-	obs_property_t *list = obs_properties_add_list(props, MFP_PROFILE,
-		TEXT_PROFILE, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
-
-	obs_property_list_add_int(list, "baseline", H264ProfileBaseline);
-	obs_property_list_add_int(list, "main",     H264ProfileMain);
-	obs_property_list_add_int(list, "high",     H264ProfileHigh);
-
-	p = obs_properties_add_int(props, MFP_KEY_INT, TEXT_KEYINT_SEC, 0, 20, 1);
-	obs_property_int_set_suffix(p, " s");
-
-	list = obs_properties_add_list(props, MFP_RATE_CONTROL,
-		TEXT_RATE_CONTROL, OBS_COMBO_TYPE_LIST, OBS_COMBO_FORMAT_INT);
-
-	obs_property_list_add_int(list, TEXT_CBR, H264RateControlCBR);
-	obs_property_list_add_int(list, TEXT_VBR, H264RateControlVBR);
-	obs_property_list_add_int(list, TEXT_CQP, H264RateControlCQP);
-
-	obs_property_set_modified_callback(list, rate_control_modified);
-
-	obs_properties_add_int(props, MFP_BITRATE, TEXT_BITRATE, 50, 10000000,
-			1);
-
-	p = obs_properties_add_bool(props, MFP_USE_BUF_SIZE, TEXT_CUSTOM_BUF);
-	obs_property_set_modified_callback(p, use_bufsize_modified);
-	obs_properties_add_int(props, MFP_BUF_SIZE, TEXT_BUF_SIZE, 0,
-			10000000, 1);
-
-	obs_properties_add_int(props, MFP_QP_I, TEXT_QPI, 0, 51, 1);
-	obs_properties_add_int(props, MFP_QP_P, TEXT_QPP, 0, 51, 1);
-	obs_properties_add_int(props, MFP_QP_B, TEXT_QPB, 0, 51, 1);
-
-	p = obs_properties_add_bool(props, MFP_USE_ADVANCED, TEXT_ADVANCED);
-	obs_property_set_modified_callback(p, use_advanced_modified);
-
-	p = obs_properties_add_bool(props, MFP_USE_MAX_BITRATE,
-		TEXT_USE_MAX_BITRATE);
-	obs_property_set_modified_callback(p, use_max_bitrate_modified);
-	obs_properties_add_int(props, MFP_MAX_BITRATE, TEXT_MAX_BITRATE, 50,
-		10000000, 1);
-
-	obs_properties_add_bool(props, MFP_USE_LOWLAT, TEXT_LOW_LAT);
-	obs_properties_add_int(props,  MFP_B_FRAMES,   TEXT_B_FRAMES, 0, 16, 1);
-	obs_properties_add_int(props,  MFP_MIN_QP,     TEXT_MIN_QP,   1, 51, 1);
-	obs_properties_add_int(props,  MFP_MAX_QP,     TEXT_MAX_QP,   1, 51, 1);
-	return props;
-}
-
-static void MFH264_GetDefaults(obs_data_t *settings)
-{
-#define PROP_DEF(x, y, z) obs_data_set_default_ ## x(settings, y, z)
-	PROP_DEF(int,    MFP_BITRATE,         2500);
-	PROP_DEF(bool,   MFP_USE_LOWLAT,      true);
-	PROP_DEF(int,    MFP_B_FRAMES,        2);
-	PROP_DEF(bool,   MFP_USE_BUF_SIZE,    false);
-	PROP_DEF(int,    MFP_BUF_SIZE,        2500);
-	PROP_DEF(bool,   MFP_USE_MAX_BITRATE, false);
-	PROP_DEF(int,    MFP_MAX_BITRATE,     2500);
-	PROP_DEF(int,    MFP_KEY_INT,         2);
-	PROP_DEF(int,    MFP_RATE_CONTROL,    H264RateControlCBR);
-	PROP_DEF(int,    MFP_PROFILE,         H264ProfileMain);
-	PROP_DEF(int,    MFP_MIN_QP,          1);
-	PROP_DEF(int,    MFP_MAX_QP,          51);
-	PROP_DEF(int,    MFP_QP_I,            26);
-	PROP_DEF(int,    MFP_QP_B,            26);
-	PROP_DEF(int,    MFP_QP_P,            26);
-	PROP_DEF(bool,   MFP_USE_ADVANCED,    false);
-#undef DEF
-}
-
-static void UpdateParams(MFH264_Encoder *enc, obs_data_t *settings)
-{
-	video_t *video = obs_encoder_video(enc->encoder);
-	const struct video_output_info *voi = video_output_get_info(video);
-	TypeData &typeData = *reinterpret_cast<TypeData*>(
-			obs_encoder_get_type_data(enc->encoder));
-
-	enc->width = (uint32_t)obs_encoder_get_width(enc->encoder);
-	enc->height = (uint32_t)obs_encoder_get_height(enc->encoder);
-	enc->framerateNum = voi->fps_num;
-	enc->framerateDen = voi->fps_den;
-
-	enc->descriptor = typeData.descriptor;
-
-#define PROP_GET(x, y, z) (z)obs_data_get_ ## x(settings, y)
-	enc->profile       = PROP_GET(int,  MFP_PROFILE,      H264Profile);
-	enc->rateControl   = PROP_GET(int,  MFP_RATE_CONTROL, H264RateControl);
-	enc->keyint        = PROP_GET(int,  MFP_KEY_INT,      uint32_t);
-	enc->bitrate       = PROP_GET(int,  MFP_BITRATE,      uint32_t);
-	enc->useBufferSize = PROP_GET(bool, MFP_USE_BUF_SIZE, bool);
-	enc->bufferSize    = PROP_GET(int,  MFP_BUF_SIZE,     uint32_t);
-	enc->useMaxBitrate = PROP_GET(bool, MFP_USE_MAX_BITRATE, uint32_t);
-	enc->maxBitrate    = PROP_GET(int,  MFP_MAX_BITRATE,  uint32_t);
-	enc->minQp         = PROP_GET(int,  MFP_MIN_QP,       uint16_t);
-	enc->maxQp         = PROP_GET(int,  MFP_MAX_QP,       uint16_t);
-	enc->qp.defaultQp  = PROP_GET(int,  MFP_QP_I,         uint16_t);
-	enc->qp.i          = PROP_GET(int,  MFP_QP_I,         uint16_t);
-	enc->qp.p          = PROP_GET(int,  MFP_QP_P,         uint16_t);
-	enc->qp.b          = PROP_GET(int,  MFP_QP_B,         uint16_t);
-	enc->lowLatency    = PROP_GET(bool, MFP_USE_LOWLAT,   bool);
-	enc->bFrames       = PROP_GET(int,  MFP_B_FRAMES,     uint32_t);
-	enc->advanced      = PROP_GET(bool, MFP_USE_ADVANCED, bool);
-#undef PROP_GET
-}
-
-#undef MFTEXT
-#undef MFP
-
-static bool ApplyCBR(MFH264_Encoder *enc)
-{
-	enc->h264Encoder->SetBitrate(enc->bitrate);
-
-	if (enc->useMaxBitrate)
-		enc->h264Encoder->SetMaxBitrate(enc->maxBitrate);
-	else
-		enc->h264Encoder->SetMaxBitrate(enc->bitrate);
-
-	if (enc->useBufferSize)
-		enc->h264Encoder->SetBufferSize(enc->bufferSize);
-
-	return true;
-}
-
-static bool ApplyCVBR(MFH264_Encoder *enc)
-{
-	enc->h264Encoder->SetBitrate(enc->bitrate);
-
-	if (enc->advanced && enc->useMaxBitrate)
-		enc->h264Encoder->SetMaxBitrate(enc->maxBitrate);
-	else
-		enc->h264Encoder->SetMaxBitrate(enc->bitrate);
-
-	if (enc->useBufferSize)
-		enc->h264Encoder->SetBufferSize(enc->bufferSize);
-
-	return true;
-}
-
-static bool ApplyVBR(MFH264_Encoder *enc)
-{
-	enc->h264Encoder->SetBitrate(enc->bitrate);
-
-	if (enc->useBufferSize)
-		enc->h264Encoder->SetBufferSize(enc->bufferSize);
-
-	return true;
-}
-
-static bool ApplyCQP(MFH264_Encoder *enc)
-{
-	enc->h264Encoder->SetQP(enc->qp);
-
-	return true;
-}
-
-static void *MFH264_Create(obs_data_t *settings, obs_encoder_t *encoder)
-{
-	ProfileScope("MFH264_Create");
-
-	std::unique_ptr<MFH264_Encoder> enc(new MFH264_Encoder());
-	enc->encoder = encoder;
-
-	UpdateParams(enc.get(), settings);
-
-	ProfileScope(enc->descriptor->Name());
-
-	enc->h264Encoder.reset(new H264Encoder(encoder,
-			enc->descriptor,
-			enc->width,
-			enc->height,
-			enc->framerateNum,
-			enc->framerateDen,
-			enc->profile,
-			enc->bitrate));
-
-	auto applySettings = [&]() {
-		enc.get()->h264Encoder->SetRateControl(enc->rateControl);
-		enc.get()->h264Encoder->SetKeyframeInterval(enc->keyint);
-
-		enc.get()->h264Encoder->SetEntropyEncoding(
-				H264EntropyEncodingCABAC);
-
-		if (enc->advanced) {
-			enc.get()->h264Encoder->SetLowLatency(enc->lowLatency);
-			enc.get()->h264Encoder->SetBFrameCount(enc->bFrames);
-
-			enc.get()->h264Encoder->SetMinQP(enc->minQp);
-			enc.get()->h264Encoder->SetMaxQP(enc->maxQp);
-		}
-
-		if (enc->rateControl == H264RateControlVBR &&
-		    enc->advanced &&
-		    enc->useMaxBitrate)
-			enc->rateControl = H264RateControlConstrainedVBR;
-
-
-		switch (enc->rateControl) {
-		case H264RateControlCBR:
-			return ApplyCBR(enc.get());
-		case H264RateControlConstrainedVBR:
-			return ApplyCVBR(enc.get());
-		case H264RateControlVBR:
-			return ApplyVBR(enc.get());
-		case H264RateControlCQP:
-			return ApplyCQP(enc.get());
-		default: return false;
-		}
-	};
-
-	if (!enc->h264Encoder->Initialize(applySettings))
-		return nullptr;
-
-	return enc.release();
-}
-
-static void MFH264_Destroy(void *data)
-{
-	MFH264_Encoder *enc = static_cast<MFH264_Encoder *>(data);
-	delete enc;
-}
-
-static bool MFH264_Encode(void *data, struct encoder_frame *frame,
-		struct encoder_packet *packet, bool *received_packet)
-{
-	MFH264_Encoder *enc = static_cast<MFH264_Encoder *>(data);
-	Status status;
-
-	if (!enc->profiler_encode)
-		 enc->profiler_encode = profile_store_name(
-				obs_get_profiler_name_store(),
-				"MFH264_Encode(%s)", enc->descriptor->Name());
-
-	ProfileScope(enc->profiler_encode);
-
-	*received_packet = false;
-
-	if (!enc->h264Encoder->ProcessInput(frame->data, frame->linesize,
-			frame->pts, &status))
-		return false;
-
-	UINT8 *outputData;
-	UINT32 outputDataLength;
-	UINT64 outputPts;
-	UINT64 outputDts;
-	bool keyframe;
-
-	if (!enc->h264Encoder->ProcessOutput(&outputData, &outputDataLength,
-			&outputPts, &outputDts, &keyframe, &status))
-		return false;
-
-	// Needs more input, not a failure case
-	if (status == NEED_MORE_INPUT)
-		return true;
-
-	packet->type = OBS_ENCODER_VIDEO;
-	packet->pts = outputPts;
-	packet->dts = outputPts;
-	packet->data = outputData;
-	packet->size = outputDataLength;
-	packet->keyframe = keyframe;
-
-	*received_packet = true;
-	return true;
-}
-
-static bool MFH264_GetExtraData(void *data, uint8_t **extra_data, size_t *size)
-{
-	MFH264_Encoder *enc = static_cast<MFH264_Encoder *>(data);
-
-	uint8_t *extraData;
-	UINT32 extraDataLength;
-
-	if (!enc->h264Encoder->ExtraData(&extraData, &extraDataLength))
-		return false;
-
-	*extra_data = extraData;
-	*size = extraDataLength;
-
-	return true;
-}
-
-static bool MFH264_GetSEIData(void *data, uint8_t **sei_data, size_t *size)
-{
-	UNUSED_PARAMETER(data);
-	UNUSED_PARAMETER(sei_data);
-	UNUSED_PARAMETER(size);
-
-	return false;
-}
-
-static void MFH264_GetVideoInfo(void *, struct video_scale_info *info)
-{
-	info->format = VIDEO_FORMAT_NV12;
-}
-
-static bool MFH264_Update(void *data, obs_data_t *settings)
-{
-	MFH264_Encoder *enc = static_cast<MFH264_Encoder *>(data);
-
-	UpdateParams(enc, settings);
-
-	enc->h264Encoder->SetBitrate(enc->bitrate);
-	enc->h264Encoder->SetQP(enc->qp);
-
-	return true;
-}
-
-static bool CanSpawnEncoder(std::shared_ptr<EncoderDescriptor> descriptor)
-{
-	HRESULT hr;
-	ComPtr<IMFTransform> transform;
-
-	hr = CoCreateInstance(descriptor->Guid(), nullptr,
-			CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&transform));
-	return hr == S_OK;
-}
-
-void RegisterMFH264Encoders()
-{
-	obs_encoder_info info = { 0 };
-	info.type = OBS_ENCODER_VIDEO;
-	info.get_name = MFH264_GetName;
-	info.create = MFH264_Create;
-	info.destroy = MFH264_Destroy;
-	info.encode = MFH264_Encode;
-	info.update = MFH264_Update;
-	info.get_properties = MFH264_GetProperties;
-	info.get_defaults = MFH264_GetDefaults;
-	info.get_extra_data = MFH264_GetExtraData;
-	info.get_sei_data = MFH264_GetSEIData;
-	info.get_video_info = MFH264_GetVideoInfo;
-	info.codec = "h264";
-
-	auto encoders = EncoderDescriptor::Enumerate();
-	for (auto e : encoders) {
-		/* ignore the software encoder due to the fact that we already
-		 * have an objectively superior software encoder available */
-		if (e->Type() == EncoderType::H264_SOFTWARE)
-			continue;
-
-		/* certain encoders such as quicksync will be "available" but
-		 * not usable with certain processors */
-		if (!CanSpawnEncoder(e))
-			continue;
-
-		info.caps = OBS_ENCODER_CAP_DEPRECATED;
-		info.id = e->Id();
-		info.type_data = new TypeData(e);
-		info.free_type_data = [] (void *type_data) {
-			delete reinterpret_cast<TypeData*>(type_data);
-		};
-
-		obs_register_encoder(&info);
-	}
-}

+ 0 - 39
plugins/win-mf/mf-plugin.cpp

@@ -1,39 +0,0 @@
-#include <obs-module.h>
-
-#ifdef 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)
-{
-#ifdef ENABLE_WINMF
-	MFStartup(MF_VERSION, MFSTARTUP_FULL);
-
-	RegisterMFAACEncoder();
-	RegisterMFH264Encoders();
-#endif
-
-	return true;
-}
-
-extern "C" void obs_module_unload(void)
-{
-#ifdef ENABLE_WINMF
-	MFShutdown();
-#endif
-}
-
-OBS_DECLARE_MODULE()
-MODULE_EXPORT const char *obs_module_description(void)
-{
-	return "Windows Media Foundations H.264/AAC encoder";
-}
-
-#ifdef ENABLE_WINMF
-OBS_MODULE_USE_DEFAULT_LOCALE("win-mf", "en-US")
-#endif