From 9933f6cd8c17053b7e3e3b10138028648286b718 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 23 Jan 2024 09:49:44 +1000 Subject: [PATCH 01/87] =?UTF-8?q?=D0=9E=D0=B1=D1=80=D0=B0=D0=B1=D0=B0?= =?UTF-8?q?=D1=82=D1=8B=D0=B2=D0=B0=D0=B5=D0=BC=20WM=5FQUERYENDSESSION=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D0=BF=D1=80=D0=B5=D0=B4=D0=BE=D1=82=D0=B2?= =?UTF-8?q?=D1=80=D0=B0=D1=89=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=82=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE=20=D1=87=D1=82=D0=BE=20=D0=BF=D0=BB=D0=B5=D0=B5=D1=80=20?= =?UTF-8?q?"=D0=BC=D0=B5=D1=88=D0=B0=D0=B5=D1=82"=20=D0=B2=D1=8B=D0=BA?= =?UTF-8?q?=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8=D1=8E/=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B5=20=D1=81?= =?UTF-8?q?=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D1=8B,=20=D0=BA=D0=B0=D0=BA=20?= =?UTF-8?q?=D0=BC=D0=B8=D0=BD=D0=B8=D0=BC=D1=83=D0=BC=20=D0=BF=D1=80=D0=B8?= =?UTF-8?q?=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=BD=D0=BE=D0=B9?= =?UTF-8?q?=20=D0=B2=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC=D0=B5=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20=D0=BF?= =?UTF-8?q?=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D0=BE=D0=B2=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=B2=D1=85=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 11 ++++++++++- src/apps/mplayerc/MainFrm.h | 1 + 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 9d1de8cc18..1f0eaf49c7 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -177,6 +177,8 @@ BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) ON_MESSAGE_VOID(WM_DISPLAYCHANGE, OnDisplayChange) ON_WM_WINDOWPOSCHANGING() + ON_WM_QUERYENDSESSION() + ON_MESSAGE(WM_DPICHANGED, OnDpiChanged) ON_MESSAGE(WM_DWMCOMPOSITIONCHANGED, OnDwmCompositionChanged) @@ -2176,6 +2178,13 @@ void CMainFrame::OnWindowPosChanging(WINDOWPOS* lpwndpos) __super::OnWindowPosChanging(lpwndpos); } +BOOL CMainFrame::OnQueryEndSession() +{ + CloseMedia(); + + return TRUE; +} + LRESULT CMainFrame::OnDpiChanged(WPARAM wParam, LPARAM lParam) { const int dpix = LOWORD(wParam); @@ -7704,7 +7713,7 @@ void CMainFrame::OnViewPanNScan(UINT nID) if (dy) { m_PosY = std::clamp(m_PosY + shift * dy, 0.0, 1.0); - + if (abs(m_PosY - 0.5) * 2 < shift) { m_PosY = 0.5; } diff --git a/src/apps/mplayerc/MainFrm.h b/src/apps/mplayerc/MainFrm.h index 8deed268c5..d1537c72ea 100644 --- a/src/apps/mplayerc/MainFrm.h +++ b/src/apps/mplayerc/MainFrm.h @@ -835,6 +835,7 @@ class CMainFrame : public CFrameWnd, public CDropTarget, public CDPI afx_msg void OnSizing(UINT nSide, LPRECT pRect); afx_msg void OnDisplayChange(); afx_msg void OnWindowPosChanging(WINDOWPOS* lpwndpos); + afx_msg BOOL OnQueryEndSession(); LRESULT OnDpiChanged(WPARAM wParam, LPARAM lParam); LRESULT OnDwmCompositionChanged(WPARAM wParam, LPARAM lParam); From de9f8300cfb908894aa1454a8c8f50b83a318dbb Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 23 Jan 2024 12:41:58 +0300 Subject: [PATCH 02/87] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=20commit=201cb7e94.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.ja.rc | 2 +- src/apps/mpcresources/mplayerc.kr.rc | 2 +- src/apps/mpcresources/mplayerc.pl.rc | 2 +- src/apps/mpcresources/mplayerc.sc.rc | 2 +- src/apps/mpcresources/mplayerc.tc.rc | 2 +- src/apps/mpcresources/text/mplayerc.ja.rc.txt | 2 +- src/apps/mpcresources/text/mplayerc.kr.rc.txt | 2 +- src/apps/mpcresources/text/mplayerc.pl.rc.txt | 2 +- src/apps/mpcresources/text/mplayerc.sc.rc.txt | 2 +- src/apps/mpcresources/text/mplayerc.tc.rc.txt | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index 8df937fe68..d179e79ad0 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -615,7 +615,7 @@ BEGIN CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,93,188,1 PUSHBUTTON "キャンセル(&C)",IDCANCEL,49,100,50,14 PUSHBUTTON "保存(&S)",IDOK,105,100,50,14 - LTEXT "位置: 0.1 → 0.9",IDC_STATIC,134,5,70,8 + LTEXT "位置: 0.0 → 1.0",IDC_STATIC,134,5,70,8 LTEXT "拡大率: 0.2 → 5.0",IDC_STATIC,134,32,70,8 END diff --git a/src/apps/mpcresources/mplayerc.kr.rc b/src/apps/mpcresources/mplayerc.kr.rc index e78163d19e..c57f1721ce 100644 --- a/src/apps/mpcresources/mplayerc.kr.rc +++ b/src/apps/mpcresources/mplayerc.kr.rc @@ -615,7 +615,7 @@ BEGIN CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,93,188,1 PUSHBUTTON "취소(&C)",IDCANCEL,49,100,50,14 PUSHBUTTON "저장(&S)",IDOK,105,100,50,14 - LTEXT "위치 : 0.1 → 0.9",IDC_STATIC,134,5,70,8 + LTEXT "위치 : 0.0 → 1.0",IDC_STATIC,134,5,70,8 LTEXT "확대 : 0.2 → 5.0",IDC_STATIC,134,32,70,8 END diff --git a/src/apps/mpcresources/mplayerc.pl.rc b/src/apps/mpcresources/mplayerc.pl.rc index 13872a3b63..86bd39868a 100644 --- a/src/apps/mpcresources/mplayerc.pl.rc +++ b/src/apps/mpcresources/mplayerc.pl.rc @@ -615,7 +615,7 @@ BEGIN CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,93,188,1 PUSHBUTTON "&Anuluj",IDCANCEL,49,100,50,14 PUSHBUTTON "&Zapisz",IDOK,105,100,50,14 - LTEXT "Położenie (0.1÷0.9):",IDC_STATIC,134,5,70,8 + LTEXT "Położenie (0.0÷1.0):",IDC_STATIC,134,5,70,8 LTEXT "Proporcje (0.2÷3.0):",IDC_STATIC,134,32,70,8 END diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index b2326cd4c9..c012390dd4 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -615,7 +615,7 @@ BEGIN CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,93,188,1 PUSHBUTTON "取消(&C)",IDCANCEL,49,100,50,14 PUSHBUTTON "保存(&S)",IDOK,105,100,50,14 - LTEXT "位置: 0.1 → 0.9",IDC_STATIC,134,5,70,8 + LTEXT "位置: 0.0 → 1.0",IDC_STATIC,134,5,70,8 LTEXT "缩放: 0.2 → 5.0",IDC_STATIC,134,32,70,8 END diff --git a/src/apps/mpcresources/mplayerc.tc.rc b/src/apps/mpcresources/mplayerc.tc.rc index 7f6b311084..ed9bf140e5 100644 --- a/src/apps/mpcresources/mplayerc.tc.rc +++ b/src/apps/mpcresources/mplayerc.tc.rc @@ -615,7 +615,7 @@ BEGIN CONTROL "",IDC_STATIC,"Static",SS_ETCHEDHORZ,10,93,188,1 PUSHBUTTON "取消(&C)",IDCANCEL,49,100,50,14 PUSHBUTTON "儲存(&S)",IDOK,105,100,50,14 - LTEXT "位置:0.1 → 0.9",IDC_STATIC,134,5,70,8 + LTEXT "位置:0.0 → 1.0",IDC_STATIC,134,5,70,8 LTEXT "縮放:0.2 → 5.0",IDC_STATIC,134,32,70,8 END diff --git a/src/apps/mpcresources/text/mplayerc.ja.rc.txt b/src/apps/mpcresources/text/mplayerc.ja.rc.txt index 5e395fecbf..f510adb4f5 100644 --- a/src/apps/mpcresources/text/mplayerc.ja.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ja.rc.txt @@ -158,7 +158,7 @@ BEGIN DIALOGEX IDD_PNSPRESET_DLG LINES 22 16 "設定(&S)" 18 "キャンセル(&C)" 19 "保存(&S)" -20 "位置: 0.1 → 0.9" +20 "位置: 0.0 → 1.0" 21 "拡大率: 0.2 → 5.0" END diff --git a/src/apps/mpcresources/text/mplayerc.kr.rc.txt b/src/apps/mpcresources/text/mplayerc.kr.rc.txt index b9e937c27a..a2969a558e 100644 --- a/src/apps/mpcresources/text/mplayerc.kr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.kr.rc.txt @@ -158,7 +158,7 @@ BEGIN DIALOGEX IDD_PNSPRESET_DLG LINES 22 16 "설정(&S)" 18 "취소(&C)" 19 "저장(&S)" -20 "위치 : 0.1 → 0.9" +20 "위치 : 0.0 → 1.0" 21 "확대 : 0.2 → 5.0" END diff --git a/src/apps/mpcresources/text/mplayerc.pl.rc.txt b/src/apps/mpcresources/text/mplayerc.pl.rc.txt index ddfc295181..fa71233880 100644 --- a/src/apps/mpcresources/text/mplayerc.pl.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.pl.rc.txt @@ -158,7 +158,7 @@ BEGIN DIALOGEX IDD_PNSPRESET_DLG LINES 22 16 "&Ustaw" 18 "&Anuluj" 19 "&Zapisz" -20 "Położenie (0.1÷0.9):" +20 "Położenie (0.0÷1.0):" 21 "Proporcje (0.2÷3.0):" END diff --git a/src/apps/mpcresources/text/mplayerc.sc.rc.txt b/src/apps/mpcresources/text/mplayerc.sc.rc.txt index 5faa133de2..c5bed412fc 100644 --- a/src/apps/mpcresources/text/mplayerc.sc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sc.rc.txt @@ -158,7 +158,7 @@ BEGIN DIALOGEX IDD_PNSPRESET_DLG LINES 22 16 "设置(&S)" 18 "取消(&C)" 19 "保存(&S)" -20 "位置: 0.1 → 0.9" +20 "位置: 0.0 → 1.0" 21 "缩放: 0.2 → 5.0" END diff --git a/src/apps/mpcresources/text/mplayerc.tc.rc.txt b/src/apps/mpcresources/text/mplayerc.tc.rc.txt index 74f7587298..7b66741380 100644 --- a/src/apps/mpcresources/text/mplayerc.tc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tc.rc.txt @@ -158,7 +158,7 @@ BEGIN DIALOGEX IDD_PNSPRESET_DLG LINES 22 16 "設定(&S)" 18 "取消(&C)" 19 "儲存(&S)" -20 "位置:0.1 → 0.9" +20 "位置:0.0 → 1.0" 21 "縮放:0.2 → 5.0" END From d6d637ff090a0b7b3e53cbbf416288017fb06c0f Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 23 Jan 2024 13:56:15 +0300 Subject: [PATCH 03/87] =?UTF-8?q?=D0=A3=D0=B4=D0=B0=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20CMPlayerCApp::SaveAllModified?= =?UTF-8?q?=20=D0=BD=D0=B5=D0=BD=D1=83=D0=B6=D0=BD=D1=8B=D0=B9=20=D0=BF?= =?UTF-8?q?=D0=BE=D1=81=D0=BB=D0=B5=20commit=209933f6c.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/mplayerc.cpp | 15 +-------------- src/apps/mplayerc/mplayerc.h | 3 +-- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/src/apps/mplayerc/mplayerc.cpp b/src/apps/mplayerc/mplayerc.cpp index 2b86e705e0..8b1441d6d9 100644 --- a/src/apps/mplayerc/mplayerc.cpp +++ b/src/apps/mplayerc/mplayerc.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -1313,19 +1313,6 @@ int CMPlayerCApp::ExitInstance() return CWinApp::ExitInstance(); } -BOOL CMPlayerCApp::SaveAllModified() -{ - // CWinApp::SaveAllModified - // Called by the framework to save all documents - // when the application's main frame window is to be closed, - // or through a WM_QUERYENDSESSION message. - if (auto pMainFrame = AfxFindMainFrame()) { - pMainFrame->CloseMedia(); - } - - return TRUE; -} - ///////////////////////////////////////////////////////////////////////////// // CMPlayerCApp message handlers // App command to run the dialog diff --git a/src/apps/mplayerc/mplayerc.h b/src/apps/mplayerc/mplayerc.h index 60b60b0bbd..937728c2cd 100644 --- a/src/apps/mplayerc/mplayerc.h +++ b/src/apps/mplayerc/mplayerc.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2022 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -103,7 +103,6 @@ class CMPlayerCApp : public CModApp public: virtual BOOL InitInstance(); virtual int ExitInstance(); - virtual BOOL SaveAllModified() override; DECLARE_MESSAGE_MAP() afx_msg void OnAppAbout(); From c5773cb2b0c34d42169302fa8af8e758f2ce8c23 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 24 Jan 2024 09:04:56 +1000 Subject: [PATCH 04/87] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20"=D0=BF=D0=B5=D1=80=D0=B5=D0=B7=D0=B0=D0=BF?= =?UTF-8?q?=D1=83=D1=81=D0=BA"=20=D0=BF=D0=BB=D0=B5=D0=B5=D1=80=D0=B0=20?= =?UTF-8?q?=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D1=8F=20=D1=81=D0=B8=D1=81=D1=82=D0=B5=D0=BC?= =?UTF-8?q?=D1=8B=20=D0=BF=D1=80=D0=B8=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=BE=D0=B9=20=D1=81=D0=BE=D0=BE=D1=82=D0=B2?= =?UTF-8?q?=D0=B5=D1=82=D1=81=D1=82=D0=B2=D1=83=D1=8E=D1=89=D0=B5=D0=B9=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=86=D0=B8=D0=B8=20=D0=B4=D0=BB=D1=8F=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B7=D0=B0=D0=BF=D1=83=D1=81=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BF=D1=80=D0=B8=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D0=B8=D1=8F.?= =?UTF-8?q?=20=D0=90=D0=B2=D1=82=D0=BE=D0=BC=D0=B0=D1=82=D0=B8=D1=87=D0=B5?= =?UTF-8?q?=D1=81=D0=BA=D0=BE=D0=B5=20=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82?= =?UTF-8?q?=D0=B8=D0=B5=20=D0=B8=20=D0=B2=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D1=80=D0=BE=D0=B8=D0=B3=D1=80=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BD=D0=B5=20=D1=81=D0=B4?= =?UTF-8?q?=D0=B5=D0=BB=D0=B0=D0=BD=D0=BE=20=D1=81=D0=BF=D0=B5=D1=86=D0=B8?= =?UTF-8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE=20=D1=87=D1=82=D0=BE=D0=B1=D1=8B?= =?UTF-8?q?=20=D0=BD=D0=B5=20=D0=B1=D1=8B=D0=BB=D0=BE=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D0=B8=20=D0=BF=D1=80=D0=B8=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20(=D0=BE=D0=BD?= =?UTF-8?q?=D0=BB=D0=B0=D0=B9=D0=BD,=20=D1=82=D0=BE=D1=80=D1=80=D0=B5?= =?UTF-8?q?=D0=BD=D1=82=D1=8B=20=D0=B8=20=D1=82.=D0=B4.).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 1f0eaf49c7..74e83fb130 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -954,6 +954,8 @@ int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct) m_CMediaControls.Init(this); } + RegisterApplicationRestart(L"", RESTART_NO_CRASH | RESTART_NO_HANG); + cmdLineThread = std::thread([this] { cmdLineThreadFunction(); }); return 0; From a424e871a069dd613ce49dea00a5c03298e41f0e Mon Sep 17 00:00:00 2001 From: v0lt Date: Wed, 24 Jan 2024 07:27:44 +0300 Subject: [PATCH 05/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-870-g0b8e51b58?= =?UTF-8?q?4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- src/ExtLib/ffmpeg/libavcodec/allcodecs.c | 1 + src/ExtLib/ffmpeg/libavcodec/version.h | 2 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c | 24 +++++----- .../libavcodec/vvc/vvc_inter_template.c | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c | 46 +++++++++---------- 10 files changed, 47 insertions(+), 46 deletions(-) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 97398c9ca4..1ee848c5eb 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -26,7 +26,7 @@ MPCVideoDec Обновлен корейский перевод (автор Hackjjang). Обновлены библиотеки: - ffmpeg git-n6.2-dev-848-gd2eb6f4d44; + ffmpeg git-n6.2-dev-870-g0b8e51b584; nanosvg git-93ce879. diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 0b6376899a..f12cd4cb77 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -26,7 +26,7 @@ Updated Italian translation (by mapi68). Updated Korean translation (by Hackjjang). Updated libraries: - ffmpeg git-n6.2-dev-848-gd2eb6f4d44; + ffmpeg git-n6.2-dev-870-g0b8e51b584; nanosvg git-93ce879. diff --git a/src/ExtLib/ffmpeg/libavcodec/allcodecs.c b/src/ExtLib/ffmpeg/libavcodec/allcodecs.c index 93ce8e3224..ef8c3a6d7d 100644 --- a/src/ExtLib/ffmpeg/libavcodec/allcodecs.c +++ b/src/ExtLib/ffmpeg/libavcodec/allcodecs.c @@ -106,6 +106,7 @@ extern const FFCodec ff_dvvideo_encoder; extern const FFCodec ff_dvvideo_decoder; extern const FFCodec ff_dxa_decoder; extern const FFCodec ff_dxtory_decoder; +extern const FFCodec ff_dxv_encoder; extern const FFCodec ff_dxv_decoder; extern const FFCodec ff_eacmv_decoder; extern const FFCodec ff_eamad_decoder; diff --git a/src/ExtLib/ffmpeg/libavcodec/version.h b/src/ExtLib/ffmpeg/libavcodec/version.h index 376388c5bb..0fae3d06d3 100644 --- a/src/ExtLib/ffmpeg/libavcodec/version.h +++ b/src/ExtLib/ffmpeg/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 37 +#define LIBAVCODEC_VERSION_MINOR 38 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c index dd3c8884cb..307bc3490e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c @@ -1554,8 +1554,8 @@ static void mvp_add_difference(MotionInfo *mi, const int num_cp_mv, if (mi->pred_flag & mask) { for (int j = 0; j < num_cp_mv; j++) { const Mv *mvd = &mvds[i][j]; - mi->mv[i][j].x += mvd->x << amvr_shift; - mi->mv[i][j].y += mvd->y << amvr_shift; + mi->mv[i][j].x += mvd->x * (1 << amvr_shift); + mi->mv[i][j].y += mvd->y * (1 << amvr_shift); } } } diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h index 5f2ad62676..91b4ed14a1 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h @@ -193,7 +193,7 @@ typedef struct Mv { } Mv; typedef struct MvField { - DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1 + DECLARE_ALIGNED(8, Mv, mv)[2]; ///< mvL0, vvL1 int8_t ref_idx[2]; ///< refIdxL0, refIdxL1 uint8_t hpel_if_idx; ///< hpelIfIdx uint8_t bcw_idx; ///< bcwIdx @@ -202,7 +202,7 @@ typedef struct MvField { } MvField; typedef struct DMVRInfo { - DECLARE_ALIGNED(4, Mv, mv)[2]; ///< mvL0, vvL1 + DECLARE_ALIGNED(8, Mv, mv)[2]; ///< mvL0, vvL1 uint8_t dmvr_enabled; } DMVRInfo; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c index e5cd89b8a3..cebc02fd9f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c @@ -1115,12 +1115,12 @@ static void alf_prepare_buffer(VVCFrameContext *fc, uint8_t *_dst, const uint8_t copy_ctb(_dst, _src, width << ps, height, dst_stride, src_stride); //top - src = fc->tab.alf_pixel_buffer_h[c_idx][1] + (((border_pixels * (y_ctb - 1)) * w + x) << ps); + src = fc->tab.alf_pixel_buffer_h[c_idx][1] + (((border_pixels * w) << ps) * (y_ctb - 1) + (x << ps)); dst = _dst - border_pixels * dst_stride; alf_fill_border_h(dst, dst_stride, src, w << ps, _dst, width, border_pixels, ps, edges[TOP]); //bottom - src = fc->tab.alf_pixel_buffer_h[c_idx][0] + ((border_pixels * (y_ctb + 1) * w + x) << ps); + src = fc->tab.alf_pixel_buffer_h[c_idx][0] + (((border_pixels * w) << ps) * (y_ctb + 1) + (x << ps)); dst = _dst + height * dst_stride; alf_fill_border_h(dst, dst_stride, src, w << ps, _dst + (height - 1) * dst_stride, width, border_pixels, ps, edges[BOTTOM]); diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c index 9b2925f60c..e05f3db93e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c @@ -190,7 +190,7 @@ static void luma_mc(VVCLocalContext *lc, int16_t *dst, const AVFrame *ref, const x_off += mv->x >> 4; y_off += mv->y >> 4; - src += y_off * src_stride + (x_off << fc->ps.sps->pixel_shift); + src += y_off * src_stride + (x_off * (1 << fc->ps.sps->pixel_shift)); EMULATED_EDGE_LUMA(lc->edge_emu_buffer, &src, &src_stride, x_off, y_off); @@ -213,7 +213,7 @@ static void chroma_mc(VVCLocalContext *lc, int16_t *dst, const AVFrame *ref, con x_off += mv->x >> (4 + hs); y_off += mv->y >> (4 + vs); - src += y_off * src_stride + (x_off << fc->ps.sps->pixel_shift); + src += y_off * src_stride + (x_off * (1 << fc->ps.sps->pixel_shift)); EMULATED_EDGE_CHROMA(lc->edge_emu_buffer, &src, &src_stride, x_off, y_off); fc->vvcdsp.inter.put[CHROMA][idx][!!my][!!mx](dst, src, src_stride, block_h, hf, vf, block_w); @@ -237,7 +237,7 @@ static void luma_mc_uni(VVCLocalContext *lc, uint8_t *dst, const ptrdiff_t dst_s x_off += mv->x >> 4; y_off += mv->y >> 4; - src += y_off * src_stride + (x_off << fc->ps.sps->pixel_shift); + src += y_off * src_stride + (x_off * (1 << fc->ps.sps->pixel_shift)); EMULATED_EDGE_LUMA(lc->edge_emu_buffer, &src, &src_stride, x_off, y_off); @@ -270,7 +270,7 @@ static void luma_mc_bi(VVCLocalContext *lc, uint8_t *dst, const ptrdiff_t dst_st const int ox = x_off + (mv->x >> 4); const int oy = y_off + (mv->y >> 4); ptrdiff_t src_stride = ref[i]->linesize[0]; - const uint8_t *src = ref[i]->data[0] + oy * src_stride + (ox << fc->ps.sps->pixel_shift); + const uint8_t *src = ref[i]->data[0] + oy * src_stride + (ox * (1 << fc->ps.sps->pixel_shift)); const int8_t *hf = ff_vvc_inter_luma_filters[hf_idx][mx]; const int8_t *vf = ff_vvc_inter_luma_filters[vf_idx][my]; @@ -314,7 +314,7 @@ static void chroma_mc_uni(VVCLocalContext *lc, uint8_t *dst, const ptrdiff_t dst x_off += mv->x >> (4 + hs); y_off += mv->y >> (4 + vs); - src += y_off * src_stride + (x_off << fc->ps.sps->pixel_shift); + src += y_off * src_stride + (x_off * (1 << fc->ps.sps->pixel_shift)); EMULATED_EDGE_CHROMA(lc->edge_emu_buffer, &src, &src_stride, x_off, y_off); @@ -348,7 +348,7 @@ static void chroma_mc_bi(VVCLocalContext *lc, uint8_t *dst, const ptrdiff_t dst_ const int ox = x_off + (mv->x >> (4 + hs)); const int oy = y_off + (mv->y >> (4 + vs)); ptrdiff_t src_stride = ref[i]->linesize[c_idx]; - const uint8_t *src = ref[i]->data[c_idx] + oy * src_stride + (ox << fc->ps.sps->pixel_shift); + const uint8_t *src = ref[i]->data[c_idx] + oy * src_stride + (ox * (1 << fc->ps.sps->pixel_shift)); const int8_t *hf = ff_vvc_inter_chroma_filters[hf_idx][mx]; const int8_t *vf = ff_vvc_inter_chroma_filters[vf_idx][my]; if (dmvr_flag) { @@ -386,7 +386,7 @@ static void luma_prof_uni(VVCLocalContext *lc, uint8_t *dst, const ptrdiff_t dst x_off += mv->x >> 4; y_off += mv->y >> 4; - src += y_off * src_stride + (x_off << fc->ps.sps->pixel_shift); + src += y_off * src_stride + (x_off * (1 << fc->ps.sps->pixel_shift)); EMULATED_EDGE_LUMA(lc->edge_emu_buffer, &src, &src_stride, x_off, y_off); if (cb_prof_flag) { @@ -424,7 +424,7 @@ static void luma_prof_bi(VVCLocalContext *lc, uint8_t *dst, const ptrdiff_t dst_ const int ox = x_off + (mv->x >> 4); const int oy = y_off + (mv->y >> 4); ptrdiff_t src_stride = ref[i]->linesize[0]; - const uint8_t *src = ref[i]->data[0] + oy * src_stride + (ox << fc->ps.sps->pixel_shift); + const uint8_t *src = ref[i]->data[0] + oy * src_stride + (ox * (1 << fc->ps.sps->pixel_shift)); const int8_t *hf = ff_vvc_inter_luma_filters[2][mx]; const int8_t *vf = ff_vvc_inter_luma_filters[2][my]; @@ -654,7 +654,7 @@ static int parametric_mv_refine(const int *sad, const int stride) else if (sad_plus == sad_center) dmvc = 8; else { - int num = ( sad_minus - sad_plus ) << 4; + int num = ( sad_minus - sad_plus ) * (1 << 4); int sign_num = 0; int quotient = 0; int counter = 3; @@ -704,7 +704,7 @@ static void dmvr_mv_refine(VVCLocalContext *lc, MvField *mvf, MvField *orig_mv, const int ox = x_off + (mv->x >> 4) - sr_range; const int oy = y_off + (mv->y >> 4) - sr_range; ptrdiff_t src_stride = ref[i]->linesize[LUMA]; - const uint8_t *src = ref[i]->data[LUMA] + oy * src_stride + (ox << fc->ps.sps->pixel_shift); + const uint8_t *src = ref[i]->data[LUMA] + oy * src_stride + (ox * (1 << fc->ps.sps->pixel_shift)); EMULATED_EDGE_BILINEAR(lc->edge_emu_buffer, &src, &src_stride, ox, oy); fc->vvcdsp.inter.dmvr[!!my][!!mx](tmp[i], src, src_stride, pred_h, mx, my, pred_w); } @@ -728,8 +728,8 @@ static void dmvr_mv_refine(VVCLocalContext *lc, MvField *mvf, MvField *orig_mv, } } } - dmv[0] = (min_dx - sr_range) << 4; - dmv[1] = (min_dy - sr_range) << 4; + dmv[0] = (min_dx - sr_range) * (1 << 4); + dmv[1] = (min_dy - sr_range) * (1 << 4); if (min_dx != 0 && min_dx != 4 && min_dy != 0 && min_dy != 4) { dmv[0] += parametric_mv_refine(&sad[min_dy][min_dx], 1); dmv[1] += parametric_mv_refine(&sad[min_dy][min_dx], SAD_ARRAY_SIZE); diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c index b67b66a2dc..7160907778 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c @@ -817,8 +817,8 @@ static void FUNC(derive_bdof_vx_vy)(const int16_t *_src0, const int16_t *_src1, src0 += MAX_PB_SIZE; src1 += MAX_PB_SIZE; } - *vx = sgx2 > 0 ? av_clip((sgxdi << 2) >> av_log2(sgx2) , -thres + 1, thres - 1) : 0; - *vy = sgy2 > 0 ? av_clip(((sgydi << 2) - ((*vx * sgxgy) >> 1)) >> av_log2(sgy2), -thres + 1, thres - 1) : 0; + *vx = sgx2 > 0 ? av_clip((sgxdi * (1 << 2)) >> av_log2(sgx2) , -thres + 1, thres - 1) : 0; + *vy = sgy2 > 0 ? av_clip(((sgydi * (1 << 2)) - ((*vx * sgxgy) >> 1)) >> av_log2(sgy2), -thres + 1, thres - 1) : 0; } static void FUNC(apply_bdof_min_block)(pixel* dst, const ptrdiff_t dst_stride, const int16_t *src0, const int16_t *src1, diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c index 81e73fe746..a3861b5b1a 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c @@ -60,7 +60,7 @@ static av_always_inline void mv_compression(Mv *motion) for (int i = 0; i < 2; i++) { const int s = mv[i] >> 17; const int f = av_log2((mv[i] ^ s) | 31) - 4; - const int mask = (-1 << f) >> 1; + const int mask = (-1 * (1 << f)) >> 1; const int round = (1 << f) >> 2; mv[i] = (mv[i] + round) & mask; } @@ -342,17 +342,17 @@ static void init_subblock_params(SubblockParams *sp, const MotionInfo* mi, const int log2_cbh = av_log2(cb_height); const Mv* cp_mv = mi->mv[lx]; const int num_cp_mv = mi->motion_model_idc + 1; - sp->d_hor_x = (cp_mv[1].x - cp_mv[0].x) << (MAX_CU_DEPTH - log2_cbw); - sp->d_ver_x = (cp_mv[1].y - cp_mv[0].y) << (MAX_CU_DEPTH - log2_cbw); + sp->d_hor_x = (cp_mv[1].x - cp_mv[0].x) * (1 << (MAX_CU_DEPTH - log2_cbw)); + sp->d_ver_x = (cp_mv[1].y - cp_mv[0].y) * (1 << (MAX_CU_DEPTH - log2_cbw)); if (num_cp_mv == 3) { - sp->d_hor_y = (cp_mv[2].x - cp_mv[0].x) << (MAX_CU_DEPTH - log2_cbh); - sp->d_ver_y = (cp_mv[2].y - cp_mv[0].y) << (MAX_CU_DEPTH - log2_cbh); + sp->d_hor_y = (cp_mv[2].x - cp_mv[0].x) * (1 << (MAX_CU_DEPTH - log2_cbh)); + sp->d_ver_y = (cp_mv[2].y - cp_mv[0].y) * (1 << (MAX_CU_DEPTH - log2_cbh)); } else { sp->d_hor_y = -sp->d_ver_x; sp->d_ver_y = sp->d_hor_x; } - sp->mv_scale_hor = (cp_mv[0].x) << MAX_CU_DEPTH; - sp->mv_scale_ver = (cp_mv[0].y) << MAX_CU_DEPTH; + sp->mv_scale_hor = (cp_mv[0].x) * (1 << MAX_CU_DEPTH); + sp->mv_scale_ver = (cp_mv[0].y) * (1 << MAX_CU_DEPTH); sp->cb_width = cb_width; sp->cb_height = cb_height; sp->is_fallback = is_fallback_mode(sp, mi->pred_flag); @@ -368,8 +368,8 @@ static void derive_subblock_diff_mvs(const VVCLocalContext *lc, PredictionUnit* for (int x = 0; x < AFFINE_MIN_BLOCK_SIZE; x++) { for (int y = 0; y < AFFINE_MIN_BLOCK_SIZE; y++) { Mv diff; - diff.x = x * (sp->d_hor_x << 2) + y * (sp->d_hor_y << 2) - pos_offset_x; - diff.y = x * (sp->d_ver_x << 2) + y * (sp->d_ver_y << 2) - pos_offset_y; + diff.x = x * (sp->d_hor_x * (1 << 2)) + y * (sp->d_hor_y * (1 << 2)) - pos_offset_x; + diff.y = x * (sp->d_ver_x * (1 << 2)) + y * (sp->d_ver_y * (1 << 2)) - pos_offset_y; ff_vvc_round_mv(&diff, 0, 8); pu->diff_mv_x[lx][AFFINE_MIN_BLOCK_SIZE * y + x] = av_clip(diff.x, -dmv_limit + 1, dmv_limit - 1); pu->diff_mv_y[lx][AFFINE_MIN_BLOCK_SIZE * y + x] = av_clip(diff.y, -dmv_limit + 1, dmv_limit - 1); @@ -467,8 +467,8 @@ void ff_vvc_store_gpm_mvf(const VVCLocalContext *lc, const PredictionUnit *pu) for (int y = 0; y < cu->cb_height; y += block_size) { for (int x = 0; x < cu->cb_width; x += block_size) { - const int motion_idx = (((x + offset_x) << 1) + 5) * displacement_x + - (((y + offset_y) << 1) + 5) * displacement_y; + const int motion_idx = (((x + offset_x) * (1 << 1)) + 5) * displacement_x + + (((y + offset_y) * (1 << 1)) + 5) * displacement_y; const int s_type = FFABS(motion_idx) < 32 ? 2 : (motion_idx <= 0 ? (1 - is_flip) : is_flip); const int pred_flag = pu->gpm_mv[0].pred_flag | pu->gpm_mv[1].pred_flag; const int x0 = cu->x0 + x; @@ -867,14 +867,14 @@ static void affine_cps_from_nb(const VVCLocalContext *lc, l = &TAB_CP_MV(lx, x_nb, y_nb); r = &TAB_CP_MV(lx, x_nb + nbw - 1, y_nb) + 1; } - mv_scale_hor = l->x << 7; - mv_scale_ver = l->y << 7; - d_hor_x = (r->x - l->x) << (7 - log2_nbw); - d_ver_x = (r->y - l->y) << (7 - log2_nbw); + mv_scale_hor = l->x * (1 << 7); + mv_scale_ver = l->y * (1 << 7); + d_hor_x = (r->x - l->x) * (1 << (7 - log2_nbw)); + d_ver_x = (r->y - l->y) * (1 << (7 - log2_nbw)); if (!is_ctb_boundary && motion_model_idc_nb == MOTION_6_PARAMS_AFFINE) { const Mv* lb = &TAB_CP_MV(lx, x_nb, y_nb + nbh - 1) + 2; - d_hor_y = (lb->x - l->x) << (7 - log2_nbh); - d_ver_y = (lb->y - l->y) << (7 - log2_nbh); + d_hor_y = (lb->x - l->x) * (1 << (7 - log2_nbh)); + d_ver_y = (lb->y - l->y) * (1 << (7 - log2_nbh)); } else { d_hor_y = -d_ver_x; d_ver_y = d_hor_x; @@ -1242,8 +1242,8 @@ static int affine_merge_const6(const MvField* c0, const MvField* c2, const int c mi->pred_flag |= mask; mi->ref_idx[i] = c0->ref_idx[i]; mi->mv[i][0] = c0->mv[i]; - mi->mv[i][1].x = (c0->mv[i].x << 7) + ((c2->mv[i].y - c0->mv[i].y) << shift); - mi->mv[i][1].y = (c0->mv[i].y << 7) - ((c2->mv[i].x - c0->mv[i].x) << shift); + mi->mv[i][1].x = (c0->mv[i].x * (1 << 7)) + ((c2->mv[i].y - c0->mv[i].y) * (1 << shift)); + mi->mv[i][1].y = (c0->mv[i].y * (1 << 7)) - ((c2->mv[i].x - c0->mv[i].x) * (1 << shift)); ff_vvc_round_mv(&mi->mv[i][1], 0, 7); ff_vvc_clip_mv(&mi->mv[i][1]); } @@ -1736,11 +1736,11 @@ void ff_vvc_round_mv(Mv *mv, const int lshift, const int rshift) { if (rshift) { const int offset = 1 << (rshift - 1); - mv->x = ((mv->x + offset - (mv->x >= 0)) >> rshift) << lshift; - mv->y = ((mv->y + offset - (mv->y >= 0)) >> rshift) << lshift; + mv->x = ((mv->x + offset - (mv->x >= 0)) >> rshift) * (1 << lshift); + mv->y = ((mv->y + offset - (mv->y >= 0)) >> rshift) * (1 << lshift); } else { - mv->x = mv->x << lshift; - mv->y = mv->y << lshift; + mv->x = mv->x * (1 << lshift); + mv->y = mv->y * (1 << lshift); } } From 5ef7df77475efbe69b753e4c09edab59d8eb596f Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 26 Jan 2024 17:26:40 +0300 Subject: [PATCH 06/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-885-g8c99a1429?= =?UTF-8?q?a.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- src/ExtLib/ffmpeg/libavcodec/d3d12va_av1.c | 12 ++------- src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c | 19 ++++++-------- src/ExtLib/ffmpeg/libavcodec/d3d12va_h264.c | 6 +---- src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c | 13 +++------- src/ExtLib/ffmpeg/libavcodec/d3d12va_mpeg2.c | 4 --- src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c | 9 +------ src/ExtLib/ffmpeg/libavcodec/d3d12va_vp9.c | 14 ++++------- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c | 25 +++++++++---------- .../ffmpeg/libavutil/hwcontext_d3d12va.c | 8 +++--- 11 files changed, 38 insertions(+), 76 deletions(-) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 1ee848c5eb..b2fd6ad7a8 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -26,7 +26,7 @@ MPCVideoDec Обновлен корейский перевод (автор Hackjjang). Обновлены библиотеки: - ffmpeg git-n6.2-dev-870-g0b8e51b584; + ffmpeg git-n6.2-dev-885-g8c99a1429a; nanosvg git-93ce879. diff --git a/docs/Changelog.txt b/docs/Changelog.txt index f12cd4cb77..4d6fa3aef6 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -26,7 +26,7 @@ Updated Italian translation (by mapi68). Updated Korean translation (by Hackjjang). Updated libraries: - ffmpeg git-n6.2-dev-870-g0b8e51b584; + ffmpeg git-n6.2-dev-885-g8c99a1429a; nanosvg git-93ce879. diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_av1.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_av1.c index 6a3543353f..76d9729900 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_av1.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_av1.c @@ -108,12 +108,9 @@ static int d3d12va_av1_decode_slice(AVCodecContext *avctx, static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer) { - D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - AVHWFramesContext *frames_ctx = D3D12VA_FRAMES_CONTEXT(avctx); - AVD3D12VAFramesContext *frames_hwctx = frames_ctx->hwctx; const AV1DecContext *h = avctx->priv_data; AV1DecodePictureContext *ctx_pic = h->cur_frame.hwaccel_picture_private; - uint8_t *mapped_data; + void *mapped_data; D3D12_VIDEO_DECODE_FRAME_ARGUMENT *args = &input_args->FrameArguments[input_args->NumFrameArguments++]; args->Type = D3D12_VIDEO_DECODE_ARGUMENT_TYPE_SLICE_CONTROL; @@ -142,7 +139,6 @@ static int d3d12va_av1_end_frame(AVCodecContext *avctx) { int ret; const AV1DecContext *h = avctx->priv_data; - D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); AV1DecodePictureContext *ctx_pic = h->cur_frame.hwaccel_picture_private; if (ctx_pic->tiles <= 0 || ctx_pic->bitstream_size <= 0) @@ -156,15 +152,13 @@ static int d3d12va_av1_end_frame(AVCodecContext *avctx) static int d3d12va_av1_decode_init(AVCodecContext *avctx) { - const AV1DecContext *h = avctx->priv_data; D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); D3D12AV1DecodeContext *av1_ctx = D3D12_AV1_DECODE_CONTEXT(avctx); - AV1DecodePictureContext *ctx_pic = h->cur_frame.hwaccel_picture_private; DXVA_PicParams_AV1 pp; int ret; - if (avctx->profile != FF_PROFILE_AV1_MAIN) + if (avctx->profile != AV_PROFILE_AV1_MAIN) return AVERROR(EINVAL); ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_AV1_PROFILE0; @@ -186,9 +180,7 @@ static int d3d12va_av1_decode_init(AVCodecContext *avctx) static int d3d12va_av1_decode_uninit(AVCodecContext *avctx) { - const AV1DecContext *h = avctx->priv_data; D3D12AV1DecodeContext *ctx = D3D12_AV1_DECODE_CONTEXT(avctx); - AV1DecodePictureContext *ctx_pic = h->cur_frame.hwaccel_picture_private; if (ctx->bitstream_buffer) av_freep(&ctx->bitstream_buffer); diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c index c5c599675e..f678b6f483 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c @@ -62,14 +62,14 @@ unsigned ff_d3d12va_get_surface_index(const AVCodecContext *avctx, if (!res) goto fail; - if (!curr) { - for (i = 0; i < ctx->max_num_ref; i++) { - if (ctx->ref_resources[i] && res == ctx->ref_resources[i]) { - ctx->used_mask |= 1 << i; - return i; - } + for (i = 0; i < ctx->max_num_ref; i++) { + if (ctx->ref_resources[i] && res == ctx->ref_resources[i]) { + ctx->used_mask |= 1 << i; + return i; } - } else { + } + + if (curr) { for (i = 0; i < ctx->max_num_ref; i++) { if (!((ctx->used_mask >> i) & 0x1)) { ctx->ref_resources[i] = res; @@ -266,7 +266,6 @@ static int d3d12va_create_decoder(AVCodecContext *avctx) int ff_d3d12va_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) { AVHWFramesContext *frames_ctx = (AVHWFramesContext *)hw_frames_ctx->data; - AVHWDeviceContext *device_ctx = frames_ctx->device_ctx; frames_ctx->format = AV_PIX_FMT_D3D12; frames_ctx->sw_format = avctx->sw_pix_fmt == AV_PIX_FMT_YUV420P10 ? AV_PIX_FMT_P010 : AV_PIX_FMT_NV12; @@ -408,8 +407,6 @@ static inline int d3d12va_update_reference_frames_state(AVCodecContext *avctx, D ID3D12Resource *current_resource, int state_before, int state_end) { D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - AVHWFramesContext *frames_ctx = D3D12VA_FRAMES_CONTEXT(avctx); - AVD3D12VAFramesContext *frames_hwctx = frames_ctx->hwctx; int num_barrier = 0; for (int i = 0; i < ctx->max_num_ref; i++) { @@ -436,8 +433,6 @@ int ff_d3d12va_common_end_frame(AVCodecContext *avctx, AVFrame *frame, { int ret; D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - AVHWFramesContext *frames_ctx = D3D12VA_FRAMES_CONTEXT(avctx); - AVD3D12VAFramesContext *frames_hwctx = frames_ctx->hwctx; ID3D12Resource *buffer = NULL; ID3D12CommandAllocator *command_allocator = NULL; AVD3D12VAFrame *f = (AVD3D12VAFrame *)frame->data[0]; diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_h264.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_h264.c index 24e1c523fa..b2fe2955c8 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_h264.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_h264.c @@ -104,10 +104,6 @@ static int d3d12va_h264_decode_slice(AVCodecContext *avctx, const uint8_t *buffe #define START_CODE_SIZE 3 static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer) { - D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - AVHWFramesContext *frames_ctx = D3D12VA_FRAMES_CONTEXT(avctx); - AVD3D12VAFramesContext *frames_hwctx = frames_ctx->hwctx; - const H264Context *h = avctx->priv_data; const H264Picture *current_picture = h->cur_pic_ptr; H264DecodePictureContext *ctx_pic = current_picture->hwaccel_picture_private; @@ -117,7 +113,7 @@ static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPU DXVA_Slice_H264_Short *slice; D3D12_VIDEO_DECODE_FRAME_ARGUMENT *args; - if (FAILED(ID3D12Resource_Map(buffer, 0, NULL, &mapped_data))) { + if (FAILED(ID3D12Resource_Map(buffer, 0, NULL, (void **)&mapped_data))) { av_log(avctx, AV_LOG_ERROR, "Failed to map D3D12 Buffer resource!\n"); return AVERROR(EINVAL); } diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c index 7e0c295a2d..a4964a05c6 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c @@ -98,10 +98,6 @@ static int d3d12va_hevc_decode_slice(AVCodecContext *avctx, const uint8_t *buffe #define START_CODE_SIZE 3 static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer) { - D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - AVHWFramesContext *frames_ctx = D3D12VA_FRAMES_CONTEXT(avctx); - AVD3D12VAFramesContext *frames_hwctx = frames_ctx->hwctx; - const HEVCContext *h = avctx->priv_data; const HEVCFrame *current_picture = h->ref; HEVCDecodePictureContext *ctx_pic = current_picture->hwaccel_picture_private; @@ -111,7 +107,7 @@ static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPU DXVA_Slice_HEVC_Short *slice; D3D12_VIDEO_DECODE_FRAME_ARGUMENT *args; - if (FAILED(ID3D12Resource_Map(buffer, 0, NULL, &mapped_data))) { + if (FAILED(ID3D12Resource_Map(buffer, 0, NULL, (void **)&mapped_data))) { av_log(avctx, AV_LOG_ERROR, "Failed to map D3D12 Buffer resource!\n"); return AVERROR(EINVAL); } @@ -166,16 +162,15 @@ static int d3d12va_hevc_end_frame(AVCodecContext *avctx) static int d3d12va_hevc_decode_init(AVCodecContext *avctx) { - HEVCContext *h = avctx->priv_data; D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); DXVA_PicParams_HEVC pp; switch (avctx->profile) { - case FF_PROFILE_HEVC_MAIN_10: + case AV_PROFILE_HEVC_MAIN_10: ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN10; break; - case FF_PROFILE_HEVC_MAIN_STILL_PICTURE: + case AV_PROFILE_HEVC_MAIN_STILL_PICTURE: if (avctx->hwaccel_flags & AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH) { ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN; break; @@ -184,7 +179,7 @@ static int d3d12va_hevc_decode_init(AVCodecContext *avctx) return AVERROR(EINVAL); } - case FF_PROFILE_HEVC_MAIN: + case AV_PROFILE_HEVC_MAIN: default: ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_HEVC_MAIN; break; diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_mpeg2.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_mpeg2.c index b964f8d2ff..936af5f86a 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_mpeg2.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_mpeg2.c @@ -31,10 +31,6 @@ #define MAX_SLICES 1024 #define INVALID_REF 0xffff -#define REF_RESOURCE(index) if (index != INVALID_REF) { \ - ctx->ref_resources[index] = frames_hwctx->texture_infos[index].texture; \ -} - typedef struct D3D12DecodePictureContext { DXVA_PictureParameters pp; DXVA_QmatrixData qm; diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c index 92a9243e0b..31a9378327 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c @@ -33,10 +33,6 @@ #define MAX_SLICES 1024 #define INVALID_REF 0xffff -#define REF_RESOURCE(index) if (index != INVALID_REF) { \ - ctx->ref_resources[index] = frames_hwctx->texture_infos[index].texture; \ -} - typedef struct D3D12DecodePictureContext { DXVA_PictureParameters pp; unsigned slice_count; @@ -95,9 +91,6 @@ static int d3d12va_vc1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer) { - D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - AVHWFramesContext *frames_ctx = D3D12VA_FRAMES_CONTEXT(avctx); - AVD3D12VAFramesContext *frames_hwctx = frames_ctx->hwctx; const VC1Context *v = avctx->priv_data; const MpegEncContext *s = &v->s; D3D12DecodePictureContext *ctx_pic = s->current_picture_ptr->hwaccel_picture_private; @@ -108,7 +101,7 @@ static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPU static const uint8_t start_code[] = { 0, 0, 1, 0x0d }; - if (FAILED(ID3D12Resource_Map(buffer, 0, NULL, &mapped_data))) { + if (FAILED(ID3D12Resource_Map(buffer, 0, NULL, (void **)&mapped_data))) { av_log(avctx, AV_LOG_ERROR, "Failed to map D3D12 Buffer resource!\n"); return AVERROR(EINVAL); } diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_vp9.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_vp9.c index d6dfc905d9..3476768e61 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_vp9.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_vp9.c @@ -85,14 +85,10 @@ static int d3d12va_vp9_decode_slice(AVCodecContext *avctx, const uint8_t *buffer static int update_input_arguments(AVCodecContext *avctx, D3D12_VIDEO_DECODE_INPUT_STREAM_ARGUMENTS *input_args, ID3D12Resource *buffer) { - D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - AVHWFramesContext *frames_ctx = D3D12VA_FRAMES_CONTEXT(avctx); - AVD3D12VAFramesContext *frames_hwctx = frames_ctx->hwctx; - const VP9SharedContext *h = avctx->priv_data; VP9DecodePictureContext *ctx_pic = h->frames[CUR_FRAME].hwaccel_picture_private; - uint8_t *mapped_data; + void *mapped_data; D3D12_VIDEO_DECODE_FRAME_ARGUMENT *args; if (FAILED(ID3D12Resource_Map(buffer, 0, NULL, &mapped_data))) { @@ -136,13 +132,13 @@ static int d3d12va_vp9_decode_init(AVCodecContext *avctx) DXVA_PicParams_VP9 pp; switch (avctx->profile) { - case FF_PROFILE_VP9_2: - case FF_PROFILE_VP9_3: + case AV_PROFILE_VP9_2: + case AV_PROFILE_VP9_3: ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_VP9_10BIT_PROFILE2; break; - case FF_PROFILE_VP9_0: - case FF_PROFILE_VP9_1: + case AV_PROFILE_VP9_0: + case AV_PROFILE_VP9_1: default: ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_VP9; break; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c index a3861b5b1a..668730dbbf 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c @@ -367,12 +367,12 @@ static void derive_subblock_diff_mvs(const VVCLocalContext *lc, PredictionUnit* const int pos_offset_y = 6 * (sp->d_ver_x + sp->d_ver_y); for (int x = 0; x < AFFINE_MIN_BLOCK_SIZE; x++) { for (int y = 0; y < AFFINE_MIN_BLOCK_SIZE; y++) { - Mv diff; - diff.x = x * (sp->d_hor_x * (1 << 2)) + y * (sp->d_hor_y * (1 << 2)) - pos_offset_x; - diff.y = x * (sp->d_ver_x * (1 << 2)) + y * (sp->d_ver_y * (1 << 2)) - pos_offset_y; - ff_vvc_round_mv(&diff, 0, 8); - pu->diff_mv_x[lx][AFFINE_MIN_BLOCK_SIZE * y + x] = av_clip(diff.x, -dmv_limit + 1, dmv_limit - 1); - pu->diff_mv_y[lx][AFFINE_MIN_BLOCK_SIZE * y + x] = av_clip(diff.y, -dmv_limit + 1, dmv_limit - 1); + LOCAL_ALIGNED_8(Mv, diff, [1]); + diff->x = x * (sp->d_hor_x * (1 << 2)) + y * (sp->d_hor_y * (1 << 2)) - pos_offset_x; + diff->y = x * (sp->d_ver_x * (1 << 2)) + y * (sp->d_ver_y * (1 << 2)) - pos_offset_y; + ff_vvc_round_mv(diff, 0, 8); + pu->diff_mv_x[lx][AFFINE_MIN_BLOCK_SIZE * y + x] = av_clip(diff->x, -dmv_limit + 1, dmv_limit - 1); + pu->diff_mv_y[lx][AFFINE_MIN_BLOCK_SIZE * y + x] = av_clip(diff->y, -dmv_limit + 1, dmv_limit - 1); } } } @@ -1046,7 +1046,6 @@ static int sb_temporal_luma_motion_data(const VVCLocalContext *lc, const MvField colPic = ref->poc; - AV_ZERO64(temp_mv); if (a1) { if ((a1->pred_flag & PF_L0) && colPic == rpl[0].list[a1->ref_idx[0]]) *temp_mv = a1->mv[0]; @@ -1074,7 +1073,7 @@ static int sb_temporal_merge_candidate(const VVCLocalContext* lc, NeighbourConte const NeighbourIdx n = A1; const MvField *a1; MvField ctr_mvf; - Mv temp_mv; + LOCAL_ALIGNED_8(Mv, temp_mv, [1]); const int x_ctb = (x0 >> ctb_log2_size) << ctb_log2_size; const int y_ctb = (y0 >> ctb_log2_size) << ctb_log2_size; @@ -1088,7 +1087,7 @@ static int sb_temporal_merge_candidate(const VVCLocalContext* lc, NeighbourConte mi->num_sb_y = cu->cb_height >> 3; a1 = derive_corner_mvf(nctx, &n, 1); - if (sb_temporal_luma_motion_data(lc, a1, x_ctb, y_ctb, &ctr_mvf, &temp_mv)) { + if (sb_temporal_luma_motion_data(lc, a1, x_ctb, y_ctb, &ctr_mvf, temp_mv)) { const int sbw = cu->cb_width / mi->num_sb_x; const int sbh = cu->cb_height / mi->num_sb_y; MvField mvf = {0}; @@ -1096,7 +1095,7 @@ static int sb_temporal_merge_candidate(const VVCLocalContext* lc, NeighbourConte for (int sbx = 0; sbx < mi->num_sb_x; sbx++) { int x = x0 + sbx * sbw; int y = y0 + sby * sbh; - sb_temproal_luma_motion(lc, x_ctb, y_ctb, &temp_mv, x + sbw / 2, y + sbh / 2, &mvf.pred_flag, mvf.mv); + sb_temproal_luma_motion(lc, x_ctb, y_ctb, temp_mv, x + sbw / 2, y + sbh / 2, &mvf.pred_flag, mvf.mv); if (!mvf.pred_flag) { mvf.pred_flag = ctr_mvf.pred_flag; memcpy(mvf.mv, ctr_mvf.mv, sizeof(mvf.mv)); @@ -1497,7 +1496,7 @@ static int mvp_spatial_candidates(const VVCLocalContext *lc, const NeighbourIdx bk[] = { B0, B1, B2 }; NeighbourContext nctx; int available_a, num_cands = 0; - Mv mv_a; + LOCAL_ALIGNED_8(Mv, mv_a, [1]); init_neighbour_context(&nctx, lc); @@ -1506,10 +1505,10 @@ static int mvp_spatial_candidates(const VVCLocalContext *lc, if (mvp_lx_flag == num_cands) return 1; num_cands++; - mv_a = *mv; + *mv_a = *mv; } if (MVP_FROM_NBS(bk)) { - if (!available_a || !IS_SAME_MV(&mv_a, mv)) { + if (!available_a || !IS_SAME_MV(mv_a, mv)) { if (mvp_lx_flag == num_cands) return 1; num_cands++; diff --git a/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d12va.c b/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d12va.c index 24ee1c8063..50a56d1d75 100644 --- a/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d12va.c +++ b/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d12va.c @@ -469,8 +469,8 @@ static int d3d12va_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, DX_CHECK(ID3D12Resource_Map(s->staging_download_buffer, 0, NULL, (void **)&mapped_data)); av_image_fill_pointers(data, ctx->sw_format, ctx->height, mapped_data, linesizes); - av_image_copy(dst->data, dst->linesize, (const uint8_t **)data, linesizes, - ctx->sw_format, ctx->width, ctx->height); + av_image_copy2(dst->data, dst->linesize, data, linesizes, + ctx->sw_format, ctx->width, ctx->height); ID3D12Resource_Unmap(s->staging_download_buffer, 0, NULL); } else { @@ -487,8 +487,8 @@ static int d3d12va_transfer_data(AVHWFramesContext *ctx, AVFrame *dst, DX_CHECK(ID3D12Resource_Map(s->staging_upload_buffer, 0, NULL, (void **)&mapped_data)); av_image_fill_pointers(data, ctx->sw_format, ctx->height, mapped_data, linesizes); - av_image_copy(data, linesizes, (const uint8_t **)src->data, src->linesize, - ctx->sw_format, ctx->width, ctx->height); + av_image_copy2(data, linesizes, src->data, src->linesize, + ctx->sw_format, ctx->width, ctx->height); ID3D12Resource_Unmap(s->staging_upload_buffer, 0, NULL); From 8d33e5a840c061fbd0b1958af1cd55f67a820d28 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sun, 28 Jan 2024 08:49:07 +0300 Subject: [PATCH 07/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20Release.txt.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Release.txt | 41 +++++++++++++++++++++++++++-------------- 1 file changed, 27 insertions(+), 14 deletions(-) diff --git a/docs/Release.txt b/docs/Release.txt index a34a360a02..61b82bba0c 100644 --- a/docs/Release.txt +++ b/docs/Release.txt @@ -1,18 +1,31 @@ -Here is a quick how-to release a new stable build: +Подсказка по выпуску релиза плеера MPC-BE: -1) Make sure you have a clean source tree, no modified files included -2) Update the revision number and the date in Changelog.txt -3) Compile MPC-BE and the standalone filters -4) Create an svn tag for the new release -5) Keep the PDB files of all the filters and MPC-BE builds -6) Upload the binary packages on SF following the directory and the packages names scheme - (you can also upload the PDB files too, use 7zip for creating the 7z packages) -7) Update the webpage with the new download links, history and version.txt with - the new version number (in the SF FTP) +1. Проверяем отсутствие изменений в локальном репозитории и синхронизируем код с сервером. +git pull +git submodule update --init --recursive +2. Обновляем Changelog.Rus.txt и Changelog.txt. Записываем номер версии релиза и текущую дату. -In the next commit, bump the version: +3. Обновляем номер версии в "include/Version.h" и меняем MPC_VERSION_STATUS на 1. -1) In "include/Version.h" -2) In "src/mplayerc/res/mpc-be.exe.manifest.conf" and - "src/mplayerc/res/mpc-be.exe.manifest.template" +4. Обновляем номер версии в "src/mplayerc/res/mpc-be.exe.manifest.conf" и "src/mplayerc/res/mpc-be.exe.manifest.template" + +5. Очищаем папку "_bin" и делаем пробную сборку. +build.bat Build All Packages + +6. Если все хорошо, то создаем коммит "Релиз x.x.x.". + +7. Создаем новую метку с номером версии релиза и пишем для метки сообщение "Релиз x.x.x.". + +8. Заливаем изменения на сервер, включая новую метку. + +9. Очищаем папку "_bin" и делаем сборку релиза. +build.bat Build All Packages + +10. Создаем файл контрольных сумм mpc-be.x.x.x.checksums.sha для всех файлов релиза из папки "Packages\x.x.x". + +11. На странице https://github.com/Aleksoid1978/MPC-BE/releases создаем новый релиз. Прописываем изменения. Добавляем файлы релиза и файл контрольных сумм. Публикуем релиз. + +12. Прописываем новую версию и путь в файл version.txt на сервере mpc-be.org, чтобы проверка обновлений сообщала о новой версии. + +13. Делаем копию релизных файлов по адресу https://sourceforge.net/projects/mpcbe/files/MPC-BE/Release%20builds/ и указываем инсталлятор версии x64 по умолчанию для скачивания. From de4301b6a31636e8025f146c5adc5dbf486402eb Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 30 Jan 2024 10:13:25 +1000 Subject: [PATCH 08/87] =?UTF-8?q?SetAlwaysOnTop()=20-=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D0=BC=20SetForegroun?= =?UTF-8?q?dWindow()=20=D0=B5=D1=81=D0=BB=D0=B8=20=D0=BF=D0=BB=D0=B5=D0=B5?= =?UTF-8?q?=D1=80=20=D1=81=D0=B2=D0=B5=D1=80=D0=BD=D1=83=D1=82.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 74e83fb130..8b11635909 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -16082,7 +16082,7 @@ void CMainFrame::SetAlwaysOnTop(int i) if (pInsertAfter) { SetWindowPos(pInsertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - if (pInsertAfter == &wndTopMost) { + if (pInsertAfter == &wndTopMost && !IsIconic()) { SetForegroundWindow(); } } From 6037b1621d5e2ef3ee30a62379a7a6a3fe27f455 Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 30 Jan 2024 19:18:14 +0300 Subject: [PATCH 09/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-940-g36a986d9a?= =?UTF-8?q?1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- src/ExtLib/ffmpeg/ffmpeg.mak | 105 ++++++++++-------- .../aac_adtstoasc.c} | 0 .../av1_frame_split.c} | 0 .../libavcodec/{chomp_bsf.c => bsf/chomp.c} | 0 .../{dca_core_bsf.c => bsf/dca_core.c} | 0 .../dump_extradata.c} | 0 .../extract_extradata.c} | 0 .../h264_mp4toannexb.c} | 0 .../h266_metadata.c} | 0 .../hevc_mp4toannexb.c} | 0 .../imx_dump_header.c} | 0 .../{mjpeg2jpeg_bsf.c => bsf/mjpeg2jpeg.c} | 0 .../mjpega_dump_header.c} | 0 .../libavcodec/{movsub_bsf.c => bsf/movsub.c} | 0 .../mp3_header_decompress.c} | 0 .../mpeg4_unpack_bframes.c} | 0 .../libavcodec/{noise_bsf.c => bsf/noise.c} | 0 .../libavcodec/{null_bsf.c => bsf/null.c} | 0 .../remove_extradata.c} | 0 .../vp9_raw_reorder.c} | 0 .../vp9_superframe.c} | 0 .../vp9_superframe_split.c} | 0 .../vvc_mp4toannexb.c} | 0 src/ExtLib/ffmpeg/libavcodec/cbs_h2645.c | 1 + src/ExtLib/ffmpeg/libavcodec/cbs_h266.h | 1 + .../libavcodec/cbs_h266_syntax_template.c | 7 +- src/ExtLib/ffmpeg/libavcodec/hap.h | 6 +- src/ExtLib/ffmpeg/libavcodec/hapdec.c | 17 +-- src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c | 4 +- src/ExtLib/ffmpeg/libavcodec/texturedsp.c | 2 +- src/ExtLib/ffmpeg/libavcodec/texturedsp.h | 17 ++- .../ffmpeg/libavcodec/texturedsp_template.c | 13 ++- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c | 4 +- .../libavcodec/vvc/vvc_intra_template.c | 2 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c | 14 +-- src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c | 9 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c | 8 +- 39 files changed, 119 insertions(+), 95 deletions(-) rename src/ExtLib/ffmpeg/libavcodec/{aac_adtstoasc_bsf.c => bsf/aac_adtstoasc.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{av1_frame_split_bsf.c => bsf/av1_frame_split.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{chomp_bsf.c => bsf/chomp.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{dca_core_bsf.c => bsf/dca_core.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{dump_extradata_bsf.c => bsf/dump_extradata.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{extract_extradata_bsf.c => bsf/extract_extradata.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{h264_mp4toannexb_bsf.c => bsf/h264_mp4toannexb.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{h266_metadata_bsf.c => bsf/h266_metadata.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{hevc_mp4toannexb_bsf.c => bsf/hevc_mp4toannexb.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{imx_dump_header_bsf.c => bsf/imx_dump_header.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{mjpeg2jpeg_bsf.c => bsf/mjpeg2jpeg.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{mjpega_dump_header_bsf.c => bsf/mjpega_dump_header.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{movsub_bsf.c => bsf/movsub.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{mp3_header_decompress_bsf.c => bsf/mp3_header_decompress.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{mpeg4_unpack_bframes_bsf.c => bsf/mpeg4_unpack_bframes.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{noise_bsf.c => bsf/noise.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{null_bsf.c => bsf/null.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{remove_extradata_bsf.c => bsf/remove_extradata.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{vp9_raw_reorder_bsf.c => bsf/vp9_raw_reorder.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{vp9_superframe_bsf.c => bsf/vp9_superframe.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{vp9_superframe_split_bsf.c => bsf/vp9_superframe_split.c} (100%) rename src/ExtLib/ffmpeg/libavcodec/{vvc_mp4toannexb_bsf.c => bsf/vvc_mp4toannexb.c} (100%) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index b2fd6ad7a8..d7044e85d3 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -26,7 +26,7 @@ MPCVideoDec Обновлен корейский перевод (автор Hackjjang). Обновлены библиотеки: - ffmpeg git-n6.2-dev-885-g8c99a1429a; + ffmpeg git-n6.2-dev-940-g36a986d9a1; nanosvg git-93ce879. diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 4d6fa3aef6..f7fc02aa25 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -26,7 +26,7 @@ Updated Italian translation (by mapi68). Updated Korean translation (by Hackjjang). Updated libraries: - ffmpeg git-n6.2-dev-885-g8c99a1429a; + ffmpeg git-n6.2-dev-940-g36a986d9a1; nanosvg git-93ce879. diff --git a/src/ExtLib/ffmpeg/ffmpeg.mak b/src/ExtLib/ffmpeg/ffmpeg.mak index c83162505b..37adb48d79 100644 --- a/src/ExtLib/ffmpeg/ffmpeg.mak +++ b/src/ExtLib/ffmpeg/ffmpeg.mak @@ -18,19 +18,22 @@ else CONFIGURATION = Release endif -OBJ_DIR = $(BIN_DIR)/obj/$(CONFIGURATION)_$(PLATFORM)/ffmpeg/ -TARGET_LIB_DIR = $(BIN_DIR)/lib/$(CONFIGURATION)_$(PLATFORM) -LIB_LIBAVCODEC = $(OBJ_DIR)libavcodec.a -LIB_LIBAVCODEC_B = $(OBJ_DIR)libavcodec_b.a -LIB_LIBAVFILTER = $(OBJ_DIR)libavfilter.a -LIB_LIBAVUTIL = $(OBJ_DIR)libavutil.a -LIB_LIBSWRESAMPLE = $(OBJ_DIR)libswresample.a -LIB_LIBSWSCALE = $(OBJ_DIR)libswscale.a -TARGET_LIB = $(TARGET_LIB_DIR)/ffmpeg.lib -ARSCRIPT = $(OBJ_DIR)script.ar +OBJ_DIR = $(BIN_DIR)/obj/$(CONFIGURATION)_$(PLATFORM)/ffmpeg/ +TARGET_LIB_DIR = $(BIN_DIR)/lib/$(CONFIGURATION)_$(PLATFORM) +LIB_LIBAVCODEC = $(OBJ_DIR)libavcodec.a +LIB_LIBAVCODEC_B = $(OBJ_DIR)libavcodec_b.a +LIB_LIBAVCODEC_BSF = $(OBJ_DIR)libavcodec_bsf.a +LIB_LIBAVFILTER = $(OBJ_DIR)libavfilter.a +LIB_LIBAVUTIL = $(OBJ_DIR)libavutil.a +LIB_LIBSWRESAMPLE = $(OBJ_DIR)libswresample.a +LIB_LIBSWSCALE = $(OBJ_DIR)libswscale.a +TARGET_LIB = $(TARGET_LIB_DIR)/ffmpeg.lib +ARSCRIPT = $(OBJ_DIR)script.ar # Compiler and yasm flags -CFLAGS = -I. -I.. -Icompat/atomics/win32 -Icompat/windows -I$(ZLIB_DIR) -I$(SPEEX_DIR) -I$(SOXR_DIR) -I$(DAV1_DIR) -I$(FFNVCODEC_DIR) -I$(UAVS3D_DIR) \ +CFLAGS = -I. -I.. -Icompat/atomics/win32 -Icompat/windows \ + -Ilibavcodec \ + -I$(ZLIB_DIR) -I$(SPEEX_DIR) -I$(SOXR_DIR) -I$(DAV1_DIR) -I$(FFNVCODEC_DIR) -I$(UAVS3D_DIR) \ -DHAVE_AV_CONFIG_H -D_ISOC99_SOURCE -D_XOPEN_SOURCE=600 \ -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -DOPJ_STATIC \ -D_WIN32_WINNT=0x0601 -DWINVER=0x0601 \ @@ -61,6 +64,7 @@ endif OBJ_DIRS = $(OBJ_DIR) \ $(OBJ_DIR)compat \ $(OBJ_DIR)libavcodec \ + $(OBJ_DIR)libavcodec/bsf \ $(OBJ_DIR)libavcodec/vvc \ $(OBJ_DIR)libavcodec/x86 \ $(OBJ_DIR)libavfilter \ @@ -74,7 +78,7 @@ OBJ_DIRS = $(OBJ_DIR) \ $(TARGET_LIB_DIR) # Targets -all: make_objdirs $(LIB_LIBAVCODEC) $(LIB_LIBAVCODEC_B) $(LIB_LIBAVFILTER) $(LIB_LIBAVUTIL) $(LIB_LIBSWRESAMPLE) $(LIB_LIBSWSCALE) $(TARGET_LIB) +all: make_objdirs $(LIB_LIBAVCODEC) $(LIB_LIBAVCODEC_B) $(LIB_LIBAVCODEC_BSF) $(LIB_LIBAVFILTER) $(LIB_LIBAVUTIL) $(LIB_LIBSWRESAMPLE) $(LIB_LIBSWSCALE) $(TARGET_LIB) make_objdirs: $(OBJ_DIRS) $(OBJ_DIRS): @@ -90,7 +94,6 @@ SRCS_LC = \ \ libavcodec/8bps.c \ libavcodec/aac_ac3_parser.c \ - libavcodec/aac_adtstoasc_bsf.c \ libavcodec/aac_parser.c \ libavcodec/aacdec.c \ libavcodec/aacdec_common.c \ @@ -136,7 +139,6 @@ SRCS_LC = \ libavcodec/atrac9dec.c \ libavcodec/atsc_a53.c \ libavcodec/audiodsp.c \ - libavcodec/av1_frame_split_bsf.c \ libavcodec/av1_parse.c \ libavcodec/av1_parser.c \ libavcodec/av1dec.c \ @@ -167,7 +169,6 @@ SRCS_LC = \ libavcodec/cfhd.c \ libavcodec/cfhddata.c \ libavcodec/cfhddsp.c \ - libavcodec/chomp_bsf.c \ libavcodec/cinepak.c \ libavcodec/cllc.c \ libavcodec/codec_desc.c \ @@ -184,7 +185,6 @@ SRCS_LC = \ libavcodec/d3d12va_vp9.c \ libavcodec/dca.c \ libavcodec/dca_core.c \ - libavcodec/dca_core_bsf.c \ libavcodec/dca_exss.c \ libavcodec/dca_lbr.c \ libavcodec/dca_parser.c \ @@ -213,7 +213,6 @@ SRCS_LC = \ libavcodec/dsd.c \ libavcodec/dsddec.c \ libavcodec/dstdec.c \ - libavcodec/dump_extradata_bsf.c \ libavcodec/dv.c \ libavcodec/dv_profile.c \ libavcodec/dvdata.c \ @@ -233,7 +232,6 @@ SRCS_LC = \ libavcodec/encode.c \ libavcodec/error_resilience.c \ libavcodec/exif.c \ - libavcodec/extract_extradata_bsf.c \ libavcodec/faandct.c \ libavcodec/faanidct.c \ libavcodec/fdctdsp.c \ @@ -265,7 +263,6 @@ SRCS_LC = \ libavcodec/h264_direct.c \ libavcodec/h264_loopfilter.c \ libavcodec/h264_mb.c \ - libavcodec/h264_mp4toannexb_bsf.c \ libavcodec/h264_parse.c \ libavcodec/h264_parser.c \ libavcodec/h264_picture.c \ @@ -280,7 +277,6 @@ SRCS_LC = \ libavcodec/h264idct.c \ libavcodec/h264pred.c \ libavcodec/h264qpel.c \ - libavcodec/h266_metadata_bsf.c \ libavcodec/h2645_parse.c \ libavcodec/h2645_sei.c \ libavcodec/h2645_vui.c \ @@ -292,7 +288,6 @@ SRCS_LC = \ libavcodec/hevc_cabac.c \ libavcodec/hevc_data.c \ libavcodec/hevc_filter.c \ - libavcodec/hevc_mp4toannexb_bsf.c \ libavcodec/hevc_mvs.c \ libavcodec/hevc_parse.c \ libavcodec/hevc_parser.c \ @@ -316,7 +311,6 @@ SRCS_LC = \ libavcodec/idctdsp.c \ libavcodec/imc.c \ libavcodec/imgconvert.c \ - libavcodec/imx_dump_header_bsf.c \ libavcodec/indeo3.c \ libavcodec/indeo4.c \ libavcodec/indeo5.c \ @@ -352,8 +346,6 @@ SRCS_LC = \ libavcodec/me_cmp.c \ libavcodec/metasound.c \ libavcodec/mjpeg_parser.c \ - libavcodec/mjpeg2jpeg_bsf.c \ - libavcodec/mjpega_dump_header_bsf.c \ libavcodec/mjpegbdec.c \ libavcodec/mjpegdec.c \ libavcodec/mjpegdec_common.c \ @@ -364,8 +356,6 @@ SRCS_LC = \ libavcodec/mlpdsp.c \ libavcodec/mlz.c \ libavcodec/motion_est.c \ - libavcodec/movsub_bsf.c \ - libavcodec/mp3_header_decompress_bsf.c \ libavcodec/mpc.c \ libavcodec/mpc7.c \ libavcodec/mpc8.c \ @@ -374,7 +364,6 @@ SRCS_LC = \ libavcodec/mpeg12data.c \ libavcodec/mpeg12dec.c \ libavcodec/mpeg12framerate.c \ - libavcodec/mpeg4_unpack_bframes_bsf.c \ libavcodec/mpeg4audio.c \ libavcodec/mpeg4audio_sample_rates.c \ libavcodec/mpeg4video.c \ @@ -423,8 +412,6 @@ SRCS_LC = \ libavcodec/nellymoserdec.c SRCS_LC_B = \ - libavcodec/noise_bsf.c \ - libavcodec/null_bsf.c \ libavcodec/nvdec.c \ libavcodec/nvdec_av1.c \ libavcodec/nvdec_h264.c \ @@ -470,7 +457,6 @@ SRCS_LC_B = \ libavcodec/raw.c \ libavcodec/rawdec.c \ libavcodec/refstruct.c \ - libavcodec/remove_extradata_bsf.c \ libavcodec/rl.c \ libavcodec/rpza.c \ libavcodec/rv10.c \ @@ -552,9 +538,6 @@ SRCS_LC_B = \ libavcodec/vp8dsp.c \ libavcodec/vp9.c \ libavcodec/vp9_parser.c \ - libavcodec/vp9_raw_reorder_bsf.c \ - libavcodec/vp9_superframe_bsf.c \ - libavcodec/vp9_superframe_split_bsf.c \ libavcodec/vp9block.c \ libavcodec/vp9data.c \ libavcodec/vp9dsp.c \ @@ -566,6 +549,7 @@ SRCS_LC_B = \ libavcodec/vp9prob.c \ libavcodec/vp9recon.c \ libavcodec/vpx_rac.c\ + libavcodec/vvc_parser.c \ libavcodec/wavpack.c \ libavcodec/wavpackdata.c \ libavcodec/wma.c \ @@ -583,8 +567,6 @@ SRCS_LC_B = \ libavcodec/xvididct.c \ libavcodec/zlib_wrapper.c \ \ - libavcodec/vvc_mp4toannexb_bsf.c \ - libavcodec/vvc_parser.c \ libavcodec/vvc/vvcdec.c \ libavcodec/vvc/vvcdsp.c \ libavcodec/vvc/vvc_cabac.c \ @@ -662,6 +644,30 @@ SRCS_LC_B = \ libavcodec/x86/vp9dsp_init_16bpp.c \ libavcodec/x86/xvididct_init.c +SRCS_LC_BSF = \ + libavcodec/bsf/aac_adtstoasc.c \ + libavcodec/bsf/av1_frame_split.c \ + libavcodec/bsf/chomp.c \ + libavcodec/bsf/dca_core.c \ + libavcodec/bsf/dump_extradata.c \ + libavcodec/bsf/extract_extradata.c \ + libavcodec/bsf/h264_mp4toannexb.c \ + libavcodec/bsf/h266_metadata.c \ + libavcodec/bsf/hevc_mp4toannexb.c \ + libavcodec/bsf/imx_dump_header.c \ + libavcodec/bsf/mjpeg2jpeg.c \ + libavcodec/bsf/mjpega_dump_header.c \ + libavcodec/bsf/movsub.c \ + libavcodec/bsf/mp3_header_decompress.c \ + libavcodec/bsf/mpeg4_unpack_bframes.c \ + libavcodec/bsf/noise.c \ + libavcodec/bsf/null.c \ + libavcodec/bsf/remove_extradata.c \ + libavcodec/bsf/vp9_raw_reorder.c \ + libavcodec/bsf/vp9_superframe.c \ + libavcodec/bsf/vp9_superframe_split.c \ + libavcodec/bsf/vvc_mp4toannexb.c \ + SRCS_LF = \ libavfilter/af_aresample.c \ libavfilter/af_atempo.c \ @@ -904,6 +910,9 @@ OBJS_LC = \ OBJS_LC_B = \ $(SRCS_LC_B:%.c=$(OBJ_DIR)%.o) + +OBJS_LC_BSF = \ + $(SRCS_LC_BSF:%.c=$(OBJ_DIR)%.o) OBJS_LF = \ $(SRCS_LF:%.c=$(OBJ_DIR)%.o) \ @@ -937,6 +946,10 @@ $(LIB_LIBAVCODEC): $(OBJS_LC) $(LIB_LIBAVCODEC_B): $(OBJS_LC_B) @echo $@ @$(GCC_PREFIX)ar rc $@ $(OBJS_LC_B) + +$(LIB_LIBAVCODEC_BSF): $(OBJS_LC_BSF) + @echo $@ + @$(GCC_PREFIX)ar rc $@ $(OBJS_LC_BSF) $(LIB_LIBAVFILTER): $(OBJS_LF) @echo $@ @@ -954,21 +967,23 @@ $(LIB_LIBSWRESAMPLE): $(OBJS_LR) @echo $@ @$(GCC_PREFIX)ar rc $@ $(OBJS_LR) -$(TARGET_LIB): $(LIB_LIBAVCODEC) $(LIB_LIBAVCODEC_B) $(LIB_LIBAVFILTER) $(LIB_LIBAVUTIL) $(LIB_LIBSWRESAMPLE) $(LIB_LIBSWSCALE) +$(TARGET_LIB): $(LIB_LIBAVCODEC) $(LIB_LIBAVCODEC_B) $(LIB_LIBAVCODEC_BSF) $(LIB_LIBAVFILTER) $(LIB_LIBAVUTIL) $(LIB_LIBSWRESAMPLE) $(LIB_LIBSWSCALE) @rm -f $(ARSCRIPT) - @echo "CREATE $@" >> $(ARSCRIPT) - @echo "ADDLIB $(LIB_LIBAVCODEC)" >> $(ARSCRIPT) - @echo "ADDLIB $(LIB_LIBAVCODEC_B)" >> $(ARSCRIPT) - @echo "ADDLIB $(LIB_LIBAVFILTER)" >> $(ARSCRIPT) - @echo "ADDLIB $(LIB_LIBSWSCALE)" >> $(ARSCRIPT) - @echo "ADDLIB $(LIB_LIBAVUTIL)" >> $(ARSCRIPT) - @echo "ADDLIB $(LIB_LIBSWRESAMPLE)" >> $(ARSCRIPT) - @echo "SAVE" >> $(ARSCRIPT) - @echo "END" >> $(ARSCRIPT) + @echo "CREATE $@" >> $(ARSCRIPT) + @echo "ADDLIB $(LIB_LIBAVCODEC)" >> $(ARSCRIPT) + @echo "ADDLIB $(LIB_LIBAVCODEC_B)" >> $(ARSCRIPT) + @echo "ADDLIB $(LIB_LIBAVCODEC_BSF)" >> $(ARSCRIPT) + @echo "ADDLIB $(LIB_LIBAVFILTER)" >> $(ARSCRIPT) + @echo "ADDLIB $(LIB_LIBSWSCALE)" >> $(ARSCRIPT) + @echo "ADDLIB $(LIB_LIBAVUTIL)" >> $(ARSCRIPT) + @echo "ADDLIB $(LIB_LIBSWRESAMPLE)" >> $(ARSCRIPT) + @echo "SAVE" >> $(ARSCRIPT) + @echo "END" >> $(ARSCRIPT) @$(GCC_PREFIX)ar -M < $(ARSCRIPT) -include $(SRCS_LC:%.c=$(OBJ_DIR)%.d) -include $(SRCS_LC_B:%.c=$(OBJ_DIR)%.d) +-include $(SRCS_LC_BSF:%.c=$(OBJ_DIR)%.d) -include $(SRCS_LF:%.c=$(OBJ_DIR)%.d) -include $(SRCS_LU:%.c=$(OBJ_DIR)%.d) -include $(SRCS_LR:%.c=$(OBJ_DIR)%.d) diff --git a/src/ExtLib/ffmpeg/libavcodec/aac_adtstoasc_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/aac_adtstoasc.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/aac_adtstoasc_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/aac_adtstoasc.c diff --git a/src/ExtLib/ffmpeg/libavcodec/av1_frame_split_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/av1_frame_split.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/av1_frame_split_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/av1_frame_split.c diff --git a/src/ExtLib/ffmpeg/libavcodec/chomp_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/chomp.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/chomp_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/chomp.c diff --git a/src/ExtLib/ffmpeg/libavcodec/dca_core_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/dca_core.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/dca_core_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/dca_core.c diff --git a/src/ExtLib/ffmpeg/libavcodec/dump_extradata_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/dump_extradata.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/dump_extradata_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/dump_extradata.c diff --git a/src/ExtLib/ffmpeg/libavcodec/extract_extradata_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/extract_extradata.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/extract_extradata_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/extract_extradata.c diff --git a/src/ExtLib/ffmpeg/libavcodec/h264_mp4toannexb_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/h264_mp4toannexb.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/h264_mp4toannexb_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/h264_mp4toannexb.c diff --git a/src/ExtLib/ffmpeg/libavcodec/h266_metadata_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/h266_metadata.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/h266_metadata_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/h266_metadata.c diff --git a/src/ExtLib/ffmpeg/libavcodec/hevc_mp4toannexb_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/hevc_mp4toannexb.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/hevc_mp4toannexb_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/hevc_mp4toannexb.c diff --git a/src/ExtLib/ffmpeg/libavcodec/imx_dump_header_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/imx_dump_header.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/imx_dump_header_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/imx_dump_header.c diff --git a/src/ExtLib/ffmpeg/libavcodec/mjpeg2jpeg_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/mjpeg2jpeg.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/mjpeg2jpeg_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/mjpeg2jpeg.c diff --git a/src/ExtLib/ffmpeg/libavcodec/mjpega_dump_header_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/mjpega_dump_header.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/mjpega_dump_header_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/mjpega_dump_header.c diff --git a/src/ExtLib/ffmpeg/libavcodec/movsub_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/movsub.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/movsub_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/movsub.c diff --git a/src/ExtLib/ffmpeg/libavcodec/mp3_header_decompress_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/mp3_header_decompress.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/mp3_header_decompress_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/mp3_header_decompress.c diff --git a/src/ExtLib/ffmpeg/libavcodec/mpeg4_unpack_bframes_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/mpeg4_unpack_bframes.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/mpeg4_unpack_bframes_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/mpeg4_unpack_bframes.c diff --git a/src/ExtLib/ffmpeg/libavcodec/noise_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/noise.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/noise_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/noise.c diff --git a/src/ExtLib/ffmpeg/libavcodec/null_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/null.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/null_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/null.c diff --git a/src/ExtLib/ffmpeg/libavcodec/remove_extradata_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/remove_extradata.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/remove_extradata_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/remove_extradata.c diff --git a/src/ExtLib/ffmpeg/libavcodec/vp9_raw_reorder_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/vp9_raw_reorder.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/vp9_raw_reorder_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/vp9_raw_reorder.c diff --git a/src/ExtLib/ffmpeg/libavcodec/vp9_superframe_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/vp9_superframe.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/vp9_superframe_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/vp9_superframe.c diff --git a/src/ExtLib/ffmpeg/libavcodec/vp9_superframe_split_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/vp9_superframe_split.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/vp9_superframe_split_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/vp9_superframe_split.c diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc_mp4toannexb_bsf.c b/src/ExtLib/ffmpeg/libavcodec/bsf/vvc_mp4toannexb.c similarity index 100% rename from src/ExtLib/ffmpeg/libavcodec/vvc_mp4toannexb_bsf.c rename to src/ExtLib/ffmpeg/libavcodec/bsf/vvc_mp4toannexb.c diff --git a/src/ExtLib/ffmpeg/libavcodec/cbs_h2645.c b/src/ExtLib/ffmpeg/libavcodec/cbs_h2645.c index c48a06b241..2fb249bcd3 100644 --- a/src/ExtLib/ffmpeg/libavcodec/cbs_h2645.c +++ b/src/ExtLib/ffmpeg/libavcodec/cbs_h2645.c @@ -1155,6 +1155,7 @@ static int cbs_h266_read_nal_unit(CodedBitstreamContext *ctx, return err; } + slice->header_size = pos / 8; slice->data_size = len - pos / 8; slice->data_ref = av_buffer_ref(unit->data_ref); if (!slice->data_ref) diff --git a/src/ExtLib/ffmpeg/libavcodec/cbs_h266.h b/src/ExtLib/ffmpeg/libavcodec/cbs_h266.h index 8b3ad391b1..73d94157d4 100644 --- a/src/ExtLib/ffmpeg/libavcodec/cbs_h266.h +++ b/src/ExtLib/ffmpeg/libavcodec/cbs_h266.h @@ -843,6 +843,7 @@ typedef struct H266RawSlice { uint8_t *data; AVBufferRef *data_ref; + size_t header_size; size_t data_size; int data_bit_start; } H266RawSlice; diff --git a/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c b/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c index 549d021211..37dc3acba0 100644 --- a/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c @@ -902,16 +902,17 @@ static int FUNC(vps) (CodedBitstreamContext *ctx, RWContext *rw, current->vps_ols_mode_idc == 1) { num_layers_in_ols = i + 1; } else if (current->vps_ols_mode_idc == 2) { - for (k = 0, j = 0; k <= current->vps_max_layers_minus1; k++) { + for (k = 0, j = 0; k <= current->vps_max_layers_minus1; k++) if (layer_included_in_ols_flag[i][k]) j++; - num_layers_in_ols = j; - } + num_layers_in_ols = j; } if (num_layers_in_ols > 1) { num_multi_layer_olss++; } } + if (!current->vps_each_layer_is_an_ols_flag && num_multi_layer_olss == 0) + return AVERROR_INVALIDDATA; } for (i = 0; i <= current->vps_num_ptls_minus1; i++) { diff --git a/src/ExtLib/ffmpeg/libavcodec/hap.h b/src/ExtLib/ffmpeg/libavcodec/hap.h index 579c988ae7..79e495ae0f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hap.h +++ b/src/ExtLib/ffmpeg/libavcodec/hap.h @@ -23,10 +23,9 @@ #ifndef AVCODEC_HAP_H #define AVCODEC_HAP_H +#include #include -#include "libavutil/opt.h" - #include "bytestream.h" #include "texturedsp.h" @@ -59,9 +58,8 @@ typedef struct HapChunk { } HapChunk; typedef struct HapContext { - AVClass *class; + const struct AVClass *class; - TextureDSPContext dxtc; GetByteContext gbc; enum HapTextureFormat opt_tex_fmt; /* Texture type (encoder only) */ diff --git a/src/ExtLib/ffmpeg/libavcodec/hapdec.c b/src/ExtLib/ffmpeg/libavcodec/hapdec.c index fee3c04d84..3a848e9f67 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hapdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/hapdec.c @@ -323,7 +323,7 @@ static int hap_decode(AVCodecContext *avctx, AVFrame *frame, ctx->dec[t].frame_data.out = frame->data[0]; ctx->dec[t].stride = frame->linesize[0]; - avctx->execute2(avctx, ff_texturedsp_decompress_thread, &ctx->dec[t], NULL, ctx->dec[t].slice_count); + ff_texturedsp_exec_decompress_threads(avctx, &ctx->dec[t]); } /* Frame is ready to be output */ @@ -337,6 +337,7 @@ static int hap_decode(AVCodecContext *avctx, AVFrame *frame, static av_cold int hap_init(AVCodecContext *avctx) { HapContext *ctx = avctx->priv_data; + TextureDSPContext dxtc; const char *texture_name; int ret = av_image_check_size(avctx->width, avctx->height, 0, avctx); @@ -350,7 +351,7 @@ static av_cold int hap_init(AVCodecContext *avctx) avctx->coded_width = FFALIGN(avctx->width, TEXTURE_BLOCK_W); avctx->coded_height = FFALIGN(avctx->height, TEXTURE_BLOCK_H); - ff_texturedsp_init(&ctx->dxtc); + ff_texturedsp_init(&dxtc); ctx->texture_count = 1; ctx->dec[0].raw_ratio = 16; @@ -361,25 +362,25 @@ static av_cold int hap_init(AVCodecContext *avctx) case MKTAG('H','a','p','1'): texture_name = "DXT1"; ctx->dec[0].tex_ratio = 8; - ctx->dec[0].tex_funct = ctx->dxtc.dxt1_block; + ctx->dec[0].tex_funct = dxtc.dxt1_block; avctx->pix_fmt = AV_PIX_FMT_RGB0; break; case MKTAG('H','a','p','5'): texture_name = "DXT5"; ctx->dec[0].tex_ratio = 16; - ctx->dec[0].tex_funct = ctx->dxtc.dxt5_block; + ctx->dec[0].tex_funct = dxtc.dxt5_block; avctx->pix_fmt = AV_PIX_FMT_RGBA; break; case MKTAG('H','a','p','Y'): texture_name = "DXT5-YCoCg-scaled"; ctx->dec[0].tex_ratio = 16; - ctx->dec[0].tex_funct = ctx->dxtc.dxt5ys_block; + ctx->dec[0].tex_funct = dxtc.dxt5ys_block; avctx->pix_fmt = AV_PIX_FMT_RGB0; break; case MKTAG('H','a','p','A'): texture_name = "RGTC1"; ctx->dec[0].tex_ratio = 8; - ctx->dec[0].tex_funct = ctx->dxtc.rgtc1u_gray_block; + ctx->dec[0].tex_funct = dxtc.rgtc1u_gray_block; ctx->dec[0].raw_ratio = 4; avctx->pix_fmt = AV_PIX_FMT_GRAY8; break; @@ -387,8 +388,8 @@ static av_cold int hap_init(AVCodecContext *avctx) texture_name = "DXT5-YCoCg-scaled / RGTC1"; ctx->dec[0].tex_ratio = 16; ctx->dec[1].tex_ratio = 8; - ctx->dec[0].tex_funct = ctx->dxtc.dxt5ys_block; - ctx->dec[1].tex_funct = ctx->dxtc.rgtc1u_alpha_block; + ctx->dec[0].tex_funct = dxtc.dxt5ys_block; + ctx->dec[1].tex_funct = dxtc.rgtc1u_alpha_block; ctx->dec[1].raw_ratio = 16; ctx->dec[1].slice_count = ctx->dec[0].slice_count; avctx->pix_fmt = AV_PIX_FMT_RGBA; diff --git a/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c b/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c index 7e05f2eeca..65d4bf429b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c +++ b/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c @@ -735,10 +735,8 @@ int ff_mpeg4_decode_video_packet_header(Mpeg4DecContext *ctx) header_extension = get_bits1(&s->gb); if (header_extension) { - int time_incr = 0; - while (get_bits1(&s->gb) != 0) - time_incr++; + ; check_marker(s->avctx, &s->gb, "before time_increment in video packed header"); skip_bits(&s->gb, ctx->time_increment_bits); /* time_increment */ diff --git a/src/ExtLib/ffmpeg/libavcodec/texturedsp.c b/src/ExtLib/ffmpeg/libavcodec/texturedsp.c index d459ccaad9..fae7b932dc 100644 --- a/src/ExtLib/ffmpeg/libavcodec/texturedsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/texturedsp.c @@ -653,6 +653,6 @@ av_cold void ff_texturedsp_init(TextureDSPContext *c) c->dxn3dc_block = dxn3dc_block; } -#define TEXTUREDSP_FUNC_NAME ff_texturedsp_decompress_thread +#define TEXTUREDSP_FUNC_NAME ff_texturedsp_exec_decompress_threads #define TEXTUREDSP_TEX_FUNC(a, b, c) tex_funct(a, b, c) #include "texturedsp_template.c" diff --git a/src/ExtLib/ffmpeg/libavcodec/texturedsp.h b/src/ExtLib/ffmpeg/libavcodec/texturedsp.h index 5c30d0a29f..b7218823fc 100644 --- a/src/ExtLib/ffmpeg/libavcodec/texturedsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/texturedsp.h @@ -39,8 +39,6 @@ #include #include -#include "avcodec.h" - #define TEXTURE_BLOCK_W 4 #define TEXTURE_BLOCK_H 4 @@ -62,6 +60,12 @@ typedef struct TextureDSPContext { int (*dxn3dc_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block); } TextureDSPContext; +typedef struct TextureDSPEncContext { + int (*dxt1_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block); + int (*dxt5_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block); + int (*dxt5ys_block) (uint8_t *dst, ptrdiff_t stride, const uint8_t *block); +} TextureDSPEncContext; + typedef struct TextureDSPThreadContext { union { const uint8_t *in; // Input frame data @@ -81,9 +85,12 @@ typedef struct TextureDSPThreadContext { } TextureDSPThreadContext; void ff_texturedsp_init(TextureDSPContext *c); -void ff_texturedspenc_init(TextureDSPContext *c); +void ff_texturedspenc_init(TextureDSPEncContext *c); -int ff_texturedsp_decompress_thread(AVCodecContext *avctx, void *arg, int slice, int thread_nb); -int ff_texturedsp_compress_thread(AVCodecContext *avctx, void *arg, int slice, int thread_nb); +struct AVCodecContext; +int ff_texturedsp_exec_decompress_threads(struct AVCodecContext *avctx, + TextureDSPThreadContext *ctx); +int ff_texturedsp_exec_compress_threads(struct AVCodecContext *avctx, + TextureDSPThreadContext *ctx); #endif /* AVCODEC_TEXTUREDSP_H */ diff --git a/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c b/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c index bd193aa97c..9589cc4187 100644 --- a/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c @@ -20,10 +20,12 @@ * */ -int TEXTUREDSP_FUNC_NAME(AVCodecContext *avctx, void *arg, - int slice, int thread_nb) +#include "avcodec.h" + +static int exec_func(AVCodecContext *avctx, void *arg, + int slice, int thread_nb) { - TextureDSPThreadContext *ctx = arg; + const TextureDSPThreadContext *ctx = arg; uint8_t *d = ctx->tex_data.out; int w_block = avctx->coded_width / TEXTURE_BLOCK_W; int h_block = avctx->coded_height / TEXTURE_BLOCK_H; @@ -55,3 +57,8 @@ int TEXTUREDSP_FUNC_NAME(AVCodecContext *avctx, void *arg, return 0; } + +int TEXTUREDSP_FUNC_NAME(AVCodecContext *avctx, TextureDSPThreadContext *ctx) +{ + return avctx->execute2(avctx, exec_func, ctx, NULL, ctx->slice_count); +} diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c index 307bc3490e..d166b16a19 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c @@ -257,8 +257,8 @@ static TransformBlock* add_tb(TransformUnit *tu, VVCLocalContext *lc, tb->y0 = y0; tb->tb_width = tb_width; tb->tb_height = tb_height; - tb->log2_tb_width = log2(tb_width); - tb->log2_tb_height = log2(tb_height); + tb->log2_tb_width = av_log2(tb_width); + tb->log2_tb_height = av_log2(tb_height); tb->max_scan_x = tb->max_scan_y = 0; tb->min_scan_x = tb->min_scan_y = 0; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_intra_template.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_intra_template.c index 9fb47549d5..a078885266 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_intra_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_intra_template.c @@ -969,7 +969,7 @@ static void FUNC(pred_angular_h)(uint8_t *_src, const uint8_t *_top, const uint8 int pos = (1 + ref_idx) * intra_pred_angle; int wt; if (need_pdpc) - wt = (32 >> ((y * 2) >> nscale)); + wt = (32 >> FFMIN(31, (y * 2) >> nscale)); for (int x = 0; x < w; x++) { const int idx = (pos >> 5) + ref_idx; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c index ac96ed9f43..2cf156b323 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c @@ -800,12 +800,6 @@ void ff_vvc_ps_uninit(VVCParamSets *ps) ff_refstruct_unref(&ps->pps_list[i]); } -enum { - APS_ALF, - APS_LMCS, - APS_SCALING, -}; - static void alf_coeff(int16_t *coeff, const uint8_t *abs, const uint8_t *sign, const int size) { @@ -910,7 +904,7 @@ static void scaling_derive(VVCScalingList *sl, const H266RawAPS *aps) { for (int id = 0; id < SL_MAX_ID; id++) { const int matrix_size = derive_matrix_size(id); - const int log2_size = log2(matrix_size); + const int log2_size = av_log2(matrix_size); const int list_size = matrix_size * matrix_size; int coeff[SL_MAX_MATRIX_SIZE * SL_MAX_MATRIX_SIZE]; const uint8_t *pred; @@ -990,13 +984,13 @@ int ff_vvc_decode_aps(VVCParamSets *ps, const CodedBitstreamUnit *unit) return AVERROR_INVALIDDATA; switch (aps->aps_params_type) { - case APS_ALF: + case VVC_ASP_TYPE_ALF: ret = aps_decode_alf(&ps->alf_list[aps->aps_adaptation_parameter_set_id], aps); break; - case APS_LMCS: + case VVC_ASP_TYPE_LMCS: ff_refstruct_replace(&ps->lmcs_list[aps->aps_adaptation_parameter_set_id], aps); break; - case APS_SCALING: + case VVC_ASP_TYPE_SCALING: ret = aps_decode_scaling(&ps->scaling_list[aps->aps_adaptation_parameter_set_id], aps); break; } diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c index 540a05f8cf..83ee472ce6 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c @@ -451,8 +451,9 @@ static int slices_realloc(VVCFrameContext *fc) } static void ep_init_cabac_decoder(SliceContext *sc, const int index, - const H2645NAL *nal, GetBitContext *gb) + const H2645NAL *nal, GetBitContext *gb, const CodedBitstreamUnit *unit) { + const H266RawSlice *slice = unit->content_ref; const H266RawSliceHeader *rsh = sc->sh.r; EntryPoint *ep = sc->eps + index; int size; @@ -461,10 +462,10 @@ static void ep_init_cabac_decoder(SliceContext *sc, const int index, int skipped = 0; int64_t start = (gb->index >> 3); int64_t end = start + rsh->sh_entry_point_offset_minus1[index] + 1; - while (skipped < nal->skipped_bytes && nal->skipped_bytes_pos[skipped] <= start) { + while (skipped < nal->skipped_bytes && nal->skipped_bytes_pos[skipped] <= start + slice->header_size) { skipped++; } - while (skipped < nal->skipped_bytes && nal->skipped_bytes_pos[skipped] < end) { + while (skipped < nal->skipped_bytes && nal->skipped_bytes_pos[skipped] <= end + slice->header_size) { end--; skipped++; } @@ -506,7 +507,7 @@ static int slice_init_entry_points(SliceContext *sc, fc->tab.slice_idx[rs] = sc->slice_idx; } - ep_init_cabac_decoder(sc, i, nal, &gb); + ep_init_cabac_decoder(sc, i, nal, &gb, unit); if (i + 1 < sc->nb_eps) ctu_addr = sh->entry_point_start_ctu[i]; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c index c82ea7be30..56e71d5163 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c @@ -87,10 +87,10 @@ typedef struct IntraEdgeParams { uint8_t* left; int filter_flag; - uint16_t left_array[3 * MAX_TB_SIZE + 3]; - uint16_t filtered_left_array[3 * MAX_TB_SIZE + 3]; - uint16_t top_array[3 * MAX_TB_SIZE + 3]; - uint16_t filtered_top_array[3 * MAX_TB_SIZE + 3]; + uint16_t left_array[6 * MAX_TB_SIZE + 5]; + uint16_t filtered_left_array[6 * MAX_TB_SIZE + 5]; + uint16_t top_array[6 * MAX_TB_SIZE + 5]; + uint16_t filtered_top_array[6 * MAX_TB_SIZE + 5]; } IntraEdgeParams; #define PROF_BORDER_EXT 1 From 8d8be881240267ecd5bc827530c893b2c6314fcd Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 31 Jan 2024 06:34:36 +0300 Subject: [PATCH 10/87] =?UTF-8?q?=D0=9D=D0=B5=20=D0=B2=D1=8B=D0=B7=D1=8B?= =?UTF-8?q?=D0=B2=D0=B0=D0=B5=D0=BC=20SetForegroundWindow=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20"On=20Top=20=3D?= =?UTF-8?q?=20Always".=20=D0=AD=D1=82=D0=BE=20=D0=B8=D1=81=D0=BA=D0=BB?= =?UTF-8?q?=D1=8E=D1=87=D0=B8=D1=82=20=D0=BF=D0=BE=D1=81=D1=82=D0=BE=D1=8F?= =?UTF-8?q?=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D1=85=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=20=D1=84=D0=BE=D0=BA=D1=83=D1=81=D0=B0=20=D0=BE?= =?UTF-8?q?=D0=BA=D0=BD=D0=B0=20=D0=BF=D1=80=D0=B8=20=D1=81=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=B2=D0=BE=D1=81=D0=BF=D1=80=D0=BE=D0=B8=D0=B7?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=D0=B8=D0=BC=D0=BE=D0=B3=D0=BE=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0.=20=D0=A7=D1=82=D0=BE=20=D0=B4=D0=B5=D0=BB?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D1=81=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20"On=20Top=20=3D=20While=20Playing"=20?= =?UTF-8?q?=D0=B8=20"On=20Top=20=3D=20While=20Playing=20Video"=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BA=D0=B0=20=D0=BD=D0=B5=D0=BF=D0=BE=D0=BD=D1=8F=D1=82?= =?UTF-8?q?=D0=BD=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 8b11635909..f23fdea70a 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -16082,7 +16082,7 @@ void CMainFrame::SetAlwaysOnTop(int i) if (pInsertAfter) { SetWindowPos(pInsertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - if (pInsertAfter == &wndTopMost && !IsIconic()) { + if (i >= 2 && pInsertAfter == &wndTopMost && !IsIconic()) { SetForegroundWindow(); } } From e0776f5501e1fe6de18315face81376ba630414b Mon Sep 17 00:00:00 2001 From: v0lt Date: Thu, 1 Feb 2024 06:37:32 +0300 Subject: [PATCH 11/87] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D1=83=D0=B5=D0=BC=20ShowWindow(SW=5FSHOWNA)=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D0=B4=20SetWindowPos(wndTopMost)=20=D0=B4?= =?UTF-8?q?=D0=BB=D1=8F=20=D0=BF=D0=BE=D0=BA=D0=B0=D0=B7=D0=B0=20=D0=BE?= =?UTF-8?q?=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BE=D0=BA?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B1=D0=B5=D0=B7=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D1=85=D0=B2=D0=B0=D1=82=D0=B0=20=D1=84=D0=BE=D0=BA=D1=83=D1=81?= =?UTF-8?q?=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index f23fdea70a..c4d1140d8a 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -16081,11 +16081,11 @@ void CMainFrame::SetAlwaysOnTop(int i) } if (pInsertAfter) { - SetWindowPos(pInsertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); if (i >= 2 && pInsertAfter == &wndTopMost && !IsIconic()) { - SetForegroundWindow(); + ShowWindow(SW_SHOWNA); } - } + SetWindowPos(pInsertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); + } } else if (bD3DOnMain) { SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } From 573981da38d81d9def5f0213178688c9a41b9e18 Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 2 Feb 2024 06:41:30 +0300 Subject: [PATCH 12/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-967-gb181868ab?= =?UTF-8?q?a.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- src/ExtLib/ffmpeg/ffmpeg.mak | 16 +- src/ExtLib/ffmpeg/libavcodec/aac_defines.h | 2 - src/ExtLib/ffmpeg/libavcodec/av1_parse.h | 16 +- src/ExtLib/ffmpeg/libavcodec/bitstream.h | 2 - .../ffmpeg/libavcodec/bitstream_template.h | 23 - .../ffmpeg/libavcodec/bsf/extract_extradata.c | 2 +- src/ExtLib/ffmpeg/libavcodec/get_bits.h | 24 - .../libavcodec/h26x/h2656_inter_template.c | 577 +++++++++ .../ffmpeg/libavcodec/hevcdsp_template.c | 594 +-------- src/ExtLib/ffmpeg/libavcodec/leb.h | 70 + .../libavcodec/vvc/vvc_inter_template.c | 559 +------- src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c | 4 + src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h | 2 + .../libavcodec/x86/h26x/h2656_inter.asm | 1143 +++++++++++++++++ .../ffmpeg/libavcodec/x86/h26x/h2656dsp.c | 101 ++ .../ffmpeg/libavcodec/x86/h26x/h2656dsp.h | 103 ++ src/ExtLib/ffmpeg/libavcodec/x86/hevc_mc.asm | 462 +------ .../ffmpeg/libavcodec/x86/hevcdsp_init.c | 108 +- .../ffmpeg/libavcodec/x86/vvc/vvc_mc.asm | 302 +++++ .../ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c | 254 ++++ src/ExtLib/ffmpeg/libavfilter/buffersrc.c | 40 +- 23 files changed, 2772 insertions(+), 1636 deletions(-) create mode 100644 src/ExtLib/ffmpeg/libavcodec/h26x/h2656_inter_template.c create mode 100644 src/ExtLib/ffmpeg/libavcodec/leb.h create mode 100644 src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656_inter.asm create mode 100644 src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.c create mode 100644 src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h create mode 100644 src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvc_mc.asm create mode 100644 src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index d7044e85d3..b180c24a36 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -26,7 +26,7 @@ MPCVideoDec Обновлен корейский перевод (автор Hackjjang). Обновлены библиотеки: - ffmpeg git-n6.2-dev-940-g36a986d9a1; + ffmpeg git-n6.2-dev-967-gb181868aba; nanosvg git-93ce879. diff --git a/docs/Changelog.txt b/docs/Changelog.txt index f7fc02aa25..af4f545999 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -26,7 +26,7 @@ Updated Italian translation (by mapi68). Updated Korean translation (by Hackjjang). Updated libraries: - ffmpeg git-n6.2-dev-940-g36a986d9a1; + ffmpeg git-n6.2-dev-967-gb181868aba; nanosvg git-93ce879. diff --git a/src/ExtLib/ffmpeg/ffmpeg.mak b/src/ExtLib/ffmpeg/ffmpeg.mak index 37adb48d79..8b90f43f6a 100644 --- a/src/ExtLib/ffmpeg/ffmpeg.mak +++ b/src/ExtLib/ffmpeg/ffmpeg.mak @@ -67,6 +67,8 @@ OBJ_DIRS = $(OBJ_DIR) \ $(OBJ_DIR)libavcodec/bsf \ $(OBJ_DIR)libavcodec/vvc \ $(OBJ_DIR)libavcodec/x86 \ + $(OBJ_DIR)libavcodec/x86/h26x \ + $(OBJ_DIR)libavcodec/x86/vvc \ $(OBJ_DIR)libavfilter \ $(OBJ_DIR)libavfilter/x86 \ $(OBJ_DIR)libavutil \ @@ -642,7 +644,11 @@ SRCS_LC_B = \ libavcodec/x86/vp9dsp_init_10bpp.c \ libavcodec/x86/vp9dsp_init_12bpp.c \ libavcodec/x86/vp9dsp_init_16bpp.c \ - libavcodec/x86/xvididct_init.c + libavcodec/x86/xvididct_init.c \ + \ + libavcodec/x86/h26x/h2656dsp.c \ + \ + libavcodec/x86/vvc/vvcdsp_init.c SRCS_LC_BSF = \ libavcodec/bsf/aac_adtstoasc.c \ @@ -666,7 +672,7 @@ SRCS_LC_BSF = \ libavcodec/bsf/vp9_raw_reorder.c \ libavcodec/bsf/vp9_superframe.c \ libavcodec/bsf/vp9_superframe_split.c \ - libavcodec/bsf/vvc_mp4toannexb.c \ + libavcodec/bsf/vvc_mp4toannexb.c SRCS_LF = \ libavfilter/af_aresample.c \ @@ -877,7 +883,11 @@ SRCS_YASM_LC = \ libavcodec/x86/vp9lpf_16bpp.asm \ libavcodec/x86/vp9mc.asm \ libavcodec/x86/vp9mc_16bpp.asm \ - libavcodec/x86/xvididct.asm + libavcodec/x86/xvididct.asm \ + \ + libavcodec/x86/h26x/h2656_inter.asm \ + \ + libavcodec/x86/vvc/vvc_mc.asm SRCS_YASM_LF = diff --git a/src/ExtLib/ffmpeg/libavcodec/aac_defines.h b/src/ExtLib/ffmpeg/libavcodec/aac_defines.h index fbc71377e4..32e67780eb 100644 --- a/src/ExtLib/ffmpeg/libavcodec/aac_defines.h +++ b/src/ExtLib/ffmpeg/libavcodec/aac_defines.h @@ -30,7 +30,6 @@ #include "libavutil/softfloat.h" #define AAC_RENAME(x) x ## _fixed -#define AAC_RENAME_32(x) x ## _fixed_32 #define AAC_RENAME2(x) x ## _fixed typedef int INTFLOAT; typedef unsigned UINTFLOAT; ///< Equivalent to INTFLOAT, Used as temporal cast to avoid undefined sign overflow operations. @@ -77,7 +76,6 @@ typedef int AAC_SIGNE; #else #define AAC_RENAME(x) x -#define AAC_RENAME_32(x) x #define AAC_RENAME2(x) ff_ ## x typedef float INTFLOAT; typedef float UINTFLOAT; diff --git a/src/ExtLib/ffmpeg/libavcodec/av1_parse.h b/src/ExtLib/ffmpeg/libavcodec/av1_parse.h index d0abd7ac7c..2b8cce4835 100644 --- a/src/ExtLib/ffmpeg/libavcodec/av1_parse.h +++ b/src/ExtLib/ffmpeg/libavcodec/av1_parse.h @@ -30,6 +30,7 @@ #include "av1.h" #include "get_bits.h" +#include "leb.h" // OBU header fields + max leb128 length #define MAX_OBU_HEADER_SIZE (2 + 8) @@ -88,19 +89,6 @@ int ff_av1_packet_split(AV1Packet *pkt, const uint8_t *buf, int length, */ void ff_av1_packet_uninit(AV1Packet *pkt); -static inline int64_t leb128(GetBitContext *gb) { - int64_t ret = 0; - int i; - - for (i = 0; i < 8; i++) { - int byte = get_bits(gb, 8); - ret |= (int64_t)(byte & 0x7f) << (i * 7); - if (!(byte & 0x80)) - break; - } - return ret; -} - static inline int parse_obu_header(const uint8_t *buf, int buf_size, int64_t *obu_size, int *start_pos, int *type, int *temporal_id, int *spatial_id) @@ -129,7 +117,7 @@ static inline int parse_obu_header(const uint8_t *buf, int buf_size, *temporal_id = *spatial_id = 0; } - *obu_size = has_size_flag ? leb128(&gb) + *obu_size = has_size_flag ? get_leb128(&gb) : buf_size - 1 - extension_flag; if (get_bits_left(&gb) < 0) diff --git a/src/ExtLib/ffmpeg/libavcodec/bitstream.h b/src/ExtLib/ffmpeg/libavcodec/bitstream.h index 17f8a5da83..35b7873b9c 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bitstream.h +++ b/src/ExtLib/ffmpeg/libavcodec/bitstream.h @@ -103,7 +103,6 @@ # define bits_apply_sign bits_apply_sign_le # define bits_read_vlc bits_read_vlc_le # define bits_read_vlc_multi bits_read_vlc_multi_le -# define bits_read_leb bits_read_leb_le #elif defined(BITS_DEFAULT_BE) @@ -133,7 +132,6 @@ # define bits_apply_sign bits_apply_sign_be # define bits_read_vlc bits_read_vlc_be # define bits_read_vlc_multi bits_read_vlc_multi_be -# define bits_read_leb bits_read_leb_be #endif diff --git a/src/ExtLib/ffmpeg/libavcodec/bitstream_template.h b/src/ExtLib/ffmpeg/libavcodec/bitstream_template.h index 4c7101632f..4f3d07275f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bitstream_template.h +++ b/src/ExtLib/ffmpeg/libavcodec/bitstream_template.h @@ -562,29 +562,6 @@ static inline int BS_FUNC(read_vlc_multi)(BSCTX *bc, uint8_t dst[8], return ret; } -/** - * Read a unsigned integer coded as a variable number of up to eight - * little-endian bytes, where the MSB in a byte signals another byte - * must be read. - * Values > UINT_MAX are truncated, but all coded bits are read. - */ -static inline unsigned BS_FUNC(read_leb)(BSCTX *bc) { - int more, i = 0; - unsigned leb = 0; - - do { - int byte = BS_FUNC(read)(bc, 8); - unsigned bits = byte & 0x7f; - more = byte & 0x80; - if (i <= 4) - leb |= bits << (i * 7); - if (++i == 8) - break; - } while (more); - - return leb; -} - #undef BSCTX #undef BS_FUNC #undef BS_JOIN3 diff --git a/src/ExtLib/ffmpeg/libavcodec/bsf/extract_extradata.c b/src/ExtLib/ffmpeg/libavcodec/bsf/extract_extradata.c index 43e2c58357..e2e0d13dd6 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bsf/extract_extradata.c +++ b/src/ExtLib/ffmpeg/libavcodec/bsf/extract_extradata.c @@ -68,7 +68,7 @@ static int metadata_is_global(const AV1OBU *obu) if (init_get_bits(&gb, obu->data, obu->size_bits) < 0) return 0; - metadata_type = leb128(&gb); + metadata_type = get_leb(&gb); return val_in_array(metadata_obu_types, FF_ARRAY_ELEMS(metadata_obu_types), metadata_type); diff --git a/src/ExtLib/ffmpeg/libavcodec/get_bits.h b/src/ExtLib/ffmpeg/libavcodec/get_bits.h index 9e19d2a439..cfcf97c021 100644 --- a/src/ExtLib/ffmpeg/libavcodec/get_bits.h +++ b/src/ExtLib/ffmpeg/libavcodec/get_bits.h @@ -94,7 +94,6 @@ typedef BitstreamContext GetBitContext; #define align_get_bits bits_align #define get_vlc2 bits_read_vlc #define get_vlc_multi bits_read_vlc_multi -#define get_leb bits_read_leb #define init_get_bits8_le(s, buffer, byte_size) bits_init8_le((BitstreamContextLE*)s, buffer, byte_size) #define get_bits_le(s, n) bits_read_le((BitstreamContextLE*)s, n) @@ -711,29 +710,6 @@ static inline int skip_1stop_8data_bits(GetBitContext *gb) return 0; } -/** - * Read a unsigned integer coded as a variable number of up to eight - * little-endian bytes, where the MSB in a byte signals another byte - * must be read. - * All coded bits are read, but values > UINT_MAX are truncated. - */ -static inline unsigned get_leb(GetBitContext *s) { - int more, i = 0; - unsigned leb = 0; - - do { - int byte = get_bits(s, 8); - unsigned bits = byte & 0x7f; - more = byte & 0x80; - if (i <= 4) - leb |= bits << (i * 7); - if (++i == 8) - break; - } while (more); - - return leb; -} - #endif // CACHED_BITSTREAM_READER #endif /* AVCODEC_GET_BITS_H */ diff --git a/src/ExtLib/ffmpeg/libavcodec/h26x/h2656_inter_template.c b/src/ExtLib/ffmpeg/libavcodec/h26x/h2656_inter_template.c new file mode 100644 index 0000000000..864f6c7e7d --- /dev/null +++ b/src/ExtLib/ffmpeg/libavcodec/h26x/h2656_inter_template.c @@ -0,0 +1,577 @@ +/* + * inter prediction template for HEVC/VVC + * + * Copyright (C) 2022 Nuo Mi + * Copyright (C) 2024 Wu Jianhua + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#define CHROMA_EXTRA_BEFORE 1 +#define CHROMA_EXTRA 3 +#define LUMA_EXTRA_BEFORE 3 +#define LUMA_EXTRA 7 + +static void FUNC(put_pixels)(int16_t *dst, + const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel *)_src; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = src[x] << (14 - BIT_DEPTH); + src += src_stride; + dst += MAX_PB_SIZE; + } +} + +static void FUNC(put_uni_pixels)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, const int height, + const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + + for (int y = 0; y < height; y++) { + memcpy(dst, src, width * sizeof(pixel)); + src += src_stride; + dst += dst_stride; + } +} + +static void FUNC(put_uni_w_pixels)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, const int height, + const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, + const int width) +{ + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int shift = denom + 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + const int ox = _ox * (1 << (BIT_DEPTH - 8)); + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + const int v = (src[x] << (14 - BIT_DEPTH)); + dst[x] = av_clip_pixel(((v * wx + offset) >> shift) + ox); + } + src += src_stride; + dst += dst_stride; + } +} + +#define LUMA_FILTER(src, stride) \ + (filter[0] * src[x - 3 * stride] + \ + filter[1] * src[x - 2 * stride] + \ + filter[2] * src[x - stride] + \ + filter[3] * src[x ] + \ + filter[4] * src[x + stride] + \ + filter[5] * src[x + 2 * stride] + \ + filter[6] * src[x + 3 * stride] + \ + filter[7] * src[x + 4 * stride]) + +static void FUNC(put_luma_h)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel*)_src; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const int8_t *filter = hf; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + dst += MAX_PB_SIZE; + } +} + +static void FUNC(put_luma_v)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (pixel*)_src; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const int8_t *filter = vf; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8); + src += src_stride; + dst += MAX_PB_SIZE; + } +} + +static void FUNC(put_luma_hv)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE]; + int16_t *tmp = tmp_array; + const pixel *src = (const pixel*)_src; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const int8_t *filter = hf; + + src -= LUMA_EXTRA_BEFORE * src_stride; + for (int y = 0; y < height + LUMA_EXTRA; y++) { + for (int x = 0; x < width; x++) + tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + tmp += MAX_PB_SIZE; + } + + tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE; + filter = vf; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6; + tmp += MAX_PB_SIZE; + dst += MAX_PB_SIZE; + } +} + +static void FUNC(put_uni_luma_h)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel*)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = hf; + const int shift = 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + const int val = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + dst[x] = av_clip_pixel((val + offset) >> shift); + } + src += src_stride; + dst += dst_stride; + } +} + +static void FUNC(put_uni_luma_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + + const pixel *src = (const pixel*)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = vf; + const int shift = 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + const int val = LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8); + dst[x] = av_clip_pixel((val + offset) >> shift); + } + src += src_stride; + dst += dst_stride; + } +} + +static void FUNC(put_uni_luma_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE]; + int16_t *tmp = tmp_array; + const pixel *src = (const pixel*)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const int8_t *filter = hf; + const int shift = 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + src -= LUMA_EXTRA_BEFORE * src_stride; + for (int y = 0; y < height + LUMA_EXTRA; y++) { + for (int x = 0; x < width; x++) + tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + tmp += MAX_PB_SIZE; + } + + tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE; + filter = vf; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + const int val = LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6; + dst[x] = av_clip_pixel((val + offset) >> shift); + } + tmp += MAX_PB_SIZE; + dst += dst_stride; + } + +} + +static void FUNC(put_uni_luma_w_h)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, int height, + const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, + const int width) +{ + const pixel *src = (const pixel*)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = hf; + const int ox = _ox * (1 << (BIT_DEPTH - 8)); + const int shift = denom + 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = av_clip_pixel((((LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); + src += src_stride; + dst += dst_stride; + } +} + +static void FUNC(put_uni_luma_w_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, const int height, + const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, + const int width) +{ + const pixel *src = (const pixel*)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = vf; + const int ox = _ox * (1 << (BIT_DEPTH - 8)); + const int shift = denom + 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = av_clip_pixel((((LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); + src += src_stride; + dst += dst_stride; + } +} + +static void FUNC(put_uni_luma_w_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int denom, + const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width) +{ + int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE]; + int16_t *tmp = tmp_array; + const pixel *src = (const pixel*)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = hf; + const int ox = _ox * (1 << (BIT_DEPTH - 8)); + const int shift = denom + 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + src -= LUMA_EXTRA_BEFORE * src_stride; + for (int y = 0; y < height + LUMA_EXTRA; y++) { + for (int x = 0; x < width; x++) + tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + tmp += MAX_PB_SIZE; + } + + tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE; + filter = vf; + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = av_clip_pixel((((LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox); + tmp += MAX_PB_SIZE; + dst += dst_stride; + } +} + +#define CHROMA_FILTER(src, stride) \ + (filter[0] * src[x - stride] + \ + filter[1] * src[x] + \ + filter[2] * src[x + stride] + \ + filter[3] * src[x + 2 * stride]) + +static void FUNC(put_chroma_h)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel *)_src; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const int8_t *filter = hf; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + dst += MAX_PB_SIZE; + } +} + +static void FUNC(put_chroma_v)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel *)_src; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const int8_t *filter = vf; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8); + src += src_stride; + dst += MAX_PB_SIZE; + } +} + +static void FUNC(put_chroma_hv)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE]; + int16_t *tmp = tmp_array; + const pixel *src = (const pixel *)_src; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const int8_t *filter = hf; + + src -= CHROMA_EXTRA_BEFORE * src_stride; + + for (int y = 0; y < height + CHROMA_EXTRA; y++) { + for (int x = 0; x < width; x++) + tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + tmp += MAX_PB_SIZE; + } + + tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE; + filter = vf; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6; + tmp += MAX_PB_SIZE; + dst += MAX_PB_SIZE; + } +} + +static void FUNC(put_uni_chroma_h)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = hf; + const int shift = 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = av_clip_pixel(((CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) + offset) >> shift); + src += src_stride; + dst += dst_stride; + } +} + +static void FUNC(put_uni_chroma_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = vf; + const int shift = 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = av_clip_pixel(((CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) + offset) >> shift); + src += src_stride; + dst += dst_stride; + } +} + +static void FUNC(put_uni_chroma_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, + const int height, const int8_t *hf, const int8_t *vf, const int width) +{ + int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE]; + int16_t *tmp = tmp_array; + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = hf; + const int shift = 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + src -= CHROMA_EXTRA_BEFORE * src_stride; + + for (int y = 0; y < height + CHROMA_EXTRA; y++) { + for (int x = 0; x < width; x++) + tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + tmp += MAX_PB_SIZE; + } + + tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE; + filter = vf; + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = av_clip_pixel(((CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6) + offset) >> shift); + tmp += MAX_PB_SIZE; + dst += dst_stride; + } +} + +static void FUNC(put_uni_chroma_w_h)(uint8_t *_dst, ptrdiff_t _dst_stride, + const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox, + const int8_t *hf, const int8_t *vf, int width) +{ + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = hf; + const int shift = denom + 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + ox = ox * (1 << (BIT_DEPTH - 8)); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + dst[x] = av_clip_pixel((((CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); + } + dst += dst_stride; + src += src_stride; + } +} + +static void FUNC(put_uni_chroma_w_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, + const uint8_t *_src, const ptrdiff_t _src_stride, const int height, + const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, + const int width) +{ + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = vf; + const int shift = denom + 14 - BIT_DEPTH; + const int ox = _ox * (1 << (BIT_DEPTH - 8)); +#if BIT_DEPTH < 14 + int offset = 1 << (shift - 1); +#else + int offset = 0; +#endif + + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) { + dst[x] = av_clip_pixel((((CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); + } + dst += dst_stride; + src += src_stride; + } +} + +static void FUNC(put_uni_chroma_w_hv)(uint8_t *_dst, ptrdiff_t _dst_stride, + const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox, + const int8_t *hf, const int8_t *vf, int width) +{ + int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE]; + int16_t *tmp = tmp_array; + const pixel *src = (const pixel *)_src; + pixel *dst = (pixel *)_dst; + const ptrdiff_t src_stride = _src_stride / sizeof(pixel); + const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); + const int8_t *filter = hf; + const int shift = denom + 14 - BIT_DEPTH; +#if BIT_DEPTH < 14 + const int offset = 1 << (shift - 1); +#else + const int offset = 0; +#endif + + src -= CHROMA_EXTRA_BEFORE * src_stride; + + for (int y = 0; y < height + CHROMA_EXTRA; y++) { + for (int x = 0; x < width; x++) + tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); + src += src_stride; + tmp += MAX_PB_SIZE; + } + + tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE; + filter = vf; + + ox = ox * (1 << (BIT_DEPTH - 8)); + for (int y = 0; y < height; y++) { + for (int x = 0; x < width; x++) + dst[x] = av_clip_pixel((((CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox); + tmp += MAX_PB_SIZE; + dst += dst_stride; + } +} diff --git a/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c b/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c index 0de14e9dcf..9b48bdf08e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c @@ -26,6 +26,7 @@ #include "bit_depth_template.c" #include "hevcdsp.h" #include "h26x/h2656_sao_template.c" +#include "h26x/h2656_inter_template.c" static void FUNC(put_pcm)(uint8_t *_dst, ptrdiff_t stride, int width, int height, GetBitContext *gb, int pcm_bit_depth) @@ -299,37 +300,51 @@ IDCT_DC(32) //////////////////////////////////////////////////////////////////////////////// // //////////////////////////////////////////////////////////////////////////////// -static void FUNC(put_hevc_pel_pixels)(int16_t *dst, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = src[x] << (14 - BIT_DEPTH); - src += srcstride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_hevc_pel_uni_pixels)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - - for (y = 0; y < height; y++) { - memcpy(dst, src, width * sizeof(pixel)); - src += srcstride; - dst += dststride; - } -} +#define ff_hevc_pel_filters ff_hevc_qpel_filters +#define DECL_HV_FILTER(f) \ + const uint8_t *hf = ff_hevc_ ## f ## _filters[mx - 1]; \ + const uint8_t *vf = ff_hevc_ ## f ## _filters[my - 1]; + +#define FW_PUT(p, f, t) \ +static void FUNC(put_hevc_## f)(int16_t *dst, const uint8_t *src, ptrdiff_t srcstride, int height, \ + intptr_t mx, intptr_t my, int width) \ +{ \ + DECL_HV_FILTER(p) \ + FUNC(put_ ## t)(dst, src, srcstride, height, hf, vf, width); \ +} + +#define FW_PUT_UNI(p, f, t) \ +static void FUNC(put_hevc_ ## f)(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ + ptrdiff_t srcstride, int height, intptr_t mx, intptr_t my, int width) \ +{ \ + DECL_HV_FILTER(p) \ + FUNC(put_ ## t)(dst, dststride, src, srcstride, height, hf, vf, width); \ +} + +#define FW_PUT_UNI_W(p, f, t) \ +static void FUNC(put_hevc_ ## f)(uint8_t *dst, ptrdiff_t dststride, const uint8_t *src, \ + ptrdiff_t srcstride,int height, int denom, int wx, int ox, \ + intptr_t mx, intptr_t my, int width) \ +{ \ + DECL_HV_FILTER(p) \ + FUNC(put_ ## t)(dst, dststride, src, srcstride, height, denom, wx, ox, hf, vf, width); \ +} + +#define FW_PUT_FUNCS(f, t, dir) \ + FW_PUT(f, f ## _ ## dir, t ## _ ## dir) \ + FW_PUT_UNI(f, f ## _uni_ ## dir, uni_ ## t ## _ ## dir) \ + FW_PUT_UNI_W(f, f ## _uni_w_ ## dir, uni_## t ## _w_ ## dir) + +FW_PUT(pel, pel_pixels, pixels) +FW_PUT_UNI(pel, pel_uni_pixels, uni_pixels) +FW_PUT_UNI_W(pel, pel_uni_w_pixels, uni_w_pixels) + +FW_PUT_FUNCS(qpel, luma, h ) +FW_PUT_FUNCS(qpel, luma, v ) +FW_PUT_FUNCS(qpel, luma, hv ) +FW_PUT_FUNCS(epel, chroma, h ) +FW_PUT_FUNCS(epel, chroma, v ) +FW_PUT_FUNCS(epel, chroma, hv ) static void FUNC(put_hevc_pel_bi_pixels)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, @@ -357,30 +372,6 @@ static void FUNC(put_hevc_pel_bi_pixels)(uint8_t *_dst, ptrdiff_t _dststride, co } } -static void FUNC(put_hevc_pel_uni_w_pixels)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel((((src[x] << (14 - BIT_DEPTH)) * wx + offset) >> shift) + ox); - src += srcstride; - dst += dststride; - } -} - static void FUNC(put_hevc_pel_bi_w_pixels)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, int denom, int wx0, int wx1, @@ -420,96 +411,6 @@ static void FUNC(put_hevc_pel_bi_w_pixels)(uint8_t *_dst, ptrdiff_t _dststride, filter[6] * src[x + 3 * stride] + \ filter[7] * src[x + 4 * stride]) -static void FUNC(put_hevc_qpel_h)(int16_t *dst, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_hevc_qpel_v)(int16_t *dst, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[my - 1]; - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = QPEL_FILTER(src, srcstride) >> (BIT_DEPTH - 8); - src += srcstride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_hevc_qpel_hv)(int16_t *dst, - const uint8_t *_src, - ptrdiff_t _srcstride, - int height, intptr_t mx, - intptr_t my, int width) -{ - int x, y; - const int8_t *filter; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - - src -= QPEL_EXTRA_BEFORE * srcstride; - filter = ff_hevc_qpel_filters[mx - 1]; - for (y = 0; y < height + QPEL_EXTRA; y++) { - for (x = 0; x < width; x++) - tmp[x] = QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + QPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_qpel_filters[my - 1]; - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = QPEL_FILTER(tmp, MAX_PB_SIZE) >> 6; - tmp += MAX_PB_SIZE; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_hevc_qpel_uni_h)(uint8_t *_dst, ptrdiff_t _dststride, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; - int shift = 14 - BIT_DEPTH; - -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel(((QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8)) + offset) >> shift); - src += srcstride; - dst += dststride; - } -} - static void FUNC(put_hevc_qpel_bi_h)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width) @@ -538,33 +439,6 @@ static void FUNC(put_hevc_qpel_bi_h)(uint8_t *_dst, ptrdiff_t _dststride, const } } -static void FUNC(put_hevc_qpel_uni_v)(uint8_t *_dst, ptrdiff_t _dststride, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[my - 1]; - int shift = 14 - BIT_DEPTH; - -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel(((QPEL_FILTER(src, srcstride) >> (BIT_DEPTH - 8)) + offset) >> shift); - src += srcstride; - dst += dststride; - } -} - - static void FUNC(put_hevc_qpel_bi_v)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width) @@ -593,46 +467,6 @@ static void FUNC(put_hevc_qpel_bi_v)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_qpel_uni_hv)(uint8_t *_dst, ptrdiff_t _dststride, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const int8_t *filter; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - int shift = 14 - BIT_DEPTH; - -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - src -= QPEL_EXTRA_BEFORE * srcstride; - filter = ff_hevc_qpel_filters[mx - 1]; - for (y = 0; y < height + QPEL_EXTRA; y++) { - for (x = 0; x < width; x++) - tmp[x] = QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + QPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_qpel_filters[my - 1]; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel(((QPEL_FILTER(tmp, MAX_PB_SIZE) >> 6) + offset) >> shift); - tmp += MAX_PB_SIZE; - dst += dststride; - } -} - static void FUNC(put_hevc_qpel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width) @@ -673,33 +507,6 @@ static void FUNC(put_hevc_qpel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_qpel_uni_w_h)(uint8_t *_dst, ptrdiff_t _dststride, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, int denom, int wx, int ox, - intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; - int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel((((QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - src += srcstride; - dst += dststride; - } -} - static void FUNC(put_hevc_qpel_bi_w_h)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, int denom, int wx0, int wx1, @@ -728,33 +535,6 @@ static void FUNC(put_hevc_qpel_bi_w_h)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_qpel_uni_w_v)(uint8_t *_dst, ptrdiff_t _dststride, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, int denom, int wx, int ox, - intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[my - 1]; - int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel((((QPEL_FILTER(src, srcstride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - src += srcstride; - dst += dststride; - } -} - static void FUNC(put_hevc_qpel_bi_w_v)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, int denom, int wx0, int wx1, @@ -783,47 +563,6 @@ static void FUNC(put_hevc_qpel_bi_w_v)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_qpel_uni_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, int denom, int wx, int ox, - intptr_t mx, intptr_t my, int width) -{ - int x, y; - const int8_t *filter; - const pixel *src = (const pixel*)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - int16_t tmp_array[(MAX_PB_SIZE + QPEL_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - src -= QPEL_EXTRA_BEFORE * srcstride; - filter = ff_hevc_qpel_filters[mx - 1]; - for (y = 0; y < height + QPEL_EXTRA; y++) { - for (x = 0; x < width; x++) - tmp[x] = QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + QPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_qpel_filters[my - 1]; - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel((((QPEL_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox); - tmp += MAX_PB_SIZE; - dst += dststride; - } -} - static void FUNC(put_hevc_qpel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, int denom, int wx0, int wx1, @@ -873,94 +612,6 @@ static void FUNC(put_hevc_qpel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, filter[2] * src[x + stride] + \ filter[3] * src[x + 2 * stride]) -static void FUNC(put_hevc_epel_h)(int16_t *dst, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = EPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_hevc_epel_v)(int16_t *dst, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[my - 1]; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = EPEL_FILTER(src, srcstride) >> (BIT_DEPTH - 8); - src += srcstride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_hevc_epel_hv)(int16_t *dst, - const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; - int16_t tmp_array[(MAX_PB_SIZE + EPEL_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - - src -= EPEL_EXTRA_BEFORE * srcstride; - - for (y = 0; y < height + EPEL_EXTRA; y++) { - for (x = 0; x < width; x++) - tmp[x] = EPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + EPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_epel_filters[my - 1]; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = EPEL_FILTER(tmp, MAX_PB_SIZE) >> 6; - tmp += MAX_PB_SIZE; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_hevc_epel_uni_h)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; - int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel(((EPEL_FILTER(src, 1) >> (BIT_DEPTH - 8)) + offset) >> shift); - src += srcstride; - dst += dststride; - } -} - static void FUNC(put_hevc_epel_bi_h)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width) @@ -988,30 +639,6 @@ static void FUNC(put_hevc_epel_bi_h)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_epel_uni_v)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[my - 1]; - int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel(((EPEL_FILTER(src, srcstride) >> (BIT_DEPTH - 8)) + offset) >> shift); - src += srcstride; - dst += dststride; - } -} - static void FUNC(put_hevc_epel_bi_v)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width) @@ -1038,44 +665,6 @@ static void FUNC(put_hevc_epel_bi_v)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_epel_uni_hv)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; - int16_t tmp_array[(MAX_PB_SIZE + EPEL_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - src -= EPEL_EXTRA_BEFORE * srcstride; - - for (y = 0; y < height + EPEL_EXTRA; y++) { - for (x = 0; x < width; x++) - tmp[x] = EPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + EPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_epel_filters[my - 1]; - - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel(((EPEL_FILTER(tmp, MAX_PB_SIZE) >> 6) + offset) >> shift); - tmp += MAX_PB_SIZE; - dst += dststride; - } -} - static void FUNC(put_hevc_epel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, intptr_t mx, intptr_t my, int width) @@ -1116,32 +705,6 @@ static void FUNC(put_hevc_epel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_epel_uni_w_h)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; - int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - dst[x] = av_clip_pixel((((EPEL_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - } - dst += dststride; - src += srcstride; - } -} - static void FUNC(put_hevc_epel_bi_w_h)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, int denom, int wx0, int wx1, @@ -1168,32 +731,6 @@ static void FUNC(put_hevc_epel_bi_w_h)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_epel_uni_w_v)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[my - 1]; - int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) { - dst[x] = av_clip_pixel((((EPEL_FILTER(src, srcstride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - } - dst += dststride; - src += srcstride; - } -} - static void FUNC(put_hevc_epel_bi_w_v)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, int denom, int wx0, int wx1, @@ -1220,45 +757,6 @@ static void FUNC(put_hevc_epel_bi_w_v)(uint8_t *_dst, ptrdiff_t _dststride, } } -static void FUNC(put_hevc_epel_uni_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, - int height, int denom, int wx, int ox, intptr_t mx, intptr_t my, int width) -{ - int x, y; - const pixel *src = (const pixel *)_src; - ptrdiff_t srcstride = _srcstride / sizeof(pixel); - pixel *dst = (pixel *)_dst; - ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; - int16_t tmp_array[(MAX_PB_SIZE + EPEL_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - src -= EPEL_EXTRA_BEFORE * srcstride; - - for (y = 0; y < height + EPEL_EXTRA; y++) { - for (x = 0; x < width; x++) - tmp[x] = EPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += srcstride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + EPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_epel_filters[my - 1]; - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (y = 0; y < height; y++) { - for (x = 0; x < width; x++) - dst[x] = av_clip_pixel((((EPEL_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox); - tmp += MAX_PB_SIZE; - dst += dststride; - } -} - static void FUNC(put_hevc_epel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, const int16_t *src2, int height, int denom, int wx0, int wx1, diff --git a/src/ExtLib/ffmpeg/libavcodec/leb.h b/src/ExtLib/ffmpeg/libavcodec/leb.h new file mode 100644 index 0000000000..5159c434b1 --- /dev/null +++ b/src/ExtLib/ffmpeg/libavcodec/leb.h @@ -0,0 +1,70 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/** + * @file + * leb128 handling implementations + */ + +#ifndef AVCODEC_LEB_H +#define AVCODEC_LEB_H + +#include "get_bits.h" + +/** + * Read a unsigned integer coded as a variable number of up to eight + * little-endian bytes, where the MSB in a byte signals another byte + * must be read. + * All coded bits are read, but values > UINT_MAX are truncated. + */ +static inline unsigned get_leb(GetBitContext *s) { + int more, i = 0; + unsigned leb = 0; + + do { + int byte = get_bits(s, 8); + unsigned bits = byte & 0x7f; + more = byte & 0x80; + if (i <= 4) + leb |= bits << (i * 7); + if (++i == 8) + break; + } while (more); + + return leb; +} + +/** + * Read a unsigned integer coded as a variable number of up to eight + * little-endian bytes, where the MSB in a byte signals another byte + * must be read. + */ +static inline int64_t get_leb128(GetBitContext *gb) { + int64_t ret = 0; + + for (int i = 0; i < 8; i++) { + int byte = get_bits(gb, 8); + ret |= (int64_t)(byte & 0x7f) << (i * 7); + if (!(byte & 0x80)) + break; + } + + return ret; +} + +#endif /* AVCODEC_LEB_H */ diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c index 7160907778..e5cff079fb 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter_template.c @@ -20,564 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -static void FUNC(put_pixels)(int16_t *dst, - const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel *)_src; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = src[x] << (14 - BIT_DEPTH); - src += src_stride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_uni_pixels)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, const int height, - const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - - for (int y = 0; y < height; y++) { - memcpy(dst, src, width * sizeof(pixel)); - src += src_stride; - dst += dst_stride; - } -} - -static void FUNC(put_uni_w_pixels)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, const int height, - const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, - const int width) -{ - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - const int ox = _ox * (1 << (BIT_DEPTH - 8)); - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - const int v = (src[x] << (14 - BIT_DEPTH)); - dst[x] = av_clip_pixel(((v * wx + offset) >> shift) + ox); - } - src += src_stride; - dst += dst_stride; - } -} - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -#define LUMA_FILTER(src, stride) \ - (filter[0] * src[x - 3 * stride] + \ - filter[1] * src[x - 2 * stride] + \ - filter[2] * src[x - stride] + \ - filter[3] * src[x ] + \ - filter[4] * src[x + stride] + \ - filter[5] * src[x + 2 * stride] + \ - filter[6] * src[x + 3 * stride] + \ - filter[7] * src[x + 4 * stride]) - -static void FUNC(put_luma_h)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel*)_src; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const int8_t *filter = hf; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_luma_v)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (pixel*)_src; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const int8_t *filter = vf; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8); - src += src_stride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_luma_hv)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - const pixel *src = (const pixel*)_src; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const int8_t *filter = hf; - - src -= LUMA_EXTRA_BEFORE * src_stride; - for (int y = 0; y < height + LUMA_EXTRA; y++) { - for (int x = 0; x < width; x++) - tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE; - filter = vf; - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6; - tmp += MAX_PB_SIZE; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_uni_luma_h)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel*)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = hf; - const int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - const int val = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - dst[x] = av_clip_pixel((val + offset) >> shift); - } - src += src_stride; - dst += dst_stride; - } -} - -static void FUNC(put_uni_luma_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - - const pixel *src = (const pixel*)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = vf; - const int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - const int val = LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8); - dst[x] = av_clip_pixel((val + offset) >> shift); - } - src += src_stride; - dst += dst_stride; - } -} - -static void FUNC(put_uni_luma_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - const pixel *src = (const pixel*)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const int8_t *filter = hf; - const int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - src -= LUMA_EXTRA_BEFORE * src_stride; - for (int y = 0; y < height + LUMA_EXTRA; y++) { - for (int x = 0; x < width; x++) - tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE; - filter = vf; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - const int val = LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6; - dst[x] = av_clip_pixel((val + offset) >> shift); - } - tmp += MAX_PB_SIZE; - dst += dst_stride; - } - -} - -static void FUNC(put_uni_luma_w_h)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, int height, - const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, - const int width) -{ - const pixel *src = (const pixel*)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = hf; - const int ox = _ox * (1 << (BIT_DEPTH - 8)); - const int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = av_clip_pixel((((LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - src += src_stride; - dst += dst_stride; - } -} - -static void FUNC(put_uni_luma_w_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, const int height, - const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, - const int width) -{ - const pixel *src = (const pixel*)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = vf; - const int ox = _ox * (1 << (BIT_DEPTH - 8)); - const int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = av_clip_pixel((((LUMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - src += src_stride; - dst += dst_stride; - } -} - -static void FUNC(put_uni_luma_w_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, const int height, const int denom, - const int wx, const int _ox, const int8_t *hf, const int8_t *vf, const int width) -{ - int16_t tmp_array[(MAX_PB_SIZE + LUMA_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - const pixel *src = (const pixel*)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = hf; - const int ox = _ox * (1 << (BIT_DEPTH - 8)); - const int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - src -= LUMA_EXTRA_BEFORE * src_stride; - for (int y = 0; y < height + LUMA_EXTRA; y++) { - for (int x = 0; x < width; x++) - tmp[x] = LUMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + LUMA_EXTRA_BEFORE * MAX_PB_SIZE; - filter = vf; - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = av_clip_pixel((((LUMA_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox); - tmp += MAX_PB_SIZE; - dst += dst_stride; - } -} - -//////////////////////////////////////////////////////////////////////////////// -// -//////////////////////////////////////////////////////////////////////////////// -#define CHROMA_FILTER(src, stride) \ - (filter[0] * src[x - stride] + \ - filter[1] * src[x] + \ - filter[2] * src[x + stride] + \ - filter[3] * src[x + 2 * stride]) - -static void FUNC(put_chroma_h)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel *)_src; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const int8_t *filter = hf; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_chroma_v)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel *)_src; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const int8_t *filter = vf; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8); - src += src_stride; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_chroma_hv)(int16_t *dst, const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - const pixel *src = (const pixel *)_src; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const int8_t *filter = hf; - - src -= CHROMA_EXTRA_BEFORE * src_stride; - - for (int y = 0; y < height + CHROMA_EXTRA; y++) { - for (int x = 0; x < width; x++) - tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE; - filter = vf; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6; - tmp += MAX_PB_SIZE; - dst += MAX_PB_SIZE; - } -} - -static void FUNC(put_uni_chroma_h)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = hf; - const int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = av_clip_pixel(((CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) + offset) >> shift); - src += src_stride; - dst += dst_stride; - } -} - -static void FUNC(put_uni_chroma_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = vf; - const int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = av_clip_pixel(((CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) + offset) >> shift); - src += src_stride; - dst += dst_stride; - } -} - -static void FUNC(put_uni_chroma_hv)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, - const int height, const int8_t *hf, const int8_t *vf, const int width) -{ - int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = hf; - const int shift = 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - src -= CHROMA_EXTRA_BEFORE * src_stride; - - for (int y = 0; y < height + CHROMA_EXTRA; y++) { - for (int x = 0; x < width; x++) - tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE; - filter = vf; - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = av_clip_pixel(((CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6) + offset) >> shift); - tmp += MAX_PB_SIZE; - dst += dst_stride; - } -} - -static void FUNC(put_uni_chroma_w_h)(uint8_t *_dst, ptrdiff_t _dst_stride, - const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox, - const int8_t *hf, const int8_t *vf, int width) -{ - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = hf; - const int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - dst[x] = av_clip_pixel((((CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - } - dst += dst_stride; - src += src_stride; - } -} - -static void FUNC(put_uni_chroma_w_v)(uint8_t *_dst, const ptrdiff_t _dst_stride, - const uint8_t *_src, const ptrdiff_t _src_stride, const int height, - const int denom, const int wx, const int _ox, const int8_t *hf, const int8_t *vf, - const int width) -{ - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = vf; - const int shift = denom + 14 - BIT_DEPTH; - const int ox = _ox * (1 << (BIT_DEPTH - 8)); -#if BIT_DEPTH < 14 - int offset = 1 << (shift - 1); -#else - int offset = 0; -#endif - - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) { - dst[x] = av_clip_pixel((((CHROMA_FILTER(src, src_stride) >> (BIT_DEPTH - 8)) * wx + offset) >> shift) + ox); - } - dst += dst_stride; - src += src_stride; - } -} - -static void FUNC(put_uni_chroma_w_hv)(uint8_t *_dst, ptrdiff_t _dst_stride, - const uint8_t *_src, ptrdiff_t _src_stride, int height, int denom, int wx, int ox, - const int8_t *hf, const int8_t *vf, int width) -{ - int16_t tmp_array[(MAX_PB_SIZE + CHROMA_EXTRA) * MAX_PB_SIZE]; - int16_t *tmp = tmp_array; - const pixel *src = (const pixel *)_src; - pixel *dst = (pixel *)_dst; - const ptrdiff_t src_stride = _src_stride / sizeof(pixel); - const ptrdiff_t dst_stride = _dst_stride / sizeof(pixel); - const int8_t *filter = hf; - const int shift = denom + 14 - BIT_DEPTH; -#if BIT_DEPTH < 14 - const int offset = 1 << (shift - 1); -#else - const int offset = 0; -#endif - - src -= CHROMA_EXTRA_BEFORE * src_stride; - - for (int y = 0; y < height + CHROMA_EXTRA; y++) { - for (int x = 0; x < width; x++) - tmp[x] = CHROMA_FILTER(src, 1) >> (BIT_DEPTH - 8); - src += src_stride; - tmp += MAX_PB_SIZE; - } - - tmp = tmp_array + CHROMA_EXTRA_BEFORE * MAX_PB_SIZE; - filter = vf; - - ox = ox * (1 << (BIT_DEPTH - 8)); - for (int y = 0; y < height; y++) { - for (int x = 0; x < width; x++) - dst[x] = av_clip_pixel((((CHROMA_FILTER(tmp, MAX_PB_SIZE) >> 6) * wx + offset) >> shift) + ox); - tmp += MAX_PB_SIZE; - dst += dst_stride; - } -} +#include "libavcodec/h26x/h2656_inter_template.c" static void FUNC(avg)(uint8_t *_dst, const ptrdiff_t _dst_stride, const int16_t *src0, const int16_t *src1, const int width, const int height) diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c index 56e71d5163..214dc4e6c0 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c @@ -138,4 +138,8 @@ void ff_vvc_dsp_init(VVCDSPContext *vvcdsp, int bit_depth) VVC_DSP(8); break; } + +#if ARCH_X86 + ff_vvc_dsp_init_x86(vvcdsp, bit_depth); +#endif } diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h index b5a63c5833..6f59e73654 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h @@ -167,4 +167,6 @@ typedef struct VVCDSPContext { void ff_vvc_dsp_init(VVCDSPContext *hpc, int bit_depth); +void ff_vvc_dsp_init_x86(VVCDSPContext *hpc, const int bit_depth); + #endif /* AVCODEC_VVC_VVCDSP_H */ diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656_inter.asm b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656_inter.asm new file mode 100644 index 0000000000..cbba0c1ea5 --- /dev/null +++ b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656_inter.asm @@ -0,0 +1,1143 @@ +; /* +; * Provide SSE luma and chroma mc functions for HEVC/VVC decoding +; * Copyright (c) 2013 Pierre-Edouard LEPERE +; * Copyright (c) 2023-2024 Nuo Mi +; * Copyright (c) 2023-2024 Wu Jianhua +; * +; * This file is part of FFmpeg. +; * +; * FFmpeg is free software; you can redistribute it and/or +; * modify it under the terms of the GNU Lesser General Public +; * License as published by the Free Software Foundation; either +; * version 2.1 of the License, or (at your option) any later version. +; * +; * FFmpeg is distributed in the hope that it will be useful, +; * but WITHOUT ANY WARRANTY; without even the implied warranty of +; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +; * Lesser General Public License for more details. +; * +; * You should have received a copy of the GNU Lesser General Public +; * License along with FFmpeg; if not, write to the Free Software +; * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +; */ +%include "libavutil/x86/x86util.asm" + +SECTION_RODATA 32 +cextern pw_255 +cextern pw_512 +cextern pw_2048 +cextern pw_1023 +cextern pw_1024 +cextern pw_4096 +cextern pw_8192 +%define scale_8 pw_512 +%define scale_10 pw_2048 +%define scale_12 pw_8192 +%define max_pixels_8 pw_255 +%define max_pixels_10 pw_1023 +max_pixels_12: times 16 dw ((1 << 12)-1) +cextern pb_0 + +SECTION .text +%macro SIMPLE_LOAD 4 ;width, bitd, tab, r1 +%if %1 == 2 || (%2 == 8 && %1 <= 4) + movd %4, [%3] ; load data from source +%elif %1 == 4 || (%2 == 8 && %1 <= 8) + movq %4, [%3] ; load data from source +%elif notcpuflag(avx) + movu %4, [%3] ; load data from source +%elif %1 <= 8 || (%2 == 8 && %1 <= 16) + movdqu %4, [%3] +%else + movu %4, [%3] +%endif +%endmacro + +%macro VPBROADCASTW 2 +%if notcpuflag(avx2) + movd %1, %2 + pshuflw %1, %1, 0 + punpcklwd %1, %1 +%else + vpbroadcastw %1, %2 +%endif +%endmacro + +%macro MC_4TAP_FILTER 4 ; bitdepth, filter, a, b, + VPBROADCASTW %3, [%2q + 0 * 2] ; coeff 0, 1 + VPBROADCASTW %4, [%2q + 1 * 2] ; coeff 2, 3 +%if %1 != 8 + pmovsxbw %3, xmm%3 + pmovsxbw %4, xmm%4 +%endif +%endmacro + +%macro MC_4TAP_HV_FILTER 1 + VPBROADCASTW m12, [vfq + 0 * 2] ; vf 0, 1 + VPBROADCASTW m13, [vfq + 1 * 2] ; vf 2, 3 + VPBROADCASTW m14, [hfq + 0 * 2] ; hf 0, 1 + VPBROADCASTW m15, [hfq + 1 * 2] ; hf 2, 3 + + pmovsxbw m12, xm12 + pmovsxbw m13, xm13 +%if %1 != 8 + pmovsxbw m14, xm14 + pmovsxbw m15, xm15 +%endif + lea r3srcq, [srcstrideq*3] +%endmacro + +%macro MC_8TAP_SAVE_FILTER 5 ;offset, mm registers + mova [rsp + %1 + 0*mmsize], %2 + mova [rsp + %1 + 1*mmsize], %3 + mova [rsp + %1 + 2*mmsize], %4 + mova [rsp + %1 + 3*mmsize], %5 +%endmacro + +%macro MC_8TAP_FILTER 2-3 ;bitdepth, filter, offset + VPBROADCASTW m12, [%2q + 0 * 2] ; coeff 0, 1 + VPBROADCASTW m13, [%2q + 1 * 2] ; coeff 2, 3 + VPBROADCASTW m14, [%2q + 2 * 2] ; coeff 4, 5 + VPBROADCASTW m15, [%2q + 3 * 2] ; coeff 6, 7 +%if %0 == 3 + MC_8TAP_SAVE_FILTER %3, m12, m13, m14, m15 +%endif + +%if %1 != 8 + pmovsxbw m12, xm12 + pmovsxbw m13, xm13 + pmovsxbw m14, xm14 + pmovsxbw m15, xm15 + %if %0 == 3 + MC_8TAP_SAVE_FILTER %3 + 4*mmsize, m12, m13, m14, m15 + %endif +%elif %0 == 3 + pmovsxbw m8, xm12 + pmovsxbw m9, xm13 + pmovsxbw m10, xm14 + pmovsxbw m11, xm15 + MC_8TAP_SAVE_FILTER %3 + 4*mmsize, m8, m9, m10, m11 +%endif + +%endmacro + +%macro MC_4TAP_LOAD 4 +%if (%1 == 8 && %4 <= 4) +%define %%load movd +%elif (%1 == 8 && %4 <= 8) || (%1 > 8 && %4 <= 4) +%define %%load movq +%else +%define %%load movdqu +%endif + + %%load m0, [%2q ] +%ifnum %3 + %%load m1, [%2q+ %3] + %%load m2, [%2q+2*%3] + %%load m3, [%2q+3*%3] +%else + %%load m1, [%2q+ %3q] + %%load m2, [%2q+2*%3q] + %%load m3, [%2q+r3srcq] +%endif +%if %1 == 8 +%if %4 > 8 + SBUTTERFLY bw, 0, 1, 7 + SBUTTERFLY bw, 2, 3, 7 +%else + punpcklbw m0, m1 + punpcklbw m2, m3 +%endif +%else +%if %4 > 4 + SBUTTERFLY wd, 0, 1, 7 + SBUTTERFLY wd, 2, 3, 7 +%else + punpcklwd m0, m1 + punpcklwd m2, m3 +%endif +%endif +%endmacro + +%macro MC_8TAP_H_LOAD 4 +%assign %%stride (%1+7)/8 +%if %1 == 8 +%if %3 <= 4 +%define %%load movd +%elif %3 == 8 +%define %%load movq +%else +%define %%load movu +%endif +%else +%if %3 == 2 +%define %%load movd +%elif %3 == 4 +%define %%load movq +%else +%define %%load movu +%endif +%endif + %%load m0, [%2-3*%%stride] ;load data from source + %%load m1, [%2-2*%%stride] + %%load m2, [%2-%%stride ] + %%load m3, [%2 ] + %%load m4, [%2+%%stride ] + %%load m5, [%2+2*%%stride] + %%load m6, [%2+3*%%stride] + %%load m7, [%2+4*%%stride] + +%if %1 == 8 +%if %3 > 8 + SBUTTERFLY wd, 0, 1, %4 + SBUTTERFLY wd, 2, 3, %4 + SBUTTERFLY wd, 4, 5, %4 + SBUTTERFLY wd, 6, 7, %4 +%else + punpcklbw m0, m1 + punpcklbw m2, m3 + punpcklbw m4, m5 + punpcklbw m6, m7 +%endif +%else +%if %3 > 4 + SBUTTERFLY dq, 0, 1, %4 + SBUTTERFLY dq, 2, 3, %4 + SBUTTERFLY dq, 4, 5, %4 + SBUTTERFLY dq, 6, 7, %4 +%else + punpcklwd m0, m1 + punpcklwd m2, m3 + punpcklwd m4, m5 + punpcklwd m6, m7 +%endif +%endif +%endmacro + +%macro MC_8TAP_V_LOAD 5 + lea %5q, [%2] + sub %5q, r3srcq + movu m0, [%5q ] ;load x- 3*srcstride + movu m1, [%5q+ %3q ] ;load x- 2*srcstride + movu m2, [%5q+ 2*%3q ] ;load x-srcstride + movu m3, [%2 ] ;load x + movu m4, [%2+ %3q] ;load x+stride + movu m5, [%2+ 2*%3q] ;load x+2*stride + movu m6, [%2+r3srcq] ;load x+3*stride + movu m7, [%2+ 4*%3q] ;load x+4*stride +%if %1 == 8 +%if %4 > 8 + SBUTTERFLY bw, 0, 1, 8 + SBUTTERFLY bw, 2, 3, 8 + SBUTTERFLY bw, 4, 5, 8 + SBUTTERFLY bw, 6, 7, 8 +%else + punpcklbw m0, m1 + punpcklbw m2, m3 + punpcklbw m4, m5 + punpcklbw m6, m7 +%endif +%else +%if %4 > 4 + SBUTTERFLY wd, 0, 1, 8 + SBUTTERFLY wd, 2, 3, 8 + SBUTTERFLY wd, 4, 5, 8 + SBUTTERFLY wd, 6, 7, 8 +%else + punpcklwd m0, m1 + punpcklwd m2, m3 + punpcklwd m4, m5 + punpcklwd m6, m7 +%endif +%endif +%endmacro + +%macro PEL_12STORE2 3 + movd [%1], %2 +%endmacro +%macro PEL_12STORE4 3 + movq [%1], %2 +%endmacro +%macro PEL_12STORE6 3 + movq [%1], %2 + psrldq %2, 8 + movd [%1+8], %2 +%endmacro +%macro PEL_12STORE8 3 + movdqu [%1], %2 +%endmacro +%macro PEL_12STORE12 3 + PEL_12STORE8 %1, %2, %3 + movq [%1+16], %3 +%endmacro +%macro PEL_12STORE16 3 +%if cpuflag(avx2) + movu [%1], %2 +%else + PEL_12STORE8 %1, %2, %3 + movdqu [%1+16], %3 +%endif +%endmacro + +%macro PEL_10STORE2 3 + movd [%1], %2 +%endmacro +%macro PEL_10STORE4 3 + movq [%1], %2 +%endmacro +%macro PEL_10STORE6 3 + movq [%1], %2 + psrldq %2, 8 + movd [%1+8], %2 +%endmacro +%macro PEL_10STORE8 3 + movdqu [%1], %2 +%endmacro +%macro PEL_10STORE12 3 + PEL_10STORE8 %1, %2, %3 + movq [%1+16], %3 +%endmacro +%macro PEL_10STORE16 3 +%if cpuflag(avx2) + movu [%1], %2 +%else + PEL_10STORE8 %1, %2, %3 + movdqu [%1+16], %3 +%endif +%endmacro +%macro PEL_10STORE32 3 + PEL_10STORE16 %1, %2, %3 + movu [%1+32], %3 +%endmacro + +%macro PEL_8STORE2 3 + pextrw [%1], %2, 0 +%endmacro +%macro PEL_8STORE4 3 + movd [%1], %2 +%endmacro +%macro PEL_8STORE6 3 + movd [%1], %2 + pextrw [%1+4], %2, 2 +%endmacro +%macro PEL_8STORE8 3 + movq [%1], %2 +%endmacro +%macro PEL_8STORE12 3 + movq [%1], %2 + psrldq %2, 8 + movd [%1+8], %2 +%endmacro +%macro PEL_8STORE16 3 +%if cpuflag(avx2) + movdqu [%1], %2 +%else + movu [%1], %2 +%endif ; avx +%endmacro +%macro PEL_8STORE32 3 + movu [%1], %2 +%endmacro + +%macro LOOP_END 3 + add %1q, dststrideq ; dst += dststride + add %2q, %3q ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop +%endmacro + + +%macro MC_PIXEL_COMPUTE 2-3 ;width, bitdepth +%if %2 == 8 +%if cpuflag(avx2) && %0 ==3 +%if %1 > 16 + vextracti128 xm1, m0, 1 + pmovzxbw m1, xm1 + psllw m1, 14-%2 +%endif + pmovzxbw m0, xm0 +%else ; not avx +%if %1 > 8 + punpckhbw m1, m0, m2 + psllw m1, 14-%2 +%endif + punpcklbw m0, m2 +%endif +%endif ;avx + psllw m0, 14-%2 +%endmacro + +%macro MC_4TAP_COMPUTE 4-8 ; bitdepth, width, filter1, filter2, HV/m0, m2, m1, m3 +%if %0 == 8 +%define %%reg0 %5 +%define %%reg2 %6 +%define %%reg1 %7 +%define %%reg3 %8 +%else +%define %%reg0 m0 +%define %%reg2 m2 +%define %%reg1 m1 +%define %%reg3 m3 +%endif +%if %1 == 8 +%if cpuflag(avx2) && (%0 == 5) +%if %2 > 16 + vperm2i128 m10, m0, m1, q0301 +%endif + vinserti128 m0, m0, xm1, 1 + mova m1, m10 +%if %2 > 16 + vperm2i128 m10, m2, m3, q0301 +%endif + vinserti128 m2, m2, xm3, 1 + mova m3, m10 +%endif + pmaddubsw %%reg0, %3 ;x1*c1+x2*c2 + pmaddubsw %%reg2, %4 ;x3*c3+x4*c4 + paddw %%reg0, %%reg2 +%if %2 > 8 + pmaddubsw %%reg1, %3 + pmaddubsw %%reg3, %4 + paddw %%reg1, %%reg3 +%endif +%else + pmaddwd %%reg0, %3 + pmaddwd %%reg2, %4 + paddd %%reg0, %%reg2 +%if %2 > 4 + pmaddwd %%reg1, %3 + pmaddwd %%reg3, %4 + paddd %%reg1, %%reg3 +%if %1 != 8 + psrad %%reg1, %1-8 +%endif +%endif +%if %1 != 8 + psrad %%reg0, %1-8 +%endif + packssdw %%reg0, %%reg1 +%endif +%endmacro + +%macro MC_8TAP_HV_COMPUTE 4 ; width, bitdepth, filter + +%if %2 == 8 + pmaddubsw m0, [%3q+0*mmsize] ;x1*c1+x2*c2 + pmaddubsw m2, [%3q+1*mmsize] ;x3*c3+x4*c4 + pmaddubsw m4, [%3q+2*mmsize] ;x5*c5+x6*c6 + pmaddubsw m6, [%3q+3*mmsize] ;x7*c7+x8*c8 + paddw m0, m2 + paddw m4, m6 + paddw m0, m4 +%else + pmaddwd m0, [%3q+4*mmsize] + pmaddwd m2, [%3q+5*mmsize] + pmaddwd m4, [%3q+6*mmsize] + pmaddwd m6, [%3q+7*mmsize] + paddd m0, m2 + paddd m4, m6 + paddd m0, m4 +%if %2 != 8 + psrad m0, %2-8 +%endif +%if %1 > 4 + pmaddwd m1, [%3q+4*mmsize] + pmaddwd m3, [%3q+5*mmsize] + pmaddwd m5, [%3q+6*mmsize] + pmaddwd m7, [%3q+7*mmsize] + paddd m1, m3 + paddd m5, m7 + paddd m1, m5 +%if %2 != 8 + psrad m1, %2-8 +%endif +%endif + p%4 m0, m1 +%endif +%endmacro + + +%macro MC_8TAP_COMPUTE 2-3 ; width, bitdepth +%if %2 == 8 +%if cpuflag(avx2) && (%0 == 3) + + vperm2i128 m10, m0, m1, q0301 + vinserti128 m0, m0, xm1, 1 + SWAP 1, 10 + + vperm2i128 m10, m2, m3, q0301 + vinserti128 m2, m2, xm3, 1 + SWAP 3, 10 + + + vperm2i128 m10, m4, m5, q0301 + vinserti128 m4, m4, xm5, 1 + SWAP 5, 10 + + vperm2i128 m10, m6, m7, q0301 + vinserti128 m6, m6, xm7, 1 + SWAP 7, 10 +%endif + + pmaddubsw m0, m12 ;x1*c1+x2*c2 + pmaddubsw m2, m13 ;x3*c3+x4*c4 + pmaddubsw m4, m14 ;x5*c5+x6*c6 + pmaddubsw m6, m15 ;x7*c7+x8*c8 + paddw m0, m2 + paddw m4, m6 + paddw m0, m4 +%if %1 > 8 + pmaddubsw m1, m12 + pmaddubsw m3, m13 + pmaddubsw m5, m14 + pmaddubsw m7, m15 + paddw m1, m3 + paddw m5, m7 + paddw m1, m5 +%endif +%else + pmaddwd m0, m12 + pmaddwd m2, m13 + pmaddwd m4, m14 + pmaddwd m6, m15 + paddd m0, m2 + paddd m4, m6 + paddd m0, m4 +%if %2 != 8 + psrad m0, %2-8 +%endif +%if %1 > 4 + pmaddwd m1, m12 + pmaddwd m3, m13 + pmaddwd m5, m14 + pmaddwd m7, m15 + paddd m1, m3 + paddd m5, m7 + paddd m1, m5 +%if %2 != 8 + psrad m1, %2-8 +%endif +%endif +%endif +%endmacro +%macro UNI_COMPUTE 5 + pmulhrsw %3, %5 +%if %1 > 8 || (%2 > 8 && %1 > 4) + pmulhrsw %4, %5 +%endif +%if %2 == 8 + packuswb %3, %4 +%else + CLIPW %3, [pb_0], [max_pixels_%2] +%if (%1 > 8 && notcpuflag(avx)) || %1 > 16 + CLIPW %4, [pb_0], [max_pixels_%2] +%endif +%endif +%endmacro + + +; ****************************** +; void %1_put_pixels(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t srcstride, +; int height, const int8_t *hf, const int8_t *vf, int width) +; ****************************** + +%macro PUT_PIXELS 3 + MC_PIXELS %1, %2, %3 + MC_UNI_PIXELS %1, %2, %3 +%endmacro + +%macro MC_PIXELS 3 +cglobal %1_put_pixels%2_%3, 5, 5, 3, dst, dststride, src, srcstride, height + pxor m2, m2 +.loop: + SIMPLE_LOAD %2, %3, srcq, m0 + MC_PIXEL_COMPUTE %2, %3, 1 + PEL_10STORE%2 dstq, m0, m1 + LOOP_END dst, src, srcstride + RET +%endmacro + +%macro MC_UNI_PIXELS 3 +cglobal %1_put_uni_pixels%2_%3, 5, 5, 2, dst, dststride, src, srcstride, height +.loop: + SIMPLE_LOAD %2, %3, srcq, m0 + PEL_%3STORE%2 dstq, m0, m1 + add dstq, dststrideq ; dst += dststride + add srcq, srcstrideq ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop + RET +%endmacro + +%macro PUT_4TAP 3 +%if cpuflag(avx2) +%define XMM_REGS 11 +%else +%define XMM_REGS 8 +%endif + +; ****************************** +; void %1_put_4tap_hX(int16_t *dst, ptrdiff_t dststride, +; const uint8_t *_src, ptrdiff_t _srcstride, int height, int8_t *hf, int8_t *vf, int width); +; ****************************** +cglobal %1_put_4tap_h%2_%3, 6, 6, XMM_REGS, dst, dststride, src, srcstride, height, hf +%assign %%stride ((%3 + 7)/8) + MC_4TAP_FILTER %3, hf, m4, m5 +.loop: + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m4, m5, 1 + PEL_10STORE%2 dstq, m0, m1 + LOOP_END dst, src, srcstride + RET + +; ****************************** +; void %1_put_uni_4tap_hX(uint8_t *dst, ptrdiff_t dststride, +; const uint8_t *_src, ptrdiff_t _srcstride, int height, int8_t *hf, int8_t *vf, int width); +; ****************************** +cglobal %1_put_uni_4tap_h%2_%3, 6, 7, XMM_REGS, dst, dststride, src, srcstride, height, hf +%assign %%stride ((%3 + 7)/8) + movdqa m6, [scale_%3] + MC_4TAP_FILTER %3, hf, m4, m5 +.loop: + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m4, m5 + UNI_COMPUTE %2, %3, m0, m1, m6 + PEL_%3STORE%2 dstq, m0, m1 + add dstq, dststrideq ; dst += dststride + add srcq, srcstrideq ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop + RET + +; ****************************** +; void %1_put_4tap_v(int16_t *dst, ptrdiff_t dststride, +; const uint8_t *_src, ptrdiff_t _srcstride, int height, int8_t *hf, int8_t *vf, int width) +; ****************************** +cglobal %1_put_4tap_v%2_%3, 7, 7, XMM_REGS, dst, dststride, src, srcstride, height, r3src, vf + sub srcq, srcstrideq + MC_4TAP_FILTER %3, vf, m4, m5 + lea r3srcq, [srcstrideq*3] +.loop: + MC_4TAP_LOAD %3, srcq, srcstride, %2 + MC_4TAP_COMPUTE %3, %2, m4, m5, 1 + PEL_10STORE%2 dstq, m0, m1 + LOOP_END dst, src, srcstride + RET + +; ****************************** +; void %1_put_uni_4tap_vX(uint8_t *dst, ptrdiff_t dststride, +; const uint8_t *_src, ptrdiff_t _srcstride, int height, int8_t *hf, int8_t *vf, int width); +; ****************************** +cglobal %1_put_uni_4tap_v%2_%3, 7, 7, XMM_REGS, dst, dststride, src, srcstride, height, r3src, vf + movdqa m6, [scale_%3] + sub srcq, srcstrideq + MC_4TAP_FILTER %3, vf, m4, m5 + lea r3srcq, [srcstrideq*3] +.loop: + MC_4TAP_LOAD %3, srcq, srcstride, %2 + MC_4TAP_COMPUTE %3, %2, m4, m5 + UNI_COMPUTE %2, %3, m0, m1, m6 + PEL_%3STORE%2 dstq, m0, m1 + add dstq, dststrideq ; dst += dststride + add srcq, srcstrideq ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop + RET +%endmacro + +%macro PUT_4TAP_HV 3 +; ****************************** +; void put_4tap_hv(int16_t *dst, ptrdiff_t dststride, +; const uint8_t *_src, ptrdiff_t _srcstride, int height, int8_t *hf, int8_t *vf, int width) +; ****************************** +cglobal %1_put_4tap_hv%2_%3, 7, 8, 16 , dst, dststride, src, srcstride, height, hf, vf, r3src +%assign %%stride ((%3 + 7)/8) + sub srcq, srcstrideq + MC_4TAP_HV_FILTER %3 + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m8, m1 +%endif + SWAP m4, m0 + add srcq, srcstrideq + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m9, m1 +%endif + SWAP m5, m0 + add srcq, srcstrideq + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m10, m1 +%endif + SWAP m6, m0 + add srcq, srcstrideq +.loop: + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m11, m1 +%endif + SWAP m7, m0 + punpcklwd m0, m4, m5 + punpcklwd m2, m6, m7 +%if %2 > 4 + punpckhwd m1, m4, m5 + punpckhwd m3, m6, m7 +%endif + MC_4TAP_COMPUTE 14, %2, m12, m13 +%if (%2 > 8 && (%3 == 8)) + punpcklwd m4, m8, m9 + punpcklwd m2, m10, m11 + punpckhwd m8, m8, m9 + punpckhwd m3, m10, m11 + MC_4TAP_COMPUTE 14, %2, m12, m13, m4, m2, m8, m3 +%if cpuflag(avx2) + vinserti128 m2, m0, xm4, 1 + vperm2i128 m3, m0, m4, q0301 + PEL_10STORE%2 dstq, m2, m3 +%else + PEL_10STORE%2 dstq, m0, m4 +%endif +%else + PEL_10STORE%2 dstq, m0, m1 +%endif + movdqa m4, m5 + movdqa m5, m6 + movdqa m6, m7 +%if (%2 > 8 && (%3 == 8)) + mova m8, m9 + mova m9, m10 + mova m10, m11 +%endif + LOOP_END dst, src, srcstride + RET + +cglobal %1_put_uni_4tap_hv%2_%3, 7, 8, 16 , dst, dststride, src, srcstride, height, hf, vf, r3src +%assign %%stride ((%3 + 7)/8) + sub srcq, srcstrideq + MC_4TAP_HV_FILTER %3 + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m8, m1 +%endif + SWAP m4, m0 + add srcq, srcstrideq + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m9, m1 +%endif + SWAP m5, m0 + add srcq, srcstrideq + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m10, m1 +%endif + SWAP m6, m0 + add srcq, srcstrideq +.loop: + MC_4TAP_LOAD %3, srcq-%%stride, %%stride, %2 + MC_4TAP_COMPUTE %3, %2, m14, m15 +%if (%2 > 8 && (%3 == 8)) + SWAP m11, m1 +%endif + mova m7, m0 + punpcklwd m0, m4, m5 + punpcklwd m2, m6, m7 +%if %2 > 4 + punpckhwd m1, m4, m5 + punpckhwd m3, m6, m7 +%endif + MC_4TAP_COMPUTE 14, %2, m12, m13 +%if (%2 > 8 && (%3 == 8)) + punpcklwd m4, m8, m9 + punpcklwd m2, m10, m11 + punpckhwd m8, m8, m9 + punpckhwd m3, m10, m11 + MC_4TAP_COMPUTE 14, %2, m12, m13, m4, m2, m8, m3 + UNI_COMPUTE %2, %3, m0, m4, [scale_%3] +%else + UNI_COMPUTE %2, %3, m0, m1, [scale_%3] +%endif + PEL_%3STORE%2 dstq, m0, m1 + mova m4, m5 + mova m5, m6 + mova m6, m7 +%if (%2 > 8 && (%3 == 8)) + mova m8, m9 + mova m9, m10 + mova m10, m11 +%endif + add dstq, dststrideq ; dst += dststride + add srcq, srcstrideq ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop + RET +%endmacro + +; ****************************** +; void put_8tap_hX_X_X(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t srcstride, +; int height, const int8_t *hf, const int8_t *vf, int width) +; ****************************** + +%macro PUT_8TAP 3 +cglobal %1_put_8tap_h%2_%3, 6, 6, 16, dst, dststride, src, srcstride, height, hf + MC_8TAP_FILTER %3, hf +.loop: + MC_8TAP_H_LOAD %3, srcq, %2, 10 + MC_8TAP_COMPUTE %2, %3, 1 +%if %3 > 8 + packssdw m0, m1 +%endif + PEL_10STORE%2 dstq, m0, m1 + LOOP_END dst, src, srcstride + RET + +; ****************************** +; void put_uni_8tap_hX_X_X(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t srcstride, +; int height, const int8_t *hf, const int8_t *vf, int width) +; ****************************** +cglobal %1_put_uni_8tap_h%2_%3, 6, 7, 16 , dst, dststride, src, srcstride, height, hf + mova m9, [scale_%3] + MC_8TAP_FILTER %3, hf +.loop: + MC_8TAP_H_LOAD %3, srcq, %2, 10 + MC_8TAP_COMPUTE %2, %3 +%if %3 > 8 + packssdw m0, m1 +%endif + UNI_COMPUTE %2, %3, m0, m1, m9 + PEL_%3STORE%2 dstq, m0, m1 + add dstq, dststrideq ; dst += dststride + add srcq, srcstrideq ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop + RET + + +; ****************************** +; void put_8tap_vX_X_X(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t srcstride, +; int height, const int8_t *hf, const int8_t *vf, int width) +; ****************************** +cglobal %1_put_8tap_v%2_%3, 7, 8, 16, dst, dststride, src, srcstride, height, r3src, vf + MC_8TAP_FILTER %3, vf + lea r3srcq, [srcstrideq*3] +.loop: + MC_8TAP_V_LOAD %3, srcq, srcstride, %2, r7 + MC_8TAP_COMPUTE %2, %3, 1 +%if %3 > 8 + packssdw m0, m1 +%endif + PEL_10STORE%2 dstq, m0, m1 + LOOP_END dst, src, srcstride + RET + +; ****************************** +; void put_uni_8tap_vX_X_X(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t srcstride, +; int height, const int8_t *hf, const int8_t *vf, int width) +; ****************************** +cglobal %1_put_uni_8tap_v%2_%3, 7, 9, 16, dst, dststride, src, srcstride, height, r3src, vf + MC_8TAP_FILTER %3, vf + movdqa m9, [scale_%3] + lea r3srcq, [srcstrideq*3] +.loop: + MC_8TAP_V_LOAD %3, srcq, srcstride, %2, r8 + MC_8TAP_COMPUTE %2, %3 +%if %3 > 8 + packssdw m0, m1 +%endif + UNI_COMPUTE %2, %3, m0, m1, m9 + PEL_%3STORE%2 dstq, m0, m1 + add dstq, dststrideq ; dst += dststride + add srcq, srcstrideq ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop + RET + +%endmacro + + +; ****************************** +; void put_8tap_hvX_X(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t srcstride, +; int height, const int8_t *hf, const int8_t *vf, int width) +; ****************************** +%macro PUT_8TAP_HV 3 +cglobal %1_put_8tap_hv%2_%3, 7, 8, 16, 0 - mmsize*16, dst, dststride, src, srcstride, height, hf, vf, r3src + MC_8TAP_FILTER %3, hf, 0 + lea hfq, [rsp] + MC_8TAP_FILTER %3, vf, 8*mmsize + lea vfq, [rsp + 8*mmsize] + + lea r3srcq, [srcstrideq*3] + sub srcq, r3srcq + + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m8, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m9, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m10, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m11, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m12, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m13, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m14, m0 + add srcq, srcstrideq +.loop: + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m15, m0 + punpcklwd m0, m8, m9 + punpcklwd m2, m10, m11 + punpcklwd m4, m12, m13 + punpcklwd m6, m14, m15 +%if %2 > 4 + punpckhwd m1, m8, m9 + punpckhwd m3, m10, m11 + punpckhwd m5, m12, m13 + punpckhwd m7, m14, m15 +%endif +%if %2 <= 4 + movq m8, m9 + movq m9, m10 + movq m10, m11 + movq m11, m12 + movq m12, m13 + movq m13, m14 + movq m14, m15 +%else + movdqa m8, m9 + movdqa m9, m10 + movdqa m10, m11 + movdqa m11, m12 + movdqa m12, m13 + movdqa m13, m14 + movdqa m14, m15 +%endif + MC_8TAP_HV_COMPUTE %2, 14, vf, ackssdw + PEL_10STORE%2 dstq, m0, m1 + + LOOP_END dst, src, srcstride + RET + + +cglobal %1_put_uni_8tap_hv%2_%3, 7, 9, 16, 0 - 16*mmsize, dst, dststride, src, srcstride, height, hf, vf, r3src + MC_8TAP_FILTER %3, hf, 0 + lea hfq, [rsp] + MC_8TAP_FILTER %3, vf, 8*mmsize + lea vfq, [rsp + 8*mmsize] + lea r3srcq, [srcstrideq*3] + sub srcq, r3srcq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m8, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m9, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m10, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m11, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m12, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m13, m0 + add srcq, srcstrideq + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m14, m0 + add srcq, srcstrideq +.loop: + MC_8TAP_H_LOAD %3, srcq, %2, 15 + MC_8TAP_HV_COMPUTE %2, %3, hf, ackssdw + SWAP m15, m0 + punpcklwd m0, m8, m9 + punpcklwd m2, m10, m11 + punpcklwd m4, m12, m13 + punpcklwd m6, m14, m15 +%if %2 > 4 + punpckhwd m1, m8, m9 + punpckhwd m3, m10, m11 + punpckhwd m5, m12, m13 + punpckhwd m7, m14, m15 +%endif + MC_8TAP_HV_COMPUTE %2, 14, vf, ackusdw + UNI_COMPUTE %2, %3, m0, m1, [scale_%3] + PEL_%3STORE%2 dstq, m0, m1 + +%if %2 <= 4 + movq m8, m9 + movq m9, m10 + movq m10, m11 + movq m11, m12 + movq m12, m13 + movq m13, m14 + movq m14, m15 +%else + mova m8, m9 + mova m9, m10 + mova m10, m11 + mova m11, m12 + mova m12, m13 + mova m13, m14 + mova m14, m15 +%endif + add dstq, dststrideq ; dst += dststride + add srcq, srcstrideq ; src += srcstride + dec heightd ; cmp height + jnz .loop ; height loop + RET + +%endmacro + +%macro H2656PUT_PIXELS 2 + PUT_PIXELS h2656, %1, %2 +%endmacro + +%macro H2656PUT_4TAP 2 + PUT_4TAP h2656, %1, %2 +%endmacro + +%macro H2656PUT_4TAP_HV 2 + PUT_4TAP_HV h2656, %1, %2 +%endmacro + +%macro H2656PUT_8TAP 2 + PUT_8TAP h2656, %1, %2 +%endmacro + +%macro H2656PUT_8TAP_HV 2 + PUT_8TAP_HV h2656, %1, %2 +%endmacro + +%if ARCH_X86_64 + +INIT_XMM sse4 +H2656PUT_PIXELS 2, 8 +H2656PUT_PIXELS 4, 8 +H2656PUT_PIXELS 6, 8 +H2656PUT_PIXELS 8, 8 +H2656PUT_PIXELS 12, 8 +H2656PUT_PIXELS 16, 8 + +H2656PUT_PIXELS 2, 10 +H2656PUT_PIXELS 4, 10 +H2656PUT_PIXELS 6, 10 +H2656PUT_PIXELS 8, 10 + +H2656PUT_PIXELS 2, 12 +H2656PUT_PIXELS 4, 12 +H2656PUT_PIXELS 6, 12 +H2656PUT_PIXELS 8, 12 + +H2656PUT_4TAP 2, 8 +H2656PUT_4TAP 4, 8 +H2656PUT_4TAP 6, 8 +H2656PUT_4TAP 8, 8 + +H2656PUT_4TAP 12, 8 +H2656PUT_4TAP 16, 8 + +H2656PUT_4TAP 2, 10 +H2656PUT_4TAP 4, 10 +H2656PUT_4TAP 6, 10 +H2656PUT_4TAP 8, 10 + +H2656PUT_4TAP 2, 12 +H2656PUT_4TAP 4, 12 +H2656PUT_4TAP 6, 12 +H2656PUT_4TAP 8, 12 + +H2656PUT_4TAP_HV 2, 8 +H2656PUT_4TAP_HV 4, 8 +H2656PUT_4TAP_HV 6, 8 +H2656PUT_4TAP_HV 8, 8 +H2656PUT_4TAP_HV 16, 8 + +H2656PUT_4TAP_HV 2, 10 +H2656PUT_4TAP_HV 4, 10 +H2656PUT_4TAP_HV 6, 10 +H2656PUT_4TAP_HV 8, 10 + +H2656PUT_4TAP_HV 2, 12 +H2656PUT_4TAP_HV 4, 12 +H2656PUT_4TAP_HV 6, 12 +H2656PUT_4TAP_HV 8, 12 + +H2656PUT_8TAP 4, 8 +H2656PUT_8TAP 8, 8 +H2656PUT_8TAP 12, 8 +H2656PUT_8TAP 16, 8 + +H2656PUT_8TAP 4, 10 +H2656PUT_8TAP 8, 10 + +H2656PUT_8TAP 4, 12 +H2656PUT_8TAP 8, 12 + +H2656PUT_8TAP_HV 4, 8 +H2656PUT_8TAP_HV 8, 8 + +H2656PUT_8TAP_HV 4, 10 +H2656PUT_8TAP_HV 8, 10 + +H2656PUT_8TAP_HV 4, 12 +H2656PUT_8TAP_HV 8, 12 + +%if HAVE_AVX2_EXTERNAL +INIT_YMM avx2 + +H2656PUT_PIXELS 32, 8 +H2656PUT_PIXELS 16, 10 +H2656PUT_PIXELS 16, 12 + +H2656PUT_8TAP 32, 8 +H2656PUT_8TAP 16, 10 +H2656PUT_8TAP 16, 12 + +H2656PUT_8TAP_HV 32, 8 +H2656PUT_8TAP_HV 16, 10 +H2656PUT_8TAP_HV 16, 12 + +H2656PUT_4TAP 32, 8 +H2656PUT_4TAP 16, 10 +H2656PUT_4TAP 16, 12 + +H2656PUT_4TAP_HV 32, 8 +H2656PUT_4TAP_HV 16, 10 +H2656PUT_4TAP_HV 16, 12 + +%endif + +%endif diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.c b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.c new file mode 100644 index 0000000000..c402f9e21c --- /dev/null +++ b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.c @@ -0,0 +1,101 @@ +/* + * DSP for HEVC/VVC + * + * Copyright (C) 2022-2024 Nuo Mi + * Copyright (c) 2023-2024 Wu Jianhua + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "h2656dsp.h" + +#define mc_rep_func(name, bitd, step, W, opt) \ +void ff_h2656_put_##name##W##_##bitd##_##opt(int16_t *_dst, ptrdiff_t dststride, \ + const uint8_t *_src, ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width) \ +{ \ + int i; \ + int16_t *dst; \ + for (i = 0; i < W; i += step) { \ + const uint8_t *src = _src + (i * ((bitd + 7) / 8)); \ + dst = _dst + i; \ + ff_h2656_put_##name##step##_##bitd##_##opt(dst, dststride, src, _srcstride, height, hf, vf, width); \ + } \ +} + +#define mc_rep_uni_func(name, bitd, step, W, opt) \ +void ff_h2656_put_uni_##name##W##_##bitd##_##opt(uint8_t *_dst, ptrdiff_t dststride, \ + const uint8_t *_src, ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width) \ +{ \ + int i; \ + uint8_t *dst; \ + for (i = 0; i < W; i += step) { \ + const uint8_t *src = _src + (i * ((bitd + 7) / 8)); \ + dst = _dst + (i * ((bitd + 7) / 8)); \ + ff_h2656_put_uni_##name##step##_##bitd##_##opt(dst, dststride, src, _srcstride, \ + height, hf, vf, width); \ + } \ +} + +#define mc_rep_funcs(name, bitd, step, W, opt) \ + mc_rep_func(name, bitd, step, W, opt) \ + mc_rep_uni_func(name, bitd, step, W, opt) + +#define MC_REP_FUNCS_SSE4(fname) \ + mc_rep_funcs(fname, 8, 16,128, sse4) \ + mc_rep_funcs(fname, 8, 16, 64, sse4) \ + mc_rep_funcs(fname, 8, 16, 32, sse4) \ + mc_rep_funcs(fname, 10, 8,128, sse4) \ + mc_rep_funcs(fname, 10, 8, 64, sse4) \ + mc_rep_funcs(fname, 10, 8, 32, sse4) \ + mc_rep_funcs(fname, 10, 8, 16, sse4) \ + mc_rep_funcs(fname, 12, 8,128, sse4) \ + mc_rep_funcs(fname, 12, 8, 64, sse4) \ + mc_rep_funcs(fname, 12, 8, 32, sse4) \ + mc_rep_funcs(fname, 12, 8, 16, sse4) \ + +#if ARCH_X86_64 && HAVE_SSE4_EXTERNAL + +MC_REP_FUNCS_SSE4(pixels) +MC_REP_FUNCS_SSE4(4tap_h) +MC_REP_FUNCS_SSE4(4tap_v) +MC_REP_FUNCS_SSE4(4tap_hv) +MC_REP_FUNCS_SSE4(8tap_h) +MC_REP_FUNCS_SSE4(8tap_v) +MC_REP_FUNCS_SSE4(8tap_hv) +mc_rep_funcs(8tap_hv, 8, 8, 16, sse4) + +#if HAVE_AVX2_EXTERNAL + +#define MC_REP_FUNCS_AVX2(fname) \ + mc_rep_funcs(fname, 8, 32, 64, avx2) \ + mc_rep_funcs(fname, 8, 32,128, avx2) \ + mc_rep_funcs(fname,10, 16, 32, avx2) \ + mc_rep_funcs(fname,10, 16, 64, avx2) \ + mc_rep_funcs(fname,10, 16,128, avx2) \ + mc_rep_funcs(fname,12, 16, 32, avx2) \ + mc_rep_funcs(fname,12, 16, 64, avx2) \ + mc_rep_funcs(fname,12, 16,128, avx2) \ + +MC_REP_FUNCS_AVX2(pixels) +MC_REP_FUNCS_AVX2(8tap_h) +MC_REP_FUNCS_AVX2(8tap_v) +MC_REP_FUNCS_AVX2(8tap_hv) +MC_REP_FUNCS_AVX2(4tap_h) +MC_REP_FUNCS_AVX2(4tap_v) +MC_REP_FUNCS_AVX2(4tap_hv) +#endif +#endif diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h new file mode 100644 index 0000000000..e31aae6b0d --- /dev/null +++ b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h @@ -0,0 +1,103 @@ +/* + * DSP for HEVC/VVC + * + * Copyright (C) 2022-2024 Nuo Mi + * Copyright (c) 2023-2024 Wu Jianhua + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVCODEC_X86_H26X_H2656DSP_H +#define AVCODEC_X86_H26X_H2656DSP_H + +#include "config.h" +#include "libavutil/x86/asm.h" +#include "libavutil/x86/cpu.h" +#include + +#define H2656_PEL_PROTOTYPE(name, D, opt) \ +void ff_h2656_put_ ## name ## _ ## D ## _##opt(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width); \ +void ff_h2656_put_uni_ ## name ## _ ## D ## _##opt(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width); \ + +#define H2656_MC_8TAP_PROTOTYPES(fname, bitd, opt) \ + H2656_PEL_PROTOTYPE(fname##4, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##6, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##8, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##12, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##16, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##32, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##64, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##128, bitd, opt) + +H2656_MC_8TAP_PROTOTYPES(pixels , 8, sse4); +H2656_MC_8TAP_PROTOTYPES(pixels , 10, sse4); +H2656_MC_8TAP_PROTOTYPES(pixels , 12, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_h , 8, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_h , 10, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_h , 12, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_v , 8, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_v , 10, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_v , 12, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_hv , 8, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_hv , 10, sse4); +H2656_MC_8TAP_PROTOTYPES(8tap_hv , 12, sse4); + +#define H2656_MC_4TAP_PROTOTYPES(fname, bitd, opt) \ + H2656_PEL_PROTOTYPE(fname##2, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##4, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##6, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##8, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##12, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##16, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##32, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##64, bitd, opt); \ + H2656_PEL_PROTOTYPE(fname##128, bitd, opt) + +#define H2656_MC_4TAP_PROTOTYPES_SSE4(bitd) \ + H2656_PEL_PROTOTYPE(pixels2, bitd, sse4); \ + H2656_MC_4TAP_PROTOTYPES(4tap_h, bitd, sse4); \ + H2656_MC_4TAP_PROTOTYPES(4tap_v, bitd, sse4); \ + H2656_MC_4TAP_PROTOTYPES(4tap_hv, bitd, sse4); \ + +H2656_MC_4TAP_PROTOTYPES_SSE4(8) +H2656_MC_4TAP_PROTOTYPES_SSE4(10) +H2656_MC_4TAP_PROTOTYPES_SSE4(12) + +#define H2656_MC_8TAP_PROTOTYPES_AVX2(fname) \ + H2656_PEL_PROTOTYPE(fname##32 , 8, avx2); \ + H2656_PEL_PROTOTYPE(fname##64 , 8, avx2); \ + H2656_PEL_PROTOTYPE(fname##128, 8, avx2); \ + H2656_PEL_PROTOTYPE(fname##16 ,10, avx2); \ + H2656_PEL_PROTOTYPE(fname##32 ,10, avx2); \ + H2656_PEL_PROTOTYPE(fname##64 ,10, avx2); \ + H2656_PEL_PROTOTYPE(fname##128,10, avx2); \ + H2656_PEL_PROTOTYPE(fname##16 ,12, avx2); \ + H2656_PEL_PROTOTYPE(fname##32 ,12, avx2); \ + H2656_PEL_PROTOTYPE(fname##64 ,12, avx2); \ + H2656_PEL_PROTOTYPE(fname##128,12, avx2) \ + +H2656_MC_8TAP_PROTOTYPES_AVX2(pixels); +H2656_MC_8TAP_PROTOTYPES_AVX2(8tap_h); +H2656_MC_8TAP_PROTOTYPES_AVX2(8tap_v); +H2656_MC_8TAP_PROTOTYPES_AVX2(8tap_hv); +H2656_PEL_PROTOTYPE(8tap_hv16, 8, avx2); + +H2656_MC_8TAP_PROTOTYPES_AVX2(4tap_h); +H2656_MC_8TAP_PROTOTYPES_AVX2(4tap_v); +H2656_MC_8TAP_PROTOTYPES_AVX2(4tap_hv); + +#endif diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/hevc_mc.asm b/src/ExtLib/ffmpeg/libavcodec/x86/hevc_mc.asm index eb267453fe..5489701e44 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/hevc_mc.asm +++ b/src/ExtLib/ffmpeg/libavcodec/x86/hevc_mc.asm @@ -715,35 +715,6 @@ SECTION .text ; int height, int mx, int my) ; ****************************** -%macro HEVC_PUT_HEVC_PEL_PIXELS 2 -HEVC_PEL_PIXELS %1, %2 -HEVC_UNI_PEL_PIXELS %1, %2 -HEVC_BI_PEL_PIXELS %1, %2 -%endmacro - -%macro HEVC_PEL_PIXELS 2 -cglobal hevc_put_hevc_pel_pixels%1_%2, 4, 4, 3, dst, src, srcstride,height - pxor m2, m2 -.loop: - SIMPLE_LOAD %1, %2, srcq, m0 - MC_PIXEL_COMPUTE %1, %2, 1 - PEL_10STORE%1 dstq, m0, m1 - LOOP_END dst, src, srcstride - RET - %endmacro - -%macro HEVC_UNI_PEL_PIXELS 2 -cglobal hevc_put_hevc_uni_pel_pixels%1_%2, 5, 5, 2, dst, dststride, src, srcstride,height -.loop: - SIMPLE_LOAD %1, %2, srcq, m0 - PEL_%2STORE%1 dstq, m0, m1 - add dstq, dststrideq ; dst += dststride - add srcq, srcstrideq ; src += srcstride - dec heightd ; cmp height - jnz .loop ; height loop - RET -%endmacro - %macro HEVC_BI_PEL_PIXELS 2 cglobal hevc_put_hevc_bi_pel_pixels%1_%2, 6, 6, 6, dst, dststride, src, srcstride, src2, height pxor m2, m2 @@ -777,32 +748,8 @@ cglobal hevc_put_hevc_bi_pel_pixels%1_%2, 6, 6, 6, dst, dststride, src, srcstrid %define XMM_REGS 8 %endif -cglobal hevc_put_hevc_epel_h%1_%2, 5, 6, XMM_REGS, dst, src, srcstride, height, mx, rfilter -%assign %%stride ((%2 + 7)/8) - EPEL_FILTER %2, mx, m4, m5, rfilter -.loop: - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m4, m5, 1 - PEL_10STORE%1 dstq, m0, m1 - LOOP_END dst, src, srcstride - RET - -cglobal hevc_put_hevc_uni_epel_h%1_%2, 6, 7, XMM_REGS, dst, dststride, src, srcstride, height, mx, rfilter -%assign %%stride ((%2 + 7)/8) - movdqa m6, [pw_%2] - EPEL_FILTER %2, mx, m4, m5, rfilter -.loop: - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m4, m5 - UNI_COMPUTE %1, %2, m0, m1, m6 - PEL_%2STORE%1 dstq, m0, m1 - add dstq, dststrideq ; dst += dststride - add srcq, srcstrideq ; src += srcstride - dec heightd ; cmp height - jnz .loop ; height loop - RET - cglobal hevc_put_hevc_bi_epel_h%1_%2, 7, 8, XMM_REGS, dst, dststride, src, srcstride, src2, height, mx, rfilter +%assign %%stride ((%2 + 7)/8) movdqa m6, [pw_bi_%2] EPEL_FILTER %2, mx, m4, m5, rfilter .loop: @@ -824,36 +771,6 @@ cglobal hevc_put_hevc_bi_epel_h%1_%2, 7, 8, XMM_REGS, dst, dststride, src, srcst ; int height, int mx, int my, int width) ; ****************************** -cglobal hevc_put_hevc_epel_v%1_%2, 4, 6, XMM_REGS, dst, src, srcstride, height, r3src, my - movifnidn myd, mym - sub srcq, srcstrideq - EPEL_FILTER %2, my, m4, m5, r3src - lea r3srcq, [srcstrideq*3] -.loop: - EPEL_LOAD %2, srcq, srcstride, %1 - EPEL_COMPUTE %2, %1, m4, m5, 1 - PEL_10STORE%1 dstq, m0, m1 - LOOP_END dst, src, srcstride - RET - -cglobal hevc_put_hevc_uni_epel_v%1_%2, 5, 7, XMM_REGS, dst, dststride, src, srcstride, height, r3src, my - movifnidn myd, mym - movdqa m6, [pw_%2] - sub srcq, srcstrideq - EPEL_FILTER %2, my, m4, m5, r3src - lea r3srcq, [srcstrideq*3] -.loop: - EPEL_LOAD %2, srcq, srcstride, %1 - EPEL_COMPUTE %2, %1, m4, m5 - UNI_COMPUTE %1, %2, m0, m1, m6 - PEL_%2STORE%1 dstq, m0, m1 - add dstq, dststrideq ; dst += dststride - add srcq, srcstrideq ; src += srcstride - dec heightd ; cmp height - jnz .loop ; height loop - RET - - cglobal hevc_put_hevc_bi_epel_v%1_%2, 6, 8, XMM_REGS, dst, dststride, src, srcstride, src2, height, r3src, my movifnidn myd, mym movdqa m6, [pw_bi_%2] @@ -882,135 +799,6 @@ cglobal hevc_put_hevc_bi_epel_v%1_%2, 6, 8, XMM_REGS, dst, dststride, src, srcst ; ****************************** %macro HEVC_PUT_HEVC_EPEL_HV 2 -cglobal hevc_put_hevc_epel_hv%1_%2, 6, 7, 16 , dst, src, srcstride, height, mx, my, r3src -%assign %%stride ((%2 + 7)/8) - sub srcq, srcstrideq - EPEL_HV_FILTER %2 - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m8, m1 -%endif - SWAP m4, m0 - add srcq, srcstrideq - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m9, m1 -%endif - SWAP m5, m0 - add srcq, srcstrideq - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m10, m1 -%endif - SWAP m6, m0 - add srcq, srcstrideq -.loop: - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m11, m1 -%endif - SWAP m7, m0 - punpcklwd m0, m4, m5 - punpcklwd m2, m6, m7 -%if %1 > 4 - punpckhwd m1, m4, m5 - punpckhwd m3, m6, m7 -%endif - EPEL_COMPUTE 14, %1, m12, m13 -%if (%1 > 8 && (%2 == 8)) - punpcklwd m4, m8, m9 - punpcklwd m2, m10, m11 - punpckhwd m8, m8, m9 - punpckhwd m3, m10, m11 - EPEL_COMPUTE 14, %1, m12, m13, m4, m2, m8, m3 -%if cpuflag(avx2) - vinserti128 m2, m0, xm4, 1 - vperm2i128 m3, m0, m4, q0301 - PEL_10STORE%1 dstq, m2, m3 -%else - PEL_10STORE%1 dstq, m0, m4 -%endif -%else - PEL_10STORE%1 dstq, m0, m1 -%endif - movdqa m4, m5 - movdqa m5, m6 - movdqa m6, m7 -%if (%1 > 8 && (%2 == 8)) - mova m8, m9 - mova m9, m10 - mova m10, m11 -%endif - LOOP_END dst, src, srcstride - RET - -cglobal hevc_put_hevc_uni_epel_hv%1_%2, 7, 8, 16 , dst, dststride, src, srcstride, height, mx, my, r3src -%assign %%stride ((%2 + 7)/8) - sub srcq, srcstrideq - EPEL_HV_FILTER %2 - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m8, m1 -%endif - SWAP m4, m0 - add srcq, srcstrideq - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m9, m1 -%endif - SWAP m5, m0 - add srcq, srcstrideq - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m10, m1 -%endif - SWAP m6, m0 - add srcq, srcstrideq -.loop: - EPEL_LOAD %2, srcq-%%stride, %%stride, %1 - EPEL_COMPUTE %2, %1, m14, m15 -%if (%1 > 8 && (%2 == 8)) - SWAP m11, m1 -%endif - mova m7, m0 - punpcklwd m0, m4, m5 - punpcklwd m2, m6, m7 -%if %1 > 4 - punpckhwd m1, m4, m5 - punpckhwd m3, m6, m7 -%endif - EPEL_COMPUTE 14, %1, m12, m13 -%if (%1 > 8 && (%2 == 8)) - punpcklwd m4, m8, m9 - punpcklwd m2, m10, m11 - punpckhwd m8, m8, m9 - punpckhwd m3, m10, m11 - EPEL_COMPUTE 14, %1, m12, m13, m4, m2, m8, m3 - UNI_COMPUTE %1, %2, m0, m4, [pw_%2] -%else - UNI_COMPUTE %1, %2, m0, m1, [pw_%2] -%endif - PEL_%2STORE%1 dstq, m0, m1 - mova m4, m5 - mova m5, m6 - mova m6, m7 -%if (%1 > 8 && (%2 == 8)) - mova m8, m9 - mova m9, m10 - mova m10, m11 -%endif - add dstq, dststrideq ; dst += dststride - add srcq, srcstrideq ; src += srcstride - dec heightd ; cmp height - jnz .loop ; height loop - RET cglobal hevc_put_hevc_bi_epel_hv%1_%2, 8, 9, 16, dst, dststride, src, srcstride, src2, height, mx, my, r3src %assign %%stride ((%2 + 7)/8) @@ -1093,34 +881,6 @@ cglobal hevc_put_hevc_bi_epel_hv%1_%2, 8, 9, 16, dst, dststride, src, srcstride, ; ****************************** %macro HEVC_PUT_HEVC_QPEL 2 -cglobal hevc_put_hevc_qpel_h%1_%2, 5, 6, 16, dst, src, srcstride, height, mx, rfilter - QPEL_FILTER %2, mx -.loop: - QPEL_H_LOAD %2, srcq, %1, 10 - QPEL_COMPUTE %1, %2, 1 -%if %2 > 8 - packssdw m0, m1 -%endif - PEL_10STORE%1 dstq, m0, m1 - LOOP_END dst, src, srcstride - RET - -cglobal hevc_put_hevc_uni_qpel_h%1_%2, 6, 7, 16 , dst, dststride, src, srcstride, height, mx, rfilter - mova m9, [pw_%2] - QPEL_FILTER %2, mx -.loop: - QPEL_H_LOAD %2, srcq, %1, 10 - QPEL_COMPUTE %1, %2 -%if %2 > 8 - packssdw m0, m1 -%endif - UNI_COMPUTE %1, %2, m0, m1, m9 - PEL_%2STORE%1 dstq, m0, m1 - add dstq, dststrideq ; dst += dststride - add srcq, srcstrideq ; src += srcstride - dec heightd ; cmp height - jnz .loop ; height loop - RET cglobal hevc_put_hevc_bi_qpel_h%1_%2, 7, 8, 16 , dst, dststride, src, srcstride, src2, height, mx, rfilter movdqa m9, [pw_bi_%2] @@ -1148,38 +908,6 @@ cglobal hevc_put_hevc_bi_qpel_h%1_%2, 7, 8, 16 , dst, dststride, src, srcstride, ; int height, int mx, int my, int width) ; ****************************** -cglobal hevc_put_hevc_qpel_v%1_%2, 4, 8, 16, dst, src, srcstride, height, r3src, my, rfilter - movifnidn myd, mym - lea r3srcq, [srcstrideq*3] - QPEL_FILTER %2, my -.loop: - QPEL_V_LOAD %2, srcq, srcstride, %1, r7 - QPEL_COMPUTE %1, %2, 1 -%if %2 > 8 - packssdw m0, m1 -%endif - PEL_10STORE%1 dstq, m0, m1 - LOOP_END dst, src, srcstride - RET - -cglobal hevc_put_hevc_uni_qpel_v%1_%2, 5, 9, 16, dst, dststride, src, srcstride, height, r3src, my, rfilter - movifnidn myd, mym - movdqa m9, [pw_%2] - lea r3srcq, [srcstrideq*3] - QPEL_FILTER %2, my -.loop: - QPEL_V_LOAD %2, srcq, srcstride, %1, r8 - QPEL_COMPUTE %1, %2 -%if %2 > 8 - packssdw m0, m1 -%endif - UNI_COMPUTE %1, %2, m0, m1, m9 - PEL_%2STORE%1 dstq, m0, m1 - add dstq, dststrideq ; dst += dststride - add srcq, srcstrideq ; src += srcstride - dec heightd ; cmp height - jnz .loop ; height loop - RET cglobal hevc_put_hevc_bi_qpel_v%1_%2, 6, 10, 16, dst, dststride, src, srcstride, src2, height, r3src, my, rfilter movifnidn myd, mym @@ -1210,162 +938,6 @@ cglobal hevc_put_hevc_bi_qpel_v%1_%2, 6, 10, 16, dst, dststride, src, srcstride, ; int height, int mx, int my) ; ****************************** %macro HEVC_PUT_HEVC_QPEL_HV 2 -cglobal hevc_put_hevc_qpel_hv%1_%2, 6, 8, 16, dst, src, srcstride, height, mx, my, r3src, rfilter -%if cpuflag(avx2) -%assign %%shift 4 -%else -%assign %%shift 3 -%endif - sub mxq, 1 - sub myq, 1 - shl mxq, %%shift ; multiply by 32 - shl myq, %%shift ; multiply by 32 - lea r3srcq, [srcstrideq*3] - sub srcq, r3srcq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m8, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m9, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m10, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m11, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m12, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m13, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m14, m0 - add srcq, srcstrideq -.loop: - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m15, m0 - punpcklwd m0, m8, m9 - punpcklwd m2, m10, m11 - punpcklwd m4, m12, m13 - punpcklwd m6, m14, m15 -%if %1 > 4 - punpckhwd m1, m8, m9 - punpckhwd m3, m10, m11 - punpckhwd m5, m12, m13 - punpckhwd m7, m14, m15 -%endif - QPEL_HV_COMPUTE %1, 14, my, ackssdw - PEL_10STORE%1 dstq, m0, m1 -%if %1 <= 4 - movq m8, m9 - movq m9, m10 - movq m10, m11 - movq m11, m12 - movq m12, m13 - movq m13, m14 - movq m14, m15 -%else - movdqa m8, m9 - movdqa m9, m10 - movdqa m10, m11 - movdqa m11, m12 - movdqa m12, m13 - movdqa m13, m14 - movdqa m14, m15 -%endif - LOOP_END dst, src, srcstride - RET - -cglobal hevc_put_hevc_uni_qpel_hv%1_%2, 7, 9, 16 , dst, dststride, src, srcstride, height, mx, my, r3src, rfilter -%if cpuflag(avx2) -%assign %%shift 4 -%else -%assign %%shift 3 -%endif - sub mxq, 1 - sub myq, 1 - shl mxq, %%shift ; multiply by 32 - shl myq, %%shift ; multiply by 32 - lea r3srcq, [srcstrideq*3] - sub srcq, r3srcq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m8, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m9, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m10, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m11, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m12, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m13, m0 - add srcq, srcstrideq - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m14, m0 - add srcq, srcstrideq -.loop: - QPEL_H_LOAD %2, srcq, %1, 15 - QPEL_HV_COMPUTE %1, %2, mx, ackssdw - SWAP m15, m0 - punpcklwd m0, m8, m9 - punpcklwd m2, m10, m11 - punpcklwd m4, m12, m13 - punpcklwd m6, m14, m15 -%if %1 > 4 - punpckhwd m1, m8, m9 - punpckhwd m3, m10, m11 - punpckhwd m5, m12, m13 - punpckhwd m7, m14, m15 -%endif - QPEL_HV_COMPUTE %1, 14, my, ackusdw - UNI_COMPUTE %1, %2, m0, m1, [pw_%2] - PEL_%2STORE%1 dstq, m0, m1 - -%if %1 <= 4 - movq m8, m9 - movq m9, m10 - movq m10, m11 - movq m11, m12 - movq m12, m13 - movq m13, m14 - movq m14, m15 -%else - mova m8, m9 - mova m9, m10 - mova m10, m11 - mova m11, m12 - mova m12, m13 - mova m13, m14 - mova m14, m15 -%endif - add dstq, dststrideq ; dst += dststride - add srcq, srcstrideq ; src += srcstride - dec heightd ; cmp height - jnz .loop ; height loop - RET cglobal hevc_put_hevc_bi_qpel_hv%1_%2, 8, 10, 16, dst, dststride, src, srcstride, src2, height, mx, my, r3src, rfilter %if cpuflag(avx2) @@ -1613,22 +1185,22 @@ WEIGHTING_FUNCS 4, 12 WEIGHTING_FUNCS 6, 12 WEIGHTING_FUNCS 8, 12 -HEVC_PUT_HEVC_PEL_PIXELS 2, 8 -HEVC_PUT_HEVC_PEL_PIXELS 4, 8 -HEVC_PUT_HEVC_PEL_PIXELS 6, 8 -HEVC_PUT_HEVC_PEL_PIXELS 8, 8 -HEVC_PUT_HEVC_PEL_PIXELS 12, 8 -HEVC_PUT_HEVC_PEL_PIXELS 16, 8 +HEVC_BI_PEL_PIXELS 2, 8 +HEVC_BI_PEL_PIXELS 4, 8 +HEVC_BI_PEL_PIXELS 6, 8 +HEVC_BI_PEL_PIXELS 8, 8 +HEVC_BI_PEL_PIXELS 12, 8 +HEVC_BI_PEL_PIXELS 16, 8 -HEVC_PUT_HEVC_PEL_PIXELS 2, 10 -HEVC_PUT_HEVC_PEL_PIXELS 4, 10 -HEVC_PUT_HEVC_PEL_PIXELS 6, 10 -HEVC_PUT_HEVC_PEL_PIXELS 8, 10 +HEVC_BI_PEL_PIXELS 2, 10 +HEVC_BI_PEL_PIXELS 4, 10 +HEVC_BI_PEL_PIXELS 6, 10 +HEVC_BI_PEL_PIXELS 8, 10 -HEVC_PUT_HEVC_PEL_PIXELS 2, 12 -HEVC_PUT_HEVC_PEL_PIXELS 4, 12 -HEVC_PUT_HEVC_PEL_PIXELS 6, 12 -HEVC_PUT_HEVC_PEL_PIXELS 8, 12 +HEVC_BI_PEL_PIXELS 2, 12 +HEVC_BI_PEL_PIXELS 4, 12 +HEVC_BI_PEL_PIXELS 6, 12 +HEVC_BI_PEL_PIXELS 8, 12 HEVC_PUT_HEVC_EPEL 2, 8 HEVC_PUT_HEVC_EPEL 4, 8 @@ -1693,8 +1265,8 @@ HEVC_PUT_HEVC_QPEL_HV 8, 12 %if HAVE_AVX2_EXTERNAL INIT_YMM avx2 ; adds ff_ and _avx2 to function name & enables 256b registers : m0 for 256b, xm0 for 128b. cpuflag(avx2) = 1 / notcpuflag(avx) = 0 -HEVC_PUT_HEVC_PEL_PIXELS 32, 8 -HEVC_PUT_HEVC_PEL_PIXELS 16, 10 +HEVC_BI_PEL_PIXELS 32, 8 +HEVC_BI_PEL_PIXELS 16, 10 HEVC_PUT_HEVC_EPEL 32, 8 HEVC_PUT_HEVC_EPEL 16, 10 diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c index cb1c198b62..f75ca03a2b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c @@ -1,6 +1,7 @@ /* * Copyright (c) 2013 Seppo Tomperi - * Copyright (c) 2013 - 2014 Pierre-Edouard Lepere + * Copyright (c) 2013-2014 Pierre-Edouard Lepere + * Copyright (c) 2023-2024 Wu Jianhua * * This file is part of FFmpeg. * @@ -27,6 +28,7 @@ #include "libavutil/x86/cpu.h" #include "libavcodec/hevcdsp.h" #include "libavcodec/x86/hevcdsp.h" +#include "libavcodec/x86/h26x/h2656dsp.h" #define LFC_FUNC(DIR, DEPTH, OPT) \ void ff_hevc_ ## DIR ## _loop_filter_chroma_ ## DEPTH ## _ ## OPT(uint8_t *pix, ptrdiff_t stride, const int *tc, const uint8_t *no_p, const uint8_t *no_q); @@ -83,6 +85,110 @@ void ff_hevc_idct_32x32_10_ ## opt(int16_t *coeffs, int col_limit); IDCT_FUNCS(sse2) IDCT_FUNCS(avx) + +#define ff_hevc_pel_filters ff_hevc_qpel_filters +#define DECL_HV_FILTER(f) \ + const uint8_t *hf = ff_hevc_ ## f ## _filters[mx - 1]; \ + const uint8_t *vf = ff_hevc_ ## f ## _filters[my - 1]; + +#define FW_PUT(p, a, b, depth, opt) \ +void ff_hevc_put_hevc_ ## a ## _ ## depth ## _##opt(int16_t *dst, const uint8_t *src, ptrdiff_t srcstride, \ + int height, intptr_t mx, intptr_t my,int width) \ +{ \ + DECL_HV_FILTER(p) \ + ff_h2656_put_ ## b ## _ ## depth ## _##opt(dst, 2 * MAX_PB_SIZE, src, srcstride, height, hf, vf, width); \ +} + +#define FW_PUT_UNI(p, a, b, depth, opt) \ +void ff_hevc_put_hevc_uni_ ## a ## _ ## depth ## _##opt(uint8_t *dst, ptrdiff_t dststride, \ + const uint8_t *src, ptrdiff_t srcstride, \ + int height, intptr_t mx, intptr_t my, int width) \ +{ \ + DECL_HV_FILTER(p) \ + ff_h2656_put_uni_ ## b ## _ ## depth ## _##opt(dst, dststride, src, srcstride, height, hf, vf, width); \ +} + +#if ARCH_X86_64 && HAVE_SSE4_EXTERNAL + +#define FW_PUT_FUNCS(p, a, b, depth, opt) \ + FW_PUT(p, a, b, depth, opt) \ + FW_PUT_UNI(p, a, b, depth, opt) + +#define FW_PEL(w, depth, opt) FW_PUT_FUNCS(pel, pel_pixels##w, pixels##w, depth, opt) + +#define FW_DIR(npel, n, w, depth, opt) \ + FW_PUT_FUNCS(npel, npel ## _h##w, n ## tap_h##w, depth, opt) \ + FW_PUT_FUNCS(npel, npel ## _v##w, n ## tap_v##w, depth, opt) + +#define FW_DIR_HV(npel, n, w, depth, opt) \ + FW_PUT_FUNCS(npel, npel ## _hv##w, n ## tap_hv##w, depth, opt) + +FW_PEL(4, 8, sse4); +FW_PEL(6, 8, sse4); +FW_PEL(8, 8, sse4); +FW_PEL(12, 8, sse4); +FW_PEL(16, 8, sse4); +FW_PEL(4, 10, sse4); +FW_PEL(6, 10, sse4); +FW_PEL(8, 10, sse4); +FW_PEL(4, 12, sse4); +FW_PEL(6, 12, sse4); +FW_PEL(8, 12, sse4); + +#define FW_EPEL(w, depth, opt) FW_DIR(epel, 4, w, depth, opt) +#define FW_EPEL_HV(w, depth, opt) FW_DIR_HV(epel, 4, w, depth, opt) +#define FW_EPEL_FUNCS(w, depth, opt) \ + FW_EPEL(w, depth, opt) \ + FW_EPEL_HV(w, depth, opt) + +FW_EPEL(12, 8, sse4); + +FW_EPEL_FUNCS(4, 8, sse4); +FW_EPEL_FUNCS(6, 8, sse4); +FW_EPEL_FUNCS(8, 8, sse4); +FW_EPEL_FUNCS(16, 8, sse4); +FW_EPEL_FUNCS(4, 10, sse4); +FW_EPEL_FUNCS(6, 10, sse4); +FW_EPEL_FUNCS(8, 10, sse4); +FW_EPEL_FUNCS(4, 12, sse4); +FW_EPEL_FUNCS(6, 12, sse4); +FW_EPEL_FUNCS(8, 12, sse4); + +#define FW_QPEL(w, depth, opt) FW_DIR(qpel, 8, w, depth, opt) +#define FW_QPEL_HV(w, depth, opt) FW_DIR_HV(qpel, 8, w, depth, opt) +#define FW_QPEL_FUNCS(w, depth, opt) \ + FW_QPEL(w, depth, opt) \ + FW_QPEL_HV(w, depth, opt) + +FW_QPEL(12, 8, sse4); +FW_QPEL(16, 8, sse4); + +FW_QPEL_FUNCS(4, 8, sse4); +FW_QPEL_FUNCS(8, 8, sse4); +FW_QPEL_FUNCS(4, 10, sse4); +FW_QPEL_FUNCS(8, 10, sse4); +FW_QPEL_FUNCS(4, 12, sse4); +FW_QPEL_FUNCS(8, 12, sse4); + +#if HAVE_AVX2_EXTERNAL + +FW_PEL(32, 8, avx2); +FW_PUT(pel, pel_pixels16, pixels16, 10, avx2); + +FW_EPEL(32, 8, avx2); +FW_EPEL(16, 10, avx2); + +FW_EPEL_HV(32, 8, avx2); +FW_EPEL_HV(16, 10, avx2); + +FW_QPEL(32, 8, avx2); +FW_QPEL(16, 10, avx2); + +FW_QPEL_HV(16, 10, avx2); + +#endif +#endif + #define mc_rep_func(name, bitd, step, W, opt) \ void ff_hevc_put_hevc_##name##W##_##bitd##_##opt(int16_t *_dst, \ const uint8_t *_src, ptrdiff_t _srcstride, int height, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvc_mc.asm b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvc_mc.asm new file mode 100644 index 0000000000..30aa97c65a --- /dev/null +++ b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvc_mc.asm @@ -0,0 +1,302 @@ +; /* +; * Provide SIMD MC functions for VVC decoding +; * +; * Copyright © 2021, VideoLAN and dav1d authors +; * Copyright © 2021, Two Orioles, LLC +; * All rights reserved. +; * +; * Copyright (c) 2023-2024 Nuo Mi +; * Copyright (c) 2023-2024 Wu Jianhua +; * +; * This file is part of FFmpeg. +; * +; * FFmpeg is free software; you can redistribute it and/or +; * modify it under the terms of the GNU Lesser General Public +; * License as published by the Free Software Foundation; either +; * version 2.1 of the License, or (at your option) any later version. +; * +; * FFmpeg is distributed in the hope that it will be useful, +; * but WITHOUT ANY WARRANTY; without even the implied warranty of +; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +; * Lesser General Public License for more details. +; * +; * You should have received a copy of the GNU Lesser General Public +; * License along with FFmpeg; if not, write to the Free Software +; * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +; */ + +%include "libavutil/x86/x86util.asm" + +%define MAX_PB_SIZE 128 + +SECTION_RODATA 32 + +%if ARCH_X86_64 + +%if HAVE_AVX2_EXTERNAL + +pw_0 times 2 dw 0 +pw_1 times 2 dw 1 +pw_4 times 2 dw 4 +pw_12 times 2 dw 12 +pw_256 times 2 dw 256 + +%macro AVG_JMP_TABLE 3-* + %xdefine %1_%2_%3_table (%%table - 2*%4) + %xdefine %%base %1_%2_%3_table + %xdefine %%prefix mangle(private_prefix %+ _vvc_%1_%2bpc_%3) + %%table: + %rep %0 - 3 + dd %%prefix %+ .w%4 - %%base + %rotate 1 + %endrep +%endmacro + +AVG_JMP_TABLE avg, 8, avx2, 2, 4, 8, 16, 32, 64, 128 +AVG_JMP_TABLE avg, 16, avx2, 2, 4, 8, 16, 32, 64, 128 +AVG_JMP_TABLE w_avg, 8, avx2, 2, 4, 8, 16, 32, 64, 128 +AVG_JMP_TABLE w_avg, 16, avx2, 2, 4, 8, 16, 32, 64, 128 + +SECTION .text + +%macro AVG_W16_FN 3 ; bpc, op, count + %assign %%i 0 + %rep %3 + %define off %%i + AVG_LOAD_W16 0, off + %2 + AVG_SAVE_W16 %1, 0, off + + + AVG_LOAD_W16 1, off + %2 + AVG_SAVE_W16 %1, 1, off + + %assign %%i %%i+1 + %endrep +%endmacro + +%macro AVG_FN 2 ; bpc, op + jmp wq + +.w2: + movd xm0, [src0q] + pinsrd xm0, [src0q + AVG_SRC_STRIDE], 1 + movd xm1, [src1q] + pinsrd xm1, [src1q + AVG_SRC_STRIDE], 1 + %2 + AVG_SAVE_W2 %1 + AVG_LOOP_END .w2 + +.w4: + movq xm0, [src0q] + pinsrq xm0, [src0q + AVG_SRC_STRIDE], 1 + movq xm1, [src1q] + pinsrq xm1, [src1q + AVG_SRC_STRIDE], 1 + %2 + AVG_SAVE_W4 %1 + + AVG_LOOP_END .w4 + +.w8: + vinserti128 m0, m0, [src0q], 0 + vinserti128 m0, m0, [src0q + AVG_SRC_STRIDE], 1 + vinserti128 m1, m1, [src1q], 0 + vinserti128 m1, m1, [src1q + AVG_SRC_STRIDE], 1 + %2 + AVG_SAVE_W8 %1 + + AVG_LOOP_END .w8 + +.w16: + AVG_W16_FN %1, %2, 1 + + AVG_LOOP_END .w16 + +.w32: + AVG_W16_FN %1, %2, 2 + + AVG_LOOP_END .w32 + +.w64: + AVG_W16_FN %1, %2, 4 + + AVG_LOOP_END .w64 + +.w128: + AVG_W16_FN %1, %2, 8 + + AVG_LOOP_END .w128 + +.ret: + RET +%endmacro + +%macro AVG 0 + paddsw m0, m1 + pmulhrsw m0, m2 + CLIPW m0, m3, m4 +%endmacro + +%macro W_AVG 0 + punpckhwd m5, m0, m1 + pmaddwd m5, m3 + paddd m5, m4 + psrad m5, xm2 + + punpcklwd m0, m0, m1 + pmaddwd m0, m3 + paddd m0, m4 + psrad m0, xm2 + + packssdw m0, m5 + CLIPW m0, m6, m7 +%endmacro + +%macro AVG_LOAD_W16 2 ; line, offset + movu m0, [src0q + %1 * AVG_SRC_STRIDE + %2 * 32] + movu m1, [src1q + %1 * AVG_SRC_STRIDE + %2 * 32] +%endmacro + +%macro AVG_SAVE_W2 1 ;bpc + %if %1 == 16 + pextrd [dstq], xm0, 0 + pextrd [dstq + strideq], xm0, 1 + %else + packuswb m0, m0 + pextrw [dstq], xm0, 0 + pextrw [dstq + strideq], xm0, 1 + %endif +%endmacro + +%macro AVG_SAVE_W4 1 ;bpc + %if %1 == 16 + pextrq [dstq], xm0, 0 + pextrq [dstq + strideq], xm0, 1 + %else + packuswb m0, m0 + pextrd [dstq], xm0, 0 + pextrd [dstq + strideq], xm0, 1 + %endif +%endmacro + +%macro AVG_SAVE_W8 1 ;bpc + %if %1 == 16 + vextracti128 [dstq], m0, 0 + vextracti128 [dstq + strideq], m0, 1 + %else + packuswb m0, m0 + vpermq m0, m0, 1000b + pextrq [dstq], xm0, 0 + pextrq [dstq + strideq], xm0, 1 + %endif +%endmacro + +%macro AVG_SAVE_W16 3 ; bpc, line, offset + %if %1 == 16 + movu [dstq + %2 * strideq + %3 * 32], m0 + %else + packuswb m0, m0 + vpermq m0, m0, 1000b + vextracti128 [dstq + %2 * strideq + %3 * 16], m0, 0 + %endif +%endmacro + +%macro AVG_LOOP_END 1 + sub hd, 2 + je .ret + + lea src0q, [src0q + 2 * AVG_SRC_STRIDE] + lea src1q, [src1q + 2 * AVG_SRC_STRIDE] + lea dstq, [dstq + 2 * strideq] + jmp %1 +%endmacro + +%define AVG_SRC_STRIDE MAX_PB_SIZE*2 + +;void ff_vvc_avg_%1bpc_avx2(uint8_t *dst, ptrdiff_t dst_stride, +; const int16_t *src0, const int16_t *src1, intptr_t width, intptr_t height, intptr_t pixel_max); +%macro VVC_AVG_AVX2 1 +cglobal vvc_avg_%1bpc, 4, 7, 5, dst, stride, src0, src1, w, h, bd + movifnidn hd, hm + + pxor m3, m3 ; pixel min + vpbroadcastw m4, bdm ; pixel max + + movifnidn bdd, bdm + inc bdd + tzcnt bdd, bdd ; bit depth + + sub bdd, 8 + movd xm0, bdd + vpbroadcastd m1, [pw_4] + pminuw m0, m1 + vpbroadcastd m2, [pw_256] + psllw m2, xm0 ; shift + + lea r6, [avg_%1 %+ SUFFIX %+ _table] + tzcnt wd, wm + movsxd wq, dword [r6+wq*4] + add wq, r6 + AVG_FN %1, AVG +%endmacro + +;void ff_vvc_w_avg_%1bpc_avx(uint8_t *dst, ptrdiff_t dst_stride, +; const int16_t *src0, const int16_t *src1, intptr_t width, intptr_t height, +; intptr_t denom, intptr_t w0, intptr_t w1, intptr_t o0, intptr_t o1, intptr_t pixel_max); +%macro VVC_W_AVG_AVX2 1 +cglobal vvc_w_avg_%1bpc, 4, 8, 8, dst, stride, src0, src1, w, h, t0, t1 + + movifnidn hd, hm + + movifnidn t0d, r8m ; w1 + shl t0d, 16 + mov t0w, r7m ; w0 + movd xm3, t0d + vpbroadcastd m3, xm3 ; w0, w1 + + pxor m6, m6 ;pixel min + vpbroadcastw m7, r11m ;pixel max + + mov t1q, rcx ; save ecx + mov ecx, r11m + inc ecx ; bd + tzcnt ecx, ecx + sub ecx, 8 + mov t0d, r9m ; o0 + add t0d, r10m ; o1 + shl t0d, cl + inc t0d ;((o0 + o1) << (BIT_DEPTH - 8)) + 1 + + neg ecx + add ecx, 4 ; bd - 12 + cmovl ecx, [pw_0] + add ecx, 3 + add ecx, r6m + movd xm2, ecx ; shift + + dec ecx + shl t0d, cl + movd xm4, t0d + vpbroadcastd m4, xm4 ; offset + mov rcx, t1q ; restore ecx + + lea r6, [w_avg_%1 %+ SUFFIX %+ _table] + tzcnt wd, wm + movsxd wq, dword [r6+wq*4] + add wq, r6 + AVG_FN %1, W_AVG +%endmacro + +INIT_YMM avx2 + +VVC_AVG_AVX2 16 + +VVC_AVG_AVX2 8 + +VVC_W_AVG_AVX2 16 + +VVC_W_AVG_AVX2 8 +%endif + +%endif diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c new file mode 100644 index 0000000000..909ef9f56b --- /dev/null +++ b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c @@ -0,0 +1,254 @@ +/* + * VVC DSP init for x86 + * + * Copyright (C) 2022-2024 Nuo Mi + * Copyright (c) 2023-2024 Wu Jianhua + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#include "config.h" + +#include "libavutil/cpu.h" +#include "libavutil/x86/asm.h" +#include "libavutil/x86/cpu.h" +#include "libavcodec/vvc/vvcdec.h" +#include "libavcodec/vvc/vvc_ctu.h" +#include "libavcodec/vvc/vvcdsp.h" +#include "libavcodec/x86/h26x/h2656dsp.h" + +#define FW_PUT(name, depth, opt) \ +static void ff_vvc_put_ ## name ## _ ## depth ## _##opt(int16_t *dst, const uint8_t *src, ptrdiff_t srcstride, \ + int height, const int8_t *hf, const int8_t *vf, int width) \ +{ \ + ff_h2656_put_## name ## _ ## depth ## _##opt(dst, 2 * MAX_PB_SIZE, src, srcstride, height, hf, vf, width); \ +} + +#define FW_PUT_TAP(fname, bitd, opt ) \ + FW_PUT(fname##4, bitd, opt ); \ + FW_PUT(fname##8, bitd, opt ); \ + FW_PUT(fname##16, bitd, opt ); \ + FW_PUT(fname##32, bitd, opt ); \ + FW_PUT(fname##64, bitd, opt ); \ + FW_PUT(fname##128, bitd, opt ); \ + +#define FW_PUT_4TAP(fname, bitd, opt) \ + FW_PUT(fname ## 2, bitd, opt) \ + FW_PUT_TAP(fname, bitd, opt) + +#define FW_PUT_4TAP_SSE4(bitd) \ + FW_PUT_4TAP(pixels, bitd, sse4) \ + FW_PUT_4TAP(4tap_h, bitd, sse4) \ + FW_PUT_4TAP(4tap_v, bitd, sse4) \ + FW_PUT_4TAP(4tap_hv, bitd, sse4) + +#define FW_PUT_8TAP_SSE4(bitd) \ + FW_PUT_TAP(8tap_h, bitd, sse4) \ + FW_PUT_TAP(8tap_v, bitd, sse4) \ + FW_PUT_TAP(8tap_hv, bitd, sse4) + +#define FW_PUT_SSE4(bitd) \ + FW_PUT_4TAP_SSE4(bitd) \ + FW_PUT_8TAP_SSE4(bitd) + +FW_PUT_SSE4( 8); +FW_PUT_SSE4(10); +FW_PUT_SSE4(12); + +#define FW_PUT_TAP_AVX2(n, bitd) \ + FW_PUT(n ## tap_h32, bitd, avx2) \ + FW_PUT(n ## tap_h64, bitd, avx2) \ + FW_PUT(n ## tap_h128, bitd, avx2) \ + FW_PUT(n ## tap_v32, bitd, avx2) \ + FW_PUT(n ## tap_v64, bitd, avx2) \ + FW_PUT(n ## tap_v128, bitd, avx2) + +#define FW_PUT_AVX2(bitd) \ + FW_PUT(pixels32, bitd, avx2) \ + FW_PUT(pixels64, bitd, avx2) \ + FW_PUT(pixels128, bitd, avx2) \ + FW_PUT_TAP_AVX2(4, bitd) \ + FW_PUT_TAP_AVX2(8, bitd) \ + +FW_PUT_AVX2( 8) +FW_PUT_AVX2(10) +FW_PUT_AVX2(12) + +#define FW_PUT_TAP_16BPC_AVX2(n, bitd) \ + FW_PUT(n ## tap_h16, bitd, avx2) \ + FW_PUT(n ## tap_v16, bitd, avx2) \ + FW_PUT(n ## tap_hv16, bitd, avx2) \ + FW_PUT(n ## tap_hv32, bitd, avx2) \ + FW_PUT(n ## tap_hv64, bitd, avx2) \ + FW_PUT(n ## tap_hv128, bitd, avx2) + +#define FW_PUT_16BPC_AVX2(bitd) \ + FW_PUT(pixels16, bitd, avx2) \ + FW_PUT_TAP_16BPC_AVX2(4, bitd) \ + FW_PUT_TAP_16BPC_AVX2(8, bitd); + +FW_PUT_16BPC_AVX2(10); +FW_PUT_16BPC_AVX2(12); + +#define PEL_LINK(dst, C, W, idx1, idx2, name, D, opt) \ + dst[C][W][idx1][idx2] = ff_vvc_put_## name ## _ ## D ## _##opt; \ + dst ## _uni[C][W][idx1][idx2] = ff_h2656_put_uni_ ## name ## _ ## D ## _##opt; \ + +#define MC_TAP_LINKS(pointer, C, my, mx, fname, bitd, opt ) \ + PEL_LINK(pointer, C, 1, my , mx , fname##4 , bitd, opt ); \ + PEL_LINK(pointer, C, 2, my , mx , fname##8 , bitd, opt ); \ + PEL_LINK(pointer, C, 3, my , mx , fname##16, bitd, opt ); \ + PEL_LINK(pointer, C, 4, my , mx , fname##32, bitd, opt ); \ + PEL_LINK(pointer, C, 5, my , mx , fname##64, bitd, opt ); \ + PEL_LINK(pointer, C, 6, my , mx , fname##128, bitd, opt ); + +#define MC_8TAP_LINKS(pointer, my, mx, fname, bitd, opt) \ + MC_TAP_LINKS(pointer, LUMA, my, mx, fname, bitd, opt) + +#define MC_8TAP_LINKS_SSE4(bd) \ + MC_8TAP_LINKS(c->inter.put, 0, 0, pixels, bd, sse4); \ + MC_8TAP_LINKS(c->inter.put, 0, 1, 8tap_h, bd, sse4); \ + MC_8TAP_LINKS(c->inter.put, 1, 0, 8tap_v, bd, sse4); \ + MC_8TAP_LINKS(c->inter.put, 1, 1, 8tap_hv, bd, sse4) + +#define MC_4TAP_LINKS(pointer, my, mx, fname, bitd, opt) \ + PEL_LINK(pointer, CHROMA, 0, my , mx , fname##2 , bitd, opt ); \ + MC_TAP_LINKS(pointer, CHROMA, my, mx, fname, bitd, opt) \ + +#define MC_4TAP_LINKS_SSE4(bd) \ + MC_4TAP_LINKS(c->inter.put, 0, 0, pixels, bd, sse4); \ + MC_4TAP_LINKS(c->inter.put, 0, 1, 4tap_h, bd, sse4); \ + MC_4TAP_LINKS(c->inter.put, 1, 0, 4tap_v, bd, sse4); \ + MC_4TAP_LINKS(c->inter.put, 1, 1, 4tap_hv, bd, sse4) + +#define MC_LINK_SSE4(bd) \ + MC_4TAP_LINKS_SSE4(bd) \ + MC_8TAP_LINKS_SSE4(bd) + +#define MC_TAP_LINKS_AVX2(C,tap,bd) do { \ + PEL_LINK(c->inter.put, C, 4, 0, 0, pixels32, bd, avx2) \ + PEL_LINK(c->inter.put, C, 5, 0, 0, pixels64, bd, avx2) \ + PEL_LINK(c->inter.put, C, 6, 0, 0, pixels128, bd, avx2) \ + PEL_LINK(c->inter.put, C, 4, 0, 1, tap##tap_h32, bd, avx2) \ + PEL_LINK(c->inter.put, C, 5, 0, 1, tap##tap_h64, bd, avx2) \ + PEL_LINK(c->inter.put, C, 6, 0, 1, tap##tap_h128, bd, avx2) \ + PEL_LINK(c->inter.put, C, 4, 1, 0, tap##tap_v32, bd, avx2) \ + PEL_LINK(c->inter.put, C, 5, 1, 0, tap##tap_v64, bd, avx2) \ + PEL_LINK(c->inter.put, C, 6, 1, 0, tap##tap_v128, bd, avx2) \ + } while (0) + +#define MC_LINKS_AVX2(bd) \ + MC_TAP_LINKS_AVX2(LUMA, 8, bd); \ + MC_TAP_LINKS_AVX2(CHROMA, 4, bd); + +#define MC_TAP_LINKS_16BPC_AVX2(C, tap, bd) do { \ + PEL_LINK(c->inter.put, C, 3, 0, 0, pixels16, bd, avx2) \ + PEL_LINK(c->inter.put, C, 3, 0, 1, tap##tap_h16, bd, avx2) \ + PEL_LINK(c->inter.put, C, 3, 1, 0, tap##tap_v16, bd, avx2) \ + PEL_LINK(c->inter.put, C, 3, 1, 1, tap##tap_hv16, bd, avx2) \ + PEL_LINK(c->inter.put, C, 4, 1, 1, tap##tap_hv32, bd, avx2) \ + PEL_LINK(c->inter.put, C, 5, 1, 1, tap##tap_hv64, bd, avx2) \ + PEL_LINK(c->inter.put, C, 6, 1, 1, tap##tap_hv128, bd, avx2) \ + } while (0) + +#define MC_LINKS_16BPC_AVX2(bd) \ + MC_TAP_LINKS_16BPC_AVX2(LUMA, 8, bd); \ + MC_TAP_LINKS_16BPC_AVX2(CHROMA, 4, bd); + +#define bf(fn, bd, opt) fn##_##bd##_##opt +#define BF(fn, bpc, opt) fn##_##bpc##bpc_##opt + +#define AVG_BPC_FUNC(bpc, opt) \ +void BF(ff_vvc_avg, bpc, opt)(uint8_t *dst, ptrdiff_t dst_stride, \ + const int16_t *src0, const int16_t *src1, intptr_t width, intptr_t height, intptr_t pixel_max); \ +void BF(ff_vvc_w_avg, bpc, opt)(uint8_t *dst, ptrdiff_t dst_stride, \ + const int16_t *src0, const int16_t *src1, intptr_t width, intptr_t height, \ + intptr_t denom, intptr_t w0, intptr_t w1, intptr_t o0, intptr_t o1, intptr_t pixel_max); + +#define AVG_FUNCS(bpc, bd, opt) \ +static void bf(avg, bd, opt)(uint8_t *dst, ptrdiff_t dst_stride, \ + const int16_t *src0, const int16_t *src1, int width, int height) \ +{ \ + BF(ff_vvc_avg, bpc, opt)(dst, dst_stride, src0, src1, width, height, (1 << bd) - 1); \ +} \ +static void bf(w_avg, bd, opt)(uint8_t *dst, ptrdiff_t dst_stride, \ + const int16_t *src0, const int16_t *src1, int width, int height, \ + int denom, int w0, int w1, int o0, int o1) \ +{ \ + BF(ff_vvc_w_avg, bpc, opt)(dst, dst_stride, src0, src1, width, height, \ + denom, w0, w1, o0, o1, (1 << bd) - 1); \ +} + +AVG_BPC_FUNC(8, avx2) +AVG_BPC_FUNC(16, avx2) + +AVG_FUNCS(8, 8, avx2) +AVG_FUNCS(16, 10, avx2) +AVG_FUNCS(16, 12, avx2) + +#define AVG_INIT(bd, opt) do { \ + c->inter.avg = bf(avg, bd, opt); \ + c->inter.w_avg = bf(w_avg, bd, opt); \ +} while (0) + +void ff_vvc_dsp_init_x86(VVCDSPContext *const c, const int bd) +{ + const int cpu_flags = av_get_cpu_flags(); + + if (ARCH_X86_64) { + if (bd == 8) { + if (EXTERNAL_SSE4(cpu_flags)) { + MC_LINK_SSE4(8); + } + if (EXTERNAL_AVX2_FAST(cpu_flags)) { + MC_LINKS_AVX2(8); + } + } else if (bd == 10) { + if (EXTERNAL_SSE4(cpu_flags)) { + MC_LINK_SSE4(10); + } + if (EXTERNAL_AVX2_FAST(cpu_flags)) { + MC_LINKS_AVX2(10); + MC_LINKS_16BPC_AVX2(10); + } + } else if (bd == 12) { + if (EXTERNAL_SSE4(cpu_flags)) { + MC_LINK_SSE4(12); + } + if (EXTERNAL_AVX2_FAST(cpu_flags)) { + MC_LINKS_AVX2(12); + MC_LINKS_16BPC_AVX2(12); + } + } + + if (EXTERNAL_AVX2(cpu_flags)) { + switch (bd) { + case 8: + AVG_INIT(8, avx2); + break; + case 10: + AVG_INIT(10, avx2); + break; + case 12: + AVG_INIT(12, avx2); + break; + default: + break; + } + } + } +} diff --git a/src/ExtLib/ffmpeg/libavfilter/buffersrc.c b/src/ExtLib/ffmpeg/libavfilter/buffersrc.c index afe69433b2..6e450ff6b7 100644 --- a/src/ExtLib/ffmpeg/libavfilter/buffersrc.c +++ b/src/ExtLib/ffmpeg/libavfilter/buffersrc.c @@ -49,10 +49,10 @@ typedef struct BufferSourceContext { unsigned nb_failed_requests; /* video only */ - int w, h; - enum AVPixelFormat pix_fmt; - enum AVColorSpace color_space; - enum AVColorRange color_range; + int w, h, prev_w, prev_h; + enum AVPixelFormat pix_fmt, prev_pix_fmt; + enum AVColorSpace color_space, prev_color_space; + enum AVColorRange color_range, prev_color_range; AVRational pixel_aspect; AVBufferRef *hw_frames_ctx; @@ -66,16 +66,30 @@ typedef struct BufferSourceContext { int eof; int64_t last_pts; + int link_delta, prev_delta; } BufferSourceContext; #define CHECK_VIDEO_PARAM_CHANGE(s, c, width, height, format, csp, range, pts)\ - if (c->w != width || c->h != height || c->pix_fmt != format ||\ - c->color_space != csp || c->color_range != range) {\ - av_log(s, AV_LOG_INFO, "filter context - w: %d h: %d fmt: %d csp: %s range: %s, incoming frame - w: %d h: %d fmt: %d csp: %s range: %s pts_time: %s\n",\ + c->link_delta = c->w != width || c->h != height || c->pix_fmt != format ||\ + c->color_space != csp || c->color_range != range;\ + c->prev_delta = c->prev_w != width || c->prev_h != height || c->prev_pix_fmt != format ||\ + c->prev_color_space != csp || c->prev_color_range != range;\ + if (c->link_delta) {\ + int loglevel = c->prev_delta ? AV_LOG_WARNING : AV_LOG_DEBUG;\ + av_log(s, loglevel, "Changing video frame properties on the fly is not supported by all filters.\n");\ + av_log(s, loglevel, "filter context - w: %d h: %d fmt: %d csp: %s range: %s, incoming frame - w: %d h: %d fmt: %d csp: %s range: %s pts_time: %s\n",\ c->w, c->h, c->pix_fmt, av_color_space_name(c->color_space), av_color_range_name(c->color_range),\ width, height, format, av_color_space_name(csp), av_color_range_name(range),\ av_ts2timestr(pts, &s->outputs[0]->time_base));\ - av_log(s, AV_LOG_WARNING, "Changing video frame properties on the fly is not supported by all filters.\n");\ + }\ + if (c->prev_delta) {\ + if (!c->link_delta)\ + av_log(s, AV_LOG_VERBOSE, "video frame properties congruent with link at pts_time: %s\n", av_ts2timestr(pts, &s->outputs[0]->time_base));\ + c->prev_w = width;\ + c->prev_h = height;\ + c->prev_pix_fmt = format;\ + c->prev_color_space = csp;\ + c->prev_color_range = range;\ } #define CHECK_AUDIO_PARAM_CHANGE(s, c, srate, layout, format, pts)\ @@ -111,12 +125,12 @@ int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *par switch (ctx->filter->outputs[0].type) { case AVMEDIA_TYPE_VIDEO: if (param->format != AV_PIX_FMT_NONE) { - s->pix_fmt = param->format; + s->pix_fmt = s->prev_pix_fmt = param->format; } if (param->width > 0) - s->w = param->width; + s->w = s->prev_w = param->width; if (param->height > 0) - s->h = param->height; + s->h = s->prev_h = param->height; if (param->sample_aspect_ratio.num > 0 && param->sample_aspect_ratio.den > 0) s->pixel_aspect = param->sample_aspect_ratio; if (param->frame_rate.num > 0 && param->frame_rate.den > 0) @@ -128,9 +142,9 @@ int av_buffersrc_parameters_set(AVFilterContext *ctx, AVBufferSrcParameters *par return AVERROR(ENOMEM); } if (param->color_space != AVCOL_SPC_UNSPECIFIED) - s->color_space = param->color_space; + s->color_space = s->prev_color_space = param->color_space; if (param->color_range != AVCOL_RANGE_UNSPECIFIED) - s->color_range = param->color_range; + s->color_range = s->prev_color_range = param->color_range; break; case AVMEDIA_TYPE_AUDIO: if (param->format != AV_SAMPLE_FMT_NONE) { From fa0f32d351a642eff7cef06aad23f52bfa69e494 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sat, 3 Feb 2024 10:43:40 +1000 Subject: [PATCH 13/87] =?UTF-8?q?=D0=9A=D0=BE=D1=81=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=B2=D1=8B=D0=B2=D0=BE=D0=B4=D0=B0=20?= =?UTF-8?q?=D0=BD=D1=83=D0=BB=D0=B5=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=B7=D0=BD?= =?UTF-8?q?=D0=B0=D1=87=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=BF=D0=BE=D0=BB=D1=8F?= =?UTF-8?q?=20BITMAPINFOHEADER::biCompression.=20=D0=A3=D0=B4=D0=B0=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BD=D0=B5=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D1=83=D0=B5=D0=BC=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=B4.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DSUtil/text.cpp | 33 +++++---------------------------- src/DSUtil/text.h | 3 +-- 2 files changed, 6 insertions(+), 30 deletions(-) diff --git a/src/DSUtil/text.cpp b/src/DSUtil/text.cpp index 31ee85fe3b..c97cd4328e 100644 --- a/src/DSUtil/text.cpp +++ b/src/DSUtil/text.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -36,33 +36,6 @@ DWORD CharSetToCodePage(DWORD dwCharSet) return cs.ciACP; } -CStringA ConvertMBCS(CStringA str, DWORD SrcCharSet, DWORD DstCharSet) -{ - WCHAR* utf16 = DNew WCHAR[str.GetLength()+1]; - memset(utf16, 0, (str.GetLength()+1)*sizeof(WCHAR)); - - CHAR* mbcs = DNew CHAR[str.GetLength()*6+1]; - memset(mbcs, 0, str.GetLength()*6+1); - - int len = MultiByteToWideChar( - CharSetToCodePage(SrcCharSet), 0, - str, -1, // null terminated string - utf16, str.GetLength()+1); - - len = WideCharToMultiByte( - CharSetToCodePage(DstCharSet), 0, - utf16, len, - mbcs, str.GetLength()*6, - nullptr, nullptr); - - str = mbcs; - - delete [] utf16; - delete [] mbcs; - - return str; -} - CStringA UrlEncode(const CStringA& str_in, const bool bArg/* = false*/) { CStringA str_out; @@ -447,6 +420,10 @@ CStringW FormatNumber(const CStringW& szNumber, const bool bNoFractionalDigits / CStringW FourccToWStr(uint32_t fourcc) { + if (fourcc == 0) { + return L"0"; + } + CStringW ret; for (unsigned i = 0; i < 4; i++) { diff --git a/src/DSUtil/text.h b/src/DSUtil/text.h index b94740103d..2e9d6065c5 100644 --- a/src/DSUtil/text.h +++ b/src/DSUtil/text.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -135,7 +135,6 @@ ImplodeEsc(const std::list& sl, const SEP sep, const SEP esc = '\\') } extern DWORD CharSetToCodePage(DWORD dwCharSet); -extern CStringA ConvertMBCS(CStringA str, DWORD SrcCharSet, DWORD DstCharSet); extern CStringA UrlEncode(const CStringA& str_in, const bool bArg = false); extern CStringA UrlDecode(const CStringA& str_in); extern CStringW UrlDecode(LPCWSTR lpWideCharStr); From f8c3d499c322d6674e4f0189340d669e8458274a Mon Sep 17 00:00:00 2001 From: v0lt Date: Sun, 4 Feb 2024 10:59:37 +0300 Subject: [PATCH 14/87] =?UTF-8?q?=D0=91=D0=BB=D0=BE=D0=BA=D0=B8=D1=80?= =?UTF-8?q?=D1=83=D0=B5=D0=BC=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC=D1=8B=D1=85=20=D0=B2=D0=BD=D0=B5?= =?UTF-8?q?=D1=88=D0=BD=D0=B8=D1=85=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE=D1=80?= =?UTF-8?q?=D0=B5=D0=BD=D0=B4=D0=B5=D1=80=D0=B5=D1=80=D0=BE=D0=B2=20=D0=B2?= =?UTF-8?q?=20=D1=81=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20=D0=B2=D0=BD=D0=B5?= =?UTF-8?q?=D1=88=D0=BD=D0=B8=D1=85=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2.=20=D0=9F=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=B8=D0=B2=D0=B0=D0=B5=D0=BC=D1=8B=D0=B5=20=D0=B2=D0=B8=D0=B4?= =?UTF-8?q?=D0=B5=D0=BE=D1=80=D0=B5=D0=BD=D0=B4=D0=B5=D1=80=D0=B5=D1=80?= =?UTF-8?q?=D1=8B=20=D0=B2=D1=8B=D0=B1=D0=B8=D1=80=D0=B0=D1=8E=D1=82=D1=81?= =?UTF-8?q?=D1=8F=20=D0=B2=20=D0=BF=D0=B0=D0=BD=D0=B5=D0=BB=D0=B8=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20"=D0=92=D0=B8?= =?UTF-8?q?=D0=B4=D0=B5=D0=BE".?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Причина: Пользователи часто добавляют MPC VR или madVR во внешние фильтры, после чего эти видеорендереры работают неполноценно. Внешние видеорендеры, которые отсутствуют в панели настроек "Видео", все также можно добавлять во внешние фильтры для экспериментов. --- src/apps/mpcresources/mplayerc.br.rc | 3 ++- src/apps/mpcresources/mplayerc.by.rc | 3 ++- src/apps/mpcresources/mplayerc.ca.rc | 3 ++- src/apps/mpcresources/mplayerc.cz.rc | 3 ++- src/apps/mpcresources/mplayerc.de.rc | 3 ++- src/apps/mpcresources/mplayerc.el.rc | 3 ++- src/apps/mpcresources/mplayerc.es.rc | 3 ++- src/apps/mpcresources/mplayerc.eu.rc | 3 ++- src/apps/mpcresources/mplayerc.fr.rc | 3 ++- src/apps/mpcresources/mplayerc.he.rc | 3 ++- src/apps/mpcresources/mplayerc.hr.rc | 3 ++- src/apps/mpcresources/mplayerc.hu.rc | 3 ++- src/apps/mpcresources/mplayerc.hy.rc | 3 ++- src/apps/mpcresources/mplayerc.it.rc | 3 ++- src/apps/mpcresources/mplayerc.ja.rc | 3 ++- src/apps/mpcresources/mplayerc.kr.rc | 3 ++- src/apps/mpcresources/mplayerc.nl.rc | 3 ++- src/apps/mpcresources/mplayerc.pl.rc | 3 ++- src/apps/mpcresources/mplayerc.ro.rc | 3 ++- src/apps/mpcresources/mplayerc.ru.rc | 3 ++- src/apps/mpcresources/mplayerc.sc.rc | 3 ++- src/apps/mpcresources/mplayerc.sk.rc | 3 ++- src/apps/mpcresources/mplayerc.sv.rc | 3 ++- src/apps/mpcresources/mplayerc.tc.rc | 3 ++- src/apps/mpcresources/mplayerc.tr.rc | 3 ++- src/apps/mpcresources/mplayerc.ua.rc | 3 ++- src/apps/mpcresources/text/mplayerc.br.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.by.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ca.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.cz.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.de.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.el.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.es.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.eu.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.fr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.he.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.hr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.hu.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.hy.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.it.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ja.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.kr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.nl.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.pl.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ro.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ru.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.sc.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.sk.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.sv.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.tc.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.tr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ua.rc.txt | 1 + src/apps/mplayerc/AppSettings.cpp | 18 ++++++------- src/apps/mplayerc/PPageExternalFilters.cpp | 27 ++++++++++++++++++- src/apps/mplayerc/PPageExternalFilters.h | 3 ++- src/apps/mplayerc/mplayerc.rc | 3 ++- src/apps/mplayerc/resource.h | 1 + 58 files changed, 118 insertions(+), 39 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.br.rc b/src/apps/mpcresources/mplayerc.br.rc index 79a4b99977..fc91317499 100644 --- a/src/apps/mpcresources/mplayerc.br.rc +++ b/src/apps/mpcresources/mplayerc.br.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Parece VMR-9, mas usa um redimensionador bicúbico verdadeiro." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Parece VMR-9, mas usa um redimensionador bicúbico verdadeiro." IDS_DESC_NULLVR_ANY "Conecta-se a qualquer tipo de mídia de vídeo e enviará as amostras a lugar nenhum. Use-o quando não precisar ver o vídeo e quiser evitar o uso da CPU desnecessariamente." IDS_DESC_NULLVR_UNCOMP "Igual ao renderizador nulo normal, mas só se conectará a tipos não comprimido." IDS_DESC_EVR "Renderizador de vídeo com suporte para decodificação de hardware." diff --git a/src/apps/mpcresources/mplayerc.by.rc b/src/apps/mpcresources/mplayerc.by.rc index e93d9d44c3..e62eb379dd 100644 --- a/src/apps/mpcresources/mplayerc.by.rc +++ b/src/apps/mpcresources/mplayerc.by.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Падлучаецца да любога тыпу відэададзеных і адсылае ўваходныя кадры ў нікуды. Рэжым можа спатрэбіцца для захавання рэсурсаў працэсара ў выпадку калі патрэбны толькі гук." IDS_DESC_NULLVR_UNCOMP "Тое ж што і нармалёвы Null-рэндэр, але падлучаецца толькі да несціснутых тыпаў дадзеных." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.ca.rc b/src/apps/mpcresources/mplayerc.ca.rc index ed6a45092f..b097113aa6 100644 --- a/src/apps/mpcresources/mplayerc.ca.rc +++ b/src/apps/mpcresources/mplayerc.ca.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Conecta a cualsevol tipus de mitjà de vídeo i manda les mostres a cap lloc. Utilitza'l quant no necesitis veure el vídeo, i vulguis evitar l'ús no necessari de la cpu." IDS_DESC_NULLVR_UNCOMP "Igual que el renderitzador null normal, perè només conectarà a tipus sense compresió." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.cz.rc b/src/apps/mpcresources/mplayerc.cz.rc index 58225a14a6..9598966cdc 100644 --- a/src/apps/mpcresources/mplayerc.cz.rc +++ b/src/apps/mpcresources/mplayerc.cz.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Připojí se k jakémukoliv typu videa a začne všechny vstupní vzorky zahazovat. Použijte ho pokud nepotřebujete video zobrazit a chcete ušetřit výkon procesoru." IDS_DESC_NULLVR_UNCOMP "Stejný jako běžný Null renderer, ale tento se připojí pouze k nekomprimovaným typům videa." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.de.rc b/src/apps/mpcresources/mplayerc.de.rc index 821a0c1467..19d1d0408b 100644 --- a/src/apps/mpcresources/mplayerc.de.rc +++ b/src/apps/mpcresources/mplayerc.de.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Ähnelt dem VMR-9, verwendet aber einen echten bikubischen Resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Ähnelt dem VMR-9, verwendet aber einen echten bikubischen Resizer." IDS_DESC_NULLVR_ANY "Stellt eine Verbindung zu allen videoartigen Medientypen her und sendet die eingehenden Samples ins Nichts. Sinnvoll, wenn keine Videoausgabe benötigt wird, um die CPU zu entlasten." IDS_DESC_NULLVR_UNCOMP "Wie der normale Null-Renderer, kann aber nur mit unkomprimierten Videotypen verbunden werden." IDS_DESC_EVR "Videorenderer mit GPU Hardwarebeschleunigung" diff --git a/src/apps/mpcresources/mplayerc.el.rc b/src/apps/mpcresources/mplayerc.el.rc index d0ad90010d..2fc42d3baa 100644 --- a/src/apps/mpcresources/mplayerc.el.rc +++ b/src/apps/mpcresources/mplayerc.el.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Μοιάζει με VMR-9, αλλά χρησιμοποιεί ένα πραγματικό δικυβικό resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Μοιάζει με VMR-9, αλλά χρησιμοποιεί ένα πραγματικό δικυβικό resizer." IDS_DESC_NULLVR_ANY "Συνδέεται με οποιονδήποτε τύπο πολυμέσων βίντεο και στέλνει τα εισερχόμενα δείγματα στο πουθενά. Χρησιμοποιήστε το όταν δεν χρειάζεστε την εμφάνιση του βίντεο και θέλετε να εξοικονομήσετε επεξεργαστική ισχύ." IDS_DESC_NULLVR_UNCOMP "Όμοια με την κανονική ψευδή απόδοση, αλλά αυτή συνδέεται μόνο σε μη συμπιεσμένους τύπους." IDS_DESC_EVR "Πρόγραμμα απόδοσης βίντεο με υποστήριξη αποκωδικοποίησης υλικού." diff --git a/src/apps/mpcresources/mplayerc.es.rc b/src/apps/mpcresources/mplayerc.es.rc index 2fba5d0298..e8bd6ed7e5 100644 --- a/src/apps/mpcresources/mplayerc.es.rc +++ b/src/apps/mpcresources/mplayerc.es.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Se parece al VMR-9, pero usa un verdadero redimensionador bicúbico." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Se parece al VMR-9, pero usa un verdadero redimensionador bicúbico." IDS_DESC_NULLVR_ANY "Conecta a cualquier tipo de medio de video y manda las muestras a ningún lado. Utilízalo cuando no necesitas ver el video, y quieres evitar el uso de cpu innecesario." IDS_DESC_NULLVR_UNCOMP "Igual que el renderizador Nulo normal, pero este solo conectará a tipos sin compresión." IDS_DESC_EVR "Renderizador de video con soporte de decodificación por hardware." diff --git a/src/apps/mpcresources/mplayerc.eu.rc b/src/apps/mpcresources/mplayerc.eu.rc index 7b4e8fad3a..77da407d52 100644 --- a/src/apps/mpcresources/mplayerc.eu.rc +++ b/src/apps/mpcresources/mplayerc.eu.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Edozein bideo-erako multimedia motarekin elkarketatzen da eta barrurako laginak inora ez bidaliko ditu. Erabili bideo erakuspenik behar ez duzunean eta cpu-a gordetzea nahi duzunean alperrik lan egitetik." IDS_DESC_NULLVR_UNCOMP "Null aurkezle arrunta bezalakoa, baina honek hertsatugabeko motak bakarrik elkartzen ditu." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.fr.rc b/src/apps/mpcresources/mplayerc.fr.rc index decf32fe18..1f253a3630 100644 --- a/src/apps/mpcresources/mplayerc.fr.rc +++ b/src/apps/mpcresources/mplayerc.fr.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Ressemble à VMR-9, mais utilise un véritable redimensionneur bicubique." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Ressemble à VMR-9, mais utilise un véritable redimensionneur bicubique." IDS_DESC_NULLVR_ANY "Connection vers n'importe quel type de média vidéo et enverra l'exemple entrant vers nul part. Utilisez le quand vous n'avez pas besoin de l'affichage vidéo and que vous voulez garder des ressources processeur et éviter de le faire travailler inutilement." IDS_DESC_NULLVR_UNCOMP "Identique au rendu normal Null, mais ne se connectera qu'à des types non compressés." IDS_DESC_EVR "Moteur de rendu vidéo avec prise en charge du décodage matériel." diff --git a/src/apps/mpcresources/mplayerc.he.rc b/src/apps/mpcresources/mplayerc.he.rc index 1a8f820aec..73609eb492 100644 --- a/src/apps/mpcresources/mplayerc.he.rc +++ b/src/apps/mpcresources/mplayerc.he.rc @@ -3167,11 +3167,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "מתחבר לכל סוג מדיה דומה לוידאו וישלח את הדגימות הנכנסות לשום מקום. השתמש בזה כאשר אינך זקוק לתצוגת וידאו ואתה רוצה לחסוך עבודה מיותרת של המעבד." IDS_DESC_NULLVR_UNCOMP "כמו מציג ה-Null הרגיל, אך זה יתחבר רק לסוגים לא מכווצים." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.hr.rc b/src/apps/mpcresources/mplayerc.hr.rc index 2cdd97b1d9..4a1515431e 100644 --- a/src/apps/mpcresources/mplayerc.hr.rc +++ b/src/apps/mpcresources/mplayerc.hr.rc @@ -3167,11 +3167,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Izgleda poput VMR-9, ali koristi stvaran dvokubični mijenjač veličine." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Izgleda poput VMR-9, ali koristi stvaran dvokubični mijenjač veličine." IDS_DESC_NULLVR_ANY "Povezuje se na bilo koji video-liki tip medija i pristigle uzorke šalje u prazno. Koristite kad nemate potrebu za zaslonom i želite uštedjeti CPU od praznog hoda." IDS_DESC_NULLVR_UNCOMP "Jednako kao normalan Null render, jedino što se ovaj povezuje na nekomprimirane tipove." IDS_DESC_EVR "Video render uz hardversku podršku za dekodiranje." diff --git a/src/apps/mpcresources/mplayerc.hu.rc b/src/apps/mpcresources/mplayerc.hu.rc index d9c299d8ff..d3b5e4a33f 100644 --- a/src/apps/mpcresources/mplayerc.hu.rc +++ b/src/apps/mpcresources/mplayerc.hu.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Úgy néz ki, mint a VMR-9, de valódi bicubic átméretezőt használ." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Úgy néz ki, mint a VMR-9, de valódi bicubic átméretezőt használ." IDS_DESC_NULLVR_ANY "Minden videószerű médiatípushoz csatlakozni fog és a bejövő mintákat nem küldi ki sehová. Ezt akkor válassza, ha a videómegjelenítésre nincs szüksége és meg szeretné kímélni a processzorát a felesleges munkától." IDS_DESC_NULLVR_UNCOMP "Ugyan az, mint a sima Null átalakító, de ez csak tömörítetlen típusokhoz fog csatlakozni." IDS_DESC_EVR "Video megjelenítő hardveres dekódolási támogatással." diff --git a/src/apps/mpcresources/mplayerc.hy.rc b/src/apps/mpcresources/mplayerc.hy.rc index 5d6bb69a89..6efdf2287b 100644 --- a/src/apps/mpcresources/mplayerc.hy.rc +++ b/src/apps/mpcresources/mplayerc.hy.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Միանում է ցանկացած տեսակի տեսատվյալների և մտնող կադրերը ոչ մի տեղ չի ուղարկում։ Այս եղանակը կարող է օգտակար լինել, եթե անհրաժեշտ է պահպանել ռեսուրսներից միայն ձայնը։" IDS_DESC_NULLVR_UNCOMP "Նույնն է ինչ Նորմալ Null ցուցադրիչը, բայց միացվում է միայն տվյալների չսեղմված տեսակին։" IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.it.rc b/src/apps/mpcresources/mplayerc.it.rc index 248ba8189a..9263bf0086 100644 --- a/src/apps/mpcresources/mplayerc.it.rc +++ b/src/apps/mpcresources/mplayerc.it.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Sembra VMR-9, ma usa un vero ridimensionatore bicubico." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Sembra VMR-9, ma usa un vero ridimensionatore bicubico." IDS_DESC_NULLVR_ANY "Si collega a qualsiasi tipo di supporto simile a un video e non invierà i campioni in arrivo da nessuna parte. Usalo quando non hai bisogno del display video e vuoi evitare che la CPU funzioni inutilmente." IDS_DESC_NULLVR_UNCOMP "Come il normale renderer Null, ma questo si collegherà solo ai tipi non compressi." IDS_DESC_EVR "Render video con supporto per la decodifica hardware." diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index d179e79ad0..4bd3abde26 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" IDS_DESC_NULLVR_ANY "あらゆる動画の (ような) メディア タイプに接続して入力サンプルをどこにも出力しません。映像の表示を必要とせず、CPU を無駄な動作から節約したい場合に使用してください。" IDS_DESC_NULLVR_UNCOMP "標準の Null レンダラーと同じですが、これは非圧縮タイプにのみ接続します。" IDS_DESC_EVR "ハードウェア デコーディングに対応したレンダラーです。" diff --git a/src/apps/mpcresources/mplayerc.kr.rc b/src/apps/mpcresources/mplayerc.kr.rc index c57f1721ce..89d146b78c 100644 --- a/src/apps/mpcresources/mplayerc.kr.rc +++ b/src/apps/mpcresources/mplayerc.kr.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "VMR-9과 다름없지만, 고등 차수 보간을 사용합니다." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "VMR-9과 다름없지만, 고등 차수 보간을 사용합니다." IDS_DESC_NULLVR_ANY "모든 비디오 형식의 샘플을 출력하지 않습니다. 비디오를 출력하지 않으면서 CPU가 작동하도록 할 때 사용합니다." IDS_DESC_NULLVR_UNCOMP "일반적인 Null 렌더러와 다름없지만 압축되지 않은 형식만을 연결합니다." IDS_DESC_EVR "하드웨어 디코딩을 지원하는 비디오 렌더러입니다." diff --git a/src/apps/mpcresources/mplayerc.nl.rc b/src/apps/mpcresources/mplayerc.nl.rc index e5d2930432..c0aa807c3b 100644 --- a/src/apps/mpcresources/mplayerc.nl.rc +++ b/src/apps/mpcresources/mplayerc.nl.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Hetzelfde als VMR-9, maar met een echte bicubicresizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Hetzelfde als VMR-9, maar met een echte bicubicresizer." IDS_DESC_NULLVR_ANY "Verbind met elk video-achtig mediatype en zal de inkomende signalen in het, grote dan wel kleine, niets zenden. Gebruik dit als geen uitvoersignaal nodig is en de om de CPU te ontlasten." IDS_DESC_NULLVR_UNCOMP "Hetzelfde als de normale Null renderer, maar deze zal alleen verbinding maken met ongecomprimeerde types." IDS_DESC_EVR "Videorenderer met mogelijkheid tot hardwaredecoding." diff --git a/src/apps/mpcresources/mplayerc.pl.rc b/src/apps/mpcresources/mplayerc.pl.rc index 86bd39868a..e78a40bdff 100644 --- a/src/apps/mpcresources/mplayerc.pl.rc +++ b/src/apps/mpcresources/mplayerc.pl.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Łączy z dowolnym formatem wideo i wysyła przychodzące próbki donikąd. Użycie wskazane, gdy strumień wideo nie musi być wyświetlany, dzięki czemu można zmniejszyć obciążenie CPU." IDS_DESC_NULLVR_UNCOMP "Działa tak samo jak „Null renderer (anything)”, ale tylko odnośnie nieskompresowanych formatów." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.ro.rc b/src/apps/mpcresources/mplayerc.ro.rc index d07f6154ed..ffbdd1fb1b 100644 --- a/src/apps/mpcresources/mplayerc.ro.rc +++ b/src/apps/mpcresources/mplayerc.ro.rc @@ -3168,11 +3168,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Arată ca VMR-9, dar folosește un redimensionator bicubic adevărat." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Arată ca VMR-9, dar folosește un redimensionator bicubic adevărat." IDS_DESC_NULLVR_ANY "Se conectează la orice mediu de tip video și mostrele video nu vor fi trimise niciunde. Folosiți-l când nu aveți nevoie de afișarea video și vreți să salvați procesorul de la o muncă inutilă." IDS_DESC_NULLVR_UNCOMP "La fel ca randorul normal Null, dar acesta se va conecta doar la tipurile necomprimate." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.ru.rc b/src/apps/mpcresources/mplayerc.ru.rc index 8372b4cf91..62fd0ce0dd 100644 --- a/src/apps/mpcresources/mplayerc.ru.rc +++ b/src/apps/mpcresources/mplayerc.ru.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Похож на VMR-9, но использует корректное бикубическое изменения размера." + IDS_BLOCK_EXTERNAL_VR "Вы не можете добавить %s как внешний фильтр.\nВам необходимо выбрать прдепочтительный видеорендерерв в панели настроек Видео." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Похож на VMR-9, но использует корректное бикубическое изменения размера." IDS_DESC_NULLVR_ANY "Подключается к любому типу видеоданных и отсылает входящие кадры в никуда. Режим может пригодиться для сохранения ресурсов процессора в случае, если нужен только звук." IDS_DESC_NULLVR_UNCOMP "То же, что и нормальный Null-рендер, но подключается только к несжатым типам данных." IDS_DESC_EVR "Видеорендерер с поддержкой аппаратного декодирования." diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index c012390dd4..41996be58b 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "与 VMR-9 类同, 但是使用真正的 bicubic 改变大小。" + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "与 VMR-9 类同, 但是使用真正的 bicubic 改变大小。" IDS_DESC_NULLVR_ANY "连接到任意视频文件类型并且会将进入的采样信息传送到任意地方。当您不需要显示视频并希望节省不必要的 cpu 工作时请使用它。" IDS_DESC_NULLVR_UNCOMP "和普通的空渲染器相同, 但仅会被连接到未压缩的类型上。" IDS_DESC_EVR "此视频渲染器支持硬件解码" diff --git a/src/apps/mpcresources/mplayerc.sk.rc b/src/apps/mpcresources/mplayerc.sk.rc index 3311c72766..16e9ec89e1 100644 --- a/src/apps/mpcresources/mplayerc.sk.rc +++ b/src/apps/mpcresources/mplayerc.sk.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Pripája sa k videu, neodosiela však prichádzajúce pakety. Môžete ho použiť vtedy, ak nepotrebujete obrazový výstup videa a chcete obmedziť zbytočnú prácu procesora." IDS_DESC_NULLVR_UNCOMP "To isté, ako voľba Null renderer, ale spracovávať sa dajú iba nekomprimované súbory." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.sv.rc b/src/apps/mpcresources/mplayerc.sv.rc index 5d926b15b0..cc6cd2edef 100644 --- a/src/apps/mpcresources/mplayerc.sv.rc +++ b/src/apps/mpcresources/mplayerc.sv.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Ansluts till vilken som helst video-liknande media typ och kommer att skicka inkommande prover till ingenstans. Använd det när du inte behöver bildskärmen och vill spara cpu från att arbeta i onödan." IDS_DESC_NULLVR_UNCOMP "Samma som de vanliga Null renderaren, men denna kommer endast att ansluta till okomprimerad typer." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.tc.rc b/src/apps/mpcresources/mplayerc.tc.rc index ed9bf140e5..c4e7ec4cf1 100644 --- a/src/apps/mpcresources/mplayerc.tc.rc +++ b/src/apps/mpcresources/mplayerc.tc.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "和 VMR-9 類同,但使用眞正的 bicubic 變更大小。" + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "和 VMR-9 類同,但使用眞正的 bicubic 變更大小。" IDS_DESC_NULLVR_ANY "連到所有視訊媒體類型,並且不傳送傳入的取樣資料。當你不需要任何視訊顯示而又想節省不必要的 CPU 工作時可以使用。" IDS_DESC_NULLVR_UNCOMP "與無繪製器相同,但只會連到未壓縮的類型。" IDS_DESC_EVR "此視訊繪製器支援硬體解碼。" diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index 367ac0928d..99698e09e4 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "VKİ-9 gibidir, ancak gerçek kübik boyutlandırıcı kullanır." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "VKİ-9 gibidir, ancak gerçek kübik boyutlandırıcı kullanır." IDS_DESC_NULLVR_ANY "Her video benzeri medya biçimine bağlanır ve dahili örnekleri bir yere göndermez. Video gösterimine ihtiyaç duymadığınız ve işlemciyi pek az kullanmak istediğiniz durumlarda bu seçeneği seçiniz." IDS_DESC_NULLVR_UNCOMP "Boş işleyici ile aynıdır, ancak sadece sıkıştırılmamış biçimleri destekler." IDS_DESC_EVR "Donanım kod çözme desteğine sahip video işleyici." diff --git a/src/apps/mpcresources/mplayerc.ua.rc b/src/apps/mpcresources/mplayerc.ua.rc index 02921505d9..92504b2247 100644 --- a/src/apps/mpcresources/mplayerc.ua.rc +++ b/src/apps/mpcresources/mplayerc.ua.rc @@ -3169,11 +3169,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Так само як і VMR-9, але використовує справжній bicubic масштабувальник." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Так само як і VMR-9, але використовує справжній bicubic масштабувальник." IDS_DESC_NULLVR_ANY "Підключається до будь-якого типу відеоданих і відправляє вхідні кадри в нікуди. Може бути корисний для економії ресурсів процесора, якщо потрібен лише звук." IDS_DESC_NULLVR_UNCOMP "Так само як нормальний Null-рендерер, але підключається лише до нестиснених даних." IDS_DESC_EVR "Відеорендерер з підтримкою апаратного декодування." diff --git a/src/apps/mpcresources/text/mplayerc.br.rc.txt b/src/apps/mpcresources/text/mplayerc.br.rc.txt index 6864b797c2..35488a6e05 100644 --- a/src/apps/mpcresources/text/mplayerc.br.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.br.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Não pode conectar o sintonizador e o r STRING IDS_BDA_ERROR_CREATE_RECEIVER "Não pode criar o receptor." STRING IDS_BDA_ERROR_CREATE_TUNER "Não pode criar o sintonizador." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Não pode criar o demultiplexador." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Diminuir brilho" STRING IDS_BRIGHTNESS_INC "Aumentar brilho" STRING IDS_CANCEL "Cancelar" diff --git a/src/apps/mpcresources/text/mplayerc.by.rc.txt b/src/apps/mpcresources/text/mplayerc.by.rc.txt index c0ad12e33e..b0d402df94 100644 --- a/src/apps/mpcresources/text/mplayerc.by.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.by.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Немагчыма падлучыцца STRING IDS_BDA_ERROR_CREATE_RECEIVER "Немагчыма падлучыцца да рэсівера." STRING IDS_BDA_ERROR_CREATE_TUNER "Немагчыма стварыць т'юнер." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Немагчыма стварыць дэмультыплексар." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Яркасць паменьшыць" STRING IDS_BRIGHTNESS_INC "Яркасць павялічыць" STRING IDS_CANCEL "Cancel" diff --git a/src/apps/mpcresources/text/mplayerc.ca.rc.txt b/src/apps/mpcresources/text/mplayerc.ca.rc.txt index 7c4ccc05bd..2ce2edae9e 100644 --- a/src/apps/mpcresources/text/mplayerc.ca.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ca.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Could not connect the tuner and the rec STRING IDS_BDA_ERROR_CREATE_RECEIVER "Could not create the receiver." STRING IDS_BDA_ERROR_CREATE_TUNER "Could not create the tuner." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Could not create the demultiplexer." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Brightness decrease" STRING IDS_BRIGHTNESS_INC "Brightness increase" STRING IDS_CANCEL "Cancel" diff --git a/src/apps/mpcresources/text/mplayerc.cz.rc.txt b/src/apps/mpcresources/text/mplayerc.cz.rc.txt index 3cc5b7b4a8..d608bc6a4c 100644 --- a/src/apps/mpcresources/text/mplayerc.cz.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.cz.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Nepodařilo se připojit tuner a přij STRING IDS_BDA_ERROR_CREATE_RECEIVER "Nepodařilo se vytvořit přijímač." STRING IDS_BDA_ERROR_CREATE_TUNER "Nepodařilo se vytvořit tuner." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Nepodařilo se vytvořit demultiplexor." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Snížení jasu" STRING IDS_BRIGHTNESS_INC "Zvýšení jasu" STRING IDS_CANCEL "Storno" diff --git a/src/apps/mpcresources/text/mplayerc.de.rc.txt b/src/apps/mpcresources/text/mplayerc.de.rc.txt index fb0b0c5eaa..8a2e20d13d 100644 --- a/src/apps/mpcresources/text/mplayerc.de.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.de.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Es konnte keine Verbindung mit dem Tune STRING IDS_BDA_ERROR_CREATE_RECEIVER "Der Empfänger konnte nicht erstellt werden." STRING IDS_BDA_ERROR_CREATE_TUNER "Der Tuner konnte nicht erstellt werden." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Der Demultiplexer konnte nicht erstellt werden." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Helligkeit verringern" STRING IDS_BRIGHTNESS_INC "Helligkeit erhöhen" STRING IDS_CANCEL "&Abbrechen" diff --git a/src/apps/mpcresources/text/mplayerc.el.rc.txt b/src/apps/mpcresources/text/mplayerc.el.rc.txt index 734a0cd367..8d1f7b9a70 100644 --- a/src/apps/mpcresources/text/mplayerc.el.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.el.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Δεν ήταν δυνατή η σύν STRING IDS_BDA_ERROR_CREATE_RECEIVER "Δεν ήταν δυνατή η δημιουργία της συσκευής λήψης." STRING IDS_BDA_ERROR_CREATE_TUNER "Δεν ήταν δυνατή η δημιουργία του δέκτη." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Δεν ήταν δυνατή η δημιουργία διαχωρισμού της πολύπλεξης." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Μείωση φωτεινότητας" STRING IDS_BRIGHTNESS_INC "Αύξηση φωτεινότητας" STRING IDS_CANCEL "Άκυρο" diff --git a/src/apps/mpcresources/text/mplayerc.es.rc.txt b/src/apps/mpcresources/text/mplayerc.es.rc.txt index ea6cae7111..9f62d11b27 100644 --- a/src/apps/mpcresources/text/mplayerc.es.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.es.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "No se pudo conectar el sintonizador y e STRING IDS_BDA_ERROR_CREATE_RECEIVER "No se pudo crear el receptor." STRING IDS_BDA_ERROR_CREATE_TUNER "No se pudo crear el sintonizador." STRING IDS_BDA_ERROR_DEMULTIPLEXER "No se pudo crear el demultiplexor." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Disminuir Brillo" STRING IDS_BRIGHTNESS_INC "Aumentar Brillo" STRING IDS_CANCEL "Cancelar" diff --git a/src/apps/mpcresources/text/mplayerc.eu.rc.txt b/src/apps/mpcresources/text/mplayerc.eu.rc.txt index 15a53bb532..ad26558e5d 100644 --- a/src/apps/mpcresources/text/mplayerc.eu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.eu.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Ezin da elkarketatu sintonizagailua eta STRING IDS_BDA_ERROR_CREATE_RECEIVER "Ezin da sortu hargailua." STRING IDS_BDA_ERROR_CREATE_TUNER "Ezin da sortu sintonizagailua." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Ezin da sortu desmultiplexatzailea." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Gutxitu dizdira" STRING IDS_BRIGHTNESS_INC "Gehitu dizdira" STRING IDS_CANCEL "Ezeztatu" diff --git a/src/apps/mpcresources/text/mplayerc.fr.rc.txt b/src/apps/mpcresources/text/mplayerc.fr.rc.txt index dfc51f47c9..7e02a65a0a 100644 --- a/src/apps/mpcresources/text/mplayerc.fr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.fr.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Impossible de connecter le tuner et le STRING IDS_BDA_ERROR_CREATE_RECEIVER "Impossible de créer le récepteur." STRING IDS_BDA_ERROR_CREATE_TUNER "Impossible de créer le tuner." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Impossible de créer le démultiplexeur." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Diminuer la luminosité" STRING IDS_BRIGHTNESS_INC "Augmenter la luminosité" STRING IDS_CANCEL "Annuler" diff --git a/src/apps/mpcresources/text/mplayerc.he.rc.txt b/src/apps/mpcresources/text/mplayerc.he.rc.txt index 9d31e9607b..5e642fdc11 100644 --- a/src/apps/mpcresources/text/mplayerc.he.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.he.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Could not connect the tuner and the rec STRING IDS_BDA_ERROR_CREATE_RECEIVER "Could not create the receiver." STRING IDS_BDA_ERROR_CREATE_TUNER "Could not create the tuner." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Could not create the demultiplexer." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "הפחתת בהירות" STRING IDS_BRIGHTNESS_INC "הגברת בהירות" STRING IDS_CANCEL "Cancel" diff --git a/src/apps/mpcresources/text/mplayerc.hr.rc.txt b/src/apps/mpcresources/text/mplayerc.hr.rc.txt index 4de106dc61..04f4b369e5 100644 --- a/src/apps/mpcresources/text/mplayerc.hr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hr.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Could not connect the tuner and the rec STRING IDS_BDA_ERROR_CREATE_RECEIVER "Prijemnik nije bilo moguće kreirat." STRING IDS_BDA_ERROR_CREATE_TUNER "Tuner nije bilo moguće kreirat." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Demultiplekser nije kreiran." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Smanjenje svjetline" STRING IDS_BRIGHTNESS_INC "Povećanje svjetline" STRING IDS_CANCEL "Cancel" diff --git a/src/apps/mpcresources/text/mplayerc.hu.rc.txt b/src/apps/mpcresources/text/mplayerc.hu.rc.txt index cd81a7bc84..f169a2a9e7 100644 --- a/src/apps/mpcresources/text/mplayerc.hu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hu.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Nem sikerült a tuner és a vevőkész STRING IDS_BDA_ERROR_CREATE_RECEIVER "Nem sikerült létrehozni a vevőt." STRING IDS_BDA_ERROR_CREATE_TUNER "Nem sikerült létrehozni a tunert." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Nem sikerült létrehozni a demultiplexert." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Fényerő csökkentése" STRING IDS_BRIGHTNESS_INC "Fényerő növelése" STRING IDS_CANCEL "Mégse" diff --git a/src/apps/mpcresources/text/mplayerc.hy.rc.txt b/src/apps/mpcresources/text/mplayerc.hy.rc.txt index ac0100ec69..63b0992354 100644 --- a/src/apps/mpcresources/text/mplayerc.hy.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hy.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Հնարավոր չէ միանալ թյ STRING IDS_BDA_ERROR_CREATE_RECEIVER "Հնարավոր չէ ստեղծել ստացող։" STRING IDS_BDA_ERROR_CREATE_TUNER "Հնարավոր չէ ստեղծել թյուներ։" STRING IDS_BDA_ERROR_DEMULTIPLEXER "Հնարավոր չէ ստեղծել demultiplexer։" +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Բացության նվազեցում" STRING IDS_BRIGHTNESS_INC "Բացության ուժեղացում" STRING IDS_CANCEL "Չեղարկել" diff --git a/src/apps/mpcresources/text/mplayerc.it.rc.txt b/src/apps/mpcresources/text/mplayerc.it.rc.txt index b8c3224d0f..060d9a9916 100644 --- a/src/apps/mpcresources/text/mplayerc.it.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.it.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Impossibile collegare il sintonizzatore STRING IDS_BDA_ERROR_CREATE_RECEIVER "Impossibile creare il ricevitore." STRING IDS_BDA_ERROR_CREATE_TUNER "Impossibile creare il sintonizzatore." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Impossibile creare il demultiplexer." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Incremento luminosità" STRING IDS_BRIGHTNESS_INC "Decremento luminosità" STRING IDS_CANCEL "Annulla" diff --git a/src/apps/mpcresources/text/mplayerc.ja.rc.txt b/src/apps/mpcresources/text/mplayerc.ja.rc.txt index f510adb4f5..f40927a367 100644 --- a/src/apps/mpcresources/text/mplayerc.ja.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ja.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "チューナーと受信機を接続で STRING IDS_BDA_ERROR_CREATE_RECEIVER "受信機を作成できませんでした。" STRING IDS_BDA_ERROR_CREATE_TUNER "チューナーを作成できませんでした。" STRING IDS_BDA_ERROR_DEMULTIPLEXER "デマルチプレクサーを作成できませんでした。" +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "明るさを下げる" STRING IDS_BRIGHTNESS_INC "明るさを上げる" STRING IDS_CANCEL "キャンセル" diff --git a/src/apps/mpcresources/text/mplayerc.kr.rc.txt b/src/apps/mpcresources/text/mplayerc.kr.rc.txt index a2969a558e..cc0e3577e3 100644 --- a/src/apps/mpcresources/text/mplayerc.kr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.kr.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "튜너와 리시버에 연결할 수 STRING IDS_BDA_ERROR_CREATE_RECEIVER "리시버를 만들 수 없습니다." STRING IDS_BDA_ERROR_CREATE_TUNER "튜너를 만들 수 없습니다." STRING IDS_BDA_ERROR_DEMULTIPLEXER "디멀티플렉서를 만들 수 없습니다." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "밝기 감소" STRING IDS_BRIGHTNESS_INC "밝기 증가" STRING IDS_CANCEL "취소" diff --git a/src/apps/mpcresources/text/mplayerc.nl.rc.txt b/src/apps/mpcresources/text/mplayerc.nl.rc.txt index c2de1aea0b..a1b02c6c5b 100644 --- a/src/apps/mpcresources/text/mplayerc.nl.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.nl.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Kon geen verbinding maken met de tuner STRING IDS_BDA_ERROR_CREATE_RECEIVER "Kon de receiver niet maken." STRING IDS_BDA_ERROR_CREATE_TUNER "Kon de tuner niet maken." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Kon de demultiplexer niet maken." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Helderheid verminderen" STRING IDS_BRIGHTNESS_INC "Helderheid vermeerderen" STRING IDS_CANCEL "Annuleren" diff --git a/src/apps/mpcresources/text/mplayerc.pl.rc.txt b/src/apps/mpcresources/text/mplayerc.pl.rc.txt index fa71233880..850022acad 100644 --- a/src/apps/mpcresources/text/mplayerc.pl.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.pl.rc.txt @@ -1344,6 +1344,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Nie można połączyć tunera oraz odbi STRING IDS_BDA_ERROR_CREATE_RECEIVER "Nie można utworzyć odbiornika." STRING IDS_BDA_ERROR_CREATE_TUNER "Nie można utworzyć tunera." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Nie można utworzyć demultipleksera." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Zmniejszono jasność" STRING IDS_BRIGHTNESS_INC "Zwiększono jasność" STRING IDS_CANCEL "Anuluj" diff --git a/src/apps/mpcresources/text/mplayerc.rc.txt b/src/apps/mpcresources/text/mplayerc.rc.txt index 99ee80483a..2e7c6b63ba 100644 --- a/src/apps/mpcresources/text/mplayerc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Could not connect the tuner and the rec STRING IDS_BDA_ERROR_CREATE_RECEIVER "Could not create the receiver." STRING IDS_BDA_ERROR_CREATE_TUNER "Could not create the tuner." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Could not create the demultiplexer." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Brightness decrease" STRING IDS_BRIGHTNESS_INC "Brightness increase" STRING IDS_CANCEL "Cancel" diff --git a/src/apps/mpcresources/text/mplayerc.ro.rc.txt b/src/apps/mpcresources/text/mplayerc.ro.rc.txt index 8997640896..fdbdfd8528 100644 --- a/src/apps/mpcresources/text/mplayerc.ro.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ro.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Tunerul și receptorul nu pot fi conect STRING IDS_BDA_ERROR_CREATE_RECEIVER "Receptorul nu poate fi creat." STRING IDS_BDA_ERROR_CREATE_TUNER "Tunerul nu poate fi creat." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Demultiplexorul nu poate fi creat." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Micșorare luminozitate" STRING IDS_BRIGHTNESS_INC "Mărire luminozitate" STRING IDS_CANCEL "Renunță" diff --git a/src/apps/mpcresources/text/mplayerc.ru.rc.txt b/src/apps/mpcresources/text/mplayerc.ru.rc.txt index 690da0eb5c..84ada37a70 100644 --- a/src/apps/mpcresources/text/mplayerc.ru.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ru.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Невозможно подключит STRING IDS_BDA_ERROR_CREATE_RECEIVER "Невозможно создать приемник." STRING IDS_BDA_ERROR_CREATE_TUNER "Невозможно создать тюнер." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Невозможно создать демультиплексор." +STRING IDS_BLOCK_EXTERNAL_VR "Вы не можете добавить %s как внешний фильтр.\nВам необходимо выбрать прдепочтительный видеорендерерв в панели настроек Видео." STRING IDS_BRIGHTNESS_DEC "Яркость уменьшить" STRING IDS_BRIGHTNESS_INC "Яркость увеличить" STRING IDS_CANCEL "Отменить" diff --git a/src/apps/mpcresources/text/mplayerc.sc.rc.txt b/src/apps/mpcresources/text/mplayerc.sc.rc.txt index c5bed412fc..f1e5685365 100644 --- a/src/apps/mpcresources/text/mplayerc.sc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sc.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "无法连接调谐器和接收器。" STRING IDS_BDA_ERROR_CREATE_RECEIVER "无法创建接收器。" STRING IDS_BDA_ERROR_CREATE_TUNER "无法创建调谐器。" STRING IDS_BDA_ERROR_DEMULTIPLEXER "无法创建解多路复用器。" +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "降低亮度" STRING IDS_BRIGHTNESS_INC "增加亮度" STRING IDS_CANCEL "取消" diff --git a/src/apps/mpcresources/text/mplayerc.sk.rc.txt b/src/apps/mpcresources/text/mplayerc.sk.rc.txt index e41b9fb836..9bb06a1f9e 100644 --- a/src/apps/mpcresources/text/mplayerc.sk.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sk.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Nemožno pripojiť tuner a prijímač." STRING IDS_BDA_ERROR_CREATE_RECEIVER "Nemožno vytvoriť prijímač." STRING IDS_BDA_ERROR_CREATE_TUNER "Nemožno vytvoriť tuner." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Nemožno vytvoriť demultiplexor." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Zníženie jasu" STRING IDS_BRIGHTNESS_INC "Zvýšenie jasu" STRING IDS_CANCEL "Storno" diff --git a/src/apps/mpcresources/text/mplayerc.sv.rc.txt b/src/apps/mpcresources/text/mplayerc.sv.rc.txt index f970b234ca..4b4f07d300 100644 --- a/src/apps/mpcresources/text/mplayerc.sv.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sv.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Could not connect the tuner and the rec STRING IDS_BDA_ERROR_CREATE_RECEIVER "Could not create the receiver." STRING IDS_BDA_ERROR_CREATE_TUNER "Could not create the tuner." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Could not create the demultiplexer." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Brightness decrease" STRING IDS_BRIGHTNESS_INC "Brightness increase" STRING IDS_CANCEL "Cancel" diff --git a/src/apps/mpcresources/text/mplayerc.tc.rc.txt b/src/apps/mpcresources/text/mplayerc.tc.rc.txt index 7b66741380..ffaa5f9410 100644 --- a/src/apps/mpcresources/text/mplayerc.tc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tc.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "無法連接調諧器和接收器。" STRING IDS_BDA_ERROR_CREATE_RECEIVER "無法產生接收器。" STRING IDS_BDA_ERROR_CREATE_TUNER "無法產生調諧器。" STRING IDS_BDA_ERROR_DEMULTIPLEXER "無法產生解多工器。" +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "減少亮度" STRING IDS_BRIGHTNESS_INC "增加亮度" STRING IDS_CANCEL "取消" diff --git a/src/apps/mpcresources/text/mplayerc.tr.rc.txt b/src/apps/mpcresources/text/mplayerc.tr.rc.txt index 5438ca13f3..7b23ee6293 100644 --- a/src/apps/mpcresources/text/mplayerc.tr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tr.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Kanala ve alıcıya bağlanılamadı." STRING IDS_BDA_ERROR_CREATE_RECEIVER "Alıcı oluşturulamadı." STRING IDS_BDA_ERROR_CREATE_TUNER "Kanal oluşturulamadı." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Çoklama çözücüsü oluşturulamadı." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Parlaklığı Azalt" STRING IDS_BRIGHTNESS_INC "Parlaklığı Arttır" STRING IDS_CANCEL "İptal" diff --git a/src/apps/mpcresources/text/mplayerc.ua.rc.txt b/src/apps/mpcresources/text/mplayerc.ua.rc.txt index ef0ef52300..ea711f5cd5 100644 --- a/src/apps/mpcresources/text/mplayerc.ua.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ua.rc.txt @@ -1347,6 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Неможливо з'єднатися STRING IDS_BDA_ERROR_CREATE_RECEIVER "Неможливо створити рісівер." STRING IDS_BDA_ERROR_CREATE_TUNER "Неможливо створити тюнер." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Неможливо створити демультиплексер." +STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." STRING IDS_BRIGHTNESS_DEC "Зменшення яскравості" STRING IDS_BRIGHTNESS_INC "Збільшення яскравості" STRING IDS_CANCEL "Відмінити" diff --git a/src/apps/mplayerc/AppSettings.cpp b/src/apps/mplayerc/AppSettings.cpp index 3a6eae265c..9ae5d226d2 100644 --- a/src/apps/mplayerc/AppSettings.cpp +++ b/src/apps/mplayerc/AppSettings.cpp @@ -33,6 +33,8 @@ #include "AppSettings.h" #include "DSUtil/HTTPAsync.h" +#include "PPageExternalFilters.h" + const LPCWSTR channel_mode_sets[] = { // ID Name L"1.0", // SPK_MONO "Mono" @@ -1088,6 +1090,11 @@ void CAppSettings::LoadSettings(bool bForce/* = false*/) break; } + if (IsSupportedExternalVideoRenderer(f->clsid)) { + // supported external video renderers that must be selected in the "Video" settings + continue; + } + f->guids.clear(); for (unsigned int i = 0; ; i++) { CString entry; @@ -2053,16 +2060,7 @@ void CAppSettings::SaveExternalFilters() // External Filter settings are saved for a long time. Use only when really necessary. CProfile& profile = AfxGetProfile(); - for (unsigned int i = 0; ; i++) { - CString key; - key.Format(L"%s\\%03u", IDS_R_EXTERNAL_FILTERS, i); - int j = -1; - profile.ReadInt(key, L"Enabled", j); - profile.DeleteSection(key); - if (j < 0) { - break; - } - } + profile.DeleteSection(IDS_R_EXTERNAL_FILTERS); unsigned int k = 0; for (const auto& f : m_ExternalFilters) { diff --git a/src/apps/mplayerc/PPageExternalFilters.cpp b/src/apps/mplayerc/PPageExternalFilters.cpp index 277c7cdcbc..306470353d 100644 --- a/src/apps/mplayerc/PPageExternalFilters.cpp +++ b/src/apps/mplayerc/PPageExternalFilters.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -31,6 +31,15 @@ #include #include "DSUtil/std_helper.h" +#include +#include +#include + +bool IsSupportedExternalVideoRenderer(CLSID clsid) +{ + return clsid == CLSID_EnhancedVideoRenderer || clsid == CLSID_MPCVR || clsid == CLSID_DXR || clsid == CLSID_madVR; +} + static const std::vector s_MajorTypes = { MEDIATYPE_NULL, MEDIATYPE_Video, @@ -379,6 +388,13 @@ void CPPageExternalFilters::OnAddRegistered() // skip something strange continue; } + else if (IsSupportedExternalVideoRenderer(f->clsid)) { + // supported external video renderers that must be selected in the "Video" settings + CStringW strMessage; + strMessage.Format(ResStr(IDS_BLOCK_EXTERNAL_VR), f->name); + AfxMessageBox(strMessage, MB_OK); + continue; + } CString name = f->name; @@ -770,6 +786,15 @@ void CPPageExternalFilters::OnDropFiles(HDROP hDropInfo) if (f) { std::unique_ptr p(f); + + if (IsSupportedExternalVideoRenderer(f->clsid)) { + // supported external video renderers that must be selected in the "Video" settings + CStringW strMessage; + strMessage.Format(ResStr(IDS_BLOCK_EXTERNAL_VR), f->name); + AfxMessageBox(strMessage, MB_OK); + continue; + } + int i = m_filters.AddString(f->name); m_ExtFilters.emplace_back(std::move(p)); m_filters.SetItemDataPtr(i, m_ExtFilters.back().get()); diff --git a/src/apps/mplayerc/PPageExternalFilters.h b/src/apps/mplayerc/PPageExternalFilters.h index 09b237aeb8..a1c4e64010 100644 --- a/src/apps/mplayerc/PPageExternalFilters.h +++ b/src/apps/mplayerc/PPageExternalFilters.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2018 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -24,6 +24,7 @@ #include "PPageBase.h" #include "controls/FloatEdit.h" +bool IsSupportedExternalVideoRenderer(CLSID clsid); // CPPageExternalFilters dialog diff --git a/src/apps/mplayerc/mplayerc.rc b/src/apps/mplayerc/mplayerc.rc index 2c47b81476..87eb8a05a0 100644 --- a/src/apps/mplayerc/mplayerc.rc +++ b/src/apps/mplayerc/mplayerc.rc @@ -3185,11 +3185,12 @@ END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." + IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." END STRINGTABLE BEGIN + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily." IDS_DESC_NULLVR_UNCOMP "Same as the normal Null renderer, but this will only connect to uncompressed types." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mplayerc/resource.h b/src/apps/mplayerc/resource.h index 5b5030aa56..9daf7e2d9e 100644 --- a/src/apps/mplayerc/resource.h +++ b/src/apps/mplayerc/resource.h @@ -983,6 +983,7 @@ #define IDS_FILE_SAVE_THUMBNAILS 24005 #define IDC_MAINFRAME_ICON 24006 #define IDS_OSD_TEST 24007 +#define IDS_BLOCK_EXTERNAL_VR 31000 #define IDS_DESC_HAALI_VR 31007 #define IDS_DESC_NULLVR_ANY 31008 #define IDS_DESC_NULLVR_UNCOMP 31009 From eed7fa422e0823dd845c058d8113f3e3c1cea389 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sun, 4 Feb 2024 14:32:36 +0300 Subject: [PATCH 15/87] =?UTF-8?q?DSUtil:=20=D0=9F=D0=B5=D1=80=D0=B5=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=B0=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20CPr?= =?UTF-8?q?ofile::EnumValueNames,=20=D1=83=D0=B1=D1=80=D0=B0=D0=BD=D1=8B?= =?UTF-8?q?=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D0=B5=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=BC=D0=B5=D0=BD=D0=BD=D1=8B=D0=B5,=20=D1=83=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BD=D0=B5=D0=BD=D0=BE=20=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B4=D1=83=D0=BF=D1=80=D0=B5=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D0=BE=20=D0=BD=D0=B5=D1=85=D0=B2=D0=B0=D1=82=D0=BA?= =?UTF-8?q?=D0=B8=20=D1=81=D1=82=D0=B5=D0=BA=D0=B0.=20=D0=94=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=20CProfile::EnumSectionNames.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DSUtil/Profile.cpp | 104 +++++++++++++++++++++++++++++++---------- src/DSUtil/Profile.h | 4 +- 2 files changed, 82 insertions(+), 26 deletions(-) diff --git a/src/DSUtil/Profile.cpp b/src/DSUtil/Profile.cpp index 240980e588..3ba37b544f 100644 --- a/src/DSUtil/Profile.cpp +++ b/src/DSUtil/Profile.cpp @@ -26,6 +26,7 @@ #include "CryptoUtils.h" #include "Log.h" #include "Profile.h" +#include "text.h" CStringW GetIniProgramDir() { @@ -848,48 +849,40 @@ void CProfile::EnumValueNames(const wchar_t* section, std::vector& val if (m_hAppRegKey) { CRegKey regkey; if (ERROR_SUCCESS == regkey.Open(m_hAppRegKey, section, KEY_READ)) { - // https://docs.microsoft.com/ru-ru/windows/desktop/SysInfo/enumerating-registry-subkeys - WCHAR achClass[MAX_PATH] = L""; - DWORD cchClassName = MAX_PATH; - DWORD cSubKeys = 0; - DWORD cbMaxSubKey; - DWORD cchMaxClass; - DWORD cValues; - DWORD cchMaxValue; - DWORD cbMaxValueData; - DWORD cbSecurityDescriptor; - FILETIME ftLastWriteTime; + DWORD cValues = 0; + DWORD cchMaxValue = 0; // Get the class name and the value count. DWORD retCode = RegQueryInfoKeyW( regkey.m_hKey, - achClass, - &cchClassName, nullptr, - &cSubKeys, - &cbMaxSubKey, - &cchMaxClass, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, &cValues, &cchMaxValue, - &cbMaxValueData, - &cbSecurityDescriptor, - &ftLastWriteTime); + nullptr, + nullptr, + nullptr); - if (ERROR_SUCCESS == retCode && cValues) { - WCHAR achValue[16383]; + if (ERROR_SUCCESS == retCode && cValues && cchMaxValue) { + std::vector achValue(cchMaxValue + 1, '\0'); for (DWORD i = 0, retCode = ERROR_SUCCESS; i < cValues; i++) { - DWORD cchValue = std::size(achValue); + DWORD cchValue = cchMaxValue + 1; achValue[0] = '\0'; - retCode = RegEnumValueW(regkey.m_hKey, i, achValue, &cchValue, NULL, NULL, NULL, NULL); + retCode = RegEnumValueW(regkey.m_hKey, i, achValue.data(), &cchValue, NULL, NULL, NULL, NULL); if (retCode == ERROR_SUCCESS) { - valuenames.emplace_back(achValue, cchValue); + valuenames.emplace_back(achValue.data(), cchValue); } } } regkey.Close(); } - } else { + } + else { InitIni(); auto it1 = m_ProfileMap.find(section); if (it1 != m_ProfileMap.end()) { @@ -901,6 +894,67 @@ void CProfile::EnumValueNames(const wchar_t* section, std::vector& val } } +void CProfile::EnumSectionNames(const wchar_t* section, std::vector& sectionnames) +{ + std::lock_guard lock(m_Mutex); + + sectionnames.clear(); + + if (m_hAppRegKey) { + CRegKey regkey; + if (ERROR_SUCCESS == regkey.Open(m_hAppRegKey, section, KEY_READ)) { + DWORD cSubKeys = 0; + DWORD cbMaxSubKey = 0; + + // Get the class name and the value count. + DWORD retCode = RegQueryInfoKeyW( + regkey.m_hKey, + nullptr, + nullptr, + nullptr, + &cSubKeys, + &cbMaxSubKey, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr, + nullptr); + + if (ERROR_SUCCESS == retCode && cSubKeys && cbMaxSubKey) { + std::vector achKey(cbMaxSubKey + 1, '\0'); + + for (DWORD i = 0; i < cSubKeys; i++) { + DWORD cbName = cbMaxSubKey + 1; + achKey[0] = '\0'; + retCode = RegEnumKeyExW(regkey.m_hKey, i, achKey.data(), &cbName, nullptr, nullptr, nullptr, nullptr); + if (retCode == ERROR_SUCCESS) { + sectionnames.emplace_back(achKey.data(), cbName); + } + } + } + regkey.Close(); + } + } + else { + InitIni(); + CStringW prefix(section); + prefix += L'\\'; + + auto it = m_ProfileMap.cbegin(); + while (it != m_ProfileMap.cend() && !StartsWith(it->first, prefix)) { + ++it; + } + + while (it != m_ProfileMap.cend() && StartsWith(it->first, prefix)) { + if (it->first.GetLength() > prefix.GetLength()) { + sectionnames.emplace_back(it->first.Mid(prefix.GetLength())); + } + ++it; + } + } +} + bool CProfile::DeleteValue(const wchar_t* section, const wchar_t* entry) { std::lock_guard lock(m_Mutex); diff --git a/src/DSUtil/Profile.h b/src/DSUtil/Profile.h index 817544dd9f..60f3ed22d7 100644 --- a/src/DSUtil/Profile.h +++ b/src/DSUtil/Profile.h @@ -1,5 +1,5 @@ /* - * (C) 2018-2022 see Authors.txt + * (C) 2018-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -45,6 +45,7 @@ class CProfile return str1.CompareNoCase(str2) < 0; } }; + // There should be a std::map here, because the sorting of the sections is important (see EnumSectionNames). std::map, KeyCmp> m_ProfileMap; bool m_bIniFirstInit = false; bool m_bIniNeedFlush = false; @@ -86,6 +87,7 @@ class CProfile bool WriteBinary(const wchar_t* section, const wchar_t* entry, const BYTE* pdata, const unsigned nbytes); void EnumValueNames(const wchar_t* section, std::vector& valuenames); + void EnumSectionNames(const wchar_t* section, std::vector& sectionnames); bool DeleteValue(const wchar_t* section, const wchar_t* entry); bool DeleteSection(const wchar_t* section); From bef41584886d0908d0ab9a10915cc596bc0c6e5b Mon Sep 17 00:00:00 2001 From: alexins Date: Sun, 4 Feb 2024 15:40:11 +0100 Subject: [PATCH 16/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5:=20Little-CMS=20git-lcms2.16-26-gc2a54?= =?UTF-8?q?01?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 1 + docs/Changelog.txt | 1 + src/ExtLib/lcms2/ChangeLog | 6 +++--- src/ExtLib/lcms2/include/lcms2.h | 2 +- src/ExtLib/lcms2/include/lcms2_plugin.h | 2 +- src/ExtLib/lcms2/src/cmsalpha.c | 2 +- src/ExtLib/lcms2/src/cmscam02.c | 13 ++++++------- src/ExtLib/lcms2/src/cmscgats.c | 4 ++-- src/ExtLib/lcms2/src/cmscnvrt.c | 2 +- src/ExtLib/lcms2/src/cmserr.c | 2 +- src/ExtLib/lcms2/src/cmsgamma.c | 2 +- src/ExtLib/lcms2/src/cmshalf.c | 2 +- src/ExtLib/lcms2/src/cmsintrp.c | 4 ++-- src/ExtLib/lcms2/src/cmsio0.c | 2 +- src/ExtLib/lcms2/src/cmsio1.c | 2 +- src/ExtLib/lcms2/src/cmslut.c | 4 ++-- src/ExtLib/lcms2/src/cmsmd5.c | 2 +- src/ExtLib/lcms2/src/cmsmtrx.c | 2 +- src/ExtLib/lcms2/src/cmsnamed.c | 4 ++-- src/ExtLib/lcms2/src/cmsopt.c | 2 +- src/ExtLib/lcms2/src/cmspack.c | 13 +++++++------ src/ExtLib/lcms2/src/cmspcs.c | 2 +- src/ExtLib/lcms2/src/cmsplugin.c | 2 +- src/ExtLib/lcms2/src/cmsps2.c | 6 +++--- src/ExtLib/lcms2/src/cmssamp.c | 2 +- src/ExtLib/lcms2/src/cmssm.c | 2 +- src/ExtLib/lcms2/src/cmstypes.c | 2 +- src/ExtLib/lcms2/src/cmsvirt.c | 2 +- src/ExtLib/lcms2/src/cmswtpnt.c | 2 +- src/ExtLib/lcms2/src/cmsxform.c | 2 +- src/ExtLib/lcms2/src/lcms2_internal.h | 6 +++--- 31 files changed, 52 insertions(+), 50 deletions(-) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index b180c24a36..67281713dd 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -27,6 +27,7 @@ MPCVideoDec Обновлены библиотеки: ffmpeg git-n6.2-dev-967-gb181868aba; + Little-CMS git-lcms2.16-26-gc2a5401; nanosvg git-93ce879. diff --git a/docs/Changelog.txt b/docs/Changelog.txt index af4f545999..e410a2a8d9 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -27,6 +27,7 @@ Updated Korean translation (by Hackjjang). Updated libraries: ffmpeg git-n6.2-dev-967-gb181868aba; + Little-CMS git-lcms2.16-26-gc2a5401; nanosvg git-93ce879. diff --git a/src/ExtLib/lcms2/ChangeLog b/src/ExtLib/lcms2/ChangeLog index e5f7242b18..5e022607bb 100644 --- a/src/ExtLib/lcms2/ChangeLog +++ b/src/ExtLib/lcms2/ChangeLog @@ -4,12 +4,12 @@ New import .CUBE files as RGB devicelinks New Read/Write MHC2 tags for Windows GPU access New Support for UTF8 on multilocalized unicode functions -New Suppot for OkLab color space, built-in and formatter. +New Support for OkLab color space, built-in and formatter. Improved floating point transforms float -> integer are now honored as float Improved MSYS2, mingw is now supported Improved proferred CMM, platform and creator now survives profile edition. Fixed tificc now can deal with Lab TIFF -Fixed code can now be compiled by a C++17 compiler, "register" keywork use detected at compile time. +Fixed code can now be compiled by a C++17 compiler, "register" keyword use detected at compile time. Fixed Reverted postcript creation that corrupted some interpreters. ----------------------- @@ -61,7 +61,7 @@ Bug & typos fixing (thanks to many reporters and contributors) ----------------------- 2.12 Maintenance release ----------------------- -Added new build-in sigmoidal tone curve +Added new built-in sigmoidal tone curve Added XCode 12 project Added support for multichannel input up to 15 channels Fix LUT8 write matrix diff --git a/src/ExtLib/lcms2/include/lcms2.h b/src/ExtLib/lcms2/include/lcms2.h index 7c720477c6..12c5f89e34 100644 --- a/src/ExtLib/lcms2/include/lcms2.h +++ b/src/ExtLib/lcms2/include/lcms2.h @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/include/lcms2_plugin.h b/src/ExtLib/lcms2/include/lcms2_plugin.h index d232af3df8..89b5199317 100644 --- a/src/ExtLib/lcms2/include/lcms2_plugin.h +++ b/src/ExtLib/lcms2/include/lcms2_plugin.h @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsalpha.c b/src/ExtLib/lcms2/src/cmsalpha.c index 7422256ca3..23cfb8758b 100644 --- a/src/ExtLib/lcms2/src/cmsalpha.c +++ b/src/ExtLib/lcms2/src/cmsalpha.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmscam02.c b/src/ExtLib/lcms2/src/cmscam02.c index 3f080a190c..596c268535 100644 --- a/src/ExtLib/lcms2/src/cmscam02.c +++ b/src/ExtLib/lcms2/src/cmscam02.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -88,17 +88,16 @@ cmsFloat64Number computeFL(cmsCIECAM02* pMod) return FL; } -static -cmsFloat64Number computeD(cmsCIECAM02* pMod) +static cmsFloat64Number computeD(cmsCIECAM02* pMod) { - cmsFloat64Number D; - - D = pMod->F - (1.0/3.6)*(exp(((-pMod ->LA-42) / 92.0))); + cmsFloat64Number D, temp; + temp = 1.0 - ((1.0 / 3.6) * exp((-pMod->LA - 42) / 92.0)); + + D = pMod->F * temp; return D; } - static CAM02COLOR XYZtoCAT02(CAM02COLOR clr) { diff --git a/src/ExtLib/lcms2/src/cmscgats.c b/src/ExtLib/lcms2/src/cmscgats.c index bccbf58c10..52b1094da5 100644 --- a/src/ExtLib/lcms2/src/cmscgats.c +++ b/src/ExtLib/lcms2/src/cmscgats.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -1690,7 +1690,7 @@ cmsBool AllocateDataSet(cmsIT8* it8) return FALSE; } else { - // Some dumb analizers warns of possible overflow here, just take a look couple of lines above. + // Some dumb analyzers warns of possible overflow here, just take a look couple of lines above. t->Data = (char**)AllocChunk(it8, ((cmsUInt32Number)t->nSamples + 1) * ((cmsUInt32Number)t->nPatches + 1) * sizeof(char*)); if (t->Data == NULL) { diff --git a/src/ExtLib/lcms2/src/cmscnvrt.c b/src/ExtLib/lcms2/src/cmscnvrt.c index f00c117337..33f37d87cf 100644 --- a/src/ExtLib/lcms2/src/cmscnvrt.c +++ b/src/ExtLib/lcms2/src/cmscnvrt.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmserr.c b/src/ExtLib/lcms2/src/cmserr.c index 811c63502d..5a2f14e5cc 100644 --- a/src/ExtLib/lcms2/src/cmserr.c +++ b/src/ExtLib/lcms2/src/cmserr.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsgamma.c b/src/ExtLib/lcms2/src/cmsgamma.c index a8a8946205..5aa4afda9c 100644 --- a/src/ExtLib/lcms2/src/cmsgamma.c +++ b/src/ExtLib/lcms2/src/cmsgamma.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmshalf.c b/src/ExtLib/lcms2/src/cmshalf.c index 043ee530b4..f15230873b 100644 --- a/src/ExtLib/lcms2/src/cmshalf.c +++ b/src/ExtLib/lcms2/src/cmshalf.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsintrp.c b/src/ExtLib/lcms2/src/cmsintrp.c index 2b5c634f42..d1dedddd05 100644 --- a/src/ExtLib/lcms2/src/cmsintrp.c +++ b/src/ExtLib/lcms2/src/cmsintrp.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -495,7 +495,7 @@ void TrilinearInterpFloat(const cmsFloat32Number Input[], py = fclamp(Input[1]) * p->Domain[1]; pz = fclamp(Input[2]) * p->Domain[2]; - x0 = (int) floor(px); fx = px - (cmsFloat32Number) x0; // We need full floor funcionality here + x0 = (int) floor(px); fx = px - (cmsFloat32Number) x0; // We need full floor functionality here y0 = (int) floor(py); fy = py - (cmsFloat32Number) y0; z0 = (int) floor(pz); fz = pz - (cmsFloat32Number) z0; diff --git a/src/ExtLib/lcms2/src/cmsio0.c b/src/ExtLib/lcms2/src/cmsio0.c index 75442e664d..f19c5ec2d4 100644 --- a/src/ExtLib/lcms2/src/cmsio0.c +++ b/src/ExtLib/lcms2/src/cmsio0.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsio1.c b/src/ExtLib/lcms2/src/cmsio1.c index c75b454cd5..2b1ec335e0 100644 --- a/src/ExtLib/lcms2/src/cmsio1.c +++ b/src/ExtLib/lcms2/src/cmsio1.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmslut.c b/src/ExtLib/lcms2/src/cmslut.c index 1ea61a806b..f1177472e5 100644 --- a/src/ExtLib/lcms2/src/cmslut.c +++ b/src/ExtLib/lcms2/src/cmslut.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -1080,7 +1080,7 @@ cmsStage* _cmsStageNormalizeFromLabFloat(cmsContext ContextID) return mpe; } -// Fom XYZ to floating point PCS +// From XYZ to floating point PCS cmsStage* _cmsStageNormalizeFromXyzFloat(cmsContext ContextID) { #define n (32768.0/65535.0) diff --git a/src/ExtLib/lcms2/src/cmsmd5.c b/src/ExtLib/lcms2/src/cmsmd5.c index cd6ce97d2b..4105d525bf 100644 --- a/src/ExtLib/lcms2/src/cmsmd5.c +++ b/src/ExtLib/lcms2/src/cmsmd5.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsmtrx.c b/src/ExtLib/lcms2/src/cmsmtrx.c index 5f5a3c892d..34e8559b3b 100644 --- a/src/ExtLib/lcms2/src/cmsmtrx.c +++ b/src/ExtLib/lcms2/src/cmsmtrx.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsnamed.c b/src/ExtLib/lcms2/src/cmsnamed.c index f368fe2483..4306ee03f2 100644 --- a/src/ExtLib/lcms2/src/cmsnamed.c +++ b/src/ExtLib/lcms2/src/cmsnamed.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -569,7 +569,7 @@ cmsUInt32Number CMSEXPORT cmsMLUgetASCII(const cmsMLU* mlu, if (BufferSize < ASCIIlen + 1) ASCIIlen = BufferSize - 1; - // Precess each character + // Process each character for (i=0; i < ASCIIlen; i++) { wchar_t wc = Wide[i]; diff --git a/src/ExtLib/lcms2/src/cmsopt.c b/src/ExtLib/lcms2/src/cmsopt.c index 4038088b2b..7d4fcf42be 100644 --- a/src/ExtLib/lcms2/src/cmsopt.c +++ b/src/ExtLib/lcms2/src/cmsopt.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmspack.c b/src/ExtLib/lcms2/src/cmspack.c index 5ebbd208d7..dcd5e603d1 100644 --- a/src/ExtLib/lcms2/src/cmspack.c +++ b/src/ExtLib/lcms2/src/cmspack.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -188,7 +188,7 @@ cmsUInt8Number* UnrollPlanarBytes(CMSREGISTER _cmsTRANSFORM* info, else { if (Premul && Extra) - alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[(nChan) * Stride])); + alpha_factor = _cmsToFixedDomain(FROM_8_TO_16(accum[nChan * Stride])); } for (i=0; i < nChan; i++) { @@ -1357,7 +1357,7 @@ cmsUInt8Number* UnrollFloatsToFloat(_cmsTRANSFORM* info, if (Premul && Extra) { if (Planar) - alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan * Stride / sizeof(cmsFloat32Number)]) / maximum; + alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan * Stride]) / maximum; else alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan]) / maximum; } @@ -1424,7 +1424,7 @@ cmsUInt8Number* UnrollDoublesToFloat(_cmsTRANSFORM* info, if (Premul && Extra) { if (Planar) - alpha_factor = (ExtraFirst ? ptr[0] : ptr[(nChan) * Stride / sizeof(cmsFloat64Number)]) / maximum; + alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan * Stride]) / maximum; else alpha_factor = (ExtraFirst ? ptr[0] : ptr[nChan]) / maximum; } @@ -3022,6 +3022,7 @@ cmsUInt8Number* PackWordsFromFloat(_cmsTRANSFORM* info, if (ExtraFirst) start = Extra; + Stride /= 2; for (i = 0; i < nChan; i++) { cmsUInt32Number index = DoSwap ? (nChan - i - 1) : i; @@ -3034,7 +3035,7 @@ cmsUInt8Number* PackWordsFromFloat(_cmsTRANSFORM* info, vv = _cmsQuickSaturateWord(v); if (Planar) - ((cmsUInt16Number*)output)[(i + start) * Stride/2] = vv; + ((cmsUInt16Number*)output)[(i + start) * Stride] = vv; else ((cmsUInt16Number*)output)[i + start] = vv; } @@ -3085,7 +3086,7 @@ cmsUInt8Number* PackFloatsFromFloat(_cmsTRANSFORM* info, v = maximum - v; if (Planar) - ((cmsFloat32Number*)output)[(i + start)* Stride] = (cmsFloat32Number)v; + ((cmsFloat32Number*)output)[(i + start) * Stride] = (cmsFloat32Number)v; else ((cmsFloat32Number*)output)[i + start] = (cmsFloat32Number)v; } diff --git a/src/ExtLib/lcms2/src/cmspcs.c b/src/ExtLib/lcms2/src/cmspcs.c index e11f87c23a..84a62b43e8 100644 --- a/src/ExtLib/lcms2/src/cmspcs.c +++ b/src/ExtLib/lcms2/src/cmspcs.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsplugin.c b/src/ExtLib/lcms2/src/cmsplugin.c index e278832813..41b279996d 100644 --- a/src/ExtLib/lcms2/src/cmsplugin.c +++ b/src/ExtLib/lcms2/src/cmsplugin.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsps2.c b/src/ExtLib/lcms2/src/cmsps2.c index eea1629d35..e0c791bb7b 100644 --- a/src/ExtLib/lcms2/src/cmsps2.c +++ b/src/ExtLib/lcms2/src/cmsps2.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -465,7 +465,7 @@ void Emit1Gamma(cmsIOHANDLER* m, cmsToneCurve* Table) // Bounds check EmitRangeCheck(m); - // Emit intepolation code + // Emit interpolation code // PostScript code Stack // =============== ======================== @@ -589,7 +589,7 @@ int OutputValueSampler(CMSREGISTER const cmsUInt16Number In[], CMSREGISTER cmsUI } - // Hadle the parenthesis on rows + // Handle the parenthesis on rows if (In[0] != sc ->FirstComponent) { diff --git a/src/ExtLib/lcms2/src/cmssamp.c b/src/ExtLib/lcms2/src/cmssamp.c index 0cee16a9ec..7b6a1497ec 100644 --- a/src/ExtLib/lcms2/src/cmssamp.c +++ b/src/ExtLib/lcms2/src/cmssamp.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmssm.c b/src/ExtLib/lcms2/src/cmssm.c index 5c1e430a8c..d6cc28ac20 100644 --- a/src/ExtLib/lcms2/src/cmssm.c +++ b/src/ExtLib/lcms2/src/cmssm.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmstypes.c b/src/ExtLib/lcms2/src/cmstypes.c index 8eabe1f079..6b6bc28703 100644 --- a/src/ExtLib/lcms2/src/cmstypes.c +++ b/src/ExtLib/lcms2/src/cmstypes.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsvirt.c b/src/ExtLib/lcms2/src/cmsvirt.c index 6615604b5f..6084647e86 100644 --- a/src/ExtLib/lcms2/src/cmsvirt.c +++ b/src/ExtLib/lcms2/src/cmsvirt.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmswtpnt.c b/src/ExtLib/lcms2/src/cmswtpnt.c index a73eaa7e36..5ef627f1d0 100644 --- a/src/ExtLib/lcms2/src/cmswtpnt.c +++ b/src/ExtLib/lcms2/src/cmswtpnt.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/cmsxform.c b/src/ExtLib/lcms2/src/cmsxform.c index 8fe6b6b974..389cc21fb3 100644 --- a/src/ExtLib/lcms2/src/cmsxform.c +++ b/src/ExtLib/lcms2/src/cmsxform.c @@ -1,7 +1,7 @@ //--------------------------------------------------------------------------------- // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), diff --git a/src/ExtLib/lcms2/src/lcms2_internal.h b/src/ExtLib/lcms2/src/lcms2_internal.h index 8e78a71e6e..5b3f2636b1 100644 --- a/src/ExtLib/lcms2/src/lcms2_internal.h +++ b/src/ExtLib/lcms2/src/lcms2_internal.h @@ -1,7 +1,7 @@ // // Little Color Management System -// Copyright (c) 1998-2023 Marti Maria Saguer +// Copyright (c) 1998-2024 Marti Maria Saguer // // Permission is hereby granted, free of charge, to any person obtaining // a copy of this software and associated documentation files (the "Software"), @@ -439,7 +439,7 @@ cmsBool _cmsRegisterTransformPlugin(cmsContext ContextID, cmsPluginBase* Plugin // Mutex cmsBool _cmsRegisterMutexPlugin(cmsContext ContextID, cmsPluginBase* Plugin); -// Paralellization +// Parallelization cmsBool _cmsRegisterParallelizationPlugin(cmsContext ContextID, cmsPluginBase* Plugin); // --------------------------------------------------------------------------------------------------------- @@ -972,7 +972,7 @@ cmsBool _cmsReadCHAD(cmsMAT3* Dest, cmsHPROFILE hProfile); // Link several profiles to obtain a single LUT modelling the whole color transform. Intents, Black point // compensation and Adaptation parameters may vary across profiles. BPC and Adaptation refers to the PCS -// after the profile. I.e, BPC[0] refers to connexion between profile(0) and profile(1) +// after the profile. I.e, BPC[0] refers to connetion between profile(0) and profile(1) cmsPipeline* _cmsLinkProfiles(cmsContext ContextID, cmsUInt32Number nProfiles, cmsUInt32Number TheIntents[], From 22adf078da805ced9f6ea801d6178ec0e186609b Mon Sep 17 00:00:00 2001 From: alexins Date: Sun, 4 Feb 2024 15:42:31 +0100 Subject: [PATCH 17/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5:=20MediaInfo=20git-v24.01-g51dbd896;?= =?UTF-8?q?=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5?= =?UTF-8?q?:=20ZenLib=20git-v0.4.41-12-g26b4aa1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 4 +- docs/Changelog.txt | 4 +- src/ExtLib/MediaInfo/Language/be.csv | 3 + src/ExtLib/MediaInfo/Language/ca.csv | 5 +- src/ExtLib/MediaInfo/Language/cs.csv | 3 + src/ExtLib/MediaInfo/Language/de.csv | 5 +- src/ExtLib/MediaInfo/Language/es.csv | 3 + src/ExtLib/MediaInfo/Language/eu.csv | 3 + src/ExtLib/MediaInfo/Language/fr.csv | 3 + src/ExtLib/MediaInfo/Language/gr.csv | 3 + src/ExtLib/MediaInfo/Language/hu.csv | 5 +- src/ExtLib/MediaInfo/Language/hy.csv | 5 +- src/ExtLib/MediaInfo/Language/it.csv | 3 + src/ExtLib/MediaInfo/Language/ja.csv | 3 + src/ExtLib/MediaInfo/Language/ko.csv | 5 +- src/ExtLib/MediaInfo/Language/nl.csv | 3 + src/ExtLib/MediaInfo/Language/pl.csv | 3 + src/ExtLib/MediaInfo/Language/pt-BR.csv | 5 +- src/ExtLib/MediaInfo/Language/ro.csv | 5 +- src/ExtLib/MediaInfo/Language/ru.csv | 7 +- src/ExtLib/MediaInfo/Language/sk.csv | 3 + src/ExtLib/MediaInfo/Language/sv.csv | 3 + src/ExtLib/MediaInfo/Language/tr.csv | 3 + src/ExtLib/MediaInfo/Language/uk.csv | 5 +- src/ExtLib/MediaInfo/Language/zh-CN.csv | 3 + src/ExtLib/MediaInfo/Language/zh-TW.csv | 3 + src/ExtLib/MediaInfo/MediaInfo.vcxproj | 2 + .../MediaInfo/MediaInfo.vcxproj.filters | 6 + .../MediaInfo/MediaInfo/Audio/File_Adm.cpp | 1973 ++++++++++++++--- .../MediaInfo/ExternalCommandHelpers.cpp | 6 +- .../MediaInfo/File__Analyze_Streams.cpp | 30 +- .../File__Analyze_Streams_Finish.cpp | 33 + .../MediaInfo/MediaInfo/MediaInfo_Config.cpp | 2 +- .../MediaInfo/MediaInfo_Config_Automatic.cpp | 4 +- .../MediaInfo/MediaInfo/MediaInfo_File.cpp | 5 +- .../MediaInfo/MediaInfo/MediaInfo_Inform.cpp | 2 +- .../MediaInfo/Multiple/File_DvDif.cpp | 3 +- .../MediaInfo/MediaInfo/Multiple/File_Gxf.cpp | 2 + .../MediaInfo/MediaInfo/Multiple/File_Lxf.cpp | 2 +- .../MediaInfo/MediaInfo/Multiple/File_Mpeg4.h | 1 + .../Multiple/File_Mpeg4_Elements.cpp | 86 +- .../Multiple/File_Mpeg_Descriptors.cpp | 106 +- .../Multiple/File_Mpeg_Descriptors.h | 1 + .../MediaInfo/Multiple/File_Mpeg_Psi.cpp | 9 + .../Multiple/File__ReferenceFilesHelper.cpp | 13 +- .../File__ReferenceFilesHelper_Sequence.cpp | 2 +- src/ExtLib/MediaInfo/MediaInfo/Setup.h | 3 + .../MediaInfo/MediaInfo/Tag/File_Icc.cpp | 21 +- .../MediaInfo/MediaInfo/Video/File_Hevc.cpp | 672 +++++- .../MediaInfo/MediaInfo/Video/File_Hevc.h | 75 +- .../MediaInfo/MediaInfo/Video/File_Vvc.cpp | 146 ++ .../MediaInfo/MediaInfo/Video/File_Vvc.h | 21 + .../MediaInfo/ThirdParty/tfsxml/tfsxml.c | 4 +- src/ExtLib/ZenLib/ZenLib/Conf.h | 5 + src/ExtLib/ZenLib/ZenLib/FileName.cpp | 14 +- src/ExtLib/ZenLib/ZenLib/OS_Utils.cpp | 5 +- src/ExtLib/ZenLib/ZenLib/Ztring.cpp | 4 +- 57 files changed, 2943 insertions(+), 415 deletions(-) create mode 100644 src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.cpp create mode 100644 src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.h diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 67281713dd..2e3b8a5d3f 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -28,7 +28,9 @@ MPCVideoDec Обновлены библиотеки: ffmpeg git-n6.2-dev-967-gb181868aba; Little-CMS git-lcms2.16-26-gc2a5401; - nanosvg git-93ce879. + MediaInfo git-v24.01-g51dbd896; + nanosvg git-93ce879; + ZenLib git-v0.4.41-12-g26b4aa1. 1.6.11 - 2023-12-27 diff --git a/docs/Changelog.txt b/docs/Changelog.txt index e410a2a8d9..81ec18d3ba 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -28,7 +28,9 @@ Updated Korean translation (by Hackjjang). Updated libraries: ffmpeg git-n6.2-dev-967-gb181868aba; Little-CMS git-lcms2.16-26-gc2a5401; - nanosvg git-93ce879. + MediaInfo git-v24.01-g51dbd896; + nanosvg git-93ce879; + ZenLib git-v0.4.41-12-g26b4aa1. 1.6.11 - 2023-12-27 diff --git a/src/ExtLib/MediaInfo/Language/be.csv b/src/ExtLib/MediaInfo/Language/be.csv index 388040d7b2..8195ec8971 100644 --- a/src/ExtLib/MediaInfo/Language/be.csv +++ b/src/ExtLib/MediaInfo/Language/be.csv @@ -159,6 +159,9 @@ About;Пра праграму About_Hint;Як звязацца са мной і знайсці апошнюю версію праграмы Accompaniment;Суправаджэнне +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Актор diff --git a/src/ExtLib/MediaInfo/Language/ca.csv b/src/ExtLib/MediaInfo/Language/ca.csv index 393e23e7b7..cb88e82f5a 100644 --- a/src/ExtLib/MediaInfo/Language/ca.csv +++ b/src/ExtLib/MediaInfo/Language/ca.csv @@ -159,6 +159,9 @@ About;Quant a... About_Hint;Com contactar-me i trobar l'última versió Accompaniment;Acompanyament +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Descripció format actiu ActiveFormatDescription_MuxingMode;Descripció format actiu, mode multiplexor Actor;Actor @@ -1366,5 +1369,5 @@ Written_Location;Ubicació escrita WrittenBy;Escrit per Yes;Sí Your system;El teu sistema -ZZ_Automatic_Percent;76 +ZZ_Automatic_Percent;75 ZZ_AutomaticLanguage_Percent;79 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/cs.csv b/src/ExtLib/MediaInfo/Language/cs.csv index 91caa1fb3c..7f0d1b63e3 100644 --- a/src/ExtLib/MediaInfo/Language/cs.csv +++ b/src/ExtLib/MediaInfo/Language/cs.csv @@ -159,6 +159,9 @@ About;O programu About_Hint;O programu Accompaniment;Accompaniment +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Herec diff --git a/src/ExtLib/MediaInfo/Language/de.csv b/src/ExtLib/MediaInfo/Language/de.csv index eec0f3fcea..82d9161972 100644 --- a/src/ExtLib/MediaInfo/Language/de.csv +++ b/src/ExtLib/MediaInfo/Language/de.csv @@ -159,6 +159,9 @@ About;Über About_Hint;Kontakt und Infos zur neuesten Version Accompaniment;Begleitung +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Schauspieler @@ -1366,5 +1369,5 @@ Written_Location;Ort des Schreibbeginns WrittenBy;Geschrieben von Yes;Ja Your system;Deine Systeminformationen -ZZ_Automatic_Percent;66 +ZZ_Automatic_Percent;65 ZZ_AutomaticLanguage_Percent;70 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/es.csv b/src/ExtLib/MediaInfo/Language/es.csv index 8f209d02b3..21b2dbc3ac 100644 --- a/src/ExtLib/MediaInfo/Language/es.csv +++ b/src/ExtLib/MediaInfo/Language/es.csv @@ -159,6 +159,9 @@ About;Acerca de About_Hint;Cómo contactar con el autor y buscar la última versión Accompaniment;Acompañamiento +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Descripción formato activo ActiveFormatDescription_MuxingMode;Descripción formato activo, modo multiplexado Actor;Actor diff --git a/src/ExtLib/MediaInfo/Language/eu.csv b/src/ExtLib/MediaInfo/Language/eu.csv index 4d5fb7e0bd..043ec74de3 100644 --- a/src/ExtLib/MediaInfo/Language/eu.csv +++ b/src/ExtLib/MediaInfo/Language/eu.csv @@ -159,6 +159,9 @@ About;Honi buruz About_Hint;Nola jarri harremanetan nirekin eta azken bertsioa aurkitu Accompaniment;Laguntza +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Eragin Heuskarri Azalpena ActiveFormatDescription_MuxingMode;Eragin Heuskarri Azalpena, Nahasketa modua Actor;Antzezlea diff --git a/src/ExtLib/MediaInfo/Language/fr.csv b/src/ExtLib/MediaInfo/Language/fr.csv index ba9d4069f6..e4c6fa77ad 100644 --- a/src/ExtLib/MediaInfo/Language/fr.csv +++ b/src/ExtLib/MediaInfo/Language/fr.csv @@ -159,6 +159,9 @@ About;À propos About_Hint;Comment me contacter et trouver la dernière version Accompaniment;Accompagnement +Active_DisplayAspectRatio;Format actif à l'écran +Active_Height;Hauteur active +Active_Width;Largeur active ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Acteur diff --git a/src/ExtLib/MediaInfo/Language/gr.csv b/src/ExtLib/MediaInfo/Language/gr.csv index a1aa6d1612..e9b8f473e8 100644 --- a/src/ExtLib/MediaInfo/Language/gr.csv +++ b/src/ExtLib/MediaInfo/Language/gr.csv @@ -159,6 +159,9 @@ About;Πληροφορίες About_Hint;Πως θα επικοινωνήσετε μαζί μου και θα βρείτε νεότερη έκδoση Accompaniment;Συνοδεία +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Actor diff --git a/src/ExtLib/MediaInfo/Language/hu.csv b/src/ExtLib/MediaInfo/Language/hu.csv index 0601df6217..7b53a0ed8f 100644 --- a/src/ExtLib/MediaInfo/Language/hu.csv +++ b/src/ExtLib/MediaInfo/Language/hu.csv @@ -159,6 +159,9 @@ About;Névjegy About_Hint;Hogyan léphet velem kapcsolatba, illetve a legfrissebb változat lelőhelye Accompaniment;Kíséret +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Előadó @@ -1367,4 +1370,4 @@ WrittenBy;Írta Yes;igen Your system;Rendszer ZZ_Automatic_Percent;62 -ZZ_AutomaticLanguage_Percent;69 \ No newline at end of file +ZZ_AutomaticLanguage_Percent;68 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/hy.csv b/src/ExtLib/MediaInfo/Language/hy.csv index 68c8f7b123..345c67053b 100644 --- a/src/ExtLib/MediaInfo/Language/hy.csv +++ b/src/ExtLib/MediaInfo/Language/hy.csv @@ -159,6 +159,9 @@ About;Ծրագրի մասին About_Hint;Կապնվել ծրագրի հեղինակի հետ կամ բացել ծրագրի կայքը Accompaniment;Ուղեկցումը +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Կատարողը @@ -1367,4 +1370,4 @@ WrittenBy;Գրվել է՝ Yes;Այո Your system;Ձեր համակարգը ZZ_Automatic_Percent;67 -ZZ_AutomaticLanguage_Percent;72 \ No newline at end of file +ZZ_AutomaticLanguage_Percent;71 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/it.csv b/src/ExtLib/MediaInfo/Language/it.csv index 93863a0352..5901ed970f 100644 --- a/src/ExtLib/MediaInfo/Language/it.csv +++ b/src/ExtLib/MediaInfo/Language/it.csv @@ -159,6 +159,9 @@ About;Informazioni About_Hint;Come contattare l'autore e ottenere versione più recente Accompaniment;Accompagnamento +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Descrizione formato attivo ActiveFormatDescription_MuxingMode;Descrizione formato attivo, modo muxing Actor;Attore diff --git a/src/ExtLib/MediaInfo/Language/ja.csv b/src/ExtLib/MediaInfo/Language/ja.csv index 1387982269..a65198cab4 100644 --- a/src/ExtLib/MediaInfo/Language/ja.csv +++ b/src/ExtLib/MediaInfo/Language/ja.csv @@ -159,6 +159,9 @@ About;このソフトの情報 About_Hint;連絡方法と最新版チェック Accompaniment;伴奏 +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;アクティブフォーマットデスクリプション ActiveFormatDescription_MuxingMode;アクティブフォーマットデスクリプション Mux 種別 Actor;主演 diff --git a/src/ExtLib/MediaInfo/Language/ko.csv b/src/ExtLib/MediaInfo/Language/ko.csv index a754b87110..e5d5c77d15 100644 --- a/src/ExtLib/MediaInfo/Language/ko.csv +++ b/src/ExtLib/MediaInfo/Language/ko.csv @@ -159,6 +159,9 @@ About;정보 About_Hint;연락처와 최신 버전 확인 Accompaniment;반주 +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;배우 @@ -1366,5 +1369,5 @@ Written_Location;제작 장소 WrittenBy;제작자 Yes;예 Your system;이 시스템 -ZZ_Automatic_Percent;66 +ZZ_Automatic_Percent;65 ZZ_AutomaticLanguage_Percent;70 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/nl.csv b/src/ExtLib/MediaInfo/Language/nl.csv index 3be10b8647..5c100e1dcc 100644 --- a/src/ExtLib/MediaInfo/Language/nl.csv +++ b/src/ExtLib/MediaInfo/Language/nl.csv @@ -159,6 +159,9 @@ About;Info About_Hint;Hoe neemt u contact met mij op en vindt u de nieuwste versie Accompaniment;Begeleiding +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Acteur diff --git a/src/ExtLib/MediaInfo/Language/pl.csv b/src/ExtLib/MediaInfo/Language/pl.csv index 1490b32009..5e355b795e 100644 --- a/src/ExtLib/MediaInfo/Language/pl.csv +++ b/src/ExtLib/MediaInfo/Language/pl.csv @@ -159,6 +159,9 @@ About;O programie About_Hint;Kontakt i informacje o nowych wersjach Accompaniment;Akompaniament +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Aktor diff --git a/src/ExtLib/MediaInfo/Language/pt-BR.csv b/src/ExtLib/MediaInfo/Language/pt-BR.csv index 88c69d1962..5fec1cbd25 100644 --- a/src/ExtLib/MediaInfo/Language/pt-BR.csv +++ b/src/ExtLib/MediaInfo/Language/pt-BR.csv @@ -159,6 +159,9 @@ About;Sobre About_Hint;Como me contatar e buscar a versão mais nova Accompaniment;Acompanhamento +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Ator @@ -1366,5 +1369,5 @@ Written_Location;Local da escrita WrittenBy;Escrito por Yes;Sim Your system;Seu sistema -ZZ_Automatic_Percent;66 +ZZ_Automatic_Percent;65 ZZ_AutomaticLanguage_Percent;70 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/ro.csv b/src/ExtLib/MediaInfo/Language/ro.csv index e56cb9f4b9..70de8a4adb 100644 --- a/src/ExtLib/MediaInfo/Language/ro.csv +++ b/src/ExtLib/MediaInfo/Language/ro.csv @@ -159,6 +159,9 @@ About;Despre About_Hint;Sfaturi Accompaniment;Acompaniament +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Actor @@ -1367,4 +1370,4 @@ WrittenBy;Scris de Yes;Da Your system;Sistemul dvs ZZ_Automatic_Percent;24 -ZZ_AutomaticLanguage_Percent;54 \ No newline at end of file +ZZ_AutomaticLanguage_Percent;53 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/ru.csv b/src/ExtLib/MediaInfo/Language/ru.csv index acb13eba85..d84098269f 100644 --- a/src/ExtLib/MediaInfo/Language/ru.csv +++ b/src/ExtLib/MediaInfo/Language/ru.csv @@ -159,6 +159,9 @@ About;О программе About_Hint;Как связаться со мной и найти последнюю версию программы Accompaniment;Сопровождение +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Описание активного формата ActiveFormatDescription_MuxingMode;Описание активного формата, режим смешивания Actor;Исполнитель @@ -1366,5 +1369,5 @@ Written_Location;Место записи WrittenBy;Запись произвёл Yes;Да Your system;Ваша система -ZZ_Automatic_Percent;50 -ZZ_AutomaticLanguage_Percent;79 \ No newline at end of file +ZZ_Automatic_Percent;49 +ZZ_AutomaticLanguage_Percent;78 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/sk.csv b/src/ExtLib/MediaInfo/Language/sk.csv index f6fa776e6e..189df96bd6 100644 --- a/src/ExtLib/MediaInfo/Language/sk.csv +++ b/src/ExtLib/MediaInfo/Language/sk.csv @@ -159,6 +159,9 @@ About;O programe About_Hint;O programe Accompaniment;Accompaniment +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;Herec diff --git a/src/ExtLib/MediaInfo/Language/sv.csv b/src/ExtLib/MediaInfo/Language/sv.csv index ab0bee20a4..30c2d83047 100644 --- a/src/ExtLib/MediaInfo/Language/sv.csv +++ b/src/ExtLib/MediaInfo/Language/sv.csv @@ -159,6 +159,9 @@ About;Om About_Hint;Kontakt - och versionsinformation Accompaniment;Ackompanjemang +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Aktiv formatbeskrivning ActiveFormatDescription_MuxingMode;Aktiv formatbeskrivning, mux-läge Actor;Skådespelare diff --git a/src/ExtLib/MediaInfo/Language/tr.csv b/src/ExtLib/MediaInfo/Language/tr.csv index 881180082b..49e53d759d 100644 --- a/src/ExtLib/MediaInfo/Language/tr.csv +++ b/src/ExtLib/MediaInfo/Language/tr.csv @@ -159,6 +159,9 @@ About;Hakkında About_Hint;Bana nasıl ulaşacak ve son sürümü nasıl bulacaksınız Accompaniment;Eşlik eden +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Etkin Biçim Açıklaması ActiveFormatDescription_MuxingMode;Etkin Biçim Açıklaması, Çoklama kipi Actor;Oyuncu diff --git a/src/ExtLib/MediaInfo/Language/uk.csv b/src/ExtLib/MediaInfo/Language/uk.csv index f5902c3fe6..1ad2661786 100644 --- a/src/ExtLib/MediaInfo/Language/uk.csv +++ b/src/ExtLib/MediaInfo/Language/uk.csv @@ -159,6 +159,9 @@ About;Про програму About_Hint;Контакти та пошук нової версії Accompaniment;Супровід +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;Чинний опис формату ActiveFormatDescription_MuxingMode;Чинний опис формату, Режим мультиплексування Actor;Актор @@ -1367,4 +1370,4 @@ WrittenBy;Записано Yes;Так Your system;Ваша система ZZ_Automatic_Percent;68 -ZZ_AutomaticLanguage_Percent;73 \ No newline at end of file +ZZ_AutomaticLanguage_Percent;72 \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/Language/zh-CN.csv b/src/ExtLib/MediaInfo/Language/zh-CN.csv index 57c979ea13..99d6dad777 100644 --- a/src/ExtLib/MediaInfo/Language/zh-CN.csv +++ b/src/ExtLib/MediaInfo/Language/zh-CN.csv @@ -159,6 +159,9 @@ About;关于 About_Hint;联系作者和检查更新 Accompaniment;伴奏 +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription;活动图像标识符 (AFD) ActiveFormatDescription_MuxingMode;活动图像标识符 (AFD), 混流模式 Actor;演员 diff --git a/src/ExtLib/MediaInfo/Language/zh-TW.csv b/src/ExtLib/MediaInfo/Language/zh-TW.csv index a3beee76ec..db7d320416 100644 --- a/src/ExtLib/MediaInfo/Language/zh-TW.csv +++ b/src/ExtLib/MediaInfo/Language/zh-TW.csv @@ -159,6 +159,9 @@ About;關於 About_Hint;如何聯絡作者以及尋找最新版 Accompaniment;伴奏 +Active_DisplayAspectRatio; +Active_Height; +Active_Width; ActiveFormatDescription; ActiveFormatDescription_MuxingMode; Actor;主演 diff --git a/src/ExtLib/MediaInfo/MediaInfo.vcxproj b/src/ExtLib/MediaInfo/MediaInfo.vcxproj index 2502988f93..b5350f697c 100644 --- a/src/ExtLib/MediaInfo/MediaInfo.vcxproj +++ b/src/ExtLib/MediaInfo/MediaInfo.vcxproj @@ -151,6 +151,7 @@ + @@ -520,6 +521,7 @@ + diff --git a/src/ExtLib/MediaInfo/MediaInfo.vcxproj.filters b/src/ExtLib/MediaInfo/MediaInfo.vcxproj.filters index 15966dcf4e..9ea49ecd1d 100644 --- a/src/ExtLib/MediaInfo/MediaInfo.vcxproj.filters +++ b/src/ExtLib/MediaInfo/MediaInfo.vcxproj.filters @@ -770,6 +770,9 @@ Header Files\Tag + + Header Files\Video + @@ -1486,5 +1489,8 @@ Source Files\Tag + + Source Files\Video + \ No newline at end of file diff --git a/src/ExtLib/MediaInfo/MediaInfo/Audio/File_Adm.cpp b/src/ExtLib/MediaInfo/MediaInfo/Audio/File_Adm.cpp index f1986491f3..fd620cd65a 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Audio/File_Adm.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Audio/File_Adm.cpp @@ -38,7 +38,9 @@ //--------------------------------------------------------------------------- #include "MediaInfo/Audio/File_Adm.h" #include "ThirdParty/tfsxml/tfsxml.h" +#include #include +#include using namespace ZenLib; using namespace std; //--------------------------------------------------------------------------- @@ -47,7 +49,23 @@ namespace MediaInfoLib { #define IncoherencyMessage "Incoherency between enums and message strings" - + +static const char* ADM_Dolby_1_0 = " (additional constraint from Dolby Atmos Master ADM Profile v1.0)"; +static const char* ADM_Dolby_1_1 = " (additional constraint from Dolby Atmos Master ADM Profile v1.1)"; + +//--------------------------------------------------------------------------- +static const char Hex2String_List[16] = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; +static string Hex2String(int Value, size_t Size) +{ + string Result; + Result.resize(Size); + for (int i = (int)Size - 1; i >= 0; i--) { + Result[i] = Hex2String_List[Value & 0xF]; + Value >>= 4; + } + return Result; +} + //--------------------------------------------------------------------------- static int32u pow10(int i) { @@ -211,32 +229,35 @@ static bool IsHexaDigit(const string& Value, size_t pos, size_t len) return true; } -enum flags { +enum check_flags_items { Version0, Version1, Version2, Count0, - Count1, Count2, + Dolby0, + Dolby1, + Dolby2, flags_Max }; +class check_flags : public bitset { +public: + constexpr check_flags(unsigned long val) : bitset(val) {} + constexpr check_flags(unsigned long val0, unsigned long val1, unsigned long val2, unsigned long val3, unsigned long val4, unsigned long val5, unsigned long val6, unsigned long val7) + : check_flags((val0 << 0) | (val1 << 1) | (val2 << 2) | (val3 << 3) | (val4 << 4) | (val5 << 5) | (val6 << 6) | (val7 << 7)) {} +}; struct attribute_item { const char* Name; - bitset Flags; + check_flags Flags; }; +typedef attribute_item attribute_items[]; struct element_item { const char* Name; - int Flags; -}; - -struct element { - attribute_item* Attributes; - element_item* Elements; - int Attributes_Count; - int Elements_Count; + check_flags Flags; }; +typedef element_item element_items[]; enum item { item_audioTrack, @@ -249,54 +270,24 @@ enum item { item_audioTrackFormat, item_audioStreamFormat, item_audioBlockFormat, + item_position, item_alternativeValueSet, item_Max }; -struct item_info -{ - const char* Name; - const char* ID_Begin; - enum flags { - Flags_ID_W, - Flags_ID_YX, - Flags_ID_Z1, // Z width x2 - Flags_ID_Z2, // Z width x2 - Flags_Max, - }; - int8u ID_Flags; -}; -#define D(_1,_2,_3) {_1,_2,_3} -#define F(_1) (1 << item_info::Flags_##_1) -static item_info item_Info[] = { - D("TrackIndex", nullptr, 0), - D("Programme", "APR", F(ID_W)), - D("Content", "ACO", F(ID_W)), - D("Object", "AO", F(ID_W)), - D("PackFormat", "AP", F(ID_YX)), - D("ChannelFormat", "AC", F(ID_YX)), - D("TrackUID", "ATU", 0), - D("TrackFormat", "AT", F(ID_YX) | F(ID_Z1)), - D("StreamFormat", "AS", F(ID_YX)), - D("BlockFormat", "AB", F(ID_YX) | F(ID_Z1) | F(ID_Z2)), - D("alternativeValueSet", "AVS", F(ID_W) | F(ID_Z2)), -}; -#undef D -#undef F -static_assert(sizeof(item_Info) / sizeof(item_info) == item_Max, IncoherencyMessage); - -enum audioTrack_String { - audioTrack_audioTrackID, - audioTrack_Summary, - audioTrack_String_Max +enum audioTrack_Attribute { + audioTrack_trackID, + audioTrack_formatLabel, + audioTrack_formatDefinition, + audioTrack_Attribute_Max }; -enum audioTrack_StringVector { +enum audioTrack_Element { audioTrack_audioTrackUIDRef, - audioTrack_StringVector_Max + audioTrack_Element_Max }; -enum audioProgramme_String { +enum audioProgramme_Attribute { audioProgramme_audioProgrammeID, audioProgramme_audioProgrammeName, audioProgramme_audioProgrammeLanguage, @@ -311,10 +302,10 @@ enum audioProgramme_String { audioProgramme_formatLink, audioProgramme_formatLanguage, audioProgramme_maxDuckingDepth, - audioProgramme_String_Max + audioProgramme_Attribute_Max }; -enum audioProgramme_StringVector { +enum audioProgramme_Element { audioProgramme_audioProgrammeLabel, audioProgramme_audioContentIDRef, audioProgramme_loudnessMetadata, @@ -324,113 +315,198 @@ enum audioProgramme_StringVector { audioProgramme_authoringInformation_referenceLayout, audioProgramme_authoringInformation_referenceLayout_audioPackFormatIDRef, audioProgramme_alternativeValueSetIDRef, - audioProgramme_StringVector_Max + audioProgramme_Element_Max }; -enum audioContent_String { +enum audioContent_Attribute { audioContent_audioContentID, audioContent_audioContentName, audioContent_audioContentLanguage, audioContent_typeLabel, - audioContent_String_Max + audioContent_Attribute_Max }; -enum audioContent_StringVector { - audioContent_dialogue, +enum audioContent_Element { audioContent_audioContentLabel, + audioContent_audioObjectIDRef, audioContent_loudnessMetadata, audioContent_loudnessMetadata_integratedLoudness, - audioContent_audioObjectIDRef, - audioContent_StringVector_Max + audioContent_dialogue, + audioContent_alternativeValueSetIDRef, + audioContent_Element_Max }; -enum audioObject_String { +enum audioObject_Attribute { audioObject_audioObjectID, audioObject_audioObjectName, audioObject_start, audioObject_startTime, audioObject_duration, + audioObject_dialogue, + audioObject_importance, + audioObject_interact, + audioObject_disableDucking, audioObject_typeLabel, - audioObject_String_Max + audioObject_Attribute_Max }; -enum audioObject_StringVector { +enum audioObject_Element { audioObject_audioPackFormatIDRef, - audioObject_audioTrackUIDRef, audioObject_audioObjectIDRef, + audioObject_audioObjectLabel, + audioObject_audioComplementaryObjectGroupLabel, audioObject_audioComplementaryObjectIDRef, - audioObject_StringVector_Max + audioObject_audioTrackUIDRef, + audioObject_audioObjectInteraction, + audioObject_gain, + audioObject_headLocked, + audioObject_positionOffset, + audioObject_mute, + audioObject_alternativeValueSet, + audioObject_Element_Max }; -enum audioPackFormat_String { +enum audioPackFormat_Attribute { audioPackFormat_audioPackFormatID, audioPackFormat_audioPackFormatName, audioPackFormat_typeDefinition, audioPackFormat_typeLabel, - audioPackFormat_String_Max + audioPackFormat_typeLink, + audioPackFormat_typeLanguage, + audioPackFormat_importance, + audioPackFormat_Attribute_Max }; -enum audioPackFormat_StringVector { +enum audioPackFormat_Element { audioPackFormat_audioChannelFormatIDRef, - audioPackFormat_StringVector_Max + audioPackFormat_audioPackFormatIDRef, + audioPackFormat_absoluteDistance, + audioPackFormat_encodePackFormatIDRef, + audioPackFormat_decodePackFormatIDRef, + audioPackFormat_inputPackFormatIDRef, + audioPackFormat_outputPackFormatIDRef, + audioPackFormat_normalization, + audioPackFormat_nfcRefDist, + audioPackFormat_screenRef, + audioPackFormat_Element_Max }; -enum audioChannelFormat_String { +enum audioChannelFormat_Attribute { audioChannelFormat_audioChannelFormatID, audioChannelFormat_audioChannelFormatName, audioChannelFormat_typeDefinition, audioChannelFormat_typeLabel, - audioChannelFormat_String_Max + audioChannelFormat_typeLink, + audioChannelFormat_typeLanguage, + audioChannelFormat_Attribute_Max }; -enum audioChannelFormat_StringVector { - audioChannelFormat_StringVector_Max +enum audioChannelFormat_Element { + audioChannelFormat_audioBlockFormat, + audioChannelFormat_frequency, + audioChannelFormat_Element_Max }; -enum audioTrackUID_String { +enum audioTrackUID_Attribute { audioTrackUID_UID, - audioTrackUID_bitDepth, audioTrackUID_sampleRate, + audioTrackUID_bitDepth, audioTrackUID_typeLabel, - audioTrackUID_String_Max + audioTrackUID_Attribute_Max }; -enum audioTrackUID_StringVector { +enum audioTrackUID_Element { + audioTrackUID_audioMXFLookUp, + audioTrackUID_audioTrackFormatIDRef, audioTrackUID_audioChannelFormatIDRef, audioTrackUID_audioPackFormatIDRef, - audioTrackUID_audioTrackFormatIDRef, - audioTrackUID_StringVector_Max + audioTrackUID_Element_Max }; -enum audioTrackFormat_String { +enum audioTrackFormat_Attribute { audioTrackFormat_audioTrackFormatID, audioTrackFormat_audioTrackFormatName, - audioTrackFormat_formatDefinition, audioTrackFormat_typeDefinition, audioTrackFormat_typeLabel, - audioTrackFormat_String_Max + audioTrackFormat_formatLabel, + audioTrackFormat_formatDefinition, + audioTrackFormat_formatLink, + audioTrackFormat_formatLanguage, + audioTrackFormat_Attribute_Max }; -enum audioTrackFormat_StringVector { +enum audioTrackFormat_Element { audioTrackFormat_audioStreamFormatIDRef, - audioTrackFormat_StringVector_Max + audioTrackFormat_Element_Max }; -enum audioStreamFormat_String { +enum audioStreamFormat_Attribute { audioStreamFormat_audioStreamFormatID, audioStreamFormat_audioStreamFormatName, - audioStreamFormat_formatDefinition, - audioStreamFormat_formatLabel, - audioStreamFormat_typeDefinition, audioStreamFormat_typeLabel, - audioStreamFormat_String_Max + audioStreamFormat_typeDefinition, + audioStreamFormat_formatLabel, + audioStreamFormat_formatDefinition, + audioStreamFormat_formatLink, + audioStreamFormat_formatLanguage, + audioStreamFormat_Attribute_Max }; -enum audioStreamFormat_StringVector { +enum audioStreamFormat_Element { audioStreamFormat_audioChannelFormatIDRef, audioStreamFormat_audioPackFormatIDRef, audioStreamFormat_audioTrackFormatIDRef, - audioStreamFormat_StringVector_Max + audioStreamFormat_Element_Max +}; + +enum audioBlockFormat_Attribute { + audioBlockFormat_audioBlockFormatID, + audioBlockFormat_rtime, + audioBlockFormat_duration, + audioBlockFormat_lstart, + audioBlockFormat_lduration, + audioBlockFormat_initializeBlock, + audioBlockFormat_Attribute_Max +}; + +enum audioBlockFormat_Element { + audioBlockFormat_gain, + audioBlockFormat_importance, + audioBlockFormat_headLocked, + audioBlockFormat_headphoneVirtualise, + audioBlockFormat_speakerLabel, + audioBlockFormat_position, + audioBlockFormat_outputChannelFormatIDRef, + audioBlockFormat_outputChannelIDRef, + audioBlockFormat_jumpPosition, + audioBlockFormat_matrix, + audioBlockFormat_coefficient, + audioBlockFormat_width, + audioBlockFormat_height, + audioBlockFormat_depth, + audioBlockFormat_cartesian, + audioBlockFormat_diffuse, + audioBlockFormat_channelLock, + audioBlockFormat_objectDivergence, + audioBlockFormat_zoneExclusion, + audioBlockFormat_equation, + audioBlockFormat_order, + audioBlockFormat_degree, + audioBlockFormat_normalization, + audioBlockFormat_nfcRefDist, + audioBlockFormat_screenRef, + audioBlockFormat_Element_Max +}; + +enum position_Attribute { + position_coordinate, + position_bound, + position_screenEdgeLock, + position_Attribute_Max +}; + +enum position_Element { + position_Element_Max }; enum error_Type { @@ -444,58 +520,521 @@ static const char* error_Type_String[] = { "Warnings", }; -static attribute_item audioProgramme_Attributes[] = +enum schema { + Schema_Unknown, + Schema_ebuCore_2014, + Schema_ebuCore_2016, + Schema_Max +}; + +static const char* schema_String[] = { + "ebuCore_2014", + "ebuCore_2016", +}; +static constexpr size_t schema_String_Size = sizeof(schema_String) / sizeof(schema_String[0]); +static_assert(schema_String_Size + 1 == Schema_Max, IncoherencyMessage); + + + // Version |Count|Dolby + // 0 1 2 |0 2+|0 1 2+ + // 0 1 2 |0 2+|0 1 2+ +static attribute_items audioTrack_Attributes = +{ + { "trackID" , { 1, 1, 1, 1, 0, 0, 0, 0 } }, + { "formatLabel" , { 1, 1, 1, 1, 0, 0, 0, 0 } }, + { "formatDefinition" , { 1, 1, 1, 1, 0, 0, 0, 0 } }, +}; +static_assert(sizeof(audioTrack_Attributes) / sizeof(attribute_item) == audioTrack_Attribute_Max, IncoherencyMessage); + +static element_items audioTrack_Elements = { - { "audioProgrammeID" , (1 << Version0) | (1 << Version1) | (1 << Version2) | (1 << Count1) }, - { "audioProgrammeName" , (1 << Version0) | (1 << Version1) | (1 << Version2) | (1 << Count1) }, - { "audioProgrammeLanguage" , (1 << Version0) | (1 << Version1) | (1 << Version2) }, - { "start" , (1 << Version0) | (1 << Version1) | (1 << Version2) }, - { "end" , (1 << Version0) | (1 << Version1) | (1 << Version2) }, - { "typeLabel" , (1 << Version0) }, - { "typeDefinition" , (1 << Version0) }, - { "typeLink" , (1 << Version0) }, - { "typeLanguage" , (1 << Version0) }, - { "formatLabel" , (1 << Version0) }, - { "formatDefinition" , (1 << Version0) }, - { "formatLink" , (1 << Version0) }, - { "formatLanguage" , (1 << Version0) }, - { "maxDuckingDepth" , (1 << Version0) | (1 << Version1) | (1 << Version2) }, -}; -static_assert(sizeof(audioProgramme_Attributes) / sizeof(attribute_item) == audioProgramme_String_Max, IncoherencyMessage); - -static element_item audioProgramme_Elements[] = + { "audioTrackUIDRef" , { 1, 1, 1, 1, 1, 0, 0, 0 } }, +}; +static_assert(sizeof(audioTrack_Elements) / sizeof(attribute_item) == audioTrack_Element_Max, IncoherencyMessage); + +static attribute_items audioProgramme_Attributes = { - { "audioProgrammeLabel" , (1 << Version2) }, - { "audioContentIDRef" , (1 << Version0) | (1 << Version1) | (1 << Version2) | (1 << Count1) | (1 << Count2) }, - { "loudnessMetadata" , (1 << Version0) | (1 << Version1) | (1 << Version2) }, - { "integratedLoudness" , (1 << Version0) | (1 << Version1) | (1 << Version2) }, - { "audioProgrammeReferenceScreen" , (1 << Version0) | (1 << Version1) | (1 << Version2) | (1 << Count0) | (1 << Count1) }, - { "authoringInformation" , (1 << Version2) | (1 << Count0) | (1 << Count1) }, - { "referenceLayout" , (1 << Version2) | (1 << Count0) | (1 << Count1) }, - { "audioPackFormatIDRef" , (1 << Version2) | (1 << Count0) | (1 << Count1) }, - { "alternativeValueSetIDRef" , (1 << Version2) | (1 << Count0) | (1 << Count1) }, -}; -static_assert(sizeof(audioProgramme_Elements) / sizeof(attribute_item) == audioProgramme_StringVector_Max, IncoherencyMessage); - -static element audioProgramme_Element = + { "audioProgrammeID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioProgrammeName" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioProgrammeLanguage" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "start" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "end" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "typeLabel" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "typeDefinition" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "typeLink" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "typeLanguage" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "formatLabel" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "formatDefinition" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "formatLink" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "formatLanguage" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "maxDuckingDepth" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, +}; +static_assert(sizeof(audioProgramme_Attributes) / sizeof(attribute_item) == audioProgramme_Attribute_Max, IncoherencyMessage); + +static element_items audioProgramme_Elements = { - audioProgramme_Attributes, - audioProgramme_Elements, - sizeof(audioProgramme_Attributes) / sizeof(attribute_item), - sizeof(audioProgramme_Elements) / sizeof(element_item), + { "audioProgrammeLabel" , { 0, 0, 1, 1, 1, 1, 0, 0 } }, + { "audioContentIDRef" , { 1, 1, 1, 0, 1, 0, 1, 1 } }, + { "loudnessMetadata" , { 1, 1, 1, 1, 1, 1, 1, 0 } }, + { "integratedLoudness" , { 1, 1, 1, 1, 1, 1, 1, 1 } }, // TODO + { "audioProgrammeReferenceScreen" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "authoringInformation" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "referenceLayout" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, // TODO + { "audioPackFormatIDRef" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, // TODO + { "alternativeValueSetIDRef" , { 0, 0, 1, 1, 1, 1, 0, 0 } }, +}; +static_assert(sizeof(audioProgramme_Elements) / sizeof(attribute_item) == audioProgramme_Element_Max, IncoherencyMessage); + +static attribute_items audioContent_Attributes = +{ + { "audioContentID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioContentName" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioContentLanguage" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "typeLabel" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, // TODO +}; +static_assert(sizeof(audioContent_Attributes) / sizeof(attribute_item) == audioContent_Attribute_Max, IncoherencyMessage); + +static element_items audioContent_Elements = +{ + { "audioContentLabel" , { 0, 0, 1, 1, 1, 1, 0, 0 } }, + { "audioObjectIDRef" , { 1, 1, 1, 0, 1, 0, 1, 1 } }, + { "loudnessMetadata" , { 1, 1, 1, 1, 1, 1, 1, 0 } }, + { "loudnessMetadata_integratedLoudness" , { 1, 1, 1, 1, 1, 1, 1, 1 } }, // TODO + { "dialogue" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "alternativeValueSetIDRef" , { 0, 0, 1, 1, 1, 1, 0, 0 } }, +}; +static_assert(sizeof(audioContent_Elements) / sizeof(attribute_item) == audioContent_Element_Max, IncoherencyMessage); + +static attribute_items audioObject_Attributes = +{ + { "audioObjectID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioObjectName" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "start" , { 0, 1, 1, 1, 0, 1, 1, 0 } }, + { "startTime" , { 1, 0, 0, 1, 0, 1, 1, 0 } }, + { "duration" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "dialogue" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "importance" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "interact" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "disableDucking" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "typeLabel" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, // TODO +}; +static_assert(sizeof(audioObject_Attributes) / sizeof(attribute_item) == audioObject_Attribute_Max, IncoherencyMessage); + +static element_items audioObject_Elements = +{ + { "audioPackFormatIDRef" , { 1, 1, 1, 1, 1, 0, 1, 0 } }, + { "audioObjectIDRef" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, + { "audioObjectLabel" , { 0, 0, 1, 1, 1, 1, 0, 0 } }, + { "audioComplementaryObjectGroupLabel" , { 0, 0, 1, 1, 1, 1, 0, 0 } }, + { "audioComplementaryObjectIDRef" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, + { "audioTrackUIDRef" , { 1, 1, 1, 1, 1, 0, 1, 1 } }, + { "audioObjectInteraction" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "gain" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "headLocked" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "positionOffset" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "mute" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "alternativeValueSet" , { 0, 0, 1, 1, 1, 1, 0, 0 } }, +}; +static_assert(sizeof(audioObject_Elements) / sizeof(attribute_item) == audioObject_Element_Max, IncoherencyMessage); + +static attribute_items audioPackFormat_Attributes = +{ + { "audioPackFormatID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioPackFormatName" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "typeDefinition" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "typeLabel" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "typeLink" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "typeLanguage" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "importance" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, +}; +static_assert(sizeof(audioPackFormat_Attributes) / sizeof(attribute_item) == audioPackFormat_Attribute_Max, IncoherencyMessage); + +static element_items audioPackFormat_Elements = +{ + { "audioChannelFormatIDRef" , { 1, 1, 1, 1, 1, 0, 1, 1 } }, + { "audioPackFormatIDRef" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, + { "absoluteDistance" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "encodePackFormatIDRef" , { 0, 1, 1, 1, 1, 1, 0, 0 } }, + { "decodePackFormatIDRef" , { 0, 1, 1, 1, 1, 1, 0, 0 } }, + { "inputPackFormatIDRef" , { 0, 1, 1, 1, 0, 1, 0, 0 } }, + { "outputPackFormatIDRef" , { 0, 1, 1, 1, 0, 1, 0, 0 } }, + { "normalization" , { 0, 1, 1, 1, 0, 1, 0, 0 } }, + { "nfcRefDist" , { 0, 1, 1, 1, 0, 1, 0, 0 } }, + { "screenRef" , { 0, 1, 1, 1, 0, 1, 0, 0 } }, +}; +static_assert(sizeof(audioPackFormat_Elements) / sizeof(attribute_item) == audioPackFormat_Element_Max, IncoherencyMessage); + +static attribute_items audioChannelFormat_Attributes = +{ + { "audioChannelFormatID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioChannelFormatName" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "typeDefinition" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "typeLabel" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "typeLink" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, + { "typeLanguage" , { 1, 0, 0, 1, 0, 1, 0, 0 } }, +}; +static_assert(sizeof(audioChannelFormat_Attributes) / sizeof(attribute_item) == audioChannelFormat_Attribute_Max, IncoherencyMessage); + +static element_items audioChannelFormat_Elements = +{ + { "audioBlockFormat" , { 1, 1, 1, 0, 1, 0, 1, 1 } }, + { "frequency" , { 1, 1, 1, 1, 1, 1, 1, 1 } }, +}; +static_assert(sizeof(audioChannelFormat_Elements) / sizeof(attribute_item) == audioChannelFormat_Element_Max, IncoherencyMessage); + +static attribute_items audioTrackUID_Attributes = +{ + { "UID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "sampleRate" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "bitDepth" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "typeLabel" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, // TODO +}; +static_assert(sizeof(audioTrackUID_Attributes) / sizeof(attribute_item) == audioTrackUID_Attribute_Max, IncoherencyMessage); + +static element_items audioTrackUID_Elements = +{ + { "audioMXFLookUp" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "audioTrackFormatIDRef" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "audioChannelFormatIDRef" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "audioPackFormatIDRef" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, +}; +static_assert(sizeof(audioTrackUID_Elements) / sizeof(attribute_item) == audioTrackUID_Element_Max, IncoherencyMessage); + +static attribute_items audioTrackFormat_Attributes = +{ + { "audioTrackFormatID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioTrackFormatName" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "typeLabel" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, // TODO: present in some Dolby files + { "typeDefinition" , { 0, 0, 0, 1, 0, 1, 0, 0 } }, // TODO: present in some Dolby files + { "formatLabel" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "formatDefinition" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "formatLink" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "formatLanguage" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, +}; +static_assert(sizeof(audioTrackFormat_Attributes) / sizeof(attribute_item) == audioTrackFormat_Attribute_Max, IncoherencyMessage); + +static element_items audioTrackFormat_Elements = +{ + { "audioStreamFormatIDRef" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, +}; +static_assert(sizeof(audioTrackFormat_Elements) / sizeof(attribute_item) == audioTrackFormat_Element_Max, IncoherencyMessage); + +static attribute_items audioStreamFormat_Attributes = +{ + { "audioStreamFormatID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "audioStreamFormatName" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "typeLabel" , { 0, 0, 0, 1, 0, 1, 0, 0 } }, // TODO: present in some Dolby files + { "typeDefinition" , { 0, 0, 0, 1, 0, 1, 0, 0 } }, // TODO: present in some Dolby files + { "formatLabel" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "formatDefinition" , { 1, 0, 1, 1, 0, 0, 1, 0 } }, + { "formatLink" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "formatLanguage" , { 1, 0, 1, 1, 0, 1, 0, 0 } }, +}; +static_assert(sizeof(audioStreamFormat_Attributes) / sizeof(attribute_item) == audioStreamFormat_Attribute_Max, IncoherencyMessage); + +static element_items audioStreamFormat_Elements = +{ + { "audioChannelFormatIDRef" , { 1, 1, 1, 1, 1, 0, 1, 0 } }, + { "audioPackFormatIDRef" , { 1, 1, 1, 1, 1, 0, 1, 0 } }, + { "audioTrackFormatIDRef" , { 1, 1, 1, 1, 1, 0, 1, 0 } }, +}; +static_assert(sizeof(audioStreamFormat_Elements) / sizeof(attribute_item) == audioStreamFormat_Element_Max, IncoherencyMessage); + +static attribute_items audioBlockFormat_Attributes = +{ + { "audioBlockFormatID" , { 1, 1, 1, 0, 0, 0, 1, 0 } }, + { "rtime" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "duration" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "lstart" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "lduration" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "initializeBlock" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, +}; +static_assert(sizeof(audioBlockFormat_Attributes) / sizeof(attribute_item) == audioBlockFormat_Attribute_Max, IncoherencyMessage); + +static element_items audioBlockFormat_Elements = +{ + { "gain" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "importance" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "headLocked" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "headphoneVirtualise" , { 0, 0, 1, 1, 0, 1, 0, 0 } }, + { "speakerLabel" , { 1, 1, 1, 1, 1, 1, 1, 0 } }, //TODO should be Dolby1 only for Objects only + { "position" , { 1, 1, 1, 1, 1, 0, 1, 1 } }, + { "outputChannelFormatIDRef" , { 0, 1, 1, 1, 0, 1, 0, 0 } }, + { "outputChannelIDRef," , { 0, 1, 1, 1, 0, 1, 0, 0 } }, + { "jumpPosition" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, //TODO should be Dolby1 only for Objects only + { "matrix" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "coefficient" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "width" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "height" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "depth" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "cartesian" , { 1, 1, 1, 1, 0, 1, 1, 0 } }, + { "diffuse" , { 1, 1, 1, 1, 1, 1, 1, 0 } }, + { "channelLock" , { 1, 1, 1, 1, 1, 1, 1, 0 } }, + { "objectDivergence" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, + { "zoneExclusion" , { 1, 1, 1, 1, 1, 1, 1, 0 } }, + { "equation" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, + { "order" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, + { "degree" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, + { "normalization" , { 0, 1, 1, 1, 1, 1, 0, 0 } }, + { "nfcRefDist" , { 0, 1, 1, 1, 1, 1, 0, 0 } }, + { "screenRef" , { 1, 1, 1, 1, 1, 1, 0, 0 } }, +}; +static_assert(sizeof(audioBlockFormat_Elements) / sizeof(attribute_item) == audioBlockFormat_Element_Max, IncoherencyMessage); + +static attribute_items position_Attributes = +{ + { "coordinate" , { 1, 1, 1, 1, 0, 0, 1, 0 } }, + { "bound" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, + { "screenEdgeLock" , { 1, 1, 1, 1, 0, 1, 0, 0 } }, +}; +static_assert(sizeof(position_Attributes) / sizeof(attribute_item) == position_Attribute_Max, IncoherencyMessage); + +static const char* formatDefinition_List[] = { "PCM" }; +enum format +{ + Format_Unknown, + Format_PCM, + Format_Max +}; +static_assert(1 + sizeof(formatDefinition_List) / sizeof(formatDefinition_List[0]) == Format_Max, IncoherencyMessage); +static const char* typeDefinition_List[] = { "DirectSpeakers", "Matrix", "Objects", "HOA", "Binaural" }; +enum type +{ + Type_Unknown, + Type_DirectSpeakers, + Type_Matrix, + Type_Objects, + Type_HOA, + Type_Binaural, + Type_Max +}; +static_assert(1 + sizeof(typeDefinition_List) / sizeof(typeDefinition_List[0]) == Type_Max, IncoherencyMessage); +enum style : int8u { + Style_Format, + Style_Type, + Style_Max = (style)-1 +}; +struct item_style_info { + const char** formatDefinition_List; + const int8u formatDefinition_Size; +}; +static item_style_info Style_Infos[] = { + {formatDefinition_List, Format_Max}, + {typeDefinition_List, Type_Max}, +}; + +struct item_info { + attribute_items* Attribute_Infos; + element_items* Element_Infos; + const char* Name; + const char* ID_Begin; + enum flags { + Flags_ID_W, + Flags_ID_YX, + Flags_ID_Z1, // Z width x2 + Flags_ID_Z2, // Z width x2 + Flags_ID_N, + Flags_Max, + }; + bitset ID_Flags; + int8u ID_Pos; + int16u MaxKnown; //TODO: per yyyy +}; +typedef item_info item_infos[]; +#define D(_0,_1,_2,_3,_4,_5,_6,_7) {_0,_1,_2,_3,_4,_5,_6,_7} +#define F(_0) (1 << item_info::Flags_##_0) +static const item_infos item_Infos = { + { (attribute_items*)&audioTrack_Attributes, (element_items*)&audioTrack_Elements, "TrackIndex", nullptr, 0, (int8u)-1, 0 }, + { (attribute_items*)&audioProgramme_Attributes, (element_items*)&audioProgramme_Elements, "Programme", "APR", F(ID_W), audioProgramme_audioProgrammeID, 0 }, + { (attribute_items*)&audioContent_Attributes, (element_items*)&audioContent_Elements, "Content", "ACO", F(ID_W), audioContent_audioContentID, 0 }, + { (attribute_items*)&audioObject_Attributes, (element_items*)&audioObject_Elements, "Object", "AO", F(ID_W), audioObject_audioObjectID, 0 }, + { (attribute_items*)&audioPackFormat_Attributes, (element_items*)&audioPackFormat_Elements, "PackFormat", "AP", F(ID_YX), audioPackFormat_audioPackFormatID, 0xFFF }, + { (attribute_items*)&audioChannelFormat_Attributes, (element_items*)&audioChannelFormat_Elements, "ChannelFormat", "AC", F(ID_YX), audioChannelFormat_audioChannelFormatID, 0xFFF }, + { (attribute_items*)&audioTrackUID_Attributes, (element_items*)&audioTrackUID_Elements, "TrackUID", "ATU", F(ID_N), audioTrackUID_UID, 0 }, + { (attribute_items*)&audioTrackFormat_Attributes, (element_items*)&audioTrackFormat_Elements, "TrackFormat", "AT", F(ID_YX) | F(ID_Z1), audioTrackFormat_audioTrackFormatID, 0xFFF }, + { (attribute_items*)&audioStreamFormat_Attributes, (element_items*)&audioStreamFormat_Elements, "StreamFormat", "AS", F(ID_YX), audioStreamFormat_audioStreamFormatID, 0xFFF }, + { (attribute_items*)&audioBlockFormat_Attributes, (element_items*)&audioBlockFormat_Elements, "BlockFormat", "AB", F(ID_YX) | F(ID_Z1) | F(ID_Z2), (int8u)-1, 0xFFF }, + { (attribute_items*)&position_Attributes, nullptr, "position", nullptr, 0, (int8u)-1, 0xFFF}, + { nullptr, nullptr, "alternativeValueSet", "AVS", F(ID_W) | F(ID_Z2), (int8u)-1, 0 }, +}; +#undef D +#undef F +static_assert(sizeof(item_Infos) / sizeof(item_info) == item_Max, IncoherencyMessage); + +struct label_info { + item item_Type; + int8u Label_Pos; + int8u Definition_Pos; + style Label_Style; +}; +typedef label_info label_infos[]; +static constexpr label_infos label_Infos = { + { item_audioTrack, audioTrack_formatLabel, audioTrack_formatDefinition, Style_Format }, + { item_audioPackFormat, audioPackFormat_typeLabel, audioPackFormat_typeDefinition, Style_Type }, + { item_audioChannelFormat, audioChannelFormat_typeLabel, audioChannelFormat_typeDefinition, Style_Type }, + { item_audioTrackFormat, audioTrackFormat_formatLabel, audioTrackFormat_formatDefinition, Style_Format }, + { item_audioStreamFormat, audioStreamFormat_formatLabel, audioStreamFormat_formatDefinition, Style_Format }, +}; + +struct idref { + item Source_Type; + size_t Source_Pos; + size_t Target_Type; +}; +typedef idref idrefs[]; +static constexpr idrefs IDRefs = { + { item_audioTrack, audioTrack_audioTrackUIDRef, item_audioTrackUID }, + { item_audioProgramme, audioProgramme_audioContentIDRef, item_audioContent }, + //{ item_audioProgramme, audioProgramme_alternativeValueSetIDRef, item_alternativeValueSet }, + { item_audioContent, audioContent_audioObjectIDRef, item_audioObject }, + //{ item_audioContent, audioContent_alternativeValueSetIDRef, item_alternativeValueSet }, + { item_audioObject, audioObject_audioPackFormatIDRef, item_audioPackFormat }, + { item_audioObject, audioObject_audioObjectIDRef, item_audioObject }, + { item_audioObject, audioObject_audioComplementaryObjectIDRef, item_audioObject }, + { item_audioObject, audioObject_audioTrackUIDRef, item_audioTrackUID }, + { item_audioPackFormat, audioPackFormat_audioChannelFormatIDRef, item_audioChannelFormat }, + { item_audioPackFormat, audioPackFormat_audioPackFormatIDRef, item_audioPackFormat }, + { item_audioPackFormat, audioPackFormat_encodePackFormatIDRef, item_audioPackFormat }, + { item_audioPackFormat, audioPackFormat_decodePackFormatIDRef, item_audioPackFormat }, + { item_audioPackFormat, audioPackFormat_inputPackFormatIDRef, item_audioPackFormat }, + { item_audioPackFormat, audioPackFormat_outputPackFormatIDRef, item_audioPackFormat }, + { item_audioTrackUID, audioTrackUID_audioTrackFormatIDRef, item_audioTrackFormat }, + { item_audioTrackUID, audioTrackUID_audioChannelFormatIDRef, item_audioChannelFormat }, + { item_audioTrackUID, audioTrackUID_audioPackFormatIDRef, item_audioPackFormat }, + { item_audioTrackFormat, audioTrackFormat_audioStreamFormatIDRef, item_audioStreamFormat }, + { item_audioStreamFormat, audioStreamFormat_audioChannelFormatIDRef, item_audioChannelFormat }, + { item_audioStreamFormat, audioStreamFormat_audioPackFormatIDRef, item_audioPackFormat }, + { item_audioStreamFormat, audioStreamFormat_audioTrackFormatIDRef, item_audioTrackFormat }, }; +enum atmos_audioChannelFormatName { + Atmos_L, + Atmos_R, + Atmos_C, + Atmos_LFE, + Atmos_Lss, + Atmos_Rss, + Atmos_Lrs, + Atmos_Rrs, + Atmos_Lts, + Atmos_Rts, + Atmos_Ls, + Atmos_Rs, + Atmos_audioChannelFormatName_Max +}; +struct atmos_audioChannel_Values { + const char* Name; + const char* SpeakerLabel; + float Pos0; + float Pos1; + float Pos2; +}; +static const atmos_audioChannel_Values Atmos_audioChannelFormat_Content[] = { + { "RoomCentricLeft" , "RC_L" , -1 , 1 , 0 }, + { "RoomCentricRight" , "RC_R" , 1 , 1 , 0 }, + { "RoomCentricCenter" , "RC_C" , 0 , 1 , 0 }, + { "RoomCentricLFE" , "RC_LFE" , -1 , 1 , -1 }, + { "RoomCentricLeftSideSurround" , "RC_Lss" , -1 , 0 , 0 }, + { "RoomCentricRightSideSurround" , "RC_Rss" , 1 , 0 , 0 }, + { "RoomCentricLeftRearSurround" , "RC_Lrs" , -1 , -1 , 0 }, + { "RoomCentricRightRearSurround" , "RC_Rrs" , 1 , -1 , 0 }, + { "RoomCentricLeftTopSurround" , "RC_Lts" , -1 , 0 , 1 }, + { "RoomCentricRightTopSurround" , "RC_Rts" , 1 , 0 , 1 }, + { "RoomCentricLeftSurround" , "RC_Ls" , -1 , -0.36397, 0 }, + { "RoomCentricRightSurround" , "RC_Rs" , 1 , -0.36397, 0 }, +}; +static_assert(sizeof(Atmos_audioChannelFormat_Content) / sizeof(Atmos_audioChannelFormat_Content[0]) == Atmos_audioChannelFormatName_Max, IncoherencyMessage); +atmos_audioChannelFormatName Atmos_audioChannelFormat_Pos(const string& Value, bool Speaker = false) { + const auto Value_Size = Value.size(); + for (size_t i = 0; i < Atmos_audioChannelFormatName_Max; i++) { + const auto& Test = Speaker ? Atmos_audioChannelFormat_Content[i].SpeakerLabel : Atmos_audioChannelFormat_Content[i].Name; + const auto Test_Size = strlen(Test); + if (Test_Size == Value_Size && !memcmp((void*)Value.c_str(), Test, Value_Size)) { + return (atmos_audioChannelFormatName)i; + } + } + return (atmos_audioChannelFormatName)-1; +} +atmos_audioChannelFormatName Atmos_audioChannelFormat_Pos(float32 Pos0, float32 Pos1, float32 Pos2, atmos_audioChannelFormatName Prefered = (atmos_audioChannelFormatName)-1) { + for (size_t i = 0; i < Atmos_audioChannelFormatName_Max; i++) { + const auto& Test = Atmos_audioChannelFormat_Content[i]; + if (Test.Pos0 == Pos0 && Test.Pos1 == Pos1 && Test.Pos2 == Pos2) { + if ((i == Atmos_Lrs && Prefered == Atmos_Ls) || (i == Atmos_Rrs && Prefered == Atmos_Rs)) { + i = Prefered; + } + return (atmos_audioChannelFormatName)i; + } + } + return (atmos_audioChannelFormatName)-1; +} + +static const atmos_audioChannelFormatName Atmos_ChannelOrder[] = { + (atmos_audioChannelFormatName) 2, Atmos_L, Atmos_R, + (atmos_audioChannelFormatName) 3, Atmos_L, Atmos_R, Atmos_C, + (atmos_audioChannelFormatName) 5, Atmos_L, Atmos_R, Atmos_C, Atmos_Ls, Atmos_Rs, + (atmos_audioChannelFormatName) 6, Atmos_L, Atmos_R, Atmos_C, Atmos_LFE, Atmos_Ls, Atmos_Rs, + (atmos_audioChannelFormatName) 7, Atmos_L, Atmos_R, Atmos_C, Atmos_Lss, Atmos_Rss, Atmos_Lrs, Atmos_Rrs, + (atmos_audioChannelFormatName) 8, Atmos_L, Atmos_R, Atmos_C, Atmos_LFE, Atmos_Lss, Atmos_Rss, Atmos_Lrs, Atmos_Rrs, + (atmos_audioChannelFormatName) 9, Atmos_L, Atmos_R, Atmos_C, Atmos_Lss, Atmos_Rss, Atmos_Lrs, Atmos_Rrs, Atmos_Lts, Atmos_Rts, + (atmos_audioChannelFormatName)10, Atmos_L, Atmos_R, Atmos_C, Atmos_LFE, Atmos_Lss, Atmos_Rss, Atmos_Lrs, Atmos_Rrs, Atmos_Lts, Atmos_Rts, + (atmos_audioChannelFormatName) 0 +}; +bool Atmos_ChannelOrder_Find(const vector& List) { + auto List_Size = List.size(); + size_t i = 0; + for (;;) { + const size_t ChannelCount = Atmos_ChannelOrder[i++]; + if (!ChannelCount) { + return false; + } + if (ChannelCount != List_Size) { + i += ChannelCount; + continue; + } + size_t j = 0; + for (; j < ChannelCount; j++) { + if (List[j] != Atmos_ChannelOrder[i + j]) { + break; + } + } + if (j < ChannelCount) { + continue; + } + return true; + } +} + struct Item_Struct { - vector Strings; - vector > StringVectors; + vector Attributes; + bitset<64> Attributes_Present; + vector > Elements; map Extra; vector Errors[error_Type_Max]; + + void AddError(error_Type Type, const string& NewValue) + { + auto& Error = Errors[Type]; + if (find(Error.begin(), Error.end(), NewValue) == Error.end()) { + if (Error.size() < 9) { + Errors[Type].push_back(NewValue); + } + else if (Error.size() == 9) { + if (!NewValue.empty() && NewValue[0] == ':') { + auto Space = NewValue.find(' '); + auto End = NewValue.rfind(':', Space); + if (End != string::npos) { + Errors[Type].push_back(NewValue.substr(0, End + 1) + "[...]"); + } + } + } + } + } }; struct Items_Struct { - void Init(size_t Strings_Size_, size_t StringVectors_Size_) { - Strings_Size = Strings_Size_; - StringVectors_Size =StringVectors_Size_; + void Init(size_t Strings_Size_, size_t Elements_Size_) { + Attributes_Size = Strings_Size_; + Elements_Size =Elements_Size_; } Item_Struct& New(bool Init = true) @@ -505,8 +1044,8 @@ struct Items_Struct { } Items.resize(Items.size() + 1); Item_Struct& Item = Items[Items.size() - 1]; - Item.Strings.resize(Strings_Size); - Item.StringVectors.resize(StringVectors_Size); + Item.Attributes.resize(Attributes_Size); + Item.Elements.resize(Elements_Size); return Item; } @@ -517,8 +1056,8 @@ struct Items_Struct { } vector Items; - size_t Strings_Size; - size_t StringVectors_Size; + size_t Attributes_Size; + size_t Elements_Size; }; static string Apply_Init(File__Analyze& F, const char* Name, size_t i, const Items_Struct& audioProgramme_List, Ztring Summary) { @@ -532,11 +1071,11 @@ static string Apply_Init(File__Analyze& F, const char* Name, size_t i, const Ite static void Apply_SubStreams(File__Analyze& F, const string& P_And_LinkedTo, Item_Struct& Source, size_t i, Items_Struct& Dest) { ZtringList SubstreamPos, SubstreamNum; - for (size_t j = 0; j < Source.StringVectors[i].size(); j++) { - const string& ID = Source.StringVectors[i][j]; + for (size_t j = 0; j < Source.Elements[i].size(); j++) { + const string& ID = Source.Elements[i][j]; size_t Pos = -1; for (size_t k = 0; k < Dest.Items.size(); k++) { - if (Dest.Items[k].Strings[0] == ID) { + if (Dest.Items[k].Attributes[0] == ID) { Pos = k; break; } @@ -576,8 +1115,7 @@ static void Apply_SubStreams(File__Analyze& F, const string& P_And_LinkedTo, Ite // Private class //*************************************************************************** -static void CheckErrors_Formating(file_adm_private* File_Adm_Private, const string& ID, const item_info& ID_Start, vector& Errors, const char* Sub = nullptr); -static void CheckErrors_Formating(file_adm_private* File_Adm_Private, Items_Struct& MainItem, const item_info& ID_Start, const char* Sub = nullptr); +static bool CheckErrors_ID(file_adm_private* File_Adm_Private, const string& ID, const item_info& ID_Start, vector* Items = nullptr, const char* Sub = nullptr); class tfsxml { @@ -600,7 +1138,7 @@ class tfsxml public: tfsxml_string b, v; -private: +//private: string Code[16]; map Attributes_[16]; int8u Level = 0; @@ -620,6 +1158,7 @@ class file_adm_private : public tfsxml Items_Struct Items[item_Max]; int Version = 0; int Version_S = -1; // S-ADM + schema Schema = Schema_Unknown; bool DolbyProfileCanNotBeVersion1 = false; vector profileInfos; map More; @@ -640,11 +1179,49 @@ class file_adm_private : public tfsxml if (Index >= 0x10000) return; if (Items[item_audioTrack].Items.empty()) - Items[item_audioTrack].Init(audioTrack_String_Max, audioTrack_StringVector_Max); + Items[item_audioTrack].Init(audioTrack_Attribute_Max, audioTrack_Element_Max); while (Items[item_audioTrack].Items.size() <= Index) Items[item_audioTrack].New(); Item_Struct& Item = Items[item_audioTrack].Items[Items[item_audioTrack].Items.size() - 1]; - Item.StringVectors[audioTrack_audioTrackUIDRef].push_back(TrackUID); + Item.Elements[audioTrack_audioTrackUIDRef].push_back(TrackUID); + } + + void Check_Attributes_NotPartOfSpecs(size_t Type, size_t Pos, const tfsxml_string& b, Item_Struct& Content) + { + Content.AddError(Warning, ":audio" + string(item_Infos[Type].Name) + to_string(Pos) + ":GeneralCompliance:\"" + tfsxml_decode(b) + "\" attribute is not part of specs"); + } + + void Check_Elements_NotPartOfSpecs(size_t Type, size_t Pos, const tfsxml_string& b, Item_Struct& Content) + { + Content.AddError(Warning, ":audio" + string(item_Infos[Type].Name) + to_string(Pos) + ":GeneralCompliance:\"" + tfsxml_decode(b) + "\" element is not part of specs"); + } + + void Check_Attributes_ShallBePresent(size_t Type, size_t Pos, const vector& Attributes_Counts, const attribute_item* const Attributes, Item_Struct& Content) + { + for (size_t i = 0; i < Attributes_Counts.size(); ++i) { + if (Attributes_Counts[i] == 0 && !(Attributes[i].Flags[Count0])) { + Content.AddError(Error, ":audio" + string(item_Infos[Type].Name) + to_string(Pos) + ":" + string(Attributes[i].Name) + ":" + string(Attributes[i].Name) + " attribute is not present"); + } + if (Attributes_Counts[i] > 1) { + Content.AddError(Error, ":audio" + string(item_Infos[Type].Name) + to_string(Pos) + ":" + string(Attributes[i].Name) + ":" + string(Attributes[i].Name) + " attribute shall be unique"); + } + if (Attributes_Counts[i]) { + Content.Attributes_Present.set(i); + } + } + } + + void Check_Elements_ShallBePresent(size_t Type, size_t Pos, const vector >& Elements_Values, const element_item* const Elements, Item_Struct& Content) + { + for (size_t i = 0; i < Elements_Values.size(); ++i) { + if (Elements_Values[i].empty() && !(Elements[i].Flags[Count0])) { + auto Level = (!strcmp(item_Infos[Type].Name, "TrackFormat") && strcmp(item_Infos[Type].Name, "TrackFormat")) ? Error : Warning; + Content.AddError(Level, ":audio" + string(item_Infos[Type].Name) + to_string(Pos) + ":" + string(Elements[i].Name) + ":" + string(Elements[i].Name) + " element is not present"); + } + if (Elements_Values[i].size() > 1 && !(Elements[i].Flags[Count2])) { + Content.AddError(Error, ":audio" + string(item_Infos[Type].Name) + to_string(Pos) + ":" + string(Elements[i].Name) + ":" + string(Elements[i].Name) + " element shall be unique"); + } + } } //private: @@ -657,6 +1234,9 @@ class file_adm_private : public tfsxml // Common definitions vector audioChannelFormatIDRefs; + + // Temp + vector Attributes_Counts[16]; }; void tfsxml::Enter() { @@ -674,6 +1254,8 @@ void tfsxml::Enter() { } void tfsxml::Leave() { + b.len = 0; + v.len = 0; IsInit_ = false; MustEnter = false; if (Level != (decltype(Level))-1) { @@ -766,7 +1348,7 @@ int tfsxml::Value() { int file_adm_private::parse(const void* const Buffer, size_t Buffer_Size) { # define STRUCTS(NAME) \ - Items[item_##NAME].Init(NAME##_String_Max, NAME##_StringVector_Max); + Items[item_##NAME].Init(NAME##_Attribute_Max, NAME##_Element_Max); STRUCTS(audioTrack); STRUCTS(audioProgramme); @@ -777,7 +1359,8 @@ int file_adm_private::parse(const void* const Buffer, size_t Buffer_Size) STRUCTS(audioTrackUID); STRUCTS(audioTrackFormat); STRUCTS(audioStreamFormat); - + STRUCTS(audioBlockFormat); + STRUCTS(position); #define XML_BEGIN \ @@ -836,48 +1419,71 @@ int file_adm_private::parse(const void* const Buffer, size_t Buffer_Size) #define XML_END \ return -1; - #define ELEMENT_START(NAME) \ + #define ELEMENT_START2(NAME,CALL) \ if (!tfsxml_strcmp_charp(b, #NAME)) \ { \ Item_Struct& NAME##_Content = Items[item_##NAME].New(IsInit()); \ + if (IsInit()) { \ + CALL; \ + Attributes_Counts[Level].clear(); \ + Attributes_Counts[Level].resize(NAME##_Attribute_Max); \ + } \ XML_ATTR_START \ + #define ELEMENT_START(NAME) \ + ELEMENT_START2(NAME,{}) \ + #define ELEMENT_MIDDLE(NAME) \ - else if (!Items[item_audioProgramme].Items.empty() && &NAME##_Content == &Items[item_audioProgramme].Items.back()) { \ - NAME##_Content.Errors[Warning].push_back(":XmlAttributes:\"" + tfsxml_decode(b) + "\" is not part of specs"); \ + else if (!Items[item_##NAME].Items.empty() && &NAME##_Content == &Items[item_##NAME].Items.back()) { \ + Check_Attributes_NotPartOfSpecs(item_##NAME, Items[item_##NAME].Items.size() - 1, b, NAME##_Content); \ } \ XML_ATTR_END \ - XML_ELEM_START \ + Check_Attributes_ShallBePresent(item_##NAME, Items[item_##NAME].Items.size() - 1, Attributes_Counts[Level], NAME##_Attributes, NAME##_Content); \ + if (item_Infos[item_##NAME].Element_Infos) { \ + XML_ELEM_START \ #define ELEMENT_END(NAME) \ - else if (!Items[item_audioProgramme].Items.empty() && &NAME##_Content == &Items[item_audioProgramme].Items.back()) { \ - NAME##_Content.Errors[Warning].push_back(":XmlElements:\"" + tfsxml_decode(b) + "\" is not part of specs"); \ + else if (!Items[item_##NAME].Items.empty() && &NAME##_Content == &Items[item_##NAME].Items.back()) { \ + Check_Elements_NotPartOfSpecs(item_##NAME, Items[item_##NAME].Items.size() - 1, b, NAME##_Content); \ + } \ + XML_ELEM_END \ + if (Level == Level_Max) { \ + Check_Elements_ShallBePresent(item_##NAME, Items[item_##NAME].Items.size() - 1, NAME##_Content.Elements, *item_Infos[item_##NAME].Element_Infos, NAME##_Content); \ } \ - XML_ELEM_END \ + } \ + else { \ + if (!strcmp(#NAME, "position")) /* // TODO: remove this hack */ { \ + XML_VALUE \ + Items[item_audioBlockFormat].Items.back().Elements[audioBlockFormat_position].push_back(tfsxml_decode(b)); \ + } \ + } \ } \ #define ATTRIBUTE(NAME,ATTR) \ else if (!tfsxml_strcmp_charp(b, #ATTR)) { \ - NAME##_Content.Strings[NAME##_##ATTR].assign(tfsxml_decode(v)); \ + NAME##_Content.Attributes[NAME##_##ATTR].assign(tfsxml_decode(v)); \ + Attributes_Counts[Level][NAME##_##ATTR]++; \ } \ #define ATTRIB_ID(NAME,ATTR) \ else if (!tfsxml_strcmp_charp(b, #ATTR)) { \ - CheckErrors_Formating(this, tfsxml_decode(v), item_Info[item_##NAME], *this->Items[item_##NAME].Items.back().Errors, #NAME":"#ATTR); \ - NAME##_Content.Strings[NAME##_##ATTR].assign(tfsxml_decode(v)); \ + NAME##_Content.Attributes[NAME##_##ATTR].assign(tfsxml_decode(v)); \ + Attributes_Counts[Level][NAME##_##ATTR]++; \ + CheckErrors_ID(this, NAME##_Content.Attributes[NAME##_##ATTR], item_Infos[item_##NAME], &this->Items[item_##NAME].Items, #NAME":"#ATTR); \ } \ - #define ATTRIBUTE_I(NAME,ATTR) \ + #define ATTRIBU_I(NAME,ATTR) \ else if (!tfsxml_strcmp_charp(b, #ATTR)) { \ + Attributes_Counts[Level][NAME##_##ATTR]++; \ } \ #define ELEMENT(NAME,ELEM) \ else if (!tfsxml_strcmp_charp(b, #ELEM)) { \ XML_VALUE \ - NAME##_Content.StringVectors[NAME##_##ELEM].push_back(tfsxml_decode(b)); \ + NAME##_Content.Elements[NAME##_##ELEM].push_back(tfsxml_decode(b)); \ } \ - #define ELEMENT_I(NAME,ELEM) \ + #define ELEME_I(NAME,ELEM) \ else if (!tfsxml_strcmp_charp(b, #ELEM)) { \ } \ @@ -894,9 +1500,13 @@ int file_adm_private::parse(const void* const Buffer, size_t Buffer_Size) if (!tfsxml_strcmp_charp(b, "ebuCoreMain")) { XML_ATTR_START - if (!tfsxml_strcmp_charp(b, "xmlns") || !tfsxml_strcmp_charp(b, "xsi:schemaLocation")) { - DolbyProfileCanNotBeVersion1 = false; - if (!tfsxml_strstr_charp(v, "ebuCore_2014").len && !tfsxml_strstr_charp(v, "ebuCore_2016").len) { + if ((!tfsxml_strcmp_charp(b, "xmlns") || !tfsxml_strcmp_charp(b, "xsi:schemaLocation"))) { + for (size_t i = 0; i < schema_String_Size; i++) { + if (tfsxml_strstr_charp(v, schema_String[i]).len) { + Schema = (schema)(i + 1); + } + } + if (Schema == Schema_Unknown) { DolbyProfileCanNotBeVersion1 = true; } } @@ -1049,14 +1659,14 @@ int file_adm_private::audioFormatExtended() if (!Value.empty() && GetSavedAttribute(0) != NoSavedAttribute()) { Value.insert(0, '(' + GetSavedAttribute(0)->second + ')'); } - audioProgramme_Content.StringVectors[audioProgramme_audioProgrammeLabel].push_back(Value); + audioProgramme_Content.Elements[audioProgramme_audioProgrammeLabel].push_back(Value); } ELEMENT(audioProgramme, audioContentIDRef) else if (!tfsxml_strcmp_charp(b, "loudnessMetadata")) { XML_ELEM_START if (!tfsxml_strcmp_charp(b, "integratedLoudness")) { XML_VALUE - audioProgramme_Content.StringVectors[audioProgramme_loudnessMetadata_integratedLoudness].push_back(tfsxml_decode(b)); + audioProgramme_Content.Elements[audioProgramme_loudnessMetadata_integratedLoudness].push_back(tfsxml_decode(b)); } XML_ELEM_END } @@ -1067,7 +1677,7 @@ int file_adm_private::audioFormatExtended() XML_ELEM_START if (!tfsxml_strcmp_charp(b, "audioPackFormatIDRef")) { XML_VALUE - audioProgramme_Content.StringVectors[audioProgramme_authoringInformation_referenceLayout_audioPackFormatIDRef].push_back(tfsxml_decode(b)); + audioProgramme_Content.Elements[audioProgramme_authoringInformation_referenceLayout_audioPackFormatIDRef].push_back(tfsxml_decode(b)); } XML_ELEM_END } @@ -1159,7 +1769,7 @@ int file_adm_private::audioFormatExtended() Value += " (" + Kind + ')'; } } - audioContent_Content.StringVectors[audioContent_dialogue].push_back(Value); + audioContent_Content.Elements[audioContent_dialogue].push_back(Value); } else if (!tfsxml_strcmp_charp(b, "audioContentLabel")) { XML_ATTR_START @@ -1172,13 +1782,13 @@ int file_adm_private::audioFormatExtended() if (!Value.empty() && GetSavedAttribute(0) != NoSavedAttribute()) { Value.insert(0, '(' + GetSavedAttribute(0)->second + ')'); } - audioContent_Content.StringVectors[audioContent_audioContentLabel].push_back(Value); + audioContent_Content.Elements[audioContent_audioContentLabel].push_back(Value); } else if (!tfsxml_strcmp_charp(b, "loudnessMetadata")) { XML_ELEM_START if (!tfsxml_strcmp_charp(b, "integratedLoudness")) { XML_VALUE - audioContent_Content.StringVectors[audioContent_loudnessMetadata_integratedLoudness].push_back(tfsxml_decode(b)); + audioContent_Content.Elements[audioContent_loudnessMetadata_integratedLoudness].push_back(tfsxml_decode(b)); } XML_ELEM_END } @@ -1188,22 +1798,47 @@ int file_adm_private::audioFormatExtended() ATTRIB_ID(audioObject, audioObjectID) ATTRIBUTE(audioObject, audioObjectName) ATTRIBUTE(audioObject, duration) - ATTRIBUTE(audioObject, startTime) ATTRIBUTE(audioObject, start) + ATTRIBUTE(audioObject, startTime) + ATTRIBUTE(audioObject, duration) + ATTRIBUTE(audioObject, dialogue) + ATTRIBUTE(audioObject, importance) + ATTRIBUTE(audioObject, interact) + ATTRIBUTE(audioObject, disableDucking) ATTRIBUTE(audioObject, typeLabel) ELEMENT_MIDDLE(audioObject) ELEMENT(audioObject, audioPackFormatIDRef) - ELEMENT(audioObject, audioTrackUIDRef) ELEMENT(audioObject, audioObjectIDRef) + ELEMENT(audioObject, audioObjectLabel) + ELEMENT(audioObject, audioComplementaryObjectGroupLabel) ELEMENT(audioObject, audioComplementaryObjectIDRef) + ELEMENT(audioObject, audioTrackUIDRef) + ELEMENT(audioObject, audioObjectInteraction) + ELEMENT(audioObject, gain) + ELEMENT(audioObject, headLocked) + ELEMENT(audioObject, positionOffset) + ELEMENT(audioObject, mute) + ELEMENT(audioObject, alternativeValueSet) ELEMENT_END(audioObject) ELEMENT_START(audioPackFormat) ATTRIB_ID(audioPackFormat, audioPackFormatID) ATTRIBUTE(audioPackFormat, audioPackFormatName) ATTRIBUTE(audioPackFormat, typeDefinition) ATTRIBUTE(audioPackFormat, typeLabel) + ATTRIBUTE(audioPackFormat, typeLink) + ATTRIBUTE(audioPackFormat, typeLanguage) + ATTRIBUTE(audioPackFormat, importance) ELEMENT_MIDDLE(audioPackFormat) ELEMENT(audioPackFormat, audioChannelFormatIDRef) + ELEMENT(audioPackFormat, audioPackFormatIDRef) + ELEMENT(audioPackFormat, absoluteDistance) + ELEMENT(audioPackFormat, encodePackFormatIDRef) + ELEMENT(audioPackFormat, decodePackFormatIDRef) + ELEMENT(audioPackFormat, inputPackFormatIDRef) + ELEMENT(audioPackFormat, outputPackFormatIDRef) + ELEMENT(audioPackFormat, normalization) + ELEMENT(audioPackFormat, nfcRefDist) + ELEMENT(audioPackFormat, screenRef) ELEMENT_END(audioPackFormat) ELEMENT_START(audioChannelFormat) ATTRIB_ID(audioChannelFormat, audioChannelFormatID) @@ -1211,37 +1846,70 @@ int file_adm_private::audioFormatExtended() ATTRIBUTE(audioChannelFormat, typeDefinition) ATTRIBUTE(audioChannelFormat, typeLabel) ELEMENT_MIDDLE(audioChannelFormat) - else if (!tfsxml_strcmp_charp(b, "audioBlockFormat")) { - XML_ATTR_START - else if (!tfsxml_strcmp_charp(b, "audioBlockFormatID")) { - CheckErrors_Formating(this, tfsxml_decode(v), item_Info[item_audioBlockFormat], *this->Items[item_audioChannelFormat].Items.back().Errors, "audioBlockFormat:audioBlockFormatID"); + ELEMENT_START2(audioBlockFormat, Items[item_audioChannelFormat].Items.back().Elements[audioChannelFormat_audioBlockFormat].push_back({})) + ATTRIB_ID(audioBlockFormat, audioBlockFormatID) + ATTRIBUTE(audioBlockFormat, rtime) + ATTRIBUTE(audioBlockFormat, duration) + ATTRIBUTE(audioBlockFormat, lstart) + ATTRIBUTE(audioBlockFormat, lduration) + ATTRIBUTE(audioBlockFormat, initializeBlock) + ELEMENT_MIDDLE(audioBlockFormat) + ELEMENT(audioBlockFormat, gain) + ELEMENT(audioBlockFormat, importance) + ELEMENT(audioBlockFormat, headLocked) + ELEMENT(audioBlockFormat, headphoneVirtualise) + //ELEMENT(audioBlockFormat, speakerLabel) + else if (!tfsxml_strcmp_charp(b, "speakerLabel")) { + XML_VALUE + string SpeakerLabel = tfsxml_decode(b); + audioBlockFormat_Content.Elements[audioBlockFormat_speakerLabel].push_back(SpeakerLabel); + if (SpeakerLabel.rfind("RC_", 0) == 0) { + SpeakerLabel.erase(0, 3); } - XML_ATTR_END - XML_ELEM_START - if (!tfsxml_strcmp_charp(b, "speakerLabel")) { - XML_VALUE - string SpeakerLabel = tfsxml_decode(b); - if (SpeakerLabel.rfind("RC_", 0) == 0) { - SpeakerLabel.erase(0, 3); - } - map::iterator Extra_SpeakerLabel = audioChannelFormat_Content.Extra.find("ChannelLayout"); - map::iterator Extra_Type = audioChannelFormat_Content.Extra.find("Type"); - if (Extra_SpeakerLabel == audioChannelFormat_Content.Extra.end() || Extra_SpeakerLabel->second == SpeakerLabel) { - audioChannelFormat_Content.Extra["ChannelLayout"] = SpeakerLabel; - audioChannelFormat_Content.Extra["Type"] = "Static"; - } - else if (Extra_Type != audioChannelFormat_Content.Extra.end()) { - audioChannelFormat_Content.Extra.clear(); - audioChannelFormat_Content.Extra["Type"] = "Dynamic"; - } + map::iterator Extra_SpeakerLabel = audioChannelFormat_Content.Extra.find("ChannelLayout"); + map::iterator Extra_Type = audioChannelFormat_Content.Extra.find("Type"); + if (Extra_SpeakerLabel == audioChannelFormat_Content.Extra.end() || Extra_SpeakerLabel->second == SpeakerLabel) { + audioChannelFormat_Content.Extra["ChannelLayout"] = SpeakerLabel; + audioChannelFormat_Content.Extra["Type"] = "Static"; } - XML_ELEM_END - } + else if (Extra_Type != audioChannelFormat_Content.Extra.end()) { + audioChannelFormat_Content.Extra.clear(); + audioChannelFormat_Content.Extra["Type"] = "Dynamic"; + } + } + //ELEMENT(audioBlockFormat, position) + else ELEMENT_START(position) + ATTRIBUTE(position, coordinate) + ATTRIBUTE(position, bound) + ATTRIBUTE(position, screenEdgeLock) + ELEMENT_MIDDLE(position) + ELEMENT_END(position) + ELEMENT(audioBlockFormat, outputChannelFormatIDRef) + ELEMENT(audioBlockFormat, jumpPosition) + ELEMENT(audioBlockFormat, matrix) + ELEMENT(audioBlockFormat, coefficient) + ELEMENT(audioBlockFormat, width) + ELEMENT(audioBlockFormat, height) + ELEMENT(audioBlockFormat, depth) + ELEMENT(audioBlockFormat, cartesian) + ELEMENT(audioBlockFormat, diffuse) + ELEMENT(audioBlockFormat, channelLock) + ELEMENT(audioBlockFormat, objectDivergence) + ELEMENT(audioBlockFormat, jumpPosition) + ELEMENT(audioBlockFormat, zoneExclusion) + ELEMENT(audioBlockFormat, equation) + ELEMENT(audioBlockFormat, order) + ELEMENT(audioBlockFormat, degree) + ELEMENT(audioBlockFormat, normalization) + ELEMENT(audioBlockFormat, nfcRefDist) + ELEMENT(audioBlockFormat, screenRef) + ELEMENT_END(audioBlockFormat) + ELEMENT(audioChannelFormat, frequency) ELEMENT_END(audioChannelFormat) ELEMENT_START(audioTrackUID) - ATTRIBUTE(audioTrackUID, UID) - ATTRIBUTE(audioTrackUID, bitDepth) + ATTRIB_ID(audioTrackUID, UID) ATTRIBUTE(audioTrackUID, sampleRate) + ATTRIBUTE(audioTrackUID, bitDepth) ATTRIBUTE(audioTrackUID, typeLabel) ELEMENT_MIDDLE(audioTrackUID) ELEMENT(audioTrackUID, audioChannelFormatIDRef) @@ -1251,20 +1919,25 @@ int file_adm_private::audioFormatExtended() ELEMENT_START(audioTrackFormat) ATTRIB_ID(audioTrackFormat, audioTrackFormatID) ATTRIBUTE(audioTrackFormat, audioTrackFormatName) - ATTRIBUTE(audioTrackFormat, formatDefinition) - ATTRIBUTE(audioTrackFormat, typeDefinition) ATTRIBUTE(audioTrackFormat, typeLabel) - ELEMENT_MIDDLE(audioTrackFormat) + ATTRIBUTE(audioTrackFormat, typeDefinition) + ATTRIBUTE(audioTrackFormat, formatLabel) + ATTRIBUTE(audioTrackFormat, formatDefinition) + ATTRIBUTE(audioTrackFormat, formatLink) + ATTRIBUTE(audioTrackFormat, formatLanguage) + ELEMENT_MIDDLE(audioTrackFormat) ELEMENT(audioTrackFormat, audioStreamFormatIDRef) ELEMENT_END(audioTrackFormat) ELEMENT_START(audioStreamFormat) ATTRIB_ID(audioStreamFormat, audioStreamFormatID) ATTRIBUTE(audioStreamFormat, audioStreamFormatName) - ATTRIBUTE(audioStreamFormat, formatDefinition) - ATTRIBUTE(audioStreamFormat, formatLabel) - ATTRIBUTE(audioStreamFormat, typeDefinition) ATTRIBUTE(audioStreamFormat, typeLabel) - ELEMENT_MIDDLE(audioStreamFormat) + ATTRIBUTE(audioStreamFormat, typeDefinition) + ATTRIBUTE(audioStreamFormat, formatLabel) + ATTRIBUTE(audioStreamFormat, formatDefinition) + ATTRIBUTE(audioStreamFormat, formatLink) + ATTRIBUTE(audioStreamFormat, formatLanguage) + ELEMENT_MIDDLE(audioStreamFormat) ELEMENT(audioStreamFormat, audioChannelFormatIDRef) ELEMENT(audioStreamFormat, audioPackFormatIDRef) ELEMENT(audioStreamFormat, audioTrackFormatIDRef) @@ -1321,6 +1994,8 @@ int file_adm_private::transportTrackFormat() else if (!tfsxml_strcmp_charp(b, "trackID")) { SetSavedAttribute(0); } + ATTRIBUTE(audioTrack, formatLabel) + ATTRIBUTE(audioTrack, formatDefinition) ELEMENT_MIDDLE(audioTrack) else if (!tfsxml_strcmp_charp(b, "audioTrackUIDRef")) { XML_VALUE @@ -1336,13 +2011,59 @@ int file_adm_private::transportTrackFormat() } //--------------------------------------------------------------------------- -static void FillErrors(file_adm_private* File_Adm_Private, const item Item, size_t i, const char* Name, vector* Errors_Field, vector* Errors_Value, bool WarningError) +static type GetType(file_adm_private* File_Adm_Private, const item item_Type, size_t i) { + for (const auto& Label_Info : label_Infos) { + if (Label_Info.item_Type == item_Type) { + const auto& Item = File_Adm_Private->Items[item_Type].Items[i]; + + const auto& typeLabel = Item.Attributes[Label_Info.Label_Pos]; + if (typeLabel.size() == 4 && IsHexaDigit(typeLabel, 0, 4)) { + return (type)strtoul(typeLabel.c_str(), nullptr, 16); + } + + const auto& typeDefinition = Item.Attributes[Label_Info.Definition_Pos]; + if (!typeDefinition.empty()) { + for (size_t i = 0; i < Type_Max - 1; i++) { + const auto& List_Item = typeDefinition_List[i]; + if (List_Item == typeDefinition) { + return (type)(i + 1); + } + } + } + + const auto& Item_ID = Item.Attributes[item_Infos[item_Type].ID_Pos]; + if (item_Infos[item_Type].ID_Flags[item_info::Flags_ID_YX] && !CheckErrors_ID(File_Adm_Private, Item_ID, item_Infos[item_Type])) { + const auto Item_ID_yyyy = Item_ID.substr(strlen(item_Infos[item_Type].ID_Begin) + 1, 4); + if (IsHexaDigit(Item_ID_yyyy, 0, 4)) { + return (type)strtoul(Item_ID_yyyy.c_str(), nullptr, 16); + } + } + } + } + + if (item_Type == item_audioObject) { + for (const auto& ID : File_Adm_Private->Items[item_Type].Items[i].Elements[audioObject_audioPackFormatIDRef]) { + for (size_t j = 0; j < File_Adm_Private->Items[item_audioPackFormat].Items.size(); j++) { + const auto& Target = File_Adm_Private->Items[item_audioPackFormat].Items[j]; + if (ID == Target.Attributes[audioPackFormat_audioPackFormatID]) { + return GetType(File_Adm_Private, item_audioPackFormat, j); + } + } + } + } + + return Type_Unknown; +}; + +//--------------------------------------------------------------------------- +static void FillErrors(file_adm_private* File_Adm_Private, const item item_Type, size_t i, const char* Name, vector* Errors_Field, vector* Errors_Value, bool WarningError, size_t& Error_Count_Per_Type) { for (size_t k = 0; k < error_Type_Max; k++) { - if (!File_Adm_Private->Items[Item].Items[i].Errors[k].empty()) { - for (size_t j = 0; j < File_Adm_Private->Items[Item].Items[i].Errors[k].size(); j++) { + auto& Item = File_Adm_Private->Items[item_Type]; + if (!Item.Items[i].Errors[k].empty()) { + for (size_t j = 0; j < Item.Items[i].Errors[k].size(); j++) { string Field = Name; - string Value = File_Adm_Private->Items[Item].Items[i].Errors[k][j]; + string Value = Item.Items[i].Errors[k][j]; if (!Value.empty() && Value[0] == '!') { auto End = Value.find('!', 1); if (End != string::npos) @@ -1353,8 +2074,9 @@ static void FillErrors(file_adm_private* File_Adm_Private, const item Item, size } if (!Value.empty() && Value[0] == ':') { Field.clear(); - auto End = Value.rfind(':'); - if (End) + auto Space = Value.find(' '); + auto End = Value.rfind(':', Space); + if (End != string::npos) { if (!Field.empty()) Field += ' '; @@ -1369,19 +2091,31 @@ static void FillErrors(file_adm_private* File_Adm_Private, const item Item, size } } } - Errors_Field[WarningError ? Error : k].push_back(Field); - Errors_Value[WarningError ? Error : k].push_back(Value); + auto ErrorType = WarningError ? Error : k; + if (ErrorType == Error) { + Error_Count_Per_Type++; + } + if (Error_Count_Per_Type < 9) + { + Errors_Field[ErrorType].push_back(Field); + Errors_Value[ErrorType].push_back(Value); + } + else if (Error_Count_Per_Type == 9) + { + Errors_Field[ErrorType].push_back(Field); + Errors_Value[ErrorType].push_back("[...]"); + } } } } } //--------------------------------------------------------------------------- -static void CheckErrors_Formating(file_adm_private* File_Adm_Private, const string& ID, const item_info& ID_Start, vector& Errors, const char* Sub) +static bool CheckErrors_ID(file_adm_private* File_Adm_Private, const string& ID, const item_info& ID_Start, vector* Items, const char* Sub) { auto BeginSize = strlen(ID_Start.ID_Begin); - bitset Flags(ID_Start.ID_Flags); - auto MiddleSize = Flags[item_info::Flags_ID_YX] ? 8 : (Flags[item_info::Flags_ID_W] ? 4 : 0); + const auto Flags = ID_Start.ID_Flags; + auto MiddleSize = (Flags[item_info::Flags_ID_YX] || Flags[item_info::Flags_ID_N]) ? 8 : (Flags[item_info::Flags_ID_W] ? 4 : 0); static const int end_size [] = {0, 2, 4, 8}; auto EndSize = end_size[Flags[item_info::Flags_ID_Z1] + Flags[item_info::Flags_ID_Z2] * 2]; if (!MiddleSize && !EndSize && ID.size() > BeginSize) { @@ -1389,26 +2123,44 @@ static void CheckErrors_Formating(file_adm_private* File_Adm_Private, const stri } auto TotalMiddleSize = MiddleSize ? (1 + MiddleSize) : 0; auto TotalEndSize = EndSize ? (1 + EndSize) : 0; - if (ID.size() != BeginSize + TotalMiddleSize + TotalEndSize - || ID.compare(0, BeginSize, ID_Start.ID_Begin, 0, BeginSize) - || ID[BeginSize] != '_' - || !IsHexaDigit(ID, BeginSize + 1, MiddleSize) - || (EndSize && ID[BeginSize + TotalMiddleSize] != '_') - || !IsHexaDigit(ID, BeginSize + TotalMiddleSize + 1, EndSize) + if (ID.size() == BeginSize + TotalMiddleSize + TotalEndSize + && !ID.compare(0, BeginSize, ID_Start.ID_Begin, 0, BeginSize) + && ID[BeginSize] == '_' + && IsHexaDigit(ID, BeginSize + 1, MiddleSize) + && (!EndSize || ID[BeginSize + TotalMiddleSize] == '_') + && IsHexaDigit(ID, BeginSize + TotalMiddleSize + 1, EndSize) ) { + return false; + } + if (Items) { string Middle; if (Flags[item_info::Flags_ID_YX]) { Middle.append(4, 'y'); Middle.append(4, 'x'); } - else if (Flags[item_info::Flags_ID_W]) { + if (Flags[item_info::Flags_ID_W]) { Middle.append(4, 'w'); } + if (Flags[item_info::Flags_ID_N]) { + Middle.append(8, 'n'); + } string End; if (EndSize) { End.append(EndSize, 'z'); } - string Message = (Sub ? (':' + string(Sub) + ':') : string()) + '"' + ID + '"'; + string Message; + if (Sub) { + Message += ':'; + Message += Sub; + auto Index_Pos = Message.find(':', 1); + if (Index_Pos != string::npos) { + Message.insert(Index_Pos, to_string(Items->size() - 1)); + } + Message += ':'; + } + Message += '"'; + Message += ID; + Message += '"'; Message += " is not a valid form ("; if (BeginSize) { Message.append(ID_Start.ID_Begin, BeginSize); @@ -1434,27 +2186,223 @@ static void CheckErrors_Formating(file_adm_private* File_Adm_Private, const stri Message += End; } Message += " being hexadecimal digits)"; - Errors.push_back(Message); + Items->back().Errors->push_back(Message); } + return true; } //--------------------------------------------------------------------------- -static void CheckErrors_Formating(file_adm_private* File_Adm_Private, Items_Struct& MainItem, const item_info& ID_Start, const char* Sub) -{ - if (!ID_Start.ID_Begin) - return; - for (size_t i = 0; i < MainItem.Items.size(); i++) { - CheckErrors_Formating(File_Adm_Private, MainItem.Items[i].Strings[audioProgramme_audioProgrammeID], ID_Start, *MainItem.Items[i].Errors, Sub); +static void CheckErrors_ID_Additions(file_adm_private* File_Adm_Private, item item_Type, size_t i, bool IsAtmos) { + auto& Item = File_Adm_Private->Items[item_Type].Items[i]; + const auto& ID = Item.Attributes[item_Infos[item_Type].ID_Pos]; + if (IsAtmos && !CheckErrors_ID(File_Adm_Private, ID, item_Infos[item_Type])) { + const auto Flags = item_Infos[item_Type].ID_Flags; + if (Flags[item_info::Flags_ID_YX]) { + auto xxxx = ID.substr(strlen(item_Infos[item_Type].ID_Begin) + 5, 4); + if (xxxx[0] == '0' || xxxx == "1000") { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[item_Type].Name) + "ID:audio" + string(item_Infos[item_Type].Name) + "ID attribute xxxx value \"" + xxxx + "\" is not permitted, permitted values are \"1001\" to \"FFFF\"" + ADM_Dolby_1_0); + } + } + if (Flags[item_info::Flags_ID_W]) { + auto wwww = ID.substr(strlen(item_Infos[item_Type].ID_Begin) + 1, 4); + auto wwww_int = strtoul(wwww.c_str(), nullptr, 16); + const char* min; + if (item_Type == item_audioObject && GetType(File_Adm_Private, item_Type, i) == Type_Objects) { + min = "100b"; + } + else { + min = "1001"; + } + const char* max; + switch (item_Type) + { + case item_audioProgramme: max = "1001"; break; + case item_audioObject: max = "1080"; break; + default: max = "FFFF"; break; + } + auto min_int = strtoul(min, nullptr, 16); + auto max_int = strtoul(max, nullptr, 16); + if ((!i || i - 1 < max_int - min_int) && (wwww_int <= 0x1000 || wwww_int < min_int || wwww_int > max_int)) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[item_Type].Name) + "ID:audio" + string(item_Infos[item_Type].Name) + "ID attribute wwww value \"" + wwww + "\" is not permitted" + (min_int == 0x100b ? " due to the Objects typed object" : "") + ", permitted values are \"" + min + "\" to \"" + max + "\"" + ADM_Dolby_1_0); + } + } + if (Flags[item_info::Flags_ID_Z1] && !Flags[item_info::Flags_ID_Z2]) { + if (ID[12] != '0' || ID[13] != '1') { // zz != 01 + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[item_Type].Name) + "ID:audio" + string(item_Infos[item_Type].Name) + "ID attribute zz value \"" + ID.substr(12, 2) + "\" is not permitted, permitted value is \"01\"" + ADM_Dolby_1_0); + } + } + if (Flags[item_info::Flags_ID_N]) { + auto nnnnnnnn = ID.substr(strlen(item_Infos[item_Type].ID_Begin) + 1, 8); + if (nnnnnnnn == "00000000") { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":" + (item_Type == item_audioTrackUID ? "U" : ("audio" + string(item_Infos[item_Type].Name))) + "ID:" + (item_Type == item_audioTrackUID ? "U" : ("audio" + string(item_Infos[item_Type].Name))) + "ID attribute nnnnnnnn value \"" + nnnnnnnn + "\" is not permitted, permitted values are \"00000001\" to \"FFFFFFFF\"" + ADM_Dolby_1_0); + } + } } -} +}; -static void CheckErrors(file_adm_private* File_Adm_Private) -{ - for (size_t t=0; tItems[t], item_Info[t]); +//--------------------------------------------------------------------------- +static void CheckErrors_formatLabelDefinition(file_adm_private* File_Adm_Private, item item_Type, size_t i, const label_info& label_Info, bool IsAtmos) { + auto& Item = File_Adm_Private->Items[item_Type].Items[i]; + const auto Label_Present = Item.Attributes_Present[label_Info.Label_Pos]; + const auto Definition_Present = Item.Attributes_Present[label_Info.Definition_Pos]; + const auto& Label = Item.Attributes[label_Info.Label_Pos]; + const auto& Definition = Item.Attributes[label_Info.Definition_Pos]; + const auto Style = label_Info.Label_Style; + const auto& Style_Info = Style_Infos[Style]; + const auto List = (Style == (style)-1) ? nullptr : Style_Infos[Style].formatDefinition_List; + const unsigned long List_Size = (Style == (style)-1) ? 0 : Style_Infos[Style].formatDefinition_Size; + unsigned long formatLabel_Int = (unsigned long)-1; + + if (Label_Present) { + if (Label.size() != 4 || !IsHexaDigit(Label, 0, 4)) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":formatLabel:formatLabel attribute value \"" + Label + "\" is not a valid form (yyyy form, yyyy being hexadecimal digits)"); + } + else { + formatLabel_Int = strtoul(Label.c_str(), nullptr, 16); + if (formatLabel_Int && formatLabel_Int > List_Size) { + Item.AddError(Warning, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":formatLabel:formatLabel attribute value \"" + Label + "\" is not a known value"); + } + else if (Definition_Present && List && formatLabel_Int < List_Size && Definition != List[formatLabel_Int - 1]) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":formatDefinition:formatDefinition attribute value \"" + Definition + "\" shall be \"" + List[formatLabel_Int - 1] + "\" in order to match the term corresponding to formatLabel attribute value \"" + Label + "\""); + } + if (IsAtmos && ((Style == Style_Format && formatLabel_Int != 1) || (Style == Style_Type && formatLabel_Int != 1 && formatLabel_Int != 3))) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":formatLabel:formatLabel attribute value \"" + Label + "\" is not permitted, permitted value is \"0001\"" + ADM_Dolby_1_0); + } + } + } + + if (Definition_Present) { + bool IsKnown = false; + for (size_t j = 0; j < List_Size; j++) { + const auto& List_Item = List[j]; + if (List_Item == Definition) { + j++; + if (formatLabel_Int == (unsigned long)-1) { + formatLabel_Int = j; + } + else if (formatLabel_Int != j) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":formatLabel:formatLabel attribute value \"" + Label + "\" shall be \"" + Hex2String(j, 4) + "\" in order to match the term corresponding to formatDefinition attribute value \"" + Definition + "\""); + } + IsKnown = true; + break; + } + } + if (!IsKnown) { + Item.AddError(Warning, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":formatDefinition:formatDefinition attribute value \"" + Definition + "\" is not a known value"); + } + if (IsAtmos && ((Style == Style_Format && Definition != List[0]) || (Style == Style_Type && Definition != List[0] && Definition != List[2]))) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":formatDefinition:formatDefinition attribute value \"" + Definition + "\" is not permitted, permitted value is \"PCM\"" + ADM_Dolby_1_0); + } + } + + if (label_Info.Label_Style == Style_Type && formatLabel_Int != (unsigned long)-1) { + const auto& Item_ID = Item.Attributes[item_Infos[item_Type].ID_Pos]; + if (item_Infos[item_Type].ID_Flags[item_info::Flags_ID_YX] && !CheckErrors_ID(File_Adm_Private, Item_ID, item_Infos[item_Type])) { + const auto Item_ID_yyyy = Item_ID.substr(strlen(item_Infos[item_Type].ID_Begin) + 1, 4); + if ((Label_Present && Item_ID_yyyy != Label) || (Definition_Present && formatLabel_Int != strtoul(Item_ID_yyyy.c_str(), nullptr, 16))) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[item_Type].Name) + "ID:audio" + string(item_Infos[item_Type].Name) + "ID attribute yyyy value \"" + Item_ID_yyyy + "\" does not match " + (Label_Present ? ("formatLabel \"" + Label) : ("formatDefinition \"" + Definition)) + '\"'); + } + } + } +}; + +//--------------------------------------------------------------------------- +static void CheckErrors_Attribute(file_adm_private* File_Adm_Private, item item_Type, size_t i, size_t Attribute_Pos, bool IsAtmos) { + auto& Item = File_Adm_Private->Items[item_Type].Items[i]; + const auto& Attribute = Item.Attributes[Attribute_Pos]; + const auto Attribute_Infos = item_Infos[item_Type].Attribute_Infos; + if (Attribute_Infos) { + const auto& Info = (*Attribute_Infos)[Attribute_Pos]; + if (IsAtmos) { + if (Info.Flags[Count0] && !Info.Flags[Dolby0] && Attribute.empty()) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ':' + string(Info.Name) + ':' + string(Info.Name) + " attribute is not present" + ADM_Dolby_1_0); + } + if (!Info.Flags[Dolby1] && !Attribute.empty() && (/*File_Adm_Private->Schema != Schema_ebuCore_2014 ||*/ strcmp(Info.Name, "typeLabel") && strcmp(Info.Name, "typeDefinition"))) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ':' + string(Info.Name) + ':' + string(Info.Name) + " attribute is present" + ADM_Dolby_1_0); + } + } + if (Attribute.size() > 64) { + auto Attribute_Unicode = Ztring().From_UTF8(Attribute).To_Unicode(); + if (Attribute_Unicode.size() > 64) { + Item.AddError(Warning, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ':' + string(Info.Name) + ':' + string(Info.Name) + " attribute value \"" + Attribute + "\" is long"); + } + } + else if (Attribute.empty()) { + const auto& Attribute_Present = Item.Attributes_Present[Attribute_Pos]; + if (Attribute_Present) { + Item.AddError(Warning, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ':' + string(Info.Name) + ':' + string(Info.Name) + " attribute is present but empty"); + } + } } } +//--------------------------------------------------------------------------- +static void CheckErrors_Element(file_adm_private* File_Adm_Private, item item_Type, size_t i, size_t Element_Pos, bool IsAtmos) { + auto& Item = File_Adm_Private->Items[item_Type].Items[i]; + const auto& Element = Item.Elements[Element_Pos]; + if (IsAtmos) { + const auto Element_Infos = item_Infos[item_Type].Element_Infos; + if (Element_Infos) { + const auto& Info = (*Element_Infos)[Element_Pos]; + if (Info.Flags[Count0] && !Info.Flags[Dolby0] && Element.empty()) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ':' + string(Info.Name) + ':' + string(Info.Name) + " element is not present" + ADM_Dolby_1_0); + } + if (!Info.Flags[Dolby1] && !Element.empty()) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ':' + string(Info.Name) + ':' + string(Info.Name) + " element is present" + ADM_Dolby_1_0); + } + else if (Info.Flags[Count2] && !Info.Flags[Dolby2] && Element.size() > 1) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ':' + string(Info.Name) + ':' + string(Info.Name) + " subelement count " + to_string(Element.size()) + " is not permitted, max is 1" + ADM_Dolby_1_0); + } + } + } +}; + +//--------------------------------------------------------------------------- +static void CheckErrors_Element_Target(file_adm_private* File_Adm_Private, item item_Type, size_t i, size_t Element_Pos, size_t Target_Type, bool IsAtmos) { + auto& Item = File_Adm_Private->Items[item_Type].Items[i]; + const auto& Element = Item.Elements[Element_Pos]; + const auto& Targets = File_Adm_Private->Items[Target_Type].Items; + for (const auto& TargetIDRef : Element) { + if ((item_Type == item_audioTrackFormat && Target_Type == item_audioStreamFormat) + || (item_Type == item_audioStreamFormat && Target_Type == item_audioChannelFormat)) { + const auto& Item_ID = Item.Attributes[item_Infos[item_Type].ID_Pos]; + if (!CheckErrors_ID(File_Adm_Private, Item_ID, item_Infos[item_Type]) && !CheckErrors_ID(File_Adm_Private, TargetIDRef, item_Infos[Target_Type])) { + const auto Item_ID_yyyyxxxx = Item_ID.substr(3, 8); + const auto TargetIDRef_yyyyxxxx = TargetIDRef.substr(3, 8); + if (Item_ID_yyyyxxxx != TargetIDRef_yyyyxxxx) { + Item.AddError(IsAtmos ? Error : Warning, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[Target_Type].Name) + "IDRef:audio" + string(item_Infos[Target_Type].Name) + "IDRef subelement with yyyyxxxx value \"" + TargetIDRef_yyyyxxxx + "\" not same as audio" + string(item_Infos[item_Type].Name) + "ID attribute yyyyxxxx value \"" + Item_ID_yyyyxxxx + "\"" + (IsAtmos ? ADM_Dolby_1_0 : "")); + } + } + } + + int16u Ref_Int = (int16u)-1; + if (item_Infos[Target_Type].ID_Flags[item_info::Flags_ID_YX]) { + const auto TargetIDRef_xxxx = TargetIDRef.substr(strlen(item_Infos[Target_Type].ID_Begin) + 5, 4); + Ref_Int = strtoul(TargetIDRef_xxxx.c_str(), nullptr, 16); + } + if (item_Infos[Target_Type].ID_Flags[item_info::Flags_ID_W]) { + const auto TargetIDRef_wwww = TargetIDRef.substr(strlen(item_Infos[Target_Type].ID_Begin) + 1, 4); + Ref_Int = strtoul(TargetIDRef_wwww.c_str(), nullptr, 16); + } + if (Ref_Int < 0x1000) { + if (Ref_Int > item_Infos[Target_Type].MaxKnown) { + Item.AddError(Warning, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[Target_Type].Name) + "IDRef:audio" + string(item_Infos[Target_Type].Name) + "IDRef value \"" + TargetIDRef + "\" is not a known value"); + } + } + else { + bool Target_Found = false; + for (const auto& Target : Targets) { + if (Target.Attributes[item_Infos[Target_Type].ID_Pos] == TargetIDRef) { + Target_Found = true; + } + } + if (!Target_Found) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[Target_Type].Name) + "IDRef:audio" + string(item_Infos[Target_Type].Name) + "IDRef value \"" + TargetIDRef + "\" shall match the audio" + string(item_Infos[Target_Type].Name) + "ID attribute of an audio" + string(item_Infos[Target_Type].Name) + " element"); + } + } + } +}; + //*************************************************************************** // Constructor/Destructor //*************************************************************************** @@ -1485,33 +2433,33 @@ void File_Adm::Streams_Fill() // Clean up if (!File_Adm_Private->Items[item_audioTrack].Items.empty()) { - if (File_Adm_Private->Items[item_audioTrack].Items[0].StringVectors[audioTrack_audioTrackUIDRef].empty()) + if (File_Adm_Private->Items[item_audioTrack].Items[0].Elements[audioTrack_audioTrackUIDRef].empty()) File_Adm_Private->Items[item_audioTrack].Items.erase(File_Adm_Private->Items[item_audioTrack].Items.begin()); } #define FILL_COUNT(NAME) \ if (!File_Adm_Private->Items[item_##NAME].Items.empty()) \ - Fill(Stream_Audio, 0, ("NumberOf" + string(item_Info[item_##NAME].Name) + 's').c_str(), File_Adm_Private->Items[item_##NAME].Items.size()); + Fill(Stream_Audio, 0, ("NumberOf" + string(item_Infos[item_##NAME].Name) + 's').c_str(), File_Adm_Private->Items[item_##NAME].Items.size()); #define FILL_START(NAME,ATTRIBUTE) \ for (size_t i = 0; i < File_Adm_Private->Items[item_##NAME].Items.size(); i++) { \ - Ztring Summary = Ztring().From_UTF8(File_Adm_Private->Items[item_##NAME].Items[i].Strings[NAME##_##ATTRIBUTE]); \ - string P = Apply_Init(*this, item_Info[item_##NAME].Name, i, File_Adm_Private->Items[item_##NAME], Summary); \ + Ztring Summary = Ztring().From_UTF8(File_Adm_Private->Items[item_##NAME].Items[i].Attributes[NAME##_##ATTRIBUTE]); \ + string P = Apply_Init(*this, item_Infos[item_##NAME].Name, i, File_Adm_Private->Items[item_##NAME], Summary); \ #define FILL_START_SUB(NAME,ATTRIBUTE,FIELD) \ for (size_t i = 0; i < File_Adm_Private->Items[item_##NAME].Items.size(); i++) { \ - Ztring Summary = Ztring().From_UTF8(File_Adm_Private->Items[item_##NAME].Items[i].Strings[NAME##_##ATTRIBUTE]); \ + Ztring Summary = Ztring().From_UTF8(File_Adm_Private->Items[item_##NAME].Items[i].Attributes[NAME##_##ATTRIBUTE]); \ string P = Apply_Init(*this, FIELD, i, File_Adm_Private->Items[item_##NAME], Summary); \ #define FILL_A(NAME,ATTRIBUTE,FIELD) \ - Fill(Stream_Audio, StreamPos_Last, (P + ' ' + FIELD).c_str(), File_Adm_Private->Items[item_##NAME].Items[i].Strings[NAME##_##ATTRIBUTE].c_str(), Unlimited, true, true); \ + Fill(Stream_Audio, StreamPos_Last, (P + ' ' + FIELD).c_str(), File_Adm_Private->Items[item_##NAME].Items[i].Attributes[NAME##_##ATTRIBUTE].c_str(), Unlimited, true, true); \ #define FILL_E(NAME,ATTRIBUTE,FIELD) \ { \ ZtringList List; \ List.Separator_Set(0, " + "); \ - for (size_t j = 0; j < File_Adm_Private->Items[item_##NAME].Items[i].StringVectors[NAME##_##ATTRIBUTE].size(); j++) { \ - List.push_back(Ztring().From_UTF8(File_Adm_Private->Items[item_##NAME].Items[i].StringVectors[NAME##_##ATTRIBUTE][j].c_str())); \ + for (size_t j = 0; j < File_Adm_Private->Items[item_##NAME].Items[i].Elements[NAME##_##ATTRIBUTE].size(); j++) { \ + List.push_back(Ztring().From_UTF8(File_Adm_Private->Items[item_##NAME].Items[i].Elements[NAME##_##ATTRIBUTE][j].c_str())); \ } \ string FieldName = P; \ if (FIELD[0]) \ @@ -1538,7 +2486,7 @@ void File_Adm::Streams_Fill() for (map::iterator It = File_Adm_Private->More.begin(); It != File_Adm_Private->More.end(); ++It) //if (It->first != "Metadata_Format") Fill(Stream_Audio, StreamPos_Last, It->first.c_str(), It->second); - if (File_Adm_Private->Items[item_audioProgramme].Items.size() == 1 && File_Adm_Private->Items[item_audioProgramme].Items[0].Strings[audioProgramme_audioProgrammeName] == "Atmos_Master") { + if (File_Adm_Private->Items[item_audioProgramme].Items.size() == 1 && File_Adm_Private->Items[item_audioProgramme].Items[0].Attributes[audioProgramme_audioProgrammeName] == "Atmos_Master") { if (!File_Adm_Private->DolbyProfileCanNotBeVersion1 && File_Adm_Private->Version>1) File_Adm_Private->DolbyProfileCanNotBeVersion1=true; Fill(Stream_Audio, 0, "AdmProfile", (!File_Adm_Private->DolbyProfileCanNotBeVersion1)?"Dolby Atmos Master, Version 1":"Dolby Atmos Master"); @@ -1580,8 +2528,12 @@ void File_Adm::Streams_Fill() } } size_t TotalCount = 0; - for (size_t i = 0; i < item_Max; i++) + for (size_t i = 0; i < item_Max; i++) { + if (i >= item_audioBlockFormat) { + break; + } TotalCount += File_Adm_Private->Items[i].Items.size(); + } bool Full = TotalCount < 0x1000 ? true : false; FILL_COUNT(audioProgramme); FILL_COUNT(audioContent); @@ -1604,7 +2556,7 @@ void File_Adm::Streams_Fill() // Common definitions for (size_t i = 0; i < File_Adm_Private->Items[item_audioPackFormat].Items.size(); i++) { const Item_Struct& Source = File_Adm_Private->Items[item_audioPackFormat].Items[i]; - for (size_t j = 0; j < Source.StringVectors[audioPackFormat_audioChannelFormatIDRef].size(); j++) { + for (size_t j = 0; j < Source.Elements[audioPackFormat_audioChannelFormatIDRef].size(); j++) { } } @@ -1641,7 +2593,7 @@ void File_Adm::Streams_Fill() //TODO: expand this proof of concept if (Config_AdmProfile.Ebu3392==1) { - const string& audioProgrammeName = File_Adm_Private->Items[item_audioProgramme].Items[i].Strings[audioProgramme_audioProgrammeName]; + const string& audioProgrammeName = File_Adm_Private->Items[item_audioProgramme].Items[i].Attributes[audioProgramme_audioProgrammeName]; if (Ztring().From_UTF8(audioProgrammeName).size() > 32) { Errors_Field[Error].push_back("audioProgramme"); @@ -1692,10 +2644,10 @@ void File_Adm::Streams_Fill() const Item_Struct& Source = File_Adm_Private->Items[item_audioPackFormat].Items[i]; const Items_Struct& Dest = File_Adm_Private->Items[item_audioChannelFormat]; string SpeakerLabel; - for (size_t j = 0; j < Source.StringVectors[audioPackFormat_audioChannelFormatIDRef].size(); j++) { - const string& ID = Source.StringVectors[audioPackFormat_audioChannelFormatIDRef][j]; + for (size_t j = 0; j < Source.Elements[audioPackFormat_audioChannelFormatIDRef].size(); j++) { + const string& ID = Source.Elements[audioPackFormat_audioChannelFormatIDRef][j]; for (size_t k = 0; k < Dest.Items.size(); k++) { - if (Dest.Items[k].Strings[audioChannelFormat_audioChannelFormatID] != ID) { + if (Dest.Items[k].Attributes[audioChannelFormat_audioChannelFormatID] != ID) { continue; } for (map::const_iterator Extra = Dest.Items[k].Extra.begin(); Extra != Dest.Items[k].Extra.end(); ++Extra) { @@ -1730,11 +2682,11 @@ void File_Adm::Streams_Fill() FILL_A(audioTrackUID, UID, "ID"); FILL_A(audioTrackUID, bitDepth, "BitDepth"); FILL_A(audioTrackUID, sampleRate, "SamplingRate"); - string& ID = File_Adm_Private->Items[item_audioTrackUID].Items[i].Strings[audioTrackUID_UID]; + string& ID = File_Adm_Private->Items[item_audioTrackUID].Items[i].Attributes[audioTrackUID_UID]; for (size_t j = 0; j < File_Adm_Private->Items[item_audioTrack].Items.size(); j++) { Item_Struct& Item = File_Adm_Private->Items[item_audioTrack].Items[j]; - vector& Ref = Item.StringVectors[audioTrack_audioTrackUIDRef]; + vector& Ref = Item.Elements[audioTrack_audioTrackUIDRef]; for (size_t k = 0; k < Ref.size(); k++) { if (Ref[k] == ID) @@ -1771,7 +2723,7 @@ void File_Adm::Streams_Fill() if (!File_Adm_Private->Items[item_audioTrack].Items.empty()) { Fill(Stream_Audio, 0, "Transport0", "Yes"); - FILL_START_SUB(audioTrack, Summary, "Transport0 TrackIndex") + FILL_START_SUB(audioTrack, formatDefinition, "Transport0 TrackIndex") FILL_E(audioTrack, audioTrackUIDRef, ""); if (Full) LINK(audioTrack, "TrackUID", audioTrackUIDRef, audioTrackUID); @@ -1783,13 +2735,516 @@ void File_Adm::Streams_Fill() // Errors #if MEDIAINFO_CONFORMANCE - CheckErrors(File_Adm_Private); + auto IsAtmos = !File_Adm_Private->Items[item_audioProgramme].Items.empty() && File_Adm_Private->Items[item_audioProgramme].Items[0].Attributes[audioProgramme_audioProgrammeName] == "Atmos_Master"; + auto& Programmes = File_Adm_Private->Items[item_audioProgramme].Items; + auto& Contents = File_Adm_Private->Items[item_audioContent].Items; + auto& Objects = File_Adm_Private->Items[item_audioObject].Items; + auto& PackFormats = File_Adm_Private->Items[item_audioPackFormat].Items; + auto& ChannelFormats = File_Adm_Private->Items[item_audioChannelFormat].Items; + auto& StreamFormats = File_Adm_Private->Items[item_audioStreamFormat].Items; + auto& TrackFormats = File_Adm_Private->Items[item_audioTrackFormat].Items; + auto& TrackUIDs = File_Adm_Private->Items[item_audioTrackUID].Items; + auto& BlockFormats = File_Adm_Private->Items[item_audioBlockFormat].Items; + auto& Positions = File_Adm_Private->Items[item_position].Items; + + auto OldLocale_Temp = setlocale(LC_NUMERIC, nullptr); + string OldLocale; + if (*OldLocale_Temp != 'C' || *(OldLocale_Temp + 1)) { + OldLocale = OldLocale_Temp; + setlocale(LC_NUMERIC, "C"); + } + + // Errors - For all + for (size_t item_Type = 0; item_Type < item_Max; item_Type++) { + if (item_Type == item_audioTrack) { + continue; // TODO + } + auto& Items = File_Adm_Private->Items[item_Type].Items; + if (item_Type == item_audioProgramme && Items.empty()) { + File_Adm_Private->Items[item_Type].New().AddError(Error, ":audioProgramme0:GeneralCompliance:audioProgramme element count 0 is not permitted, min is 1"); + } + if (IsAtmos) { + static const int8u MaxCounts[] = { (int8u)-1, 1, 123, 123, 123, 128, 128, 128, 128, (int8u)-1, (int8u)-1, (int8u)-1 }; + static_assert (sizeof(MaxCounts) / sizeof(MaxCounts[0]) == item_Max, IncoherencyMessage); + if (int8u(MaxCounts[item_Type] + 1) && Items.size() > MaxCounts[item_Type]) { + Items[MaxCounts[item_Type]].AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(MaxCounts[item_Type]) + ":GeneralCompliance:audio" + string(item_Infos[item_Type].Name) + " element count " + to_string(Items.size()) + " is not permitted, max is " + to_string(MaxCounts[item_Type]) + "" + ADM_Dolby_1_0); + } + } + set PreviousIDs; + set PreviousIDs_Forbidden; + for (size_t i = 0; i < Items.size(); i++) { + auto& Item = Items[i]; + for (size_t j = 0; j < Item.Attributes.size(); j++) { + CheckErrors_Attribute(File_Adm_Private, (item)item_Type, i, j, IsAtmos); + } + for (size_t j = 0; j < Item.Elements.size(); j++) { + CheckErrors_Element(File_Adm_Private, (item)item_Type, i, j, IsAtmos); + } + if (item_Infos[item_Type].ID_Pos != (int8u)-1) { + const auto& ID = Item.Attributes[item_Infos[item_Type].ID_Pos]; + if (PreviousIDs.find(ID) != PreviousIDs.end()) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[item_Type].Name) + "ID:audio" + string(item_Infos[item_Type].Name) + "ID value \"" + ID + "\" shall be unique"); + } + else if (PreviousIDs_Forbidden.find(ID) != PreviousIDs_Forbidden.end()) { + Item.AddError(Error, ":audio" + string(item_Infos[item_Type].Name) + to_string(i) + ":audio" + string(item_Infos[item_Type].Name) + "ID:audio" + string(item_Infos[item_Type].Name) + "ID value \"" + ID + "\" is not permitted due to the ID of the DirectSpeakers typed object" + ADM_Dolby_1_0); + } + else { + PreviousIDs.insert(ID); + if (IsAtmos && item_Type == Type_Objects && !CheckErrors_ID(File_Adm_Private, ID, item_Infos[item_Type])) { + const auto audioTrackUIDRefs_Size = Item.Elements[audioObject_audioTrackUIDRef].size(); + if (audioTrackUIDRefs_Size) { + const auto ID_wwww = ID.substr(3, 4); + auto ID_wwww_Int = strtoul(ID_wwww.c_str(), nullptr, 16); + auto ID_wwww_Int_Max = ID_wwww_Int + audioTrackUIDRefs_Size; + for (; ID_wwww_Int < ID_wwww_Int_Max; ID_wwww_Int++) { + PreviousIDs_Forbidden.insert("AO_" + Hex2String(ID_wwww_Int, 4)); + } + } + } + } + CheckErrors_ID_Additions(File_Adm_Private, (item)item_Type, i, IsAtmos); + } + } + } + for (const auto& label_Info : label_Infos) { + auto& Items = File_Adm_Private->Items[label_Info.item_Type].Items; + for (size_t i = 0; i < Items.size(); i++) { + CheckErrors_formatLabelDefinition(File_Adm_Private, label_Info.item_Type, i, label_Info, IsAtmos); + } + } + for (const auto& IDRef : IDRefs) { + auto& Items = File_Adm_Private->Items[IDRef.Source_Type].Items; + for (size_t i = 0; i < Items.size(); i++) { + CheckErrors_Element_Target(File_Adm_Private, IDRef.Source_Type, i, IDRef.Source_Pos, IDRef.Target_Type, IsAtmos); + } + } + + // Errors - audioProgramme + for (size_t i = 0; i < Programmes.size(); i++) { + auto& Programme = Programmes[i]; + if (IsAtmos && Programme.Elements[audioProgramme_audioContentIDRef].size() > 123) { + Programme.AddError(Error, ":audioProgramme" + to_string(i) + ":audioContentIDRef:audioContentIDRef element count " + to_string(Programme.Elements[audioProgramme_audioContentIDRef].size()) + " is not permitted, max is 123" + ADM_Dolby_1_0); + } + } + + // Errors - audioContent + for (size_t i = 0; i < Contents.size(); i++) { + auto& Content = Contents[i]; + const auto& dialogues = Content.Elements[audioContent_dialogue]; + for (size_t j = 0; j < dialogues.size(); j++) { + const auto& dialogue = dialogues[j]; + if (IsAtmos && dialogue != "Mixed") { + Content.AddError(Error, ":audioObject" + to_string(i) + ":dialogue" + to_string(j) + ":dialogue element value \"" + dialogue + "\" is not permitted, permitted value is \"Mixed\"" + ADM_Dolby_1_0); + } + } + } + + // Errors - audioObject + size_t Object_Objects_Count = 0; + for (size_t i = 0; i < Objects.size(); i++) { + auto& Object = Objects[i]; + if (IsAtmos) { + auto Type = GetType(File_Adm_Private, item_audioObject, i); + const auto& ChannelFormatIDRefs = Object.Elements[audioObject_audioTrackUIDRef]; + if (!ChannelFormatIDRefs.empty()) { + auto ChannelFormatIDRefs_Size = ChannelFormatIDRefs.size(); + if ((Type == Type_DirectSpeakers && ChannelFormatIDRefs_Size > 10) || (Type == Type_Objects && ChannelFormatIDRefs_Size > 1)) { + Object.AddError(Error, ":audioObject" + to_string(i) + ":audioTrackUIDRef:audioTrackUIDRef element count " + to_string(ChannelFormatIDRefs_Size) + " is not permitted, max is " + to_string(Type == Type_DirectSpeakers ? 10 : 1) + "" + ADM_Dolby_1_0); + } + } + } + const auto& start = Object.Attributes[audioObject_start]; + const auto& startTime = Object.Attributes[audioObject_startTime]; + const auto RealStart = start.empty() ? &startTime : &start; + if (!start.empty() && !startTime.empty() && start != startTime) { + Object.AddError(Warning, ":audioObject" + to_string(i) + ":start:startTime attribute should be same as start attribute"); + } + if (IsAtmos) { + if (RealStart->empty()) { + } + else if (*RealStart != "00:00:00.00000") { + Object.AddError(Error, ":audioObject" + to_string(i) + ":start:start attribute value \"" + *RealStart + "\" is not permitted, permitted value is \"00:00:00.00000\"" + ADM_Dolby_1_0); + } + const auto& interact = Object.Attributes[audioObject_interact]; + if (!interact.empty() && interact != "0") { + Object.AddError(Error, ":audioObject" + to_string(i) + ":interact:interact attribute value \"" + interact + "\" is not permitted, permitted value is \"0\"" + ADM_Dolby_1_0); + } + const auto& disableDucking = Object.Attributes[audioObject_disableDucking]; + if (!disableDucking.empty() && disableDucking != "1") { + Object.AddError(Error, ":audioObject" + to_string(i) + ":disableDucking:disableDucking attribute value \"" + disableDucking + "\" is not permitted, permitted value is \"1\"" + ADM_Dolby_1_0); + } + } + for (const auto& audioPackFormatIDRef : Object.Elements[audioObject_audioPackFormatIDRef]) { + for (const auto& audioPackFormat : PackFormats) { + if (audioPackFormat.Attributes[audioChannelFormat_audioChannelFormatID] == audioPackFormatIDRef && (audioPackFormat.Attributes[audioChannelFormat_typeLabel] == "0003" || audioPackFormat.Attributes[audioChannelFormat_typeDefinition] == "Objects")) { + Object_Objects_Count++; + } + } + } + } + if (Object_Objects_Count > 118) { + Objects[118].AddError(Error, ":audioObject118:GeneralCompliance:audioObject pointing to audioChannelFormat@typeDefinition==\"Objects\" element count " + to_string(Object_Objects_Count) + " is not permitted, max is 118" + ADM_Dolby_1_0); + } + + // Errors - audioPackFormat + size_t PackFormat_Objects_Count = 0; + for (size_t i = 0; i < PackFormats.size(); i++) { + auto& PackFormat = PackFormats[i]; + auto Type = GetType(File_Adm_Private, item_audioPackFormat, i); + if (IsAtmos) { + const auto& ChannelFormatIDRefs = PackFormat.Elements[audioPackFormat_audioChannelFormatIDRef]; + if (!ChannelFormatIDRefs.empty()) { + auto ChannelFormatIDRefs_Size = ChannelFormatIDRefs.size(); + if ((Type == Type_DirectSpeakers && ChannelFormatIDRefs_Size > 10) || (Type == Type_Objects && ChannelFormatIDRefs_Size > 1)) { + PackFormat.AddError(Error, ":audioPackFormat" + to_string(i) + ":audioChannelFormatIDRef:audioChannelFormatIDRef subelement count " + to_string(ChannelFormatIDRefs_Size) + " is not permitted, max is " + to_string(Type == Type_DirectSpeakers ? 10 : 1) + "" + ADM_Dolby_1_0); + } + if (Type == Type_DirectSpeakers) { + vector List; + vector List_Strings; + for (const auto& ChannelFormatIDRef : ChannelFormatIDRefs) { + for (const auto& ChannelFormat : ChannelFormats) { + const auto& ChannelFormatID = ChannelFormat.Attributes[audioChannelFormat_audioChannelFormatID]; + if (ChannelFormatID == ChannelFormatIDRef) { + const auto& ChannelFormatName = ChannelFormat.Attributes[audioChannelFormat_audioChannelFormatName]; + List.push_back(Atmos_audioChannelFormat_Pos(ChannelFormatName)); + List_Strings.push_back(ChannelFormatName); + } + } + } + if (!Atmos_ChannelOrder_Find(List)) { + string List_Strings_Flat; + for (const auto& Item : List_Strings) { + if (!List_Strings_Flat.empty()) { + List_Strings_Flat += ' '; + } + List_Strings_Flat += Item; + } + PackFormat.AddError(Error, ":audioPackFormat" + to_string(i) + ":audioChannelFormatIDRef:audioChannelFormatIDRef order \"" + List_Strings_Flat + "\" is not permitted" + ADM_Dolby_1_0); + } + } + } + } + if (Type == Type_Objects) { + PackFormat_Objects_Count++; + } + } + if (PackFormat_Objects_Count > 118) { + PackFormats[118].AddError(Error, ":audioPackFormat118:GeneralCompliance:audioPackFormat@typeDefinition==\"Objects\" element count " + to_string(PackFormat_Objects_Count) + " is not permitted, max is 118" + ADM_Dolby_1_0); + } + + // Errors - audioChannelFormat + size_t BlockFormat_Pos = 0; + size_t Position_Pos = 0; + for (size_t i = 0; i < ChannelFormats.size(); i++) { + auto& ChannelFormat = ChannelFormats[i]; + size_t BlockFormat_Count = ChannelFormat.Elements[audioChannelFormat_audioBlockFormat].size(); + const auto& ID = ChannelFormat.Attributes[audioChannelFormat_audioChannelFormatID]; + const auto Type = GetType(File_Adm_Private, item_audioChannelFormat, i); + + atmos_audioChannelFormatName ChannelAssignment; + if (IsAtmos) { + if (Type == Type_DirectSpeakers) { + if (ChannelFormat.Attributes_Present[audioChannelFormat_audioChannelFormatName]) { + const auto& ChannelFormatName = ChannelFormat.Attributes[audioChannelFormat_audioChannelFormatName]; + ChannelAssignment = Atmos_audioChannelFormat_Pos(ChannelFormatName); + if (ChannelAssignment == (size_t)-1) { + ChannelFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioChannelFormatName:audioChannelFormatName " + ChannelFormatName + " is not permitted" + ADM_Dolby_1_0); + } + } + const auto& BlockFormats_Size = ChannelFormat.Elements[audioChannelFormat_audioBlockFormat].size(); + if (BlockFormats_Size != 1) { + ChannelFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat1:GeneralCompliance:audioBlockFormat subelement count " + to_string(BlockFormats_Size) + " is not permitted, max is 1" + ADM_Dolby_1_0); + } + } + } + + if (!CheckErrors_ID(File_Adm_Private, ID, item_Infos[item_audioChannelFormat])) { + bool HasNoInit; + const auto ID_yyyyxxxx = ID.substr(3, 8); + for (size_t j = 0; j < BlockFormat_Count; j++) { + auto& BlockFormat = BlockFormats[BlockFormat_Pos + j]; + + if (IsAtmos) { + if (Type == Type_DirectSpeakers) { + if (BlockFormat.Attributes_Present[audioBlockFormat_rtime]) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":rtime:rtime attribute is present" + ADM_Dolby_1_0); + } + if (BlockFormat.Attributes_Present[audioBlockFormat_duration]) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":duration:duration attribute is present" + ADM_Dolby_1_0); + } + } + if (Type == Type_Objects) { + if (!BlockFormat.Attributes_Present[audioBlockFormat_rtime]) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":rtime:rtime attribute is not present" + ADM_Dolby_1_0); + } + if (!BlockFormat.Attributes_Present[audioBlockFormat_duration]) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":duration:duration attribute is not present" + ADM_Dolby_1_0); + } + } + } + + if (!j) + HasNoInit = File_Adm_Private->Version_S < 0 || BlockFormat.Attributes[audioBlockFormat_initializeBlock] != "1"; + const auto& ID_Block = BlockFormat.Attributes[audioBlockFormat_audioBlockFormatID]; + if (!CheckErrors_ID(File_Adm_Private, ID_Block, item_Infos[item_audioBlockFormat])) { + const auto ID_Block_yyyyxxxx = ID_Block.substr(3, 8); + if (ID_Block_yyyyxxxx != ID_yyyyxxxx) { + ChannelFormat.AddError(IsAtmos ? Error : Warning, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":audioBlockFormatID:audioBlockFormatID attribute with yyyyxxxx value \"" + ID_Block_yyyyxxxx + "\" not same as audioChannelFormatID attribute yyyyxxxx value \"" + ID_yyyyxxxx + "\"" + (IsAtmos ? ADM_Dolby_1_0 : "")); + } + const auto ID_Block_zzzzzzzz = ID_Block.substr(12, 8); + auto ID_Block_zzzzzzzz_Int = strtoul(ID_Block_zzzzzzzz.c_str(), nullptr, 16); + const auto ID_Block_zzzzzzzz_Expected = j + HasNoInit; + if ((HasNoInit || !j) && ID_Block_zzzzzzzz_Int != ID_Block_zzzzzzzz_Expected) { + const auto ID_Block_Expected = ID_Block.substr(0, 12) + Hex2String(ID_Block_zzzzzzzz_Expected, 8); + ChannelFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":audioBlockFormatID:audioBlockFormatID attribute value \"" + ID_Block + "\" shall be \"" + ID_Block_Expected + "\" in order to match the audioBlockFormat index"); + } + } + + auto List_Check = [&](audioBlockFormat_Element* List, size_t List_Size) { + for (size_t l = audioBlockFormat_headphoneVirtualise + 1; l < audioBlockFormat_Element_Max; l++) { + if (BlockFormat.Elements[l].empty()) { + continue; + } + auto IsInList = false; + for (size_t m = 0; m < List_Size; m++) { + if (l == List[m]) { + IsInList = true; + } + } + if (!IsInList) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":GeneralConformance:" + (*item_Infos[item_audioBlockFormat].Element_Infos)[l].Name + " subelement is present"); + } + } + }; + atmos_audioChannelFormatName speakerLabel_ChannelAssignment = (atmos_audioChannelFormatName)-1; + switch (Type) { + case Type_DirectSpeakers: { + const audioBlockFormat_Element BlockFormat_DirectSpeakers_List[] = { audioBlockFormat_cartesian, audioBlockFormat_speakerLabel, audioBlockFormat_position }; // TODO: cartesian is not in specs but lot of files have it + List_Check((audioBlockFormat_Element*)&BlockFormat_DirectSpeakers_List, sizeof(BlockFormat_DirectSpeakers_List) / sizeof(*BlockFormat_DirectSpeakers_List)); + if (BlockFormat.Elements[audioBlockFormat_speakerLabel].empty()) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[audioBlockFormat_speakerLabel].Name + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[audioBlockFormat_speakerLabel].Name + " element is not present"); + } + else { + if (IsAtmos) { + const auto& speakerLabel = BlockFormat.Elements[audioBlockFormat_speakerLabel].back(); + speakerLabel_ChannelAssignment = Atmos_audioChannelFormat_Pos(speakerLabel, true); + if (speakerLabel_ChannelAssignment == (size_t)-1) { + ChannelFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":speakerLabel:speakerLabel element value " + speakerLabel + " is not permitted" + ADM_Dolby_1_0); + } + else { + if (ChannelAssignment != (size_t)-1 && speakerLabel_ChannelAssignment != ChannelAssignment) { + ChannelFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":speakerLabel:speakerLabel element value " + speakerLabel + " is not permitted, permitted value is " + Atmos_audioChannelFormat_Content[ChannelAssignment].SpeakerLabel + "" + ADM_Dolby_1_0); + } + } + } + } + break; + } + } + + unsigned long is_cartesian; + static const char* Cartesian_0_Names[] = { "azimuth", "elevation", "distance" }; + const auto& cartesians = BlockFormat.Elements[audioBlockFormat_cartesian]; + size_t position_Count = BlockFormat.Elements[audioBlockFormat_position].size(); + if (!cartesians.empty()) { + const auto& cartesian = BlockFormat.Elements[audioBlockFormat_cartesian].back(); + char* End; + is_cartesian = strtoul(cartesian.c_str(), &End, 10); + if (to_string(is_cartesian) != cartesian) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":cartesian:cartesian element value \"" + cartesian + "\" is malformed"); + is_cartesian = (unsigned long)-1; + } + else if (is_cartesian > 1) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":cartesian:cartesian element value \"" + cartesian + "\" is not permitted, permitted values are 0 or 1"); + } + else { + if (IsAtmos && !is_cartesian) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":cartesian:cartesian element value is not 1" + ADM_Dolby_1_0); + } + } + } + else { + if (IsAtmos && Type == Type_Objects) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":cartesian:cartesian element is not present" + ADM_Dolby_1_0); + } + + // Autodetection + bitset<3> HasAED; + bitset<3> HasXYZ; + for (size_t k = 0; k < position_Count; k++) { + auto& Position = Positions[Position_Pos + k]; + if (Position.Attributes_Present[position_coordinate]) { + if (Position.Attributes[position_coordinate].size() == 1 && Position.Attributes[position_coordinate][0] >= 'X' && Position.Attributes[position_coordinate][0] <= 'Z') { + auto Pos = Position.Attributes[position_coordinate][0] - 'X'; + HasXYZ.set(Pos); + } + size_t Pos = 0; + for (; Pos < 3 && Position.Attributes[position_coordinate] != Cartesian_0_Names[Pos]; Pos++) { + } + if (Pos < 3) { + HasAED.set(Pos); + } + } + } + if (HasXYZ.count() > HasAED.count()) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":cartesian:cartesian element is not present" + ADM_Dolby_1_0); + + is_cartesian = 1; + } + else if (HasAED.any()) { + is_cartesian = 0; + } + else { + is_cartesian = (unsigned long)-1; + } + } + + if (is_cartesian == 0) { + bitset<3> HasAED; + static float32 Cartesian_0_Limits[][2] = { {-180, 180}, { -90, 90}, {0, 1 } }; + for (size_t k = 0; k < position_Count; k++) { + auto& Position = Positions[Position_Pos + k]; + if (Position.Attributes_Present[position_coordinate]) { + size_t Pos = 0; + for (; Pos < 3 && Position.Attributes[position_coordinate] != Cartesian_0_Names[Pos]; Pos++) { + } + if (Pos < 3) { + HasAED.set(Pos); + const auto& Element = BlockFormat.Elements[audioBlockFormat_position][k]; + char* End; + auto Value = strtof(Element.c_str(), &End); + if (End - Element.c_str() != Element.size()) { + Position.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position"/*0*/":position element value \"" + BlockFormat.Elements[audioBlockFormat_position][k] + "\" is malformed"); + } + else if (Value < Cartesian_0_Limits[Pos][0] || Value > Cartesian_0_Limits[Pos][1]) { + Position.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position"/*0*/":position element value \"" + BlockFormat.Elements[audioBlockFormat_position][k] + "\" is not permitted, permitted values are [" + to_string(Cartesian_0_Limits[Pos][0]) + " - " + to_string(Cartesian_0_Limits[Pos][1]) + "]"); + } + } + else { + Position.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position"/*0*/":coordinate attribute \"" + Position.Attributes[position_coordinate] + "\" is present"); + } + } + } + for (size_t k = 0; k < 2; k++) { + if (!HasAED[k]) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position"/*0*/":position@coordinate==\"" + Cartesian_0_Names[k] + "\" element is not present"); + } + } + } + if (is_cartesian == 1) { + bitset<3> HasXYZ; + float32 Values[3] = {}; + for (size_t k = 0; k < position_Count; k++) { + auto& Position = Positions[Position_Pos + k]; + if (Position.Attributes_Present[position_coordinate]) { + if (Position.Attributes[position_coordinate].size() == 1 && Position.Attributes[position_coordinate][0] >= 'X' && Position.Attributes[position_coordinate][0] <= 'Z') { + auto Pos = Position.Attributes[position_coordinate][0] - 'X'; + HasXYZ.set(Pos); + const auto& Element = BlockFormat.Elements[audioBlockFormat_position][k]; + char* End; + Values[Pos] = strtof(Element.c_str(), &End); + if (End - Element.c_str() != Element.size()) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[k].Name + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[k].Name + " element value \"" + Element + "\" is malformed"); + } + else if (Values[Pos] < -1 || Values[Pos] > 1) { + Position.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position"/*0*/":position@coordinate=\"" + Position.Attributes[position_coordinate] + "\" element value \"" + BlockFormat.Elements[audioBlockFormat_position][k] + "\" is not permitted, permitted values are [-1,1]"); + } + } + else { + Position.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position"/*0*/":coordinate attribute \"" + Position.Attributes[position_coordinate] + "\" is present"); + } + } + } + bool ValuesAreNok = false; + for (size_t l = 0; l < 2; l++) { + if (!HasXYZ[l]) { + ValuesAreNok = true; + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position"/*0*/":position@coordinate==\"" + string(1, 'X' + l) + "\" element is not present"); + } + } + if (!ValuesAreNok && speakerLabel_ChannelAssignment != -1) { + if (IsAtmos) { + auto position_ChannelAssignment = Atmos_audioChannelFormat_Pos(Values[0], Values[1], Values[2], speakerLabel_ChannelAssignment); + if (position_ChannelAssignment == -1) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position:position@coordinate=\"X Y Z\" element value \"" + Ztring::ToZtring(Values[0], (Values[0] - (int)Values[0]) ? 5 : 0).To_UTF8() + ' ' + Ztring::ToZtring(Values[1], (Values[2] - (int)Values[2]) ? 5 : 0).To_UTF8() + ' ' + Ztring::ToZtring(Values[2], (Values[2] - (int)Values[2]) ? 5 : 0).To_UTF8() + "\" is not valid" + ADM_Dolby_1_0); + } + else if (position_ChannelAssignment != speakerLabel_ChannelAssignment) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":position:position@coordinate=\"X Y Z\" element value \"" + Ztring::ToZtring(Values[0], (Values[0] - (int)Values[0]) ? 5 : 0).To_UTF8() + ' ' + Ztring::ToZtring(Values[1], (Values[2] - (int)Values[2]) ? 5 : 0).To_UTF8() + ' ' + Ztring::ToZtring(Values[2], (Values[2] - (int)Values[2]) ? 5 : 0).To_UTF8() + "\" so \"" + Atmos_audioChannelFormat_Content[position_ChannelAssignment].SpeakerLabel + "\" does not match corresponding speakerLabel element value \"" + Atmos_audioChannelFormat_Content[speakerLabel_ChannelAssignment].SpeakerLabel + "\"" + ADM_Dolby_1_0); + } + } + } + } + if (is_cartesian || is_cartesian == 1) { + static_assert(audioBlockFormat_depth - audioBlockFormat_width == 2, ""); + auto Count = 0; + string Value_Ref; + for (size_t k = audioBlockFormat_width; k <= audioBlockFormat_depth; k++) { + const auto& Elements = BlockFormat.Elements[k]; + if (!Elements.empty()) { + const auto& Element = Elements.back(); + if (Value_Ref.empty()) { + Value_Ref = Element; + } + else if (Element != Value_Ref) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":GeneralCompliance:width/height/depth element values are not same" + ADM_Dolby_1_0); + } + auto Max = (is_cartesian || k == audioBlockFormat_depth) ? 1 : 360; + char* End; + auto Value = strtof(Element.c_str(), &End); + if (End - Element.c_str() < Element.size()) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[k].Name + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[k].Name + " element value \"" + Element + "\" is malformed"); + } + else if (Value < 0 || Value > Max) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[k].Name + ':' + (*item_Infos[item_audioBlockFormat].Element_Infos)[k].Name + " element value \"" + Element + "\" is not permitted, permitted values are [0," + to_string(Max) + "]"); + } + Count++; + } + } + if (IsAtmos && (Count && Count != 3)) { + BlockFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":audioBlockFormat" + to_string(j) + ":GeneralCompliance:width/height/depth element values are not all present" + ADM_Dolby_1_0); + } + } + + Position_Pos += position_Count; + } + } + + if (IsAtmos) { + if (!ChannelFormat.Elements[audioChannelFormat_frequency].empty()) { + ChannelFormat.AddError(Error, ":audioChannelFormat" + to_string(i) + ":frequency:frequency element should not be present" + ADM_Dolby_1_0); + } + } + + BlockFormat_Pos += BlockFormat_Count; + } + + // Errors - audioStreamFormat + for (size_t i = 0; i < StreamFormats.size(); i++) { + auto& StreamFormat = StreamFormats[i]; + } + + // Errors - audioTrackFormat + for (size_t i = 0; i < TrackFormats.size(); i++) { + auto& TrackFormat = TrackFormats[i]; + } + + // Errors - TrackUID + for (size_t i = 0; i < TrackUIDs.size(); i++) { + auto& TrackUID = TrackUIDs[i]; + } + + // Errors - Fill for (size_t t = 0; t < item_Max; t++) { + size_t Error_Count_Per_Type = 0; for (size_t i = 0; i < File_Adm_Private->Items[t].Items.size(); i++) { - FillErrors(File_Adm_Private, (item)t, i, item_Info[t].Name, &Errors_Field[0], &Errors_Value[0], WarningError); \ + FillErrors(File_Adm_Private, (item)t, i, item_Infos[t].Name, &Errors_Field[0], &Errors_Value[0], WarningError, Error_Count_Per_Type); } } + if (!OldLocale.empty()) { + setlocale(LC_NUMERIC, OldLocale.c_str()); + } + //Conformance for (size_t k = 0; k < error_Type_Max; k++) { if (!Errors_Field[k].empty()) { @@ -1858,9 +3313,13 @@ void File_Adm::Read_Buffer_Init() void File_Adm::Read_Buffer_Continue() { auto Result = File_Adm_Private->parse((void*)Buffer, Buffer_Size); - if (!Status[IsAccepted] && !File_Adm_Private->Items[item_audioContent].Items.empty()) - { - Accept("ADM"); + if (!Status[IsAccepted]) { + for (const auto& Items : File_Adm_Private->Items) { + if (!Items.Items.empty()) { + Accept("ADM"); + break; + } + } } if (Result > 0 && File_Offset + Buffer_Size < File_Size) { diff --git a/src/ExtLib/MediaInfo/MediaInfo/ExternalCommandHelpers.cpp b/src/ExtLib/MediaInfo/MediaInfo/ExternalCommandHelpers.cpp index c4beaa6cd3..b11e807c1c 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/ExternalCommandHelpers.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/ExternalCommandHelpers.cpp @@ -170,9 +170,9 @@ int External_Command_Run(const Ztring& Command, const ZtringList& Arguments, Ztr StdErrWrite=nullptr; } - STARTUPINFO StartupInfo; - ZeroMemory(&StartupInfo, sizeof(STARTUPINFO)); - StartupInfo.cb=sizeof(STARTUPINFO); + STARTUPINFOW StartupInfo; + ZeroMemory(&StartupInfo, sizeof(StartupInfo)); + StartupInfo.cb=sizeof(StartupInfo); StartupInfo.hStdError=StdErrWrite; StartupInfo.hStdOutput=StdOutWrite; StartupInfo.dwFlags|=STARTF_USESTDHANDLES; diff --git a/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams.cpp b/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams.cpp index 439313277b..c15d9f0c4a 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams.cpp @@ -421,6 +421,25 @@ void File__Analyze::Get_MasteringDisplayColorVolume(Ztring &MasteringDisplay_Col #endif //--------------------------------------------------------------------------- +extern const char* DolbyVision_Compatibility[] = +{ + "", + "HDR10", + "SDR", + NULL, + "HLG", + NULL, + "Blu-ray", +}; +static const size_t DolbyVision_Compatibility_Size = sizeof(DolbyVision_Compatibility) / sizeof(const char*); +size_t DolbyVision_Compatibility_Pos(const Ztring& Value) +{ + + for (size_t Pos = 0; Pos < DolbyVision_Compatibility_Size; Pos++) + if (Ztring(DolbyVision_Compatibility[Pos]) == Value) + return Pos; + return (size_t)-1; +} #if defined(MEDIAINFO_AV1_YES) || defined(MEDIAINFO_AVC_YES) || defined(MEDIAINFO_HEVC_YES) || defined(MEDIAINFO_MPEG4_YES) || defined(MEDIAINFO_MATROSKA_YES) || defined(MEDIAINFO_MXF_YES) enum class dolbyvision_profile : uint8_t { @@ -485,17 +504,6 @@ static void DolbyVision_Profiles_Append(string& Profile, int8u i) return add_dec_2chars(Profile, i); Profile.append(DolbyVision_Profiles_Names+((size_t)j)*4, 4); } -extern const char* DolbyVision_Compatibility[] = -{ - "", - "HDR10", - "SDR", - NULL, - "HLG", - NULL, - "Blu-ray", -}; -static const size_t DolbyVision_Compatibility_Size=sizeof(DolbyVision_Compatibility)/sizeof(const char*); extern const char* DolbyVision_Compression[] = { "None", diff --git a/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp b/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp index d230bc2196..d48e2bd806 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/File__Analyze_Streams_Finish.cpp @@ -51,6 +51,7 @@ namespace MediaInfoLib //--------------------------------------------------------------------------- extern MediaInfo_Config Config; +extern size_t DolbyVision_Compatibility_Pos(const Ztring& Value); //--------------------------------------------------------------------------- //--------------------------------------------------------------------------- @@ -1128,6 +1129,10 @@ void File__Analyze::Streams_Finish_StreamOnly_Video(size_t Pos) Summary.Separator_Set(0, __T(" / ")); Summary.Write(Retrieve(Stream_Video, Pos, Video_HDR_Format)); ZtringList Commercial=Summary; + size_t DolbyVision_Pos=(size_t)-1; + for (size_t j=0; jFormat_Test_PerParser(this, File_Name)>0) return 1; #endif + #if defined(MEDIAINFO_ICC_YES) + delete Info; Info=new File_Icc(); if (((Reader_File*)Reader)->Format_Test_PerParser(this, File_Name)>0) return 1; + #endif //At the end, could load too much data for nothing #if defined(MEDIAINFO_ADM_YES) diff --git a/src/ExtLib/MediaInfo/MediaInfo/MediaInfo_Inform.cpp b/src/ExtLib/MediaInfo/MediaInfo/MediaInfo_Inform.cpp index a3414519d5..151e7da9dc 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/MediaInfo_Inform.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/MediaInfo_Inform.cpp @@ -730,7 +730,7 @@ Ztring MediaInfo_Internal::Inform (stream_t StreamKind, size_t StreamPos, bool I if (Conformance_JSON) { Ztring Name=Get((stream_t)StreamKind, StreamPos, Champ_Pos, Info_Name); - if (Name!=__T("Format") && Name.rfind(__T("Conformance"), 11)) + if (Name!=__T("StreamKind") && Name!=__T("Format") && Name!=__T("Metadata_Format") && Name.rfind(__T("Conformance"), 11)) Shouldshow=false; // Override, it is intended only for conformance checks } #endif diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp index c8940e4544..68cfb59280 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_DvDif.cpp @@ -847,10 +847,12 @@ bool File_DvDif::Demux_UnpacketizeContainer_Test() } Element_Code=-1; + #ifdef MEDIAINFO_DVDIF_ANALYZE_YES FrameInfo.DTS=FrameInfo.PTS=Speed_FrameCount_system[0]*100100000/3+Speed_FrameCount_system[1]*40000000; Speed_FrameCount_system[system]++; int64u NextPTS=Speed_FrameCount_system[0]*100100000/3+Speed_FrameCount_system[1]*40000000; Speed_FrameCount_system[system]--; + #endif //MEDIAINFO_DVDIF_ANALYZE_YES FrameInfo.DUR=(int64u)-1; // Unknown, system flag is not yet checked Demux_UnpacketizeContainer_Demux(); } @@ -1902,4 +1904,3 @@ void File_DvDif::rectime(bool FromVideo) } //NameSpace #endif //MEDIAINFO_DV_YES - diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp index 7a4aca458b..c2385df612 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Gxf.cpp @@ -802,8 +802,10 @@ void File_Gxf::Header_Parse() { if (PacketType==0xBF) //media { + #if MEDIAINFO_NEXTPACKET if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet()) Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed + #endif Demux_HeaderParsed=true; } } diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp index 198d4ab2ca..7bfedbf4db 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Lxf.cpp @@ -911,7 +911,7 @@ void File_Lxf::Header() Info_General_StreamSize=0x48+Element_Size; - #if MEDIAINFO_DEMUX + #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET if (Config->NextPacket_Get() && Config->Event_CallBackFunction_IsSet()) Config->Demux_EventWasSent=true; //First set is to indicate the user that header is parsed #endif //MEDIAINFO_DEMUX diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h index 052b58d9b4..82539a8324 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4.h @@ -361,6 +361,7 @@ private : void moov_udta_meta_uuid(); void moov_udta_ndrm(); void moov_udta_nsav(); + void moov_udta_PANA(); void moov_udta_rtng(); void moov_udta_ptv (); void moov_udta_Sel0(); diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp index 5498f9c61b..7f1fc6f8b4 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg4_Elements.cpp @@ -962,6 +962,7 @@ namespace Elements const int64u moov_udta_meta_uuid=0x75756964; const int64u moov_udta_ndrm=0x6E64726D; const int64u moov_udta_nsav=0x6E736176; + const int64u moov_udta_PANA=0x50414E41; const int64u moov_udta_ptv =0x70747620; const int64u moov_udta_rtng=0x72746E67; const int64u moov_udta_Sel0=0x53656C30; @@ -1425,6 +1426,7 @@ void File_Mpeg4::Data_Parse() ATOM_END ATOM(moov_udta_ndrm) ATOM(moov_udta_nsav) + ATOM(moov_udta_PANA) ATOM(moov_udta_ptv ) ATOM(moov_udta_rtng) ATOM(moov_udta_Sel0) @@ -1438,7 +1440,7 @@ void File_Mpeg4::Data_Parse() ATOM_END ATOM(moov_udta_WLOC) ATOM(moov_udta_thmb) - LIST_SKIP(moov_udta_XMP_) + LIST_SKIP(moov_udta_XMP_) //TODO: parse XMP ATOM(moov_udta_Xtra) ATOM(moov_udta_yrrc) ATOM_DEFAULT (moov_udta_xxxx); //User data @@ -7816,6 +7818,55 @@ void File_Mpeg4::moov_trak_mdia_minf_stbl_stsd_xxxx_lhvC() { Element_Name("LHEVCDecoderConfigurationRecord"); AddCodecConfigurationBoxInfo(); + + //Parsing + #ifdef MEDIAINFO_HEVC_YES + File_Hevc* Parser=(File_Hevc*)Streams[moov_trak_tkhd_TrackID].Parsers[0]; + Parser->FrameIsAlwaysComplete=true; + #if MEDIAINFO_DEMUX + Element_Code=moov_trak_tkhd_TrackID; + if (Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get()) + { + Streams[moov_trak_tkhd_TrackID].Demux_Level=4; //Intermediate + Parser->Demux_Level=2; //Container + Parser->Demux_UnpacketizeContainer=true; + } + #endif //MEDIAINFO_DEMUX + Open_Buffer_Init(Parser); + Parser->MustParse_VPS_SPS_PPS=true; + Parser->MustParse_VPS_SPS_PPS_FromLhvc=true; + Parser->MustSynchronize=false; + //Streams[moov_trak_tkhd_TrackID].Parsers.push_back(Parser); + mdat_MustParse=true; //Data is in MDAT + + //Demux + #if MEDIAINFO_DEMUX + if (!Config->Demux_Hevc_Transcode_Iso14496_15_to_AnnexB_Get()) + switch (Config->Demux_InitData_Get()) + { + case 0 : //In demux event + Demux_Level=2; //Container + Demux(Buffer+Buffer_Offset, (size_t)Element_Size, ContentType_Header); + break; + case 1 : //In field + { + std::string Data_Raw((const char*)(Buffer+Buffer_Offset), (size_t)Element_Size); + std::string Data_Base64(Base64::encode(Data_Raw)); + Fill(Stream_Video, StreamPos_Last, "Demux_InitBytes", Data_Base64); + Fill_SetOptions(Stream_Video, StreamPos_Last, "Demux_InitBytes", "N NT"); + } + break; + default : ; + } + #endif //MEDIAINFO_DEMUX + + //Parsing + Open_Buffer_Continue(Parser); + + Parser->SizedBlocks=true; //Now this is SizeBlocks + #else + Skip_XX(Element_Size, "HEVC Data"); + #endif } //--------------------------------------------------------------------------- @@ -9512,6 +9563,15 @@ void File_Mpeg4::moov_udta_nsav() Skip_XX(Element_Size, "Data"); } +//--------------------------------------------------------------------------- +void File_Mpeg4::moov_udta_PANA() +{ + Element_Name("Panasonic"); + + //Parsing + Skip_XX(Element_Size, "Data"); //TODO: parse Panasonic metadata +} + //--------------------------------------------------------------------------- void File_Mpeg4::moov_udta_ptv() { @@ -9808,6 +9868,7 @@ void File_Mpeg4::moov_udta_xxxx() return; } + size_t Count=0; while (Element_Size-Element_Offset>4) { std::string ValueS; @@ -9819,6 +9880,11 @@ void File_Mpeg4::moov_udta_xxxx() else { Get_B2 (Size16, "Size"); + if (!Size16) + { + Skip_XX(Element_Size-Element_Offset,"Unknown"); + return; + } Info_B2(Language, "Language"); Param_Info1(Language_Get(Language)); Get_String(Size16, ValueS, "Value"); } @@ -9848,10 +9914,26 @@ void File_Mpeg4::moov_udta_xxxx() // Check zero padding auto Buffer_Current=Buffer+Buffer_Offset+Element_Offset; auto Buffer_End=Buffer+Buffer_Offset+Element_Size; + if (Buffer_End-Buffer_Current>=0x100) + Buffer_End=Buffer_Current+0x100; // Limiting padding check while (Buffer_Current=Buffer_End) - Skip_XX(Element_Size-Element_Offset, "Padding"); + { + auto SizePadding=Element_Size-Element_Offset; + if (SizePadding>=0x100) + { + Skip_XX(Element_Size-Element_Offset, "Unknown"); + return; + } + Skip_XX(SizePadding, "Padding"); + } + Count++; + if (Count>0x100) // Many values, likely not really strings + { + Skip_XX(Element_Size-Element_Offset, "Unknown"); + return; + } } FILLING_BEGIN_PRECISE(); diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp index 5b6633bf48..82edb16afe 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.cpp @@ -75,15 +75,70 @@ namespace Elements // Infos //*************************************************************************** -//--------------------------------------------------------------------------- -//Extern -extern string Avc_profile_level_string(int8u profile_idc, int8u level_idc=0, int8u constraint_set_flags=0); - //--------------------------------------------------------------------------- const char* Mpegv_colour_primaries(int8u colour_primaries); const char* Mpegv_transfer_characteristics(int8u transfer_characteristics); const char* Mpegv_matrix_coefficients(int8u matrix_coefficients); const char* Mpegv_matrix_coefficients_ColorSpace(int8u matrix_coefficients); +string Avc_profile_level_string(int8u profile_idc, int8u level_idc=0, int8u constraint_set_flags=0); +const char* Hevc_profile_idc(int32u profile_idc); +const char* Hevc_tier_flag(bool tier_flag); +string Vvc_profile_idc(int8u profile_idc); +string Vvc_level_idc(int8u level_idc); +string Vvc_profile_level_tier_string(int8u profile_idc, int8u level_idc, bool tier_flag); + +//--------------------------------------------------------------------------- +typedef int8u tag_struct[][4]; +static tag_struct Mpeg_Descriptors_video_properties_tag_0= +{ + { 1, 1, 1, 0}, + { 1, 1, 0, 0}, + { 6, 6, 6, 0}, + { 5, 6, 5, 0}, + { 1, 1, 0, 1}, +}; +static int8u Mpeg_Descriptors_video_properties_tag_0_Size=sizeof(Mpeg_Descriptors_video_properties_tag_0)/sizeof(Mpeg_Descriptors_video_properties_tag_0[0]); +static tag_struct Mpeg_Descriptors_video_properties_tag_1= +{ + { 9, 14, 9, 0}, + { 9, 14, 0, 0}, + { 9, 14, 0, 1}, + { 12, 1, 6, 1}, +}; +static int8u Mpeg_Descriptors_video_properties_tag_1_Size=sizeof(Mpeg_Descriptors_video_properties_tag_0)/sizeof(Mpeg_Descriptors_video_properties_tag_0[0]); +static tag_struct Mpeg_Descriptors_video_properties_tag_2= +{ + { 9, 16, 9, 0}, + { 9, 18, 9, 0}, + { 9, 16, 14, 0}, + { 9, 16, 0, 0}, + { 9, 18, 0, 0}, +}; +static int8u Mpeg_Descriptors_video_properties_tag_2_Size=sizeof(Mpeg_Descriptors_video_properties_tag_0)/sizeof(Mpeg_Descriptors_video_properties_tag_0[0]); +static int8u Mpeg_Descriptors_video_properties_tag_Sizes[]= +{ + Mpeg_Descriptors_video_properties_tag_0_Size, + Mpeg_Descriptors_video_properties_tag_1_Size, + Mpeg_Descriptors_video_properties_tag_2_Size, +}; +static tag_struct* Mpeg_Descriptors_video_properties_tag_Data[]= +{ + (tag_struct*)&Mpeg_Descriptors_video_properties_tag_0, + (tag_struct*)&Mpeg_Descriptors_video_properties_tag_1, + (tag_struct*)&Mpeg_Descriptors_video_properties_tag_2, +}; +static void Mpeg_Descriptors_video_properties_tag(std::map& Infos, int8u HDR_WCG_idc, int8u video_properties_tag) +{ + if (HDR_WCG_idc>=3 || !video_properties_tag || video_properties_tag>Mpeg_Descriptors_video_properties_tag_Sizes[HDR_WCG_idc]) + return; + const auto& Data=(*(Mpeg_Descriptors_video_properties_tag_Data[HDR_WCG_idc]))[video_properties_tag-1]; + Infos["colour_description_present"]=__T("Yes"); + Infos["colour_primaries"].From_UTF8(Mpegv_colour_primaries(Data[0])); + Infos["transfer_characteristics"].From_UTF8(Mpegv_transfer_characteristics(Data[1])); + Infos["matrix_coefficients"].From_UTF8(Mpegv_matrix_coefficients(Data[2])); + Infos["ColorSpace"].From_UTF8(Mpegv_matrix_coefficients_ColorSpace(Data[2])); + Infos["colour_range"].From_UTF8(Data[3]?"Full":"Limited"); +} //--------------------------------------------------------------------------- const char* Mpeg_Descriptors_audio_type(int8u ID) @@ -1551,6 +1606,7 @@ void File_Mpeg_Descriptors::Data_Parse() ELEMENT_CASE(36, "Stereoscopic_video_info"); ELEMENT_CASE(37, "Transport_profile"); ELEMENT_CASE(38, "HEVC video"); + ELEMENT_CASE(39, "VVC video"); ELEMENT_CASE(3F, "Extension"); //Following is in private sections, in case there is not network type detected @@ -2261,8 +2317,6 @@ void File_Mpeg_Descriptors::Descriptor_2F() } //--------------------------------------------------------------------------- -extern const char* Hevc_tier_flag(bool tier_flag); -extern const char* Hevc_profile_idc(int32u profile_idc); void File_Mpeg_Descriptors::Descriptor_38() { //Parsing @@ -2313,6 +2367,46 @@ void File_Mpeg_Descriptors::Descriptor_38() FILLING_END(); } +//--------------------------------------------------------------------------- +void File_Mpeg_Descriptors::Descriptor_39() +{ + //Parsing + int8u profile_idc, num_sub_profiles, level_idc, HDR_WCG_idc, video_properties_tag; + bool tier_flag, temporal_layer_subset_flag; + BS_Begin(); + Get_S1 (7, profile_idc, "profile_idc"); Param_Info1(Vvc_profile_idc(profile_idc)); + Get_SB ( tier_flag, "tier_flag"); Param_Info1(Hevc_tier_flag(tier_flag)); + Get_S1 (8, num_sub_profiles, "num_sub_profiles"); + for (int8u i=0; iStreams[elementary_PID]->Infos["Format_Profile"].From_UTF8(Vvc_profile_level_tier_string(profile_idc, level_idc, tier_flag)); + Mpeg_Descriptors_video_properties_tag(Complete_Stream->Streams[elementary_PID]->Infos, HDR_WCG_idc, video_properties_tag); + FILLING_END(); +} + //--------------------------------------------------------------------------- void File_Mpeg_Descriptors::Descriptor_3F() { diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h index f189675feb..8f82f63109 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Descriptors.h @@ -746,6 +746,7 @@ private : void Descriptor_36() {Skip_XX(Element_Size, "Data");}; void Descriptor_37() {Skip_XX(Element_Size, "Data");}; void Descriptor_38(); + void Descriptor_39(); void Descriptor_3F(); void Descriptor_3F_00() {Skip_XX(Element_Size-Element_Offset, "Data");}; void Descriptor_3F_01() {Skip_XX(Element_Size-Element_Offset, "Data");}; diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp index d6fd5b35cf..659426bc3a 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File_Mpeg_Psi.cpp @@ -115,6 +115,9 @@ const char* Mpeg_Psi_stream_type_Format(int8u stream_type, int32u format_identif case 0x2D : return "MPEG-H 3D Audio"; case 0x2E : return "MPEG-H 3D Audio"; case 0x32 : return "JPEG XS"; + case 0x33 : + case 0x34 : return "VVC"; + case 0x35 : return "EVC"; default : switch (format_identifier) { @@ -246,6 +249,9 @@ stream_t Mpeg_Psi_stream_type_StreamKind(int32u stream_type, int32u format_ident case 0x24 : case 0x27 : case 0x32 : + case 0x33 : + case 0x34 : + case 0x35 : return Stream_Video; case 0x03 : case 0x04 : @@ -367,6 +373,9 @@ const char* Mpeg_Psi_stream_type_Info_Table[] = "Media Orchestration Access Units carried in sections", "Substream of a Rec. ITU-T H.265 | ISO/IEC 23008 2 video stream that contains a Motion Constrained Tile Set, parameter sets, slice headers or a combination thereof", "JPEG XS video stream conforming to one or more profiles as defined in ISO/IEC 21122-2", + "VVC video stream or a VVC temporal video sub-bitstream conforming to one or more profiles defined in Annex A of Rec. ITU-T H.266 | ISO/IEC 23090-3", + "VVC temporal video subset of a VVC video stream conforming to one or more profiles defined in Annex A of Rec. ITU-T H.266 | ISO/IEC 23090-3", + "EVC video stream or an EVC temporal video sub-bitstream conforming to one or more profiles defined in ISO/IEC 23094-1", }; const size_t Mpeg_Psi_stream_type_Info_Table_Size=sizeof(Mpeg_Psi_stream_type_Info_Table)/sizeof(*Mpeg_Psi_stream_type_Info_Table); const char* Mpeg_Psi_stream_type_Info(int8u stream_type, int32u format_identifier) diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp index 2f920eec8c..a705050095 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper.cpp @@ -61,6 +61,7 @@ std::string URL_Encoded_Encode(const std::string& URL) //#if defined(__APPLE__) && defined(__MACH__) // URL is rejected by API on macOS, not considered as URL by Thunderbird || Char=='{' || Char=='}' + || Char=='\\' //#endif ) { @@ -196,7 +197,9 @@ File__ReferenceFilesHelper::File__ReferenceFilesHelper(File__Analyze* MI_, Media Duration=0; #if MEDIAINFO_DEMUX Demux_Interleave=false; + #if MEDIAINFO_NEXTPACKET DTS_Minimal=(int64u)-1; + #endif #endif //MEDIAINFO_DEMUX #if MEDIAINFO_EVENTS StreamID_Previous=(int64u)-1; @@ -1047,7 +1050,7 @@ bool File__ReferenceFilesHelper::ParseReference_Init() { if (Sequences[Sequences_Current]->Resources[0]->EditRate) { - #if MEDIAINFO_DEMUX + #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET if (Pos==0) { Sequences[Sequences_Current]->Resources[0]->Demux_Offset_DTS=0; @@ -1074,7 +1077,7 @@ bool File__ReferenceFilesHelper::ParseReference_Init() MI2.Option(__T("Demux"), Demux_Save); //This is a global value, need to reset it. TODO: local value if (MiOpenResult) { - #if MEDIAINFO_DEMUX + #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET int64u Duration=MI2.Get(Sequences[Sequences_Current]->StreamKind, 0, __T("Duration")).To_int64u()*1000000; int64u FrameCount=MI2.Get(Sequences[Sequences_Current]->StreamKind, 0, __T("FrameCount")).To_int64u(); if (Pos==0) @@ -1105,7 +1108,7 @@ bool File__ReferenceFilesHelper::ParseReference_Init() else Sequences[Sequences_Current]->Resources[Pos]->MI->Config.File_IgnoreEditsAfter=Sequences[Sequences_Current]->Resources[Pos]->IgnoreEditsAfter; Sequences[Sequences_Current]->Resources[Pos]->MI->Config.File_EditRate=Sequences[Sequences_Current]->Resources[Pos]->EditRate; - #if MEDIAINFO_DEMUX + #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET Sequences[Sequences_Current]->Resources[Pos]->MI->Config.Demux_Offset_Frame=Sequences[Sequences_Current]->Resources[Pos]->Demux_Offset_Frame; Sequences[Sequences_Current]->Resources[Pos]->MI->Config.Demux_Offset_DTS=Sequences[Sequences_Current]->Resources[Pos]->Demux_Offset_DTS; #endif //MEDIAINFO_DEMUX @@ -1119,7 +1122,7 @@ bool File__ReferenceFilesHelper::ParseReference_Init() else Sequences[Sequences_Current]->MI->Config.File_IgnoreEditsAfter=Sequences[Sequences_Current]->Resources[0]->IgnoreEditsAfter; Sequences[Sequences_Current]->MI->Config.File_EditRate=Sequences[Sequences_Current]->Resources[0]->EditRate; - #if MEDIAINFO_DEMUX + #if MEDIAINFO_DEMUX && MEDIAINFO_NEXTPACKET Sequences[Sequences_Current]->MI->Config.Demux_Offset_Frame=Sequences[Sequences_Current]->Resources[0]->Demux_Offset_Frame; Sequences[Sequences_Current]->MI->Config.Demux_Offset_DTS=Sequences[Sequences_Current]->Resources[0]->Demux_Offset_DTS; #endif //MEDIAINFO_DEMUX @@ -1889,7 +1892,9 @@ void File__ReferenceFilesHelper::Read_Buffer_Unsynched() Sequences[Sequences_Pos]->MI->Open_Buffer_Unsynch(); #if MEDIAINFO_DEMUX + #if MEDIAINFO_NEXTPACKET DTS_Minimal=(int64u)-1; + #endif Config->Demux_EventWasSent=true; //We want not try to read new data from the file #endif //MEDIAINFO_DEMUX diff --git a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper_Sequence.cpp b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper_Sequence.cpp index fa87b4b48d..952e4fd162 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper_Sequence.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Multiple/File__ReferenceFilesHelper_Sequence.cpp @@ -80,7 +80,7 @@ void sequence::AddFileName(const Ztring& FileName, size_t Pos) //--------------------------------------------------------------------------- void sequence::AddResource(resource* NewResource, size_t Pos) { - #if MEDIAINFO_DEMUX + #if MEDIAINFO_NEXTPACKET if (Resources.empty()) { NewResource->Demux_Offset_DTS=0; diff --git a/src/ExtLib/MediaInfo/MediaInfo/Setup.h b/src/ExtLib/MediaInfo/MediaInfo/Setup.h index 290c8b2fc0..1f416d204c 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Setup.h +++ b/src/ExtLib/MediaInfo/MediaInfo/Setup.h @@ -678,6 +678,9 @@ #if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_VC3_NO) && !defined(MEDIAINFO_VC3_YES) #define MEDIAINFO_VC3_YES #endif +#if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_VVC_NO) && !defined(MEDIAINFO_VVC_YES) + #define MEDIAINFO_VVC_YES +#endif #if !defined(MEDIAINFO_VIDEO_NO) && !defined(MEDIAINFO_TIMECODE_NO) && !defined(MEDIAINFO_TIMECODE_YES) #define MEDIAINFO_TIMECODE_YES #endif diff --git a/src/ExtLib/MediaInfo/MediaInfo/Tag/File_Icc.cpp b/src/ExtLib/MediaInfo/MediaInfo/Tag/File_Icc.cpp index 97b8061c84..73994d48eb 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Tag/File_Icc.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Tag/File_Icc.cpp @@ -167,7 +167,7 @@ void File_Icc::FileHeader_Parse() int32u Size, ColorSpace, acsp, DeviceModel; int8u Version_M, Version_m; Get_B4 (Size, "Profile size"); - if ((IsSub && Size=0x01000000))) { Reject(); return; @@ -186,12 +186,19 @@ void File_Icc::FileHeader_Parse() Get_C4 (ColorSpace, "Colour space of data"); Skip_C4( "PCS"); Element_Begin1("Date/Time"); - Info_B2(YY, "Year"); - Info_B2(MM, "Month"); - Info_B2(DD, "Day"); - Info_B2(hh, "Hour"); - Info_B2(mm, "Minute"); - Info_B2(ss, "Second"); + int16u YY, MM, DD, hh, mm, ss; + Get_B2 (YY, "Year"); + Get_B2 (MM, "Month"); + Get_B2 (DD, "Day"); + Get_B2 (hh, "Hour"); + Get_B2 (mm, "Minute"); + Get_B2 (ss, "Second"); + if (!IsSub && (YY || MM || DD || hh || mm || ss) && (YY<=1970 || MM>=12 || DD>=31 || hh>=24 || mm>=60 || ss>=60)) + { + Element_End0(); + Reject(); + return; + } #if MEDIAINFO_TRACE string DateTime; DateTime+='0'+YY/1000; diff --git a/src/ExtLib/MediaInfo/MediaInfo/Video/File_Hevc.cpp b/src/ExtLib/MediaInfo/MediaInfo/Video/File_Hevc.cpp index 1a4ec13373..02b5432377 100644 --- a/src/ExtLib/MediaInfo/MediaInfo/Video/File_Hevc.cpp +++ b/src/ExtLib/MediaInfo/MediaInfo/Video/File_Hevc.cpp @@ -200,6 +200,7 @@ File_Hevc::File_Hevc() MustParse_VPS_SPS_PPS=false; MustParse_VPS_SPS_PPS_FromMatroska=false; MustParse_VPS_SPS_PPS_FromFlv=false; + MustParse_VPS_SPS_PPS_FromLhvc=false; SizedBlocks=false; SizedBlocks_FileThenStream=0; @@ -275,6 +276,10 @@ void File_Hevc::Streams_Fill() Fill(Stream_Video, 0, Video_Format, "HEVC"); Fill(Stream_Video, 0, Video_Codec, "HEVC"); + for (std::vector::iterator video_parameter_set_Item=video_parameter_sets.begin(); video_parameter_set_Item!=video_parameter_sets.end(); ++video_parameter_set_Item) + if ((*video_parameter_set_Item)) + Streams_Fill(video_parameter_set_Item); + for (std::vector::iterator seq_parameter_set_Item=seq_parameter_sets.begin(); seq_parameter_set_Item!=seq_parameter_sets.end(); ++seq_parameter_set_Item) if ((*seq_parameter_set_Item)) Streams_Fill(seq_parameter_set_Item); @@ -358,38 +363,96 @@ void File_Hevc::Streams_Fill() } //--------------------------------------------------------------------------- -void File_Hevc::Streams_Fill(std::vector::iterator seq_parameter_set_Item) +void File_Hevc::Streams_Fill_Profile(const profile_tier_level_struct& p) { - int32u Width = (*seq_parameter_set_Item)->pic_width_in_luma_samples; - int32u Height= (*seq_parameter_set_Item)->pic_height_in_luma_samples; - int8u chromaArrayType = (*seq_parameter_set_Item)->ChromaArrayType(); - if (chromaArrayType >= 4) - chromaArrayType = 0; - int32u CropUnitX=Hevc_SubWidthC [chromaArrayType]; - int32u CropUnitY=Hevc_SubHeightC[chromaArrayType]; - Width -=((*seq_parameter_set_Item)->conf_win_left_offset+(*seq_parameter_set_Item)->conf_win_right_offset)*CropUnitX; - Height-=((*seq_parameter_set_Item)->conf_win_top_offset +(*seq_parameter_set_Item)->conf_win_bottom_offset)*CropUnitY; + bool LegacyStreamDisplay=MediaInfoLib::Config.LegacyStreamDisplay_Get(); + if (!LegacyStreamDisplay && !Retrieve_Const(Stream_Video, 0, Video_Format_Profile).empty()) + return; Ztring Profile; - if ((*seq_parameter_set_Item)->profile_space==0) + if (p.profile_space==0) { - if ((*seq_parameter_set_Item)->profile_idc) + if (p.profile_idc) { - Profile=Ztring().From_UTF8(Hevc_profile_idc((*seq_parameter_set_Item)->profile_idc)); - if ((*seq_parameter_set_Item)->profile_idc == 7 && (*seq_parameter_set_Item)->general_max_8bit_constraint_flag) - Profile+=__T(" 10"); + Profile=Ztring().From_UTF8(Hevc_profile_idc(p.profile_idc)); + int8u Profile_Addition_Bits=0; + switch (p.profile_idc) + { + case 6 : + case 7 : + if (!p.general_max_8bit_constraint_flag) + { + if (!p.general_max_10bit_constraint_flag) + { + if (!p.general_max_12bit_constraint_flag) + { + if (!p.general_max_14bit_constraint_flag) + Profile_Addition_Bits=4; + else + Profile_Addition_Bits=3; + } + else + Profile_Addition_Bits=2; + } + else + Profile_Addition_Bits=1; + } + } + if (Profile_Addition_Bits) + { + Profile+=' '; + Profile+=Ztring::ToZtring(8+Profile_Addition_Bits*2); + } } - if ((*seq_parameter_set_Item)->level_idc) + if (p.level_idc) { - if ((*seq_parameter_set_Item)->profile_idc) + if (p.profile_idc) Profile+=__T('@'); - Profile+=__T('L')+Ztring().From_Number(((float)(*seq_parameter_set_Item)->level_idc)/30, ((*seq_parameter_set_Item)->level_idc%10)?1:0); + Profile+=__T('L')+Ztring().From_Number(((float)p.level_idc)/30, (p.level_idc%10)?1:0); Profile+=__T('@'); - Profile+=Ztring().From_UTF8(Hevc_tier_flag((*seq_parameter_set_Item)->tier_flag)); + Profile+=Ztring().From_UTF8(Hevc_tier_flag(p.tier_flag)); } } Fill(Stream_Video, 0, Video_Format_Profile, Profile); Fill(Stream_Video, 0, Video_Codec_Profile, Profile); +} + +//--------------------------------------------------------------------------- +void File_Hevc::Streams_Fill(std::vector::iterator video_parameter_set_Item) +{ + if ((*video_parameter_set_Item)->profile_tier_level_info_layers.size()==1) + return; //Priority on seq_parameter_set + + const auto&p=(*video_parameter_set_Item)->profile_tier_level_info_layers.back(); + Streams_Fill_Profile(p); + if (!(*video_parameter_set_Item)->view_id_val.empty()) + { + size_t Count=0; + for (const auto val : (*video_parameter_set_Item)->view_id_val) + if (val!=(int16u)-1) + Count++; + Fill(Stream_Video, 0, Video_MultiView_Count, Count); + } +} + +//--------------------------------------------------------------------------- +void File_Hevc::Streams_Fill(std::vector::iterator seq_parameter_set_Item) +{ + if ((*seq_parameter_set_Item)->nuh_layer_id) + return; + + int32u Width = (*seq_parameter_set_Item)->pic_width_in_luma_samples; + int32u Height= (*seq_parameter_set_Item)->pic_height_in_luma_samples; + int8u chromaArrayType = (*seq_parameter_set_Item)->ChromaArrayType(); + if (chromaArrayType >= 4) + chromaArrayType = 0; + int32u CropUnitX=Hevc_SubWidthC [chromaArrayType]; + int32u CropUnitY=Hevc_SubHeightC[chromaArrayType]; + Width -=((*seq_parameter_set_Item)->conf_win_left_offset+(*seq_parameter_set_Item)->conf_win_right_offset)*CropUnitX; + Height-=((*seq_parameter_set_Item)->conf_win_top_offset +(*seq_parameter_set_Item)->conf_win_bottom_offset)*CropUnitY; + + const auto& p=(*seq_parameter_set_Item)->profile_tier_level_info; + Streams_Fill_Profile(p); Fill(Stream_Video, StreamPos_Last, Video_Width, Width); Fill(Stream_Video, StreamPos_Last, Video_Height, Height); if ((*seq_parameter_set_Item)->conf_win_left_offset || (*seq_parameter_set_Item)->conf_win_right_offset) @@ -1443,14 +1506,16 @@ void File_Hevc::slice_segment_layer() } //--------------------------------------------------------------------------- -void File_Hevc::video_parameter_sets_creating_data(int8u vps_video_parameter_set_id, int8u vps_max_sub_layers_minus1) +void File_Hevc::video_parameter_sets_creating_data(int8u vps_video_parameter_set_id, const vector& profile_tier_level_info_layers, int8u vps_max_sub_layers_minus1, const vector& view_id_val) { //Creating Data if (vps_video_parameter_set_id >= video_parameter_sets.size()) video_parameter_sets.resize(vps_video_parameter_set_id + 1); std::vector::iterator Data_Item = video_parameter_sets.begin() + vps_video_parameter_set_id; delete *Data_Item; *Data_Item = new video_parameter_set_struct( - vps_max_sub_layers_minus1 + profile_tier_level_info_layers, + vps_max_sub_layers_minus1, + view_id_val ); //NextCode @@ -1470,9 +1535,10 @@ void File_Hevc::video_parameter_set() Element_Name("video_parameter_set"); //Parsing + vector ps; int32u vps_num_layer_sets_minus1; - int8u vps_video_parameter_set_id, vps_max_sub_layers_minus1, vps_max_layer_id; - bool vps_temporal_id_nesting_flag, vps_sub_layer_ordering_info_present_flag; + int8u vps_video_parameter_set_id, vps_max_sub_layers_minus1, vps_max_layers_minus1, vps_max_layer_id; + bool vps_base_layer_internal_flag, vps_temporal_id_nesting_flag, vps_sub_layer_ordering_info_present_flag; BS_Begin(); Get_S1 (4, vps_video_parameter_set_id, "vps_video_parameter_set_id"); if (MustParse_VPS_SPS_PPS_FromFlv) @@ -1481,12 +1547,21 @@ void File_Hevc::video_parameter_set() Skip_XX(Element_Size-Element_Offset, "Data"); //Creating Data - video_parameter_sets_creating_data(vps_video_parameter_set_id, 0); //TODO: check which code is intended here + video_parameter_sets_creating_data(vps_video_parameter_set_id, {}, 0, {}); //TODO: check which code is intended here return; } - Skip_S1(2, "vps_reserved_three_2bits"); - Skip_S1(6, "vps_reserved_zero_6bits"); + Get_SB ( vps_base_layer_internal_flag, "vps_base_layer_internal_flag"); + Skip_SB( "vps_base_layer_available_flag"); + Get_S1 (6, vps_max_layers_minus1, "vps_max_layers_minus1"); + if (vps_max_layers_minus1==63) + { + Param_Info1("(Not supported)"); + RiskCalculationN++; + RiskCalculationD++; + BS_End(); + return; + } Get_S1 (3, vps_max_sub_layers_minus1, "vps_max_sub_layers_minus1"); if (vps_max_sub_layers_minus1>6) { @@ -1504,7 +1579,8 @@ void File_Hevc::video_parameter_set() // return; //Problem, not valid //} Skip_S2(16, "vps_reserved_0xffff_16bits"); - profile_tier_level(vps_max_sub_layers_minus1); + ps.resize(1); + profile_tier_level(ps[0], true, vps_max_sub_layers_minus1); Get_SB ( vps_sub_layer_ordering_info_present_flag, "vps_sub_layer_ordering_info_present_flag"); for (int32u SubLayerPos=(vps_sub_layer_ordering_info_present_flag?0:vps_max_sub_layers_minus1); SubLayerPos<=vps_max_sub_layers_minus1; SubLayerPos++) { @@ -1570,12 +1646,244 @@ void File_Hevc::video_parameter_set() delete VCL; VCL=NULL; } TEST_SB_END(); - EndOfxPS( "vps_extension_flag", "vps_extension_data"); + vector view_id_val; + TESTELSE_SB_SKIP( "vps_extension_flag"); + int8u view_id_len; + bool splitting_flag, vps_nuh_layer_id_present_flag; + for (auto Bits=Data_BS_Remain()%8; Bits--; Bits) + Mark_1(); + if (vps_max_layers_minus1 && vps_base_layer_internal_flag) + { + ps.resize(ps.size()+1); + profile_tier_level(ps.back(), false, vps_max_sub_layers_minus1); + } + Get_SB (splitting_flag, "splitting_flag"); + int NumScalabilityTypes=0; + bool scalability_mask_flag[16]; + for (int i=0; i<16; i++) + { + Get_SB (scalability_mask_flag[i], "scalability_mask_flag"); + NumScalabilityTypes+=scalability_mask_flag[i]; + } + int8u dimension_id_len_minus1[16]; + for (int i=0; i<(NumScalabilityTypes-splitting_flag); i++) + { + Get_S1 (3, dimension_id_len_minus1[i], "dimension_id_len_minus1"); + if (dimension_id_len_minus1[i]>=6) + { + Param_Info1("dimension_id_len_minus1 not valid"); + RiskCalculationN++; + RiskCalculationD++; + BS_End(); + return; + } + } + Get_SB (vps_nuh_layer_id_present_flag, "vps_nuh_layer_id_present_flag"); + auto MaxLayersMinus1=vps_max_layers_minus1>62?62:vps_max_layers_minus1; + int8u dimension_id[64][16]; + int8u layer_id_in_nuh[64]; + if (!splitting_flag) + for (int j=0; j 0) + { + auto newViewFlag = 1; + for (int j = 0; j < i; j++) + if (ViewOrderIdx[lId] == ViewOrderIdx[layer_id_in_nuh[j]]) + newViewFlag = 0; + NumViews += newViewFlag; + } + } + if (view_id_len) + { + view_id_val.resize(64, -1); + for (int i=0; i 1) + Get_UE (num_add_layer_sets, "num_add_layer_sets"); + else + num_add_layer_sets=0; + vector NumLayersInIdList; + vector > LayerSetLayerIdList; + vector > highest_layer_idx_plus1List; + highest_layer_idx_plus1List.resize(num_add_layer_sets); + for (int i = 0; i < num_add_layer_sets; i++) + { + highest_layer_idx_plus1List[i].reserve(NumIndependentLayers); + highest_layer_idx_plus1List[i].push_back(0); // Unused? + for (int j = 1; j < NumIndependentLayers; j++) + { + int32u highest_layer_idx_plus1; + Get_S4 (ceil(log2(NumLayersInTreePartition[j] + 1)), highest_layer_idx_plus1, "highest_layer_idx_plus1"); + highest_layer_idx_plus1List[i].push_back(highest_layer_idx_plus1); + } + } + for (int i = 0; i < num_add_layer_sets; i++) + { + int32u layerNum = 0; + auto lsIdx = vps_num_layer_sets_minus1 + 1 + i; + for (int8u treeIdx = 1; treeIdx < NumIndependentLayers; treeIdx++) + { + for (int8u layerCnt = 0; layerCnt < highest_layer_idx_plus1List[i][treeIdx]; layerCnt++) + { + if (LayerSetLayerIdList.size() <= lsIdx) + LayerSetLayerIdList.resize(lsIdx + 1); + if (LayerSetLayerIdList[lsIdx].size() <= layerNum) + LayerSetLayerIdList[lsIdx].resize(layerNum + 1); + LayerSetLayerIdList[lsIdx][layerNum++] = TreePartitionLayerIdList[treeIdx][layerCnt]; + } + } + if (NumLayersInIdList.size() <= lsIdx) + NumLayersInIdList.resize(lsIdx + 1); + NumLayersInIdList[lsIdx] = layerNum; + } + TEST_SB_SKIP( "vps_sub_layers_max_minus1_present_flag") + for (int i = 0; i <= MaxLayersMinus1; i++) + Skip_S1(3, "sub_layers_vps_max_minus1["); + TEST_SB_END(); + TEST_SB_SKIP( "max_tid_ref_present_flag") + for (int i = 0; i <= MaxLayersMinus1; i++) + for (int j = i + 1; j <= MaxLayersMinus1; j++) + Skip_S1(3, "max_tid_il_ref_pics_plus1["); + TEST_SB_END(); + Skip_SB( "default_ref_layers_active_flag"); + int32u vps_num_profile_tier_level_minus1; + Get_UE(vps_num_profile_tier_level_minus1, "vps_num_profile_tier_level_minus1"); + for (int i = vps_base_layer_internal_flag ? 2 : 1; i <= vps_num_profile_tier_level_minus1; i++) + { + bool vps_profile_present_flag; + Get_SB(vps_profile_present_flag, "vps_profile_present_flag"); + ps.resize(ps.size()+1); + profile_tier_level(ps.back(), vps_profile_present_flag, vps_max_sub_layers_minus1); + } + auto NumLayerSets = vps_num_layer_sets_minus1 + 1 + num_add_layer_sets; + int32u num_add_olss; + int8u default_output_layer_idc; + if (NumLayerSets > 1) { + Get_UE (num_add_olss, "num_add_olss"); + Get_S1 (2, default_output_layer_idc, "default_output_layer_idc"); + } + else + { + num_add_olss = 0; + } + Skip_BS(Data_BS_Remain(), "(Not parsed)"); + TESTELSE_SB_ELSE( "vps_extension_flag"); + rbsp_trailing_bits(); + TESTELSE_SB_END(); BS_End(); FILLING_BEGIN_PRECISE(); //Creating Data - video_parameter_sets_creating_data(vps_video_parameter_set_id, vps_max_sub_layers_minus1); + video_parameter_sets_creating_data(vps_video_parameter_set_id, ps, vps_max_sub_layers_minus1, view_id_val); FILLING_END(); } @@ -1586,10 +1894,11 @@ void File_Hevc::seq_parameter_set() Element_Name("seq_parameter_set"); //Parsing + profile_tier_level_struct p; seq_parameter_set_struct::vui_parameters_struct* vui_parameters_Item=NULL; int32u sps_seq_parameter_set_id, chroma_format_idc, pic_width_in_luma_samples, pic_height_in_luma_samples, bit_depth_luma_minus8, bit_depth_chroma_minus8, log2_max_pic_order_cnt_lsb_minus4, num_short_term_ref_pic_sets; int32u conf_win_left_offset=0, conf_win_right_offset=0, conf_win_top_offset=0, conf_win_bottom_offset=0, sps_max_num_reorder_pics=0; - int8u video_parameter_set_id, max_sub_layers_minus1; + int8u video_parameter_set_id, max_sub_layers_minus1, sps_ext_or_max_sub_layers_minus1; bool separate_colour_plane_flag=false, sps_sub_layer_ordering_info_present_flag; BS_Begin(); Get_S1 (4, video_parameter_set_id, "sps_video_parameter_set_id"); @@ -1603,9 +1912,29 @@ void File_Hevc::seq_parameter_set() RiskCalculationD++; return; } + if (nuh_layer_id) + { + max_sub_layers_minus1=0; + Get_S1 (3, sps_ext_or_max_sub_layers_minus1, "sps_ext_or_max_sub_layers_minus1"); + } + else + { + sps_ext_or_max_sub_layers_minus1=0; Get_S1 (3, max_sub_layers_minus1, "sps_max_sub_layers_minus1"); + } + auto MultiLayerExtSpsFlag=(nuh_layer_id && sps_ext_or_max_sub_layers_minus1==7); + if (MultiLayerExtSpsFlag) + { + p.profile_space=-1; + p.tier_flag=true; + p.profile_idc=-1; + p.level_idc=-1; + } + else + { Skip_SB( "sps_temporal_id_nesting_flag"); - profile_tier_level(max_sub_layers_minus1); + profile_tier_level(p, true, max_sub_layers_minus1); + } Get_UE ( sps_seq_parameter_set_id, "sps_seq_parameter_set_id"); if (MustParse_VPS_SPS_PPS_FromFlv) { @@ -1617,12 +1946,9 @@ void File_Hevc::seq_parameter_set() seq_parameter_sets.resize(sps_seq_parameter_set_id+1); std::vector::iterator Data_Item=seq_parameter_sets.begin()+sps_seq_parameter_set_id; delete *Data_Item; *Data_Item=new seq_parameter_set_struct( - NULL, //TODO: check which code is intended here - 0, - 0, - 0, - 0, 0, + NULL, //TODO: check which code is intended here + profile_tier_level_struct().Clear(), 0, 0, 0, @@ -1635,10 +1961,7 @@ void File_Hevc::seq_parameter_set() 0, 0, 0, - false, - false, - false, - false + 0 ); //NextCode @@ -1650,6 +1973,17 @@ void File_Hevc::seq_parameter_set() return; } + if (MultiLayerExtSpsFlag) { + TEST_SB_SKIP( "update_rep_format_flag"); + Skip_S1(1, "sps_rep_format_idx"); + TEST_SB_END(); + chroma_format_idc=-1; + pic_width_in_luma_samples=-1; + pic_height_in_luma_samples=-1; + bit_depth_luma_minus8=-1; + bit_depth_chroma_minus8=-1; + } + else { Get_UE ( chroma_format_idc, "chroma_format_idc"); Param_Info1(Hevc_chroma_format_idc((int8u)chroma_format_idc)); if (chroma_format_idc>=4) { @@ -1685,6 +2019,7 @@ void File_Hevc::seq_parameter_set() RiskCalculationD++; return; //Problem, not valid } + } Get_UE ( log2_max_pic_order_cnt_lsb_minus4, "log2_max_pic_order_cnt_lsb_minus4"); if (log2_max_pic_order_cnt_lsb_minus4>12) { @@ -1693,6 +2028,7 @@ void File_Hevc::seq_parameter_set() RiskCalculationD++; return; //Problem, not valid } + if (!MultiLayerExtSpsFlag) { Get_SB ( sps_sub_layer_ordering_info_present_flag, "sps_sub_layer_ordering_info_present_flag"); for (int32u SubLayerPos = (sps_sub_layer_ordering_info_present_flag ? 0 : max_sub_layers_minus1); SubLayerPos <= max_sub_layers_minus1; SubLayerPos++) { @@ -1702,6 +2038,7 @@ void File_Hevc::seq_parameter_set() Skip_UE( "sps_max_latency_increase_plus1"); Element_End0(); } + } Skip_UE( "log2_min_luma_coding_block_size_minus3"); Skip_UE( "log2_diff_max_min_luma_coding_block_size"); Skip_UE( "log2_min_transform_block_size_minus2"); @@ -1750,7 +2087,84 @@ void File_Hevc::seq_parameter_set() TEST_SB_SKIP( "vui_parameters_present_flag"); vui_parameters(video_parameter_set_Item, vui_parameters_Item); TEST_SB_END(); - EndOfxPS( "sps_extension_flag", "sps_extension_data"); + TESTELSE_SB_SKIP( "sps_extension_flag"); + int8u sps_extension_4bits; + bool sps_range_extension_flag, sps_multilayer_extension_flag, sps_3d_extension_flag, sps_scc_extension_flag; + Get_SB (sps_range_extension_flag, "sps_range_extension_flag"); + Get_SB (sps_multilayer_extension_flag, "sps_multilayer_extension_flag"); + Get_SB (sps_3d_extension_flag, "sps_3d_extension_flag"); + Get_SB (sps_scc_extension_flag, "sps_scc_extension_flag"); + Get_S1 (4, sps_extension_4bits, "sps_extension_4bits"); + if (sps_range_extension_flag) + { + Element_Begin1("sps_range_extension"); + Skip_SB( "transform_skip_rotation_enabled_flag"); + Skip_SB( "transform_skip_context_enabled_flag"); + Skip_SB( "implicit_rdpcm_enabled_flag"); + Skip_SB( "explicit_rdpcm_enabled_flag"); + Skip_SB( "extended_precision_processing_flag"); + Skip_SB( "intra_smoothing_disabled_flag"); + Skip_SB( "high_precision_offsets_enabled_flag"); + Skip_SB( "persistent_rice_adaptation_enabled_flag"); + Skip_SB( "cabac_bypass_alignment_enabled_flag"); + Element_End0(); + } + if (sps_multilayer_extension_flag) + { + Element_Begin1("sps_multilayer_extension"); + Skip_SB( "inter_view_mv_vert_constraint_flag"); + Element_End0(); + } + if (sps_3d_extension_flag) + { + Element_Begin1("sps_3d_extension"); + Skip_SB( "iv_di_mc_enabled_flag"); + Skip_SB( "iv_mv_scal_enabled_flag"); + Skip_UE( "log2_ivmc_sub_pb_size_minus3"); + Skip_SB( "iv_res_pred_enabled_flag"); + Skip_SB( "depth_ref_enabled_flag"); + Skip_SB( "vsp_mc_enabled_flag["); + Skip_SB( "dbbp_enabled_flag"); + Skip_SB( "iv_di_mc_enabled_flag"); + Skip_SB( "iv_mv_scal_enabled_flag"); + Skip_SB( "tex_mc_enabled_flag"); + Skip_UE( "log2_texmc_sub_pb_size_minus3"); + Skip_SB( "intra_contour_enabled_flag"); + Skip_SB( "intra_dc_only_wedge_enabled_flag"); + Skip_SB( "cqt_cu_part_pred_enabled_flag"); + Skip_SB( "inter_dc_only_enabled_flag"); + Skip_SB( "skip_intra_enabled_flag"); + Element_End0(); + } + if (sps_scc_extension_flag) + { + Element_Begin1("sps_scc_extension"); + Skip_SB( "sps_curr_pic_ref_enabled_flag"); + TEST_SB_SKIP( "palette_mode_enabled_flag"); + Skip_UE( "palette_max_size"); + Skip_UE( "delta_palette_max_predictor_size"); + TEST_SB_SKIP( "sps_palette_predictor_initializers_present_flag"); + int32u sps_num_palette_predictor_initializers_minus1; + Get_UE (sps_num_palette_predictor_initializers_minus1, "sps_num_palette_predictor_initializers_minus1"); + auto numComps=(chroma_format_idc==0)?1:3; + for(int comp=0; comp=seq_parameter_sets.size()) seq_parameter_sets.resize(sps_seq_parameter_set_id+1); std::vector::iterator Data_Item=seq_parameter_sets.begin()+sps_seq_parameter_set_id; + if (!MustParse_VPS_SPS_PPS_FromLhvc || !*Data_Item) + { delete *Data_Item; *Data_Item=new seq_parameter_set_struct( + nuh_layer_id, vui_parameters_Item, - profile_space, - tier_flag, - profile_idc, - level_idc, + p, pic_width_in_luma_samples, pic_height_in_luma_samples, conf_win_left_offset, @@ -1776,12 +2190,9 @@ void File_Hevc::seq_parameter_set() (int8u)log2_max_pic_order_cnt_lsb_minus4, (int8u)bit_depth_luma_minus8, (int8u)bit_depth_chroma_minus8, - (int8u)sps_max_num_reorder_pics, - general_progressive_source_flag, - general_interlaced_source_flag, - general_frame_only_constraint_flag, - general_max_8bit_constraint_flag + (int8u)sps_max_num_reorder_pics ); + } //NextCode NextCode_Clear(); @@ -1965,6 +2376,8 @@ void File_Hevc::pic_parameter_set() if (pps_pic_parameter_set_id>=pic_parameter_sets.size()) pic_parameter_sets.resize(pps_pic_parameter_set_id+1); std::vector::iterator pic_parameter_sets_Item=pic_parameter_sets.begin()+pps_pic_parameter_set_id; + if (!MustParse_VPS_SPS_PPS_FromLhvc || !*pic_parameter_sets_Item) + { delete *pic_parameter_sets_Item; *pic_parameter_sets_Item = new pic_parameter_set_struct( (int8u)pps_seq_parameter_set_id, (int8u)num_ref_idx_l0_default_active_minus1, @@ -1972,6 +2385,8 @@ void File_Hevc::pic_parameter_set() num_extra_slice_header_bits, dependent_slice_segments_enabled_flag ); + } + //Autorisation of other streams //if (!seq_parameter_sets.empty()) //{ @@ -2142,6 +2557,7 @@ void File_Hevc::sei_message(int32u &seq_parameter_set_id) case 137 : sei_message_mastering_display_colour_volume(); break; case 144 : sei_message_light_level(); break; case 147 : sei_alternative_transfer_characteristics(); break; + case 176 : three_dimensional_reference_displays_info(payloadSize); break; default : Element_Info1("unknown"); Skip_XX(payloadSize, "data"); @@ -2241,7 +2657,7 @@ void File_Hevc::sei_message_pic_timing(int32u &seq_parameter_set_id, int32u payl //Parsing BS_Begin(); - if ((*seq_parameter_set_Item)->vui_parameters?(*seq_parameter_set_Item)->vui_parameters->frame_field_info_present_flag:((*seq_parameter_set_Item)->general_progressive_source_flag && (*seq_parameter_set_Item)->general_interlaced_source_flag)) + if ((*seq_parameter_set_Item)->vui_parameters?(*seq_parameter_set_Item)->vui_parameters->frame_field_info_present_flag:((*seq_parameter_set_Item)->profile_tier_level_info.general_progressive_source_flag && (*seq_parameter_set_Item)->profile_tier_level_info.general_interlaced_source_flag)) { Skip_S1(4, "pic_struct"); Skip_S1(2, "source_scan_type"); @@ -3315,6 +3731,119 @@ void File_Hevc::sei_alternative_transfer_characteristics() Get_B1(preferred_transfer_characteristics, "preferred_transfer_characteristics"); Param_Info1(Mpegv_transfer_characteristics(preferred_transfer_characteristics)); } +//--------------------------------------------------------------------------- +void File_Hevc::three_dimensional_reference_displays_info(int32u payloadSize) +{ + Element_Info1("three_dimensional_reference_displays_info"); + + //Parsing + BS_Begin(); + auto End=Data_BS_Remain()-payloadSize*8; + int32u prec_ref_display_width, num_ref_displays_minus1; + int32u left_view_id0, right_view_id0; + bool ref_viewing_distance_flag; + Get_UE (prec_ref_display_width, "prec_ref_display_width"); + if (prec_ref_display_width>=32) + { + Trusted_IsNot("prec_ref_display_width out of range"); + BS_End(); + return; + } + TEST_SB_GET (ref_viewing_distance_flag, "ref_viewing_distance_flag"); + Skip_UE( "prec_ref_viewing_dist"); + TEST_SB_END(); + Get_UE (num_ref_displays_minus1, "num_ref_displays_minus1"); + if (num_ref_displays_minus1>=32) + { + Trusted_IsNot("num_ref_displays_minus1 out of range"); + BS_End(); + return; + } + for (int32u i=0; i<=num_ref_displays_minus1; i++) + { + Element_Begin1("ref_display"); + int32u left_view_id, right_view_id; + int8u exponent_ref_display_width; + Get_UE (left_view_id, "left_view_id"); + Get_UE (right_view_id, "right_view_id"); + if (!i) + { + left_view_id0=left_view_id; + right_view_id0=right_view_id; + } + Get_S1 (6, exponent_ref_display_width, "exponent_ref_display_width"); + if (exponent_ref_display_width>=63) + { + if (exponent_ref_display_width>63) + Trusted_IsNot("exponent_ref_display_width out of range"); + else + Param_Info1("(Not supported)"); + BS_End(); + return; + } + int8u refDispWidthBits; + if (exponent_ref_display_width) + { + auto temp=exponent_ref_display_width+prec_ref_display_width; + if (temp>31) + refDispWidthBits=(int8u)(temp-31); + else + refDispWidthBits=0; + } + else + refDispWidthBits=(prec_ref_display_width==31); + if (refDispWidthBits) + Skip_BS(refDispWidthBits, "mantissa_ref_display_width"); + if (ref_viewing_distance_flag) + { + int8u exponent_ref_viewing_distance; + Get_S1 (6, exponent_ref_viewing_distance, "exponent_ref_viewing_distance"); + if (exponent_ref_viewing_distance>=63) + { + if (exponent_ref_viewing_distance>63) + Trusted_IsNot("exponent_ref_viewing_distance out of range"); + else + Param_Info1("(Not supported)"); + BS_End(); + return; + } + int8u refViewDistBits; + if (exponent_ref_viewing_distance) + { + auto temp=exponent_ref_viewing_distance+prec_ref_display_width; + if (temp>31) + refViewDistBits=(int8u)(temp-31); + else + refViewDistBits=0; + } + else + refViewDistBits=(exponent_ref_viewing_distance==31); + if (refViewDistBits) + Skip_BS(refViewDistBits, "mantissa_ref_viewing_distance"); + } + TEST_SB_SKIP( "additional_shift_present_flag"); + Skip_S2(10, "num_sample_shift_plus512"); + TEST_SB_END(); + Element_End0(); + } + TEST_SB_SKIP( "three_dimensional_reference_displays_extension_flag"); + Skip_BS(Data_BS_Remain()-End, "(Not parsed)"); + TEST_SB_END(); + BS_End(); + FILLING_BEGIN_PRECISE(); + /* + if (!video_parameter_sets.empty()) + { + const auto& view_id_val=(*video_parameter_sets.begin())->view_id_val; + if (left_view_id0==view_id_val[0] && right_view_id0==view_id_val[1]) + Fill(Stream_Video, 0, Video_MultiView_Order, "L R"); + if (left_view_id0==view_id_val[1] && right_view_id0==view_id_val[0]) + Fill(Stream_Video, 0, Video_MultiView_Order, "R L"); + } + */ + FILLING_END(); +} + //*************************************************************************** // Sub-elements //*************************************************************************** @@ -3521,18 +4050,20 @@ void File_Hevc::slice_segment_header() } //--------------------------------------------------------------------------- -void File_Hevc::profile_tier_level(int8u maxNumSubLayersMinus1) +void File_Hevc::profile_tier_level(profile_tier_level_struct& p, bool profilePresentFlag, int8u maxNumSubLayersMinus1) { Element_Begin1("profile_tier_level"); //Parsing std::vectorsub_layer_profile_present_flags, sub_layer_level_present_flags; - Get_S1 (2, profile_space, "general_profile_space"); - Get_SB ( tier_flag, "general_tier_flag"); - Get_S1 (5, profile_idc, "general_profile_idc"); + if (profilePresentFlag) + { + Get_S1 (2, p.profile_space, "general_profile_space"); + Get_SB ( p.tier_flag, "general_tier_flag"); + Get_S1 (5, p.profile_idc, "general_profile_idc"); Param_Info1(Hevc_profile_idc(p.profile_idc)); Element_Begin1("general_profile_compatibility_flags"); for (int8u profile_pos=0; profile_pos<32; profile_pos++) - if (profile_pos==profile_idc) + if (profile_pos==p.profile_idc) { bool general_profile_compatibility_flag; Get_SB ( general_profile_compatibility_flag, "general_profile_compatibility_flag"); @@ -3543,25 +4074,26 @@ void File_Hevc::profile_tier_level(int8u maxNumSubLayersMinus1) Skip_SB( "general_profile_compatibility_flag"); Element_End0(); Element_Begin1("general_profile_compatibility_flags"); - Get_SB ( general_progressive_source_flag, "general_progressive_source_flag"); - Get_SB ( general_interlaced_source_flag, "general_interlaced_source_flag"); + Get_SB ( p.general_progressive_source_flag, "general_progressive_source_flag"); + Get_SB ( p.general_interlaced_source_flag, "general_interlaced_source_flag"); Skip_SB( "general_non_packed_constraint_flag"); - Get_SB ( general_frame_only_constraint_flag, "general_frame_only_constraint_flag"); - Skip_SB( "general_max_12bit_constraint_flag"); - Skip_SB( "general_max_10bit_constraint_flag"); - Get_SB ( general_max_8bit_constraint_flag, "general_max_8bit_constraint_flag"); + Get_SB ( p.general_frame_only_constraint_flag, "general_frame_only_constraint_flag"); + Get_SB ( p.general_max_12bit_constraint_flag, "general_max_12bit_constraint_flag"); + Get_SB ( p.general_max_10bit_constraint_flag, "general_max_10bit_constraint_flag"); + Get_SB ( p.general_max_8bit_constraint_flag, "general_max_8bit_constraint_flag"); Skip_SB( "general_max_422chroma_constraint_flag"); Skip_SB( "general_max_420chroma_constraint_flag"); Skip_SB( "general_max_monochrome_constraint_flag"); Skip_SB( "general_intra_constraint_flag"); Skip_SB( "general_one_picture_only_constraint_flag"); Skip_SB( "general_lower_bit_rate_constraint_flag"); - Skip_SB( "general_max_14bit_constraint_flag"); + Get_SB ( p.general_max_14bit_constraint_flag, "general_max_14bit_constraint_flag"); for (int8u constraint_pos=0; constraint_pos<33; constraint_pos++) Skip_SB( "general_reserved"); Skip_SB( "general_inbld_flag"); Element_End0(); - Get_S1 (8, level_idc, "general_level_idc"); + } + Get_S1 (8, p.level_idc, "general_level_idc"); for (int32u SubLayerPos=0; SubLayerPos 1 ) { - Skip_SE( "scaling_list_dc_coef_minus8"); //[ sizeId ? 2 ][ matrixId ] se(v) + Skip_SE( "scaling_list_dc_coef_minus8"); //[ sizeId ? 2 ][ matrixId ] se(p) //nextCoef = scaling_list_dc_coef_minus8[ sizeId ? 2 ][ matrixId ] + 8 } for(size_t i=0; i profile_tier_level_info_layers; + vector view_id_val; int8u vps_max_sub_layers_minus1; //Constructor/Destructor - video_parameter_set_struct(int8u vps_max_sub_layers_minus1_) + video_parameter_set_struct(const vector& profile_tier_level_info_layers_, int8u vps_max_sub_layers_minus1_, vector view_id_val_) : #if MEDIAINFO_DEMUX AnnexB_Buffer(NULL), AnnexB_Buffer_Size(0), #endif //MEDIAINFO_DEMUX + profile_tier_level_info_layers(profile_tier_level_info_layers_), + view_id_val(view_id_val_), vps_max_sub_layers_minus1(vps_max_sub_layers_minus1_) { } @@ -197,15 +231,13 @@ private : vui_parameters_struct(const vui_parameters_struct &); vui_parameters_struct(); }; + int32u nuh_layer_id; vui_parameters_struct* vui_parameters; #if MEDIAINFO_DEMUX int8u* AnnexB_Buffer; size_t AnnexB_Buffer_Size; #endif //MEDIAINFO_DEMUX - int32u profile_space; - bool tier_flag; - int32u profile_idc; - int32u level_idc; + profile_tier_level_struct profile_tier_level_info; int32u pic_width_in_luma_samples; int32u pic_height_in_luma_samples; int32u conf_win_left_offset; @@ -219,10 +251,6 @@ private : int8u bit_depth_luma_minus8; int8u bit_depth_chroma_minus8; int8u sps_max_num_reorder_pics; - bool general_progressive_source_flag; - bool general_interlaced_source_flag; - bool general_frame_only_constraint_flag; - bool general_max_8bit_constraint_flag; //Computed value bool NalHrdBpPresentFlag() {return vui_parameters && vui_parameters->NAL;} @@ -231,17 +259,15 @@ private : int8u ChromaArrayType() {return separate_colour_plane_flag?0:chroma_format_idc;} //Constructor/Destructor - seq_parameter_set_struct(vui_parameters_struct* vui_parameters_, int32u profile_space_, bool tier_flag_, int32u profile_idc_, int32u level_idc_, int32u pic_width_in_luma_samples_, int32u pic_height_in_luma_samples_, int32u conf_win_left_offset_, int32u conf_win_right_offset_, int32u conf_win_top_offset_, int32u conf_win_bottom_offset_, int8u video_parameter_set_id_, int8u chroma_format_idc_, bool separate_colour_plane_flag_, int8u log2_max_pic_order_cnt_lsb_minus4_, int8u bit_depth_luma_minus8_, int8u bit_depth_chroma_minus8_, int8u sps_max_num_reorder_pics_, bool general_progressive_source_flag_, bool general_interlaced_source_flag_, bool general_frame_only_constraint_flag_, bool general_max_8bit_constraint_flag_) + seq_parameter_set_struct(int32u nuh_layer_id_, vui_parameters_struct* vui_parameters_, const profile_tier_level_struct& profile_tier_level_info_, int32u pic_width_in_luma_samples_, int32u pic_height_in_luma_samples_, int32u conf_win_left_offset_, int32u conf_win_right_offset_, int32u conf_win_top_offset_, int32u conf_win_bottom_offset_, int8u video_parameter_set_id_, int8u chroma_format_idc_, bool separate_colour_plane_flag_, int8u log2_max_pic_order_cnt_lsb_minus4_, int8u bit_depth_luma_minus8_, int8u bit_depth_chroma_minus8_, int8u sps_max_num_reorder_pics_) : + nuh_layer_id(nuh_layer_id_), vui_parameters(vui_parameters_), #if MEDIAINFO_DEMUX AnnexB_Buffer(NULL), AnnexB_Buffer_Size(0), #endif //MEDIAINFO_DEMUX - profile_space(profile_space_), - tier_flag(tier_flag_), - profile_idc(profile_idc_), - level_idc(level_idc_), + profile_tier_level_info(profile_tier_level_info_), pic_width_in_luma_samples(pic_width_in_luma_samples_), pic_height_in_luma_samples(pic_height_in_luma_samples_), conf_win_left_offset(conf_win_left_offset_), @@ -254,11 +280,7 @@ private : log2_max_pic_order_cnt_lsb_minus4(log2_max_pic_order_cnt_lsb_minus4_), bit_depth_luma_minus8(bit_depth_luma_minus8_), bit_depth_chroma_minus8(bit_depth_chroma_minus8_), - sps_max_num_reorder_pics(sps_max_num_reorder_pics_), - general_progressive_source_flag(general_progressive_source_flag_), - general_interlaced_source_flag(general_interlaced_source_flag_), - general_frame_only_constraint_flag(general_frame_only_constraint_flag_), - general_max_8bit_constraint_flag(general_max_8bit_constraint_flag_) + sps_max_num_reorder_pics(sps_max_num_reorder_pics_) { } @@ -321,6 +343,8 @@ private : //Streams management void Streams_Fill(); + void Streams_Fill_Profile(const profile_tier_level_struct& p); + void Streams_Fill(vector::iterator video_parameter_set_Item); void Streams_Fill(vector::iterator seq_parameter_set_Item); void Streams_Finish(); @@ -350,7 +374,7 @@ private : //Elements void slice_segment_layer(); void video_parameter_set(); - void video_parameter_sets_creating_data(int8u vps_video_parameter_set_id, int8u vps_max_sub_layers_minus1); + void video_parameter_sets_creating_data(int8u vps_video_parameter_set_id, const vector& profile_tier_level_info_layers, int8u vps_max_sub_layers_minus1, const vector& view_id_val); void seq_parameter_set(); void pic_parameter_set(); void access_unit_delimiter(); @@ -389,10 +413,11 @@ private : void sei_message_mastering_display_colour_volume(); void sei_message_light_level(); void sei_alternative_transfer_characteristics(); + void three_dimensional_reference_displays_info(int32u payloadSize); //Packets - SubElements void slice_segment_header(); - void profile_tier_level(int8u maxNumSubLayersMinus1); + void profile_tier_level(profile_tier_level_struct& p, bool profilePresentFlag, int8u maxNumSubLayersMinus1); void short_term_ref_pic_sets(int8u num_short_term_ref_pic_sets); void vui_parameters(std::vector::iterator video_parameter_set_Item, seq_parameter_set_struct::vui_parameters_struct* &vui_parameters_Item); void hrd_parameters(bool commonInfPresentFlag, int8u maxNumSubLayersMinus1, seq_parameter_set_struct::vui_parameters_struct::xxl_common* &xxL_Common, seq_parameter_set_struct::vui_parameters_struct::xxl* &NAL, seq_parameter_set_struct::vui_parameters_struct::xxl* &VCL); @@ -501,15 +526,7 @@ private : Ztring maximum_content_light_level; Ztring maximum_frame_average_light_level; int8u nuh_layer_id; - int8u profile_space; - int8u profile_idc; - int8u level_idc; int8u preferred_transfer_characteristics; - bool tier_flag; - bool general_progressive_source_flag; - bool general_interlaced_source_flag; - bool general_frame_only_constraint_flag; - bool general_max_8bit_constraint_flag; bool RapPicFlag; bool first_slice_segment_in_pic_flag; }; diff --git a/src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.cpp b/src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.cpp new file mode 100644 index 0000000000..25447b54b4 --- /dev/null +++ b/src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.cpp @@ -0,0 +1,146 @@ +/* Copyright (c) MediaArea.net SARL. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license that can + * be found in the License.html file in the root of the source tree. + */ + +//--------------------------------------------------------------------------- +// Pre-compilation +#include "MediaInfo/PreComp.h" +#ifdef __BORLANDC__ + #pragma hdrstop +#endif +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +#include "MediaInfo/Setup.h" +using namespace ZenLib; +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +#if defined(MEDIAINFO_MPEGPS_YES) || defined(MEDIAINFO_MPEGTS_YES) || defined(MEDIAINFO_VVC_YES) +//--------------------------------------------------------------------------- + +namespace MediaInfoLib +{ + +//--------------------------------------------------------------------------- +extern const char* Vvc_tier_flag(bool tier_flag) +{ + return tier_flag ? "High" : "Main"; +} + +//--------------------------------------------------------------------------- +extern const char* Vvc_profile_idc(int32u profile_idc) +{ + switch (profile_idc) + { + case 1 : return "Main"; + case 2 : return "Main 10"; + case 3 : return "Main Still"; + case 4 : return "Format Range"; // extensions + case 5 : return "High Throughput"; + case 6 : return "Multiview Main"; + case 7 : return "Scalable Main"; // can be "Scalable Main 10" depending on general_max_8bit_constraint_flag + case 8 : return "3D Main"; + case 9 : return "Screen Content"; // coding extensions + case 10 : return "Scalable Format Range"; // extensions + default : return ""; + } +} + +} //NameSpace + +//--------------------------------------------------------------------------- +#endif //... +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +#if defined(MEDIAINFO_VVC_YES) +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +#include "MediaInfo/Video/File_Vvc.h" +using namespace std; +//--------------------------------------------------------------------------- + +namespace MediaInfoLib +{ + +//*************************************************************************** +// Info +//*************************************************************************** + +//--------------------------------------------------------------------------- +static const int8u Vvc_profile_idc_Values[] = +{ + 1, + 2, + 10, + 17, + 33, + 34, + 35, + 42, + 43, + 49, + 65, + 66, + 97, + 98, + 99, +}; +static const char* const Vvc_profile_idc_Names[] = +{ + "Main 10", + "Main 12", + "Main 12 Intra", + "Multilayer Main 10", + "Main 10 4:4:4", + "Main 12 4:4:4", + "Main 16 4:4:4", + "Main 12 4:4:4 Intra", + "Main 16 4:4:4 Intra", + "Multilayer Main 10 4:4:4", + "Main 10 Still Picture", + "Main 12 Still Picture", + "Main 10 4:4:4 Still Picture", + "Main 12 4:4:4 Still Picture", + "Main 16 4:4:4 Still Picture", +}; +static_assert(sizeof(Vvc_profile_idc_Values)/sizeof(Vvc_profile_idc_Values[0])==sizeof(Vvc_profile_idc_Names)/sizeof(Vvc_profile_idc_Names[0]), ""); +string Vvc_profile_idc(int8u profile_idc) +{ + for (size_t i=0; i>4)+'.'+to_string((level_idc&0xF)/3); +} + +//--------------------------------------------------------------------------- +string Vvc_profile_level_tier_string(int8u profile_idc, int8u level_idc, bool tier_flag) +{ + string Result; + if (profile_idc && profile_idc!=(int8u)-1) + Result=Vvc_profile_idc(profile_idc); + if (level_idc && level_idc!=(int8u)-1) + { + if (profile_idc && profile_idc!=(int8u)-1) + Result+='@'; + Result+='L'; + Result+=Vvc_level_idc(level_idc); + Result+='@'; + Result+=Vvc_tier_flag(tier_flag); + } + return Result; +} + +} //NameSpace + +#endif //MEDIAINFO_VVC_YES diff --git a/src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.h b/src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.h new file mode 100644 index 0000000000..02fdf6adeb --- /dev/null +++ b/src/ExtLib/MediaInfo/MediaInfo/Video/File_Vvc.h @@ -0,0 +1,21 @@ +/* Copyright (c) MediaArea.net SARL. All Rights Reserved. + * + * Use of this source code is governed by a BSD-style license that can + * be found in the License.html file in the root of the source tree. + */ + +//--------------------------------------------------------------------------- +#ifndef MediaInfo_VvcH +#define MediaInfo_VvcH +//--------------------------------------------------------------------------- + +//--------------------------------------------------------------------------- +#include "MediaInfo/File__Analyze.h" +//--------------------------------------------------------------------------- + +namespace MediaInfoLib +{ + +} //NameSpace + +#endif diff --git a/src/ExtLib/MediaInfo/ThirdParty/tfsxml/tfsxml.c b/src/ExtLib/MediaInfo/ThirdParty/tfsxml/tfsxml.c index f5bf7062e3..f1638edebc 100644 --- a/src/ExtLib/MediaInfo/ThirdParty/tfsxml/tfsxml.c +++ b/src/ExtLib/MediaInfo/ThirdParty/tfsxml/tfsxml.c @@ -74,7 +74,7 @@ static inline void set_level(tfsxml_string* priv, int level) priv->flags |= level << offset; } -static inline void get_level(tfsxml_string* priv, int* level) +static inline void get_level(tfsxml_string* priv, unsigned* level) { const int offset = (sizeof(priv->flags) - 1) * 8; *level = priv->flags >> offset; @@ -172,7 +172,7 @@ int tfsxml_init(tfsxml_string* priv, const void* buf, unsigned len, unsigned ver int tfsxml_next(tfsxml_string* priv, tfsxml_string* n) { tfsxml_string priv_bak; - int level; + unsigned level; get_level(priv, &level); diff --git a/src/ExtLib/ZenLib/ZenLib/Conf.h b/src/ExtLib/ZenLib/ZenLib/Conf.h index 18264cfe7c..14d4d5a9ae 100644 --- a/src/ExtLib/ZenLib/ZenLib/Conf.h +++ b/src/ExtLib/ZenLib/ZenLib/Conf.h @@ -63,6 +63,11 @@ #define WINDOWS_UWP #endif #endif + #if defined(WINAPI_FAMILY) && (WINAPI_FAMILY==WINAPI_FAMILY_GAMES) + #ifndef WINDOWS_GAMES + #define WINDOWS_GAMES + #endif + #endif #endif //--------------------------------------------------------------------------- diff --git a/src/ExtLib/ZenLib/ZenLib/FileName.cpp b/src/ExtLib/ZenLib/ZenLib/FileName.cpp index d26784cacd..2f48d6acce 100644 --- a/src/ExtLib/ZenLib/ZenLib/FileName.cpp +++ b/src/ExtLib/ZenLib/ZenLib/FileName.cpp @@ -190,11 +190,15 @@ Ztring FileName::TempFileName_Create(const Ztring &Prefix) if (!GetTempPath(MAX_PATH, Path)) return Ztring(); //Problem while getting a temp path - Char FileName[MAX_PATH+1]; - if (!GetTempFileName(Path, Prefix.c_str(), 0, FileName)) - return Ztring(); //Problem while getting a file name - - return Ztring(FileName); + #ifndef WINDOWS_GAMES + Char FileName[MAX_PATH+1]; + if (!GetTempFileName(Path, Prefix.c_str(), 0, FileName)) + return Ztring(); //Problem while getting a file name + + return Ztring(FileName); + #else // #ifdef WINDOWS_GAMES + return __T("D:\\xxx.txt"); + #endif // #ifdef WINDOWS_GAMES #else return __T("C:\\xxx.txt"); #endif diff --git a/src/ExtLib/ZenLib/ZenLib/OS_Utils.cpp b/src/ExtLib/ZenLib/ZenLib/OS_Utils.cpp index ac92b4d3ec..6aadf436bb 100644 --- a/src/ExtLib/ZenLib/ZenLib/OS_Utils.cpp +++ b/src/ExtLib/ZenLib/ZenLib/OS_Utils.cpp @@ -40,6 +40,7 @@ using namespace ABI::Windows::Security::Cryptography::Core; #else #include + #include #endif #endif #endif //ZENLIB_USEWX @@ -234,7 +235,7 @@ void Shell_Execute(const Ztring &ToExecute) { #ifdef ZENLIB_USEWX #else //ZENLIB_USEWX - #if defined(WINDOWS) && !defined(WINDOWS_UWP) + #if defined(WINDOWS) && !defined(WINDOWS_UWP) && !defined(WINDOWS_GAMES) ShellExecute(NULL, __T("open"), ToExecute.c_str(), NULL, NULL, 0); #else //Not supported @@ -252,7 +253,7 @@ void Shell_Execute(const Ztring &ToExecute) Ztring Directory_Select_Caption; -#if defined(WINDOWS) && !defined(WINDOWS_UWP) +#if defined(WINDOWS) && !defined(WINDOWS_UWP) && !defined(WINDOWS_GAMES) #ifdef UNICODE char InitDirA[MAX_PATH]; wchar_t InitDir [MAX_PATH]; diff --git a/src/ExtLib/ZenLib/ZenLib/Ztring.cpp b/src/ExtLib/ZenLib/ZenLib/Ztring.cpp index 31525b5e2f..027a29cc2c 100644 --- a/src/ExtLib/ZenLib/ZenLib/Ztring.cpp +++ b/src/ExtLib/ZenLib/ZenLib/Ztring.cpp @@ -32,7 +32,9 @@ #ifdef WINDOWS #undef __TEXT #include - #include + #ifndef WINDOWS_GAMES + #include + #endif #endif #endif //ZENLIB_USEWX #ifdef __MINGW32__ From c3803be6f9a119daecae054b0cde9bb516146374 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sun, 4 Feb 2024 21:14:17 +0300 Subject: [PATCH 18/87] =?UTF-8?q?DSUtil:=20=D0=98=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4=20CPr?= =?UTF-8?q?ofile::DeleteSection,=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20?= =?UTF-8?q?=D1=81=D0=B5=D0=BA=D1=86=D0=B8=D1=8F=20=D0=B2=20INI=20=D1=83?= =?UTF-8?q?=D0=B4=D0=B0=D0=BB=D1=8F=D0=B5=D1=82=D1=81=D1=8F=20=D1=82=D0=B0?= =?UTF-8?q?=D0=BA=20=D0=B6=D0=B5=20=D1=80=D0=B5=D0=BA=D1=83=D1=80=D1=81?= =?UTF-8?q?=D0=B8=D0=B2=D0=BD=D0=BE,=20=D0=BA=D0=B0=D0=BA=20=D0=B8=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20=D1=80=D0=B5=D0=B5=D1=81=D1=82=D1=80=D0=B0?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DSUtil/Profile.cpp | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/DSUtil/Profile.cpp b/src/DSUtil/Profile.cpp index 3ba37b544f..cf5a1fccfa 100644 --- a/src/DSUtil/Profile.cpp +++ b/src/DSUtil/Profile.cpp @@ -1,5 +1,5 @@ /* - * (C) 2018-2023 see Authors.txt + * (C) 2018-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -1002,7 +1002,21 @@ bool CProfile::DeleteSection(const wchar_t* section) } else { InitIni(); - if (m_ProfileMap.erase(section)) { + const CStringW mainsection(section); + const CStringW prefix(mainsection + L'\\'); + + auto start = m_ProfileMap.cbegin(); + while (start != m_ProfileMap.cend() && start->first != mainsection && !StartsWith(start->first, prefix)) { + ++start; + } + + if (start != m_ProfileMap.cend()) { + auto end = std::next(start); + while (end != m_ProfileMap.cend() && StartsWith(end->first, prefix)) { + ++end; + } + + m_ProfileMap.erase(start, end); m_bIniNeedFlush = true; ret = true; } From 2d03cff9e16be6731dce14bcbd30fef9bcdac494 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sun, 4 Feb 2024 21:28:56 +0300 Subject: [PATCH 19/87] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D1=87=D1=82=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BA=20=D0=B2=D0=BD=D0=B5?= =?UTF-8?q?=D1=88=D0=BD=D0=B8=D1=85=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2,=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D1=81?= =?UTF-8?q?=D1=87=D0=B8=D1=82=D1=8B=D0=B2=D0=B0=D1=8E=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=B2=D1=81=D0=B5=20=D0=BF=D0=BE=D0=B4=D1=81=D0=B5=D0=BA=D1=86?= =?UTF-8?q?=D0=B8=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/AppSettings.cpp | 49 +++++++++++++++---------------- 1 file changed, 24 insertions(+), 25 deletions(-) diff --git a/src/apps/mplayerc/AppSettings.cpp b/src/apps/mplayerc/AppSettings.cpp index 9ae5d226d2..17f3ee64f7 100644 --- a/src/apps/mplayerc/AppSettings.cpp +++ b/src/apps/mplayerc/AppSettings.cpp @@ -1052,24 +1052,36 @@ void CAppSettings::LoadSettings(bool bForce/* = false*/) { m_ExternalFilters.clear(); - for (unsigned int i = 0; ; i++) { - CString key; - key.Format(L"%s\\%03u", IDS_R_EXTERNAL_FILTERS, i); + + std::vector sectionnames; + profile.EnumSectionNames(IDS_R_EXTERNAL_FILTERS, sectionnames); + + for (const auto& section : sectionnames) { + const CStringW key = IDS_R_EXTERNAL_FILTERS L"\\" + section; + auto f = std::make_unique(); + profile.ReadString(key, L"Name", f->name); + int sourceType = -1; + profile.ReadInt(key, L"SourceType", sourceType, FilterOverride::REGISTERED, FilterOverride::EXTERNAL); + f->iLoadType = -1; + profile.ReadInt(key, L"LoadType", f->iLoadType, FilterOverride::PREFERRED, FilterOverride::MERIT); + + if (f->name.IsEmpty() || sourceType < 0 || f->iLoadType < 0) { + continue; + } + + if (profile.ReadString(key, L"CLSID", str)) { + f->clsid = GUIDFromCString(str); + } + bool enabled = false; profile.ReadBool(key, L"Enabled", enabled); f->fDisabled = !enabled; - int j = -1; - profile.ReadInt(key, L"SourceType", j); - if (j == 0) { + if (sourceType == 0) { f->type = FilterOverride::REGISTERED; profile.ReadString(key, L"DisplayName", f->dispname); - profile.ReadString(key, L"Name", f->name); - if (profile.ReadString(key, L"CLSID", str)) { - f->clsid = GUIDFromCString(str); - } if (f->clsid == CLSID_NULL) { CComPtr pBF; CStringW FriendlyName; @@ -1078,19 +1090,12 @@ void CAppSettings::LoadSettings(bool bForce/* = false*/) profile.WriteString(key, L"CLSID", CStringFromGUID(f->clsid)); } } - } else if (j == 1) { + } else if (sourceType == 1) { f->type = FilterOverride::EXTERNAL; profile.ReadString(key, L"Path", f->path); - profile.ReadString(key, L"Name", f->name); - if (profile.ReadString(key, L"CLSID", str)) { - f->clsid = GUIDFromCString(str); - } - } else { - profile.DeleteSection(key); - break; } - if (IsSupportedExternalVideoRenderer(f->clsid)) { + if (f->clsid == CLSID_NULL || IsSupportedExternalVideoRenderer(f->clsid)) { // supported external video renderers that must be selected in the "Video" settings continue; } @@ -1117,12 +1122,6 @@ void CAppSettings::LoadSettings(bool bForce/* = false*/) f->guids.pop_back(); } - f->iLoadType = -1; - profile.ReadInt(key, L"LoadType", f->iLoadType); - if (f->iLoadType < 0) { - break; - } - f->dwMerit = MERIT_DO_NOT_USE + 1; profile.ReadUInt(key, L"Merit", *(unsigned*)&f->dwMerit); From c9ebbf2412b20536fb2d61e246c6f046cc231b1f Mon Sep 17 00:00:00 2001 From: v0lt Date: Sun, 4 Feb 2024 21:44:55 +0300 Subject: [PATCH 20/87] =?UTF-8?q?=D0=9F=D1=80=D0=B8=20=D0=BE=D0=B1=D1=8A?= =?UTF-8?q?=D0=B5=D0=B4=D0=B8=D0=BD=D0=B5=D0=BD=D0=B8=D0=B8=20=D0=BF=D0=BE?= =?UTF-8?q?=D1=82=D0=BE=D0=BA=D0=BE=D0=B2=20=D0=B2=20MP4=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=20=D0=BF=D0=B0?= =?UTF-8?q?=D1=80=D0=B0=D0=BC=D0=B5=D1=82=D1=80=20"-movflags=20+faststart"?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/SaveTaskDlg.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/apps/mplayerc/SaveTaskDlg.cpp b/src/apps/mplayerc/SaveTaskDlg.cpp index fab9cf3550..86d86acfce 100644 --- a/src/apps/mplayerc/SaveTaskDlg.cpp +++ b/src/apps/mplayerc/SaveTaskDlg.cpp @@ -416,6 +416,9 @@ void CSaveTaskDlg::SaveHTTP(const int iSubLangDefault) if (iSubLangDefault >= 0) { strArgs.AppendFormat(L" -disposition:s:%d default", iSubLangDefault); } + if (finalext == L"mp4") { + strArgs.Append(L" -movflags +faststart"); + } strArgs.AppendFormat(LR"( -f %s "%s")", finalext, tmpfile); SHELLEXECUTEINFOW execinfo = { sizeof(execinfo) }; From ad7e6643bf3fb101b1b607bcd6bbdc445c5b2071 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sun, 4 Feb 2024 22:03:26 +0300 Subject: [PATCH 21/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BD=D0=B5=D0=BC=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20Klaus1189).=20=D0=9E=D0=B1=D0=BD=D0=BE?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=B8=D1=82=D0=B0=D0=B9=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=D0=B9=20(Simplified)=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20wushanta?= =?UTF-8?q?o).=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=8F?= =?UTF-8?q?=D0=BF=D0=BE=D0=BD=D1=81=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20ts?= =?UTF-8?q?ubasanouta).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.de.rc | 2 +- src/apps/mpcresources/mplayerc.ja.rc | 2 +- src/apps/mpcresources/mplayerc.sc.rc | 2 +- src/apps/mpcresources/text/mplayerc.de.rc.txt | 2 +- src/apps/mpcresources/text/mplayerc.ja.rc.txt | 2 +- src/apps/mpcresources/text/mplayerc.sc.rc.txt | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.de.rc b/src/apps/mpcresources/mplayerc.de.rc index 19d1d0408b..53d4a69d8a 100644 --- a/src/apps/mpcresources/mplayerc.de.rc +++ b/src/apps/mpcresources/mplayerc.de.rc @@ -3169,7 +3169,7 @@ END STRINGTABLE BEGIN - IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_BLOCK_EXTERNAL_VR "Sie können %s nicht als externen Filter hinzufügen.\nSie sollten Ihren bevorzugten Videorenderer in den Optionen 'Video' auswählen." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index 4bd3abde26..3f936efa0a 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -3169,7 +3169,7 @@ END STRINGTABLE BEGIN - IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_BLOCK_EXTERNAL_VR "%s を外部フィルターとして追加することはできません。\n[映像] 設定ページで、お好みのビデオ レンダラーを選択する必要があります。" END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index 41996be58b..9718cb4c56 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -3169,7 +3169,7 @@ END STRINGTABLE BEGIN - IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_BLOCK_EXTERNAL_VR "不能添加 %s 为外部滤镜。\n应该在视频设置页面选择首选的视频渲染器。" END STRINGTABLE diff --git a/src/apps/mpcresources/text/mplayerc.de.rc.txt b/src/apps/mpcresources/text/mplayerc.de.rc.txt index 8a2e20d13d..adcc1d00d6 100644 --- a/src/apps/mpcresources/text/mplayerc.de.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.de.rc.txt @@ -1347,7 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Es konnte keine Verbindung mit dem Tune STRING IDS_BDA_ERROR_CREATE_RECEIVER "Der Empfänger konnte nicht erstellt werden." STRING IDS_BDA_ERROR_CREATE_TUNER "Der Tuner konnte nicht erstellt werden." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Der Demultiplexer konnte nicht erstellt werden." -STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." +STRING IDS_BLOCK_EXTERNAL_VR "Sie können %s nicht als externen Filter hinzufügen.\nSie sollten Ihren bevorzugten Videorenderer in den Optionen 'Video' auswählen." STRING IDS_BRIGHTNESS_DEC "Helligkeit verringern" STRING IDS_BRIGHTNESS_INC "Helligkeit erhöhen" STRING IDS_CANCEL "&Abbrechen" diff --git a/src/apps/mpcresources/text/mplayerc.ja.rc.txt b/src/apps/mpcresources/text/mplayerc.ja.rc.txt index f40927a367..f55e3667ec 100644 --- a/src/apps/mpcresources/text/mplayerc.ja.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ja.rc.txt @@ -1347,7 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "チューナーと受信機を接続で STRING IDS_BDA_ERROR_CREATE_RECEIVER "受信機を作成できませんでした。" STRING IDS_BDA_ERROR_CREATE_TUNER "チューナーを作成できませんでした。" STRING IDS_BDA_ERROR_DEMULTIPLEXER "デマルチプレクサーを作成できませんでした。" -STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." +STRING IDS_BLOCK_EXTERNAL_VR "%s を外部フィルターとして追加することはできません。\n[映像] 設定ページで、お好みのビデオ レンダラーを選択する必要があります。" STRING IDS_BRIGHTNESS_DEC "明るさを下げる" STRING IDS_BRIGHTNESS_INC "明るさを上げる" STRING IDS_CANCEL "キャンセル" diff --git a/src/apps/mpcresources/text/mplayerc.sc.rc.txt b/src/apps/mpcresources/text/mplayerc.sc.rc.txt index f1e5685365..699dbf6b7e 100644 --- a/src/apps/mpcresources/text/mplayerc.sc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sc.rc.txt @@ -1347,7 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "无法连接调谐器和接收器。" STRING IDS_BDA_ERROR_CREATE_RECEIVER "无法创建接收器。" STRING IDS_BDA_ERROR_CREATE_TUNER "无法创建调谐器。" STRING IDS_BDA_ERROR_DEMULTIPLEXER "无法创建解多路复用器。" -STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." +STRING IDS_BLOCK_EXTERNAL_VR "不能添加 %s 为外部滤镜。\n应该在视频设置页面选择首选的视频渲染器。" STRING IDS_BRIGHTNESS_DEC "降低亮度" STRING IDS_BRIGHTNESS_INC "增加亮度" STRING IDS_CANCEL "取消" From 7b8d50fbd0ad969d1b51908a2f2e48ff8c4f176d Mon Sep 17 00:00:00 2001 From: cumhur Date: Mon, 5 Feb 2024 13:04:48 +0300 Subject: [PATCH 22/87] Update mplayerc.tr.rc.txt --- src/apps/mpcresources/text/mplayerc.tr.rc.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mpcresources/text/mplayerc.tr.rc.txt b/src/apps/mpcresources/text/mplayerc.tr.rc.txt index 7b23ee6293..5b504711f7 100644 --- a/src/apps/mpcresources/text/mplayerc.tr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tr.rc.txt @@ -1347,7 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Kanala ve alıcıya bağlanılamadı." STRING IDS_BDA_ERROR_CREATE_RECEIVER "Alıcı oluşturulamadı." STRING IDS_BDA_ERROR_CREATE_TUNER "Kanal oluşturulamadı." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Çoklama çözücüsü oluşturulamadı." -STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." +STRING IDS_BLOCK_EXTERNAL_VR "%s harici süzgeç olarak eklenemez.\nTercih ettiğiniz video işleyiciyi Video ayarları sayfasında seçmelisiniz." STRING IDS_BRIGHTNESS_DEC "Parlaklığı Azalt" STRING IDS_BRIGHTNESS_INC "Parlaklığı Arttır" STRING IDS_CANCEL "İptal" From d032bdc7c416c3beed5ab9850163c25819447535 Mon Sep 17 00:00:00 2001 From: v0lt Date: Mon, 5 Feb 2024 16:56:48 +0300 Subject: [PATCH 23/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D1=83=D1=80=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20cmhrky).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.tr.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index 99698e09e4..b4696cc04a 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -3169,7 +3169,7 @@ END STRINGTABLE BEGIN - IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_BLOCK_EXTERNAL_VR "%s harici süzgeç olarak eklenemez.\nTercih ettiğiniz video işleyiciyi Video ayarları sayfasında seçmelisiniz." END STRINGTABLE From 36c83eb5f7b3a46d1b0c3161e707b7062378e453 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 6 Feb 2024 18:51:53 +1000 Subject: [PATCH 24/87] =?UTF-8?q?=D0=A5=D0=BE=D1=82=D1=8C=20=D0=BF=D0=BB?= =?UTF-8?q?=D0=B5=D0=B5=D1=80=20=D0=B8=20=D0=BD=D0=B5=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B6=D0=B8=D0=B2=D0=B0=D0=B5=D1=82=20=D0=B2?= =?UTF-8?q?=20"=D0=BD=D0=BE=D1=80=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE?= =?UTF-8?q?=D0=BC"=20=D0=B2=D0=B8=D0=B4=D0=B5=20=D0=B4=D0=BB=D0=B8=D0=BD?= =?UTF-8?q?=D0=BD=D1=8B=D0=B5=20=D0=BF=D1=83=D1=82=D0=B8=20-=20=D0=BD?= =?UTF-8?q?=D0=B5=D0=BA=D0=BE=D1=82=D0=BE=D1=80=D1=8B=D0=B5=20=D1=83=D0=BB?= =?UTF-8?q?=D1=83=D1=87=D1=88=D0=B5=D0=BD=D0=B8=D1=8F=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=B8=D1=85=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B2=20MPCBEShellExt=20=D0=B8=20=D0=B2=20?= =?UTF-8?q?=D1=81=D0=B0=D0=BC=D0=BE=D0=BC=20=D0=BF=D0=BB=D0=B5=D0=B5=D1=80?= =?UTF-8?q?=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/MPCBEShellExt/MPCBEContextMenu.cpp | 71 +++++++++------------ src/apps/mplayerc/AppSettings.cpp | 1 + 2 files changed, 31 insertions(+), 41 deletions(-) diff --git a/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp b/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp index cffa637452..fcd8e25801 100644 --- a/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp +++ b/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp @@ -1,5 +1,5 @@ /* - * (C) 2012-2021 see Authors.txt + * (C) 2012-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -21,6 +21,8 @@ #include "stdafx.h" #include #include +#include +#include #include "MPCBEContextMenu.h" #define MPC_WND_CLASS_NAME L"MPC-BE" @@ -119,11 +121,6 @@ CMPCBEContextMenu::~CMPCBEContextMenu() static HRESULT DragFiles(LPDATAOBJECT lpdobj, std::vector& fileNames) { - FORMATETC fmte = { CF_HDROP, nullptr, DVASPECT_CONTENT, -1, TYMED_HGLOBAL }; - STGMEDIUM stg = { TYMED_HGLOBAL }; - UINT uNumFiles = 0; - WCHAR strFilePath[MAX_PATH] = { 0 }; - fileNames.clear(); // No data object @@ -131,51 +128,43 @@ static HRESULT DragFiles(LPDATAOBJECT lpdobj, std::vector& fileNames) return E_INVALIDARG; } - // Use the given IDataObject to get a list of filenames (CF_HDROP). - if (FAILED(lpdobj->GetData(&fmte, &stg))) { - return E_INVALIDARG; - } - - // Get a pointer to the actual data. - HDROP hDrop = (HDROP)GlobalLock(stg.hGlobal); - - // Make sure it worked. - if (!hDrop) { - ReleaseStgMedium(&stg); - return E_INVALIDARG; - } + CComPtr psia; + auto hr = SHCreateShellItemArrayFromDataObject(lpdobj, IID_PPV_ARGS(&psia)); + if (SUCCEEDED(hr)) { + CComPtr pesi; + hr = psia->EnumItems(&pesi); + if (SUCCEEDED(hr)) { + CComPtr psi; + while (pesi->Next(1, &psi, nullptr) == S_OK) { + LPWSTR pszName = nullptr; + hr = psi->GetDisplayName(SIGDN_FILESYSPATH, &pszName); + if (hr == S_OK) { + CString fn(pszName); + CoTaskMemFree(pszName); + + SFGAOF sfgaoAttribs; + hr = psi->GetAttributes(SFGAO_FOLDER, &sfgaoAttribs); + if (hr == S_OK) { + if (fn[fn.GetLength() - 1] != L'\\') { + fn += L"\\"; + } + } - // Make sure HDROP contains at least one file. - if ((uNumFiles = DragQueryFileW(hDrop, 0xFFFFFFFF, NULL, 0)) >= 1) { - for (UINT i = 0; i < uNumFiles; i++) { - DragQueryFileW(hDrop, i, strFilePath, MAX_PATH); - if (GetFileAttributesW(strFilePath) & FILE_ATTRIBUTE_DIRECTORY) { - size_t nLen = wcslen(strFilePath); - if (strFilePath[nLen - 1] != L'\\') { - wcscat_s(strFilePath, L"\\"); + fileNames.emplace_back(fn); } + + psi.Release(); } - // Add the file name to the list - fileNames.emplace_back(strFilePath); - } - // sort list by path - static HMODULE h = LoadLibraryW(L"Shlwapi.dll"); - if (h) { - typedef int (WINAPI* StrCmpLogicalW)(_In_ PCWSTR psz1, _In_ PCWSTR psz2); - static StrCmpLogicalW pStrCmpLogicalW = (StrCmpLogicalW)GetProcAddress(h, "StrCmpLogicalW"); - if (pStrCmpLogicalW) { + if (fileNames.size() > 1) { + // sort list by path std::sort(fileNames.begin(), fileNames.end(), [](const CString& a, const CString& b) { - return pStrCmpLogicalW(a, b) < 0; + return StrCmpLogicalW(a, b) < 0; }); } } } - // Release the data. - GlobalUnlock(stg.hGlobal); - ReleaseStgMedium(&stg); - return fileNames.empty() ? E_INVALIDARG : S_OK; } diff --git a/src/apps/mplayerc/AppSettings.cpp b/src/apps/mplayerc/AppSettings.cpp index 9ae5d226d2..3460306cfd 100644 --- a/src/apps/mplayerc/AppSettings.cpp +++ b/src/apps/mplayerc/AppSettings.cpp @@ -2208,6 +2208,7 @@ CStringW CAppSettings::ParseFileName(const CStringW& param) length = GetShortPathNameW(longpath, shortPathName.GetBuffer(length), length); if (length > 0) { shortPathName.ReleaseBuffer(length); + shortPathName.Delete(0, 4); // remove "\\?\" prefix return shortPathName; } } From a52faad48760fd5cc65d7d2578f238d74798f4fd Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 6 Feb 2024 20:16:25 +1000 Subject: [PATCH 25/87] =?UTF-8?q?=D0=A3=D0=B1=D1=80=D0=B0=D0=BD=20=D0=BB?= =?UTF-8?q?=D0=B8=D1=88=D0=BD=D0=B8=D0=B9=20include.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/MPCBEShellExt/MPCBEContextMenu.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp b/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp index fcd8e25801..e45a97aba6 100644 --- a/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp +++ b/src/apps/MPCBEShellExt/MPCBEContextMenu.cpp @@ -22,7 +22,6 @@ #include #include #include -#include #include "MPCBEContextMenu.h" #define MPC_WND_CLASS_NAME L"MPC-BE" From 1388c764b46f64b26780e7f9e8491693ced16cd0 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 6 Feb 2024 22:10:28 +1000 Subject: [PATCH 26/87] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=20=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D1=8B=D0=B4=D1=83=D1=89=D0=B5=D0=BC=D1=83=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=83=20-=20=D1=83=D0=BB=D1=83=D1=87=D1=88?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B2=20Drag'n'Drop=20=D0=B8=20=D0=B2=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=B2=D0=BA=D0=B8=20=D0=B8=D0=B7=20=D0=B1=D1=83?= =?UTF-8?q?=D1=84=D0=B5=D1=80=D0=B0=20=D0=BE=D0=B1=D0=BC=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index c4d1140d8a..065f8ca5c8 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -1088,8 +1088,8 @@ DROPEFFECT CMainFrame::OnDragOver(COleDataObject* pDataObject, DWORD dwKeyState, BOOL CMainFrame::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoint point) { BOOL bResult = FALSE; - CLIPFORMAT cfFormat = 0; + auto& s = AfxGetAppSettings(); if (pDataObject->IsDataAvailable(CF_URLW)) { cfFormat = CF_URLW; @@ -1102,8 +1102,8 @@ BOOL CMainFrame::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoi UINT nFiles = ::DragQueryFileW(hDrop, UINT_MAX, nullptr, 0); for (UINT iFile = 0; iFile < nFiles; iFile++) { CString fn; - fn.ReleaseBuffer(::DragQueryFileW(hDrop, iFile, fn.GetBuffer(MAX_PATH), MAX_PATH)); - slFiles.emplace_back(fn); + fn.ReleaseBuffer(::DragQueryFileW(hDrop, iFile, fn.GetBuffer(2048), 2048)); + slFiles.emplace_back(s.ParseFileName(fn)); } ::DragFinish(hDrop); DropFiles(slFiles); @@ -1134,8 +1134,9 @@ BOOL CMainFrame::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoi std::list lines; Explode(text, lines, L'\n'); for (const auto& line : lines) { - if (::PathIsURLW(line) || ::PathFileExistsW(line)) { - slFiles.emplace_back(line); + auto path = s.ParseFileName(line); + if (::PathIsURLW(path) || ::PathFileExistsW(path)) { + slFiles.emplace_back(path); } } } @@ -16085,7 +16086,7 @@ void CMainFrame::SetAlwaysOnTop(int i) ShowWindow(SW_SHOWNA); } SetWindowPos(pInsertAfter, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); - } + } } else if (bD3DOnMain) { SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_NOACTIVATE); } @@ -20570,6 +20571,7 @@ void CMainFrame::StartAutoHideCursor() const bool CMainFrame::GetFromClipboard(std::list& sl) const { + auto& s = AfxGetAppSettings(); sl.clear(); if (::IsClipboardFormatAvailable(CF_UNICODETEXT) && ::OpenClipboard(m_hWnd)) { @@ -20582,8 +20584,9 @@ const bool CMainFrame::GetFromClipboard(std::list& sl) const std::list lines; Explode(text, lines, L'\n'); for (const auto& line : lines) { - if (::PathIsURLW(line) || ::PathFileExistsW(line)) { - sl.emplace_back(line); + auto path = s.ParseFileName(line); + if (::PathIsURLW(path) || ::PathFileExistsW(path)) { + sl.emplace_back(path); } } } @@ -20597,7 +20600,7 @@ const bool CMainFrame::GetFromClipboard(std::list& sl) const UINT nFiles = ::DragQueryFileW(hDrop, UINT_MAX, nullptr, 0); for (UINT iFile = 0; iFile < nFiles; iFile++) { CString fn; - fn.ReleaseBuffer(::DragQueryFileW(hDrop, iFile, fn.GetBuffer(MAX_PATH), MAX_PATH)); + fn.ReleaseBuffer(::DragQueryFileW(hDrop, iFile, fn.GetBuffer(2048), 2048)); sl.emplace_back(fn); } GlobalUnlock(hglb); From 2ed51dd73c02e4de3c976eadc03a28b21111c6c0 Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 6 Feb 2024 20:41:38 +0300 Subject: [PATCH 27/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B2=D0=B5=D0=BD=D0=B3=D0=B5=D1=80=D1=81=D0=BA?= =?UTF-8?q?=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(?= =?UTF-8?q?=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20mickey).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.hu.rc | 2 +- src/apps/mpcresources/text/mplayerc.hu.rc.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.hu.rc b/src/apps/mpcresources/mplayerc.hu.rc index d3b5e4a33f..71d3bd196a 100644 --- a/src/apps/mpcresources/mplayerc.hu.rc +++ b/src/apps/mpcresources/mplayerc.hu.rc @@ -3169,7 +3169,7 @@ END STRINGTABLE BEGIN - IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_BLOCK_EXTERNAL_VR "A %s nem adható hozzá külső szűrőként.\nA Videóbeállítások oldalon válassza ki a kívánt videómegjelenítőt." END STRINGTABLE diff --git a/src/apps/mpcresources/text/mplayerc.hu.rc.txt b/src/apps/mpcresources/text/mplayerc.hu.rc.txt index f169a2a9e7..11b234121e 100644 --- a/src/apps/mpcresources/text/mplayerc.hu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hu.rc.txt @@ -1347,7 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Nem sikerült a tuner és a vevőkész STRING IDS_BDA_ERROR_CREATE_RECEIVER "Nem sikerült létrehozni a vevőt." STRING IDS_BDA_ERROR_CREATE_TUNER "Nem sikerült létrehozni a tunert." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Nem sikerült létrehozni a demultiplexert." -STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." +STRING IDS_BLOCK_EXTERNAL_VR "A %s nem adható hozzá külső szűrőként.\nA Videóbeállítások oldalon válassza ki a kívánt videómegjelenítőt." STRING IDS_BRIGHTNESS_DEC "Fényerő csökkentése" STRING IDS_BRIGHTNESS_INC "Fényerő növelése" STRING IDS_CANCEL "Mégse" From fe7d50a8ae66d0683efe881df5e7da8a2234ca34 Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 6 Feb 2024 20:50:45 +0300 Subject: [PATCH 28/87] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=BE=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BD=D0=B5=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B9=20=D0=BF=D0=BE=D0=B4?= =?UTF-8?q?=D1=81=D0=BA=D0=B0=D0=B7=D0=BA=D0=B8=20=D0=BF=D0=BE=D1=81=D0=BB?= =?UTF-8?q?=D0=B5=20=D0=B2=D1=8B=D0=B1=D0=BE=D1=80=D0=B0=20"MPC=20Video=20?= =?UTF-8?q?Renderer".=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BE=D1=87=D0=B5=D0=BD=D1=8C=20=D0=BA=D1=80=D0=B0?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=D1=8F=20=D0=BF=D0=BE=D0=B4=D1=81=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20=D1=8D=D1=82=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE=D1=80=D0=B5=D0=BD?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=B5=D1=80=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.br.rc | 1 + src/apps/mpcresources/mplayerc.by.rc | 1 + src/apps/mpcresources/mplayerc.ca.rc | 1 + src/apps/mpcresources/mplayerc.cz.rc | 1 + src/apps/mpcresources/mplayerc.de.rc | 1 + src/apps/mpcresources/mplayerc.el.rc | 1 + src/apps/mpcresources/mplayerc.es.rc | 1 + src/apps/mpcresources/mplayerc.eu.rc | 1 + src/apps/mpcresources/mplayerc.fr.rc | 1 + src/apps/mpcresources/mplayerc.he.rc | 1 + src/apps/mpcresources/mplayerc.hr.rc | 1 + src/apps/mpcresources/mplayerc.hu.rc | 1 + src/apps/mpcresources/mplayerc.hy.rc | 1 + src/apps/mpcresources/mplayerc.it.rc | 1 + src/apps/mpcresources/mplayerc.ja.rc | 1 + src/apps/mpcresources/mplayerc.kr.rc | 1 + src/apps/mpcresources/mplayerc.nl.rc | 1 + src/apps/mpcresources/mplayerc.pl.rc | 1 + src/apps/mpcresources/mplayerc.ro.rc | 1 + src/apps/mpcresources/mplayerc.ru.rc | 1 + src/apps/mpcresources/mplayerc.sc.rc | 1 + src/apps/mpcresources/mplayerc.sk.rc | 1 + src/apps/mpcresources/mplayerc.sv.rc | 1 + src/apps/mpcresources/mplayerc.tc.rc | 1 + src/apps/mpcresources/mplayerc.tr.rc | 1 + src/apps/mpcresources/mplayerc.ua.rc | 1 + src/apps/mpcresources/text/mplayerc.br.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.by.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ca.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.cz.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.de.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.el.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.es.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.eu.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.fr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.he.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.hr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.hu.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.hy.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.it.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ja.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.kr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.nl.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.pl.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ro.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ru.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.sc.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.sk.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.sv.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.tc.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.tr.rc.txt | 1 + src/apps/mpcresources/text/mplayerc.ua.rc.txt | 1 + src/apps/mplayerc/PPageVideo.cpp | 1 + src/apps/mplayerc/mplayerc.rc | 1 + src/apps/mplayerc/resource.h | 1 + 56 files changed, 56 insertions(+) diff --git a/src/apps/mpcresources/mplayerc.br.rc b/src/apps/mpcresources/mplayerc.br.rc index fc91317499..cc49b20313 100644 --- a/src/apps/mpcresources/mplayerc.br.rc +++ b/src/apps/mpcresources/mplayerc.br.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Igual ao EVR, mas com o Alocador-Apresentador para legendagem e pós-processamento." IDS_DESC_MADVR "Renderizador de alta qualidade, requer uma GPU que suporte D3D9 ou posterior." IDS_DESC_EVR_SYNC "Igual ao EVR (CP), mas oferece várias opções para sincronizar a taxa de quadros do vídeo com a taxa de atualização da tela para eliminar os quadros de vídeo ignorados ou duplicados." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.by.rc b/src/apps/mpcresources/mplayerc.by.rc index e62eb379dd..e64414e64c 100644 --- a/src/apps/mpcresources/mplayerc.by.rc +++ b/src/apps/mpcresources/mplayerc.by.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.ca.rc b/src/apps/mpcresources/mplayerc.ca.rc index b097113aa6..32de937f48 100644 --- a/src/apps/mpcresources/mplayerc.ca.rc +++ b/src/apps/mpcresources/mplayerc.ca.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.cz.rc b/src/apps/mpcresources/mplayerc.cz.rc index 9598966cdc..4472f4a20b 100644 --- a/src/apps/mpcresources/mplayerc.cz.rc +++ b/src/apps/mpcresources/mplayerc.cz.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.de.rc b/src/apps/mpcresources/mplayerc.de.rc index 53d4a69d8a..976710a814 100644 --- a/src/apps/mpcresources/mplayerc.de.rc +++ b/src/apps/mpcresources/mplayerc.de.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Wie der EVR, aber mit Allocator-Presenter für Untertitelung und Nachbearbeitung" IDS_DESC_MADVR "Qualitativ sehr hochwertiger Renderer, der eine Grafikkarte mit D3D9-Unterstützung (oder höher) benötigt." IDS_DESC_EVR_SYNC "Wie der EVR (custom presenter), bietet jedoch verschiedene Optionen zum Synchronisieren der Videobildrate mit der Bildwiederholrate des Anzeigegeräts, um übersprungene oder doppelte Videobilder zu vermeiden." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.el.rc b/src/apps/mpcresources/mplayerc.el.rc index 2fc42d3baa..9432944391 100644 --- a/src/apps/mpcresources/mplayerc.el.rc +++ b/src/apps/mpcresources/mplayerc.el.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Το ίδιο με το EVR, αλλά με το Allocator-Presenter για υποτιτλισμούς και μεταεπεξεργασία." IDS_DESC_MADVR "Υψηλής ποιότητας απόδοση, απαιτεί GPU που υποστηρίζει D3D9 ή μεταγενέστερη έκδοση." IDS_DESC_EVR_SYNC "Το ίδιο με το EVR (CP), αλλά προσφέρει πολλές επιλογές για συγχρονισμό του ρυθμού καρέ βίντεο με το ρυθμό ανανέωσης της οθόνης για την εξάλειψη των παραλείψεων ή των διπλών καρέ βίντεο." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.es.rc b/src/apps/mpcresources/mplayerc.es.rc index e8bd6ed7e5..3fc6c4e89b 100644 --- a/src/apps/mpcresources/mplayerc.es.rc +++ b/src/apps/mpcresources/mplayerc.es.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Igual que el EVR, pero con el Asignador-Presentador para subtitulado y postprocesado." IDS_DESC_MADVR "Renderizador de alta calidad, requiere una GPU que soporte D3D9 o posterior." IDS_DESC_EVR_SYNC "Igual que el EVR (CP), pero ofrece varias opciones para sincronizar la frecuencia de fotogramas de video con la frecuencia de actualización de pantalla para eliminar fotogramas de video omitidos o duplicados." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.eu.rc b/src/apps/mpcresources/mplayerc.eu.rc index 77da407d52..a31c8f3d82 100644 --- a/src/apps/mpcresources/mplayerc.eu.rc +++ b/src/apps/mpcresources/mplayerc.eu.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "Ontasun-handiko aurkezlea, D3D9 edo berriagoa sostengatzen duen GPU-a behar du." IDS_DESC_EVR_SYNC "EVR (CP)-ren berdina, baina aukera ugari eskaintzen ditu bideo frame neurria erakuspen berritze neurriarekin aldiberetzeko jauzitako edo bikoiztutako bideo frameak ezabatzeko." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.fr.rc b/src/apps/mpcresources/mplayerc.fr.rc index 1f253a3630..771c632e47 100644 --- a/src/apps/mpcresources/mplayerc.fr.rc +++ b/src/apps/mpcresources/mplayerc.fr.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Identique à l'EVR, mais avec l'Allocator-Presenter pour le sous-titrage et le post-traitement." IDS_DESC_MADVR "Moteur de rendu de haute qualité, nécessite un GPU prenant en charge D3D9 ou version ultérieure." IDS_DESC_EVR_SYNC "Identique à l'EVR (CP), mais offre plusieurs options pour synchroniser la fréquence d'images vidéo avec la fréquence de rafraîchissement de l'affichage afin d'éliminer les images vidéo sautées ou dupliquées." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.he.rc b/src/apps/mpcresources/mplayerc.he.rc index 73609eb492..b5014fd766 100644 --- a/src/apps/mpcresources/mplayerc.he.rc +++ b/src/apps/mpcresources/mplayerc.he.rc @@ -3179,6 +3179,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.hr.rc b/src/apps/mpcresources/mplayerc.hr.rc index 4a1515431e..1de5076734 100644 --- a/src/apps/mpcresources/mplayerc.hr.rc +++ b/src/apps/mpcresources/mplayerc.hr.rc @@ -3179,6 +3179,7 @@ BEGIN IDS_DESC_EVR_CP "Jednako kao EVR, uz Allocator-Presenter za podnaslove i postprocesing." IDS_DESC_MADVR "Visoko-kvalitetni render, zahtjeva GPU koji podržava D3D9 ili kasnije." IDS_DESC_EVR_SYNC "Jednako kao EVR (CP), uz nekoliko mogućnosti za sinkronizaciju video sličica skladnu vrijednosti osvježenja na monitoru za poništenje preskočenih ili udvostručenih sličica." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.hu.rc b/src/apps/mpcresources/mplayerc.hu.rc index 71d3bd196a..edca12491e 100644 --- a/src/apps/mpcresources/mplayerc.hu.rc +++ b/src/apps/mpcresources/mplayerc.hu.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Ugyanaz, mint az EVR, de az Allocator-Presenterrel a feliratozáshoz és az utófeldolgozáshoz." IDS_DESC_MADVR "Kiváló minőségű megjelenítőhöz olyan GPU szükséges, amely támogatja a D3D9 vagy újabb verziókat." IDS_DESC_EVR_SYNC "Ugyanaz, mint az EVR (CP), de számos lehetőséget kínál a képkocka sebességének szinkronizálására a képernyő frissítési gyakoriságával, hogy kiküszöbölje a kihagyott vagy duplikált képkockákat." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.hy.rc b/src/apps/mpcresources/mplayerc.hy.rc index 6efdf2287b..3652a0e1b5 100644 --- a/src/apps/mpcresources/mplayerc.hy.rc +++ b/src/apps/mpcresources/mplayerc.hy.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.it.rc b/src/apps/mpcresources/mplayerc.it.rc index 9263bf0086..a175c88874 100644 --- a/src/apps/mpcresources/mplayerc.it.rc +++ b/src/apps/mpcresources/mplayerc.it.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Come l'EVR, ma con Allocator-Presenter per la sottotitolazione e la postelaborazione." IDS_DESC_MADVR "Rendering di alta qualità, richiede una GPU che supporti D3D9 o successivo." IDS_DESC_EVR_SYNC "Come il EVR (CP), ma offre diverse opzioni per sincronizzare il video frame rate con la frequenza di aggiornamento display per eliminare video frame duplicati." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index 3f936efa0a..a8bb1ab340 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "EVR と同じですが、字幕と後処理のためにアロケーター プレゼンターを使用します。" IDS_DESC_MADVR "高品質なレンダラーで、D3D9 以降に対応した GPU が必要です。" IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、ディスプレイのリフレッシュ レートと動画のフレーム レートを同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.kr.rc b/src/apps/mpcresources/mplayerc.kr.rc index 89d146b78c..f80e7222e5 100644 --- a/src/apps/mpcresources/mplayerc.kr.rc +++ b/src/apps/mpcresources/mplayerc.kr.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "EVR과 다름없지만, 자막 및 후처리를 위해 할당자-발표자를 사용합니다." IDS_DESC_MADVR "고품질 렌더러, D3D9 이상을 지원하는 GPU 필요." IDS_DESC_EVR_SYNC "EVR(CP)와 다름없지만, 스킵되거나 중복된 영상 프레임을 제거하기 위한 디스플레이 주사율과 비디오 프레임율을 동기화해주는 여러 옵션 제공" + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.nl.rc b/src/apps/mpcresources/mplayerc.nl.rc index c0aa807c3b..f4bdff27d3 100644 --- a/src/apps/mpcresources/mplayerc.nl.rc +++ b/src/apps/mpcresources/mplayerc.nl.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Hetzelfde als EVR, maar met de Allocator-Presenter plugin voor ondertiteling en nabewerking." IDS_DESC_MADVR "Renderer in hoge kwaliteit, vereist een GPU die D3D9 of hoger ondersteunt." IDS_DESC_EVR_SYNC "Hetzelfde als EVR (CP), maar biedt een paar opties om de framesnelheid en vernieuwingsfrequentie te synchroniseren. Deze kan het aantal overgeslagen of gedupliceerd videoframes verminderen." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.pl.rc b/src/apps/mpcresources/mplayerc.pl.rc index e78a40bdff..57aa783437 100644 --- a/src/apps/mpcresources/mplayerc.pl.rc +++ b/src/apps/mpcresources/mplayerc.pl.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "Renderer wysokiej jakości obrazu, wymaga GPU wspierającego D3D9 lub nowszych." IDS_DESC_EVR_SYNC "Działa tak samo jak EVR (CP), ale ponadto oferuje kilka funkcji synchronizacji prędkości klatek z prędkością odświeżania wyświetlacza w celu zlikwidowania problemu opuszczania bądź powielania klatek wideo podczas odtwarzania." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.ro.rc b/src/apps/mpcresources/mplayerc.ro.rc index ffbdd1fb1b..f155ca949c 100644 --- a/src/apps/mpcresources/mplayerc.ro.rc +++ b/src/apps/mpcresources/mplayerc.ro.rc @@ -3180,6 +3180,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "Randor de înaltă calitate, necesită un GPU care acceptă D3D9 sau o versiune ulterioară." IDS_DESC_EVR_SYNC "La fel ca și la EVR (CP), dar oferă multe opțiune pentru a sincroniza rata de cadre video cu rata de reîmprospătare a afișajului pentru a elimina cadrele video sărite sau duplicate." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.ru.rc b/src/apps/mpcresources/mplayerc.ru.rc index 62fd0ce0dd..f3c9df1cea 100644 --- a/src/apps/mpcresources/mplayerc.ru.rc +++ b/src/apps/mpcresources/mplayerc.ru.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "То же, что и EVR, но использует Allocator-Presenter для субтитров и обработки." IDS_DESC_MADVR "Высококачественный рендерер, требуется видеокарта с поддержкой D3D9." IDS_DESC_EVR_SYNC "То же, что EVR (CP), но имеет дополнительные средства для синхронизации частоты кадров с частотой обновления экрана." + IDS_DESC_MPC_VR "Видеорендерер с поддержкой Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index 9718cb4c56..f54004bc7d 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "和 EVR 相同,但依托分配管理器负担显示字幕并进行后处理。" IDS_DESC_MADVR "高品渲染器,需要支持 Direct3D 9 或更新版本的显卡。" IDS_DESC_EVR_SYNC "与 EVR (自定义) 相同, 但提供了几个选项来同步显示刷新率,用以减少视频中被丢弃与重复的帧。" + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.sk.rc b/src/apps/mpcresources/mplayerc.sk.rc index 16e9ec89e1..dbe070e6df 100644 --- a/src/apps/mpcresources/mplayerc.sk.rc +++ b/src/apps/mpcresources/mplayerc.sk.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.sv.rc b/src/apps/mpcresources/mplayerc.sv.rc index cc6cd2edef..c759c7b4a1 100644 --- a/src/apps/mpcresources/mplayerc.sv.rc +++ b/src/apps/mpcresources/mplayerc.sv.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.tc.rc b/src/apps/mpcresources/mplayerc.tc.rc index c4e7ec4cf1..3c71e16b46 100644 --- a/src/apps/mpcresources/mplayerc.tc.rc +++ b/src/apps/mpcresources/mplayerc.tc.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "和 EVR 相同,但藉助配置呈現器顯示字幕及進行後期處理。" IDS_DESC_MADVR "高品質繪製器,需要支援 Direct3D 9 或更新版本的顯示卡。" IDS_DESC_EVR_SYNC "與 EVR 自訂呈現 相同,但提供額外選項來同步化影格速率及顯示器更新頻率,以減少被丟棄或重複的影格。" + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index b4696cc04a..53f934f2df 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "GVİ ile aynıdır, ancak alt yazı ve son işleme için Bölüştürücü-Sunucu ile birlikte çalışır." IDS_DESC_MADVR "Yüksek kaliteli bir işleyicidir. D3D9 ya da daha sonrasını destekleyen bir ekran kartı gerektirir." IDS_DESC_EVR_SYNC "GVİ (ÖS) ile aynıdır, ancak atlanan ya da çoğaltılan video karelerini ortadan kaldırmak için video kare hızını ekran yenileme hızı ile senkronize etmek için çeşitli seçenekler sunar." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.ua.rc b/src/apps/mpcresources/mplayerc.ua.rc index 92504b2247..cb5dad52bc 100644 --- a/src/apps/mpcresources/mplayerc.ua.rc +++ b/src/apps/mpcresources/mplayerc.ua.rc @@ -3181,6 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Так само як і EVR, але з Allocator-Presenter для відображення субтитрів і виконання післяобробки." IDS_DESC_MADVR "Високоякісний рендерер, вимагає GPU, що підтримує D3D9 або пізніший." IDS_DESC_EVR_SYNC "Так само як і EVR (користув.), але має опції для синхронізування частоти кадрів відео з частотою поновлення екрану для уникнення пропущенних або тих, що дублюються, кадрів відео." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/text/mplayerc.br.rc.txt b/src/apps/mpcresources/text/mplayerc.br.rc.txt index 35488a6e05..936cfeb2ac 100644 --- a/src/apps/mpcresources/text/mplayerc.br.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.br.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Igual ao EVR, mas com o Alocador-Apresentador para lege STRING IDS_DESC_EVR_SYNC "Igual ao EVR (CP), mas oferece várias opções para sincronizar a taxa de quadros do vídeo com a taxa de atualização da tela para eliminar os quadros de vídeo ignorados ou duplicados." STRING IDS_DESC_HAALI_VR "Parece VMR-9, mas usa um redimensionador bicúbico verdadeiro." STRING IDS_DESC_MADVR "Renderizador de alta qualidade, requer uma GPU que suporte D3D9 ou posterior." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Conecta-se a qualquer tipo de mídia de vídeo e enviará as amostras a lugar nenhum. Use-o quando não precisar ver o vídeo e quiser evitar o uso da CPU desnecessariamente." STRING IDS_DESC_NULLVR_UNCOMP "Igual ao renderizador nulo normal, mas só se conectará a tipos não comprimido." STRING IDS_DISABLE_ALL_FILTERS "&Desativar todos os filtros" diff --git a/src/apps/mpcresources/text/mplayerc.by.rc.txt b/src/apps/mpcresources/text/mplayerc.by.rc.txt index b0d402df94..7afa93f36c 100644 --- a/src/apps/mpcresources/text/mplayerc.by.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.by.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Падлучаецца да любога тыпу відэададзеных і адсылае ўваходныя кадры ў нікуды. Рэжым можа спатрэбіцца для захавання рэсурсаў працэсара ў выпадку калі патрэбны толькі гук." STRING IDS_DESC_NULLVR_UNCOMP "Тое ж што і нармалёвы Null-рэндэр, але падлучаецца толькі да несціснутых тыпаў дадзеных." STRING IDS_DISABLE_ALL_FILTERS "&Адключыць усе фільтры" diff --git a/src/apps/mpcresources/text/mplayerc.ca.rc.txt b/src/apps/mpcresources/text/mplayerc.ca.rc.txt index 2ce2edae9e..b9d9cc90cc 100644 --- a/src/apps/mpcresources/text/mplayerc.ca.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ca.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Conecta a cualsevol tipus de mitjà de vídeo i manda les mostres a cap lloc. Utilitza'l quant no necesitis veure el vídeo, i vulguis evitar l'ús no necessari de la cpu." STRING IDS_DESC_NULLVR_UNCOMP "Igual que el renderitzador null normal, perè només conectarà a tipus sense compresió." STRING IDS_DISABLE_ALL_FILTERS "&Desactivar tots els filtres" diff --git a/src/apps/mpcresources/text/mplayerc.cz.rc.txt b/src/apps/mpcresources/text/mplayerc.cz.rc.txt index d608bc6a4c..620a26e51b 100644 --- a/src/apps/mpcresources/text/mplayerc.cz.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.cz.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Připojí se k jakémukoliv typu videa a začne všechny vstupní vzorky zahazovat. Použijte ho pokud nepotřebujete video zobrazit a chcete ušetřit výkon procesoru." STRING IDS_DESC_NULLVR_UNCOMP "Stejný jako běžný Null renderer, ale tento se připojí pouze k nekomprimovaným typům videa." STRING IDS_DISABLE_ALL_FILTERS "&Zakázat všechny filtry" diff --git a/src/apps/mpcresources/text/mplayerc.de.rc.txt b/src/apps/mpcresources/text/mplayerc.de.rc.txt index adcc1d00d6..7b09775162 100644 --- a/src/apps/mpcresources/text/mplayerc.de.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.de.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Wie der EVR, aber mit Allocator-Presenter für Untertit STRING IDS_DESC_EVR_SYNC "Wie der EVR (custom presenter), bietet jedoch verschiedene Optionen zum Synchronisieren der Videobildrate mit der Bildwiederholrate des Anzeigegeräts, um übersprungene oder doppelte Videobilder zu vermeiden." STRING IDS_DESC_HAALI_VR "Ähnelt dem VMR-9, verwendet aber einen echten bikubischen Resizer." STRING IDS_DESC_MADVR "Qualitativ sehr hochwertiger Renderer, der eine Grafikkarte mit D3D9-Unterstützung (oder höher) benötigt." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Stellt eine Verbindung zu allen videoartigen Medientypen her und sendet die eingehenden Samples ins Nichts. Sinnvoll, wenn keine Videoausgabe benötigt wird, um die CPU zu entlasten." STRING IDS_DESC_NULLVR_UNCOMP "Wie der normale Null-Renderer, kann aber nur mit unkomprimierten Videotypen verbunden werden." STRING IDS_DISABLE_ALL_FILTERS "Alle Filter &deaktivieren" diff --git a/src/apps/mpcresources/text/mplayerc.el.rc.txt b/src/apps/mpcresources/text/mplayerc.el.rc.txt index 8d1f7b9a70..026218ca61 100644 --- a/src/apps/mpcresources/text/mplayerc.el.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.el.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Το ίδιο με το EVR, αλλά με το Allocat STRING IDS_DESC_EVR_SYNC "Το ίδιο με το EVR (CP), αλλά προσφέρει πολλές επιλογές για συγχρονισμό του ρυθμού καρέ βίντεο με το ρυθμό ανανέωσης της οθόνης για την εξάλειψη των παραλείψεων ή των διπλών καρέ βίντεο." STRING IDS_DESC_HAALI_VR "Μοιάζει με VMR-9, αλλά χρησιμοποιεί ένα πραγματικό δικυβικό resizer." STRING IDS_DESC_MADVR "Υψηλής ποιότητας απόδοση, απαιτεί GPU που υποστηρίζει D3D9 ή μεταγενέστερη έκδοση." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Συνδέεται με οποιονδήποτε τύπο πολυμέσων βίντεο και στέλνει τα εισερχόμενα δείγματα στο πουθενά. Χρησιμοποιήστε το όταν δεν χρειάζεστε την εμφάνιση του βίντεο και θέλετε να εξοικονομήσετε επεξεργαστική ισχύ." STRING IDS_DESC_NULLVR_UNCOMP "Όμοια με την κανονική ψευδή απόδοση, αλλά αυτή συνδέεται μόνο σε μη συμπιεσμένους τύπους." STRING IDS_DISABLE_ALL_FILTERS "&Απενεργοποίηση όλων των φίλτρων" diff --git a/src/apps/mpcresources/text/mplayerc.es.rc.txt b/src/apps/mpcresources/text/mplayerc.es.rc.txt index 9f62d11b27..cada3a8a60 100644 --- a/src/apps/mpcresources/text/mplayerc.es.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.es.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Igual que el EVR, pero con el Asignador-Presentador par STRING IDS_DESC_EVR_SYNC "Igual que el EVR (CP), pero ofrece varias opciones para sincronizar la frecuencia de fotogramas de video con la frecuencia de actualización de pantalla para eliminar fotogramas de video omitidos o duplicados." STRING IDS_DESC_HAALI_VR "Se parece al VMR-9, pero usa un verdadero redimensionador bicúbico." STRING IDS_DESC_MADVR "Renderizador de alta calidad, requiere una GPU que soporte D3D9 o posterior." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Conecta a cualquier tipo de medio de video y manda las muestras a ningún lado. Utilízalo cuando no necesitas ver el video, y quieres evitar el uso de cpu innecesario." STRING IDS_DESC_NULLVR_UNCOMP "Igual que el renderizador Nulo normal, pero este solo conectará a tipos sin compresión." STRING IDS_DISABLE_ALL_FILTERS "&Desactivar todos los filtros" diff --git a/src/apps/mpcresources/text/mplayerc.eu.rc.txt b/src/apps/mpcresources/text/mplayerc.eu.rc.txt index ad26558e5d..c1202a1bca 100644 --- a/src/apps/mpcresources/text/mplayerc.eu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.eu.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "EVR (CP)-ren berdina, baina aukera ugari eskaintzen ditu bideo frame neurria erakuspen berritze neurriarekin aldiberetzeko jauzitako edo bikoiztutako bideo frameak ezabatzeko." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "Ontasun-handiko aurkezlea, D3D9 edo berriagoa sostengatzen duen GPU-a behar du." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Edozein bideo-erako multimedia motarekin elkarketatzen da eta barrurako laginak inora ez bidaliko ditu. Erabili bideo erakuspenik behar ez duzunean eta cpu-a gordetzea nahi duzunean alperrik lan egitetik." STRING IDS_DESC_NULLVR_UNCOMP "Null aurkezle arrunta bezalakoa, baina honek hertsatugabeko motak bakarrik elkartzen ditu." STRING IDS_DISABLE_ALL_FILTERS "E&zgaitu iragazki guztiak" diff --git a/src/apps/mpcresources/text/mplayerc.fr.rc.txt b/src/apps/mpcresources/text/mplayerc.fr.rc.txt index 7e02a65a0a..f68d0b34c9 100644 --- a/src/apps/mpcresources/text/mplayerc.fr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.fr.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Identique à l'EVR, mais avec l'Allocator-Presenter pou STRING IDS_DESC_EVR_SYNC "Identique à l'EVR (CP), mais offre plusieurs options pour synchroniser la fréquence d'images vidéo avec la fréquence de rafraîchissement de l'affichage afin d'éliminer les images vidéo sautées ou dupliquées." STRING IDS_DESC_HAALI_VR "Ressemble à VMR-9, mais utilise un véritable redimensionneur bicubique." STRING IDS_DESC_MADVR "Moteur de rendu de haute qualité, nécessite un GPU prenant en charge D3D9 ou version ultérieure." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Connection vers n'importe quel type de média vidéo et enverra l'exemple entrant vers nul part. Utilisez le quand vous n'avez pas besoin de l'affichage vidéo and que vous voulez garder des ressources processeur et éviter de le faire travailler inutilement." STRING IDS_DESC_NULLVR_UNCOMP "Identique au rendu normal Null, mais ne se connectera qu'à des types non compressés." STRING IDS_DISABLE_ALL_FILTERS "&Désactiver tous les filtres" diff --git a/src/apps/mpcresources/text/mplayerc.he.rc.txt b/src/apps/mpcresources/text/mplayerc.he.rc.txt index 5e642fdc11..d104a424fe 100644 --- a/src/apps/mpcresources/text/mplayerc.he.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.he.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "מתחבר לכל סוג מדיה דומה לוידאו וישלח את הדגימות הנכנסות לשום מקום. השתמש בזה כאשר אינך זקוק לתצוגת וידאו ואתה רוצה לחסוך עבודה מיותרת של המעבד." STRING IDS_DESC_NULLVR_UNCOMP "כמו מציג ה-Null הרגיל, אך זה יתחבר רק לסוגים לא מכווצים." STRING IDS_DISABLE_ALL_FILTERS "כבה את כל הפילטרים" diff --git a/src/apps/mpcresources/text/mplayerc.hr.rc.txt b/src/apps/mpcresources/text/mplayerc.hr.rc.txt index 04f4b369e5..54ded2cc1c 100644 --- a/src/apps/mpcresources/text/mplayerc.hr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hr.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Jednako kao EVR, uz Allocator-Presenter za podnaslove i STRING IDS_DESC_EVR_SYNC "Jednako kao EVR (CP), uz nekoliko mogućnosti za sinkronizaciju video sličica skladnu vrijednosti osvježenja na monitoru za poništenje preskočenih ili udvostručenih sličica." STRING IDS_DESC_HAALI_VR "Izgleda poput VMR-9, ali koristi stvaran dvokubični mijenjač veličine." STRING IDS_DESC_MADVR "Visoko-kvalitetni render, zahtjeva GPU koji podržava D3D9 ili kasnije." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Povezuje se na bilo koji video-liki tip medija i pristigle uzorke šalje u prazno. Koristite kad nemate potrebu za zaslonom i želite uštedjeti CPU od praznog hoda." STRING IDS_DESC_NULLVR_UNCOMP "Jednako kao normalan Null render, jedino što se ovaj povezuje na nekomprimirane tipove." STRING IDS_DISABLE_ALL_FILTERS "&Onemogući sve filtere" diff --git a/src/apps/mpcresources/text/mplayerc.hu.rc.txt b/src/apps/mpcresources/text/mplayerc.hu.rc.txt index 11b234121e..815c63df9c 100644 --- a/src/apps/mpcresources/text/mplayerc.hu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hu.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Ugyanaz, mint az EVR, de az Allocator-Presenterrel a fe STRING IDS_DESC_EVR_SYNC "Ugyanaz, mint az EVR (CP), de számos lehetőséget kínál a képkocka sebességének szinkronizálására a képernyő frissítési gyakoriságával, hogy kiküszöbölje a kihagyott vagy duplikált képkockákat." STRING IDS_DESC_HAALI_VR "Úgy néz ki, mint a VMR-9, de valódi bicubic átméretezőt használ." STRING IDS_DESC_MADVR "Kiváló minőségű megjelenítőhöz olyan GPU szükséges, amely támogatja a D3D9 vagy újabb verziókat." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Minden videószerű médiatípushoz csatlakozni fog és a bejövő mintákat nem küldi ki sehová. Ezt akkor válassza, ha a videómegjelenítésre nincs szüksége és meg szeretné kímélni a processzorát a felesleges munkától." STRING IDS_DESC_NULLVR_UNCOMP "Ugyan az, mint a sima Null átalakító, de ez csak tömörítetlen típusokhoz fog csatlakozni." STRING IDS_DISABLE_ALL_FILTERS "&Összes szűrő tiltása" diff --git a/src/apps/mpcresources/text/mplayerc.hy.rc.txt b/src/apps/mpcresources/text/mplayerc.hy.rc.txt index 63b0992354..1afed5d108 100644 --- a/src/apps/mpcresources/text/mplayerc.hy.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hy.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Միանում է ցանկացած տեսակի տեսատվյալների և մտնող կադրերը ոչ մի տեղ չի ուղարկում։ Այս եղանակը կարող է օգտակար լինել, եթե անհրաժեշտ է պահպանել ռեսուրսներից միայն ձայնը։" STRING IDS_DESC_NULLVR_UNCOMP "Նույնն է ինչ Նորմալ Null ցուցադրիչը, բայց միացվում է միայն տվյալների չսեղմված տեսակին։" STRING IDS_DISABLE_ALL_FILTERS "&Անջատել բոլոր ֆիլտրերը" diff --git a/src/apps/mpcresources/text/mplayerc.it.rc.txt b/src/apps/mpcresources/text/mplayerc.it.rc.txt index 060d9a9916..2497a4fc89 100644 --- a/src/apps/mpcresources/text/mplayerc.it.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.it.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Come l'EVR, ma con Allocator-Presenter per la sottotito STRING IDS_DESC_EVR_SYNC "Come il EVR (CP), ma offre diverse opzioni per sincronizzare il video frame rate con la frequenza di aggiornamento display per eliminare video frame duplicati." STRING IDS_DESC_HAALI_VR "Sembra VMR-9, ma usa un vero ridimensionatore bicubico." STRING IDS_DESC_MADVR "Rendering di alta qualità, richiede una GPU che supporti D3D9 o successivo." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Si collega a qualsiasi tipo di supporto simile a un video e non invierà i campioni in arrivo da nessuna parte. Usalo quando non hai bisogno del display video e vuoi evitare che la CPU funzioni inutilmente." STRING IDS_DESC_NULLVR_UNCOMP "Come il normale renderer Null, ma questo si collegherà solo ai tipi non compressi." STRING IDS_DISABLE_ALL_FILTERS "&Disattiva tutti i filtri" diff --git a/src/apps/mpcresources/text/mplayerc.ja.rc.txt b/src/apps/mpcresources/text/mplayerc.ja.rc.txt index f55e3667ec..af777a4799 100644 --- a/src/apps/mpcresources/text/mplayerc.ja.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ja.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "EVR と同じですが、字幕と後処理のために STRING IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、ディスプレイのリフレッシュ レートと動画のフレーム レートを同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" STRING IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" STRING IDS_DESC_MADVR "高品質なレンダラーで、D3D9 以降に対応した GPU が必要です。" +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "あらゆる動画の (ような) メディア タイプに接続して入力サンプルをどこにも出力しません。映像の表示を必要とせず、CPU を無駄な動作から節約したい場合に使用してください。" STRING IDS_DESC_NULLVR_UNCOMP "標準の Null レンダラーと同じですが、これは非圧縮タイプにのみ接続します。" STRING IDS_DISABLE_ALL_FILTERS "すべてのフィルターを無効にする(&D)" diff --git a/src/apps/mpcresources/text/mplayerc.kr.rc.txt b/src/apps/mpcresources/text/mplayerc.kr.rc.txt index cc0e3577e3..bd797b97f5 100644 --- a/src/apps/mpcresources/text/mplayerc.kr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.kr.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "EVR과 다름없지만, 자막 및 후처리를 위해 STRING IDS_DESC_EVR_SYNC "EVR(CP)와 다름없지만, 스킵되거나 중복된 영상 프레임을 제거하기 위한 디스플레이 주사율과 비디오 프레임율을 동기화해주는 여러 옵션 제공" STRING IDS_DESC_HAALI_VR "VMR-9과 다름없지만, 고등 차수 보간을 사용합니다." STRING IDS_DESC_MADVR "고품질 렌더러, D3D9 이상을 지원하는 GPU 필요." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "모든 비디오 형식의 샘플을 출력하지 않습니다. 비디오를 출력하지 않으면서 CPU가 작동하도록 할 때 사용합니다." STRING IDS_DESC_NULLVR_UNCOMP "일반적인 Null 렌더러와 다름없지만 압축되지 않은 형식만을 연결합니다." STRING IDS_DISABLE_ALL_FILTERS "모든 필터 사용 안 함(&D)" diff --git a/src/apps/mpcresources/text/mplayerc.nl.rc.txt b/src/apps/mpcresources/text/mplayerc.nl.rc.txt index a1b02c6c5b..fd3dbaf3dd 100644 --- a/src/apps/mpcresources/text/mplayerc.nl.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.nl.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Hetzelfde als EVR, maar met de Allocator-Presenter plug STRING IDS_DESC_EVR_SYNC "Hetzelfde als EVR (CP), maar biedt een paar opties om de framesnelheid en vernieuwingsfrequentie te synchroniseren. Deze kan het aantal overgeslagen of gedupliceerd videoframes verminderen." STRING IDS_DESC_HAALI_VR "Hetzelfde als VMR-9, maar met een echte bicubicresizer." STRING IDS_DESC_MADVR "Renderer in hoge kwaliteit, vereist een GPU die D3D9 of hoger ondersteunt." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Verbind met elk video-achtig mediatype en zal de inkomende signalen in het, grote dan wel kleine, niets zenden. Gebruik dit als geen uitvoersignaal nodig is en de om de CPU te ontlasten." STRING IDS_DESC_NULLVR_UNCOMP "Hetzelfde als de normale Null renderer, maar deze zal alleen verbinding maken met ongecomprimeerde types." STRING IDS_DISABLE_ALL_FILTERS "&Deactiveer alle filters" diff --git a/src/apps/mpcresources/text/mplayerc.pl.rc.txt b/src/apps/mpcresources/text/mplayerc.pl.rc.txt index 850022acad..8a08601bcf 100644 --- a/src/apps/mpcresources/text/mplayerc.pl.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.pl.rc.txt @@ -1432,6 +1432,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Działa tak samo jak EVR (CP), ale ponadto oferuje kilka funkcji synchronizacji prędkości klatek z prędkością odświeżania wyświetlacza w celu zlikwidowania problemu opuszczania bądź powielania klatek wideo podczas odtwarzania." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "Renderer wysokiej jakości obrazu, wymaga GPU wspierającego D3D9 lub nowszych." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Łączy z dowolnym formatem wideo i wysyła przychodzące próbki donikąd. Użycie wskazane, gdy strumień wideo nie musi być wyświetlany, dzięki czemu można zmniejszyć obciążenie CPU." STRING IDS_DESC_NULLVR_UNCOMP "Działa tak samo jak „Null renderer (anything)”, ale tylko odnośnie nieskompresowanych formatów." STRING IDS_DISABLE_ALL_FILTERS "&Wyłącz wszystkie filtry" diff --git a/src/apps/mpcresources/text/mplayerc.rc.txt b/src/apps/mpcresources/text/mplayerc.rc.txt index 2e7c6b63ba..f1e8153e2f 100644 --- a/src/apps/mpcresources/text/mplayerc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily." STRING IDS_DESC_NULLVR_UNCOMP "Same as the normal Null renderer, but this will only connect to uncompressed types." STRING IDS_DISABLE_ALL_FILTERS "&Disable all filters" diff --git a/src/apps/mpcresources/text/mplayerc.ro.rc.txt b/src/apps/mpcresources/text/mplayerc.ro.rc.txt index fdbdfd8528..7ae0381689 100644 --- a/src/apps/mpcresources/text/mplayerc.ro.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ro.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "La fel ca și la EVR (CP), dar oferă multe opțiune pentru a sincroniza rata de cadre video cu rata de reîmprospătare a afișajului pentru a elimina cadrele video sărite sau duplicate." STRING IDS_DESC_HAALI_VR "Arată ca VMR-9, dar folosește un redimensionator bicubic adevărat." STRING IDS_DESC_MADVR "Randor de înaltă calitate, necesită un GPU care acceptă D3D9 sau o versiune ulterioară." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Se conectează la orice mediu de tip video și mostrele video nu vor fi trimise niciunde. Folosiți-l când nu aveți nevoie de afișarea video și vreți să salvați procesorul de la o muncă inutilă." STRING IDS_DESC_NULLVR_UNCOMP "La fel ca randorul normal Null, dar acesta se va conecta doar la tipurile necomprimate." STRING IDS_DISABLE_ALL_FILTERS "&Dezactivează toate filtrele" diff --git a/src/apps/mpcresources/text/mplayerc.ru.rc.txt b/src/apps/mpcresources/text/mplayerc.ru.rc.txt index 84ada37a70..309837cf9d 100644 --- a/src/apps/mpcresources/text/mplayerc.ru.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ru.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "То же, что и EVR, но использует All STRING IDS_DESC_EVR_SYNC "То же, что EVR (CP), но имеет дополнительные средства для синхронизации частоты кадров с частотой обновления экрана." STRING IDS_DESC_HAALI_VR "Похож на VMR-9, но использует корректное бикубическое изменения размера." STRING IDS_DESC_MADVR "Высококачественный рендерер, требуется видеокарта с поддержкой D3D9." +STRING IDS_DESC_MPC_VR "Видеорендерер с поддержкой Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Подключается к любому типу видеоданных и отсылает входящие кадры в никуда. Режим может пригодиться для сохранения ресурсов процессора в случае, если нужен только звук." STRING IDS_DESC_NULLVR_UNCOMP "То же, что и нормальный Null-рендер, но подключается только к несжатым типам данных." STRING IDS_DISABLE_ALL_FILTERS "&Отключить все фильтры" diff --git a/src/apps/mpcresources/text/mplayerc.sc.rc.txt b/src/apps/mpcresources/text/mplayerc.sc.rc.txt index 699dbf6b7e..b49b56784e 100644 --- a/src/apps/mpcresources/text/mplayerc.sc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sc.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "和 EVR 相同,但依托分配管理器负担显示 STRING IDS_DESC_EVR_SYNC "与 EVR (自定义) 相同, 但提供了几个选项来同步显示刷新率,用以减少视频中被丢弃与重复的帧。" STRING IDS_DESC_HAALI_VR "与 VMR-9 类同, 但是使用真正的 bicubic 改变大小。" STRING IDS_DESC_MADVR "高品渲染器,需要支持 Direct3D 9 或更新版本的显卡。" +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "连接到任意视频文件类型并且会将进入的采样信息传送到任意地方。当您不需要显示视频并希望节省不必要的 cpu 工作时请使用它。" STRING IDS_DESC_NULLVR_UNCOMP "和普通的空渲染器相同, 但仅会被连接到未压缩的类型上。" STRING IDS_DISABLE_ALL_FILTERS "禁用全部滤镜(&D)" diff --git a/src/apps/mpcresources/text/mplayerc.sk.rc.txt b/src/apps/mpcresources/text/mplayerc.sk.rc.txt index 9bb06a1f9e..1cfa73f83f 100644 --- a/src/apps/mpcresources/text/mplayerc.sk.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sk.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Pripája sa k videu, neodosiela však prichádzajúce pakety. Môžete ho použiť vtedy, ak nepotrebujete obrazový výstup videa a chcete obmedziť zbytočnú prácu procesora." STRING IDS_DESC_NULLVR_UNCOMP "To isté, ako voľba Null renderer, ale spracovávať sa dajú iba nekomprimované súbory." STRING IDS_DISABLE_ALL_FILTERS "&Vypnúť všetky filtre" diff --git a/src/apps/mpcresources/text/mplayerc.sv.rc.txt b/src/apps/mpcresources/text/mplayerc.sv.rc.txt index 4b4f07d300..82d86792ad 100644 --- a/src/apps/mpcresources/text/mplayerc.sv.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sv.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for s STRING IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." STRING IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." STRING IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Ansluts till vilken som helst video-liknande media typ och kommer att skicka inkommande prover till ingenstans. Använd det när du inte behöver bildskärmen och vill spara cpu från att arbeta i onödan." STRING IDS_DESC_NULLVR_UNCOMP "Samma som de vanliga Null renderaren, men denna kommer endast att ansluta till okomprimerad typer." STRING IDS_DISABLE_ALL_FILTERS "&Disable all filters" diff --git a/src/apps/mpcresources/text/mplayerc.tc.rc.txt b/src/apps/mpcresources/text/mplayerc.tc.rc.txt index ffaa5f9410..5476f5ea2e 100644 --- a/src/apps/mpcresources/text/mplayerc.tc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tc.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "和 EVR 相同,但藉助配置呈現器顯示字幕 STRING IDS_DESC_EVR_SYNC "與 EVR 自訂呈現 相同,但提供額外選項來同步化影格速率及顯示器更新頻率,以減少被丟棄或重複的影格。" STRING IDS_DESC_HAALI_VR "和 VMR-9 類同,但使用眞正的 bicubic 變更大小。" STRING IDS_DESC_MADVR "高品質繪製器,需要支援 Direct3D 9 或更新版本的顯示卡。" +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "連到所有視訊媒體類型,並且不傳送傳入的取樣資料。當你不需要任何視訊顯示而又想節省不必要的 CPU 工作時可以使用。" STRING IDS_DESC_NULLVR_UNCOMP "與無繪製器相同,但只會連到未壓縮的類型。" STRING IDS_DISABLE_ALL_FILTERS "停用所有篩選器(&D)" diff --git a/src/apps/mpcresources/text/mplayerc.tr.rc.txt b/src/apps/mpcresources/text/mplayerc.tr.rc.txt index 5b504711f7..795d0f9140 100644 --- a/src/apps/mpcresources/text/mplayerc.tr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tr.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "GVİ ile aynıdır, ancak alt yazı ve son işleme içi STRING IDS_DESC_EVR_SYNC "GVİ (ÖS) ile aynıdır, ancak atlanan ya da çoğaltılan video karelerini ortadan kaldırmak için video kare hızını ekran yenileme hızı ile senkronize etmek için çeşitli seçenekler sunar." STRING IDS_DESC_HAALI_VR "VKİ-9 gibidir, ancak gerçek kübik boyutlandırıcı kullanır." STRING IDS_DESC_MADVR "Yüksek kaliteli bir işleyicidir. D3D9 ya da daha sonrasını destekleyen bir ekran kartı gerektirir." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Her video benzeri medya biçimine bağlanır ve dahili örnekleri bir yere göndermez. Video gösterimine ihtiyaç duymadığınız ve işlemciyi pek az kullanmak istediğiniz durumlarda bu seçeneği seçiniz." STRING IDS_DESC_NULLVR_UNCOMP "Boş işleyici ile aynıdır, ancak sadece sıkıştırılmamış biçimleri destekler." STRING IDS_DISABLE_ALL_FILTERS "&Tüm süzgeçleri devre dışı bırak" diff --git a/src/apps/mpcresources/text/mplayerc.ua.rc.txt b/src/apps/mpcresources/text/mplayerc.ua.rc.txt index ea711f5cd5..48cb284269 100644 --- a/src/apps/mpcresources/text/mplayerc.ua.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ua.rc.txt @@ -1435,6 +1435,7 @@ STRING IDS_DESC_EVR_CP "Так само як і EVR, але з Allocator-Presen STRING IDS_DESC_EVR_SYNC "Так само як і EVR (користув.), але має опції для синхронізування частоти кадрів відео з частотою поновлення екрану для уникнення пропущенних або тих, що дублюються, кадрів відео." STRING IDS_DESC_HAALI_VR "Так само як і VMR-9, але використовує справжній bicubic масштабувальник." STRING IDS_DESC_MADVR "Високоякісний рендерер, вимагає GPU, що підтримує D3D9 або пізніший." +STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Підключається до будь-якого типу відеоданих і відправляє вхідні кадри в нікуди. Може бути корисний для економії ресурсів процесора, якщо потрібен лише звук." STRING IDS_DESC_NULLVR_UNCOMP "Так само як нормальний Null-рендерер, але підключається лише до нестиснених даних." STRING IDS_DISABLE_ALL_FILTERS "&Вимкнути всі фільтри" diff --git a/src/apps/mplayerc/PPageVideo.cpp b/src/apps/mplayerc/PPageVideo.cpp index f49c2b21d0..f46782a398 100644 --- a/src/apps/mplayerc/PPageVideo.cpp +++ b/src/apps/mplayerc/PPageVideo.cpp @@ -472,6 +472,7 @@ void CPPageVideo::OnDSRendererChange() GetDlgItem(IDC_BUTTON1)->EnableWindow(IsRendererAvailable(CurrentVR) == S_OK ? TRUE : FALSE); break; case VIDRNDT_MPCVR: + m_wndToolTip.UpdateTipText(ResStr(IDS_DESC_MPC_VR), &m_cbVideoRenderer); m_chkMPCVRFullscreenControl.EnableWindow(TRUE); GetDlgItem(IDC_BUTTON1)->EnableWindow(IsRendererAvailable(CurrentVR) == S_OK ? TRUE : FALSE); break; diff --git a/src/apps/mplayerc/mplayerc.rc b/src/apps/mplayerc/mplayerc.rc index 87eb8a05a0..b47d950cd8 100644 --- a/src/apps/mplayerc/mplayerc.rc +++ b/src/apps/mplayerc/mplayerc.rc @@ -3197,6 +3197,7 @@ BEGIN IDS_DESC_EVR_CP "Same as the EVR, but with the Allocator-Presenter for subtitling and postprocessing." IDS_DESC_MADVR "High-quality renderer, requires a GPU that supports D3D9 or later." IDS_DESC_EVR_SYNC "Same as the EVR (CP), but offers several options to synchronize the video frame rate with the display refresh rate to eliminate skipped or duplicated video frames." + IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." END STRINGTABLE diff --git a/src/apps/mplayerc/resource.h b/src/apps/mplayerc/resource.h index 9daf7e2d9e..3ec548a396 100644 --- a/src/apps/mplayerc/resource.h +++ b/src/apps/mplayerc/resource.h @@ -991,6 +991,7 @@ #define IDS_DESC_EVR_CP 31011 #define IDS_DESC_MADVR 31012 #define IDS_DESC_EVR_SYNC 31013 +#define IDS_DESC_MPC_VR 31014 #define IDS_CMD_USAGE 32700 #define IDS_CMD_HELP 32701 #define IDS_CMD_DUB 32702 From 6e90ad14a4d42657712086a0b469f33ff6052dfb Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 7 Feb 2024 09:42:05 +1000 Subject: [PATCH 29/87] =?UTF-8?q?=D0=A3=D0=BB=D1=83=D1=87=D1=88=D0=B5?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BE=D1=82=D0=BA=D1=80=D1=8B=D1=82=D0=B8=D0=B5?= =?UTF-8?q?=20=D0=BF=D1=83=D1=82=D0=B5=D0=B9=20=D0=BD=D0=B0=D1=87=D0=B8?= =?UTF-8?q?=D0=BD=D0=B0=D1=8E=D1=89=D0=B8=D1=85=D1=81=D1=8F=20=D1=81=20"\\?= =?UTF-8?q?=3F\".=20=D0=9A=D0=BE=D1=81=D0=BC=D0=B5=D1=82=D0=B8=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BA=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/AppSettings.cpp | 59 +++++++++++++++---------------- src/apps/mplayerc/AppSettings.h | 7 ++-- src/apps/mplayerc/FGManager.cpp | 4 +-- src/apps/mplayerc/MainFrm.cpp | 8 ++--- 4 files changed, 39 insertions(+), 39 deletions(-) diff --git a/src/apps/mplayerc/AppSettings.cpp b/src/apps/mplayerc/AppSettings.cpp index 8c826de3a2..c462c8f708 100644 --- a/src/apps/mplayerc/AppSettings.cpp +++ b/src/apps/mplayerc/AppSettings.cpp @@ -2186,36 +2186,6 @@ void CAppSettings::ExtractDVDStartPos(CString& strParam) } } -CStringW CAppSettings::ParseFileName(const CStringW& param) -{ - if (param.Find(L':') < 0) { - // try to convert relative path to full path - CStringW fullPathName; - fullPathName.ReleaseBuffer(GetFullPathNameW(param, MAX_PATH, fullPathName.GetBuffer(MAX_PATH), nullptr)); - - CFileStatus fs; - if (!fullPathName.IsEmpty() && CFileGetStatus(fullPathName, fs)) { - return fullPathName; - } - } - else if (param.GetLength() > MAX_PATH && !::PathIsURLW(param) && !::PathIsUNCW(param)) { - // trying to shorten a long local path - CStringW longpath = StartsWith(param, L"\\\\?\\") ? param : L"\\\\?\\" + param; - auto length = GetShortPathNameW(longpath, nullptr, 0); - if (length > 0) { - CStringW shortPathName; - length = GetShortPathNameW(longpath, shortPathName.GetBuffer(length), length); - if (length > 0) { - shortPathName.ReleaseBuffer(length); - shortPathName.Delete(0, 4); // remove "\\?\" prefix - return shortPathName; - } - } - } - - return param; -} - void CAppSettings::ParseCommandLine(cmdLine& cmdln) { nCLSwitches = 0; @@ -2480,3 +2450,32 @@ void CAppSettings::SaveFormats() extern BOOL AFXAPI AfxFullPath(LPTSTR lpszPathOut, LPCTSTR lpszFileIn); extern BOOL AFXAPI AfxComparePath(LPCTSTR lpszPath1, LPCTSTR lpszPath2); + +CStringW ParseFileName(const CStringW& param) +{ + if (param.Find(L':') < 0) { + // try to convert relative path to full path + CStringW fullPathName; + fullPathName.ReleaseBuffer(GetFullPathNameW(param, MAX_PATH, fullPathName.GetBuffer(MAX_PATH), nullptr)); + + CFileStatus fs; + if (!fullPathName.IsEmpty() && CFileGetStatus(fullPathName, fs)) { + return fullPathName; + } + } else if (param.GetLength() > MAX_PATH && !::PathIsURLW(param) && !::PathIsUNCW(param)) { + // trying to shorten a long local path + CStringW longpath = StartsWith(param, EXTENDED_PATH_PREFIX) ? param : EXTENDED_PATH_PREFIX + param; + auto length = GetShortPathNameW(longpath, nullptr, 0); + if (length > 0) { + CStringW shortPathName; + length = GetShortPathNameW(longpath, shortPathName.GetBuffer(length), length); + if (length > 0) { + shortPathName.ReleaseBuffer(length); + shortPathName.Delete(0, 4); // remove "\\?\" prefix + return shortPathName; + } + } + } + + return param; +} diff --git a/src/apps/mplayerc/AppSettings.h b/src/apps/mplayerc/AppSettings.h index 083f890df7..fda28b7e32 100644 --- a/src/apps/mplayerc/AppSettings.h +++ b/src/apps/mplayerc/AppSettings.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -31,6 +31,8 @@ #include #include "FileItem.h" +constexpr auto EXTENDED_PATH_PREFIX = LR"(\\?\)"; + #define ENABLE_ASSFILTERMOD 0 // flags for CAppSettings::nCS @@ -466,7 +468,6 @@ class CAppSettings int iMonitor; - CStringW ParseFileName(const CStringW& param); void ParseCommandLine(cmdLine& cmdln); // Added a Debug display to the screen (/debug option) @@ -902,3 +903,5 @@ private : std::list slSubtitlePathsAddons; std::list slAudioPathsAddons; }; + +CStringW ParseFileName(const CStringW& param); \ No newline at end of file diff --git a/src/apps/mplayerc/FGManager.cpp b/src/apps/mplayerc/FGManager.cpp index 8309d1c72d..054c637dcb 100644 --- a/src/apps/mplayerc/FGManager.cpp +++ b/src/apps/mplayerc/FGManager.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -359,7 +359,7 @@ HRESULT CFGManager::EnumSourceFilters(LPCWSTR lpcwstrFileName, CFGFilterList& fl HANDLE hFile = INVALID_HANDLE_VALUE; std::vector httpbuf; - if ((protocol.GetLength() <= 1 || protocol == L"file") && (ext.Compare(L".cda") != 0)) { + if ((protocol.GetLength() <= 1 || protocol == L"file" || StartsWith(protocol, EXTENDED_PATH_PREFIX)) && (ext.Compare(L".cda") != 0)) { hFile = CreateFileW(fn, GENERIC_READ, FILE_SHARE_READ, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr); if (hFile == INVALID_HANDLE_VALUE) { diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 065f8ca5c8..8ffc4275a7 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -1089,7 +1089,6 @@ BOOL CMainFrame::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoi { BOOL bResult = FALSE; CLIPFORMAT cfFormat = 0; - auto& s = AfxGetAppSettings(); if (pDataObject->IsDataAvailable(CF_URLW)) { cfFormat = CF_URLW; @@ -1103,7 +1102,7 @@ BOOL CMainFrame::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoi for (UINT iFile = 0; iFile < nFiles; iFile++) { CString fn; fn.ReleaseBuffer(::DragQueryFileW(hDrop, iFile, fn.GetBuffer(2048), 2048)); - slFiles.emplace_back(s.ParseFileName(fn)); + slFiles.emplace_back(ParseFileName(fn)); } ::DragFinish(hDrop); DropFiles(slFiles); @@ -1134,7 +1133,7 @@ BOOL CMainFrame::OnDrop(COleDataObject* pDataObject, DROPEFFECT dropEffect, CPoi std::list lines; Explode(text, lines, L'\n'); for (const auto& line : lines) { - auto path = s.ParseFileName(line); + auto path = ParseFileName(line); if (::PathIsURLW(path) || ::PathFileExistsW(path)) { slFiles.emplace_back(path); } @@ -20571,7 +20570,6 @@ void CMainFrame::StartAutoHideCursor() const bool CMainFrame::GetFromClipboard(std::list& sl) const { - auto& s = AfxGetAppSettings(); sl.clear(); if (::IsClipboardFormatAvailable(CF_UNICODETEXT) && ::OpenClipboard(m_hWnd)) { @@ -20584,7 +20582,7 @@ const bool CMainFrame::GetFromClipboard(std::list& sl) const std::list lines; Explode(text, lines, L'\n'); for (const auto& line : lines) { - auto path = s.ParseFileName(line); + auto path = ParseFileName(line); if (::PathIsURLW(path) || ::PathFileExistsW(path)) { sl.emplace_back(path); } From 8074144c24911fab142f9e053524c473cc50794c Mon Sep 17 00:00:00 2001 From: cumhur Date: Wed, 7 Feb 2024 02:14:10 +0300 Subject: [PATCH 30/87] Update mplayerc.tr.rc.txt --- src/apps/mpcresources/text/mplayerc.tr.rc.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mpcresources/text/mplayerc.tr.rc.txt b/src/apps/mpcresources/text/mplayerc.tr.rc.txt index 795d0f9140..bbadba50db 100644 --- a/src/apps/mpcresources/text/mplayerc.tr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tr.rc.txt @@ -1435,7 +1435,7 @@ STRING IDS_DESC_EVR_CP "GVİ ile aynıdır, ancak alt yazı ve son işleme içi STRING IDS_DESC_EVR_SYNC "GVİ (ÖS) ile aynıdır, ancak atlanan ya da çoğaltılan video karelerini ortadan kaldırmak için video kare hızını ekran yenileme hızı ile senkronize etmek için çeşitli seçenekler sunar." STRING IDS_DESC_HAALI_VR "VKİ-9 gibidir, ancak gerçek kübik boyutlandırıcı kullanır." STRING IDS_DESC_MADVR "Yüksek kaliteli bir işleyicidir. D3D9 ya da daha sonrasını destekleyen bir ekran kartı gerektirir." -STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." +STRING IDS_DESC_MPC_VR "Direct3D 11 destekli video işleyici." STRING IDS_DESC_NULLVR_ANY "Her video benzeri medya biçimine bağlanır ve dahili örnekleri bir yere göndermez. Video gösterimine ihtiyaç duymadığınız ve işlemciyi pek az kullanmak istediğiniz durumlarda bu seçeneği seçiniz." STRING IDS_DESC_NULLVR_UNCOMP "Boş işleyici ile aynıdır, ancak sadece sıkıştırılmamış biçimleri destekler." STRING IDS_DISABLE_ALL_FILTERS "&Tüm süzgeçleri devre dışı bırak" From 5fe4d1711f1b5906863d2d383f296e080966d64a Mon Sep 17 00:00:00 2001 From: v0lt Date: Wed, 7 Feb 2024 06:53:25 +0300 Subject: [PATCH 31/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D1=83=D1=80=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20cmhrky).=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B2=D0=B5=D0=BD=D0=B3=D0=B5=D1=80=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=20(=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20mickey).=20=D0=9E=D0=B1?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BA=D0=B8=D1=82=D0=B0?= =?UTF-8?q?=D0=B9=D1=81=D0=BA=D0=B8=D0=B9=20(Simplified)=20=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2=D1=82=D0=BE?= =?UTF-8?q?=D1=80=20wushantao).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.hu.rc | 4 ++-- src/apps/mpcresources/mplayerc.sc.rc | 2 +- src/apps/mpcresources/mplayerc.tr.rc | 2 +- src/apps/mpcresources/text/mplayerc.hu.rc.txt | 4 ++-- src/apps/mpcresources/text/mplayerc.sc.rc.txt | 2 +- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.hu.rc b/src/apps/mpcresources/mplayerc.hu.rc index edca12491e..23537ffe61 100644 --- a/src/apps/mpcresources/mplayerc.hu.rc +++ b/src/apps/mpcresources/mplayerc.hu.rc @@ -3177,11 +3177,11 @@ BEGIN IDS_DESC_HAALI_VR "Úgy néz ki, mint a VMR-9, de valódi bicubic átméretezőt használ." IDS_DESC_NULLVR_ANY "Minden videószerű médiatípushoz csatlakozni fog és a bejövő mintákat nem küldi ki sehová. Ezt akkor válassza, ha a videómegjelenítésre nincs szüksége és meg szeretné kímélni a processzorát a felesleges munkától." IDS_DESC_NULLVR_UNCOMP "Ugyan az, mint a sima Null átalakító, de ez csak tömörítetlen típusokhoz fog csatlakozni." - IDS_DESC_EVR "Video megjelenítő hardveres dekódolási támogatással." + IDS_DESC_EVR "Videó megjelenítő hardveres dekódolási támogatással." IDS_DESC_EVR_CP "Ugyanaz, mint az EVR, de az Allocator-Presenterrel a feliratozáshoz és az utófeldolgozáshoz." IDS_DESC_MADVR "Kiváló minőségű megjelenítőhöz olyan GPU szükséges, amely támogatja a D3D9 vagy újabb verziókat." IDS_DESC_EVR_SYNC "Ugyanaz, mint az EVR (CP), de számos lehetőséget kínál a képkocka sebességének szinkronizálására a képernyő frissítési gyakoriságával, hogy kiküszöbölje a kihagyott vagy duplikált képkockákat." - IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." + IDS_DESC_MPC_VR "Videó megjelenítő Direct3D 11 támogatással." END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index f54004bc7d..26dc94799b 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -3181,7 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "和 EVR 相同,但依托分配管理器负担显示字幕并进行后处理。" IDS_DESC_MADVR "高品渲染器,需要支持 Direct3D 9 或更新版本的显卡。" IDS_DESC_EVR_SYNC "与 EVR (自定义) 相同, 但提供了几个选项来同步显示刷新率,用以减少视频中被丢弃与重复的帧。" - IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." + IDS_DESC_MPC_VR "支持 Direct3D 11 的视频渲染器。" END STRINGTABLE diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index 53f934f2df..d9e02dd166 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -3181,7 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "GVİ ile aynıdır, ancak alt yazı ve son işleme için Bölüştürücü-Sunucu ile birlikte çalışır." IDS_DESC_MADVR "Yüksek kaliteli bir işleyicidir. D3D9 ya da daha sonrasını destekleyen bir ekran kartı gerektirir." IDS_DESC_EVR_SYNC "GVİ (ÖS) ile aynıdır, ancak atlanan ya da çoğaltılan video karelerini ortadan kaldırmak için video kare hızını ekran yenileme hızı ile senkronize etmek için çeşitli seçenekler sunar." - IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." + IDS_DESC_MPC_VR "Direct3D 11 destekli video işleyici." END STRINGTABLE diff --git a/src/apps/mpcresources/text/mplayerc.hu.rc.txt b/src/apps/mpcresources/text/mplayerc.hu.rc.txt index 815c63df9c..a9cb0b34c5 100644 --- a/src/apps/mpcresources/text/mplayerc.hu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hu.rc.txt @@ -1430,12 +1430,12 @@ STRING IDS_CONTROLS_PLAYING "Lejátszás" STRING IDS_CONTROLS_STOPPED "Leállítva" STRING IDS_COPY_TO_CLIPBOARD "Másolás a vágólapra" STRING IDS_CUSTOM_CHANNEL_MAPPING "Váltás az egyedi csatornaleképezésre" -STRING IDS_DESC_EVR "Video megjelenítő hardveres dekódolási támogatással." +STRING IDS_DESC_EVR "Videó megjelenítő hardveres dekódolási támogatással." STRING IDS_DESC_EVR_CP "Ugyanaz, mint az EVR, de az Allocator-Presenterrel a feliratozáshoz és az utófeldolgozáshoz." STRING IDS_DESC_EVR_SYNC "Ugyanaz, mint az EVR (CP), de számos lehetőséget kínál a képkocka sebességének szinkronizálására a képernyő frissítési gyakoriságával, hogy kiküszöbölje a kihagyott vagy duplikált képkockákat." STRING IDS_DESC_HAALI_VR "Úgy néz ki, mint a VMR-9, de valódi bicubic átméretezőt használ." STRING IDS_DESC_MADVR "Kiváló minőségű megjelenítőhöz olyan GPU szükséges, amely támogatja a D3D9 vagy újabb verziókat." -STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." +STRING IDS_DESC_MPC_VR "Videó megjelenítő Direct3D 11 támogatással." STRING IDS_DESC_NULLVR_ANY "Minden videószerű médiatípushoz csatlakozni fog és a bejövő mintákat nem küldi ki sehová. Ezt akkor válassza, ha a videómegjelenítésre nincs szüksége és meg szeretné kímélni a processzorát a felesleges munkától." STRING IDS_DESC_NULLVR_UNCOMP "Ugyan az, mint a sima Null átalakító, de ez csak tömörítetlen típusokhoz fog csatlakozni." STRING IDS_DISABLE_ALL_FILTERS "&Összes szűrő tiltása" diff --git a/src/apps/mpcresources/text/mplayerc.sc.rc.txt b/src/apps/mpcresources/text/mplayerc.sc.rc.txt index b49b56784e..ec1796cc11 100644 --- a/src/apps/mpcresources/text/mplayerc.sc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sc.rc.txt @@ -1435,7 +1435,7 @@ STRING IDS_DESC_EVR_CP "和 EVR 相同,但依托分配管理器负担显示 STRING IDS_DESC_EVR_SYNC "与 EVR (自定义) 相同, 但提供了几个选项来同步显示刷新率,用以减少视频中被丢弃与重复的帧。" STRING IDS_DESC_HAALI_VR "与 VMR-9 类同, 但是使用真正的 bicubic 改变大小。" STRING IDS_DESC_MADVR "高品渲染器,需要支持 Direct3D 9 或更新版本的显卡。" -STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." +STRING IDS_DESC_MPC_VR "支持 Direct3D 11 的视频渲染器。" STRING IDS_DESC_NULLVR_ANY "连接到任意视频文件类型并且会将进入的采样信息传送到任意地方。当您不需要显示视频并希望节省不必要的 cpu 工作时请使用它。" STRING IDS_DESC_NULLVR_UNCOMP "和普通的空渲染器相同, 但仅会被连接到未压缩的类型上。" STRING IDS_DISABLE_ALL_FILTERS "禁用全部滤镜(&D)" From 6fc7f8e7fc2afcb9076229f502a354ffa0e3b8c6 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 7 Feb 2024 14:05:59 +1000 Subject: [PATCH 32/87] Changelog. --- docs/Changelog.Rus.txt | 1 + docs/Changelog.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 2e3b8a5d3f..34d32ce777 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -20,6 +20,7 @@ MPCVideoDec Добавлена возможность открыть папку воспроизводимого файла с помощью горячей клавиши. Не показываем нулевые часы при отображении времени. Немного изменена логика смещения кадра относительно центра окна. +Улучшения открытия длинных путей и путей начинающихся с "\\?\". Обновлен французский перевод (автор rhahgleuhargh). Обновлен итальянский перевод (автор mapi68). diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 81ec18d3ba..2e189fe8a6 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -20,6 +20,7 @@ Player Added the ability to open the folder of the currently playing file using a hotkey. Do not show zero hours when displaying time. Changed the logic of frame offset relative to the center of the window. +Improvements to opening long paths and paths starting with "\\?\". Updated French translation (by rhahgleuhargh). Updated Italian translation (by mapi68). From 541efc4524851198e3f1edcd969e8cfa7f4843b4 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 7 Feb 2024 17:08:56 +1000 Subject: [PATCH 33/87] =?UTF-8?q?=D0=92=D0=BD=D0=B5=D1=88=D0=BD=D0=B8?= =?UTF-8?q?=D0=B5=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80=D1=8B=20-=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6=D0=B0?= =?UTF-8?q?=D0=B5=D0=BC=20=D0=B8=D0=B3=D0=BD=D0=BE=D1=80=D0=B8=D1=80=D1=83?= =?UTF-8?q?=D0=B5=D0=BC=D1=8B=D0=B5=20=D0=B2=D0=B8=D0=B4=D0=B5=D0=BE-?= =?UTF-8?q?=D1=80=D0=B5=D0=BD=D0=B4=D0=B5=D1=80=D0=B5=D1=80=D1=8B=20=D1=81?= =?UTF-8?q?=20=D1=81=D0=BF=D0=B8=D1=81=D0=BA=D0=B5=20=D0=B4=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=83=D0=BF=D0=BD=D1=8B=D1=85=20=D1=81=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=B5=D0=BC=D0=BD=D1=8B=D1=85=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=20=D0=B2=20=D0=B4=D0=B8=D0=B0=D0=BB=D0=BE?= =?UTF-8?q?=D0=B3=D0=B5=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/RegFilterChooserDlg.cpp | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/apps/mplayerc/RegFilterChooserDlg.cpp b/src/apps/mplayerc/RegFilterChooserDlg.cpp index 3478f31bfa..b71c16f45d 100644 --- a/src/apps/mplayerc/RegFilterChooserDlg.cpp +++ b/src/apps/mplayerc/RegFilterChooserDlg.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -25,6 +25,7 @@ #include "FGFilter.h" #include "DSUtil/FileHandle.h" #include "DSUtil/std_helper.h" +#include "PPageExternalFilters.h" // CRegFilterChooserDlg dialog @@ -50,9 +51,17 @@ void CRegFilterChooserDlg::DoDataExchange(CDataExchange* pDX) void CRegFilterChooserDlg::AddToList(IMoniker* pMoniker) { CComPtr pPB; - if (SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_IPropertyBag, (void**)&pPB))) { + if (SUCCEEDED(pMoniker->BindToStorage(0, 0, IID_PPV_ARGS(&pPB)))) { CComVariant var; if (SUCCEEDED(pPB->Read(CComBSTR(L"FriendlyName"), &var, nullptr))) { + CComVariant var2; + if (SUCCEEDED(pPB->Read(_T("CLSID"), &var2, nullptr))) { + CStringW clsid(var2.bstrVal); + if (!clsid.IsEmpty() && IsSupportedExternalVideoRenderer(GUIDFromCString(clsid))) { + return; + } + } + m_monikers.emplace_back(pMoniker); int iItem = m_list.InsertItem(m_list.GetItemCount(), CStringW(var.bstrVal)); m_list.SetItemData(iItem, (DWORD_PTR)pMoniker); From 95869c1b4f410a529bd9accad7ccd38cc5763cc4 Mon Sep 17 00:00:00 2001 From: v0lt Date: Wed, 7 Feb 2024 17:47:03 +0300 Subject: [PATCH 34/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BD=D0=B5=D0=BC=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20Klaus1189).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.de.rc | 2 +- src/apps/mpcresources/text/mplayerc.de.rc.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.de.rc b/src/apps/mpcresources/mplayerc.de.rc index 976710a814..d07026f11b 100644 --- a/src/apps/mpcresources/mplayerc.de.rc +++ b/src/apps/mpcresources/mplayerc.de.rc @@ -3181,7 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Wie der EVR, aber mit Allocator-Presenter für Untertitelung und Nachbearbeitung" IDS_DESC_MADVR "Qualitativ sehr hochwertiger Renderer, der eine Grafikkarte mit D3D9-Unterstützung (oder höher) benötigt." IDS_DESC_EVR_SYNC "Wie der EVR (custom presenter), bietet jedoch verschiedene Optionen zum Synchronisieren der Videobildrate mit der Bildwiederholrate des Anzeigegeräts, um übersprungene oder doppelte Videobilder zu vermeiden." - IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." + IDS_DESC_MPC_VR "Videorenderer mit Unterstützung für Direct3D 11." END STRINGTABLE diff --git a/src/apps/mpcresources/text/mplayerc.de.rc.txt b/src/apps/mpcresources/text/mplayerc.de.rc.txt index 7b09775162..9b043a9248 100644 --- a/src/apps/mpcresources/text/mplayerc.de.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.de.rc.txt @@ -1435,7 +1435,7 @@ STRING IDS_DESC_EVR_CP "Wie der EVR, aber mit Allocator-Presenter für Untertit STRING IDS_DESC_EVR_SYNC "Wie der EVR (custom presenter), bietet jedoch verschiedene Optionen zum Synchronisieren der Videobildrate mit der Bildwiederholrate des Anzeigegeräts, um übersprungene oder doppelte Videobilder zu vermeiden." STRING IDS_DESC_HAALI_VR "Ähnelt dem VMR-9, verwendet aber einen echten bikubischen Resizer." STRING IDS_DESC_MADVR "Qualitativ sehr hochwertiger Renderer, der eine Grafikkarte mit D3D9-Unterstützung (oder höher) benötigt." -STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." +STRING IDS_DESC_MPC_VR "Videorenderer mit Unterstützung für Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Stellt eine Verbindung zu allen videoartigen Medientypen her und sendet die eingehenden Samples ins Nichts. Sinnvoll, wenn keine Videoausgabe benötigt wird, um die CPU zu entlasten." STRING IDS_DESC_NULLVR_UNCOMP "Wie der normale Null-Renderer, kann aber nur mit unkomprimierten Videotypen verbunden werden." STRING IDS_DISABLE_ALL_FILTERS "Alle Filter &deaktivieren" From c3f4653854e11af3435f8d5ec1e5dad32c28d8dc Mon Sep 17 00:00:00 2001 From: v0lt Date: Thu, 8 Feb 2024 06:37:49 +0300 Subject: [PATCH 35/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-1026-gcd31eac9?= =?UTF-8?q?99.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- docs/custom_code/ffmpeg.txt | 1 - src/ExtLib/ffmpeg/MAINTAINERS | 55 ------------- src/ExtLib/ffmpeg/libavcodec/avpacket.c | 1 + .../ffmpeg/libavcodec/bitstream_filters.c | 1 + .../libavcodec/cbs_h266_syntax_template.c | 8 +- src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c | 14 ++-- src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c | 8 +- src/ExtLib/ffmpeg/libavcodec/decode.c | 1 + src/ExtLib/ffmpeg/libavcodec/dxva2.c | 2 +- src/ExtLib/ffmpeg/libavcodec/libdav1d.c | 2 +- src/ExtLib/ffmpeg/libavcodec/nvdec.c | 2 +- src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c | 4 +- src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c | 4 +- src/ExtLib/ffmpeg/libavcodec/packet.h | 7 ++ src/ExtLib/ffmpeg/libavcodec/version.h | 2 +- src/ExtLib/ffmpeg/libavcodec/vlc.h | 41 ---------- src/ExtLib/ffmpeg/libavcodec/vp8.c | 9 ++- src/ExtLib/ffmpeg/libavcodec/vp8.h | 2 - src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c | 37 +++++++++ src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c | 6 ++ src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.h | 1 + src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c | 8 +- .../ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c | 78 ++++++++++--------- src/ExtLib/ffmpeg/libavutil/opt.c | 4 +- src/ExtLib/ffmpeg/libavutil/rational.c | 2 +- src/ExtLib/ffmpeg/libavutil/thread.h | 20 ++++- src/ExtLib/ffmpeg/libavutil/x86/tx_float.asm | 8 +- 29 files changed, 161 insertions(+), 171 deletions(-) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 34d32ce777..019ee9ae22 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -27,7 +27,7 @@ MPCVideoDec Обновлен корейский перевод (автор Hackjjang). Обновлены библиотеки: - ffmpeg git-n6.2-dev-967-gb181868aba; + ffmpeg git-n6.2-dev-1026-gcd31eac999; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 2e189fe8a6..9a1514b6e4 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -27,7 +27,7 @@ Updated Italian translation (by mapi68). Updated Korean translation (by Hackjjang). Updated libraries: - ffmpeg git-n6.2-dev-967-gb181868aba; + ffmpeg git-n6.2-dev-1026-gcd31eac999; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/docs/custom_code/ffmpeg.txt b/docs/custom_code/ffmpeg.txt index ac33de4240..ca98534458 100644 --- a/docs/custom_code/ffmpeg.txt +++ b/docs/custom_code/ffmpeg.txt @@ -12,7 +12,6 @@ * libavcodec/aacsbr_template.c * libavcodec/bsf_list.c * libavcodec/codec_list.c -* libavcodec/d3d12va_vc1.c * libavcodec/dxva2.c * libavcodec/dxva2_hevc.c * libavcodec/dxva2_internal.h diff --git a/src/ExtLib/ffmpeg/MAINTAINERS b/src/ExtLib/ffmpeg/MAINTAINERS index 4677931211..cc7f564f48 100644 --- a/src/ExtLib/ffmpeg/MAINTAINERS +++ b/src/ExtLib/ffmpeg/MAINTAINERS @@ -144,7 +144,6 @@ Codecs: bgmc.c, bgmc.h Thilo Borgmann binkaudio.c Peter Ross cavs* Stefan Gehrer - cdxl.c Paul B Mahol celp_filters.* Vitor Sessak cinepak.c Roberto Togni cinepakenc.c Rl / Aetey G.T. AB @@ -163,7 +162,6 @@ Codecs: dv.c Roman Shaposhnik dvbsubdec.c Anshul Maheshwari eacmv*, eaidct*, eat* Peter Ross - evrc* Paul B Mahol exif.c, exif.h Thilo Borgmann ffv1* Michael Niedermayer ffwavesynth.c Nicolas George @@ -217,7 +215,6 @@ Codecs: nvdec*, nvenc* Timo Rothenpieler omx.c Martin Storsjo, Aman Gupta opus* Rostislav Pehlivanov - paf.* Paul B Mahol pcx.c Ivo van Poorten pgssubdec.c Reimar Doeffinger ptx.c Ivo van Poorten @@ -238,16 +235,13 @@ Codecs: srt* Aurelien Jacobs sunrast.c Ivo van Poorten svq3.c Michael Niedermayer - tak* Paul B Mahol truemotion1* Mike Melanson tta.c Alex Beregszaszi, Jaikrishnan Menon - ttaenc.c Paul B Mahol txd.c Ivo van Poorten v4l2_* Jorge Ramirez-Ortiz vc2* Rostislav Pehlivanov vcr1.c Michael Niedermayer videotoolboxenc.c Rick Kern, Aman Gupta - vima.c Paul B Mahol vorbisdec.c Denes Balatoni, David Conrad vorbisenc.c Oded Shimon vp3* Mike Melanson @@ -261,9 +255,7 @@ Codecs: wmavoice.c Ronald S. Bultje wmv2.c Michael Niedermayer xan.c Mike Melanson - xbm* Paul B Mahol xface Stefano Sabatini - xwd* Paul B Mahol Hardware acceleration: dxva2* Hendrik Leppkes, Laurent Aimar, Steve Lhomme @@ -307,65 +299,34 @@ Generic parts: motion_estimation.c Davinder Singh Filters: - f_drawgraph.c Paul B Mahol - af_adelay.c Paul B Mahol - af_aecho.c Paul B Mahol - af_afade.c Paul B Mahol af_amerge.c Nicolas George - af_aphaser.c Paul B Mahol af_aresample.c Michael Niedermayer - af_astats.c Paul B Mahol af_atempo.c Pavel Koshevoy - af_biquads.c Paul B Mahol - af_chorus.c Paul B Mahol - af_compand.c Paul B Mahol af_firequalizer.c Muhammad Faiz af_hdcd.c Burt P. - af_ladspa.c Paul B Mahol af_loudnorm.c Kyle Swanson af_pan.c Nicolas George - af_sidechaincompress.c Paul B Mahol - af_silenceremove.c Paul B Mahol - avf_aphasemeter.c Paul B Mahol - avf_avectorscope.c Paul B Mahol avf_showcqt.c Muhammad Faiz - vf_blend.c Paul B Mahol vf_bwdif Thomas Mundt (CC ) vf_chromakey.c Timo Rothenpieler - vf_colorchannelmixer.c Paul B Mahol vf_colorconstancy.c Mina Sami (CC ) - vf_colorbalance.c Paul B Mahol vf_colorkey.c Timo Rothenpieler - vf_colorlevels.c Paul B Mahol vf_coreimage.m Thilo Borgmann - vf_deband.c Paul B Mahol vf_dejudder.c Nicholas Robbins vf_delogo.c Jean Delvare (CC ) vf_drawbox.c/drawgrid Andrey Utkin - vf_extractplanes.c Paul B Mahol vf_fsync.c Thilo Borgmann - vf_histogram.c Paul B Mahol vf_hqx.c Clément Bœsch vf_idet.c Pascal Massimino - vf_il.c Paul B Mahol vf_(t)interlace Thomas Mundt (CC ) vf_lenscorrection.c Daniel Oberhoff vf_libplacebo.c Niklas Haas - vf_mergeplanes.c Paul B Mahol vf_mestimate.c Davinder Singh vf_minterpolate.c Davinder Singh - vf_neighbor.c Paul B Mahol - vf_psnr.c Paul B Mahol - vf_random.c Paul B Mahol vf_readvitc.c Tobias Rapp (CC t.rapp at noa-archive dot com) vf_scale.c Michael Niedermayer - vf_separatefields.c Paul B Mahol - vf_ssim.c Paul B Mahol - vf_stereo3d.c Paul B Mahol - vf_telecine.c Paul B Mahol vf_tonemap_opencl.c Ruiling Song vf_yadif.c Michael Niedermayer - vf_zoompan.c Paul B Mahol Sources: vsrc_mandelbrot.c Michael Niedermayer @@ -387,7 +348,6 @@ Muxers/Demuxers: 4xm.c Mike Melanson aadec.c Vesselin Bontchev (vesselin.bontchev at yandex dot com) adtsenc.c Robert Swain - afc.c Paul B Mahol aiffdec.c Baptiste Coudurier, Matthieu Bouron aiffenc.c Baptiste Coudurier, Matthieu Bouron alp.c Zane van Iperen @@ -398,16 +358,12 @@ Muxers/Demuxers: argo_brp.c Zane van Iperen argo_cvg.c Zane van Iperen ass* Aurelien Jacobs - astdec.c Paul B Mahol astenc.c James Almer avi* Michael Niedermayer avisynth.c Stephen Hutchinson - avr.c Paul B Mahol bink.c Peter Ross boadec.c Michael Niedermayer - brstm.c Paul B Mahol caf* Peter Ross - cdxl.c Paul B Mahol codec2.c Tomas Härdin crc.c Michael Niedermayer dashdec.c Steven Liu @@ -416,10 +372,8 @@ Muxers/Demuxers: dfpwmdec.c Jack Bruienne dss.c Oleksij Rempel dtsdec.c foo86 - dtshddec.c Paul B Mahol dv.c Roman Shaposhnik electronicarts.c Peter Ross - epafdec.c Paul B Mahol evc* Samsung (Dawid Kozinski) ffm* Baptiste Coudurier flic.c Mike Melanson @@ -434,7 +388,6 @@ Muxers/Demuxers: imf* Pierre-Anthony Lemieux img2*.c Michael Niedermayer ipmovie.c Mike Melanson - ircam* Paul B Mahol iss.c Stefan Gehrer jpegxl* Leo Izen jvdec.c Peter Ross @@ -442,14 +395,12 @@ Muxers/Demuxers: libmodplug.c Clément Bœsch libopenmpt.c Josh de Kock lmlm4.c Ivo van Poorten - lvfdec.c Paul B Mahol lxfdec.c Tomas Härdin matroska.c Aurelien Jacobs, Andreas Rheinhardt matroskadec.c Aurelien Jacobs, Andreas Rheinhardt matroskaenc.c David Conrad, Andreas Rheinhardt matroska subtitles (matroskaenc.c) John Peebles metadata* Aurelien Jacobs - mgsts.c Paul B Mahol microdvd* Aurelien Jacobs mm.c Peter Ross mov.c Baptiste Coudurier @@ -462,7 +413,6 @@ Muxers/Demuxers: msnwc_tcp.c Ramiro Polla mtv.c Reynaldo H. Verdejo Pinochet mxf* Baptiste Coudurier, Tomas Härdin - nistspheredec.c Paul B Mahol nsvdec.c Francois Revol nut* Michael Niedermayer nuv.c Reimar Doeffinger @@ -470,11 +420,9 @@ Muxers/Demuxers: oggenc.c Baptiste Coudurier oggparse*.c David Conrad oma.c Maxim Poliakovski - paf.c Paul B Mahol pp_bnk.c Zane van Iperen psxstr.c Mike Melanson pva.c Ivo van Poorten - pvfdec.c Paul B Mahol r3d.c Baptiste Coudurier raw.c Michael Niedermayer rdt.c Ronald S. Bultje @@ -495,11 +443,9 @@ Muxers/Demuxers: sdp.c Martin Storsjo segafilm.c Mike Melanson segment.c Stefano Sabatini - smjpeg* Paul B Mahol spdif* Anssi Hannula srtdec.c Aurelien Jacobs swf.c Baptiste Coudurier - takdec.c Paul B Mahol tta.c Alex Beregszaszi txd.c Ivo van Poorten voc.c Aurelien Jacobs @@ -509,7 +455,6 @@ Muxers/Demuxers: webvtt* Matthew J Heaney westwood.c Mike Melanson wtv.c Peter Ross - wvenc.c Paul B Mahol Protocols: async.c Zhang Rui diff --git a/src/ExtLib/ffmpeg/libavcodec/avpacket.c b/src/ExtLib/ffmpeg/libavcodec/avpacket.c index 0f8c9b77ae..e118bbaad1 100644 --- a/src/ExtLib/ffmpeg/libavcodec/avpacket.c +++ b/src/ExtLib/ffmpeg/libavcodec/avpacket.c @@ -301,6 +301,7 @@ const char *av_packet_side_data_name(enum AVPacketSideDataType type) case AV_PKT_DATA_DOVI_CONF: return "DOVI configuration record"; case AV_PKT_DATA_S12M_TIMECODE: return "SMPTE ST 12-1:2014 timecode"; case AV_PKT_DATA_DYNAMIC_HDR10_PLUS: return "HDR10+ Dynamic Metadata (SMPTE 2094-40)"; + case AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT:return "Ambient viewing environment"; case AV_PKT_DATA_IAMF_MIX_GAIN_PARAM: return "IAMF Mix Gain Parameter Data"; case AV_PKT_DATA_IAMF_DEMIXING_INFO_PARAM: return "IAMF Demixing Info Parameter Data"; case AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM: return "IAMF Recon Gain Info Parameter Data"; diff --git a/src/ExtLib/ffmpeg/libavcodec/bitstream_filters.c b/src/ExtLib/ffmpeg/libavcodec/bitstream_filters.c index 1e9a676a3d..1bae113d92 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bitstream_filters.c +++ b/src/ExtLib/ffmpeg/libavcodec/bitstream_filters.c @@ -58,6 +58,7 @@ extern const FFBitStreamFilter ff_pgs_frame_merge_bsf; extern const FFBitStreamFilter ff_prores_metadata_bsf; extern const FFBitStreamFilter ff_remove_extradata_bsf; extern const FFBitStreamFilter ff_setts_bsf; +extern const FFBitStreamFilter ff_showinfo_bsf; extern const FFBitStreamFilter ff_text2movsub_bsf; extern const FFBitStreamFilter ff_trace_headers_bsf; extern const FFBitStreamFilter ff_truehd_core_bsf; diff --git a/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c b/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c index 37dc3acba0..26ee7a420b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/cbs_h266_syntax_template.c @@ -2456,6 +2456,7 @@ static int FUNC(scaling_list_data)(CodedBitstreamContext *ctx, RWContext *rw, static int FUNC(aps)(CodedBitstreamContext *ctx, RWContext *rw, H266RawAPS *current, int prefix) { + int aps_id_max = MAX_UINT_BITS(5); int err; if (prefix) @@ -2468,7 +2469,12 @@ static int FUNC(aps)(CodedBitstreamContext *ctx, RWContext *rw, : VVC_SUFFIX_APS_NUT)); ub(3, aps_params_type); - ub(5, aps_adaptation_parameter_set_id); + if (current->aps_params_type == VVC_ASP_TYPE_ALF || + current->aps_params_type == VVC_ASP_TYPE_SCALING) + aps_id_max = 7; + else if (current->aps_params_type == VVC_ASP_TYPE_LMCS) + aps_id_max = 3; + u(5, aps_adaptation_parameter_set_id, 0, aps_id_max); flag(aps_chroma_present_flag); if (current->aps_params_type == VVC_ASP_TYPE_ALF) CHECK(FUNC(alf_data)(ctx, rw, current)); diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c index f678b6f483..af7cf11640 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_decode.c @@ -79,7 +79,7 @@ unsigned ff_d3d12va_get_surface_index(const AVCodecContext *avctx, } fail: - av_log(avctx, AV_LOG_WARNING, "Could not get surface index. Using 0 instead.\n"); + av_log((AVCodecContext *)avctx, AV_LOG_WARNING, "Could not get surface index. Using 0 instead.\n"); return 0; } @@ -239,10 +239,14 @@ static int d3d12va_create_decoder(AVCodecContext *avctx) DX_CHECK(ID3D12VideoDevice_CheckFeatureSupport(device_hwctx->video_device, D3D12_FEATURE_VIDEO_DECODE_SUPPORT, &feature, sizeof(feature))); - if (!(feature.SupportFlags & D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED) || - !(feature.DecodeTier >= D3D12_VIDEO_DECODE_TIER_2)) { - av_log(avctx, AV_LOG_ERROR, "D3D12 decoder doesn't support on this device\n"); - return AVERROR(EINVAL); + if (!(feature.SupportFlags & D3D12_VIDEO_DECODE_SUPPORT_FLAG_SUPPORTED)) { + av_log(avctx, AV_LOG_ERROR, "D3D12 video decode is not supported on this device.\n"); + return AVERROR(ENOSYS); + } + if (!(feature.DecodeTier >= D3D12_VIDEO_DECODE_TIER_2)) { + av_log(avctx, AV_LOG_ERROR, "D3D12 video decode on this device requires tier %d support, " + "but it is not implemented.\n", feature.DecodeTier); + return AVERROR_PATCHWELCOME; } desc = (D3D12_VIDEO_DECODER_DESC) { diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c index 31a9378327..110926be82 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_vc1.c @@ -164,17 +164,12 @@ static int d3d12va_vc1_end_frame(AVCodecContext *avctx) static int d3d12va_vc1_decode_init(AVCodecContext *avctx) { + int ret; D3D12VADecodeContext *ctx = D3D12VA_DECODE_CONTEXT(avctx); - // ==> Start patch MPC - //ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_VC1; ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_VC1_D2010; - int ret; - // ==> End patch MPC ctx->max_num_ref = 3; - // ==> Start patch MPC - //return ff_d3d12va_decode_init(avctx); ret = ff_d3d12va_decode_init(avctx); if (ret < 0) { ctx->cfg.DecodeProfile = D3D12_VIDEO_DECODE_PROFILE_VC1; @@ -182,7 +177,6 @@ static int d3d12va_vc1_decode_init(AVCodecContext *avctx) } return ret; - // ==> End patch MPC } #if CONFIG_WMV3_D3D12VA_HWACCEL diff --git a/src/ExtLib/ffmpeg/libavcodec/decode.c b/src/ExtLib/ffmpeg/libavcodec/decode.c index 2cfb3fcf97..da6446d879 100644 --- a/src/ExtLib/ffmpeg/libavcodec/decode.c +++ b/src/ExtLib/ffmpeg/libavcodec/decode.c @@ -1434,6 +1434,7 @@ static const struct { { AV_PKT_DATA_CONTENT_LIGHT_LEVEL, AV_FRAME_DATA_CONTENT_LIGHT_LEVEL }, { AV_PKT_DATA_ICC_PROFILE, AV_FRAME_DATA_ICC_PROFILE }, { AV_PKT_DATA_DYNAMIC_HDR10_PLUS, AV_FRAME_DATA_DYNAMIC_HDR_PLUS }, + { AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT,AV_FRAME_DATA_AMBIENT_VIEWING_ENVIRONMENT }, }; int ff_decode_frame_props_from_pkt(const AVCodecContext *avctx, diff --git a/src/ExtLib/ffmpeg/libavcodec/dxva2.c b/src/ExtLib/ffmpeg/libavcodec/dxva2.c index e81918ac77..3c96fffbd4 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dxva2.c +++ b/src/ExtLib/ffmpeg/libavcodec/dxva2.c @@ -815,7 +815,7 @@ unsigned ff_dxva2_get_surface_index(const AVCodecContext *avctx, } #endif - av_log(avctx, AV_LOG_WARNING, "Could not get surface index. Using 0 instead.\n"); + av_log((AVCodecContext *)avctx, AV_LOG_WARNING, "Could not get surface index. Using 0 instead.\n"); return 0; } diff --git a/src/ExtLib/ffmpeg/libavcodec/libdav1d.c b/src/ExtLib/ffmpeg/libavcodec/libdav1d.c index 11cdbca274..78a5c63bf4 100644 --- a/src/ExtLib/ffmpeg/libavcodec/libdav1d.c +++ b/src/ExtLib/ffmpeg/libavcodec/libdav1d.c @@ -215,7 +215,7 @@ static av_cold int libdav1d_init(AVCodecContext *c) #endif int res; - av_log(c, AV_LOG_INFO, "libdav1d %s\n", dav1d_version()); + av_log(c, AV_LOG_VERBOSE, "libdav1d %s\n", dav1d_version()); dav1d_default_settings(&s); s.logger.cookie = c; diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec.c b/src/ExtLib/ffmpeg/libavcodec/nvdec.c index 27be644356..d13b790632 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec.c @@ -259,8 +259,8 @@ int ff_nvdec_decode_uninit(AVCodecContext *avctx) { NVDECContext *ctx = avctx->internal->hwaccel_priv_data; - av_freep(&ctx->bitstream); av_freep(&ctx->bitstream_internal); + ctx->bitstream = NULL; ctx->bitstream_len = 0; ctx->bitstream_allocated = 0; diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c b/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c index 55ad31f0f3..b9b0cc4125 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c @@ -138,11 +138,11 @@ static int nvdec_h264_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, const H264SliceContext *sl = &h->slice_ctx[0]; void *tmp; - tmp = av_fast_realloc(ctx->bitstream, &ctx->bitstream_allocated, + tmp = av_fast_realloc(ctx->bitstream_internal, &ctx->bitstream_allocated, ctx->bitstream_len + size + 3); if (!tmp) return AVERROR(ENOMEM); - ctx->bitstream = tmp; + ctx->bitstream = ctx->bitstream_internal = tmp; tmp = av_fast_realloc(ctx->slice_offsets, &ctx->slice_offsets_allocated, (ctx->nb_slices + 1) * sizeof(*ctx->slice_offsets)); diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c b/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c index b83d5edcf9..25319a1328 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c @@ -274,11 +274,11 @@ static int nvdec_hevc_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, NVDECContext *ctx = avctx->internal->hwaccel_priv_data; void *tmp; - tmp = av_fast_realloc(ctx->bitstream, &ctx->bitstream_allocated, + tmp = av_fast_realloc(ctx->bitstream_internal, &ctx->bitstream_allocated, ctx->bitstream_len + size + 3); if (!tmp) return AVERROR(ENOMEM); - ctx->bitstream = tmp; + ctx->bitstream = ctx->bitstream_internal = tmp; tmp = av_fast_realloc(ctx->slice_offsets, &ctx->slice_offsets_allocated, (ctx->nb_slices + 1) * sizeof(*ctx->slice_offsets)); diff --git a/src/ExtLib/ffmpeg/libavcodec/packet.h b/src/ExtLib/ffmpeg/libavcodec/packet.h index 2c57d262c6..8558ae849e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/packet.h +++ b/src/ExtLib/ffmpeg/libavcodec/packet.h @@ -323,6 +323,13 @@ enum AVPacketSideDataType { */ AV_PKT_DATA_IAMF_RECON_GAIN_INFO_PARAM, + /** + * Ambient viewing environment metadata, as defined by H.274. This metadata + * should be associated with a video stream and contains data in the form + * of the AVAmbientViewingEnvironment struct. + */ + AV_PKT_DATA_AMBIENT_VIEWING_ENVIRONMENT, + /** * The number of side data types. * This is not part of the public API/ABI in the sense that it may diff --git a/src/ExtLib/ffmpeg/libavcodec/version.h b/src/ExtLib/ffmpeg/libavcodec/version.h index 0fae3d06d3..f2f14eaed1 100644 --- a/src/ExtLib/ffmpeg/libavcodec/version.h +++ b/src/ExtLib/ffmpeg/libavcodec/version.h @@ -29,7 +29,7 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 38 +#define LIBAVCODEC_VERSION_MINOR 39 #define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/vlc.h b/src/ExtLib/ffmpeg/libavcodec/vlc.h index 045ce1272f..5031b62edf 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vlc.h +++ b/src/ExtLib/ffmpeg/libavcodec/vlc.h @@ -185,47 +185,6 @@ void ff_vlc_free(VLC *vlc); #define VLC_INIT_OUTPUT_LE 8 #define VLC_INIT_LE (VLC_INIT_INPUT_LE | VLC_INIT_OUTPUT_LE) -#define VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \ - h, i, j, flags, static_size) \ - do { \ - static VLCElem table[static_size]; \ - (vlc)->table = table; \ - (vlc)->table_allocated = static_size; \ - ff_vlc_init_sparse(vlc, bits, a, b, c, d, e, f, g, h, i, j, \ - flags | VLC_INIT_USE_STATIC); \ - } while (0) - -#define VLC_INIT_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \ - VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \ - h, i, j, 0, static_size) - -#define VLC_INIT_LE_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, h, i, j, static_size) \ - VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \ - h, i, j, VLC_INIT_LE, static_size) - -#define VLC_INIT_CUSTOM_STATIC(vlc, bits, a, b, c, d, e, f, g, flags, static_size) \ - VLC_INIT_CUSTOM_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, \ - NULL, 0, 0, flags, static_size) - -#define VLC_INIT_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \ - VLC_INIT_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, NULL, 0, 0, static_size) - -#define VLC_INIT_LE_STATIC(vlc, bits, a, b, c, d, e, f, g, static_size) \ - VLC_INIT_LE_SPARSE_STATIC(vlc, bits, a, b, c, d, e, f, g, NULL, 0, 0, static_size) - -#define VLC_INIT_STATIC_FROM_LENGTHS(vlc, bits, nb_codes, lens, len_wrap, \ - symbols, symbols_wrap, symbols_size, \ - offset, flags, static_size) \ - do { \ - static VLCElem table[static_size]; \ - (vlc)->table = table; \ - (vlc)->table_allocated = static_size; \ - ff_vlc_init_from_lengths(vlc, bits, nb_codes, lens, len_wrap, \ - symbols, symbols_wrap, symbols_size, \ - offset, flags | VLC_INIT_USE_STATIC, \ - NULL); \ - } while (0) - /** * For static VLCs, the number of bits can often be hardcoded * at each get_vlc2() callsite. Then using a full VLC would be uneconomical, diff --git a/src/ExtLib/ffmpeg/libavcodec/vp8.c b/src/ExtLib/ffmpeg/libavcodec/vp8.c index 83c60adeb0..dd6c1b361b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vp8.c +++ b/src/ExtLib/ffmpeg/libavcodec/vp8.c @@ -2665,7 +2665,11 @@ int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, if (ret < 0) goto err; - if (s->actually_webp) { + if (!is_vp7 && s->actually_webp) { + // VP8 in WebP is supposed to be intra-only. Enforce this here + // to ensure that output is reproducible with frame-threading. + if (!s->keyframe) + return AVERROR_INVALIDDATA; // avctx->pix_fmt already set in caller. } else if (!is_vp7 && s->pix_fmt == AV_PIX_FMT_NONE) { s->pix_fmt = get_pixel_format(s); @@ -2750,7 +2754,7 @@ int vp78_decode_frame(AVCodecContext *avctx, AVFrame *rframe, int *got_frame, s->next_framep[VP8_FRAME_CURRENT] = curframe; - if (ffcodec(avctx->codec)->update_thread_context) + if (!is_vp7 && !s->actually_webp) ff_thread_finish_setup(avctx); if (avctx->hwaccel) { @@ -2883,7 +2887,6 @@ int vp78_decode_init(AVCodecContext *avctx, int is_vp7) int ret; s->avctx = avctx; - s->vp7 = avctx->codec->id == AV_CODEC_ID_VP7; s->pix_fmt = AV_PIX_FMT_NONE; avctx->pix_fmt = AV_PIX_FMT_YUV420P; diff --git a/src/ExtLib/ffmpeg/libavcodec/vp8.h b/src/ExtLib/ffmpeg/libavcodec/vp8.h index eb9fa2f166..798f67b3de 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vp8.h +++ b/src/ExtLib/ffmpeg/libavcodec/vp8.h @@ -331,8 +331,6 @@ typedef struct VP8Context { int (*decode_mb_row_no_filter)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr); void (*filter_mb_row)(AVCodecContext *avctx, void *tdata, int jobnr, int threadnr); - int vp7; - /** * Interframe DC prediction (VP7) * [0] VP8_FRAME_PREVIOUS diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c index 2cf156b323..77aad720f7 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c @@ -998,6 +998,39 @@ int ff_vvc_decode_aps(VVCParamSets *ps, const CodedBitstreamUnit *unit) return ret; } +static int sh_alf_aps(const VVCSH *sh, const VVCFrameParamSets *fps) +{ + if (!sh->r->sh_alf_enabled_flag) + return 0; + + for (int i = 0; i < sh->r->sh_num_alf_aps_ids_luma; i++) { + const VVCALF *alf_aps_luma = fps->alf_list[sh->r->sh_alf_aps_id_luma[i]]; + if (!alf_aps_luma) + return AVERROR_INVALIDDATA; + } + + if (sh->r->sh_alf_cb_enabled_flag || sh->r->sh_alf_cr_enabled_flag) { + const VVCALF *alf_aps_chroma = fps->alf_list[sh->r->sh_alf_aps_id_chroma]; + if (!alf_aps_chroma) + return AVERROR_INVALIDDATA; + } + + if (fps->sps->r->sps_ccalf_enabled_flag) { + if (sh->r->sh_alf_cc_cb_enabled_flag) { + const VVCALF *alf_aps_cc_cr = fps->alf_list[sh->r->sh_alf_cc_cb_aps_id]; + if (!alf_aps_cc_cr) + return AVERROR_INVALIDDATA; + } + if (sh->r->sh_alf_cc_cr_enabled_flag) { + const VVCALF *alf_aps_cc_cr = fps->alf_list[sh->r->sh_alf_cc_cr_aps_id]; + if (!alf_aps_cc_cr) + return AVERROR_INVALIDDATA; + } + } + + return 0; +} + static void sh_slice_address(VVCSH *sh, const H266RawSPS *sps, const VVCPPS *pps) { const int slice_address = sh->r->sh_slice_address; @@ -1116,8 +1149,12 @@ static int sh_derive(VVCSH *sh, const VVCFrameParamSets *fps) const H266RawSPS *sps = fps->sps->r; const H266RawPPS *pps = fps->pps->r; const H266RawPictureHeader *ph = fps->ph.r; + int ret; sh_slice_address(sh, sps, fps->pps); + ret = sh_alf_aps(sh, fps); + if (ret < 0) + return ret; sh_inter(sh, sps, pps); sh_qp_y(sh, pps, ph); sh_deblock_offsets(sh); diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c index bf503e429e..e1895d1cca 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c @@ -80,6 +80,12 @@ void ff_vvc_clear_refs(VVCFrameContext *fc) VVC_FRAME_FLAG_SHORT_REF | VVC_FRAME_FLAG_LONG_REF); } +void ff_vvc_flush_dpb(VVCFrameContext *fc) +{ + for (int i = 0; i < FF_ARRAY_ELEMS(fc->DPB); i++) + ff_vvc_unref_frame(fc, &fc->DPB[i], ~0); +} + static void free_progress(FFRefStructOpaque unused, void *obj) { FrameProgress *p = (FrameProgress *)obj; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.h b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.h index cd3b5f5632..eba4422fb4 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.h +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.h @@ -33,6 +33,7 @@ int ff_vvc_frame_rpl(VVCContext *s, VVCFrameContext *fc, SliceContext *sc); int ff_vvc_slice_rpl(VVCContext *s, VVCFrameContext *fc, SliceContext *sc); void ff_vvc_unref_frame(VVCFrameContext *fc, VVCFrame *frame, int flags); void ff_vvc_clear_refs(VVCFrameContext *fc); +void ff_vvc_flush_dpb(VVCFrameContext *fc); typedef enum VVCProgress { VVC_PROGRESS_MV, diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c index 83ee472ce6..8163b5ecb6 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c @@ -322,7 +322,7 @@ static int pic_arrays_init(VVCContext *s, VVCFrameContext *fc) if (ret < 0) return ret; - memset(fc->tab.slice_idx, -1, sizeof(*fc->tab.slice_idx) * fc->tab.sz.ctu_count); + memset(fc->tab.slice_idx, -1, sizeof(*fc->tab.slice_idx) * ctu_count); if (fc->tab.sz.ctu_count != ctu_count) { ff_refstruct_pool_uninit(&fc->rpl_tab_pool); @@ -922,9 +922,15 @@ static av_cold void vvc_decode_flush(AVCodecContext *avctx) { VVCContext *s = avctx->priv_data; int got_output = 0; + VVCFrameContext *last; while (s->nb_delayed) wait_delayed_frame(s, NULL, &got_output); + + last = get_frame_context(s, s->fcs, s->nb_frames - 1); + ff_vvc_flush_dpb(last); + + s->eos = 1; } static av_cold int vvc_decode_free(AVCodecContext *avctx) diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c index 909ef9f56b..8ee4074350 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c @@ -31,6 +31,7 @@ #include "libavcodec/vvc/vvcdsp.h" #include "libavcodec/x86/h26x/h2656dsp.h" +#if ARCH_X86_64 #define FW_PUT(name, depth, opt) \ static void ff_vvc_put_ ## name ## _ ## depth ## _##opt(int16_t *dst, const uint8_t *src, ptrdiff_t srcstride, \ int height, const int8_t *hf, const int8_t *vf, int width) \ @@ -204,51 +205,52 @@ AVG_FUNCS(16, 12, avx2) c->inter.avg = bf(avg, bd, opt); \ c->inter.w_avg = bf(w_avg, bd, opt); \ } while (0) +#endif void ff_vvc_dsp_init_x86(VVCDSPContext *const c, const int bd) { +#if ARCH_X86_64 const int cpu_flags = av_get_cpu_flags(); - if (ARCH_X86_64) { - if (bd == 8) { - if (EXTERNAL_SSE4(cpu_flags)) { - MC_LINK_SSE4(8); - } - if (EXTERNAL_AVX2_FAST(cpu_flags)) { - MC_LINKS_AVX2(8); - } - } else if (bd == 10) { - if (EXTERNAL_SSE4(cpu_flags)) { - MC_LINK_SSE4(10); - } - if (EXTERNAL_AVX2_FAST(cpu_flags)) { - MC_LINKS_AVX2(10); - MC_LINKS_16BPC_AVX2(10); - } - } else if (bd == 12) { - if (EXTERNAL_SSE4(cpu_flags)) { - MC_LINK_SSE4(12); - } - if (EXTERNAL_AVX2_FAST(cpu_flags)) { - MC_LINKS_AVX2(12); - MC_LINKS_16BPC_AVX2(12); - } + if (bd == 8) { + if (EXTERNAL_SSE4(cpu_flags)) { + MC_LINK_SSE4(8); } + if (EXTERNAL_AVX2_FAST(cpu_flags)) { + MC_LINKS_AVX2(8); + } + } else if (bd == 10) { + if (EXTERNAL_SSE4(cpu_flags)) { + MC_LINK_SSE4(10); + } + if (EXTERNAL_AVX2_FAST(cpu_flags)) { + MC_LINKS_AVX2(10); + MC_LINKS_16BPC_AVX2(10); + } + } else if (bd == 12) { + if (EXTERNAL_SSE4(cpu_flags)) { + MC_LINK_SSE4(12); + } + if (EXTERNAL_AVX2_FAST(cpu_flags)) { + MC_LINKS_AVX2(12); + MC_LINKS_16BPC_AVX2(12); + } + } - if (EXTERNAL_AVX2(cpu_flags)) { - switch (bd) { - case 8: - AVG_INIT(8, avx2); - break; - case 10: - AVG_INIT(10, avx2); - break; - case 12: - AVG_INIT(12, avx2); - break; - default: - break; - } + if (EXTERNAL_AVX2(cpu_flags)) { + switch (bd) { + case 8: + AVG_INIT(8, avx2); + break; + case 10: + AVG_INIT(10, avx2); + break; + case 12: + AVG_INIT(12, avx2); + break; + default: + break; } } +#endif } diff --git a/src/ExtLib/ffmpeg/libavutil/opt.c b/src/ExtLib/ffmpeg/libavutil/opt.c index 0908751752..d13b1ab504 100644 --- a/src/ExtLib/ffmpeg/libavutil/opt.c +++ b/src/ExtLib/ffmpeg/libavutil/opt.c @@ -93,7 +93,7 @@ FF_ENABLE_DEPRECATION_WARNINGS *den = ((AVRational *)dst)->den; return 0; case AV_OPT_TYPE_CONST: - *num = o->default_val.dbl; + *intnum = o->default_val.i64; return 0; } return AVERROR(EINVAL); @@ -878,7 +878,7 @@ int av_opt_get(void *obj, const char *name, int search_flags, uint8_t **out_val) ret = snprintf(buf, sizeof(buf), "%d/%d", ((AVRational *)dst)->num, ((AVRational *)dst)->den); break; case AV_OPT_TYPE_CONST: - ret = snprintf(buf, sizeof(buf), "%f", o->default_val.dbl); + ret = snprintf(buf, sizeof(buf), "%"PRId64, o->default_val.i64); break; case AV_OPT_TYPE_STRING: if (*(uint8_t **)dst) { diff --git a/src/ExtLib/ffmpeg/libavutil/rational.c b/src/ExtLib/ffmpeg/libavutil/rational.c index 69371e0b8f..fa650d6c03 100644 --- a/src/ExtLib/ffmpeg/libavutil/rational.c +++ b/src/ExtLib/ffmpeg/libavutil/rational.c @@ -114,7 +114,7 @@ AVRational av_d2q(double d, int max) return (AVRational) { d < 0 ? -1 : 1, 0 }; frexp(d, &exponent); exponent = FFMAX(exponent-1, 0); - den = 1LL << (61 - exponent); + den = 1LL << (62 - exponent); // (int64_t)rint() and llrint() do not work with gcc on ia64 and sparc64, // see Ticket2713 for affected gcc/glibc versions av_reduce(&a.num, &a.den, floor(d * den + 0.5), den, max); diff --git a/src/ExtLib/ffmpeg/libavutil/thread.h b/src/ExtLib/ffmpeg/libavutil/thread.h index cbab71f1e7..cf25e90a72 100644 --- a/src/ExtLib/ffmpeg/libavutil/thread.h +++ b/src/ExtLib/ffmpeg/libavutil/thread.h @@ -26,6 +26,8 @@ #if HAVE_PRCTL #include +#elif (HAVE_PTHREAD_SETNAME_NP || HAVE_PTHREAD_SET_NAME_NP) && HAVE_PTHREAD_NP_H +#include #endif #include "error.h" @@ -213,11 +215,25 @@ static inline int ff_thread_once(char *control, void (*routine)(void)) static inline int ff_thread_setname(const char *name) { + int ret = 0; + #if HAVE_PRCTL - return AVERROR(prctl(PR_SET_NAME, name)); + ret = AVERROR(prctl(PR_SET_NAME, name)); +#elif HAVE_PTHREAD_SETNAME_NP +#if defined(__APPLE__) + ret = AVERROR(pthread_setname_np(name)); +#elif defined(__NetBSD__) + ret = AVERROR(pthread_setname_np(pthread_self(), "%s", name)); +#else + ret = AVERROR(pthread_setname_np(pthread_self(), name)); +#endif +#elif HAVE_PTHREAD_SET_NAME_NP + pthread_set_name_np(pthread_self(), name); +#else + ret = AVERROR(ENOSYS); #endif - return AVERROR(ENOSYS); + return ret; } #endif /* AVUTIL_THREAD_H */ diff --git a/src/ExtLib/ffmpeg/libavutil/x86/tx_float.asm b/src/ExtLib/ffmpeg/libavutil/x86/tx_float.asm index e1533a8595..42006848f1 100644 --- a/src/ExtLib/ffmpeg/libavutil/x86/tx_float.asm +++ b/src/ExtLib/ffmpeg/libavutil/x86/tx_float.asm @@ -46,7 +46,7 @@ %endif %assign i 16 -%rep 14 +%rep 18 cextern tab_ %+ i %+ _float ; ff_tab_i_float... %assign i (i << 1) %endrep @@ -1385,7 +1385,11 @@ FFT_SPLIT_RADIX_DEF 8192, .16384pt FFT_SPLIT_RADIX_DEF 16384, .32768pt FFT_SPLIT_RADIX_DEF 32768, .65536pt FFT_SPLIT_RADIX_DEF 65536, .131072pt -FFT_SPLIT_RADIX_DEF 131072 +FFT_SPLIT_RADIX_DEF 131072, .262144pt +FFT_SPLIT_RADIX_DEF 262144, .524288pt +FFT_SPLIT_RADIX_DEF 524288, .1048576pt +FFT_SPLIT_RADIX_DEF 1048576, .2097152pt +FFT_SPLIT_RADIX_DEF 2097152 ;=============================================================================== ; Final synthesis + deinterleaving code From a743c2f528429369782cb79081a488d698b33164 Mon Sep 17 00:00:00 2001 From: v0lt Date: Thu, 8 Feb 2024 06:41:43 +0300 Subject: [PATCH 36/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B8=D1=81=D0=BF=D0=B0=D0=BD=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0?= =?UTF-8?q?=D0=B2=D1=82=D0=BE=D1=80=20IPeluchito).=20=D0=9E=D0=B1=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=20=D1=8F=D0=BF=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=20(=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20tsubasanouta).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.es.rc | 14 +++++++------- src/apps/mpcresources/mplayerc.ja.rc | 10 +++++----- src/apps/mpcresources/text/mplayerc.es.rc.txt | 14 +++++++------- src/apps/mpcresources/text/mplayerc.ja.rc.txt | 10 +++++----- 4 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.es.rc b/src/apps/mpcresources/mplayerc.es.rc index 3fc6c4e89b..5a21b8c5b7 100644 --- a/src/apps/mpcresources/mplayerc.es.rc +++ b/src/apps/mpcresources/mplayerc.es.rc @@ -766,12 +766,12 @@ BEGIN PUSHBUTTON "SEC",IDC_COLORSEC,170,108,20,14 CONTROL "",IDC_SLIDER2,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP | 0x400,190,109,100,12 LTEXT "Contorno",IDC_STATIC,119,127,47,8 - PUSHBUTTON "OUTL",IDC_COLOROUTL,170,124,20,14 + PUSHBUTTON "CONT",IDC_COLOROUTL,170,124,20,14 CONTROL "",IDC_SLIDER3,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP | 0x400,190,125,100,12 LTEXT "Sombra",IDC_STATIC,119,143,47,8 - PUSHBUTTON "SHAD",IDC_COLORSHAD,170,140,20,14 + PUSHBUTTON "SOMB",IDC_COLORSHAD,170,140,20,14 CONTROL "",IDC_SLIDER4,"msctls_trackbar32",TBS_BOTH | TBS_NOTICKS | WS_TABSTOP | 0x400,190,141,100,12 - CONTROL "Vincular canales alpha",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,157,110,10 + CONTROL "Vincular canales alfa",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,180,157,110,10 PUSHBUTTON "Reiniciar",IDC_RESET,242,192,50,14 END @@ -2640,7 +2640,7 @@ BEGIN IDS_RECENT_FILES_CLEAR "Lista Borrada" IDS_RECENT_FILES "Archivos Recientes" IDS_RECENT_FILES_QUESTION "¿Estas seguro de que deseas borrar la lista de archivos recientes?" - IDS_HISTORY_REDUCE_QUESTION "Your history file contains %u entries. Are you sure you want to reduce the number of entries to %u?" + IDS_HISTORY_REDUCE_QUESTION "Tu historial contiene %u entradas. Estás seguro de que quieres reducir el número de entradas a %u?" END STRINGTABLE @@ -3169,7 +3169,7 @@ END STRINGTABLE BEGIN - IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_BLOCK_EXTERNAL_VR "No puedes agregar %s como filtro externo.\nDebes seleccionar tu renderizador de video preferido en la página de configuración de video." END STRINGTABLE @@ -3181,7 +3181,7 @@ BEGIN IDS_DESC_EVR_CP "Igual que el EVR, pero con el Asignador-Presentador para subtitulado y postprocesado." IDS_DESC_MADVR "Renderizador de alta calidad, requiere una GPU que soporte D3D9 o posterior." IDS_DESC_EVR_SYNC "Igual que el EVR (CP), pero ofrece varias opciones para sincronizar la frecuencia de fotogramas de video con la frecuencia de actualización de pantalla para eliminar fotogramas de video omitidos o duplicados." - IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." + IDS_DESC_MPC_VR "Renderizador de video con soporte para Direct3D 11." END STRINGTABLE @@ -3646,7 +3646,7 @@ BEGIN IDS_SATURATION_DEC "Disminuir Saturación" IDS_RESET_COLOR "Restablecer la configuración de color" IDS_AFTERPLAYBACK_CLOSE_FILE "Después de Reproducir: Siempre cerrar archivo" - IDS_UPDATE_ERROR_DATA "The update server gives the wrong data.\n\nPlease try later." + IDS_UPDATE_ERROR_DATA "El servidor de actualización proporciona datos incorrectos.\n\nPor favor inténtelo más tarde." IDS_USING_NEWER_VERSION "Ya estás usando la última versión %s." IDS_NEW_UPDATE_AVAILABLE "Una nueva %s está disponible.\n\nDeseas visitar el sitio web de MPC-BE para descargarlo?" IDS_UPDATE_ERROR_CONNECT "Servidor de actualización no encontrado.\n\nPor favor compruebe su conexión a internet o vuelva a intentarlo más tarde." diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index a8bb1ab340..016c578e19 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -3177,11 +3177,11 @@ BEGIN IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" IDS_DESC_NULLVR_ANY "あらゆる動画の (ような) メディア タイプに接続して入力サンプルをどこにも出力しません。映像の表示を必要とせず、CPU を無駄な動作から節約したい場合に使用してください。" IDS_DESC_NULLVR_UNCOMP "標準の Null レンダラーと同じですが、これは非圧縮タイプにのみ接続します。" - IDS_DESC_EVR "ハードウェア デコーディングに対応したレンダラーです。" - IDS_DESC_EVR_CP "EVR と同じですが、字幕と後処理のためにアロケーター プレゼンターを使用します。" - IDS_DESC_MADVR "高品質なレンダラーで、D3D9 以降に対応した GPU が必要です。" - IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、ディスプレイのリフレッシュ レートと動画のフレーム レートを同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" - IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." + IDS_DESC_EVR "ハードウェア デコードをサポートするビデオレンダラーです。" + IDS_DESC_EVR_CP "EVR と同じですが、字幕作成と後処理のためにアロケーター プレゼンターを使用します。" + IDS_DESC_MADVR "高品質のレンダラーで、D3D9 以降をサポートする GPU が必要です。" + IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、動画のフレーム レートをディスプレイのリフレッシュ レートと同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" + IDS_DESC_MPC_VR "Direct3D 11 をサポートするビデオ レンダラーです。" END STRINGTABLE diff --git a/src/apps/mpcresources/text/mplayerc.es.rc.txt b/src/apps/mpcresources/text/mplayerc.es.rc.txt index cada3a8a60..290942a29d 100644 --- a/src/apps/mpcresources/text/mplayerc.es.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.es.rc.txt @@ -494,10 +494,10 @@ BEGIN DIALOGEX IDD_PPAGESUBSTYLE LINES 67 56 "Secundario" 57 "SEC" 59 "Contorno" -60 "OUTL" +60 "CONT" 62 "Sombra" -63 "SHAD" -65 "Vincular canales alpha" +63 "SOMB" +65 "Vincular canales alfa" 66 "Reiniciar" END @@ -1347,7 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "No se pudo conectar el sintonizador y e STRING IDS_BDA_ERROR_CREATE_RECEIVER "No se pudo crear el receptor." STRING IDS_BDA_ERROR_CREATE_TUNER "No se pudo crear el sintonizador." STRING IDS_BDA_ERROR_DEMULTIPLEXER "No se pudo crear el demultiplexor." -STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." +STRING IDS_BLOCK_EXTERNAL_VR "No puedes agregar %s como filtro externo.\nDebes seleccionar tu renderizador de video preferido en la página de configuración de video." STRING IDS_BRIGHTNESS_DEC "Disminuir Brillo" STRING IDS_BRIGHTNESS_INC "Aumentar Brillo" STRING IDS_CANCEL "Cancelar" @@ -1435,7 +1435,7 @@ STRING IDS_DESC_EVR_CP "Igual que el EVR, pero con el Asignador-Presentador par STRING IDS_DESC_EVR_SYNC "Igual que el EVR (CP), pero ofrece varias opciones para sincronizar la frecuencia de fotogramas de video con la frecuencia de actualización de pantalla para eliminar fotogramas de video omitidos o duplicados." STRING IDS_DESC_HAALI_VR "Se parece al VMR-9, pero usa un verdadero redimensionador bicúbico." STRING IDS_DESC_MADVR "Renderizador de alta calidad, requiere una GPU que soporte D3D9 o posterior." -STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." +STRING IDS_DESC_MPC_VR "Renderizador de video con soporte para Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Conecta a cualquier tipo de medio de video y manda las muestras a ningún lado. Utilízalo cuando no necesitas ver el video, y quieres evitar el uso de cpu innecesario." STRING IDS_DESC_NULLVR_UNCOMP "Igual que el renderizador Nulo normal, pero este solo conectará a tipos sin compresión." STRING IDS_DISABLE_ALL_FILTERS "&Desactivar todos los filtros" @@ -1506,7 +1506,7 @@ STRING IDS_GRAPH_TARGET_WND_ERROR "No se pudo establecer la ventana de destino STRING IDS_HISTORY_CLEAR "Borrar" STRING IDS_HISTORY_PATH "Ruta" STRING IDS_HISTORY_POSITION "Posición" -STRING IDS_HISTORY_REDUCE_QUESTION "Your history file contains %u entries. Are you sure you want to reduce the number of entries to %u?" +STRING IDS_HISTORY_REDUCE_QUESTION "Tu historial contiene %u entradas. Estás seguro de que quieres reducir el número de entradas a %u?" STRING IDS_HISTORY_REMOVE_MISSING "Eliminar archivos faltantes" STRING IDS_HISTORY_REMOVE_SELECTED "Eliminar seleccionado" STRING IDS_HISTORY_TITLE "Título" @@ -2027,7 +2027,7 @@ STRING IDS_UNIT_TIME_S "s" STRING IDS_UNKNOWN_SWITCH "Modificador(es) no conocido(s) encontrado(s) en la línea de comandos ejecutada: \n\n" STRING IDS_UPDATE_CLOSE "&Cerrar" STRING IDS_UPDATE_ERROR_CONNECT "Servidor de actualización no encontrado.\n\nPor favor compruebe su conexión a internet o vuelva a intentarlo más tarde." -STRING IDS_UPDATE_ERROR_DATA "The update server gives the wrong data.\n\nPlease try later." +STRING IDS_UPDATE_ERROR_DATA "El servidor de actualización proporciona datos incorrectos.\n\nPor favor inténtelo más tarde." STRING IDS_USING_NEWER_VERSION "Ya estás usando la última versión %s." STRING IDS_VDF_AR_MODE "Leer RA de la pista" STRING IDS_VDF_AUTO "Automático" diff --git a/src/apps/mpcresources/text/mplayerc.ja.rc.txt b/src/apps/mpcresources/text/mplayerc.ja.rc.txt index af777a4799..916d8efbd9 100644 --- a/src/apps/mpcresources/text/mplayerc.ja.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ja.rc.txt @@ -1430,12 +1430,12 @@ STRING IDS_CONTROLS_PLAYING "再生中" STRING IDS_CONTROLS_STOPPED "停止" STRING IDS_COPY_TO_CLIPBOARD "クリップボードにコピー" STRING IDS_CUSTOM_CHANNEL_MAPPING "カスタム チャネル マッピングの切り替え" -STRING IDS_DESC_EVR "ハードウェア デコーディングに対応したレンダラーです。" -STRING IDS_DESC_EVR_CP "EVR と同じですが、字幕と後処理のためにアロケーター プレゼンターを使用します。" -STRING IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、ディスプレイのリフレッシュ レートと動画のフレーム レートを同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" +STRING IDS_DESC_EVR "ハードウェア デコードをサポートするビデオレンダラーです。" +STRING IDS_DESC_EVR_CP "EVR と同じですが、字幕作成と後処理のためにアロケーター プレゼンターを使用します。" +STRING IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、動画のフレーム レートをディスプレイのリフレッシュ レートと同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" STRING IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" -STRING IDS_DESC_MADVR "高品質なレンダラーで、D3D9 以降に対応した GPU が必要です。" -STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." +STRING IDS_DESC_MADVR "高品質のレンダラーで、D3D9 以降をサポートする GPU が必要です。" +STRING IDS_DESC_MPC_VR "Direct3D 11 をサポートするビデオ レンダラーです。" STRING IDS_DESC_NULLVR_ANY "あらゆる動画の (ような) メディア タイプに接続して入力サンプルをどこにも出力しません。映像の表示を必要とせず、CPU を無駄な動作から節約したい場合に使用してください。" STRING IDS_DESC_NULLVR_UNCOMP "標準の Null レンダラーと同じですが、これは非圧縮タイプにのみ接続します。" STRING IDS_DISABLE_ALL_FILTERS "すべてのフィルターを無効にする(&D)" From 415dad9e4e6b62d2fd91467cff6c3e6f36e17040 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sat, 10 Feb 2024 13:38:23 +1000 Subject: [PATCH 37/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20zlib=201.3.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 3 ++- docs/Changelog.txt | 3 ++- src/ExtLib/zlib/ChangeLog | 10 ++++++++ src/ExtLib/zlib/deflate.c | 47 +++++++++++++++++++++++++++++--------- src/ExtLib/zlib/deflate.h | 35 ++++++++++++++++++++++++++-- src/ExtLib/zlib/gzguts.h | 8 ++----- src/ExtLib/zlib/gzlib.c | 12 +++++----- src/ExtLib/zlib/inflate.c | 2 +- src/ExtLib/zlib/inftrees.c | 6 ++--- src/ExtLib/zlib/inftrees.h | 4 ++-- src/ExtLib/zlib/trees.c | 20 +++++++++++++--- src/ExtLib/zlib/zconf.h | 10 +------- src/ExtLib/zlib/zlib.h | 22 +++++++++--------- src/ExtLib/zlib/zutil.h | 27 +++------------------- 14 files changed, 129 insertions(+), 80 deletions(-) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 019ee9ae22..d6a2000e7a 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -31,7 +31,8 @@ MPCVideoDec Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; - ZenLib git-v0.4.41-12-g26b4aa1. + ZenLib git-v0.4.41-12-g26b4aa1; + zlib 1.3.1. 1.6.11 - 2023-12-27 diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 9a1514b6e4..7fe5472f88 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -31,7 +31,8 @@ Updated libraries: Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; - ZenLib git-v0.4.41-12-g26b4aa1. + ZenLib git-v0.4.41-12-g26b4aa1; + zlib 1.3.1. 1.6.11 - 2023-12-27 diff --git a/src/ExtLib/zlib/ChangeLog b/src/ExtLib/zlib/ChangeLog index 8707988ac1..b801a1031e 100644 --- a/src/ExtLib/zlib/ChangeLog +++ b/src/ExtLib/zlib/ChangeLog @@ -1,6 +1,16 @@ ChangeLog file for zlib +Changes in 1.3.1 (22 Jan 2024) +- Reject overflows of zip header fields in minizip +- Fix bug in inflateSync() for data held in bit buffer +- Add LIT_MEM define to use more memory for a small deflate speedup +- Fix decision on the emission of Zip64 end records in minizip +- Add bounds checking to ERR_MSG() macro, used by zError() +- Neutralize zip file traversal attacks in miniunz +- Fix a bug in ZLIB_DEBUG compiles in check_match() +- Various portability and appearance improvements + Changes in 1.3 (18 Aug 2023) - Remove K&R function definitions and zlib2ansi - Fix bug in deflateBound() for level 0 and memLevel 9 diff --git a/src/ExtLib/zlib/deflate.c b/src/ExtLib/zlib/deflate.c index bd01175192..012ea8148e 100644 --- a/src/ExtLib/zlib/deflate.c +++ b/src/ExtLib/zlib/deflate.c @@ -1,5 +1,5 @@ /* deflate.c -- compress data using the deflation algorithm - * Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -52,7 +52,7 @@ #include "deflate.h" const char deflate_copyright[] = - " deflate 1.3 Copyright 1995-2023 Jean-loup Gailly and Mark Adler "; + " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -493,7 +493,7 @@ int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, * symbols from which it is being constructed. */ - s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, 4); + s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, LIT_BUFS); s->pending_buf_size = (ulg)s->lit_bufsize * 4; if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || @@ -503,8 +503,14 @@ int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, deflateEnd (strm); return Z_MEM_ERROR; } +#ifdef LIT_MEM + s->d_buf = (ushf *)(s->pending_buf + (s->lit_bufsize << 1)); + s->l_buf = s->pending_buf + (s->lit_bufsize << 2); + s->sym_end = s->lit_bufsize - 1; +#else s->sym_buf = s->pending_buf + s->lit_bufsize; s->sym_end = (s->lit_bufsize - 1) * 3; +#endif /* We avoid equality with lit_bufsize*3 because of wraparound at 64K * on 16 bit machines and because stored blocks are restricted to * 64K-1 bytes. @@ -720,9 +726,15 @@ int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) { if (deflateStateCheck(strm)) return Z_STREAM_ERROR; s = strm->state; +#ifdef LIT_MEM + if (bits < 0 || bits > 16 || + (uchf *)s->d_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; +#else if (bits < 0 || bits > 16 || s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) return Z_BUF_ERROR; +#endif do { put = Buf_size - s->bi_valid; if (put > bits) @@ -1294,7 +1306,7 @@ int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); - ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, 4); + ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, LIT_BUFS); if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || ds->pending_buf == Z_NULL) { @@ -1305,10 +1317,15 @@ int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); - zmemcpy(ds->pending_buf, ss->pending_buf, (uInt)ds->pending_buf_size); + zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS); ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); +#ifdef LIT_MEM + ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1)); + ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2); +#else ds->sym_buf = ds->pending_buf + ds->lit_bufsize; +#endif ds->l_desc.dyn_tree = ds->dyn_ltree; ds->d_desc.dyn_tree = ds->dyn_dtree; @@ -1539,13 +1556,21 @@ local uInt longest_match(deflate_state *s, IPos cur_match) { */ local void check_match(deflate_state *s, IPos start, IPos match, int length) { /* check that the match is indeed a match */ - if (zmemcmp(s->window + match, - s->window + start, length) != EQUAL) { - fprintf(stderr, " start %u, match %u, length %d\n", - start, match, length); + Bytef *back = s->window + (int)match, *here = s->window + start; + IPos len = length; + if (match == (IPos)-1) { + /* match starts one byte before the current window -- just compare the + subsequent length-1 bytes */ + back++; + here++; + len--; + } + if (zmemcmp(back, here, len) != EQUAL) { + fprintf(stderr, " start %u, match %d, length %d\n", + start, (int)match, length); do { - fprintf(stderr, "%c%c", s->window[match++], s->window[start++]); - } while (--length != 0); + fprintf(stderr, "(%02x %02x)", *back++, *here++); + } while (--len != 0); z_error("invalid match"); } if (z_verbose > 1) { diff --git a/src/ExtLib/zlib/deflate.h b/src/ExtLib/zlib/deflate.h index 8696791429..300c6ada62 100644 --- a/src/ExtLib/zlib/deflate.h +++ b/src/ExtLib/zlib/deflate.h @@ -1,5 +1,5 @@ /* deflate.h -- internal compression state - * Copyright (C) 1995-2018 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -23,6 +23,10 @@ # define GZIP #endif +/* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at + the cost of a larger memory footprint */ +/* #define LIT_MEM */ + /* =========================================================================== * Internal compression state. */ @@ -217,7 +221,14 @@ typedef struct internal_state { /* Depth of each subtree used as tie breaker for trees of equal frequency */ +#ifdef LIT_MEM +# define LIT_BUFS 5 + ushf *d_buf; /* buffer for distances */ + uchf *l_buf; /* buffer for literals/lengths */ +#else +# define LIT_BUFS 4 uchf *sym_buf; /* buffer for distances and literals/lengths */ +#endif uInt lit_bufsize; /* Size of match buffer for literals/lengths. There are 4 reasons for @@ -239,7 +250,7 @@ typedef struct internal_state { * - I can't count above 4 */ - uInt sym_next; /* running index in sym_buf */ + uInt sym_next; /* running index in symbol buffer */ uInt sym_end; /* symbol table full when sym_next reaches this */ ulg opt_len; /* bit length of current block with optimal trees */ @@ -318,6 +329,25 @@ void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, extern const uch ZLIB_INTERNAL _dist_code[]; #endif +#ifdef LIT_MEM +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->sym_next] = 0; \ + s->l_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->sym_next] = dist; \ + s->l_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +#else # define _tr_tally_lit(s, c, flush) \ { uch cc = (c); \ s->sym_buf[s->sym_next++] = 0; \ @@ -337,6 +367,7 @@ void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, s->dyn_dtree[d_code(dist)].Freq++; \ flush = (s->sym_next == s->sym_end); \ } +#endif #else # define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) # define _tr_tally_dist(s, distance, length, flush) \ diff --git a/src/ExtLib/zlib/gzguts.h b/src/ExtLib/zlib/gzguts.h index f9375047e8..eba72085bb 100644 --- a/src/ExtLib/zlib/gzguts.h +++ b/src/ExtLib/zlib/gzguts.h @@ -1,5 +1,5 @@ /* gzguts.h -- zlib internal header definitions for gz* operations - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -210,9 +210,5 @@ char ZLIB_INTERNAL *gz_strwinerror(DWORD error); /* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t value -- needed when comparing unsigned to z_off64_t, which is signed (possible z_off64_t types off_t, off64_t, and long are all signed) */ -#ifdef INT_MAX -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > INT_MAX) -#else unsigned ZLIB_INTERNAL gz_intmax(void); -# define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) -#endif +#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) diff --git a/src/ExtLib/zlib/gzlib.c b/src/ExtLib/zlib/gzlib.c index 29fc4486fb..983153cc8e 100644 --- a/src/ExtLib/zlib/gzlib.c +++ b/src/ExtLib/zlib/gzlib.c @@ -1,5 +1,5 @@ /* gzlib.c -- zlib functions common to reading and writing gzip files - * Copyright (C) 2004-2019 Mark Adler + * Copyright (C) 2004-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -563,20 +563,20 @@ void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { #endif } -#ifndef INT_MAX /* portably return maximum value for an int (when limits.h presumed not available) -- we need to do this to cover cases where 2's complement not used, since C standard permits 1's complement and sign-bit representations, otherwise we could just use ((unsigned)-1) >> 1 */ unsigned ZLIB_INTERNAL gz_intmax(void) { - unsigned p, q; - - p = 1; +#ifdef INT_MAX + return INT_MAX; +#else + unsigned p = 1, q; do { q = p; p <<= 1; p++; } while (p > q); return q >> 1; -} #endif +} diff --git a/src/ExtLib/zlib/inflate.c b/src/ExtLib/zlib/inflate.c index b0757a9b24..94ecff015a 100644 --- a/src/ExtLib/zlib/inflate.c +++ b/src/ExtLib/zlib/inflate.c @@ -1387,7 +1387,7 @@ int ZEXPORT inflateSync(z_streamp strm) { /* if first time, start search in bit buffer */ if (state->mode != SYNC) { state->mode = SYNC; - state->hold <<= state->bits & 7; + state->hold >>= state->bits & 7; state->bits -= state->bits & 7; len = 0; while (state->bits >= 8) { diff --git a/src/ExtLib/zlib/inftrees.c b/src/ExtLib/zlib/inftrees.c index 8a208c2daa..98cfe16445 100644 --- a/src/ExtLib/zlib/inftrees.c +++ b/src/ExtLib/zlib/inftrees.c @@ -1,5 +1,5 @@ /* inftrees.c -- generate Huffman trees for efficient decoding - * Copyright (C) 1995-2023 Mark Adler + * Copyright (C) 1995-2024 Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -9,7 +9,7 @@ #define MAXBITS 15 const char inflate_copyright[] = - " inflate 1.3 Copyright 1995-2023 Mark Adler "; + " inflate 1.3.1 Copyright 1995-2024 Mark Adler "; /* If you use the zlib library in a product, an acknowledgment is welcome in the documentation of your product. If for some reason you cannot @@ -57,7 +57,7 @@ int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; static const unsigned short lext[31] = { /* Length codes 257..285 extra */ 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, - 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 198, 203}; + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77}; static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, diff --git a/src/ExtLib/zlib/inftrees.h b/src/ExtLib/zlib/inftrees.h index a10712d8cb..396f74b5da 100644 --- a/src/ExtLib/zlib/inftrees.h +++ b/src/ExtLib/zlib/inftrees.h @@ -41,8 +41,8 @@ typedef struct { examples/enough.c found in the zlib distribution. The arguments to that program are the number of symbols, the initial root table size, and the maximum bit length of a code. "enough 286 9 15" for literal/length codes - returns returns 852, and "enough 30 6 15" for distance codes returns 592. - The initial root table size (9 or 6) is found in the fifth argument of the + returns 852, and "enough 30 6 15" for distance codes returns 592. The + initial root table size (9 or 6) is found in the fifth argument of the inflate_table() calls in inflate.c and infback.c. If the root table size is changed, then these maximum sizes would be need to be recalculated and updated. */ diff --git a/src/ExtLib/zlib/trees.c b/src/ExtLib/zlib/trees.c index 8dbdc40bac..6a523ef34e 100644 --- a/src/ExtLib/zlib/trees.c +++ b/src/ExtLib/zlib/trees.c @@ -1,5 +1,5 @@ /* trees.c -- output deflated data using Huffman coding - * Copyright (C) 1995-2021 Jean-loup Gailly + * Copyright (C) 1995-2024 Jean-loup Gailly * detect_data_type() function provided freely by Cosmin Truta, 2006 * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -899,14 +899,19 @@ local void compress_block(deflate_state *s, const ct_data *ltree, const ct_data *dtree) { unsigned dist; /* distance of matched string */ int lc; /* match length or unmatched char (if dist == 0) */ - unsigned sx = 0; /* running index in sym_buf */ + unsigned sx = 0; /* running index in symbol buffers */ unsigned code; /* the code to send */ int extra; /* number of extra bits to send */ if (s->sym_next != 0) do { +#ifdef LIT_MEM + dist = s->d_buf[sx]; + lc = s->l_buf[sx++]; +#else dist = s->sym_buf[sx++] & 0xff; dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; lc = s->sym_buf[sx++]; +#endif if (dist == 0) { send_code(s, lc, ltree); /* send a literal byte */ Tracecv(isgraph(lc), (stderr," '%c' ", lc)); @@ -931,8 +936,12 @@ local void compress_block(deflate_state *s, const ct_data *ltree, } } /* literal or match pair ? */ - /* Check that the overlay between pending_buf and sym_buf is ok: */ + /* Check for no overlay of pending_buf on needed symbols */ +#ifdef LIT_MEM + Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow"); +#else Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); +#endif } while (sx < s->sym_next); @@ -1082,9 +1091,14 @@ void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, * the current block must be flushed. */ int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) { +#ifdef LIT_MEM + s->d_buf[s->sym_next] = (ush)dist; + s->l_buf[s->sym_next++] = (uch)lc; +#else s->sym_buf[s->sym_next++] = (uch)dist; s->sym_buf[s->sym_next++] = (uch)(dist >> 8); s->sym_buf[s->sym_next++] = (uch)lc; +#endif if (dist == 0) { /* lc is the unmatched char */ s->dyn_ltree[lc].Freq++; diff --git a/src/ExtLib/zlib/zconf.h b/src/ExtLib/zlib/zconf.h index fb76ffe312..62adc8d843 100644 --- a/src/ExtLib/zlib/zconf.h +++ b/src/ExtLib/zlib/zconf.h @@ -1,5 +1,5 @@ /* zconf.h -- configuration of the zlib compression library - * Copyright (C) 1995-2016 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -300,14 +300,6 @@ # endif #endif -#ifndef Z_ARG /* function prototypes for stdarg */ -# if defined(STDC) || defined(Z_HAVE_STDARG_H) -# define Z_ARG(args) args -# else -# define Z_ARG(args) () -# endif -#endif - /* The following definitions for FAR are needed only for MSDOS mixed * model programming (small or medium model with some far allocations). * This was tested only with MSC; for other MSDOS compilers you may have diff --git a/src/ExtLib/zlib/zlib.h b/src/ExtLib/zlib/zlib.h index 6b7244f994..8d4b932eaf 100644 --- a/src/ExtLib/zlib/zlib.h +++ b/src/ExtLib/zlib/zlib.h @@ -1,7 +1,7 @@ /* zlib.h -- interface of the 'zlib' general purpose compression library - version 1.3, August 18th, 2023 + version 1.3.1, January 22nd, 2024 - Copyright (C) 1995-2023 Jean-loup Gailly and Mark Adler + Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler This software is provided 'as-is', without any express or implied warranty. In no event will the authors be held liable for any damages @@ -37,11 +37,11 @@ extern "C" { #endif -#define ZLIB_VERSION "1.3" -#define ZLIB_VERNUM 0x1300 +#define ZLIB_VERSION "1.3.1" +#define ZLIB_VERNUM 0x1310 #define ZLIB_VER_MAJOR 1 #define ZLIB_VER_MINOR 3 -#define ZLIB_VER_REVISION 0 +#define ZLIB_VER_REVISION 1 #define ZLIB_VER_SUBREVISION 0 /* @@ -936,10 +936,10 @@ ZEXTERN int ZEXPORT inflateSync(z_streamp strm); inflateSync returns Z_OK if a possible full flush point has been found, Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. - In the success case, the application may save the current current value of - total_in which indicates where valid compressed data was found. In the - error case, the application may repeatedly call inflateSync, providing more - input each time, until success or end of the input data. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. */ ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, @@ -1758,14 +1758,14 @@ ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); seq1 and seq2 with lengths len1 and len2, CRC-32 check values were calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and - len2. + len2. len2 must be non-negative. */ /* ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); Return the operator corresponding to length len2, to be used with - crc32_combine_op(). + crc32_combine_op(). len2 must be non-negative. */ ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); diff --git a/src/ExtLib/zlib/zutil.h b/src/ExtLib/zlib/zutil.h index 902a304cc2..48dd7febae 100644 --- a/src/ExtLib/zlib/zutil.h +++ b/src/ExtLib/zlib/zutil.h @@ -1,5 +1,5 @@ /* zutil.h -- internal interface and configuration of the compression library - * Copyright (C) 1995-2022 Jean-loup Gailly, Mark Adler + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler * For conditions of distribution and use, see copyright notice in zlib.h */ @@ -56,7 +56,7 @@ typedef unsigned long ulg; extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ /* (size given to avoid silly warnings with Visual C++) */ -#define ERR_MSG(err) z_errmsg[Z_NEED_DICT-(err)] +#define ERR_MSG(err) z_errmsg[(err) < -6 || (err) > 2 ? 9 : 2 - (err)] #define ERR_RETURN(strm,err) \ return (strm->msg = ERR_MSG(err), (err)) @@ -137,17 +137,8 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # endif #endif -#if defined(MACOS) || defined(TARGET_OS_MAC) +#if defined(MACOS) # define OS_CODE 7 -# ifndef Z_SOLO -# if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os -# include /* for fdopen */ -# else -# ifndef fdopen -# define fdopen(fd,mode) NULL /* No fdopen() */ -# endif -# endif -# endif #endif #ifdef __acorn @@ -170,18 +161,6 @@ extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ # define OS_CODE 19 #endif -#if defined(_BEOS_) || defined(RISCOS) -# define fdopen(fd,mode) NULL /* No fdopen() */ -#endif - -#if (defined(_MSC_VER) && (_MSC_VER > 600)) && !defined __INTERIX -# if defined(_WIN32_WCE) -# define fdopen(fd,mode) NULL /* No fdopen() */ -# else -# define fdopen(fd,type) _fdopen(fd,type) -# endif -#endif - #if defined(__BORLANDC__) && !defined(MSDOS) #pragma warn -8004 #pragma warn -8008 From 28f534a373613329871ae548e673309f9bf9a771 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sat, 10 Feb 2024 10:47:51 +0300 Subject: [PATCH 38/87] =?UTF-8?q?DSUtil:=20=D0=92=20=D1=84=D1=83=D0=BD?= =?UTF-8?q?=D0=BA=D1=86=D0=B8=D1=8E=20HR2Str=20=D0=B4=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D1=80=D0=B0=D1=81=D1=88=D0=B8?= =?UTF-8?q?=D1=84=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20MF=5FE=5FINVALID=5FFORMA?= =?UTF-8?q?T.=20=D0=A2=D0=B0=D0=BA=D1=83=D1=8E=20=D0=BE=D1=88=D0=B8=D0=B1?= =?UTF-8?q?=D0=BA=D1=83=20=D0=BC=D0=BE=D0=B6=D0=B5=D1=82=20=D0=B2=D1=8B?= =?UTF-8?q?=D0=B4=D0=B0=D0=B2=D0=B0=D1=82=D1=8C=20IWICImagingFactory::Crea?= =?UTF-8?q?teBitmapFromSource.=20=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B8=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B4=D0=BE=D0=BA=D1=83=D0=BC=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=D1=86=D0=B8=D1=8E.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DSUtil/Utils.cpp | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/DSUtil/Utils.cpp b/src/DSUtil/Utils.cpp index 0a9aade51d..c07e984bab 100644 --- a/src/DSUtil/Utils.cpp +++ b/src/DSUtil/Utils.cpp @@ -1,5 +1,5 @@ /* - * (C) 2016-2022 see Authors.txt + * (C) 2016-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -367,7 +367,7 @@ CStringW HR2Str(const HRESULT hr) #define UNPACK_VALUE(VALUE) case VALUE: str = L#VALUE; break; #define UNPACK_HR_WIN32(VALUE) case (((VALUE) & 0x0000FFFF) | (FACILITY_WIN32 << 16) | 0x80000000): str = L#VALUE; break; switch (hr) { - // Common HRESULT Values https://docs.microsoft.com/en-us/windows/desktop/seccrypto/common-hresult-values + // Common HRESULT Values https://learn.microsoft.com/en-us/windows/win32/seccrypto/common-hresult-values UNPACK_VALUE(S_OK); #ifdef _WINERROR_ UNPACK_VALUE(S_FALSE); @@ -381,12 +381,12 @@ CStringW HR2Str(const HRESULT hr) UNPACK_VALUE(E_HANDLE); UNPACK_VALUE(E_OUTOFMEMORY); UNPACK_VALUE(E_INVALIDARG); - // some COM Error Codes (Generic) https://docs.microsoft.com/en-us/windows/win32/com/com-error-codes-1 + // some COM Error Codes (Generic) https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-1 UNPACK_VALUE(REGDB_E_CLASSNOTREG); - // some COM Error Codes (UI, Audio, DirectX, Codec) https://docs.microsoft.com/en-us/windows/win32/com/com-error-codes-10 + // some COM Error Codes (UI, Audio, DirectX, Codec) https://learn.microsoft.com/en-us/windows/win32/com/com-error-codes-10 UNPACK_VALUE(WINCODEC_ERR_UNSUPPORTEDPIXELFORMAT); UNPACK_VALUE(WINCODEC_ERR_PROPERTYUNEXPECTEDTYPE); - // some System Error Codes https://docs.microsoft.com/en-us/windows/win32/debug/system-error-codes + // some System Error Codes https://learn.microsoft.com/en-us/windows/win32/debug/system-error-codes UNPACK_HR_WIN32(ERROR_FILE_NOT_FOUND) UNPACK_HR_WIN32(ERROR_MOD_NOT_FOUND); UNPACK_HR_WIN32(ERROR_INVALID_WINDOW_HANDLE); @@ -397,7 +397,7 @@ CStringW HR2Str(const HRESULT hr) UNPACK_VALUE(VFW_E_ENUM_OUT_OF_SYNC); #endif #ifdef _D3D9_H_ - // some D3DERR values https://docs.microsoft.com/en-us/windows/desktop/direct3d9/d3derr + // some D3DERR values https://learn.microsoft.com/en-us/windows/win32/direct3d9/d3derr UNPACK_VALUE(S_PRESENT_OCCLUDED); UNPACK_VALUE(S_PRESENT_MODE_CHANGED); UNPACK_VALUE(D3DERR_DEVICEHUNG); @@ -413,6 +413,7 @@ CStringW HR2Str(const HRESULT hr) #ifdef _MFERROR_H // some MF_E values UNPACK_VALUE(MF_E_INVALIDSTREAMNUMBER); + UNPACK_VALUE(MF_E_INVALID_FORMAT); UNPACK_VALUE(MF_E_TRANSFORM_NEED_MORE_INPUT); UNPACK_VALUE(MF_E_TRANSFORM_STREAM_CHANGE); UNPACK_VALUE(MF_E_TRANSFORM_TYPE_NOT_SET); From ac11a73011a256089486a410d1d65ad5a8fe0986 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sat, 10 Feb 2024 14:40:11 +0300 Subject: [PATCH 39/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=8F=D0=BF=D0=BE=D0=BD=D1=81=D0=BA=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20tsubasanouta).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.ja.rc | 14 +++++++------- src/apps/mpcresources/text/mplayerc.ja.rc.txt | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index 016c578e19..cb7c00c44c 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -2513,7 +2513,7 @@ END STRINGTABLE BEGIN IDC_REGULARSURF "映像の表面を通常のオフスクリーン サーフェスとして割り当てます。" - IDC_DX9RESIZER_COMBO "ピクセル シェーダー 2.0 に対応していなければ自動的に単純な線形補間が使用されます。" + IDC_DX9RESIZER_COMBO "ピクセル シェーダー 2.0 がサポートされていない場合は、単純な線形補間が自動的に使用されます。" END STRINGTABLE @@ -3177,9 +3177,9 @@ BEGIN IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" IDS_DESC_NULLVR_ANY "あらゆる動画の (ような) メディア タイプに接続して入力サンプルをどこにも出力しません。映像の表示を必要とせず、CPU を無駄な動作から節約したい場合に使用してください。" IDS_DESC_NULLVR_UNCOMP "標準の Null レンダラーと同じですが、これは非圧縮タイプにのみ接続します。" - IDS_DESC_EVR "ハードウェア デコードをサポートするビデオレンダラーです。" + IDS_DESC_EVR "ハードウェア デコードをサポートするビデオ レンダラーです。" IDS_DESC_EVR_CP "EVR と同じですが、字幕作成と後処理のためにアロケーター プレゼンターを使用します。" - IDS_DESC_MADVR "高品質のレンダラーで、D3D9 以降をサポートする GPU が必要です。" + IDS_DESC_MADVR "高品質のレンダラーであり、D3D9 以降をサポートする GPU が必要です。" IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、動画のフレーム レートをディスプレイのリフレッシュ レートと同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" IDS_DESC_MPC_VR "Direct3D 11 をサポートするビデオ レンダラーです。" END @@ -3360,7 +3360,7 @@ BEGIN IDS_ARS_RELEASE_DEVICE_IDLE "アイドル状態時にデバイスを解放する" IDS_ARS_CROSSFEED "ステレオ クロスフィードを有効にする (ヘッドホン用)" IDS_ARS_DEVICE_PERIOD "デバイス バッファー:" - IDS_ARS_ALT_CHECK_FORMAT "対応している形式の代替確認" + IDS_ARS_ALT_CHECK_FORMAT "サポートされている形式の代替確認" IDS_ARS_STATUS "ステータス" IDS_ARS_DEVICE "デバイス:" IDS_ARS_MODE "モード:" @@ -3425,7 +3425,7 @@ END STRINGTABLE BEGIN IDS_NAVIGATE_TUNERSCAN "チューナー調整" - IDS_SUBTITLES_ERROR "字幕が読み込まれていないか、未対応のレンダラーです。" + IDS_SUBTITLES_ERROR "字幕が読み込まれていないか、レンダラーがサポートされていません。" END STRINGTABLE @@ -3666,7 +3666,7 @@ BEGIN IDS_GOTO_ERROR_PARSING_TEXT "入力されたテキストの解析エラーが発生しました!" IDS_GOTO_ERROR_PARSING_FPS "入力されたフレーム レートの解析エラーが発生しました!" IDS_FRAME_STEP_ERROR_RENDERER "コマ送りできません。別のビデオ レンダラーを試してください。" - IDS_SCREENSHOT_ERROR_SHOCKWAVE "「画像を保存」と「サムネイルを保存」機能は、Shockwave ファイルには対応していません。" + IDS_SCREENSHOT_ERROR_SHOCKWAVE "「画像を保存」と「サムネイルを保存」機能は、Shockwave ファイルでは機能しません。" IDS_SCREENSHOT_ERROR_OVERLAY "「画像を保存」と「サムネイルを保存」機能は、オーバーレイ ミキサー ビデオ レンダラーでは動作しません。\nMPC-BE の出力オプションでビデオ レンダラーを変更し、ファイルを開き直してください。" IDS_SUBDL_DLG_CONNECT_ERROR "オンライン字幕データベースに接続できません。" END @@ -3726,7 +3726,7 @@ BEGIN IDS_OSD_HUE "色相: %s°" IDS_OSD_SATURATION "彩度: %s" IDS_OSD_RESET_COLOR "カラー設定を復元しました" - IDS_OSD_NO_COLORCONTROL "カラー コントロールには対応していません" + IDS_OSD_NO_COLORCONTROL "カラー コントロールはサポートされていません" IDS_BRIGHTNESS_INC "明るさを上げる" END diff --git a/src/apps/mpcresources/text/mplayerc.ja.rc.txt b/src/apps/mpcresources/text/mplayerc.ja.rc.txt index 916d8efbd9..b2919ba89c 100644 --- a/src/apps/mpcresources/text/mplayerc.ja.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ja.rc.txt @@ -1043,7 +1043,7 @@ STRING IDC_CHECK_RELATIVETO "未設定のスタイルには既定の状態の STRING IDC_CHECK_SPCANIMWITHBUFFER "サブピクチャー バッファーを使用している時に字幕アニメーションを許可します。このオプションを無効にすると CPU 使用率が下がります。字幕が点滅する場合も無効にします。" STRING IDC_CHECK_SUBRESYNC "字幕(タイム コードを含む)の表示と編集、字幕によるナビゲーションができます。字幕の読み込み時間が大幅に伸びる可能性があります。" STRING IDC_D3D9DEVICE_CHECK "レンダリングに使用するグラフィック アダプターを指定します。 警告: ディスプレイが別のアダプターに接続されると誤作動の可能性があります。" -STRING IDC_DX9RESIZER_COMBO "ピクセル シェーダー 2.0 に対応していなければ自動的に単純な線形補間が使用されます。" +STRING IDC_DX9RESIZER_COMBO "ピクセル シェーダー 2.0 がサポートされていない場合は、単純な線形補間が自動的に使用されます。" STRING IDC_EXCLUSIVE_FULLSCREEN_CHECK "テアリングを減らしますが、ツールバーが表示されなくなります。このモードで全画面表示を解除するには、[Alt+Enter] [Ctrl+Enter] または [Ctrl+C] を押してください。" STRING IDC_REGULARSURF "映像の表面を通常のオフスクリーン サーフェスとして割り当てます。" STRING IDC_VSYNC "Direct3D9 経由で垂直同期を有効にします" @@ -1298,7 +1298,7 @@ STRING IDS_AG_ZOOM_50 "拡大 50%" STRING IDS_AG_ZOOM_AUTO_FIT "拡大 自動調整" STRING IDS_APPLY "適用する" STRING IDS_APP_DESCRIPTION "Windows OS 用の非常にパワフルな設定可能なマルチメディア プレーヤーの 1 つです。原作者は Gabest というハンガリーの開発者で、このバージョンには、排他フルスクリーン モードや Windows Vista/7 へのサポート強化といった機能の追加があります。" -STRING IDS_ARS_ALT_CHECK_FORMAT "対応している形式の代替確認" +STRING IDS_ARS_ALT_CHECK_FORMAT "サポートされている形式の代替確認" STRING IDS_ARS_BITEXACT_OUTPUT "bit-exact 出力を許可する" STRING IDS_ARS_CHANNELS "チャンネル:" STRING IDS_ARS_CROSSFEED "ステレオ クロスフィードを有効にする (ヘッドホン用)" @@ -1430,11 +1430,11 @@ STRING IDS_CONTROLS_PLAYING "再生中" STRING IDS_CONTROLS_STOPPED "停止" STRING IDS_COPY_TO_CLIPBOARD "クリップボードにコピー" STRING IDS_CUSTOM_CHANNEL_MAPPING "カスタム チャネル マッピングの切り替え" -STRING IDS_DESC_EVR "ハードウェア デコードをサポートするビデオレンダラーです。" +STRING IDS_DESC_EVR "ハードウェア デコードをサポートするビデオ レンダラーです。" STRING IDS_DESC_EVR_CP "EVR と同じですが、字幕作成と後処理のためにアロケーター プレゼンターを使用します。" STRING IDS_DESC_EVR_SYNC "EVR (CP) と同じですが、動画のフレーム レートをディスプレイのリフレッシュ レートと同期させて、ビデオ フレームのスキップや重複をなくすためのオプションがいくつかあります。" STRING IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" -STRING IDS_DESC_MADVR "高品質のレンダラーで、D3D9 以降をサポートする GPU が必要です。" +STRING IDS_DESC_MADVR "高品質のレンダラーであり、D3D9 以降をサポートする GPU が必要です。" STRING IDS_DESC_MPC_VR "Direct3D 11 をサポートするビデオ レンダラーです。" STRING IDS_DESC_NULLVR_ANY "あらゆる動画の (ような) メディア タイプに接続して入力サンプルをどこにも出力しません。映像の表示を必要とせず、CPU を無駄な動作から節約したい場合に使用してください。" STRING IDS_DESC_NULLVR_UNCOMP "標準の Null レンダラーと同じですが、これは非圧縮タイプにのみ接続します。" @@ -1729,7 +1729,7 @@ STRING IDS_OSD_CUSTOM_CH_MAPPING_OFF "カスタム チャネル マッピング STRING IDS_OSD_CUSTOM_CH_MAPPING_ON "カスタム チャネル マッピング: オン" STRING IDS_OSD_HUE "色相: %s°" STRING IDS_OSD_IMAGE_SAVED "画像は正常に保存されました" -STRING IDS_OSD_NO_COLORCONTROL "カラー コントロールには対応していません" +STRING IDS_OSD_NO_COLORCONTROL "カラー コントロールはサポートされていません" STRING IDS_OSD_REGAIN_VOLUME_OFF "音量回復: オフ" STRING IDS_OSD_REGAIN_VOLUME_ON "音量回復: オン" STRING IDS_OSD_RESET_COLOR "カラー設定を復元しました" @@ -1893,7 +1893,7 @@ STRING IDS_SCALE_ULTRAWIDE "ウルトラワイド画面に拡大,%.3f,%.3f,%.3f STRING IDS_SCALE_WIDESCREEN "ワイド画面に拡大,%.3f,%.3f,%.3f,%.3f" STRING IDS_SCREENSHOT_ERROR_MADVR "「画像を保存」と「サムネイルを保存」機能は、madVR ビデオ レンダラーでは動作しません。\nMPC-BE の出力オプションでビデオ レンダラーを変更し、ファイルを開き直してください。" STRING IDS_SCREENSHOT_ERROR_OVERLAY "「画像を保存」と「サムネイルを保存」機能は、オーバーレイ ミキサー ビデオ レンダラーでは動作しません。\nMPC-BE の出力オプションでビデオ レンダラーを変更し、ファイルを開き直してください。" -STRING IDS_SCREENSHOT_ERROR_SHOCKWAVE "「画像を保存」と「サムネイルを保存」機能は、Shockwave ファイルには対応していません。" +STRING IDS_SCREENSHOT_ERROR_SHOCKWAVE "「画像を保存」と「サムネイルを保存」機能は、Shockwave ファイルでは機能しません。" STRING IDS_SEEKBEGIN "開始時点にジャンプ" STRING IDS_SHADEREDITORDLG_0 "このシェーダーを削除しますか?" STRING IDS_SHADER_DELETE "削除" @@ -1954,7 +1954,7 @@ STRING IDS_SUBRESYNC_TIME_FORMAT "正しい時間の形式は [-]hh:mm:ss.ms STRING IDS_SUBRESYNC_YES "はい(&Y)" STRING IDS_SUBTITLES_DEFAULT_STYLE "既定のスタイル(&D)" STRING IDS_SUBTITLES_ENABLE "表示(&E)" -STRING IDS_SUBTITLES_ERROR "字幕が読み込まれていないか、未対応のレンダラーです。" +STRING IDS_SUBTITLES_ERROR "字幕が読み込まれていないか、レンダラーがサポートされていません。" STRING IDS_SUBTITLES_FORCED "強制のみ(&F)" STRING IDS_SUBTITLES_OPTIONS "オプション(&O)..." STRING IDS_SUBTITLES_RELOAD "再読み込み(&R)" From bee99032afa530afef3b01bea17159ab8e4696c7 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sat, 10 Feb 2024 14:54:54 +0300 Subject: [PATCH 40/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B=20Changelog.Rus.txt=20=D0=B8=20Changelog.txt?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 3 +++ docs/Changelog.txt | 3 +++ 2 files changed, 6 insertions(+) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index d6a2000e7a..3618ebade7 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -21,6 +21,9 @@ MPCVideoDec Не показываем нулевые часы при отображении времени. Немного изменена логика смещения кадра относительно центра окна. Улучшения открытия длинных путей и путей начинающихся с "\\?\". +Исправлена работа настройки "Поверх всех окон". +Исключена возможность добавление поддерживаемых видеорендереров в список внешних фильтров. Поддерживаемые видеорендереры выбираются в панели настроек "Видео". +Различные исправления интерфейса. Обновлен французский перевод (автор rhahgleuhargh). Обновлен итальянский перевод (автор mapi68). diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 7fe5472f88..769127b527 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -21,6 +21,9 @@ Added the ability to open the folder of the currently playing file using a hotke Do not show zero hours when displaying time. Changed the logic of frame offset relative to the center of the window. Improvements to opening long paths and paths starting with "\\?\". +Fixed the operation of the "On Top" setting. +The ability to add supported video renderers to the list of external filters has been removed. Supported video renderers are selected in the Video settings panel. +Various interface fixes. Updated French translation (by rhahgleuhargh). Updated Italian translation (by mapi68). From 5499058359ad398a92e67221f0e1d704693164d5 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sun, 11 Feb 2024 12:11:42 +1000 Subject: [PATCH 41/87] =?UTF-8?q?=D0=9C=D0=B0=D1=80=D0=BA=D0=B5=D1=80?= =?UTF-8?q?=D1=8B=20"=D0=9F=D0=BE=D0=B2=D1=82=D0=BE=D1=80=20A-B"=20=D0=BD?= =?UTF-8?q?=D0=B0=20=D0=BF=D0=BE=D0=BB=D0=BE=D1=81=D0=B5=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D1=80=D1=83=D1=82=D0=BA=D0=B8=20=D1=82=D0=B5=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D1=8C=20=D0=BE=D1=82=D0=BB=D0=B8=D1=87=D0=B0=D1=8E?= =?UTF-8?q?=D1=82=D1=81=D1=8F=20=D0=BE=D1=82=20=D0=BC=D0=B0=D1=80=D0=BA?= =?UTF-8?q?=D0=B5=D1=80=D0=BE=D0=B2=20=D0=B3=D0=BB=D0=B0=D0=B2=20-=20?= =?UTF-8?q?=D0=B1=D0=BE=D0=BB=D0=B5=D0=B5=20=D0=BA=D1=80=D1=83=D0=BF=D0=BD?= =?UTF-8?q?=D1=8B=D0=B5=20=D0=B8=20=D1=82=D0=BE=D0=BB=D1=89=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/PlayerSeekBar.cpp | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/apps/mplayerc/PlayerSeekBar.cpp b/src/apps/mplayerc/PlayerSeekBar.cpp index 7f71895809..e5ab452d62 100644 --- a/src/apps/mplayerc/PlayerSeekBar.cpp +++ b/src/apps/mplayerc/PlayerSeekBar.cpp @@ -283,24 +283,28 @@ void CPlayerSeekBar::OnPaint() const CRect channelRect(GetChannelRect()); if (s.bUseDarkTheme) { - auto funcMarkChannelTheme = [&](REFERENCE_TIME pos, CDC& memdc, CPen& pen, const CRect& rect) { + auto funcMarkChannelTheme = [&](REFERENCE_TIME pos, CDC& memdc, CPen& pen, const CRect& rect, bool thick) { if (pos <= 0 || pos >= m_stop) { return; } - const CRect r(channelRect); memdc.SelectObject(&pen); - const int x = r.left + (long)(pos * r.Width() / m_stop); + const int x = channelRect.left + (long)(pos * channelRect.Width() / m_stop); // instead of drawing hands can be a marker icon // HICON appIcon = (HICON)::LoadImageW(AfxGetResourceHandle(), MAKEINTRESOURCEW(IDR_MARKERS), IMAGE_ICON, 16, 16, LR_DEFAULTCOLOR); // ::DrawIconEx(memdc, x, rc2.top + 10, appIcon, 0, 0, 0, nullptr, DI_NORMAL); // ::DestroyIcon(appIcon); - memdc.MoveTo(x, rect.top + m_scaleY14); + memdc.MoveTo(x, rect.top + (thick ? m_scaleY14 / 2 : m_scaleY14)); memdc.LineTo(x, rect.bottom - m_scaleY2); - memdc.MoveTo(x - m_scaleX1, rect.bottom - m_scaleY2); - memdc.LineTo(x + m_scaleX1, rect.bottom - m_scaleY2); + if (thick) { + memdc.MoveTo(x + m_scaleX1, rect.top + m_scaleY14 / 2); + memdc.LineTo(x + m_scaleX1, rect.bottom - m_scaleY2); + } + + memdc.MoveTo(x - (thick ? m_scaleX1 * 2 : m_scaleX1), rect.bottom - m_scaleY2); + memdc.LineTo(x + (thick ? m_scaleX1 * 2 : m_scaleX1), rect.bottom - m_scaleY2); }; CDC memdc; @@ -391,7 +395,7 @@ void CPlayerSeekBar::OnPaint() if (FAILED(m_pChapterBag->ChapGet(idx, &rt, nullptr))) { continue; } - funcMarkChannelTheme(rt, memdc, m_penChapters, rc); + funcMarkChannelTheme(rt, memdc, m_penChapters, rc, false); } } } @@ -400,10 +404,10 @@ void CPlayerSeekBar::OnPaint() bool aEnabled, bEnabled; if (m_pMainFrame->CheckABRepeat(aPos, bPos, aEnabled, bEnabled)) { if (aEnabled) { - funcMarkChannelTheme(aPos, memdc, m_penRepeatAB, rc); + funcMarkChannelTheme(aPos, memdc, m_penRepeatAB, rc, true); } if (bEnabled) { - funcMarkChannelTheme(bPos, memdc, m_penRepeatAB, rc); + funcMarkChannelTheme(bPos, memdc, m_penRepeatAB, rc, true); } } } From 20249b07e78d389d6b50b8e09f37b82bc7ec287a Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sun, 11 Feb 2024 12:20:24 +1000 Subject: [PATCH 42/87] =?UTF-8?q?CMenuEx=20-=20std::list=20?= =?UTF-8?q?=D1=81=D0=B4=D0=B5=D0=BB=D0=B0=D0=BD=20=D1=87=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D0=BE=D0=BC=20=D0=BA=D0=BB=D0=B0=D1=81=D1=81=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/controls/MenuEx.cpp | 13 +------------ src/apps/mplayerc/controls/MenuEx.h | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 14 deletions(-) diff --git a/src/apps/mplayerc/controls/MenuEx.cpp b/src/apps/mplayerc/controls/MenuEx.cpp index 890561360d..db8b1d47c3 100644 --- a/src/apps/mplayerc/controls/MenuEx.cpp +++ b/src/apps/mplayerc/controls/MenuEx.cpp @@ -1,5 +1,5 @@ /* - * (C) 2018-2023 see Authors.txt + * (C) 2018-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -23,17 +23,6 @@ #include "../MainFrm.h" #include "DSUtil/SysVersion.h" -struct MENUITEM -{ - CString strText; - UINT uID = 0; - bool bMainMenu = false; - bool bFirstInMainMenu = false; - bool bPopupMenu = false; -}; -using LPMENUITEM = MENUITEM*; -std::list m_pMenuItems; - void CMenuEx::SetMain(CMainFrame* pMainFrame) { m_pMainFrame = pMainFrame; diff --git a/src/apps/mplayerc/controls/MenuEx.h b/src/apps/mplayerc/controls/MenuEx.h index 762fba9dfc..7a54863dbf 100644 --- a/src/apps/mplayerc/controls/MenuEx.h +++ b/src/apps/mplayerc/controls/MenuEx.h @@ -1,5 +1,5 @@ /* - * (C) 2018-2020 see Authors.txt + * (C) 2018-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -20,7 +20,6 @@ #pragma once -struct MENUITEM; class CMainFrame; class CMenuEx @@ -34,6 +33,17 @@ class CMenuEx static inline HMENU m_hMenuLast = nullptr; + struct MENUITEM + { + CString strText; + UINT uID = 0; + bool bMainMenu = false; + bool bFirstInMainMenu = false; + bool bPopupMenu = false; + }; + using LPMENUITEM = MENUITEM*; + static inline std::list m_pMenuItems; + public: CMenuEx() = default; ~CMenuEx() = default; From adde071026720f464eaa39cc39c12358cbf50b53 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Mon, 12 Feb 2024 11:48:03 +1000 Subject: [PATCH 43/87] =?UTF-8?q?MPCVideoDec=20-=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20=D0=BA=D0=BB=D1=8E=D1=87=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=B0=D0=B4=D1=80=D0=B0=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20VVC/H266.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/custom_code/ffmpeg.txt | 2 ++ src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c | 4 ++++ src/filters/transform/MPCVideoDec/MPCVideoDec.cpp | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) diff --git a/docs/custom_code/ffmpeg.txt b/docs/custom_code/ffmpeg.txt index ca98534458..1bdb385539 100644 --- a/docs/custom_code/ffmpeg.txt +++ b/docs/custom_code/ffmpeg.txt @@ -9,6 +9,8 @@ * libavcodec/x86/hevcdsp.h * libavcodec/x86/hevcdsp_init.c +* libavcodec/vvc/vvcdec.c + * libavcodec/aacsbr_template.c * libavcodec/bsf_list.c * libavcodec/codec_list.c diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c index 8163b5ecb6..a1fb0ec5b1 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c @@ -815,6 +815,10 @@ static int decode_nal_units(VVCContext *s, VVCFrameContext *fc, AVPacket *avpkt) "Error parsing NAL unit #%d.\n", i); goto fail; } +// ==> Start patch MPC + if (unit->type == VVC_IDR_W_RADL || unit->type == VVC_IDR_N_LP || unit->type == VVC_CRA_NUT || unit->type == VVC_GDR_NUT) + fc->frame->flags |= AV_FRAME_FLAG_KEY; +// ==> End patch MPC } } return 0; diff --git a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp index d068bfadd5..4f79d80f59 100644 --- a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp +++ b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp @@ -2252,7 +2252,8 @@ HRESULT CMPCVideoDecFilter::InitDecoder(const CMediaType* pmt) || m_CodecId == AV_CODEC_ID_RV40 || m_CodecId == AV_CODEC_ID_VP3 || m_CodecId == AV_CODEC_ID_THEORA - || m_CodecId == AV_CODEC_ID_MPEG4; + || m_CodecId == AV_CODEC_ID_MPEG4 + || m_CodecId == AV_CODEC_ID_VVC; } m_pAVCtx->codec_id = m_CodecId; From f50f1b7069886df73785c3ebcfae18e694d027b6 Mon Sep 17 00:00:00 2001 From: mapi68 <41143572+mapi68@users.noreply.github.com> Date: Mon, 12 Feb 2024 04:01:07 +0100 Subject: [PATCH 44/87] Update mplayerc.it.rc.txt --- src/apps/mpcresources/text/mplayerc.it.rc.txt | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/apps/mpcresources/text/mplayerc.it.rc.txt b/src/apps/mpcresources/text/mplayerc.it.rc.txt index 2497a4fc89..e5245f0560 100644 --- a/src/apps/mpcresources/text/mplayerc.it.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.it.rc.txt @@ -1347,7 +1347,7 @@ STRING IDS_BDA_ERROR_CONNECT_TUNER_REC "Impossibile collegare il sintonizzatore STRING IDS_BDA_ERROR_CREATE_RECEIVER "Impossibile creare il ricevitore." STRING IDS_BDA_ERROR_CREATE_TUNER "Impossibile creare il sintonizzatore." STRING IDS_BDA_ERROR_DEMULTIPLEXER "Impossibile creare il demultiplexer." -STRING IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." +STRING IDS_BLOCK_EXTERNAL_VR "Non puoi aggiungere %s come filtro esterno.\nDovresti selezionare il tuo renderer video preferito nella pagina Impostazioni video." STRING IDS_BRIGHTNESS_DEC "Incremento luminosità" STRING IDS_BRIGHTNESS_INC "Decremento luminosità" STRING IDS_CANCEL "Annulla" @@ -1430,15 +1430,15 @@ STRING IDS_CONTROLS_PLAYING "Riproduzione" STRING IDS_CONTROLS_STOPPED "Fermato" STRING IDS_COPY_TO_CLIPBOARD "Copia negli appunti" STRING IDS_CUSTOM_CHANNEL_MAPPING "Attiva/disattiva la mappatura personalizzata dei canali" -STRING IDS_DESC_EVR "Render video con supporto per la decodifica hardware." +STRING IDS_DESC_EVR "Renderer video con supporto per decodifica hardware." STRING IDS_DESC_EVR_CP "Come l'EVR, ma con Allocator-Presenter per la sottotitolazione e la postelaborazione." STRING IDS_DESC_EVR_SYNC "Come il EVR (CP), ma offre diverse opzioni per sincronizzare il video frame rate con la frequenza di aggiornamento display per eliminare video frame duplicati." STRING IDS_DESC_HAALI_VR "Sembra VMR-9, ma usa un vero ridimensionatore bicubico." -STRING IDS_DESC_MADVR "Rendering di alta qualità, richiede una GPU che supporti D3D9 o successivo." -STRING IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." +STRING IDS_DESC_MADVR "Renderer di alta qualità, richiede una GPU che supporti D3D9 o successivo." +STRING IDS_DESC_MPC_VR "Renderer video con supporto per Direct3D 11." STRING IDS_DESC_NULLVR_ANY "Si collega a qualsiasi tipo di supporto simile a un video e non invierà i campioni in arrivo da nessuna parte. Usalo quando non hai bisogno del display video e vuoi evitare che la CPU funzioni inutilmente." STRING IDS_DESC_NULLVR_UNCOMP "Come il normale renderer Null, ma questo si collegherà solo ai tipi non compressi." -STRING IDS_DISABLE_ALL_FILTERS "&Disattiva tutti i filtri" +STRING IDS_DISABLE_ALL_FILTERS "&Disabilita tutti i filtri" STRING IDS_DISABLE_DXVA_FILTERS "Disabilita i filtri DXVA" STRING IDS_DISABLE_FFMPEG_FILTERS "Disabilita i filtri FFmpeg" STRING IDS_DOWNLOAD_SUBS "Scarica i sottotitoli" @@ -1677,9 +1677,9 @@ STRING IDS_MOUSE_WHEEL_DOWN "Rotella giù" STRING IDS_MOUSE_WHEEL_LEFT "Rotella sinistra" STRING IDS_MOUSE_WHEEL_RIGHT "Rotella destra" STRING IDS_MOUSE_WHEEL_UP "Rotella su" -STRING IDS_MOVEWINDOWBYVIDEO_OFF "Sposta la finestra nell'area del video: Off" -STRING IDS_MOVEWINDOWBYVIDEO_ON "Sposta la finestra nell'area del video: On" -STRING IDS_MOVEWINDOWBYVIDEO_ONOFF "Sposta la finestra nell'area del video: On/Off" +STRING IDS_MOVEWINDOWBYVIDEO_OFF "Sposta finestra nell'area del video: Off" +STRING IDS_MOVEWINDOWBYVIDEO_ON "Sposta finestra nell'area del video: On" +STRING IDS_MOVEWINDOWBYVIDEO_ONOFF "Sposta finestra nell'area del video: On/Off" STRING IDS_MPADEC_AC3ENCODE "Codifica in AC-3" STRING IDS_MPADEC_AV_SYNC "Correzione sincronia A/V" STRING IDS_MPADEC_DRC "Applica DRC per AC-3 e E-AC-3" From 1bf085725ac20af8d35312f4633cb3bf620edc71 Mon Sep 17 00:00:00 2001 From: v0lt Date: Mon, 12 Feb 2024 19:58:18 +0300 Subject: [PATCH 45/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=B8=D1=82=D0=B0=D0=BB=D1=8C=D1=8F=D0=BD=D1=81?= =?UTF-8?q?=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4?= =?UTF-8?q?=20(=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20mapi68).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.it.rc | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.it.rc b/src/apps/mpcresources/mplayerc.it.rc index a175c88874..5a75be38c9 100644 --- a/src/apps/mpcresources/mplayerc.it.rc +++ b/src/apps/mpcresources/mplayerc.it.rc @@ -2373,9 +2373,9 @@ BEGIN IDS_PLAYLOOPMODE_AB_MARK_A "Ripeti A-B: segna posizione A" IDS_PLAYLOOPMODE_AB_MARK_B "Ripeti A-B: segna posizione B" IDS_ADDTOPLAYLISTROMCLIPBOARD "Aggiungi alla playlist dagli appunti" - IDS_MOVEWINDOWBYVIDEO_ONOFF "Sposta la finestra nell'area del video: On/Off" - IDS_MOVEWINDOWBYVIDEO_ON "Sposta la finestra nell'area del video: On" - IDS_MOVEWINDOWBYVIDEO_OFF "Sposta la finestra nell'area del video: Off" + IDS_MOVEWINDOWBYVIDEO_ONOFF "Sposta finestra nell'area del video: On/Off" + IDS_MOVEWINDOWBYVIDEO_ON "Sposta finestra nell'area del video: On" + IDS_MOVEWINDOWBYVIDEO_OFF "Sposta finestra nell'area del video: Off" IDS_AUDIO_FILTER_PRESET_1 "Per audio con parti sussurrate ed esplosive" END @@ -3169,7 +3169,7 @@ END STRINGTABLE BEGIN - IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_BLOCK_EXTERNAL_VR "Non puoi aggiungere %s come filtro esterno.\nDovresti selezionare il tuo renderer video preferito nella pagina Impostazioni video." END STRINGTABLE @@ -3177,11 +3177,11 @@ BEGIN IDS_DESC_HAALI_VR "Sembra VMR-9, ma usa un vero ridimensionatore bicubico." IDS_DESC_NULLVR_ANY "Si collega a qualsiasi tipo di supporto simile a un video e non invierà i campioni in arrivo da nessuna parte. Usalo quando non hai bisogno del display video e vuoi evitare che la CPU funzioni inutilmente." IDS_DESC_NULLVR_UNCOMP "Come il normale renderer Null, ma questo si collegherà solo ai tipi non compressi." - IDS_DESC_EVR "Render video con supporto per la decodifica hardware." + IDS_DESC_EVR "Renderer video con supporto per decodifica hardware." IDS_DESC_EVR_CP "Come l'EVR, ma con Allocator-Presenter per la sottotitolazione e la postelaborazione." - IDS_DESC_MADVR "Rendering di alta qualità, richiede una GPU che supporti D3D9 o successivo." + IDS_DESC_MADVR "Renderer di alta qualità, richiede una GPU che supporti D3D9 o successivo." IDS_DESC_EVR_SYNC "Come il EVR (CP), ma offre diverse opzioni per sincronizzare il video frame rate con la frequenza di aggiornamento display per eliminare video frame duplicati." - IDS_DESC_MPC_VR "Video renderer with support for Direct3D 11." + IDS_DESC_MPC_VR "Renderer video con supporto per Direct3D 11." END STRINGTABLE @@ -3480,7 +3480,7 @@ END STRINGTABLE BEGIN - IDS_DISABLE_ALL_FILTERS "&Disattiva tutti i filtri" + IDS_DISABLE_ALL_FILTERS "&Disabilita tutti i filtri" IDS_ENABLE_FFMPEG_FILTERS "Abilita i filtri FFMpeg" IDS_DISABLE_FFMPEG_FILTERS "Disabilita i filtri FFmpeg" IDS_ENABLE_DXVA_FILTERS "Abilita i filtri DXVA" From cbef4cf0b5e052243bc7f7068084be6fba98cad9 Mon Sep 17 00:00:00 2001 From: Aleksoid1978 Date: Tue, 13 Feb 2024 17:33:26 +1000 Subject: [PATCH 46/87] Create .github/workflows/main.yml --- .github/workflows/main.yml | 91 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 .github/workflows/main.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml new file mode 100644 index 0000000000..4ff70048bb --- /dev/null +++ b/.github/workflows/main.yml @@ -0,0 +1,91 @@ +name: Build MPC-BE + +on: + push: + paths-ignore: + - .github/workflows/main.yml + - docs/*.* + - LICENSE.txt + pull_request: + paths-ignore: + - .github/workflows/main.yml + - docs/*.* + - LICENSE.txt + +jobs: + build: + runs-on: windows-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + with: + fetch-depth: 0 + submodules: recursive + + - name: Prepare MSYS + run: | + curl -sSL https://mpc-be.org/MSYS/MSYS_MinGW-w64_GCC_1320_x86-x64.7z -o MSYS_MinGW-w64_GCC_1320_x86-x64.7z + 7z x MSYS_MinGW-w64_GCC_1320_x86-x64.7z -oC:\\MSYS + echo '@ECHO OFF' > environments.bat + echo 'SET "MPCBE_MSYS=C:\\MSYS"' >> environments.bat + echo 'SET "MPCBE_MINGW=C:\\MSYS\\mingw"' >> environments.bat + .\\update_gcc.bat + shell: pwsh + + - name: Build MPC-BE x64 + run: | + .\\build.bat x64 All Packages + shell: pwsh + + - name: Clean + run: | + .\\build.bat clean All + shell: pwsh + + - name: Build MPC-BE x86 + run: | + .\\build.bat x86 All Packages + shell: pwsh + + - name: Upload Installer x64 + uses: actions/upload-artifact@v4 + with: + name: "Installer x64" + path: _bin/Packages/**/MPC-BE*.x64-installer.zip + compression-level: 0 + + - name: Upload Portable x64 + uses: actions/upload-artifact@v4 + with: + name: "Portable x64" + path: _bin/Packages/**/MPC-BE*.x64.7z + compression-level: 0 + + - name: Upload standalone_filters x64 + uses: actions/upload-artifact@v4 + with: + name: "standalone_filters x64" + path: _bin/Packages/**/standalone_filters-mpc-be*.x64.7z + compression-level: 0 + + - name: Upload Installer x86 + uses: actions/upload-artifact@v4 + with: + name: "Installer x86" + path: _bin/Packages/**/MPC-BE*.x86-installer.zip + compression-level: 0 + + - name: Upload Portable x86 + uses: actions/upload-artifact@v4 + with: + name: "Portable x86" + path: _bin/Packages/**/MPC-BE*.x86.7z + compression-level: 0 + + - name: Upload standalone_filters x86 + uses: actions/upload-artifact@v4 + with: + name: "standalone_filters x86" + path: _bin/Packages/**/standalone_filters-mpc-be*.x86.7z + compression-level: 0 From 60955f363789a3c9745878810019a3413274bdcf Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 13 Feb 2024 17:39:46 +1000 Subject: [PATCH 47/87] =?UTF-8?q?ffmpeg=20-=20=D0=BD=D0=B5=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D0=BC=20AV=5FPIX=5FF?= =?UTF-8?q?MT=5FYUVJ420P=20=D0=B4=D0=BB=D1=8F=20H.264=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D0=BA=D0=B0,=20=D1=82=D0=B5=D0=BC=20=D0=B1=D0=BE=D0=BB?= =?UTF-8?q?=D0=B5=D0=B5=20=D1=87=D1=82=D0=BE=20=D0=B2=20=D1=81=D0=B0=D0=BC?= =?UTF-8?q?=D0=BE=D0=BC=20ffmpeg=20=D0=BE=D0=BD=20=D1=83=D0=BA=D0=B0=D0=B7?= =?UTF-8?q?=D0=B0=D0=BD=20=D0=BA=D0=B0=D0=BA=20=D1=83=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=80=D0=B5=D0=B2=D1=88=D0=B8=D0=B9.=20=D0=AD=D1=82=D0=BE=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D1=82=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C=20=D0=B0=D0=BF=D0=BF=D0=B0=D1=80=D0=B0=D1=82=D0=BD=D0=BE?= =?UTF-8?q?=D0=B3=D0=BE=20=D1=83=D1=81=D0=BA=D0=BE=D1=80=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F=20=D1=82=D0=B0=D0=BA=D0=B8=D1=85=20=D0=BF=D0=BE=D1=82?= =?UTF-8?q?=D0=BE=D0=BA=D0=BE=D0=B2.=20=D0=90=D0=BF=D0=BF=D0=B0=D1=80?= =?UTF-8?q?=D0=B0=D1=82=D0=BD=D1=8B=D0=B5=20=D0=B4=D0=B5=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D1=8B=20H.264=20-=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80?= =?UTF-8?q?=D0=B6=D0=BA=D0=B0=20"=D1=87=D0=B8=D1=81=D1=82=D0=BE=D0=B3?= =?UTF-8?q?=D0=BE"=20Baseline=20=D0=BF=D1=80=D0=BE=D1=84=D0=B8=D0=BB=D1=8F?= =?UTF-8?q?,=20=D1=8D=D1=82=D0=BE=20=D0=B4=D0=B0=D1=81=D1=82=20=D0=B2?= =?UTF-8?q?=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20Copy=20Back=20=D0=B4=D0=B5=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B5=D1=80=D1=8B=20=D0=B2=20MPCVideoDec=20=D0=BD=D0=B0=20?= =?UTF-8?q?=D1=82=D0=B0=D0=BA=D0=B8=D1=85=20=D0=BF=D0=BE=D1=82=D0=BE=D0=BA?= =?UTF-8?q?=D0=B0=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ExtLib/ffmpeg/libavcodec/dxva2.c | 3 +++ src/ExtLib/ffmpeg/libavcodec/h264_slice.c | 5 +++++ 2 files changed, 8 insertions(+) diff --git a/src/ExtLib/ffmpeg/libavcodec/dxva2.c b/src/ExtLib/ffmpeg/libavcodec/dxva2.c index 3c96fffbd4..a917d39df7 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dxva2.c +++ b/src/ExtLib/ffmpeg/libavcodec/dxva2.c @@ -72,6 +72,9 @@ static const int prof_mpeg2_main[] = {AV_PROFILE_MPEG2_SIMPLE, static const int prof_h264_high[] = {AV_PROFILE_H264_CONSTRAINED_BASELINE, AV_PROFILE_H264_MAIN, AV_PROFILE_H264_HIGH, + // ==> Start patch MPC + AV_PROFILE_H264_BASELINE, + // ==> End patch MPC AV_PROFILE_UNKNOWN}; static const int prof_hevc_main[] = {AV_PROFILE_HEVC_MAIN, AV_PROFILE_UNKNOWN}; diff --git a/src/ExtLib/ffmpeg/libavcodec/h264_slice.c b/src/ExtLib/ffmpeg/libavcodec/h264_slice.c index 8e42b94ee1..007ded5eab 100644 --- a/src/ExtLib/ffmpeg/libavcodec/h264_slice.c +++ b/src/ExtLib/ffmpeg/libavcodec/h264_slice.c @@ -897,10 +897,15 @@ static enum AVPixelFormat get_pixel_format(H264Context *h, int force_callback) #if CONFIG_H264_VAAPI_HWACCEL *fmt++ = AV_PIX_FMT_VAAPI; #endif + // ==> Start patch MPC + /* if (h->avctx->color_range == AVCOL_RANGE_JPEG) *fmt++ = AV_PIX_FMT_YUVJ420P; else *fmt++ = AV_PIX_FMT_YUV420P; + */ + *fmt++ = AV_PIX_FMT_YUV420P; + // ==> End patch MPC } break; default: From 50b02fc4c3e32dcf26e8f7c81f1240664ef74019 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 14 Feb 2024 11:35:29 +1000 Subject: [PATCH 48/87] =?UTF-8?q?Updater=20-=20=D1=82=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=8C=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D1=8F=D0=B5?= =?UTF-8?q?=D1=82=20=D0=BD=D0=B0=D0=BB=D0=B8=D1=87=D0=B8=D0=B5=20=D0=BD?= =?UTF-8?q?=D0=BE=D0=B2=D0=BE=D0=B9=20=D0=B2=D0=B5=D1=80=D1=81=D0=B8=D0=B8?= =?UTF-8?q?=20=D1=87=D0=B5=D1=80=D0=B5=D0=B7=20github=20api.=20=D0=9D?= =?UTF-8?q?=D0=B5=D0=B1=D0=BE=D0=BB=D1=8C=D1=88=D0=B0=D1=8F=20=D0=BA=D0=BE?= =?UTF-8?q?=D1=80=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20CHTTPAsync::Read().?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/DSUtil/HTTPAsync.cpp | 2 + src/apps/mplayerc/UpdateChecker.cpp | 92 ++++++++++++----------------- src/apps/mplayerc/UpdateChecker.h | 18 +++--- 3 files changed, 50 insertions(+), 62 deletions(-) diff --git a/src/DSUtil/HTTPAsync.cpp b/src/DSUtil/HTTPAsync.cpp index 4511ac9b5c..f6e0c0743d 100644 --- a/src/DSUtil/HTTPAsync.cpp +++ b/src/DSUtil/HTTPAsync.cpp @@ -464,6 +464,8 @@ HRESULT CHTTPAsync::ReadInternal(PBYTE pBuffer, DWORD dwSizeToRead, DWORD& dwSiz HRESULT CHTTPAsync::Read(PBYTE pBuffer, DWORD dwSizeToRead, DWORD& dwSizeRead, DWORD dwTimeOut/* = INFINITE*/) { + dwSizeRead = 0; + if (m_http_chunk.use) { HRESULT hr = S_OK; auto begin = pBuffer; diff --git a/src/apps/mplayerc/UpdateChecker.cpp b/src/apps/mplayerc/UpdateChecker.cpp index 37a6edd71d..0c390d802b 100644 --- a/src/apps/mplayerc/UpdateChecker.cpp +++ b/src/apps/mplayerc/UpdateChecker.cpp @@ -1,5 +1,5 @@ /* - * (C) 2013-2023 see Authors.txt + * (C) 2013-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -22,25 +22,14 @@ #include #include "DSUtil/SysVersion.h" #include "DSUtil/text.h" +#include "DSUtil/HTTPAsync.h" +#include "rapidjsonHelper.h" #include "UpdateChecker.h" #include "Version.h" // UpdateChecker -bool UpdateChecker::bUpdating = false; -CCritSec UpdateChecker::csUpdating; -Version UpdateChecker::m_UpdateVersion = { 0, 0, 0, 0 }; -CStringA UpdateChecker::m_UpdateURL; - -UpdateChecker::UpdateChecker() -{ -} - -UpdateChecker::~UpdateChecker(void) -{ -} - bool UpdateChecker::IsTimeToAutoUpdate(int delay, time_t lastcheck) { return (time(nullptr) >= lastcheck + delay * 24 * 3600); @@ -59,41 +48,43 @@ void UpdateChecker::CheckForUpdate(bool autocheck) Update_Status UpdateChecker::CheckNewVersion() { m_UpdateURL.Empty(); - m_UpdateVersion = { 0, 0, 0, 0 }; + m_UpdateVersion = {}; Update_Status updatestatus = UPDATER_ERROR_CONNECT; - CStringA updateinfo; - - HINTERNET hInet = InternetOpenW(L"MPC-BE", 0, nullptr, nullptr, 0); - if (hInet) { - HINTERNET hUrl = InternetOpenUrlW(hInet, L"http://mpc-be.org/version.txt", nullptr, 0, INTERNET_FLAG_TRANSFER_BINARY | INTERNET_FLAG_EXISTING_CONNECT | INTERNET_FLAG_NO_CACHE_WRITE | INTERNET_FLAG_RELOAD, 0); - if (hUrl) { - char buffer[1024] = { 0 }; // limit update file to 1024 bytes - DWORD dwBytesRead = 0; - - if (InternetReadFile(hUrl, (LPVOID)buffer, std::size(buffer), &dwBytesRead) == TRUE && dwBytesRead < std::size(buffer)) { - updateinfo = CStringA(buffer); - } - InternetCloseHandle(hUrl); + CHTTPAsync HTTPAsync; + if (SUCCEEDED(HTTPAsync.Connect(L"https://api.github.com/repos/Aleksoid1978/MPC-BE/releases/latest", 3000))) { + constexpr auto sizeRead = 16 * KILOBYTE; + CStringA data; + DWORD dwSizeRead = 0; + int dataSize = 0; + while (S_OK == HTTPAsync.Read(reinterpret_cast(data.GetBuffer(dataSize + sizeRead) + dataSize), sizeRead, dwSizeRead)) { + data.ReleaseBuffer(dataSize + dwSizeRead); + dataSize = data.GetLength(); + dwSizeRead = 0; } - InternetCloseHandle(hInet); - } - - if (updateinfo.GetLength()) { - updatestatus = UPDATER_ERROR_DATA; - int pos = 0; - CStringA updateversion = updateinfo.Tokenize("\r\n", pos).Trim(); - m_UpdateURL = updateinfo.Tokenize("\r\n", pos).Trim(); - - int n = sscanf_s(updateversion, "%u.%u.%u.%u", &m_UpdateVersion.major, &m_UpdateVersion.minor, &m_UpdateVersion.patch, &m_UpdateVersion.revision); - if (n == 4 && (StartsWith(m_UpdateURL, "http://") || StartsWith(m_UpdateURL, "https://"))) { - if (MPC_VERSION_MAJOR < m_UpdateVersion.major - || MPC_VERSION_MAJOR == m_UpdateVersion.major && MPC_VERSION_MINOR < m_UpdateVersion.minor - || MPC_VERSION_MAJOR == m_UpdateVersion.major && MPC_VERSION_MINOR == m_UpdateVersion.minor && MPC_VERSION_PATCH < m_UpdateVersion.patch - || MPC_VERSION_MAJOR == m_UpdateVersion.major && MPC_VERSION_MINOR == m_UpdateVersion.minor && MPC_VERSION_PATCH == m_UpdateVersion.patch && MPC_VERSION_REV < m_UpdateVersion.revision) { - updatestatus = UPDATER_NEW_VERSION_IS_AVAILABLE; - } else { - updatestatus = UPDATER_NO_NEW_VERSION; + data.ReleaseBuffer(dataSize); + + if (!data.IsEmpty()) { + updatestatus = UPDATER_ERROR_DATA; + rapidjson::Document json; + if (!json.Parse(data.GetString()).HasParseError()) { + CString tag_name; + if (getJsonValue(json, "tag_name", tag_name)) { + int n = swscanf_s(tag_name, L"%u.%u.%u.%u", + &m_UpdateVersion.major, &m_UpdateVersion.minor, &m_UpdateVersion.patch, &m_UpdateVersion.revision); + if (n == 3 || n == 4) { + if (getJsonValue(json, "html_url", m_UpdateURL)) { + if (MPC_VERSION_MAJOR < m_UpdateVersion.major + || MPC_VERSION_MAJOR == m_UpdateVersion.major && MPC_VERSION_MINOR < m_UpdateVersion.minor + || MPC_VERSION_MAJOR == m_UpdateVersion.major && MPC_VERSION_MINOR == m_UpdateVersion.minor && MPC_VERSION_PATCH < m_UpdateVersion.patch + || MPC_VERSION_MAJOR == m_UpdateVersion.major && MPC_VERSION_MINOR == m_UpdateVersion.minor && MPC_VERSION_PATCH == m_UpdateVersion.patch && MPC_VERSION_REV < m_UpdateVersion.revision) { + updatestatus = UPDATER_NEW_VERSION_IS_AVAILABLE; + } else { + updatestatus = UPDATER_NO_NEW_VERSION; + } + } + } + } } } } @@ -106,7 +97,6 @@ UINT UpdateChecker::RunCheckForUpdateThread(LPVOID pParam) bool autocheck = !!pParam; Update_Status updatestatus = CheckNewVersion(); - if (!autocheck || updatestatus == UPDATER_NEW_VERSION_IS_AVAILABLE) { UpdateCheckerDlg dlg(updatestatus, m_UpdateVersion, m_UpdateURL); dlg.DoModal(); @@ -125,8 +115,8 @@ UINT UpdateChecker::RunCheckForUpdateThread(LPVOID pParam) IMPLEMENT_DYNAMIC(UpdateCheckerDlg, CDialog) -UpdateCheckerDlg::UpdateCheckerDlg(Update_Status updateStatus, Version UpdateVersion, LPCSTR UpdateURL, CWnd* pParent) - : CDialog(UpdateCheckerDlg::IDD, pParent), m_updateStatus(updateStatus) +UpdateCheckerDlg::UpdateCheckerDlg(Update_Status updateStatus, Version UpdateVersion, LPCWSTR UpdateURL) + : CDialog(UpdateCheckerDlg::IDD), m_updateStatus(updateStatus) { CString VersionStr; @@ -155,10 +145,6 @@ UpdateCheckerDlg::UpdateCheckerDlg(Update_Status updateStatus, Version UpdateVer } } -UpdateCheckerDlg::~UpdateCheckerDlg() -{ -} - void UpdateCheckerDlg::DoDataExchange(CDataExchange* pDX) { CDialog::DoDataExchange(pDX); diff --git a/src/apps/mplayerc/UpdateChecker.h b/src/apps/mplayerc/UpdateChecker.h index 5ebf13b4e5..a2cb1c42ef 100644 --- a/src/apps/mplayerc/UpdateChecker.h +++ b/src/apps/mplayerc/UpdateChecker.h @@ -1,5 +1,5 @@ /* - * (C) 2013-2017 see Authors.txt + * (C) 2013-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -41,15 +41,15 @@ enum Update_Status class UpdateChecker { - static bool bUpdating; - static CCritSec csUpdating; + static inline bool bUpdating = false; + static inline CCritSec csUpdating; - static Version m_UpdateVersion; - static CStringA m_UpdateURL; + static inline Version m_UpdateVersion = {}; + static inline CString m_UpdateURL; public: - UpdateChecker(); - ~UpdateChecker(void); + UpdateChecker() = default; + ~UpdateChecker() = default; static bool IsTimeToAutoUpdate(int delay, time_t lastcheck); static void CheckForUpdate(bool autocheck = false); @@ -64,8 +64,8 @@ class UpdateCheckerDlg : public CDialog DECLARE_DYNAMIC(UpdateCheckerDlg) public: - UpdateCheckerDlg(Update_Status updateStatus, Version UpdateVersion, LPCSTR UpdateURL, CWnd* pParent = nullptr); - virtual ~UpdateCheckerDlg(); + UpdateCheckerDlg(Update_Status updateStatus, Version UpdateVersion, LPCWSTR UpdateURL); + ~UpdateCheckerDlg() = default; enum { IDD = IDD_UPDATE_DIALOG }; From 3a393d98fb4fe4763279356a8e3a19a043610f12 Mon Sep 17 00:00:00 2001 From: v0lt Date: Wed, 14 Feb 2024 06:41:59 +0300 Subject: [PATCH 49/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-1097-geb5b4e60?= =?UTF-8?q?c9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- .../ffmpeg/libavcodec/ac3enc_template.c | 2 + src/ExtLib/ffmpeg/libavcodec/avcodec.c | 13 +- src/ExtLib/ffmpeg/libavcodec/avcodec.h | 5 +- .../ffmpeg/libavcodec/avcodec_internal.h | 2 + src/ExtLib/ffmpeg/libavcodec/avfft.c | 31 ++++- src/ExtLib/ffmpeg/libavcodec/blockdsp.c | 2 + src/ExtLib/ffmpeg/libavcodec/blockdsp.h | 1 + .../ffmpeg/libavcodec/bsf/hevc_mp4toannexb.c | 6 +- .../ffmpeg/libavcodec/bsf/vvc_mp4toannexb.c | 7 +- src/ExtLib/ffmpeg/libavcodec/dca_core.c | 17 --- src/ExtLib/ffmpeg/libavcodec/flashsv.c | 2 - src/ExtLib/ffmpeg/libavcodec/flvdec.c | 2 - .../ffmpeg/libavcodec/frame_thread_encoder.c | 5 +- src/ExtLib/ffmpeg/libavcodec/h263dec.c | 43 +++--- src/ExtLib/ffmpeg/libavcodec/h263dec.h | 2 - src/ExtLib/ffmpeg/libavcodec/hevcdsp.c | 6 +- src/ExtLib/ffmpeg/libavcodec/hevcdsp.h | 5 +- .../ffmpeg/libavcodec/hevcdsp_template.c | 38 +++--- .../ffmpeg/libavcodec/hwaccel_internal.h | 2 +- src/ExtLib/ffmpeg/libavcodec/indeo3.c | 3 + src/ExtLib/ffmpeg/libavcodec/intelh263dec.c | 4 - src/ExtLib/ffmpeg/libavcodec/libuavs3d.c | 3 - src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c | 1 - src/ExtLib/ffmpeg/libavcodec/msmpeg4dec.c | 16 --- src/ExtLib/ffmpeg/libavcodec/nvdec.c | 2 +- src/ExtLib/ffmpeg/libavcodec/nvdec.h | 2 +- src/ExtLib/ffmpeg/libavcodec/nvdec_av1.c | 4 +- src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c | 4 +- src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c | 4 +- src/ExtLib/ffmpeg/libavcodec/options.c | 3 +- src/ExtLib/ffmpeg/libavcodec/pngdec.c | 63 +++++++++ src/ExtLib/ffmpeg/libavcodec/pthread_frame.c | 2 +- src/ExtLib/ffmpeg/libavcodec/refstruct.c | 2 +- src/ExtLib/ffmpeg/libavcodec/rv10.c | 8 -- src/ExtLib/ffmpeg/libavcodec/rv30.c | 4 - src/ExtLib/ffmpeg/libavcodec/rv40.c | 4 - src/ExtLib/ffmpeg/libavcodec/svq1dec.c | 2 - src/ExtLib/ffmpeg/libavcodec/svq3.c | 2 - src/ExtLib/ffmpeg/libavcodec/texturedsp.c | 9 +- src/ExtLib/ffmpeg/libavcodec/tiff.c | 2 +- src/ExtLib/ffmpeg/libavcodec/vc1dec.c | 81 +++++------ src/ExtLib/ffmpeg/libavcodec/version_major.h | 1 + src/ExtLib/ffmpeg/libavcodec/wmv2dec.c | 2 - .../ffmpeg/libavcodec/x86/h264_intrapred.asm | 16 +-- .../libavcodec/x86/h264_intrapred_init.c | 14 +- .../ffmpeg/libavcodec/x86/hevcdsp_init.c | 4 +- src/ExtLib/ffmpeg/libavcodec/x86/vp6dsp.asm | 55 -------- src/ExtLib/ffmpeg/libavfilter/allfilters.c | 2 - src/ExtLib/ffmpeg/libavfilter/buffersink.c | 29 +++- src/ExtLib/ffmpeg/libavfilter/buffersink.h | 2 + src/ExtLib/ffmpeg/libavfilter/buffersrc.c | 15 ++- src/ExtLib/ffmpeg/libavutil/channel_layout.c | 126 ++++++++++++++++++ src/ExtLib/ffmpeg/libavutil/channel_layout.h | 57 ++++++++ src/ExtLib/ffmpeg/libavutil/rational.h | 4 + src/ExtLib/ffmpeg/libavutil/version.h | 4 +- .../ffmpeg/libavutil/x86/intreadwrite.h | 36 ----- .../ffmpeg/libavutil/x86/tx_float_init.c | 18 +-- 59 files changed, 480 insertions(+), 325 deletions(-) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 3618ebade7..d0dbfd11b4 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -30,7 +30,7 @@ MPCVideoDec Обновлен корейский перевод (автор Hackjjang). Обновлены библиотеки: - ffmpeg git-n6.2-dev-1026-gcd31eac999; + ffmpeg git-n6.2-dev-1097-geb5b4e60c9; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 769127b527..f875e777e8 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -30,7 +30,7 @@ Updated Italian translation (by mapi68). Updated Korean translation (by Hackjjang). Updated libraries: - ffmpeg git-n6.2-dev-1026-gcd31eac999; + ffmpeg git-n6.2-dev-1097-geb5b4e60c9; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/src/ExtLib/ffmpeg/libavcodec/ac3enc_template.c b/src/ExtLib/ffmpeg/libavcodec/ac3enc_template.c index a41c6a5fb5..26439ceba9 100644 --- a/src/ExtLib/ffmpeg/libavcodec/ac3enc_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/ac3enc_template.c @@ -223,6 +223,8 @@ static void apply_channel_coupling(AC3EncodeContext *s) } } + av_assert1(s->fbw_channels > 0); + /* calculate final coupling coordinates, taking into account reusing of coordinates in successive blocks */ for (bnd = 0; bnd < s->num_cpl_bands; bnd++) { diff --git a/src/ExtLib/ffmpeg/libavcodec/avcodec.c b/src/ExtLib/ffmpeg/libavcodec/avcodec.c index a6c8629f6c..a13b781996 100644 --- a/src/ExtLib/ffmpeg/libavcodec/avcodec.c +++ b/src/ExtLib/ffmpeg/libavcodec/avcodec.c @@ -377,7 +377,7 @@ FF_ENABLE_DEPRECATION_WARNINGS return ret; free_and_end: - avcodec_close(avctx); + ff_codec_close(avctx); goto end; } @@ -432,12 +432,12 @@ void avsubtitle_free(AVSubtitle *sub) memset(sub, 0, sizeof(*sub)); } -av_cold int avcodec_close(AVCodecContext *avctx) +av_cold void ff_codec_close(AVCodecContext *avctx) { int i; if (!avctx) - return 0; + return; if (avcodec_is_open(avctx)) { AVCodecInternal *avci = avctx->internal; @@ -497,9 +497,15 @@ av_cold int avcodec_close(AVCodecContext *avctx) avctx->codec = NULL; avctx->active_thread_type = 0; +} +#if FF_API_AVCODEC_CLOSE +int avcodec_close(AVCodecContext *avctx) +{ + ff_codec_close(avctx); return 0; } +#endif static const char *unknown_if_null(const char *str) { @@ -619,6 +625,7 @@ void avcodec_string(char *buf, int buf_size, AVCodecContext *enc, int encode) enc->width, enc->height); if (av_log_get_level() >= AV_LOG_VERBOSE && + enc->coded_width && enc->coded_height && (enc->width != enc->coded_width || enc->height != enc->coded_height)) av_bprintf(&bprint, " (%dx%d)", diff --git a/src/ExtLib/ffmpeg/libavcodec/avcodec.h b/src/ExtLib/ffmpeg/libavcodec/avcodec.h index 7fb44e28f4..0018ccbb0c 100644 --- a/src/ExtLib/ffmpeg/libavcodec/avcodec.h +++ b/src/ExtLib/ffmpeg/libavcodec/avcodec.h @@ -2411,6 +2411,7 @@ int avcodec_parameters_to_context(AVCodecContext *codec, */ int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **options); +#if FF_API_AVCODEC_CLOSE /** * Close a given AVCodecContext and free all the data associated with it * (but not the AVCodecContext itself). @@ -2419,12 +2420,14 @@ int avcodec_open2(AVCodecContext *avctx, const AVCodec *codec, AVDictionary **op * the codec-specific data allocated in avcodec_alloc_context3() with a non-NULL * codec. Subsequent calls will do nothing. * - * @note Do not use this function. Use avcodec_free_context() to destroy a + * @deprecated Do not use this function. Use avcodec_free_context() to destroy a * codec context (either open or closed). Opening and closing a codec context * multiple times is not supported anymore -- use multiple codec contexts * instead. */ +attribute_deprecated int avcodec_close(AVCodecContext *avctx); +#endif /** * Free all allocated data in the given subtitle struct. diff --git a/src/ExtLib/ffmpeg/libavcodec/avcodec_internal.h b/src/ExtLib/ffmpeg/libavcodec/avcodec_internal.h index 9b93ff3d81..4d1cb3a314 100644 --- a/src/ExtLib/ffmpeg/libavcodec/avcodec_internal.h +++ b/src/ExtLib/ffmpeg/libavcodec/avcodec_internal.h @@ -56,4 +56,6 @@ void ff_encode_flush_buffers(struct AVCodecContext *avctx); struct AVCodecInternal *ff_decode_internal_alloc(void); struct AVCodecInternal *ff_encode_internal_alloc(void); +void ff_codec_close(struct AVCodecContext *avctx); + #endif // AVCODEC_AVCODEC_INTERNAL_H diff --git a/src/ExtLib/ffmpeg/libavcodec/avfft.c b/src/ExtLib/ffmpeg/libavcodec/avfft.c index 08198b48a4..dc37b3ac10 100644 --- a/src/ExtLib/ffmpeg/libavcodec/avfft.c +++ b/src/ExtLib/ffmpeg/libavcodec/avfft.c @@ -152,7 +152,7 @@ RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans) return NULL; ret = av_tx_init(&s->ctx, &s->fn, AV_TX_FLOAT_RDFT, trans == IDFT_C2R, - 1 << nbits, &scale, AV_TX_INPLACE); + 1 << nbits, &scale, 0x0); if (ret < 0) { av_free(s); return NULL; @@ -162,17 +162,35 @@ RDFTContext *av_rdft_init(int nbits, enum RDFTransformType trans) s->len = 1 << nbits; s->inv = trans == IDFT_C2R; + s->tmp = av_malloc((s->len + 2)*sizeof(float)); + if (!s->tmp) { + av_tx_uninit(&s->ctx); + av_free(s); + return NULL; + } + return (RDFTContext *)s; } void av_rdft_calc(RDFTContext *s, FFTSample *data) { AVTXWrapper *w = (AVTXWrapper *)s; - if (w->inv) - FFSWAP(float, data[1], data[w->len]); - w->fn(w->ctx, data, (void *)data, w->stride); - if (!w->inv) - FFSWAP(float, data[1], data[w->len]); + float *src = w->inv ? w->tmp : (float *)data; + float *dst = w->inv ? (float *)data : w->tmp; + + if (w->inv) { + memcpy(src, data, w->len*sizeof(float)); + + src[w->len] = src[1]; + src[1] = 0.0f; + } + + w->fn(w->ctx, dst, (void *)src, w->stride); + + if (!w->inv) { + dst[1] = dst[w->len]; + memcpy(data, dst, w->len*sizeof(float)); + } } av_cold void av_rdft_end(RDFTContext *s) @@ -180,6 +198,7 @@ av_cold void av_rdft_end(RDFTContext *s) if (s) { AVTXWrapper *w = (AVTXWrapper *)s; av_tx_uninit(&w->ctx); + av_free(w->tmp); av_free(w); } } diff --git a/src/ExtLib/ffmpeg/libavcodec/blockdsp.c b/src/ExtLib/ffmpeg/libavcodec/blockdsp.c index 43b1c6654f..af932a264e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/blockdsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/blockdsp.c @@ -69,6 +69,8 @@ av_cold void ff_blockdsp_init(BlockDSPContext *c) ff_blockdsp_init_arm(c); #elif ARCH_PPC ff_blockdsp_init_ppc(c); +#elif ARCH_RISCV + ff_blockdsp_init_riscv(c); #elif ARCH_X86 ff_blockdsp_init_x86(c); #elif ARCH_MIPS diff --git a/src/ExtLib/ffmpeg/libavcodec/blockdsp.h b/src/ExtLib/ffmpeg/libavcodec/blockdsp.h index a82a617f65..5ceca8208d 100644 --- a/src/ExtLib/ffmpeg/libavcodec/blockdsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/blockdsp.h @@ -41,6 +41,7 @@ void ff_blockdsp_init(BlockDSPContext *c); void ff_blockdsp_init_alpha(BlockDSPContext *c); void ff_blockdsp_init_arm(BlockDSPContext *c); void ff_blockdsp_init_ppc(BlockDSPContext *c); +void ff_blockdsp_init_riscv(BlockDSPContext *c); void ff_blockdsp_init_x86(BlockDSPContext *c); void ff_blockdsp_init_mips(BlockDSPContext *c); diff --git a/src/ExtLib/ffmpeg/libavcodec/bsf/hevc_mp4toannexb.c b/src/ExtLib/ffmpeg/libavcodec/bsf/hevc_mp4toannexb.c index d91229a895..8eec18f31e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bsf/hevc_mp4toannexb.c +++ b/src/ExtLib/ffmpeg/libavcodec/bsf/hevc_mp4toannexb.c @@ -65,9 +65,11 @@ static int hevc_extradata_to_annexb(AVBSFContext *ctx) } for (j = 0; j < cnt; j++) { - int nalu_len = bytestream2_get_be16(&gb); + const int nalu_len = bytestream2_get_be16(&gb); - if (4 + AV_INPUT_BUFFER_PADDING_SIZE + nalu_len > SIZE_MAX - new_extradata_size) { + if (!nalu_len || + nalu_len > bytestream2_get_bytes_left(&gb) || + 4 + AV_INPUT_BUFFER_PADDING_SIZE + nalu_len > SIZE_MAX - new_extradata_size) { ret = AVERROR_INVALIDDATA; goto fail; } diff --git a/src/ExtLib/ffmpeg/libavcodec/bsf/vvc_mp4toannexb.c b/src/ExtLib/ffmpeg/libavcodec/bsf/vvc_mp4toannexb.c index 25c3726918..36bdae8f49 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bsf/vvc_mp4toannexb.c +++ b/src/ExtLib/ffmpeg/libavcodec/bsf/vvc_mp4toannexb.c @@ -155,10 +155,11 @@ static int vvc_extradata_to_annexb(AVBSFContext *ctx) } for (j = 0; j < cnt; j++) { - int nalu_len = bytestream2_get_be16(&gb); + const int nalu_len = bytestream2_get_be16(&gb); - if (4 + AV_INPUT_BUFFER_PADDING_SIZE + nalu_len > - SIZE_MAX - new_extradata_size) { + if (!nalu_len || + nalu_len > bytestream2_get_bytes_left(&gb) || + 4 + AV_INPUT_BUFFER_PADDING_SIZE + nalu_len > SIZE_MAX - new_extradata_size) { ret = AVERROR_INVALIDDATA; goto fail; } diff --git a/src/ExtLib/ffmpeg/libavcodec/dca_core.c b/src/ExtLib/ffmpeg/libavcodec/dca_core.c index 60508fabb9..697fc74295 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dca_core.c +++ b/src/ExtLib/ffmpeg/libavcodec/dca_core.c @@ -19,7 +19,6 @@ */ #include "libavutil/channel_layout.h" -#include "libavutil/emms.h" #include "dcaadpcm.h" #include "dcadec.h" #include "dcadata.h" @@ -770,10 +769,6 @@ static void erase_adpcm_history(DCACoreDecoder *s) for (ch = 0; ch < DCA_CHANNELS; ch++) for (band = 0; band < DCA_SUBBANDS; band++) AV_ZERO128(s->subband_samples[ch][band] - DCA_ADPCM_COEFFS); - -#ifdef FF_COPY_SWAP_ZERO_USES_MMX - emms_c(); -#endif } static int alloc_sample_buffer(DCACoreDecoder *s) @@ -837,10 +832,6 @@ static int parse_frame_data(DCACoreDecoder *s, enum HeaderType header, int xch_b } } -#ifdef FF_COPY_SWAP_ZERO_USES_MMX - emms_c(); -#endif - return 0; } @@ -1283,10 +1274,6 @@ static void erase_x96_adpcm_history(DCACoreDecoder *s) for (ch = 0; ch < DCA_CHANNELS; ch++) for (band = 0; band < DCA_SUBBANDS_X96; band++) AV_ZERO128(s->x96_subband_samples[ch][band] - DCA_ADPCM_COEFFS); - -#ifdef FF_COPY_SWAP_ZERO_USES_MMX - emms_c(); -#endif } static int alloc_x96_sample_buffer(DCACoreDecoder *s) @@ -1516,10 +1503,6 @@ static int parse_x96_frame_data(DCACoreDecoder *s, int exss, int xch_base) } } -#ifdef FF_COPY_SWAP_ZERO_USES_MMX - emms_c(); -#endif - return 0; } diff --git a/src/ExtLib/ffmpeg/libavcodec/flashsv.c b/src/ExtLib/ffmpeg/libavcodec/flashsv.c index 8a01e3a4b6..fe00e529a5 100644 --- a/src/ExtLib/ffmpeg/libavcodec/flashsv.c +++ b/src/ExtLib/ffmpeg/libavcodec/flashsv.c @@ -511,7 +511,6 @@ const FFCodec ff_flashsv_decoder = { FF_CODEC_DECODE_CB(flashsv_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_BGR24, AV_PIX_FMT_NONE }, }; #endif /* CONFIG_FLASHSV_DECODER */ @@ -579,6 +578,5 @@ const FFCodec ff_flashsv2_decoder = { FF_CODEC_DECODE_CB(flashsv_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_BGR24, AV_PIX_FMT_NONE }, }; #endif /* CONFIG_FLASHSV2_DECODER */ diff --git a/src/ExtLib/ffmpeg/libavcodec/flvdec.c b/src/ExtLib/ffmpeg/libavcodec/flvdec.c index 09fefd3d1c..8baaed06a8 100644 --- a/src/ExtLib/ffmpeg/libavcodec/flvdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/flvdec.c @@ -123,6 +123,4 @@ const FFCodec ff_flv_decoder = { .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, - .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE }, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/frame_thread_encoder.c b/src/ExtLib/ffmpeg/libavcodec/frame_thread_encoder.c index 62d9580ad4..cda5158117 100644 --- a/src/ExtLib/ffmpeg/libavcodec/frame_thread_encoder.c +++ b/src/ExtLib/ffmpeg/libavcodec/frame_thread_encoder.c @@ -27,6 +27,7 @@ #include "libavutil/opt.h" #include "libavutil/thread.h" #include "avcodec.h" +#include "avcodec_internal.h" #include "encode.h" #include "internal.h" #include "pthread_internal.h" @@ -110,7 +111,7 @@ static void * attribute_align_arg worker(void *v){ pthread_mutex_unlock(&c->finished_task_mutex); } end: - avcodec_close(avctx); + ff_codec_close(avctx); av_freep(&avctx); return NULL; } @@ -230,7 +231,7 @@ av_cold int ff_frame_thread_encoder_init(AVCodecContext *avctx) return 0; fail: - avcodec_close(thread_avctx); + ff_codec_close(thread_avctx); av_freep(&thread_avctx); avctx->thread_count = i; av_log(avctx, AV_LOG_ERROR, "ff_frame_thread_encoder_init failed\n"); diff --git a/src/ExtLib/ffmpeg/libavcodec/h263dec.c b/src/ExtLib/ffmpeg/libavcodec/h263dec.c index eb1d87a2fe..910df7585f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/h263dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/h263dec.c @@ -49,6 +49,23 @@ #include "thread.h" #include "wmv2dec.h" +static const enum AVPixelFormat h263_hwaccel_pixfmt_list_420[] = { +#if CONFIG_H263_VAAPI_HWACCEL || CONFIG_MPEG4_VAAPI_HWACCEL + AV_PIX_FMT_VAAPI, +#endif +#if CONFIG_MPEG4_NVDEC_HWACCEL + AV_PIX_FMT_CUDA, +#endif +#if CONFIG_MPEG4_VDPAU_HWACCEL + AV_PIX_FMT_VDPAU, +#endif +#if CONFIG_H263_VIDEOTOOLBOX_HWACCEL || CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL + AV_PIX_FMT_VIDEOTOOLBOX, +#endif + AV_PIX_FMT_YUV420P, + AV_PIX_FMT_NONE +}; + static enum AVPixelFormat h263_get_format(AVCodecContext *avctx) { /* MPEG-4 Studio Profile only, not supported by hardware */ @@ -63,7 +80,12 @@ static enum AVPixelFormat h263_get_format(AVCodecContext *avctx) return AV_PIX_FMT_GRAY8; } - return avctx->pix_fmt = ff_get_format(avctx, avctx->codec->pix_fmts); + if (avctx->codec_id == AV_CODEC_ID_H263 || + avctx->codec_id == AV_CODEC_ID_H263P || + avctx->codec_id == AV_CODEC_ID_MPEG4) + return avctx->pix_fmt = ff_get_format(avctx, h263_hwaccel_pixfmt_list_420); + + return AV_PIX_FMT_YUV420P; } av_cold int ff_h263_decode_init(AVCodecContext *avctx) @@ -659,23 +681,6 @@ int ff_h263_decode_frame(AVCodecContext *avctx, AVFrame *pict, return get_consumed_bytes(s, buf_size); } -const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[] = { -#if CONFIG_H263_VAAPI_HWACCEL || CONFIG_MPEG4_VAAPI_HWACCEL - AV_PIX_FMT_VAAPI, -#endif -#if CONFIG_MPEG4_NVDEC_HWACCEL - AV_PIX_FMT_CUDA, -#endif -#if CONFIG_MPEG4_VDPAU_HWACCEL - AV_PIX_FMT_VDPAU, -#endif -#if CONFIG_H263_VIDEOTOOLBOX_HWACCEL || CONFIG_MPEG4_VIDEOTOOLBOX_HWACCEL - AV_PIX_FMT_VIDEOTOOLBOX, -#endif - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE -}; - static const AVCodecHWConfigInternal *const h263_hw_config_list[] = { #if CONFIG_H263_VAAPI_HWACCEL HWACCEL_VAAPI(h263), @@ -706,7 +711,6 @@ const FFCodec ff_h263_decoder = { .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .flush = ff_mpeg_flush, .p.max_lowres = 3, - .p.pix_fmts = ff_h263_hwaccel_pixfmt_list_420, .hw_configs = h263_hw_config_list, }; @@ -724,6 +728,5 @@ const FFCodec ff_h263p_decoder = { .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .flush = ff_mpeg_flush, .p.max_lowres = 3, - .p.pix_fmts = ff_h263_hwaccel_pixfmt_list_420, .hw_configs = h263_hw_config_list, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/h263dec.h b/src/ExtLib/ffmpeg/libavcodec/h263dec.h index 06ff7c1c48..89c5fcf58f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/h263dec.h +++ b/src/ExtLib/ffmpeg/libavcodec/h263dec.h @@ -38,8 +38,6 @@ extern VLCElem ff_h263_inter_MCBPC_vlc[]; extern VLCElem ff_h263_cbpy_vlc[]; extern VLCElem ff_h263_mv_vlc[]; -extern const enum AVPixelFormat ff_h263_hwaccel_pixfmt_list_420[]; - int ff_h263_decode_motion(MpegEncContext * s, int pred, int f_code); int ff_h263_decode_init(AVCodecContext *avctx); int ff_h263_decode_frame(AVCodecContext *avctx, AVFrame *frame, diff --git a/src/ExtLib/ffmpeg/libavcodec/hevcdsp.c b/src/ExtLib/ffmpeg/libavcodec/hevcdsp.c index 8aa7a046a6..89a07fe478 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hevcdsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/hevcdsp.c @@ -91,7 +91,8 @@ static const int8_t transform[32][32] = { 90, -90, 88, -85, 82, -78, 73, -67, 61, -54, 46, -38, 31, -22, 13, -4 }, }; -DECLARE_ALIGNED(16, const int8_t, ff_hevc_epel_filters)[7][4] = { +DECLARE_ALIGNED(16, const int8_t, ff_hevc_epel_filters)[8][4] = { + { 0 }, { -2, 58, 10, -2}, { -4, 54, 16, -2}, { -6, 46, 28, -4}, @@ -101,7 +102,8 @@ DECLARE_ALIGNED(16, const int8_t, ff_hevc_epel_filters)[7][4] = { { -2, 10, 58, -2}, }; -DECLARE_ALIGNED(16, const int8_t, ff_hevc_qpel_filters)[3][16] = { +DECLARE_ALIGNED(16, const int8_t, ff_hevc_qpel_filters)[4][16] = { + { 0 }, { -1, 4,-10, 58, 17, -5, 1, 0, -1, 4,-10, 58, 17, -5, 1, 0}, { -1, 4,-11, 40, 40,-11, 4, -1, -1, 4,-11, 40, 40,-11, 4, -1}, { 0, 1, -5, 17, 58,-10, 4, -1, 0, 1, -5, 17, 58,-10, 4, -1} diff --git a/src/ExtLib/ffmpeg/libavcodec/hevcdsp.h b/src/ExtLib/ffmpeg/libavcodec/hevcdsp.h index 1b9c5bb6bc..a5933dcac4 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hevcdsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/hevcdsp.h @@ -126,8 +126,9 @@ typedef struct HEVCDSPContext { void ff_hevc_dsp_init(HEVCDSPContext *hpc, int bit_depth); -extern const int8_t ff_hevc_epel_filters[7][4]; -extern const int8_t ff_hevc_qpel_filters[3][16]; +/** ff_hevc_.pel_filters[0] are dummies to simplify array addressing */ +extern const int8_t ff_hevc_epel_filters[8][4]; +extern const int8_t ff_hevc_qpel_filters[4][16]; void ff_hevc_dsp_init_aarch64(HEVCDSPContext *c, const int bit_depth); void ff_hevc_dsp_init_arm(HEVCDSPContext *c, const int bit_depth); diff --git a/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c b/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c index 9b48bdf08e..121c44c401 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/hevcdsp_template.c @@ -301,9 +301,9 @@ IDCT_DC(32) // //////////////////////////////////////////////////////////////////////////////// #define ff_hevc_pel_filters ff_hevc_qpel_filters -#define DECL_HV_FILTER(f) \ - const uint8_t *hf = ff_hevc_ ## f ## _filters[mx - 1]; \ - const uint8_t *vf = ff_hevc_ ## f ## _filters[my - 1]; +#define DECL_HV_FILTER(f) \ + const uint8_t *hf = ff_hevc_ ## f ## _filters[mx]; \ + const uint8_t *vf = ff_hevc_ ## f ## _filters[my]; #define FW_PUT(p, f, t) \ static void FUNC(put_hevc_## f)(int16_t *dst, const uint8_t *src, ptrdiff_t srcstride, int height, \ @@ -421,7 +421,7 @@ static void FUNC(put_hevc_qpel_bi_h)(uint8_t *_dst, ptrdiff_t _dststride, const pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; + const int8_t *filter = ff_hevc_qpel_filters[mx]; int shift = 14 + 1 - BIT_DEPTH; #if BIT_DEPTH < 14 @@ -449,7 +449,7 @@ static void FUNC(put_hevc_qpel_bi_v)(uint8_t *_dst, ptrdiff_t _dststride, pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[my - 1]; + const int8_t *filter = ff_hevc_qpel_filters[my]; int shift = 14 + 1 - BIT_DEPTH; #if BIT_DEPTH < 14 @@ -487,7 +487,7 @@ static void FUNC(put_hevc_qpel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, #endif src -= QPEL_EXTRA_BEFORE * srcstride; - filter = ff_hevc_qpel_filters[mx - 1]; + filter = ff_hevc_qpel_filters[mx]; for (y = 0; y < height + QPEL_EXTRA; y++) { for (x = 0; x < width; x++) tmp[x] = QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); @@ -496,7 +496,7 @@ static void FUNC(put_hevc_qpel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, } tmp = tmp_array + QPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_qpel_filters[my - 1]; + filter = ff_hevc_qpel_filters[my]; for (y = 0; y < height; y++) { for (x = 0; x < width; x++) @@ -518,7 +518,7 @@ static void FUNC(put_hevc_qpel_bi_w_h)(uint8_t *_dst, ptrdiff_t _dststride, pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[mx - 1]; + const int8_t *filter = ff_hevc_qpel_filters[mx]; int shift = 14 + 1 - BIT_DEPTH; int log2Wd = denom + shift - 1; @@ -546,7 +546,7 @@ static void FUNC(put_hevc_qpel_bi_w_v)(uint8_t *_dst, ptrdiff_t _dststride, pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_qpel_filters[my - 1]; + const int8_t *filter = ff_hevc_qpel_filters[my]; int shift = 14 + 1 - BIT_DEPTH; int log2Wd = denom + shift - 1; @@ -580,7 +580,7 @@ static void FUNC(put_hevc_qpel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, int log2Wd = denom + shift - 1; src -= QPEL_EXTRA_BEFORE * srcstride; - filter = ff_hevc_qpel_filters[mx - 1]; + filter = ff_hevc_qpel_filters[mx]; for (y = 0; y < height + QPEL_EXTRA; y++) { for (x = 0; x < width; x++) tmp[x] = QPEL_FILTER(src, 1) >> (BIT_DEPTH - 8); @@ -589,7 +589,7 @@ static void FUNC(put_hevc_qpel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, } tmp = tmp_array + QPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_qpel_filters[my - 1]; + filter = ff_hevc_qpel_filters[my]; ox0 = ox0 * (1 << (BIT_DEPTH - 8)); ox1 = ox1 * (1 << (BIT_DEPTH - 8)); @@ -621,7 +621,7 @@ static void FUNC(put_hevc_epel_bi_h)(uint8_t *_dst, ptrdiff_t _dststride, ptrdiff_t srcstride = _srcstride / sizeof(pixel); pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; + const int8_t *filter = ff_hevc_epel_filters[mx]; int shift = 14 + 1 - BIT_DEPTH; #if BIT_DEPTH < 14 int offset = 1 << (shift - 1); @@ -646,7 +646,7 @@ static void FUNC(put_hevc_epel_bi_v)(uint8_t *_dst, ptrdiff_t _dststride, int x, y; const pixel *src = (const pixel *)_src; ptrdiff_t srcstride = _srcstride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[my - 1]; + const int8_t *filter = ff_hevc_epel_filters[my]; pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); int shift = 14 + 1 - BIT_DEPTH; @@ -674,7 +674,7 @@ static void FUNC(put_hevc_epel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, ptrdiff_t srcstride = _srcstride / sizeof(pixel); pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; + const int8_t *filter = ff_hevc_epel_filters[mx]; int16_t tmp_array[(MAX_PB_SIZE + EPEL_EXTRA) * MAX_PB_SIZE]; int16_t *tmp = tmp_array; int shift = 14 + 1 - BIT_DEPTH; @@ -694,7 +694,7 @@ static void FUNC(put_hevc_epel_bi_hv)(uint8_t *_dst, ptrdiff_t _dststride, } tmp = tmp_array + EPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_epel_filters[my - 1]; + filter = ff_hevc_epel_filters[my]; for (y = 0; y < height; y++) { for (x = 0; x < width; x++) @@ -715,7 +715,7 @@ static void FUNC(put_hevc_epel_bi_w_h)(uint8_t *_dst, ptrdiff_t _dststride, ptrdiff_t srcstride = _srcstride / sizeof(pixel); pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; + const int8_t *filter = ff_hevc_epel_filters[mx]; int shift = 14 + 1 - BIT_DEPTH; int log2Wd = denom + shift - 1; @@ -739,7 +739,7 @@ static void FUNC(put_hevc_epel_bi_w_v)(uint8_t *_dst, ptrdiff_t _dststride, int x, y; const pixel *src = (const pixel *)_src; ptrdiff_t srcstride = _srcstride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[my - 1]; + const int8_t *filter = ff_hevc_epel_filters[my]; pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); int shift = 14 + 1 - BIT_DEPTH; @@ -767,7 +767,7 @@ static void FUNC(put_hevc_epel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, ptrdiff_t srcstride = _srcstride / sizeof(pixel); pixel *dst = (pixel *)_dst; ptrdiff_t dststride = _dststride / sizeof(pixel); - const int8_t *filter = ff_hevc_epel_filters[mx - 1]; + const int8_t *filter = ff_hevc_epel_filters[mx]; int16_t tmp_array[(MAX_PB_SIZE + EPEL_EXTRA) * MAX_PB_SIZE]; int16_t *tmp = tmp_array; int shift = 14 + 1 - BIT_DEPTH; @@ -783,7 +783,7 @@ static void FUNC(put_hevc_epel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride, } tmp = tmp_array + EPEL_EXTRA_BEFORE * MAX_PB_SIZE; - filter = ff_hevc_epel_filters[my - 1]; + filter = ff_hevc_epel_filters[my]; ox0 = ox0 * (1 << (BIT_DEPTH - 8)); ox1 = ox1 * (1 << (BIT_DEPTH - 8)); diff --git a/src/ExtLib/ffmpeg/libavcodec/hwaccel_internal.h b/src/ExtLib/ffmpeg/libavcodec/hwaccel_internal.h index 057b07323d..b0cc22bb68 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hwaccel_internal.h +++ b/src/ExtLib/ffmpeg/libavcodec/hwaccel_internal.h @@ -128,7 +128,7 @@ typedef struct FFHWAccel { /** * Uninitialize the hwaccel private data. * - * This will be called from get_format() or avcodec_close(), after hwaccel + * This will be called from get_format() or ff_codec_close(), after hwaccel * and hwaccel_context are already uninitialized. */ int (*uninit)(AVCodecContext *avctx); diff --git a/src/ExtLib/ffmpeg/libavcodec/indeo3.c b/src/ExtLib/ffmpeg/libavcodec/indeo3.c index 5f1014f0d4..7bb0235bdb 100644 --- a/src/ExtLib/ffmpeg/libavcodec/indeo3.c +++ b/src/ExtLib/ffmpeg/libavcodec/indeo3.c @@ -171,6 +171,9 @@ static av_cold int allocate_frame_buffers(Indeo3DecodeContext *ctx, int luma_size, chroma_size; ptrdiff_t luma_pitch, chroma_pitch; + luma_width = FFALIGN(luma_width , 2); + luma_height = FFALIGN(luma_height, 2); + if (luma_width < 16 || luma_width > 640 || luma_height < 16 || luma_height > 480 || luma_width & 1 || luma_height & 1) { diff --git a/src/ExtLib/ffmpeg/libavcodec/intelh263dec.c b/src/ExtLib/ffmpeg/libavcodec/intelh263dec.c index 2c216b00a6..f8eeb6b44e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/intelh263dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/intelh263dec.c @@ -138,8 +138,4 @@ const FFCodec ff_h263i_decoder = { FF_CODEC_DECODE_CB(ff_h263_decode_frame), .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/libuavs3d.c b/src/ExtLib/ffmpeg/libavcodec/libuavs3d.c index 66e8d31001..f5d47f28ed 100644 --- a/src/ExtLib/ffmpeg/libavcodec/libuavs3d.c +++ b/src/ExtLib/ffmpeg/libavcodec/libuavs3d.c @@ -274,8 +274,5 @@ const FFCodec ff_libuavs3d_decoder = { .caps_internal = FF_CODEC_CAP_NOT_INIT_THREADSAFE | FF_CODEC_CAP_AUTO_THREADS, .flush = libuavs3d_flush, - .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, - AV_PIX_FMT_YUV420P10LE, - AV_PIX_FMT_NONE }, .p.wrapper_name = "libuavs3d", }; diff --git a/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c b/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c index 65d4bf429b..07de5d6d91 100644 --- a/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c +++ b/src/ExtLib/ffmpeg/libavcodec/mpeg4videodec.c @@ -3865,7 +3865,6 @@ const FFCodec ff_mpeg4_decoder = { FF_CODEC_CAP_ALLOCATE_PROGRESS, .flush = ff_mpeg_flush, .p.max_lowres = 3, - .p.pix_fmts = ff_h263_hwaccel_pixfmt_list_420, .p.profiles = NULL_IF_CONFIG_SMALL(ff_mpeg4_video_profiles), UPDATE_THREAD_CONTEXT(mpeg4_update_thread_context), UPDATE_THREAD_CONTEXT_FOR_USER(mpeg4_update_thread_context_for_user), diff --git a/src/ExtLib/ffmpeg/libavcodec/msmpeg4dec.c b/src/ExtLib/ffmpeg/libavcodec/msmpeg4dec.c index 5b10d8f225..bf1e4877bd 100644 --- a/src/ExtLib/ffmpeg/libavcodec/msmpeg4dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/msmpeg4dec.c @@ -853,10 +853,6 @@ const FFCodec ff_msmpeg4v1_decoder = { .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; const FFCodec ff_msmpeg4v2_decoder = { @@ -871,10 +867,6 @@ const FFCodec ff_msmpeg4v2_decoder = { .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; const FFCodec ff_msmpeg4v3_decoder = { @@ -889,10 +881,6 @@ const FFCodec ff_msmpeg4v3_decoder = { .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; const FFCodec ff_wmv1_decoder = { @@ -907,8 +895,4 @@ const FFCodec ff_wmv1_decoder = { .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_SKIP_FRAME_FILL_PARAM, .p.max_lowres = 3, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec.c b/src/ExtLib/ffmpeg/libavcodec/nvdec.c index d13b790632..553c9bdf18 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec.c @@ -680,7 +680,7 @@ int ff_nvdec_simple_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, ctx->slice_offsets = tmp; if (!ctx->bitstream) - ctx->bitstream = (uint8_t*)buffer; + ctx->bitstream = buffer; ctx->slice_offsets[ctx->nb_slices] = buffer - ctx->bitstream; ctx->bitstream_len += size; diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec.h b/src/ExtLib/ffmpeg/libavcodec/nvdec.h index 812199dc6f..7e69e9660a 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec.h +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec.h @@ -56,7 +56,7 @@ typedef struct NVDECContext { struct NVDECDecoder *decoder; ///< RefStruct reference - uint8_t *bitstream; + const uint8_t *bitstream; int bitstream_len; unsigned int bitstream_allocated; uint8_t *bitstream_internal; diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec_av1.c b/src/ExtLib/ffmpeg/libavcodec/nvdec_av1.c index 34e6e5b43b..d49980366e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec_av1.c +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec_av1.c @@ -303,7 +303,7 @@ static int nvdec_av1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, /* Shortcut if all tiles are in the same buffer */ if (ctx->nb_slices == s->tg_end - s->tg_start + 1) { - ctx->bitstream = (uint8_t*)buffer; + ctx->bitstream = buffer; ctx->bitstream_len = size; for (int i = 0; i < ctx->nb_slices; ++i) { @@ -321,7 +321,7 @@ static int nvdec_av1_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, } ctx->bitstream = ctx->bitstream_internal = tmp; - memcpy(ctx->bitstream + ctx->bitstream_len, buffer, size); + memcpy(ctx->bitstream_internal + ctx->bitstream_len, buffer, size); for (uint32_t tile_num = s->tg_start; tile_num <= s->tg_end; ++tile_num) { ctx->slice_offsets[tile_num*2 ] = ctx->bitstream_len + s->tile_group_info[tile_num].tile_offset; diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c b/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c index b9b0cc4125..95b8d56940 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec_h264.c @@ -150,8 +150,8 @@ static int nvdec_h264_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, return AVERROR(ENOMEM); ctx->slice_offsets = tmp; - AV_WB24(ctx->bitstream + ctx->bitstream_len, 1); - memcpy(ctx->bitstream + ctx->bitstream_len + 3, buffer, size); + AV_WB24(ctx->bitstream_internal + ctx->bitstream_len, 1); + memcpy(ctx->bitstream_internal + ctx->bitstream_len + 3, buffer, size); ctx->slice_offsets[ctx->nb_slices] = ctx->bitstream_len ; ctx->bitstream_len += size + 3; ctx->nb_slices++; diff --git a/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c b/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c index 25319a1328..ff118af04b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c +++ b/src/ExtLib/ffmpeg/libavcodec/nvdec_hevc.c @@ -286,8 +286,8 @@ static int nvdec_hevc_decode_slice(AVCodecContext *avctx, const uint8_t *buffer, return AVERROR(ENOMEM); ctx->slice_offsets = tmp; - AV_WB24(ctx->bitstream + ctx->bitstream_len, 1); - memcpy(ctx->bitstream + ctx->bitstream_len + 3, buffer, size); + AV_WB24(ctx->bitstream_internal + ctx->bitstream_len, 1); + memcpy(ctx->bitstream_internal + ctx->bitstream_len + 3, buffer, size); ctx->slice_offsets[ctx->nb_slices] = ctx->bitstream_len ; ctx->bitstream_len += size + 3; ctx->nb_slices++; diff --git a/src/ExtLib/ffmpeg/libavcodec/options.c b/src/ExtLib/ffmpeg/libavcodec/options.c index a9b35ee1c3..05a355fb45 100644 --- a/src/ExtLib/ffmpeg/libavcodec/options.c +++ b/src/ExtLib/ffmpeg/libavcodec/options.c @@ -27,6 +27,7 @@ #include "config_components.h" #include "avcodec.h" +#include "avcodec_internal.h" #include "codec_internal.h" #include "libavutil/avassert.h" #include "libavutil/internal.h" @@ -172,7 +173,7 @@ void avcodec_free_context(AVCodecContext **pavctx) if (!avctx) return; - avcodec_close(avctx); + ff_codec_close(avctx); av_freep(&avctx->extradata); av_freep(&avctx->subtitle_header); diff --git a/src/ExtLib/ffmpeg/libavcodec/pngdec.c b/src/ExtLib/ffmpeg/libavcodec/pngdec.c index d1aae4c70e..026da30c25 100644 --- a/src/ExtLib/ffmpeg/libavcodec/pngdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/pngdec.c @@ -29,6 +29,7 @@ #include "libavutil/csp.h" #include "libavutil/imgutils.h" #include "libavutil/intreadwrite.h" +#include "libavutil/mastering_display_metadata.h" #include "libavutil/pixfmt.h" #include "libavutil/rational.h" #include "libavutil/stereo3d.h" @@ -81,6 +82,14 @@ typedef struct PNGDecContext { enum AVColorPrimaries cicp_primaries; enum AVColorTransferCharacteristic cicp_trc; enum AVColorRange cicp_range; + int have_clli; + uint32_t clli_max; + uint32_t clli_avg; + int have_mdvc; + uint16_t mdvc_primaries[3][2]; + uint16_t mdvc_white_point[2]; + uint32_t mdvc_max_lum; + uint32_t mdvc_min_lum; enum PNGHeaderState hdr_state; enum PNGImageState pic_state; @@ -731,6 +740,36 @@ static int populate_avctx_color_fields(AVCodecContext *avctx, AVFrame *frame) if (!s->has_trns && s->significant_bits > 0) avctx->bits_per_raw_sample = s->significant_bits; + if (s->have_clli) { + AVContentLightMetadata *clli = + av_content_light_metadata_create_side_data(frame); + if (!clli) + return AVERROR(ENOMEM); + /* + * 0.0001 divisor value + * see: https://www.w3.org/TR/png-3/#cLLi-chunk + */ + clli->MaxCLL = s->clli_max / 10000; + clli->MaxFALL = s->clli_avg / 10000; + } + + if (s->have_mdvc) { + AVMasteringDisplayMetadata *mdvc = + av_mastering_display_metadata_create_side_data(frame); + if (!mdvc) + return AVERROR(ENOMEM); + mdvc->has_primaries = 1; + for (int i = 0; i < 3; i++) { + mdvc->display_primaries[i][0] = av_make_q(s->mdvc_primaries[i][0], 50000); + mdvc->display_primaries[i][1] = av_make_q(s->mdvc_primaries[i][1], 50000); + } + mdvc->white_point[0] = av_make_q(s->mdvc_white_point[0], 50000); + mdvc->white_point[1] = av_make_q(s->mdvc_white_point[1], 50000); + mdvc->has_luminance = 1; + mdvc->max_luminance = av_make_q(s->mdvc_max_lum, 10000); + mdvc->min_luminance = av_make_q(s->mdvc_min_lum, 10000); + } + return 0; } @@ -1508,6 +1547,30 @@ static int decode_frame_common(AVCodecContext *avctx, PNGDecContext *s, break; } + case MKTAG('c', 'L', 'L', 'i'): + if (bytestream2_get_bytes_left(&gb_chunk) != 8) { + av_log(avctx, AV_LOG_WARNING, "Invalid cLLi chunk size: %d\n", bytestream2_get_bytes_left(&gb_chunk)); + break; + } + s->have_clli = 1; + s->clli_max = bytestream2_get_be32u(&gb_chunk); + s->clli_avg = bytestream2_get_be32u(&gb_chunk); + break; + case MKTAG('m', 'D', 'V', 'c'): + if (bytestream2_get_bytes_left(&gb_chunk) != 24) { + av_log(avctx, AV_LOG_WARNING, "Invalid mDVc chunk size: %d\n", bytestream2_get_bytes_left(&gb_chunk)); + break; + } + s->have_mdvc = 1; + for (int i = 0; i < 3; i++) { + s->mdvc_primaries[i][0] = bytestream2_get_be16u(&gb_chunk); + s->mdvc_primaries[i][1] = bytestream2_get_be16u(&gb_chunk); + } + s->mdvc_white_point[0] = bytestream2_get_be16u(&gb_chunk); + s->mdvc_white_point[1] = bytestream2_get_be16u(&gb_chunk); + s->mdvc_max_lum = bytestream2_get_be32u(&gb_chunk); + s->mdvc_min_lum = bytestream2_get_be32u(&gb_chunk); + break; case MKTAG('I', 'E', 'N', 'D'): if (!(s->pic_state & PNG_ALLIMAGE)) av_log(avctx, AV_LOG_ERROR, "IEND without all image\n"); diff --git a/src/ExtLib/ffmpeg/libavcodec/pthread_frame.c b/src/ExtLib/ffmpeg/libavcodec/pthread_frame.c index 71e99a5728..2274d3fd7a 100644 --- a/src/ExtLib/ffmpeg/libavcodec/pthread_frame.c +++ b/src/ExtLib/ffmpeg/libavcodec/pthread_frame.c @@ -761,7 +761,7 @@ void ff_frame_thread_free(AVCodecContext *avctx, int thread_count) ff_pthread_free(fctx, thread_ctx_offsets); /* if we have stashed hwaccel state, move it to the user-facing context, - * so it will be freed in avcodec_close() */ + * so it will be freed in ff_codec_close() */ av_assert0(!avctx->hwaccel); FFSWAP(const AVHWAccel*, avctx->hwaccel, fctx->stash_hwaccel); FFSWAP(void*, avctx->hwaccel_context, fctx->stash_hwaccel_context); diff --git a/src/ExtLib/ffmpeg/libavcodec/refstruct.c b/src/ExtLib/ffmpeg/libavcodec/refstruct.c index 7597f6d0ee..81e8c9795c 100644 --- a/src/ExtLib/ffmpeg/libavcodec/refstruct.c +++ b/src/ExtLib/ffmpeg/libavcodec/refstruct.c @@ -45,7 +45,7 @@ #define REFSTRUCT_COOKIE AV_NE((uint64_t)MKBETAG('R', 'e', 'f', 'S') << 32 | MKBETAG('t', 'r', 'u', 'c'), \ MKTAG('R', 'e', 'f', 'S') | (uint64_t)MKTAG('t', 'r', 'u', 'c') << 32) -#if __STDC_VERSION__ >= 201112L +#if __STDC_VERSION__ >= 201112L && !defined(_MSC_VER) #define REFCOUNT_OFFSET FFALIGN(sizeof(RefCount), FFMAX3(STRIDE_ALIGN, 16, _Alignof(max_align_t))) #else #define REFCOUNT_OFFSET FFALIGN(sizeof(RefCount), FFMAX(STRIDE_ALIGN, 16)) diff --git a/src/ExtLib/ffmpeg/libavcodec/rv10.c b/src/ExtLib/ffmpeg/libavcodec/rv10.c index 216328ffe7..d32faa628b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/rv10.c +++ b/src/ExtLib/ffmpeg/libavcodec/rv10.c @@ -671,10 +671,6 @@ const FFCodec ff_rv10_decoder = { FF_CODEC_DECODE_CB(rv10_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1, .p.max_lowres = 3, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; const FFCodec ff_rv20_decoder = { @@ -689,8 +685,4 @@ const FFCodec ff_rv20_decoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, .flush = ff_mpeg_flush, .p.max_lowres = 3, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/rv30.c b/src/ExtLib/ffmpeg/libavcodec/rv30.c index be62577f99..9e13e71805 100644 --- a/src/ExtLib/ffmpeg/libavcodec/rv30.c +++ b/src/ExtLib/ffmpeg/libavcodec/rv30.c @@ -303,10 +303,6 @@ const FFCodec ff_rv30_decoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_FRAME_THREADS, .flush = ff_mpeg_flush, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, UPDATE_THREAD_CONTEXT(ff_rv34_decode_update_thread_context), .caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/rv40.c b/src/ExtLib/ffmpeg/libavcodec/rv40.c index 3ee405f33c..e48aa1f684 100644 --- a/src/ExtLib/ffmpeg/libavcodec/rv40.c +++ b/src/ExtLib/ffmpeg/libavcodec/rv40.c @@ -581,10 +581,6 @@ const FFCodec ff_rv40_decoder = { .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY | AV_CODEC_CAP_FRAME_THREADS, .flush = ff_mpeg_flush, - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, UPDATE_THREAD_CONTEXT(ff_rv34_decode_update_thread_context), .caps_internal = FF_CODEC_CAP_ALLOCATE_PROGRESS, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/svq1dec.c b/src/ExtLib/ffmpeg/libavcodec/svq1dec.c index af02063a45..d2cfe4cf40 100644 --- a/src/ExtLib/ffmpeg/libavcodec/svq1dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/svq1dec.c @@ -863,6 +863,4 @@ const FFCodec ff_svq1_decoder = { FF_CODEC_DECODE_CB(svq1_decode_frame), .p.capabilities = AV_CODEC_CAP_DR1, .flush = svq1_flush, - .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV410P, - AV_PIX_FMT_NONE }, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/svq3.c b/src/ExtLib/ffmpeg/libavcodec/svq3.c index 2d03dbc457..d2f53742e1 100644 --- a/src/ExtLib/ffmpeg/libavcodec/svq3.c +++ b/src/ExtLib/ffmpeg/libavcodec/svq3.c @@ -1602,7 +1602,5 @@ const FFCodec ff_svq3_decoder = { .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, - .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUVJ420P, - AV_PIX_FMT_NONE}, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/texturedsp.c b/src/ExtLib/ffmpeg/libavcodec/texturedsp.c index fae7b932dc..e2161060b7 100644 --- a/src/ExtLib/ffmpeg/libavcodec/texturedsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/texturedsp.c @@ -175,9 +175,12 @@ static av_always_inline void premult2straight(uint8_t *src) int b = src[2]; int a = src[3]; /* unchanged */ - src[0] = (uint8_t) r * a / 255; - src[1] = (uint8_t) g * a / 255; - src[2] = (uint8_t) b * a / 255; + if (a == 0) + return; + + src[0] = (uint8_t) FFMIN(r * 255 / a, 255); + src[1] = (uint8_t) FFMIN(g * 255 / a, 255); + src[2] = (uint8_t) FFMIN(b * 255 / a, 255); } /** diff --git a/src/ExtLib/ffmpeg/libavcodec/tiff.c b/src/ExtLib/ffmpeg/libavcodec/tiff.c index adb49e4525..3ce441aa2c 100644 --- a/src/ExtLib/ffmpeg/libavcodec/tiff.c +++ b/src/ExtLib/ffmpeg/libavcodec/tiff.c @@ -1701,7 +1701,7 @@ static int tiff_decode_tag(TiffContext *s, AVFrame *frame) break; case TIFF_ICC_PROFILE: gb_temp = s->gb; - bytestream2_seek(&gb_temp, SEEK_SET, off); + bytestream2_seek(&gb_temp, off, SEEK_SET); if (bytestream2_get_bytes_left(&gb_temp) < count) return AVERROR_INVALIDDATA; diff --git a/src/ExtLib/ffmpeg/libavcodec/vc1dec.c b/src/ExtLib/ffmpeg/libavcodec/vc1dec.c index d5046c358b..1c27f057f1 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vc1dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/vc1dec.c @@ -51,6 +51,30 @@ #include "libavutil/thread.h" +static const enum AVPixelFormat vc1_hwaccel_pixfmt_list_420[] = { +#if CONFIG_VC1_DXVA2_HWACCEL + AV_PIX_FMT_DXVA2_VLD, +#endif +#if CONFIG_VC1_D3D11VA_HWACCEL + AV_PIX_FMT_D3D11VA_VLD, + AV_PIX_FMT_D3D11, +#endif +#if CONFIG_VC1_D3D12VA_HWACCEL + AV_PIX_FMT_D3D12, +#endif +#if CONFIG_VC1_NVDEC_HWACCEL + AV_PIX_FMT_CUDA, +#endif +#if CONFIG_VC1_VAAPI_HWACCEL + AV_PIX_FMT_VAAPI, +#endif +#if CONFIG_VC1_VDPAU_HWACCEL + AV_PIX_FMT_VDPAU, +#endif + AV_PIX_FMT_YUV420P, + AV_PIX_FMT_NONE +}; + #if CONFIG_WMV3IMAGE_DECODER || CONFIG_VC1IMAGE_DECODER typedef struct SpriteData { @@ -417,7 +441,11 @@ static enum AVPixelFormat vc1_get_format(AVCodecContext *avctx) return AV_PIX_FMT_GRAY8; } - return ff_get_format(avctx, avctx->codec->pix_fmts); + if (avctx->codec_id == AV_CODEC_ID_VC1IMAGE || + avctx->codec_id == AV_CODEC_ID_WMV3IMAGE) + return AV_PIX_FMT_YUV420P; + + return ff_get_format(avctx, vc1_hwaccel_pixfmt_list_420); } av_cold int ff_vc1_decode_init(AVCodecContext *avctx) @@ -691,14 +719,6 @@ static av_cold int vc1_decode_init(AVCodecContext *avctx) if (v->profile == PROFILE_ADVANCED) avctx->level = v->level; - if (!CONFIG_GRAY || !(avctx->flags & AV_CODEC_FLAG_GRAY)) - avctx->pix_fmt = ff_get_format(avctx, avctx->codec->pix_fmts); - else { - avctx->pix_fmt = AV_PIX_FMT_GRAY8; - if (avctx->color_range == AVCOL_RANGE_UNSPECIFIED) - avctx->color_range = AVCOL_RANGE_MPEG; - } - ff_blockdsp_init(&s->bdsp); ff_h264chroma_init(&v->h264chroma, 8); @@ -846,14 +866,12 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, if (size <= 0) continue; switch (AV_RB32(start)) { case VC1_CODE_FRAME: - if (avctx->hwaccel) - buf_start = start; + buf_start = start; buf_size2 = v->vc1dsp.vc1_unescape_buffer(start + 4, size, buf2); break; case VC1_CODE_FIELD: { int buf_size3; - if (avctx->hwaccel) - buf_start_second_field = start; + buf_start_second_field = start; av_size_mult(sizeof(*slices), n_slices+1, &next_allocated); tmp = next_allocated ? av_fast_realloc(slices, &slices_allocated, next_allocated) : NULL; if (!tmp) { @@ -918,8 +936,7 @@ static int vc1_decode_frame(AVCodecContext *avctx, AVFrame *pict, ret = AVERROR_INVALIDDATA; goto err; } else { // found field marker, unescape second field - if (avctx->hwaccel) - buf_start_second_field = divider; + buf_start_second_field = divider; av_size_mult(sizeof(*slices), n_slices+1, &next_allocated); tmp = next_allocated ? av_fast_realloc(slices, &slices_allocated, next_allocated) : NULL; if (!tmp) { @@ -1384,30 +1401,6 @@ static void vc1_decode_flush(AVCodecContext *avctx) } // ==> End patch MPC -static const enum AVPixelFormat vc1_hwaccel_pixfmt_list_420[] = { -#if CONFIG_VC1_DXVA2_HWACCEL - AV_PIX_FMT_DXVA2_VLD, -#endif -#if CONFIG_VC1_D3D11VA_HWACCEL - AV_PIX_FMT_D3D11VA_VLD, - AV_PIX_FMT_D3D11, -#endif -#if CONFIG_VC1_D3D12VA_HWACCEL - AV_PIX_FMT_D3D12, -#endif -#if CONFIG_VC1_NVDEC_HWACCEL - AV_PIX_FMT_CUDA, -#endif -#if CONFIG_VC1_VAAPI_HWACCEL - AV_PIX_FMT_VAAPI, -#endif -#if CONFIG_VC1_VDPAU_HWACCEL - AV_PIX_FMT_VDPAU, -#endif - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE -}; - const FFCodec ff_vc1_decoder = { .p.name = "vc1", CODEC_LONG_NAME("SMPTE VC-1"), @@ -1421,7 +1414,6 @@ const FFCodec ff_vc1_decoder = { .flush = vc1_decode_flush/*ff_mpeg_flush*/, // ==> End patch MPC .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, - .p.pix_fmts = vc1_hwaccel_pixfmt_list_420, .hw_configs = (const AVCodecHWConfigInternal *const []) { #if CONFIG_VC1_DXVA2_HWACCEL HWACCEL_DXVA2(vc1), @@ -1463,7 +1455,6 @@ const FFCodec ff_wmv3_decoder = { .flush = vc1_decode_flush/*ff_mpeg_flush*/, // ==> End patch MPC .p.capabilities = AV_CODEC_CAP_DR1 | AV_CODEC_CAP_DELAY, - .p.pix_fmts = vc1_hwaccel_pixfmt_list_420, .hw_configs = (const AVCodecHWConfigInternal *const []) { #if CONFIG_WMV3_DXVA2_HWACCEL HWACCEL_DXVA2(wmv3), @@ -1506,10 +1497,6 @@ const FFCodec ff_wmv3image_decoder = { // ==> Start patch MPC //.flush = vc1_sprite_flush, // ==> end patch MPC - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; #endif @@ -1527,9 +1514,5 @@ const FFCodec ff_vc1image_decoder = { // ==> Start patch MPC //.flush = vc1_sprite_flush, // ==> end patch MPC - .p.pix_fmts = (const enum AVPixelFormat[]) { - AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE - }, }; #endif diff --git a/src/ExtLib/ffmpeg/libavcodec/version_major.h b/src/ExtLib/ffmpeg/libavcodec/version_major.h index b9164fe5c6..45209c0a4f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/version_major.h +++ b/src/ExtLib/ffmpeg/libavcodec/version_major.h @@ -52,6 +52,7 @@ #define FF_API_AVFFT (LIBAVCODEC_VERSION_MAJOR < 62) #define FF_API_FF_PROFILE_LEVEL (LIBAVCODEC_VERSION_MAJOR < 62) +#define FF_API_AVCODEC_CLOSE (LIBAVCODEC_VERSION_MAJOR < 62) // reminder to remove CrystalHD decoders on next major bump #define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61) diff --git a/src/ExtLib/ffmpeg/libavcodec/wmv2dec.c b/src/ExtLib/ffmpeg/libavcodec/wmv2dec.c index ab72590a8e..ff27d1b4d0 100644 --- a/src/ExtLib/ffmpeg/libavcodec/wmv2dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/wmv2dec.c @@ -599,6 +599,4 @@ const FFCodec ff_wmv2_decoder = { FF_CODEC_DECODE_CB(ff_h263_decode_frame), .p.capabilities = AV_CODEC_CAP_DRAW_HORIZ_BAND | AV_CODEC_CAP_DR1, .caps_internal = FF_CODEC_CAP_INIT_CLEANUP, - .p.pix_fmts = (const enum AVPixelFormat[]) { AV_PIX_FMT_YUV420P, - AV_PIX_FMT_NONE }, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred.asm b/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred.asm index 8a38ba2bb5..ea46bc595d 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred.asm +++ b/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred.asm @@ -86,8 +86,6 @@ cglobal pred16x16_horizontal_8, 2,3 punpcklbw m1, m1 SPLATW m0, m0, 3 SPLATW m1, m1, 3 - mova [r0+r1*0+8], m0 - mova [r0+r1*1+8], m1 %endif mova [r0+r1*0], m0 @@ -98,7 +96,7 @@ cglobal pred16x16_horizontal_8, 2,3 RET %endmacro -INIT_MMX mmxext +INIT_XMM sse2 PRED16x16_H INIT_XMM ssse3 PRED16x16_H @@ -568,17 +566,17 @@ H264_PRED8x8_PLANE ; void ff_pred8x8_vertical_8(uint8_t *src, ptrdiff_t stride) ;----------------------------------------------------------------------------- -INIT_MMX mmx +INIT_XMM sse2 cglobal pred8x8_vertical_8, 2,2 sub r0, r1 - movq mm0, [r0] + movq m0, [r0] %rep 3 - movq [r0+r1*1], mm0 - movq [r0+r1*2], mm0 + movq [r0+r1*1], m0 + movq [r0+r1*2], m0 lea r0, [r0+r1*2] %endrep - movq [r0+r1*1], mm0 - movq [r0+r1*2], mm0 + movq [r0+r1*1], m0 + movq [r0+r1*2], m0 RET ;----------------------------------------------------------------------------- diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred_init.c index ee46927a24..aa9bc721f0 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred_init.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/h264_intrapred_init.c @@ -100,7 +100,7 @@ PRED16x16(horizontal, 10, sse2) /* 8-bit versions */ PRED16x16(vertical, 8, sse) -PRED16x16(horizontal, 8, mmxext) +PRED16x16(horizontal, 8, sse2) PRED16x16(horizontal, 8, ssse3) PRED16x16(dc, 8, sse2) PRED16x16(dc, 8, ssse3) @@ -116,7 +116,7 @@ PRED16x16(tm_vp8, 8, avx2) PRED8x8(top_dc, 8, mmxext) PRED8x8(dc_rv40, 8, mmxext) PRED8x8(dc, 8, mmxext) -PRED8x8(vertical, 8, mmx) +PRED8x8(vertical, 8, sse2) PRED8x8(horizontal, 8, mmxext) PRED8x8(horizontal, 8, ssse3) PRED8x8(plane, 8, sse2) @@ -163,14 +163,7 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, int cpu_flags = av_get_cpu_flags(); if (bit_depth == 8) { - if (EXTERNAL_MMX(cpu_flags)) { - if (chroma_format_idc <= 1) { - h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_mmx; - } - } - if (EXTERNAL_MMXEXT(cpu_flags)) { - h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_mmxext; if (chroma_format_idc <= 1) h->pred8x8[HOR_PRED8x8 ] = ff_pred8x8_horizontal_8_mmxext; h->pred8x8l [TOP_DC_PRED ] = ff_pred8x8l_top_dc_8_mmxext; @@ -210,12 +203,15 @@ av_cold void ff_h264_pred_init_x86(H264PredContext *h, int codec_id, } if (EXTERNAL_SSE2(cpu_flags)) { + h->pred16x16[HOR_PRED8x8 ] = ff_pred16x16_horizontal_8_sse2; h->pred16x16[DC_PRED8x8 ] = ff_pred16x16_dc_8_sse2; h->pred8x8l [DIAG_DOWN_LEFT_PRED ] = ff_pred8x8l_down_left_8_sse2; h->pred8x8l [DIAG_DOWN_RIGHT_PRED ] = ff_pred8x8l_down_right_8_sse2; h->pred8x8l [VERT_RIGHT_PRED ] = ff_pred8x8l_vertical_right_8_sse2; h->pred8x8l [VERT_LEFT_PRED ] = ff_pred8x8l_vertical_left_8_sse2; h->pred8x8l [HOR_DOWN_PRED ] = ff_pred8x8l_horizontal_down_8_sse2; + if (chroma_format_idc <= 1) + h->pred8x8 [VERT_PRED8x8 ] = ff_pred8x8_vertical_8_sse2; if (codec_id == AV_CODEC_ID_VP7 || codec_id == AV_CODEC_ID_VP8) { h->pred16x16[PLANE_PRED8x8 ] = ff_pred16x16_tm_vp8_8_sse2; h->pred8x8 [PLANE_PRED8x8 ] = ff_pred8x8_tm_vp8_8_sse2; diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c index f75ca03a2b..e132699105 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c @@ -88,8 +88,8 @@ IDCT_FUNCS(avx) #define ff_hevc_pel_filters ff_hevc_qpel_filters #define DECL_HV_FILTER(f) \ - const uint8_t *hf = ff_hevc_ ## f ## _filters[mx - 1]; \ - const uint8_t *vf = ff_hevc_ ## f ## _filters[my - 1]; + const uint8_t *hf = ff_hevc_ ## f ## _filters[mx]; \ + const uint8_t *vf = ff_hevc_ ## f ## _filters[my]; #define FW_PUT(p, a, b, depth, opt) \ void ff_hevc_put_hevc_ ## a ## _ ## depth ## _##opt(int16_t *dst, const uint8_t *src, ptrdiff_t srcstride, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/vp6dsp.asm b/src/ExtLib/ffmpeg/libavcodec/x86/vp6dsp.asm index 512fe89def..0106541734 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/vp6dsp.asm +++ b/src/ExtLib/ffmpeg/libavcodec/x86/vp6dsp.asm @@ -27,44 +27,6 @@ cextern pw_64 SECTION .text %macro DIAG4 6 -%if mmsize == 8 - movq m0, [%1+%2] - movq m1, [%1+%3] - movq m3, m0 - movq m4, m1 - punpcklbw m0, m7 - punpcklbw m1, m7 - punpckhbw m3, m7 - punpckhbw m4, m7 - pmullw m0, [rsp+8*11] ; src[x-8 ] * biweight [0] - pmullw m1, [rsp+8*12] ; src[x ] * biweight [1] - pmullw m3, [rsp+8*11] ; src[x-8 ] * biweight [0] - pmullw m4, [rsp+8*12] ; src[x ] * biweight [1] - paddw m0, m1 - paddw m3, m4 - movq m1, [%1+%4] - movq m2, [%1+%5] - movq m4, m1 - movq m5, m2 - punpcklbw m1, m7 - punpcklbw m2, m7 - punpckhbw m4, m7 - punpckhbw m5, m7 - pmullw m1, [rsp+8*13] ; src[x+8 ] * biweight [2] - pmullw m2, [rsp+8*14] ; src[x+16] * biweight [3] - pmullw m4, [rsp+8*13] ; src[x+8 ] * biweight [2] - pmullw m5, [rsp+8*14] ; src[x+16] * biweight [3] - paddw m1, m2 - paddw m4, m5 - paddsw m0, m1 - paddsw m3, m4 - paddsw m0, m6 ; Add 64 - paddsw m3, m6 ; Add 64 - psraw m0, 7 - psraw m3, 7 - packuswb m0, m3 - movq [%6], m0 -%else ; mmsize == 16 movq m0, [%1+%2] movq m1, [%1+%3] punpcklbw m0, m7 @@ -84,25 +46,9 @@ SECTION .text psraw m0, 7 packuswb m0, m0 movq [%6], m0 -%endif ; mmsize == 8/16 %endmacro %macro SPLAT4REGS 0 -%if mmsize == 8 - movq m5, m3 - punpcklwd m3, m3 - movq m4, m3 - punpckldq m3, m3 - punpckhdq m4, m4 - punpckhwd m5, m5 - movq m2, m5 - punpckhdq m2, m2 - punpckldq m5, m5 - movq [rsp+8*11], m3 - movq [rsp+8*12], m4 - movq [rsp+8*13], m5 - movq [rsp+8*14], m2 -%else ; mmsize == 16 pshuflw m4, m3, 0x0 pshuflw m5, m3, 0x55 pshuflw m6, m3, 0xAA @@ -111,7 +57,6 @@ SECTION .text punpcklqdq m5, m5 punpcklqdq m6, m6 punpcklqdq m3, m3 -%endif ; mmsize == 8/16 %endmacro ; void ff_vp6_filter_diag4_(uint8_t *dst, uint8_t *src, ptrdiff_t stride, diff --git a/src/ExtLib/ffmpeg/libavfilter/allfilters.c b/src/ExtLib/ffmpeg/libavfilter/allfilters.c index af84aa3d97..149bf50997 100644 --- a/src/ExtLib/ffmpeg/libavfilter/allfilters.c +++ b/src/ExtLib/ffmpeg/libavfilter/allfilters.c @@ -611,8 +611,6 @@ extern const AVFilter ff_asrc_abuffer; extern const AVFilter ff_vsrc_buffer; extern const AVFilter ff_asink_abuffer; extern const AVFilter ff_vsink_buffer; -extern const AVFilter ff_af_afifo; -extern const AVFilter ff_vf_fifo; #include "libavfilter/filter_list.c" diff --git a/src/ExtLib/ffmpeg/libavfilter/buffersink.c b/src/ExtLib/ffmpeg/libavfilter/buffersink.c index 6ba2970dd5..af7f8ab58a 100644 --- a/src/ExtLib/ffmpeg/libavfilter/buffersink.c +++ b/src/ExtLib/ffmpeg/libavfilter/buffersink.c @@ -48,6 +48,10 @@ typedef struct BufferSinkContext { /* only used for video */ enum AVPixelFormat *pixel_fmts; ///< list of accepted pixel formats int pixel_fmts_size; + enum AVColorSpace *color_spaces; ///< list of accepted color spaces + int color_spaces_size; + enum AVColorRange *color_ranges; ///< list of accepted color ranges + int color_ranges_size; /* only used for audio */ enum AVSampleFormat *sample_fmts; ///< list of accepted sample formats @@ -250,19 +254,36 @@ int av_buffersink_get_ch_layout(const AVFilterContext *ctx, AVChannelLayout *out static int vsink_query_formats(AVFilterContext *ctx) { BufferSinkContext *buf = ctx->priv; - AVFilterFormats *formats = NULL; unsigned i; int ret; CHECK_LIST_SIZE(pixel_fmts) + CHECK_LIST_SIZE(color_spaces) + CHECK_LIST_SIZE(color_ranges) if (buf->pixel_fmts_size) { + AVFilterFormats *formats = NULL; for (i = 0; i < NB_ITEMS(buf->pixel_fmts); i++) if ((ret = ff_add_format(&formats, buf->pixel_fmts[i])) < 0) return ret; if ((ret = ff_set_common_formats(ctx, formats)) < 0) return ret; - } else { - if ((ret = ff_default_query_formats(ctx)) < 0) + } + + if (buf->color_spaces_size) { + AVFilterFormats *formats = NULL; + for (i = 0; i < NB_ITEMS(buf->color_spaces); i++) + if ((ret = ff_add_format(&formats, buf->color_spaces[i])) < 0) + return ret; + if ((ret = ff_set_common_color_spaces(ctx, formats)) < 0) + return ret; + } + + if (buf->color_ranges_size) { + AVFilterFormats *formats = NULL; + for (i = 0; i < NB_ITEMS(buf->color_ranges); i++) + if ((ret = ff_add_format(&formats, buf->color_ranges[i])) < 0) + return ret; + if ((ret = ff_set_common_color_ranges(ctx, formats)) < 0) return ret; } @@ -365,6 +386,8 @@ static int asink_query_formats(AVFilterContext *ctx) #define FLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_VIDEO_PARAM static const AVOption buffersink_options[] = { { "pix_fmts", "set the supported pixel formats", OFFSET(pixel_fmts), AV_OPT_TYPE_BINARY, .flags = FLAGS }, + { "color_spaces", "set the supported color spaces", OFFSET(color_spaces), AV_OPT_TYPE_BINARY, .flags = FLAGS }, + { "color_ranges", "set the supported color ranges", OFFSET(color_ranges), AV_OPT_TYPE_BINARY, .flags = FLAGS }, { NULL }, }; #undef FLAGS diff --git a/src/ExtLib/ffmpeg/libavfilter/buffersink.h b/src/ExtLib/ffmpeg/libavfilter/buffersink.h index 147e83114c..539a055ac2 100644 --- a/src/ExtLib/ffmpeg/libavfilter/buffersink.h +++ b/src/ExtLib/ffmpeg/libavfilter/buffersink.h @@ -55,6 +55,8 @@ * The format can be constrained by setting options, using av_opt_set() and * related functions with the AV_OPT_SEARCH_CHILDREN flag. * - pix_fmts (int list), + * - color_spaces (int list), + * - color_ranges (int list), * - sample_fmts (int list), * - sample_rates (int list), * - ch_layouts (string), diff --git a/src/ExtLib/ffmpeg/libavfilter/buffersrc.c b/src/ExtLib/ffmpeg/libavfilter/buffersrc.c index 6e450ff6b7..a6a000df1e 100644 --- a/src/ExtLib/ffmpeg/libavfilter/buffersrc.c +++ b/src/ExtLib/ffmpeg/libavfilter/buffersrc.c @@ -291,6 +291,11 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif + if (copy->colorspace == AVCOL_SPC_UNSPECIFIED) + copy->colorspace = ctx->outputs[0]->colorspace; + if (copy->color_range == AVCOL_RANGE_UNSPECIFIED) + copy->color_range = ctx->outputs[0]->color_range; + ret = ff_filter_frame(ctx->outputs[0], copy); if (ret < 0) return ret; @@ -501,8 +506,14 @@ static int query_formats(AVFilterContext *ctx) if ((ret = ff_add_format(&color_spaces, c->color_space)) < 0 || (ret = ff_set_common_color_spaces(ctx, color_spaces)) < 0) return ret; - if ((ret = ff_add_format(&color_ranges, c->color_range)) < 0 || - (ret = ff_set_common_color_ranges(ctx, color_ranges)) < 0) + if ((ret = ff_add_format(&color_ranges, c->color_range)) < 0) + return ret; + if (c->color_range == AVCOL_RANGE_UNSPECIFIED) { + /* allow implicitly promoting unspecified to mpeg */ + if ((ret = ff_add_format(&color_ranges, AVCOL_RANGE_MPEG)) < 0) + return ret; + } + if ((ret = ff_set_common_color_ranges(ctx, color_ranges)) < 0) return ret; } break; diff --git a/src/ExtLib/ffmpeg/libavutil/channel_layout.c b/src/ExtLib/ffmpeg/libavutil/channel_layout.c index b30df0c8be..8b488c48c0 100644 --- a/src/ExtLib/ffmpeg/libavutil/channel_layout.c +++ b/src/ExtLib/ffmpeg/libavutil/channel_layout.c @@ -398,6 +398,26 @@ int av_get_standard_channel_layout(unsigned index, uint64_t *layout, FF_ENABLE_DEPRECATION_WARNINGS #endif +int av_channel_layout_custom_init(AVChannelLayout *channel_layout, int nb_channels) +{ + AVChannelCustom *map; + + if (nb_channels <= 0) + return AVERROR(EINVAL); + + map = av_calloc(nb_channels, sizeof(*channel_layout->u.map)); + if (!map) + return AVERROR(ENOMEM); + for (int i = 0; i < nb_channels; i++) + map[i].id = AV_CHAN_UNKNOWN; + + channel_layout->order = AV_CHANNEL_ORDER_CUSTOM; + channel_layout->nb_channels = nb_channels; + channel_layout->u.map = map; + + return 0; +} + int av_channel_layout_from_mask(AVChannelLayout *channel_layout, uint64_t mask) { @@ -1016,3 +1036,109 @@ uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, return ret; } + +static int64_t masked_description(AVChannelLayout *channel_layout, int start_channel) +{ + uint64_t mask = 0; + for (int i = start_channel; i < channel_layout->nb_channels; i++) { + enum AVChannel ch = channel_layout->u.map[i].id; + if (ch >= 0 && ch < 63 && mask < (1ULL << ch)) + mask |= (1ULL << ch); + else + return AVERROR(EINVAL); + } + return mask; +} + +static int has_channel_names(AVChannelLayout *channel_layout) +{ + if (channel_layout->order != AV_CHANNEL_ORDER_CUSTOM) + return 0; + for (int i = 0; i < channel_layout->nb_channels; i++) + if (channel_layout->u.map[i].name[0]) + return 1; + return 0; +} + +int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags) +{ + int allow_lossy = !(flags & AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS); + int lossy; + + if (!av_channel_layout_check(channel_layout)) + return AVERROR(EINVAL); + + if (channel_layout->order == order) + return 0; + + switch (order) { + case AV_CHANNEL_ORDER_UNSPEC: { + int nb_channels = channel_layout->nb_channels; + if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) { + lossy = 0; + for (int i = 0; i < nb_channels; i++) { + if (channel_layout->u.map[i].id != AV_CHAN_UNKNOWN || channel_layout->u.map[i].name[0]) { + lossy = 1; + break; + } + } + } else { + lossy = 1; + } + if (!lossy || allow_lossy) { + av_channel_layout_uninit(channel_layout); + channel_layout->order = AV_CHANNEL_ORDER_UNSPEC; + channel_layout->nb_channels = nb_channels; + return lossy; + } + return AVERROR(ENOSYS); + } + case AV_CHANNEL_ORDER_NATIVE: + if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) { + int64_t mask = masked_description(channel_layout, 0); + if (mask < 0) + return AVERROR(ENOSYS); + lossy = has_channel_names(channel_layout); + if (!lossy || allow_lossy) { + av_channel_layout_uninit(channel_layout); + av_channel_layout_from_mask(channel_layout, mask); + return lossy; + } + } + return AVERROR(ENOSYS); + case AV_CHANNEL_ORDER_CUSTOM: { + AVChannelLayout custom = { 0 }; + int ret = av_channel_layout_custom_init(&custom, channel_layout->nb_channels); + if (ret < 0) + return ret; + if (channel_layout->order != AV_CHANNEL_ORDER_UNSPEC) + for (int i = 0; i < channel_layout->nb_channels; i++) + custom.u.map[i].id = av_channel_layout_channel_from_index(channel_layout, i); + av_channel_layout_uninit(channel_layout); + *channel_layout = custom; + return 0; + } + case AV_CHANNEL_ORDER_AMBISONIC: + if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) { + int64_t mask; + int nb_channels = channel_layout->nb_channels; + int order = ambisonic_order(channel_layout); + if (order < 0) + return AVERROR(ENOSYS); + mask = masked_description(channel_layout, (order + 1) * (order + 1)); + if (mask < 0) + return AVERROR(ENOSYS); + lossy = has_channel_names(channel_layout); + if (!lossy || allow_lossy) { + av_channel_layout_uninit(channel_layout); + channel_layout->order = AV_CHANNEL_ORDER_AMBISONIC; + channel_layout->nb_channels = nb_channels; + channel_layout->u.mask = mask; + return lossy; + } + } + return AVERROR(ENOSYS); + default: + return AVERROR(EINVAL); + } +} diff --git a/src/ExtLib/ffmpeg/libavutil/channel_layout.h b/src/ExtLib/ffmpeg/libavutil/channel_layout.h index 682c7d468c..d8c76f9005 100644 --- a/src/ExtLib/ffmpeg/libavutil/channel_layout.h +++ b/src/ExtLib/ffmpeg/libavutil/channel_layout.h @@ -617,6 +617,23 @@ void av_channel_description_bprint(struct AVBPrint *bp, enum AVChannel channel_i */ enum AVChannel av_channel_from_string(const char *name); +/** + * Initialize a custom channel layout with the specified number of channels. + * The channel map will be allocated and the designation of all channels will + * be set to AV_CHAN_UNKNOWN. + * + * This is only a convenience helper function, a custom channel layout can also + * be constructed without using this. + * + * @param channel_layout the layout structure to be initialized + * @param nb_channels the number of channels + * + * @return 0 on success + * AVERROR(EINVAL) if the number of channels <= 0 + * AVERROR(ENOMEM) if the channel map could not be allocated + */ +int av_channel_layout_custom_init(AVChannelLayout *channel_layout, int nb_channels); + /** * Initialize a native channel layout from a bitmask indicating which channels * are present. @@ -804,6 +821,46 @@ int av_channel_layout_check(const AVChannelLayout *channel_layout); */ int av_channel_layout_compare(const AVChannelLayout *chl, const AVChannelLayout *chl1); +/** + * The conversion must be lossless. + */ +#define AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS (1 << 0) + +/** + * Change the AVChannelOrder of a channel layout. + * + * Change of AVChannelOrder can be either lossless or lossy. In case of a + * lossless conversion all the channel designations and the associated channel + * names (if any) are kept. On a lossy conversion the channel names and channel + * designations might be lost depending on the capabilities of the desired + * AVChannelOrder. Note that some conversions are simply not possible in which + * case this function returns AVERROR(ENOSYS). + * + * The following conversions are supported: + * + * Any -> Custom : Always possible, always lossless. + * Any -> Unspecified: Always possible, lossless if channel designations + * are all unknown and channel names are not used, lossy otherwise. + * Custom -> Ambisonic : Possible if it contains ambisonic channels with + * optional non-diegetic channels in the end. Lossy if the channels have + * custom names, lossless otherwise. + * Custom -> Native : Possible if it contains native channels in native + * order. Lossy if the channels have custom names, lossless otherwise. + * + * On error this function keeps the original channel layout untouched. + * + * @param channel_layout channel layout which will be changed + * @param order the desired channel layout order + * @param flags a combination of AV_CHANNEL_LAYOUT_RETYPE_FLAG_* constants + * @return 0 if the conversion was successful and lossless or if the channel + * layout was already in the desired order + * >0 if the conversion was successful but lossy + * AVERROR(ENOSYS) if the conversion was not possible (or would be + * lossy and AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS was specified) + * AVERROR(EINVAL), AVERROR(ENOMEM) on error + */ +int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags); + /** * @} */ diff --git a/src/ExtLib/ffmpeg/libavutil/rational.h b/src/ExtLib/ffmpeg/libavutil/rational.h index 8cbfc8e066..849f47f38d 100644 --- a/src/ExtLib/ffmpeg/libavutil/rational.h +++ b/src/ExtLib/ffmpeg/libavutil/rational.h @@ -168,6 +168,10 @@ static av_always_inline AVRational av_inv_q(AVRational q) * In case of infinity, the returned value is expressed as `{1, 0}` or * `{-1, 0}` depending on the sign. * + * In general rational numbers with |num| <= 1<<26 && |den| <= 1<<26 + * can be recovered exactly from their double representation. + * (no exceptions were found within 1B random ones) + * * @param d `double` to convert * @param max Maximum allowed numerator and denominator * @return `d` in AVRational form diff --git a/src/ExtLib/ffmpeg/libavutil/version.h b/src/ExtLib/ffmpeg/libavutil/version.h index 772c4e209c..cebf4a0acd 100644 --- a/src/ExtLib/ffmpeg/libavutil/version.h +++ b/src/ExtLib/ffmpeg/libavutil/version.h @@ -79,8 +79,8 @@ */ #define LIBAVUTIL_VERSION_MAJOR 58 -#define LIBAVUTIL_VERSION_MINOR 36 -#define LIBAVUTIL_VERSION_MICRO 101 +#define LIBAVUTIL_VERSION_MINOR 38 +#define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ LIBAVUTIL_VERSION_MINOR, \ diff --git a/src/ExtLib/ffmpeg/libavutil/x86/intreadwrite.h b/src/ExtLib/ffmpeg/libavutil/x86/intreadwrite.h index 40f375b013..5e57d6a8cd 100644 --- a/src/ExtLib/ffmpeg/libavutil/x86/intreadwrite.h +++ b/src/ExtLib/ffmpeg/libavutil/x86/intreadwrite.h @@ -27,42 +27,6 @@ #if HAVE_MMX -#if !HAVE_FAST_64BIT && defined(__MMX__) - -#define FF_COPY_SWAP_ZERO_USES_MMX - -#define AV_COPY64 AV_COPY64 -static av_always_inline void AV_COPY64(void *d, const void *s) -{ - __asm__("movq %1, %%mm0 \n\t" - "movq %%mm0, %0 \n\t" - : "=m"(*(uint64_t*)d) - : "m" (*(const uint64_t*)s) - : "mm0"); -} - -#define AV_SWAP64 AV_SWAP64 -static av_always_inline void AV_SWAP64(void *a, void *b) -{ - __asm__("movq %1, %%mm0 \n\t" - "movq %0, %%mm1 \n\t" - "movq %%mm0, %0 \n\t" - "movq %%mm1, %1 \n\t" - : "+m"(*(uint64_t*)a), "+m"(*(uint64_t*)b) - ::"mm0", "mm1"); -} - -#define AV_ZERO64 AV_ZERO64 -static av_always_inline void AV_ZERO64(void *d) -{ - __asm__("pxor %%mm0, %%mm0 \n\t" - "movq %%mm0, %0 \n\t" - : "=m"(*(uint64_t*)d) - :: "mm0"); -} - -#endif /* !HAVE_FAST_64BIT && defined(__MMX__) */ - #ifdef __SSE__ #define AV_COPY128 AV_COPY128 diff --git a/src/ExtLib/ffmpeg/libavutil/x86/tx_float_init.c b/src/ExtLib/ffmpeg/libavutil/x86/tx_float_init.c index d3c0beb50f..84ec1122f6 100644 --- a/src/ExtLib/ffmpeg/libavutil/x86/tx_float_init.c +++ b/src/ExtLib/ffmpeg/libavutil/x86/tx_float_init.c @@ -270,15 +270,15 @@ const FFTXCodelet * const ff_tx_codelet_list_float_x86[] = { AV_TX_INPLACE | FF_TX_PRESHUFFLE | FF_TX_ASM_CALL, AV_CPU_FLAG_AVXSLOW), TX_DEF(fft32_ns, FFT, 32, 32, 2, 0, 352, b8_i2, fma3, FMA3, AV_TX_INPLACE | FF_TX_PRESHUFFLE, AV_CPU_FLAG_AVXSLOW), - TX_DEF(fft_sr, FFT, 64, 131072, 2, 0, 256, b8_i2, avx, AVX, 0, AV_CPU_FLAG_AVXSLOW), - TX_DEF(fft_sr_asm, FFT, 64, 131072, 2, 0, 320, b8_i2, avx, AVX, + TX_DEF(fft_sr, FFT, 64, 2097152, 2, 0, 256, b8_i2, avx, AVX, 0, AV_CPU_FLAG_AVXSLOW), + TX_DEF(fft_sr_asm, FFT, 64, 2097152, 2, 0, 320, b8_i2, avx, AVX, AV_TX_INPLACE | FF_TX_PRESHUFFLE | FF_TX_ASM_CALL, AV_CPU_FLAG_AVXSLOW), - TX_DEF(fft_sr_ns, FFT, 64, 131072, 2, 0, 320, b8_i2, avx, AVX, AV_TX_INPLACE | FF_TX_PRESHUFFLE, + TX_DEF(fft_sr_ns, FFT, 64, 2097152, 2, 0, 320, b8_i2, avx, AVX, AV_TX_INPLACE | FF_TX_PRESHUFFLE, AV_CPU_FLAG_AVXSLOW), - TX_DEF(fft_sr, FFT, 64, 131072, 2, 0, 288, b8_i2, fma3, FMA3, 0, AV_CPU_FLAG_AVXSLOW), - TX_DEF(fft_sr_asm, FFT, 64, 131072, 2, 0, 352, b8_i2, fma3, FMA3, + TX_DEF(fft_sr, FFT, 64, 2097152, 2, 0, 288, b8_i2, fma3, FMA3, 0, AV_CPU_FLAG_AVXSLOW), + TX_DEF(fft_sr_asm, FFT, 64, 2097152, 2, 0, 352, b8_i2, fma3, FMA3, AV_TX_INPLACE | FF_TX_PRESHUFFLE | FF_TX_ASM_CALL, AV_CPU_FLAG_AVXSLOW), - TX_DEF(fft_sr_ns, FFT, 64, 131072, 2, 0, 352, b8_i2, fma3, FMA3, AV_TX_INPLACE | FF_TX_PRESHUFFLE, + TX_DEF(fft_sr_ns, FFT, 64, 2097152, 2, 0, 352, b8_i2, fma3, FMA3, AV_TX_INPLACE | FF_TX_PRESHUFFLE, AV_CPU_FLAG_AVXSLOW), #if HAVE_AVX2_EXTERNAL @@ -287,11 +287,11 @@ const FFTXCodelet * const ff_tx_codelet_list_float_x86[] = { TX_DEF(fft15_ns, FFT, 15, 15, 15, 0, 384, factor_init, avx2, AVX2, AV_TX_INPLACE | FF_TX_PRESHUFFLE, AV_CPU_FLAG_AVXSLOW), - TX_DEF(fft_sr, FFT, 64, 131072, 2, 0, 320, b8_i2, avx2, AVX2, 0, + TX_DEF(fft_sr, FFT, 64, 2097152, 2, 0, 320, b8_i2, avx2, AVX2, 0, AV_CPU_FLAG_AVXSLOW | AV_CPU_FLAG_SLOW_GATHER), - TX_DEF(fft_sr_asm, FFT, 64, 131072, 2, 0, 384, b8_i2, avx2, AVX2, + TX_DEF(fft_sr_asm, FFT, 64, 2097152, 2, 0, 384, b8_i2, avx2, AVX2, AV_TX_INPLACE | FF_TX_PRESHUFFLE | FF_TX_ASM_CALL, AV_CPU_FLAG_AVXSLOW | AV_CPU_FLAG_SLOW_GATHER), - TX_DEF(fft_sr_ns, FFT, 64, 131072, 2, 0, 384, b8_i2, avx2, AVX2, AV_TX_INPLACE | FF_TX_PRESHUFFLE, + TX_DEF(fft_sr_ns, FFT, 64, 2097152, 2, 0, 384, b8_i2, avx2, AVX2, AV_TX_INPLACE | FF_TX_PRESHUFFLE, AV_CPU_FLAG_AVXSLOW | AV_CPU_FLAG_SLOW_GATHER), TX_DEF(fft_pfa_15xM, FFT, 60, TX_LEN_UNLIMITED, 15, 2, 320, fft_pfa_init, avx2, AVX2, From 91414fa9c1774349001705bc772c829f1b21bf81 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 14 Feb 2024 18:56:58 +1000 Subject: [PATCH 50/87] =?UTF-8?q?Compilation.txt=20-=20=D0=B8=D0=B7=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=B5=D0=BD=D0=B0=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA?= =?UTF-8?q?=D0=B0=20=D0=BD=D0=B0=20MSYS/GCC=20(=D1=82=D0=B5=D0=BF=D0=B5?= =?UTF-8?q?=D1=80=D1=8C=20=D0=BE=D0=BD=D0=B8=20=D1=80=D0=B0=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B6=D0=B5=D0=BD=D1=8B=20=D0=BD=D0=B0=20htt?= =?UTF-8?q?ps://github.com/Aleksoid1978/MSYS)=20=D0=B8=20=D0=B4=D0=BE?= =?UTF-8?q?=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D1=80=D0=B8=D0=BC?= =?UTF-8?q?=D0=B5=D1=80=20=D0=BA=D0=B0=D0=BA=20=D1=81=D0=BA=D0=B0=D1=87?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20=D0=B8=20=D1=80=D0=B0=D1=81=D0=BF=D0=B0?= =?UTF-8?q?=D0=BA=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D1=81=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=BC=D0=B0=D0=BD=D0=B4=D0=BD=D0=BE=D0=B9=20=D1=81=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BA=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Compilation.txt | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/docs/Compilation.txt b/docs/Compilation.txt index 2105b40e16..ee53bf51c9 100644 --- a/docs/Compilation.txt +++ b/docs/Compilation.txt @@ -20,7 +20,7 @@ Visual Studio 2022 Download URL: https://learn.microsoft.com/en-us/visualstudio/releases/2022/release-notes - 1. Install Visual Studio 2022 (any edition will work fine). During installation, you must select the following components: + Install Visual Studio 2022 (any edition will work fine). During installation, you must select the following components: * Desktop development with C++ * MSVC v143 - Build Tools C++ * Windows SDK 10.0.18362.0 or newer (latest). @@ -29,9 +29,12 @@ 2. Preparing the GCC environment (YASM is already included) - 2.1. Download https://mpc-be.org/MSYS/MSYS_MinGW-w64_GCC_1320_x86-x64.7z - 2.2. Unpack the archive to "C:\MSYS". - NOTES: If you installed the MSYS/MinGW package in an other directory you will have to use that path in the following steps. + 2.1. Download https://github.com/Aleksoid1978/MSYS/raw/main/MSYS_MinGW-w64_GCC_1320_x86-x64.7z + 2.2. Unpack the archive to "C:\MSYS". + Example of downloading and unpacking: + curl -sSL https://github.com/Aleksoid1978/MSYS/raw/main/MSYS_MinGW-w64_GCC_1320_x86-x64.7z -o MSYS.7z + 7z x MSYS.7z -oC:\MSYS + NOTES: If you installed the MSYS/MinGW package in an other directory you will have to use that path in the following steps. 3. Additional optional components From add7fd4d2e66b60dcb736ce9daacf7bc09bc96f0 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 14 Feb 2024 19:12:41 +1000 Subject: [PATCH 51/87] =?UTF-8?q?main.yml=20-=20=D0=B8=D0=B7=D0=BC=D0=B5?= =?UTF-8?q?=D0=BD=D0=B5=D0=BD=D0=B0=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BD=D0=B0=20MSYS/GCC.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4ff70048bb..d2ea130cc1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -25,8 +25,8 @@ jobs: - name: Prepare MSYS run: | - curl -sSL https://mpc-be.org/MSYS/MSYS_MinGW-w64_GCC_1320_x86-x64.7z -o MSYS_MinGW-w64_GCC_1320_x86-x64.7z - 7z x MSYS_MinGW-w64_GCC_1320_x86-x64.7z -oC:\\MSYS + curl -sSL https://github.com/Aleksoid1978/MSYS/raw/main/MSYS_MinGW-w64_GCC_1320_x86-x64.7z -o MSYS.7z + 7z x MSYS.7z -oC:\\MSYS echo '@ECHO OFF' > environments.bat echo 'SET "MPCBE_MSYS=C:\\MSYS"' >> environments.bat echo 'SET "MPCBE_MINGW=C:\\MSYS\\mingw"' >> environments.bat From 12445d9de2ccb00165083862820cad19b459f7d9 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Fri, 16 Feb 2024 07:37:45 +1000 Subject: [PATCH 52/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20dav1d=20git-1.4.0-1-g97cc6ce;?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 1 + docs/Changelog.txt | 1 + lib/libdav1d.a | Bin 1844356 -> 1827538 bytes lib64/libdav1d.a | Bin 3257292 -> 3271322 bytes 4 files changed, 2 insertions(+) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index d0dbfd11b4..6a146e3b98 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -30,6 +30,7 @@ MPCVideoDec Обновлен корейский перевод (автор Hackjjang). Обновлены библиотеки: + dav1d git-1.4.0-1-g97cc6ce; ffmpeg git-n6.2-dev-1097-geb5b4e60c9; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; diff --git a/docs/Changelog.txt b/docs/Changelog.txt index f875e777e8..4cffe006a7 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -30,6 +30,7 @@ Updated Italian translation (by mapi68). Updated Korean translation (by Hackjjang). Updated libraries: + dav1d git-1.4.0-1-g97cc6ce; ffmpeg git-n6.2-dev-1097-geb5b4e60c9; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; diff --git a/lib/libdav1d.a b/lib/libdav1d.a index 89ae0993c692d9e415d07e9185d2a431f1c37086..e5b0d3966d6255c937595b0a6e8acbcb9334e649 100644 GIT binary patch delta 19658 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 delta 53895 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 I${rr`zx*P#ZvX%Q From 0e65d7ddea8de1f3a63a03f7a935412bea401732 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Fri, 16 Feb 2024 13:35:49 +1000 Subject: [PATCH 53/87] =?UTF-8?q?=D0=98=D1=81=D0=BF=D0=BE=D0=BB=D1=8C?= =?UTF-8?q?=D0=B7=D1=83=D0=B5=D0=BC=20=D0=B2=D0=B5=D0=B7=D0=B4=D0=B5=20uni?= =?UTF-8?q?que=5Fptr=20=D0=B2=D0=BC=D0=B5=D1=81=D1=82?= =?UTF-8?q?=D0=BE=20=D1=81=D1=8B=D1=80=D1=8B=D1=85=20=D1=83=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D0=B5=D0=B9.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/FakeFilterMapper2.cpp | 75 +++++++--------- src/apps/mplayerc/FakeFilterMapper2.h | 10 ++- src/apps/mplayerc/MainFrm.cpp | 29 +++--- src/apps/mplayerc/PPageExternalFilters.cpp | 100 +++++++++------------ src/apps/mplayerc/RegFilterChooserDlg.cpp | 11 +-- src/apps/mplayerc/RegFilterChooserDlg.h | 9 +- 6 files changed, 98 insertions(+), 136 deletions(-) diff --git a/src/apps/mplayerc/FakeFilterMapper2.cpp b/src/apps/mplayerc/FakeFilterMapper2.cpp index 3529ed0ffd..46f1805eba 100644 --- a/src/apps/mplayerc/FakeFilterMapper2.cpp +++ b/src/apps/mplayerc/FakeFilterMapper2.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -577,13 +577,6 @@ CFilterMapper2::CFilterMapper2(bool fRefCounted, bool fAllowUnreg, LPUNKNOWN pUn } } -CFilterMapper2::~CFilterMapper2() -{ - for (const auto& filter : m_filters) { - delete filter; - } -} - STDMETHODIMP CFilterMapper2::NonDelegatingQueryInterface(REFIID riid, void** ppv) { if (riid == __uuidof(IFilterMapper2)) { @@ -645,48 +638,44 @@ STDMETHODIMP CFilterMapper2::UnregisterFilter(const CLSID* pclsidCategory, const STDMETHODIMP CFilterMapper2::RegisterFilter(REFCLSID clsidFilter, LPCWSTR Name, IMoniker** ppMoniker, const CLSID* pclsidCategory, const OLECHAR* szInstance, const REGFILTER2* prf2) { if (!m_path.IsEmpty()) { - if (FilterOverride* f = DNew FilterOverride) { - f->fDisabled = false; - f->type = FilterOverride::EXTERNAL; - f->path = m_path; - f->name = CStringW(Name); - f->clsid = clsidFilter; - f->iLoadType = FilterOverride::MERIT; - f->dwMerit = prf2->dwMerit; - - if (prf2->dwVersion == 1) { - for (ULONG i = 0; i < prf2->cPins; i++) { - const REGFILTERPINS& rgPin = prf2->rgPins[i]; - if (rgPin.bOutput) { - continue; - } + auto& f = m_filters.emplace_back(DNew FilterOverride); + f->type = FilterOverride::EXTERNAL; + f->path = m_path; + f->name = Name; + f->clsid = clsidFilter; + f->dwMerit = prf2->dwMerit; + f->iLoadType = FilterOverride::MERIT; + + if (prf2->dwVersion == 1) { + for (ULONG i = 0; i < prf2->cPins; i++) { + const REGFILTERPINS& rgPin = prf2->rgPins[i]; + if (rgPin.bOutput) { + continue; + } - for (UINT j = 0; j < rgPin.nMediaTypes; j++) { - if (!rgPin.lpMediaType[j].clsMajorType || !rgPin.lpMediaType[j].clsMinorType) { - break; - } - f->guids.emplace_back(*rgPin.lpMediaType[j].clsMajorType); - f->guids.emplace_back(*rgPin.lpMediaType[j].clsMinorType); + for (UINT j = 0; j < rgPin.nMediaTypes; j++) { + if (!rgPin.lpMediaType[j].clsMajorType || !rgPin.lpMediaType[j].clsMinorType) { + break; } + f->guids.emplace_back(*rgPin.lpMediaType[j].clsMajorType); + f->guids.emplace_back(*rgPin.lpMediaType[j].clsMinorType); + } + } + } else if (prf2->dwVersion == 2) { + for (ULONG i = 0; i < prf2->cPins2; i++) { + const REGFILTERPINS2& rgPin = prf2->rgPins2[i]; + if (rgPin.dwFlags®_PINFLAG_B_OUTPUT) { + continue; } - } else if (prf2->dwVersion == 2) { - for (ULONG i = 0; i < prf2->cPins2; i++) { - const REGFILTERPINS2& rgPin = prf2->rgPins2[i]; - if (rgPin.dwFlags®_PINFLAG_B_OUTPUT) { - continue; - } - for (UINT j = 0; j < rgPin.nMediaTypes; j++) { - if (!rgPin.lpMediaType[j].clsMajorType || !rgPin.lpMediaType[j].clsMinorType) { - break; - } - f->guids.emplace_back(*rgPin.lpMediaType[j].clsMajorType); - f->guids.emplace_back(*rgPin.lpMediaType[j].clsMinorType); + for (UINT j = 0; j < rgPin.nMediaTypes; j++) { + if (!rgPin.lpMediaType[j].clsMajorType || !rgPin.lpMediaType[j].clsMinorType) { + break; } + f->guids.emplace_back(*rgPin.lpMediaType[j].clsMajorType); + f->guids.emplace_back(*rgPin.lpMediaType[j].clsMinorType); } } - - m_filters.emplace_back(f); } return S_OK; diff --git a/src/apps/mplayerc/FakeFilterMapper2.h b/src/apps/mplayerc/FakeFilterMapper2.h index cefd47f74d..31567a527f 100644 --- a/src/apps/mplayerc/FakeFilterMapper2.h +++ b/src/apps/mplayerc/FakeFilterMapper2.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -21,6 +21,8 @@ #pragma once +#include + class FilterOverride { public: @@ -38,7 +40,7 @@ class FilterOverride int iLoadType = 0; DWORD dwMerit = 0; - FilterOverride() {} + FilterOverride() = default; FilterOverride(FilterOverride* f) : fDisabled (f->fDisabled) , fTemporary(f->fTemporary) @@ -111,7 +113,7 @@ class CFilterMapper2 : protected CUnknown, public IFilterMapper2 public: CFilterMapper2(bool fRefCounted, bool fAllowUnreg = false, LPUNKNOWN pUnkOuter = nullptr); - virtual ~CFilterMapper2(); + virtual ~CFilterMapper2() = default; void SetInner(IUnknown* pUnk) { m_pFM2 = pUnk; @@ -120,6 +122,6 @@ class CFilterMapper2 : protected CUnknown, public IFilterMapper2 static void Init(); static IFilterMapper2* m_pFilterMapper2; - std::list m_filters; + std::list> m_filters; void Register(CString path); }; diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 8ffc4275a7..31d2950bec 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -5459,27 +5459,20 @@ LRESULT CMainFrame::HandleCmdLine(WPARAM wParam, LPARAM lParam) CFilterMapper2 fm2(false); fm2.Register(path + fd.cFileName); - while (!fm2.m_filters.empty()) { - FilterOverride* f = fm2.m_filters.back(); - fm2.m_filters.pop_back(); - - if (f) { - f->fTemporary = true; - bool bFound = false; - - for (auto& f2 : s.m_ExternalFilters) { - if (f2->type == FilterOverride::EXTERNAL && !f2->path.CompareNoCase(f->path)) { - bFound = true; - delete f; - break; - } - } + for (auto& f : fm2.m_filters) { + f->fTemporary = true; + bool bFound = false; - if (!bFound) { - std::unique_ptr p(f); - s.m_ExternalFilters.emplace_front(std::move(p)); + for (auto& f2 : s.m_ExternalFilters) { + if (f2->type == FilterOverride::EXTERNAL && !f2->path.CompareNoCase(f->path)) { + bFound = true; + break; } } + + if (!bFound) { + s.m_ExternalFilters.emplace_front(std::move(f)); + } } } while (FindNextFileW(hFind, &fd)); diff --git a/src/apps/mplayerc/PPageExternalFilters.cpp b/src/apps/mplayerc/PPageExternalFilters.cpp index 306470353d..cc76102931 100644 --- a/src/apps/mplayerc/PPageExternalFilters.cpp +++ b/src/apps/mplayerc/PPageExternalFilters.cpp @@ -377,45 +377,38 @@ void CPPageExternalFilters::OnAddRegistered() { CRegFilterChooserDlg dlg(this); if (dlg.DoModal() == IDOK) { - while (!dlg.m_filters.empty()) { - FilterOverride* f = dlg.m_filters.front(); - dlg.m_filters.pop_front(); - - if (f) { - std::unique_ptr p(f); - - if (f->name.IsEmpty() && !f->guids.size() && !f->dwMerit) { - // skip something strange - continue; - } - else if (IsSupportedExternalVideoRenderer(f->clsid)) { - // supported external video renderers that must be selected in the "Video" settings - CStringW strMessage; - strMessage.Format(ResStr(IDS_BLOCK_EXTERNAL_VR), f->name); - AfxMessageBox(strMessage, MB_OK); - continue; - } + for (auto& f : dlg.m_filters) { + if (f->name.IsEmpty() && !f->guids.size() && !f->dwMerit) { + // skip something strange + continue; + } + else if (IsSupportedExternalVideoRenderer(f->clsid)) { + // supported external video renderers that must be selected in the "Video" settings + CStringW strMessage; + strMessage.Format(ResStr(IDS_BLOCK_EXTERNAL_VR), f->name); + AfxMessageBox(strMessage, MB_OK); + continue; + } - CString name = f->name; + CString name = f->name; - if (f->type == FilterOverride::EXTERNAL) { - if (!CPath(MakeFullPath(f->path)).FileExists()) { - name += L" "; - } + if (f->type == FilterOverride::EXTERNAL) { + if (!CPath(MakeFullPath(f->path)).FileExists()) { + name += L" "; } + } - int i = m_filters.AddString(name); - m_ExtFilters.emplace_back(std::move(p)); - m_filters.SetItemDataPtr(i, m_ExtFilters.back().get()); - m_filters.SetCheck(i, BST_CHECKED); + int i = m_filters.AddString(name); + auto& p = m_ExtFilters.emplace_back(std::move(f)); + m_filters.SetItemDataPtr(i, p.get()); + m_filters.SetCheck(i, BST_CHECKED); - if (dlg.m_filters.empty()) { - m_filters.SetCurSel(i); - OnLbnSelchangeList1(); - } - - SetModified(); + if (dlg.m_filters.empty()) { + m_filters.SetCurSel(i); + OnLbnSelchangeList1(); } + + SetModified(); } } } @@ -780,33 +773,26 @@ void CPPageExternalFilters::OnDropFiles(HDROP hDropInfo) CFilterMapper2 fm2(false); fm2.Register(szFileName); - while (!fm2.m_filters.empty()) { - FilterOverride* f = fm2.m_filters.front(); - fm2.m_filters.pop_front(); - - if (f) { - std::unique_ptr p(f); - - if (IsSupportedExternalVideoRenderer(f->clsid)) { - // supported external video renderers that must be selected in the "Video" settings - CStringW strMessage; - strMessage.Format(ResStr(IDS_BLOCK_EXTERNAL_VR), f->name); - AfxMessageBox(strMessage, MB_OK); - continue; - } - - int i = m_filters.AddString(f->name); - m_ExtFilters.emplace_back(std::move(p)); - m_filters.SetItemDataPtr(i, m_ExtFilters.back().get()); - m_filters.SetCheck(i, BST_CHECKED); + for (auto& f : fm2.m_filters) { + if (IsSupportedExternalVideoRenderer(f->clsid)) { + // supported external video renderers that must be selected in the "Video" settings + CStringW strMessage; + strMessage.Format(ResStr(IDS_BLOCK_EXTERNAL_VR), f->name); + AfxMessageBox(strMessage, MB_OK); + continue; + } - if (fm2.m_filters.empty()) { - m_filters.SetCurSel(i); - OnLbnSelchangeList1(); - } + int i = m_filters.AddString(f->name); + auto& p = m_ExtFilters.emplace_back(std::move(f)); + m_filters.SetItemDataPtr(i, p.get()); + m_filters.SetCheck(i, BST_CHECKED); - SetModified(); + if (fm2.m_filters.empty()) { + m_filters.SetCurSel(i); + OnLbnSelchangeList1(); } + + SetModified(); } } ::DragFinish(hDropInfo); diff --git a/src/apps/mplayerc/RegFilterChooserDlg.cpp b/src/apps/mplayerc/RegFilterChooserDlg.cpp index b71c16f45d..e1a1c67cea 100644 --- a/src/apps/mplayerc/RegFilterChooserDlg.cpp +++ b/src/apps/mplayerc/RegFilterChooserDlg.cpp @@ -34,13 +34,6 @@ CRegFilterChooserDlg::CRegFilterChooserDlg(CWnd* pParent) { } -CRegFilterChooserDlg::~CRegFilterChooserDlg() -{ - for (auto& filter : m_filters) { - delete filter; - } -} - void CRegFilterChooserDlg::DoDataExchange(CDataExchange* pDX) { __super::DoDataExchange(pDX); @@ -133,8 +126,7 @@ void CRegFilterChooserDlg::OnBnClickedOk() } if (pMoniker) { CFGFilterRegistry fgf(pMoniker); - FilterOverride* f = DNew FilterOverride; - f->fDisabled = false; + auto& f = m_filters.emplace_back(DNew FilterOverride); f->type = FilterOverride::REGISTERED; f->name = fgf.GetName(); f->dispname = fgf.GetDisplayName(); @@ -142,7 +134,6 @@ void CRegFilterChooserDlg::OnBnClickedOk() f->guids = fgf.GetTypes(); f->dwMerit = fgf.GetMeritForDirectShow(); f->iLoadType = FilterOverride::MERIT; - m_filters.emplace_back(f); } __super::OnOK(); diff --git a/src/apps/mplayerc/RegFilterChooserDlg.h b/src/apps/mplayerc/RegFilterChooserDlg.h index f58491d102..27c01907f1 100644 --- a/src/apps/mplayerc/RegFilterChooserDlg.h +++ b/src/apps/mplayerc/RegFilterChooserDlg.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -22,6 +22,7 @@ #pragma once #include +#include #include // CRegFilterChooserDlg dialog @@ -34,10 +35,10 @@ class CRegFilterChooserDlg : public CResizableDialog void AddToList(IMoniker* pMoniker); public: - CRegFilterChooserDlg(CWnd* pParent = nullptr); - virtual ~CRegFilterChooserDlg(); + CRegFilterChooserDlg(CWnd* pParent); + virtual ~CRegFilterChooserDlg() = default; - std::list m_filters; + std::list> m_filters; enum { IDD = IDD_ADDREGFILTER }; CListCtrl m_list; From b3be2a668299ed6452a8aed06372a777348cef3d Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 16 Feb 2024 20:22:21 +0300 Subject: [PATCH 54/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-1117-g7ed1e806?= =?UTF-8?q?e7.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- .../ffmpeg/libavcodec/aacdec_template.c | 16 +- src/ExtLib/ffmpeg/libavcodec/ac3dec_float.c | 2 +- src/ExtLib/ffmpeg/libavcodec/ac3enc.c | 58 +- src/ExtLib/ffmpeg/libavcodec/apedec.c | 4 +- src/ExtLib/ffmpeg/libavcodec/avdct.c | 46 +- .../ffmpeg/libavcodec/bsf/dump_extradata.c | 2 +- .../ffmpeg/libavcodec/bsf/remove_extradata.c | 2 +- src/ExtLib/ffmpeg/libavcodec/cbs_bsf.h | 4 +- src/ExtLib/ffmpeg/libavcodec/dcadec.c | 6 +- src/ExtLib/ffmpeg/libavcodec/mpegvideoenc.h | 54 +- src/ExtLib/ffmpeg/libavcodec/options.c | 2 +- src/ExtLib/ffmpeg/libavcodec/options_table.h | 526 +++++++++--------- src/ExtLib/ffmpeg/libavcodec/profiles.h | 2 +- src/ExtLib/ffmpeg/libavcodec/s302m.c | 10 +- src/ExtLib/ffmpeg/libavcodec/tiff.c | 1 - src/ExtLib/ffmpeg/libavcodec/version.h | 2 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h | 2 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c | 48 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c | 3 - src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h | 2 - src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c | 5 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c | 2 + .../ffmpeg/libavcodec/x86/simple_idct.asm | 1 + src/ExtLib/ffmpeg/libavfilter/af_biquads.c | 46 +- src/ExtLib/ffmpeg/libavfilter/avfilter.c | 205 ++++--- src/ExtLib/ffmpeg/libavfilter/avfilter.h | 45 -- src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c | 13 +- src/ExtLib/ffmpeg/libavfilter/buffersink.c | 8 +- src/ExtLib/ffmpeg/libavfilter/buffersrc.c | 48 +- src/ExtLib/ffmpeg/libavfilter/link_internal.h | 69 +++ src/ExtLib/ffmpeg/libavutil/tx.c | 4 +- src/ExtLib/ffmpeg/libswresample/options.c | 70 +-- src/ExtLib/ffmpeg/libswscale/options.c | 60 +- 37 files changed, 721 insertions(+), 659 deletions(-) create mode 100644 src/ExtLib/ffmpeg/libavfilter/link_internal.h diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 6a146e3b98..6ceb14b0da 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -31,7 +31,7 @@ MPCVideoDec Обновлены библиотеки: dav1d git-1.4.0-1-g97cc6ce; - ffmpeg git-n6.2-dev-1097-geb5b4e60c9; + ffmpeg git-n6.2-dev-1117-g7ed1e806e7; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 4cffe006a7..7cd0417777 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -31,7 +31,7 @@ Updated Korean translation (by Hackjjang). Updated libraries: dav1d git-1.4.0-1-g97cc6ce; - ffmpeg git-n6.2-dev-1097-geb5b4e60c9; + ffmpeg git-n6.2-dev-1117-g7ed1e806e7; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/src/ExtLib/ffmpeg/libavcodec/aacdec_template.c b/src/ExtLib/ffmpeg/libavcodec/aacdec_template.c index 2b3509c85f..fa2a68535c 100644 --- a/src/ExtLib/ffmpeg/libavcodec/aacdec_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/aacdec_template.c @@ -3427,20 +3427,20 @@ static void aacdec_init(AACContext *c) static const AVOption options[] = { {"dual_mono_mode", "Select the channel to decode for dual mono", offsetof(AACContext, force_dmono_mode), AV_OPT_TYPE_INT, {.i64=-1}, -1, 2, - AACDEC_FLAGS, "dual_mono_mode"}, + AACDEC_FLAGS, .unit = "dual_mono_mode"}, - {"auto", "autoselection", 0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, AACDEC_FLAGS, "dual_mono_mode"}, - {"main", "Select Main/Left channel", 0, AV_OPT_TYPE_CONST, {.i64= 1}, INT_MIN, INT_MAX, AACDEC_FLAGS, "dual_mono_mode"}, - {"sub" , "Select Sub/Right channel", 0, AV_OPT_TYPE_CONST, {.i64= 2}, INT_MIN, INT_MAX, AACDEC_FLAGS, "dual_mono_mode"}, - {"both", "Select both channels", 0, AV_OPT_TYPE_CONST, {.i64= 0}, INT_MIN, INT_MAX, AACDEC_FLAGS, "dual_mono_mode"}, + {"auto", "autoselection", 0, AV_OPT_TYPE_CONST, {.i64=-1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"}, + {"main", "Select Main/Left channel", 0, AV_OPT_TYPE_CONST, {.i64= 1}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"}, + {"sub" , "Select Sub/Right channel", 0, AV_OPT_TYPE_CONST, {.i64= 2}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"}, + {"both", "Select both channels", 0, AV_OPT_TYPE_CONST, {.i64= 0}, INT_MIN, INT_MAX, AACDEC_FLAGS, .unit = "dual_mono_mode"}, { "channel_order", "Order in which the channels are to be exported", offsetof(AACContext, output_channel_order), AV_OPT_TYPE_INT, - { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, AACDEC_FLAGS, "channel_order" }, + { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, AACDEC_FLAGS, .unit = "channel_order" }, { "default", "normal libavcodec channel order", 0, AV_OPT_TYPE_CONST, - { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = AACDEC_FLAGS, "channel_order" }, + { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = AACDEC_FLAGS, .unit = "channel_order" }, { "coded", "order in which the channels are coded in the bitstream", - 0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = AACDEC_FLAGS, "channel_order" }, + 0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = AACDEC_FLAGS, .unit = "channel_order" }, {NULL}, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/ac3dec_float.c b/src/ExtLib/ffmpeg/libavcodec/ac3dec_float.c index 39d3cbd282..550a9017de 100644 --- a/src/ExtLib/ffmpeg/libavcodec/ac3dec_float.c +++ b/src/ExtLib/ffmpeg/libavcodec/ac3dec_float.c @@ -43,7 +43,7 @@ static const AVOption options[] = { { "heavy_compr", "enable heavy dynamic range compression", OFFSET(heavy_compression), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, PAR }, { "target_level", "target level in -dBFS (0 not applied)", OFFSET(target_level), AV_OPT_TYPE_INT, {.i64 = 0 }, -31, 0, PAR }, -{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 2, 0, "dmix_mode"}, +{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = -1 }, -1, 2, 0, .unit = "dmix_mode"}, {"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, {"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, {"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, 0}, diff --git a/src/ExtLib/ffmpeg/libavcodec/ac3enc.c b/src/ExtLib/ffmpeg/libavcodec/ac3enc.c index 56c8d239c5..825c17c506 100644 --- a/src/ExtLib/ffmpeg/libavcodec/ac3enc.c +++ b/src/ExtLib/ffmpeg/libavcodec/ac3enc.c @@ -84,47 +84,47 @@ const AVOption ff_ac3_enc_options[] = { {"surround_mixlev", "Surround Mix Level", OFFSET(surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = LEVEL_MINUS_6DB }, 0.0, 1.0, AC3ENC_PARAM}, /* audio production information */ {"mixing_level", "Mixing Level", OFFSET(mixing_level), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, 111, AC3ENC_PARAM}, -{"room_type", "Room Type", OFFSET(room_type), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_SMALL_ROOM, AC3ENC_PARAM, "room_type"}, - {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"}, - {"large", "Large Room", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_LARGE_ROOM }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"}, - {"small", "Small Room", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_SMALL_ROOM }, INT_MIN, INT_MAX, AC3ENC_PARAM, "room_type"}, +{"room_type", "Room Type", OFFSET(room_type), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_SMALL_ROOM, AC3ENC_PARAM, .unit = "room_type"}, + {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "room_type"}, + {"large", "Large Room", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_LARGE_ROOM }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "room_type"}, + {"small", "Small Room", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_SMALL_ROOM }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "room_type"}, /* Metadata Options */ {"per_frame_metadata", "Allow Changing Metadata Per-Frame", OFFSET(allow_per_frame_metadata), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, AC3ENC_PARAM}, {"copyright", "Copyright Bit", OFFSET(copyright), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, 1, AC3ENC_PARAM}, {"dialnorm", "Dialogue Level (dB)", OFFSET(dialogue_level), AV_OPT_TYPE_INT, {.i64 = -31 }, -31, -1, AC3ENC_PARAM}, -{"dsur_mode", "Dolby Surround Mode", OFFSET(dolby_surround_mode), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_MODE_ON, AC3ENC_PARAM, "dsur_mode"}, - {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"}, - {"on", "Dolby Surround Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"}, - {"off", "Not Dolby Surround Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsur_mode"}, +{"dsur_mode", "Dolby Surround Mode", OFFSET(dolby_surround_mode), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_MODE_ON, AC3ENC_PARAM, .unit = "dsur_mode"}, + {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dsur_mode"}, + {"on", "Dolby Surround Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dsur_mode"}, + {"off", "Not Dolby Surround Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dsur_mode"}, {"original", "Original Bit Stream", OFFSET(original), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, 1, AC3ENC_PARAM}, /* extended bitstream information */ -{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_DOWNMIX_DPLII, AC3ENC_PARAM, "dmix_mode"}, - {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"}, - {"ltrt", "Lt/Rt Downmix Preferred", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DOWNMIX_LTRT }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"}, - {"loro", "Lo/Ro Downmix Preferred", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DOWNMIX_LORO }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"}, - {"dplii", "Dolby Pro Logic II Downmix Preferred", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DOWNMIX_DPLII }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dmix_mode"}, +{"dmix_mode", "Preferred Stereo Downmix Mode", OFFSET(preferred_stereo_downmix), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_DOWNMIX_DPLII, AC3ENC_PARAM, .unit = "dmix_mode"}, + {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dmix_mode"}, + {"ltrt", "Lt/Rt Downmix Preferred", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DOWNMIX_LTRT }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dmix_mode"}, + {"loro", "Lo/Ro Downmix Preferred", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DOWNMIX_LORO }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dmix_mode"}, + {"dplii", "Dolby Pro Logic II Downmix Preferred", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DOWNMIX_DPLII }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dmix_mode"}, {"ltrt_cmixlev", "Lt/Rt Center Mix Level", OFFSET(ltrt_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM}, {"ltrt_surmixlev", "Lt/Rt Surround Mix Level", OFFSET(ltrt_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM}, {"loro_cmixlev", "Lo/Ro Center Mix Level", OFFSET(loro_center_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM}, {"loro_surmixlev", "Lo/Ro Surround Mix Level", OFFSET(loro_surround_mix_level), AV_OPT_TYPE_FLOAT, {.dbl = -1.0 }, -1.0, 2.0, AC3ENC_PARAM}, -{"dsurex_mode", "Dolby Surround EX Mode", OFFSET(dolby_surround_ex_mode), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_DSUREX_DPLIIZ, AC3ENC_PARAM, "dsurex_mode"}, - {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"}, - {"on", "Dolby Surround EX Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"}, - {"off", "Not Dolby Surround EX Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"}, - {"dpliiz", "Dolby Pro Logic IIz-encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DSUREX_DPLIIZ }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dsurex_mode"}, -{"dheadphone_mode", "Dolby Headphone Mode", OFFSET(dolby_headphone_mode), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_MODE_ON, AC3ENC_PARAM, "dheadphone_mode"}, - {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"}, - {"on", "Dolby Headphone Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"}, - {"off", "Not Dolby Headphone Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, "dheadphone_mode"}, -{"ad_conv_type", "A/D Converter Type", OFFSET(ad_converter_type), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_ADCONV_HDCD, AC3ENC_PARAM, "ad_conv_type"}, - {"standard", "Standard (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_ADCONV_STANDARD }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"}, - {"hdcd", "HDCD", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_ADCONV_HDCD }, INT_MIN, INT_MAX, AC3ENC_PARAM, "ad_conv_type"}, +{"dsurex_mode", "Dolby Surround EX Mode", OFFSET(dolby_surround_ex_mode), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_DSUREX_DPLIIZ, AC3ENC_PARAM, .unit = "dsurex_mode"}, + {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dsurex_mode"}, + {"on", "Dolby Surround EX Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dsurex_mode"}, + {"off", "Not Dolby Surround EX Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dsurex_mode"}, + {"dpliiz", "Dolby Pro Logic IIz-encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_DSUREX_DPLIIZ }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dsurex_mode"}, +{"dheadphone_mode", "Dolby Headphone Mode", OFFSET(dolby_headphone_mode), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_MODE_ON, AC3ENC_PARAM, .unit = "dheadphone_mode"}, + {"notindicated", "Not Indicated (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_NOT_INDICATED }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dheadphone_mode"}, + {"on", "Dolby Headphone Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_ON }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dheadphone_mode"}, + {"off", "Not Dolby Headphone Encoded", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_MODE_OFF }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "dheadphone_mode"}, +{"ad_conv_type", "A/D Converter Type", OFFSET(ad_converter_type), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_NONE }, AC3ENC_OPT_NONE, AC3ENC_OPT_ADCONV_HDCD, AC3ENC_PARAM, .unit = "ad_conv_type"}, + {"standard", "Standard (default)", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_ADCONV_STANDARD }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "ad_conv_type"}, + {"hdcd", "HDCD", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_ADCONV_HDCD }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "ad_conv_type"}, /* Other Encoding Options */ {"stereo_rematrixing", "Stereo Rematrixing", OFFSET(stereo_rematrixing), AV_OPT_TYPE_BOOL, {.i64 = 1 }, 0, 1, AC3ENC_PARAM}, -{"channel_coupling", "Channel Coupling", OFFSET(channel_coupling), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_AUTO }, AC3ENC_OPT_AUTO, AC3ENC_OPT_ON, AC3ENC_PARAM, "channel_coupling"}, - {"auto", "Selected by the Encoder", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_AUTO }, INT_MIN, INT_MAX, AC3ENC_PARAM, "channel_coupling"}, -{"cpl_start_band", "Coupling Start Band", OFFSET(cpl_start), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_AUTO }, AC3ENC_OPT_AUTO, 15, AC3ENC_PARAM, "cpl_start_band"}, - {"auto", "Selected by the Encoder", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_AUTO }, INT_MIN, INT_MAX, AC3ENC_PARAM, "cpl_start_band"}, +{"channel_coupling", "Channel Coupling", OFFSET(channel_coupling), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_AUTO }, AC3ENC_OPT_AUTO, AC3ENC_OPT_ON, AC3ENC_PARAM, .unit = "channel_coupling"}, + {"auto", "Selected by the Encoder", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_AUTO }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "channel_coupling"}, +{"cpl_start_band", "Coupling Start Band", OFFSET(cpl_start), AV_OPT_TYPE_INT, {.i64 = AC3ENC_OPT_AUTO }, AC3ENC_OPT_AUTO, 15, AC3ENC_PARAM, .unit = "cpl_start_band"}, + {"auto", "Selected by the Encoder", 0, AV_OPT_TYPE_CONST, {.i64 = AC3ENC_OPT_AUTO }, INT_MIN, INT_MAX, AC3ENC_PARAM, .unit = "cpl_start_band"}, {NULL} }; diff --git a/src/ExtLib/ffmpeg/libavcodec/apedec.c b/src/ExtLib/ffmpeg/libavcodec/apedec.c index d31c067152..0f48bdff77 100644 --- a/src/ExtLib/ffmpeg/libavcodec/apedec.c +++ b/src/ExtLib/ffmpeg/libavcodec/apedec.c @@ -1737,8 +1737,8 @@ static void ape_flush(AVCodecContext *avctx) #define OFFSET(x) offsetof(APEContext, x) #define PAR (AV_OPT_FLAG_DECODING_PARAM | AV_OPT_FLAG_AUDIO_PARAM) static const AVOption options[] = { - { "max_samples", "maximum number of samples decoded per call", OFFSET(blocks_per_loop), AV_OPT_TYPE_INT, { .i64 = 4608 }, 1, INT_MAX, PAR, "max_samples" }, - { "all", "no maximum. decode all samples for each packet at once", 0, AV_OPT_TYPE_CONST, { .i64 = INT_MAX }, INT_MIN, INT_MAX, PAR, "max_samples" }, + { "max_samples", "maximum number of samples decoded per call", OFFSET(blocks_per_loop), AV_OPT_TYPE_INT, { .i64 = 4608 }, 1, INT_MAX, PAR, .unit = "max_samples" }, + { "all", "no maximum. decode all samples for each packet at once", 0, AV_OPT_TYPE_CONST, { .i64 = INT_MAX }, INT_MIN, INT_MAX, PAR, .unit = "max_samples" }, { NULL}, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/avdct.c b/src/ExtLib/ffmpeg/libavcodec/avdct.c index e61c5d30f7..1f6101bf9e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/avdct.c +++ b/src/ExtLib/ffmpeg/libavcodec/avdct.c @@ -33,29 +33,29 @@ #define D AV_OPT_FLAG_DECODING_PARAM static const AVOption avdct_options[] = { -{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, "dct"}, -{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"}, -{"fastint", "fast integer (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"}, -{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"}, -{"mmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"}, -{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"}, -{"faan", "floating point AAN DCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"}, - -{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, "idct"}, -{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"int", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simple", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplemmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"arm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplearm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplearmv5te", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplearmv6", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simpleneon", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"xvid", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"xvidmmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"faani", "floating point AAN IDCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"}, -{"simpleauto", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"}, +{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, .unit = "dct"}, +{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"fastint", "fast integer (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"mmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"faan", "floating point AAN DCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, + +{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, .unit = "idct"}, +{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"int", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simple", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplemmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"arm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"altivec", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplearm", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplearmv5te", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplearmv6", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simpleneon", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"xvid", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"xvidmmx", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"faani", "floating point AAN IDCT (experimental / for debugging)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, .unit = "idct"}, +{"simpleauto", "experimental / for debugging", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, {"bits_per_sample", "", OFFSET(bits_per_sample), AV_OPT_TYPE_INT, {.i64 = 8 }, 0, 14, 0,}, {NULL}, diff --git a/src/ExtLib/ffmpeg/libavcodec/bsf/dump_extradata.c b/src/ExtLib/ffmpeg/libavcodec/bsf/dump_extradata.c index 5506d5ed65..43619879cc 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bsf/dump_extradata.c +++ b/src/ExtLib/ffmpeg/libavcodec/bsf/dump_extradata.c @@ -83,7 +83,7 @@ static int dump_extradata(AVBSFContext *ctx, AVPacket *out) #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_BSF_PARAM) static const AVOption options[] = { { "freq", "When to dump extradata", OFFSET(freq), AV_OPT_TYPE_INT, - { .i64 = DUMP_FREQ_KEYFRAME }, DUMP_FREQ_KEYFRAME, DUMP_FREQ_ALL, FLAGS, "freq" }, + { .i64 = DUMP_FREQ_KEYFRAME }, DUMP_FREQ_KEYFRAME, DUMP_FREQ_ALL, FLAGS, .unit = "freq" }, { "k", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = DUMP_FREQ_KEYFRAME }, .flags = FLAGS, .unit = "freq" }, { "keyframe", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = DUMP_FREQ_KEYFRAME }, .flags = FLAGS, .unit = "freq" }, { "e", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = DUMP_FREQ_ALL }, .flags = FLAGS, .unit = "freq" }, diff --git a/src/ExtLib/ffmpeg/libavcodec/bsf/remove_extradata.c b/src/ExtLib/ffmpeg/libavcodec/bsf/remove_extradata.c index 66b7d00bd8..3010eba058 100644 --- a/src/ExtLib/ffmpeg/libavcodec/bsf/remove_extradata.c +++ b/src/ExtLib/ffmpeg/libavcodec/bsf/remove_extradata.c @@ -230,7 +230,7 @@ static int remove_extradata(AVBSFContext *ctx, AVPacket *pkt) #define OFFSET(x) offsetof(RemoveExtradataContext, x) #define FLAGS (AV_OPT_FLAG_VIDEO_PARAM|AV_OPT_FLAG_BSF_PARAM) static const AVOption options[] = { - { "freq", NULL, OFFSET(freq), AV_OPT_TYPE_INT, { .i64 = REMOVE_FREQ_KEYFRAME }, REMOVE_FREQ_KEYFRAME, REMOVE_FREQ_NONKEYFRAME, FLAGS, "freq" }, + { "freq", NULL, OFFSET(freq), AV_OPT_TYPE_INT, { .i64 = REMOVE_FREQ_KEYFRAME }, REMOVE_FREQ_KEYFRAME, REMOVE_FREQ_NONKEYFRAME, FLAGS, .unit = "freq" }, { "k", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = REMOVE_FREQ_NONKEYFRAME }, .flags = FLAGS, .unit = "freq" }, { "keyframe", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = REMOVE_FREQ_KEYFRAME }, .flags = FLAGS, .unit = "freq" }, { "e", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = REMOVE_FREQ_ALL }, .flags = FLAGS, .unit = "freq" }, diff --git a/src/ExtLib/ffmpeg/libavcodec/cbs_bsf.h b/src/ExtLib/ffmpeg/libavcodec/cbs_bsf.h index fd7d1eebc5..26bd448b87 100644 --- a/src/ExtLib/ffmpeg/libavcodec/cbs_bsf.h +++ b/src/ExtLib/ffmpeg/libavcodec/cbs_bsf.h @@ -112,7 +112,7 @@ enum { #define BSF_ELEMENT_OPTIONS_PIR(name, help, field, opt_flags) \ { name, help, OFFSET(field), AV_OPT_TYPE_INT, \ { .i64 = BSF_ELEMENT_PASS }, \ - BSF_ELEMENT_PASS, BSF_ELEMENT_REMOVE, opt_flags, name }, \ + BSF_ELEMENT_PASS, BSF_ELEMENT_REMOVE, opt_flags, .unit = name }, \ { "pass", NULL, 0, AV_OPT_TYPE_CONST, \ { .i64 = BSF_ELEMENT_PASS }, .flags = opt_flags, .unit = name }, \ { "insert", NULL, 0, AV_OPT_TYPE_CONST, \ @@ -123,7 +123,7 @@ enum { #define BSF_ELEMENT_OPTIONS_PIRE(name, help, field, opt_flags) \ { name, help, OFFSET(field), AV_OPT_TYPE_INT, \ { .i64 = BSF_ELEMENT_PASS }, \ - BSF_ELEMENT_PASS, BSF_ELEMENT_EXTRACT, opt_flags, name }, \ + BSF_ELEMENT_PASS, BSF_ELEMENT_EXTRACT, opt_flags, .unit = name }, \ { "pass", NULL, 0, AV_OPT_TYPE_CONST, \ { .i64 = BSF_ELEMENT_PASS }, .flags = opt_flags, .unit = name }, \ { "insert", NULL, 0, AV_OPT_TYPE_CONST, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/dcadec.c b/src/ExtLib/ffmpeg/libavcodec/dcadec.c index cc23731b90..03dbf299fc 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dcadec.c +++ b/src/ExtLib/ffmpeg/libavcodec/dcadec.c @@ -396,11 +396,11 @@ static const AVOption dcadec_options[] = { { "channel_order", "Order in which the channels are to be exported", OFFSET(output_channel_order), AV_OPT_TYPE_INT, - { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, PARAM, "channel_order" }, + { .i64 = CHANNEL_ORDER_DEFAULT }, 0, 1, PARAM, .unit = "channel_order" }, { "default", "normal libavcodec channel order", 0, AV_OPT_TYPE_CONST, - { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = PARAM, "channel_order" }, + { .i64 = CHANNEL_ORDER_DEFAULT }, .flags = PARAM, .unit = "channel_order" }, { "coded", "order in which the channels are coded in the bitstream", - 0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = PARAM, "channel_order" }, + 0, AV_OPT_TYPE_CONST, { .i64 = CHANNEL_ORDER_CODED }, .flags = PARAM, .unit = "channel_order" }, { "downmix", "Request a specific channel layout from the decoder", OFFSET(downmix_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL}, .flags = PARAM }, diff --git a/src/ExtLib/ffmpeg/libavcodec/mpegvideoenc.h b/src/ExtLib/ffmpeg/libavcodec/mpegvideoenc.h index 0e93124cc2..1e29782660 100644 --- a/src/ExtLib/ffmpeg/libavcodec/mpegvideoenc.h +++ b/src/ExtLib/ffmpeg/libavcodec/mpegvideoenc.h @@ -44,33 +44,33 @@ #define FF_MPV_FLAG_MV0 0x0020 #define FF_MPV_OPT_CMP_FUNC \ -{ "sad", "Sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "sse", "Sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "satd", "Sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "dct", "Sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "psnr", "Sum of squared quantization errors, low quality", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "bit", "Number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "rd", "Rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "zero", "Zero", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "vsad", "Sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "vsse", "Sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "nsse", "Noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "dct264", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT264 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ -{ "msad", "Sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" } +{ "sad", "Sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "sse", "Sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "satd", "Sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "dct", "Sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "psnr", "Sum of squared quantization errors, low quality", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "bit", "Number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "rd", "Rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "zero", "Zero", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "vsad", "Sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "vsse", "Sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "nsse", "Noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "dct264", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT264 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ +{ "msad", "Sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" } #define FF_MPV_OFFSET(x) offsetof(MpegEncContext, x) #define FF_MPV_OPT_FLAGS (AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM) #define FF_MPV_COMMON_OPTS \ FF_MPV_OPT_CMP_FUNC, \ -{ "mpv_flags", "Flags common for all mpegvideo-based encoders.", FF_MPV_OFFSET(mpv_flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "skip_rd", "RD optimal MB level residual skipping", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_SKIP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "strict_gop", "Strictly enforce gop size", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_STRICT_GOP }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_NAQ }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ -{ "mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, "mpv_flags" },\ +{ "mpv_flags", "Flags common for all mpegvideo-based encoders.", FF_MPV_OFFSET(mpv_flags), AV_OPT_TYPE_FLAGS, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\ +{ "skip_rd", "RD optimal MB level residual skipping", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_SKIP_RD }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\ +{ "strict_gop", "Strictly enforce gop size", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_STRICT_GOP }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\ +{ "qp_rd", "Use rate distortion optimization for qp selection", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_QP_RD }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\ +{ "cbp_rd", "use rate distortion optimization for CBP", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_CBP_RD }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\ +{ "naq", "normalize adaptive quantization", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_NAQ }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\ +{ "mv0", "always try a mb with mv=<0,0>", 0, AV_OPT_TYPE_CONST, { .i64 = FF_MPV_FLAG_MV0 }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "mpv_flags" },\ { "luma_elim_threshold", "single coefficient elimination threshold for luminance (negative values also consider dc coefficient)",\ FF_MPV_OFFSET(luma_elim_threshold), AV_OPT_TYPE_INT, { .i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS },\ { "chroma_elim_threshold", "single coefficient elimination threshold for chrominance (negative values also consider dc coefficient)",\ @@ -95,7 +95,7 @@ FF_MPV_OPT_CMP_FUNC, \ {"skip_threshold", "Frame skip threshold", FF_MPV_OFFSET(frame_skip_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"skip_factor", "Frame skip factor", FF_MPV_OFFSET(frame_skip_factor), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"skip_exp", "Frame skip exponent", FF_MPV_OFFSET(frame_skip_exp), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ -{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, "cmp_func" }, \ +{"skip_cmp", "Frame skip compare function", FF_MPV_OFFSET(frame_skip_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS, .unit = "cmp_func" }, \ {"sc_threshold", "Scene change threshold", FF_MPV_OFFSET(scenechange_threshold), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"noise_reduction", "Noise reduction", FF_MPV_OFFSET(noise_reduction), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"ps", "RTP payload size in bytes", FF_MPV_OFFSET(rtp_payload_size), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ @@ -106,10 +106,10 @@ FF_MPV_OPT_CMP_FUNC, \ {"brd_scale", "Downscale frames for dynamic B-frame decision", FF_MPV_OFFSET(brd_scale), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, 3, FF_MPV_OPT_FLAGS }, #define FF_MPV_COMMON_MOTION_EST_OPTS \ -{"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, "motion_est" }, \ -{ "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ -{ "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ -{ "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, "motion_est" }, \ +{"motion_est", "motion estimation algorithm", FF_MPV_OFFSET(motion_est), AV_OPT_TYPE_INT, {.i64 = FF_ME_EPZS }, FF_ME_ZERO, FF_ME_XONE, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ +{ "zero", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_ZERO }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ +{ "epzs", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_EPZS }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ +{ "xone", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = FF_ME_XONE }, 0, 0, FF_MPV_OPT_FLAGS, .unit = "motion_est" }, \ {"mepc", "Motion estimation bitrate penalty compensation (1.0 = 256)", FF_MPV_OFFSET(me_penalty_compensation), AV_OPT_TYPE_INT, {.i64 = 256 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"mepre", "pre motion estimation", FF_MPV_OFFSET(me_pre), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX, FF_MPV_OPT_FLAGS }, \ {"intra_penalty", "Penalty for intra blocks in block decision", FF_MPV_OFFSET(intra_penalty), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX/2, FF_MPV_OPT_FLAGS }, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/options.c b/src/ExtLib/ffmpeg/libavcodec/options.c index 05a355fb45..928e430ce9 100644 --- a/src/ExtLib/ffmpeg/libavcodec/options.c +++ b/src/ExtLib/ffmpeg/libavcodec/options.c @@ -198,7 +198,7 @@ static const AVOption subtitle_rect_options[]={ {"w", "", SROFFSET(w), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, {"h", "", SROFFSET(h), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, {"type", "", SROFFSET(type), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0}, -{"flags", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0, "flags"}, +{"flags", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0, .unit = "flags"}, {"forced", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0}, {NULL}, }; diff --git a/src/ExtLib/ffmpeg/libavcodec/options_table.h b/src/ExtLib/ffmpeg/libavcodec/options_table.h index ee243d9894..ac32d8928a 100644 --- a/src/ExtLib/ffmpeg/libavcodec/options_table.h +++ b/src/ExtLib/ffmpeg/libavcodec/options_table.h @@ -51,46 +51,46 @@ static const AVOption avcodec_options[] = { "ratecontrol is willing to deviate from the target average bitrate value. This is not related " "to minimum/maximum bitrate. Lowering tolerance too much has an adverse effect on quality.", OFFSET(bit_rate_tolerance), AV_OPT_TYPE_INT, {.i64 = AV_CODEC_DEFAULT_BITRATE*20 }, 0, INT_MAX, A|V|E}, -{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, UINT_MAX, V|A|S|E|D, "flags"}, -{"unaligned", "allow decoders to produce unaligned output", 0, AV_OPT_TYPE_CONST, { .i64 = AV_CODEC_FLAG_UNALIGNED }, INT_MIN, INT_MAX, V | D, "flags" }, -{"mv4", "use four motion vectors per macroblock (MPEG-4)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, "flags"}, -{"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, "flags"}, -{"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, "flags"}, -{"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, "flags"}, +{"flags", NULL, OFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, UINT_MAX, V|A|S|E|D, .unit = "flags"}, +{"unaligned", "allow decoders to produce unaligned output", 0, AV_OPT_TYPE_CONST, { .i64 = AV_CODEC_FLAG_UNALIGNED }, INT_MIN, INT_MAX, V | D, .unit = "flags" }, +{"mv4", "use four motion vectors per macroblock (MPEG-4)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_4MV }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"qpel", "use 1/4-pel motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QPEL }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"loop", "use loop filter", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOOP_FILTER }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"qscale", "use fixed qscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_QSCALE }, INT_MIN, INT_MAX, 0, .unit = "flags"}, {"recon_frame", "export reconstructed frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_RECON_FRAME}, .unit = "flags"}, {"copy_opaque", "propagate opaque values", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_COPY_OPAQUE}, .unit = "flags"}, {"frame_duration", "use frame durations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_FRAME_DURATION}, .unit = "flags"}, -{"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, "flags"}, -{"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, "flags"}, -{"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, "flags"}, -{"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, "flags"}, -{"ildct", "use interlaced DCT", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, "flags"}, -{"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, "flags"}, -{"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, "flags"}, -{"bitexact", "use only bitexact functions (except (I)DCT)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_BITEXACT }, INT_MIN, INT_MAX, A|V|S|D|E, "flags"}, -{"aic", "H.263 advanced intra coding / MPEG-4 AC prediction", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_AC_PRED }, INT_MIN, INT_MAX, V|E, "flags"}, -{"ilme", "interlaced motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_ME }, INT_MIN, INT_MAX, V|E, "flags"}, -{"cgop", "closed GOP", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_CLOSED_GOP }, INT_MIN, INT_MAX, V|E, "flags"}, -{"output_corrupt", "Output even potentially corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_OUTPUT_CORRUPT }, INT_MIN, INT_MAX, V|D, "flags"}, +{"pass1", "use internal 2-pass ratecontrol in first pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS1 }, INT_MIN, INT_MAX, 0, .unit = "flags"}, +{"pass2", "use internal 2-pass ratecontrol in second pass mode", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PASS2 }, INT_MIN, INT_MAX, 0, .unit = "flags"}, +{"gray", "only decode/encode grayscale", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GRAY }, INT_MIN, INT_MAX, V|E|D, .unit = "flags"}, +{"psnr", "error[?] variables will be set during encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_PSNR }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"ildct", "use interlaced DCT", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_DCT }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"low_delay", "force low delay", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_LOW_DELAY }, INT_MIN, INT_MAX, V|D|E, .unit = "flags"}, +{"global_header", "place global headers in extradata instead of every keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_GLOBAL_HEADER }, INT_MIN, INT_MAX, V|A|E, .unit = "flags"}, +{"bitexact", "use only bitexact functions (except (I)DCT)", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_BITEXACT }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "flags"}, +{"aic", "H.263 advanced intra coding / MPEG-4 AC prediction", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_AC_PRED }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"ilme", "interlaced motion estimation", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_INTERLACED_ME }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"cgop", "closed GOP", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_CLOSED_GOP }, INT_MIN, INT_MAX, V|E, .unit = "flags"}, +{"output_corrupt", "Output even potentially corrupted frames", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_OUTPUT_CORRUPT }, INT_MIN, INT_MAX, V|D, .unit = "flags"}, #if FF_API_DROPCHANGED -{"drop_changed", "Drop frames whose parameters differ from first decoded frame", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_DROPCHANGED }, INT_MIN, INT_MAX, A|V|D | AV_OPT_FLAG_DEPRECATED, "flags"}, +{"drop_changed", "Drop frames whose parameters differ from first decoded frame", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG_DROPCHANGED }, INT_MIN, INT_MAX, A|V|D | AV_OPT_FLAG_DEPRECATED, .unit = "flags"}, #endif -{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, V|A|E|D|S, "flags2"}, -{"fast", "allow non-spec-compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, "flags2"}, -{"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, "flags2"}, -{"ignorecrop", "ignore cropping information from sps", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, "flags2"}, -{"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, "flags2"}, -{"chunks", "Frame data might be split into multiple chunks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, "flags2"}, -{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, "flags2"}, -{"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, "flags2"}, -{"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, A|D, "flags2"}, -{"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, "flags2"}, -{"icc_profiles", "generate/parse embedded ICC profiles from/to colorimetry tags", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_ICC_PROFILES}, INT_MIN, INT_MAX, S|D, "flags2"}, -{"export_side_data", "Export metadata as side data", OFFSET(export_side_data), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, A|V|S|D|E, "export_side_data"}, -{"mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_MVS}, INT_MIN, INT_MAX, V|D, "export_side_data"}, -{"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, "export_side_data"}, -{"venc_params", "export video encoding parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS}, INT_MIN, INT_MAX, V|D, "export_side_data"}, -{"film_grain", "export film grain parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_FILM_GRAIN}, INT_MIN, INT_MAX, V|D, "export_side_data"}, +{"flags2", NULL, OFFSET(flags2), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, V|A|E|D|S, .unit = "flags2"}, +{"fast", "allow non-spec-compliant speedup tricks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_FAST }, INT_MIN, INT_MAX, V|E, .unit = "flags2"}, +{"noout", "skip bitstream encoding", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_NO_OUTPUT }, INT_MIN, INT_MAX, V|E, .unit = "flags2"}, +{"ignorecrop", "ignore cropping information from sps", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_IGNORE_CROP }, INT_MIN, INT_MAX, V|D, .unit = "flags2"}, +{"local_header", "place global headers at every keyframe instead of in extradata", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_LOCAL_HEADER }, INT_MIN, INT_MAX, V|E, .unit = "flags2"}, +{"chunks", "Frame data might be split into multiple chunks", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_CHUNKS }, INT_MIN, INT_MAX, V|D, .unit = "flags2"}, +{"showall", "Show all frames before the first keyframe", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SHOW_ALL }, INT_MIN, INT_MAX, V|D, .unit = "flags2"}, +{"export_mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_EXPORT_MVS}, INT_MIN, INT_MAX, V|D, .unit = "flags2"}, +{"skip_manual", "do not skip samples and export skip information as frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_SKIP_MANUAL}, INT_MIN, INT_MAX, A|D, .unit = "flags2"}, +{"ass_ro_flush_noop", "do not reset ASS ReadOrder field on flush", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_RO_FLUSH_NOOP}, INT_MIN, INT_MAX, S|D, .unit = "flags2"}, +{"icc_profiles", "generate/parse embedded ICC profiles from/to colorimetry tags", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_FLAG2_ICC_PROFILES}, INT_MIN, INT_MAX, S|D, .unit = "flags2"}, +{"export_side_data", "Export metadata as side data", OFFSET(export_side_data), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT}, 0, UINT_MAX, A|V|S|D|E, .unit = "export_side_data"}, +{"mvs", "export motion vectors through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_MVS}, INT_MIN, INT_MAX, V|D, .unit = "export_side_data"}, +{"prft", "export Producer Reference Time through packet side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_PRFT}, INT_MIN, INT_MAX, A|V|S|E, .unit = "export_side_data"}, +{"venc_params", "export video encoding parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_VIDEO_ENC_PARAMS}, INT_MIN, INT_MAX, V|D, .unit = "export_side_data"}, +{"film_grain", "export film grain parameters through frame side data", 0, AV_OPT_TYPE_CONST, {.i64 = AV_CODEC_EXPORT_DATA_FILM_GRAIN}, INT_MIN, INT_MAX, V|D, .unit = "export_side_data"}, {"time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, INT_MAX}, {"g", "set the group of picture (GOP) size", OFFSET(gop_size), AV_OPT_TYPE_INT, {.i64 = 12 }, INT_MIN, INT_MAX, V|E}, {"ar", "set audio sampling rate (in Hz)", OFFSET(sample_rate), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, A|D|E}, @@ -111,38 +111,38 @@ static const AVOption avcodec_options[] = { {"bf", "set maximum number of B-frames between non-B-frames", OFFSET(max_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, -1, INT_MAX, V|E}, {"b_qfactor", "QP factor between P- and B-frames", OFFSET(b_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E}, {"codec_tag", NULL, OFFSET(codec_tag), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, -{"bug", "work around not autodetected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"}, -{"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, "bug"}, -{"xvid_ilace", "Xvid interlacing bug (autodetected if FOURCC == XVIX)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_XVID_ILACE }, INT_MIN, INT_MAX, V|D, "bug"}, -{"ump4", "(autodetected if FOURCC == UMP4)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_UMP4 }, INT_MIN, INT_MAX, V|D, "bug"}, -{"no_padding", "padding bug (autodetected)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_NO_PADDING }, INT_MIN, INT_MAX, V|D, "bug"}, -{"amv", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AMV }, INT_MIN, INT_MAX, V|D, "bug"}, -{"qpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"}, -{"std_qpel", "old standard qpel (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_STD_QPEL }, INT_MIN, INT_MAX, V|D, "bug"}, -{"qpel_chroma2", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA2 }, INT_MIN, INT_MAX, V|D, "bug"}, -{"direct_blocksize", "direct-qpel-blocksize bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DIRECT_BLOCKSIZE }, INT_MIN, INT_MAX, V|D, "bug"}, -{"edge", "edge padding bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_EDGE }, INT_MIN, INT_MAX, V|D, "bug"}, -{"hpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_HPEL_CHROMA }, INT_MIN, INT_MAX, V|D, "bug"}, -{"dc_clip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DC_CLIP }, INT_MIN, INT_MAX, V|D, "bug"}, -{"ms", "work around various bugs in Microsoft's broken decoders", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_MS }, INT_MIN, INT_MAX, V|D, "bug"}, -{"trunc", "truncated frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_TRUNCATED}, INT_MIN, INT_MAX, V|D, "bug"}, -{"iedge", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_IEDGE }, INT_MIN, INT_MAX, V|D, "bug"}, -{"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|D|E, "strict"}, -{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, A|V|D|E, "strict"}, -{"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, A|V|D|E, "strict"}, -{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"}, -{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"}, -{"experimental", "allow non-standardized experimental things", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, A|V|D|E, "strict"}, +{"bug", "work around not autodetected encoder bugs", OFFSET(workaround_bugs), AV_OPT_TYPE_FLAGS, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"autodetect", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AUTODETECT }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"xvid_ilace", "Xvid interlacing bug (autodetected if FOURCC == XVIX)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_XVID_ILACE }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"ump4", "(autodetected if FOURCC == UMP4)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_UMP4 }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"no_padding", "padding bug (autodetected)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_NO_PADDING }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"amv", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_AMV }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"qpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"std_qpel", "old standard qpel (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_STD_QPEL }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"qpel_chroma2", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_QPEL_CHROMA2 }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"direct_blocksize", "direct-qpel-blocksize bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DIRECT_BLOCKSIZE }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"edge", "edge padding bug (autodetected per FOURCC/version)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_EDGE }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"hpel_chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_HPEL_CHROMA }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"dc_clip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_DC_CLIP }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"ms", "work around various bugs in Microsoft's broken decoders", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_MS }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"trunc", "truncated frames", 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_TRUNCATED}, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"iedge", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_BUG_IEDGE }, INT_MIN, INT_MAX, V|D, .unit = "bug"}, +{"strict", "how strictly to follow the standards", OFFSET(strict_std_compliance), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"}, +{"very", "strictly conform to a older more strict version of the spec or reference software", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_VERY_STRICT }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"}, +{"strict", "strictly conform to all the things in the spec no matter what the consequences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_STRICT }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"}, +{"normal", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_NORMAL }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"}, +{"unofficial", "allow unofficial extensions", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_UNOFFICIAL }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"}, +{"experimental", "allow non-standardized experimental things", 0, AV_OPT_TYPE_CONST, {.i64 = FF_COMPLIANCE_EXPERIMENTAL }, INT_MIN, INT_MAX, A|V|D|E, .unit = "strict"}, {"b_qoffset", "QP offset between P- and B-frames", OFFSET(b_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 1.25 }, -FLT_MAX, FLT_MAX, V|E}, -{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.i64 = 0 }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"ignore_err", "ignore errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_IGNORE_ERR }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"careful", "consider things that violate the spec, are fast to check and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_COMPLIANT | AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, -{"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE | AV_EF_COMPLIANT | AV_EF_CAREFUL}, INT_MIN, INT_MAX, A|V|S|D|E, "err_detect"}, +{"err_detect", "set error detection flags", OFFSET(err_recognition), AV_OPT_TYPE_FLAGS, {.i64 = 0 }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"crccheck", "verify embedded CRCs", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CRCCHECK }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"bitstream", "detect bitstream specification deviations", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BITSTREAM }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"buffer", "detect improper bitstream length", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_BUFFER }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"explode", "abort decoding on minor error detection", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_EXPLODE }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"ignore_err", "ignore errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_IGNORE_ERR }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"careful", "consider things that violate the spec, are fast to check and have not been seen in the wild as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"compliant", "consider all spec non compliancies as errors", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_COMPLIANT | AV_EF_CAREFUL }, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, +{"aggressive", "consider things that a sane encoder should not do as an error", 0, AV_OPT_TYPE_CONST, {.i64 = AV_EF_AGGRESSIVE | AV_EF_COMPLIANT | AV_EF_CAREFUL}, INT_MIN, INT_MAX, A|V|S|D|E, .unit = "err_detect"}, {"has_b_frames", NULL, OFFSET(has_b_frames), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, {"block_align", NULL, OFFSET(block_align), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, {"rc_override_count", NULL, OFFSET(rc_override_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, @@ -152,59 +152,59 @@ static const AVOption avcodec_options[] = { {"bufsize", "set ratecontrol buffer size (in bits)", OFFSET(rc_buffer_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, A|V|E}, {"i_qfactor", "QP factor between P- and I-frames", OFFSET(i_quant_factor), AV_OPT_TYPE_FLOAT, {.dbl = -0.8 }, -FLT_MAX, FLT_MAX, V|E}, {"i_qoffset", "QP offset between P- and I-frames", OFFSET(i_quant_offset), AV_OPT_TYPE_FLOAT, {.dbl = 0.0 }, -FLT_MAX, FLT_MAX, V|E}, -{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, "dct"}, -{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, "dct"}, -{"fastint", "fast integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, "dct"}, -{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, "dct"}, -{"mmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, "dct"}, -{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, "dct"}, -{"faan", "floating point AAN DCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, "dct"}, +{"dct", "DCT algorithm", OFFSET(dct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E, .unit = "dct"}, +{"auto", "autoselect a good one", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_AUTO }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"fastint", "fast integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FASTINT }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"int", "accurate integer", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_INT }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"mmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_MMX }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_ALTIVEC }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, +{"faan", "floating point AAN DCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DCT_FAAN }, INT_MIN, INT_MAX, V|E, .unit = "dct"}, {"lumi_mask", "compresses bright areas stronger than medium ones", OFFSET(lumi_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E}, {"tcplx_mask", "temporal complexity masking", OFFSET(temporal_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E}, {"scplx_mask", "spatial complexity masking", OFFSET(spatial_cplx_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E}, {"p_mask", "inter masking", OFFSET(p_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E}, {"dark_mask", "compresses dark areas stronger than medium ones", OFFSET(dark_masking), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, -FLT_MAX, FLT_MAX, V|E}, -{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, "idct"}, -{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"int", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplearm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplearmv5te", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simplearmv6", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"simpleneon", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"xvid", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"xvidmmx", "deprecated, for compatibility only", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, "idct"}, -{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, "idct"}, -{"simpleauto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, "idct"}, +{"idct", "select IDCT implementation", OFFSET(idct_algo), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX, V|E|D, .unit = "idct"}, +{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_AUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"int", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_INT }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simple", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplemmx", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEMMX }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"arm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"altivec", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_ALTIVEC }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplearm", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARM }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplearmv5te", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV5TE }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simplearmv6", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEARMV6 }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"simpleneon", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLENEON }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"xvid", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"xvidmmx", "deprecated, for compatibility only", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_XVID }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, +{"faani", "floating point AAN IDCT", 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_FAAN }, INT_MIN, INT_MAX, V|D|E, .unit = "idct"}, +{"simpleauto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_IDCT_SIMPLEAUTO }, INT_MIN, INT_MAX, V|E|D, .unit = "idct"}, #if FF_API_SLICE_OFFSET {"slice_count", NULL, OFFSET(slice_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, #endif -{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.i64 = 3 }, INT_MIN, INT_MAX, V|D, "ec"}, -{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, "ec"}, -{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, "ec"}, -{"favor_inter", "favor predicting from the previous frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_FAVOR_INTER }, INT_MIN, INT_MAX, V|D, "ec"}, +{"ec", "set error concealment strategy", OFFSET(error_concealment), AV_OPT_TYPE_FLAGS, {.i64 = 3 }, INT_MIN, INT_MAX, V|D, .unit = "ec"}, +{"guess_mvs", "iterative motion vector (MV) search (slow)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_GUESS_MVS }, INT_MIN, INT_MAX, V|D, .unit = "ec"}, +{"deblock", "use strong deblock filter for damaged MBs", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_DEBLOCK }, INT_MIN, INT_MAX, V|D, .unit = "ec"}, +{"favor_inter", "favor predicting from the previous frame", 0, AV_OPT_TYPE_CONST, {.i64 = FF_EC_FAVOR_INTER }, INT_MIN, INT_MAX, V|D, .unit = "ec"}, {"bits_per_coded_sample", NULL, OFFSET(bits_per_coded_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, {"aspect", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E}, {"sar", "sample aspect ratio", OFFSET(sample_aspect_ratio), AV_OPT_TYPE_RATIONAL, {.dbl = 0}, 0, 10, V|E}, -{"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|A|S|E|D, "debug"}, -{"pict", "picture info", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_PICT_INFO }, INT_MIN, INT_MAX, V|D, "debug"}, -{"rc", "rate control", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_RC }, INT_MIN, INT_MAX, V|E, "debug"}, -{"bitstream", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BITSTREAM }, INT_MIN, INT_MAX, V|D, "debug"}, -{"mb_type", "macroblock (MB) type", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MB_TYPE }, INT_MIN, INT_MAX, V|D, "debug"}, -{"qp", "per-block quantization parameter (QP)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_QP }, INT_MIN, INT_MAX, V|D, "debug"}, -{"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, "debug"}, -{"green_metadata", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_GREEN_MD }, INT_MIN, INT_MAX, V|D, "debug"}, -{"skip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_SKIP }, INT_MIN, INT_MAX, V|D, "debug"}, -{"startcode", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_STARTCODE }, INT_MIN, INT_MAX, V|D, "debug"}, -{"er", "error recognition", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_ER }, INT_MIN, INT_MAX, V|D, "debug"}, -{"mmco", "memory management control operations (H.264)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MMCO }, INT_MIN, INT_MAX, V|D, "debug"}, -{"bugs", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUGS }, INT_MIN, INT_MAX, V|D, "debug"}, -{"buffers", "picture buffer allocations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUFFERS }, INT_MIN, INT_MAX, V|D, "debug"}, -{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|A|D, "debug"}, -{"nomc", "skip motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_NOMC }, INT_MIN, INT_MAX, V|A|D, "debug"}, +{"debug", "print specific debug info", OFFSET(debug), AV_OPT_TYPE_FLAGS, {.i64 = DEFAULT }, 0, INT_MAX, V|A|S|E|D, .unit = "debug"}, +{"pict", "picture info", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_PICT_INFO }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"rc", "rate control", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_RC }, INT_MIN, INT_MAX, V|E, .unit = "debug"}, +{"bitstream", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BITSTREAM }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"mb_type", "macroblock (MB) type", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MB_TYPE }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"qp", "per-block quantization parameter (QP)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_QP }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"dct_coeff", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_DCT_COEFF }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"green_metadata", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_GREEN_MD }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"skip", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_SKIP }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"startcode", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_STARTCODE }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"er", "error recognition", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_ER }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"mmco", "memory management control operations (H.264)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_MMCO }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"bugs", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUGS }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"buffers", "picture buffer allocations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_BUFFERS }, INT_MIN, INT_MAX, V|D, .unit = "debug"}, +{"thread_ops", "threading operations", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_THREADS }, INT_MIN, INT_MAX, V|A|D, .unit = "debug"}, +{"nomc", "skip motion compensation", 0, AV_OPT_TYPE_CONST, {.i64 = FF_DEBUG_NOMC }, INT_MIN, INT_MAX, V|A|D, .unit = "debug"}, {"dia_size", "diamond type & size for motion estimation", OFFSET(dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, {"last_pred", "amount of motion predictors from the previous frame", OFFSET(last_predictor_count), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, {"pre_dia_size", "diamond type & size for motion estimation pre-pass", OFFSET(pre_dia_size), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, @@ -212,58 +212,58 @@ static const AVOption avcodec_options[] = { {"me_range", "limit motion vectors range (1023 for DivX player)", OFFSET(me_range), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, {"global_quality", NULL, OFFSET(global_quality), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|A|E}, {"slice_flags", NULL, OFFSET(slice_flags), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX}, -{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, "mbd"}, -{"simple", "use mbcmp", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, "mbd"}, -{"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, "mbd"}, -{"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, "mbd"}, +{"mbd", "macroblock decision algorithm (high quality mode)", OFFSET(mb_decision), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, 2, V|E, .unit = "mbd"}, +{"simple", "use mbcmp", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_SIMPLE }, INT_MIN, INT_MAX, V|E, .unit = "mbd"}, +{"bits", "use fewest bits", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_BITS }, INT_MIN, INT_MAX, V|E, .unit = "mbd"}, +{"rd", "use best rate distortion", 0, AV_OPT_TYPE_CONST, {.i64 = FF_MB_DECISION_RD }, INT_MIN, INT_MAX, V|E, .unit = "mbd"}, {"rc_init_occupancy", "number of bits which should be loaded into the rc buffer before decoding starts", OFFSET(rc_initial_buffer_occupancy), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E}, -{"threads", "set the number of threads", OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|A|E|D, "threads"}, -{"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, V|E|D, "threads"}, +{"threads", "set the number of threads", OFFSET(thread_count), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, V|A|E|D, .unit = "threads"}, +{"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, INT_MIN, INT_MAX, V|E|D, .unit = "threads"}, {"dc", "intra_dc_precision", OFFSET(intra_dc_precision), AV_OPT_TYPE_INT, {.i64 = 0 }, -8, 16, V|E}, {"nssew", "nsse weight", OFFSET(nsse_weight), AV_OPT_TYPE_INT, {.i64 = 8 }, INT_MIN, INT_MAX, V|E}, {"skip_top", "number of macroblock rows at the top which are skipped", OFFSET(skip_top), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|D}, {"skip_bottom", "number of macroblock rows at the bottom which are skipped", OFFSET(skip_bottom), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|D}, -{"profile", NULL, OFFSET(profile), AV_OPT_TYPE_INT, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, "avctx.profile"}, -{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "avctx.profile"}, -{"main10", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_HEVC_MAIN_10 }, INT_MIN, INT_MAX, V|E, "avctx.profile"}, -{"level", "encoding level, usually corresponding to the profile level, codec-specific", OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, "avctx.level"}, -{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, "avctx.level"}, +{"profile", NULL, OFFSET(profile), AV_OPT_TYPE_INT, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, .unit = "avctx.profile"}, +{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, .unit = "avctx.profile"}, +{"main10", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_PROFILE_HEVC_MAIN_10 }, INT_MIN, INT_MAX, V|E, .unit = "avctx.profile"}, +{"level", "encoding level, usually corresponding to the profile level, codec-specific", OFFSET(level), AV_OPT_TYPE_INT, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E|CC, .unit = "avctx.level"}, +{"unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_LEVEL_UNKNOWN }, INT_MIN, INT_MAX, V|A|E, .unit = "avctx.level"}, {"lowres", "decode at 1= 1/2, 2=1/4, 3=1/8 resolutions", OFFSET(lowres), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|A|D}, -{"cmp", "full-pel ME compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"subcmp", "sub-pel ME compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"ildctcmp", "interlaced DCT compare function", OFFSET(ildct_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"sad", "sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"sse", "sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"satd", "sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"dct", "sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"psnr", "sum of squared quantization errors (avoid, low quality)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"bit", "number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"rd", "rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"zero", "0", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"vsad", "sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"vsse", "sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"nsse", "noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, V|E, "cmp_func"}, +{"cmp", "full-pel ME compare function", OFFSET(me_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"subcmp", "sub-pel ME compare function", OFFSET(me_sub_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"mbcmp", "macroblock compare function", OFFSET(mb_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"ildctcmp", "interlaced DCT compare function", OFFSET(ildct_cmp), AV_OPT_TYPE_INT, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"precmp", "pre motion estimation compare function", OFFSET(me_pre_cmp), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"sad", "sum of absolute differences, fast", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"sse", "sum of squared errors", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SSE }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"satd", "sum of absolute Hadamard transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_SATD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"dct", "sum of absolute DCT transformed differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"psnr", "sum of squared quantization errors (avoid, low quality)", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_PSNR }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"bit", "number of bits needed for the block", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_BIT }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"rd", "rate distortion optimal, slow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_RD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"zero", "0", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_ZERO }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"vsad", "sum of absolute vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"vsse", "sum of squared vertical differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_VSSE }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"nsse", "noise preserving sum of squared differences", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_NSSE }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, #if CONFIG_SNOW_ENCODER -{"w53", "5/3 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W53 }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"w97", "9/7 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W97 }, INT_MIN, INT_MAX, V|E, "cmp_func"}, +{"w53", "5/3 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W53 }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"w97", "9/7 wavelet, only used in snow", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_W97 }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, #endif -{"dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, V|E, "cmp_func"}, -{"msad", "sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, V|E, "cmp_func"}, +{"dctmax", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_DCTMAX }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"chroma", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_CHROMA }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, +{"msad", "sum of absolute differences, median predicted", 0, AV_OPT_TYPE_CONST, {.i64 = FF_CMP_MEDIAN_SAD }, INT_MIN, INT_MAX, V|E, .unit = "cmp_func"}, {"mblmin", "minimum macroblock Lagrange factor (VBR)", OFFSET(mb_lmin), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 2 }, 1, FF_LAMBDA_MAX, V|E}, {"mblmax", "maximum macroblock Lagrange factor (VBR)", OFFSET(mb_lmax), AV_OPT_TYPE_INT, {.i64 = FF_QP2LAMBDA * 31 }, 1, FF_LAMBDA_MAX, V|E}, -{"skip_loop_filter", "skip loop filtering process for the selected frames", OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"skip_idct" , "skip IDCT/dequantization for the selected frames", OFFSET(skip_idct), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"skip_frame" , "skip decoding for the selected frames", OFFSET(skip_frame), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"none" , "discard no frame", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONE }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"default" , "discard useless frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"noref" , "discard all non-reference frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONREF }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"bidir" , "discard all bidirectional frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_BIDIR }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"nointra" , "discard all frames except I frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA}, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"nokey" , "discard all frames except keyframes", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY }, INT_MIN, INT_MAX, V|D, "avdiscard"}, -{"all" , "discard all frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, "avdiscard"}, +{"skip_loop_filter", "skip loop filtering process for the selected frames", OFFSET(skip_loop_filter), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"skip_idct" , "skip IDCT/dequantization for the selected frames", OFFSET(skip_idct), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"skip_frame" , "skip decoding for the selected frames", OFFSET(skip_frame), AV_OPT_TYPE_INT, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"none" , "discard no frame", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONE }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"default" , "discard useless frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_DEFAULT }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"noref" , "discard all non-reference frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONREF }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"bidir" , "discard all bidirectional frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_BIDIR }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"nointra" , "discard all frames except I frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONINTRA}, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"nokey" , "discard all frames except keyframes", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_NONKEY }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, +{"all" , "discard all frames", 0, AV_OPT_TYPE_CONST, {.i64 = AVDISCARD_ALL }, INT_MIN, INT_MAX, V|D, .unit = "avdiscard"}, {"bidir_refine", "refine the two motion vectors used in bidirectional macroblocks", OFFSET(bidir_refine), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, 4, V|E}, {"keyint_min", "minimum interval between IDR-frames", OFFSET(keyint_min), AV_OPT_TYPE_INT, {.i64 = 25 }, INT_MIN, INT_MAX, V|E}, {"refs", "reference frames to consider for motion compensation", OFFSET(refs), AV_OPT_TYPE_INT, {.i64 = 1 }, INT_MIN, INT_MAX, V|E}, @@ -271,138 +271,138 @@ static const AVOption avcodec_options[] = { {"mv0_threshold", NULL, OFFSET(mv0_threshold), AV_OPT_TYPE_INT, {.i64 = 256 }, 0, INT_MAX, V|E}, {"compression_level", NULL, OFFSET(compression_level), AV_OPT_TYPE_INT, {.i64 = FF_COMPRESSION_DEFAULT }, INT_MIN, INT_MAX, V|A|E}, {"bits_per_raw_sample", NULL, OFFSET(bits_per_raw_sample), AV_OPT_TYPE_INT, {.i64 = DEFAULT }, 0, INT_MAX}, -{"ch_layout", NULL, OFFSET(ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL }, 0, 0, A|E|D, "ch_layout"}, +{"ch_layout", NULL, OFFSET(ch_layout), AV_OPT_TYPE_CHLAYOUT, {.str = NULL }, 0, 0, A|E|D, .unit = "ch_layout"}, #if FF_API_OLD_CHANNEL_LAYOUT -{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, "channel_layout"}, -{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, "request_channel_layout"}, +{"channel_layout", NULL, OFFSET(channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|E|D, .unit = "channel_layout"}, +{"request_channel_layout", NULL, OFFSET(request_channel_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64 = DEFAULT }, 0, UINT64_MAX, A|D, .unit = "request_channel_layout"}, #endif {"rc_max_vbv_use", NULL, OFFSET(rc_max_available_vbv_use), AV_OPT_TYPE_FLOAT, {.dbl = 0 }, 0.0, FLT_MAX, V|E}, {"rc_min_vbv_use", NULL, OFFSET(rc_min_vbv_overflow_use), AV_OPT_TYPE_FLOAT, {.dbl = 3 }, 0.0, FLT_MAX, V|E}, #if FF_API_TICKS_PER_FRAME {"ticks_per_frame", NULL, OFFSET(ticks_per_frame), AV_OPT_TYPE_INT, {.i64 = 1 }, 1, INT_MAX, A|V|E|D}, #endif -{"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, INT_MAX, V|E|D, "color_primaries_type"}, -{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT709 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"bt470m", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470M }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470BG }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"film", "Film", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_FILM }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"bt2020", "BT.2020", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT2020 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"smpte431", "SMPTE 431-2", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE431 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"smpte432", "SMPTE 422-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE432 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"jedec-p22", "JEDEC P22", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_JEDEC_P22 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"ebu3213", "EBU 3213-E", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_EBU3213 }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_primaries_type"}, -{"color_trc", "color transfer characteristics", OFFSET(color_trc), AV_OPT_TYPE_INT, {.i64 = AVCOL_TRC_UNSPECIFIED }, 1, INT_MAX, V|E|D, "color_trc_type"}, -{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT709 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"gamma22", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA22 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"gamma28", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA28 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"linear", "Linear", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LINEAR }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"log100", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"log316", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"iec61966-2-4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"bt1361e", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"iec61966-2-1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"bt2020-10", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"bt2020-12", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"smpte2084", "SMPTE 2084", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE2084 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"arib-std-b67", "ARIB STD-B67", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_ARIB_STD_B67 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"log", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"log_sqrt", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"iec61966_2_4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"bt1361", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"iec61966_2_1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"bt2020_10bit", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"bt2020_12bit", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, "color_trc_type"}, -{"colorspace", "color space", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = AVCOL_SPC_UNSPECIFIED }, 0, INT_MAX, V|E|D, "colorspace_type"}, -{"rgb", "RGB", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_RGB }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT709 }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"fcc", "FCC", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_FCC }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT470BG }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"ycgco", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"bt2020nc", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"bt2020c", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"smpte2085", "SMPTE 2085", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE2085 }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"chroma-derived-nc", "Chroma-derived NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_NCL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"chroma-derived-c", "Chroma-derived CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_CL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"ictcp", "ICtCp", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_ICTCP }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"ycocg", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"bt2020_ncl", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"bt2020_cl", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, "colorspace_type"}, -{"color_range", "color range", OFFSET(color_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, INT_MAX, V|E|D, "color_range_type"}, -{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"tv", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"pc", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"mpeg", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"jpeg", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"limited", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"full", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, "color_range_type"}, -{"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"left", "Left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_LEFT }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"center", "Center", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_CENTER }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"topleft", "Top-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOPLEFT }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"top", "Top", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOP }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"bottomleft", "Bottom-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOMLEFT }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"bottom", "Bottom", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOM }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, -{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, "chroma_sample_location_type"}, +{"color_primaries", "color primaries", OFFSET(color_primaries), AV_OPT_TYPE_INT, {.i64 = AVCOL_PRI_UNSPECIFIED }, 1, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT709 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"bt470m", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT470BG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"film", "Film", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_FILM }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"bt2020", "BT.2020", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_BT2020 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"smpte431", "SMPTE 431-2", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE431 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"smpte432", "SMPTE 422-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_SMPTE432 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"jedec-p22", "JEDEC P22", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_JEDEC_P22 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"ebu3213", "EBU 3213-E", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_EBU3213 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_PRI_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_primaries_type"}, +{"color_trc", "color transfer characteristics", OFFSET(color_trc), AV_OPT_TYPE_INT, {.i64 = AVCOL_TRC_UNSPECIFIED }, 1, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT709 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"gamma22", "BT.470 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA22 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"gamma28", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_GAMMA28 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"linear", "Linear", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LINEAR }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"log100", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"log316", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"iec61966-2-4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"bt1361e", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"iec61966-2-1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"bt2020-10", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"bt2020-12", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"smpte2084", "SMPTE 2084", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE2084 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"smpte428", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"arib-std-b67", "ARIB STD-B67", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_ARIB_STD_B67 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"log", "Log", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"log_sqrt", "Log square root", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_LOG_SQRT }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"iec61966_2_4", "IEC 61966-2-4", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_4 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"bt1361", "BT.1361", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT1361_ECG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"iec61966_2_1", "IEC 61966-2-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_IEC61966_2_1 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"bt2020_10bit", "BT.2020 - 10 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_10 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"bt2020_12bit", "BT.2020 - 12 bit", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_BT2020_12 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"smpte428_1", "SMPTE 428-1", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_TRC_SMPTE428 }, INT_MIN, INT_MAX, V|E|D, .unit = "color_trc_type"}, +{"colorspace", "color space", OFFSET(colorspace), AV_OPT_TYPE_INT, {.i64 = AVCOL_SPC_UNSPECIFIED }, 0, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"rgb", "RGB", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_RGB }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"bt709", "BT.709", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT709 }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"fcc", "FCC", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_FCC }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"bt470bg", "BT.470 BG", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT470BG }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"smpte170m", "SMPTE 170 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE170M }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"smpte240m", "SMPTE 240 M", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE240M }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"ycgco", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"bt2020nc", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"bt2020c", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"smpte2085", "SMPTE 2085", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_SMPTE2085 }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"chroma-derived-nc", "Chroma-derived NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_NCL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"chroma-derived-c", "Chroma-derived CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_CHROMA_DERIVED_CL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"ictcp", "ICtCp", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_ICTCP }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"ycocg", "YCGCO", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_YCGCO }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"bt2020_ncl", "BT.2020 NCL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_NCL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"bt2020_cl", "BT.2020 CL", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_SPC_BT2020_CL }, INT_MIN, INT_MAX, V|E|D, .unit = "colorspace_type"}, +{"color_range", "color range", OFFSET(color_range), AV_OPT_TYPE_INT, {.i64 = AVCOL_RANGE_UNSPECIFIED }, 0, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"tv", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"pc", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"mpeg", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"jpeg", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"limited", "MPEG (219*2^(n-8))", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_MPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"full", "JPEG (2^n-1)", 0, AV_OPT_TYPE_CONST, {.i64 = AVCOL_RANGE_JPEG }, INT_MIN, INT_MAX, V|E|D, .unit = "color_range_type"}, +{"chroma_sample_location", "chroma sample location", OFFSET(chroma_sample_location), AV_OPT_TYPE_INT, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, 0, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"unknown", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"left", "Left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_LEFT }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"center", "Center", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_CENTER }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"topleft", "Top-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOPLEFT }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"top", "Top", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_TOP }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"bottomleft", "Bottom-left", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOMLEFT }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"bottom", "Bottom", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_BOTTOM }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, +{"unspecified", "Unspecified", 0, AV_OPT_TYPE_CONST, {.i64 = AVCHROMA_LOC_UNSPECIFIED }, INT_MIN, INT_MAX, V|E|D, .unit = "chroma_sample_location_type"}, {"log_level_offset", "set the log level offset", OFFSET(log_level_offset), AV_OPT_TYPE_INT, {.i64 = 0 }, INT_MIN, INT_MAX }, {"slices", "set the number of slices, used in parallelized encoding", OFFSET(slices), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, V|E}, -{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.i64 = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|A|E|D, "thread_type"}, -{"slice", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, "thread_type"}, -{"frame", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, "thread_type"}, -{"audio_service_type", "audio service type", OFFSET(audio_service_type), AV_OPT_TYPE_INT, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, "audio_service_type"}, -{"ma", "Main Audio Service", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"ef", "Effects", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EFFECTS }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"vi", "Visually Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"hi", "Hearing Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"di", "Dialogue", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_DIALOGUE }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"co", "Commentary", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_COMMENTARY }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"em", "Emergency", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EMERGENCY }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"vo", "Voice Over", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VOICE_OVER }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"ka", "Karaoke", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_KARAOKE }, INT_MIN, INT_MAX, A|E, "audio_service_type"}, -{"request_sample_fmt", "sample format audio decoders should prefer", OFFSET(request_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64=AV_SAMPLE_FMT_NONE}, -1, INT_MAX, A|D, "request_sample_fmt"}, +{"thread_type", "select multithreading type", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, {.i64 = FF_THREAD_SLICE|FF_THREAD_FRAME }, 0, INT_MAX, V|A|E|D, .unit = "thread_type"}, +{"slice", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_SLICE }, INT_MIN, INT_MAX, V|E|D, .unit = "thread_type"}, +{"frame", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_THREAD_FRAME }, INT_MIN, INT_MAX, V|E|D, .unit = "thread_type"}, +{"audio_service_type", "audio service type", OFFSET(audio_service_type), AV_OPT_TYPE_INT, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, 0, AV_AUDIO_SERVICE_TYPE_NB-1, A|E, .unit = "audio_service_type"}, +{"ma", "Main Audio Service", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_MAIN }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"ef", "Effects", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EFFECTS }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"vi", "Visually Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VISUALLY_IMPAIRED }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"hi", "Hearing Impaired", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_HEARING_IMPAIRED }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"di", "Dialogue", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_DIALOGUE }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"co", "Commentary", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_COMMENTARY }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"em", "Emergency", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_EMERGENCY }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"vo", "Voice Over", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_VOICE_OVER }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"ka", "Karaoke", 0, AV_OPT_TYPE_CONST, {.i64 = AV_AUDIO_SERVICE_TYPE_KARAOKE }, INT_MIN, INT_MAX, A|E, .unit = "audio_service_type"}, +{"request_sample_fmt", "sample format audio decoders should prefer", OFFSET(request_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT, {.i64=AV_SAMPLE_FMT_NONE}, -1, INT_MAX, A|D, .unit = "request_sample_fmt"}, {"pkt_timebase", NULL, OFFSET(pkt_timebase), AV_OPT_TYPE_RATIONAL, {.dbl = 0 }, 0, INT_MAX, 0}, {"sub_charenc", "set input text subtitles character encoding", OFFSET(sub_charenc), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, S|D}, -{"sub_charenc_mode", "set input text subtitles character encoding mode", OFFSET(sub_charenc_mode), AV_OPT_TYPE_FLAGS, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, -1, INT_MAX, S|D, "sub_charenc_mode"}, -{"do_nothing", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_DO_NOTHING}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, -{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, -{"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, -{"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, "sub_charenc_mode"}, +{"sub_charenc_mode", "set input text subtitles character encoding mode", OFFSET(sub_charenc_mode), AV_OPT_TYPE_FLAGS, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, -1, INT_MAX, S|D, .unit = "sub_charenc_mode"}, +{"do_nothing", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_DO_NOTHING}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"}, +{"auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_AUTOMATIC}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"}, +{"pre_decoder", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_PRE_DECODER}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"}, +{"ignore", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = FF_SUB_CHARENC_MODE_IGNORE}, INT_MIN, INT_MAX, S|D, .unit = "sub_charenc_mode"}, {"apply_cropping", NULL, OFFSET(apply_cropping), AV_OPT_TYPE_BOOL, { .i64 = 1 }, 0, 1, V | D }, {"skip_alpha", "Skip processing alpha", OFFSET(skip_alpha), AV_OPT_TYPE_BOOL, {.i64 = 0 }, 0, 1, V|D }, -{"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, "field_order" }, -{"progressive", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_PROGRESSIVE }, 0, 0, V|D|E, "field_order" }, -{"tt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TT }, 0, 0, V|D|E, "field_order" }, -{"bb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BB }, 0, 0, V|D|E, "field_order" }, -{"tb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TB }, 0, 0, V|D|E, "field_order" }, -{"bt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BT }, 0, 0, V|D|E, "field_order" }, +{"field_order", "Field order", OFFSET(field_order), AV_OPT_TYPE_INT, {.i64 = AV_FIELD_UNKNOWN }, 0, 5, V|D|E, .unit = "field_order" }, +{"progressive", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_PROGRESSIVE }, 0, 0, V|D|E, .unit = "field_order" }, +{"tt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TT }, 0, 0, V|D|E, .unit = "field_order" }, +{"bb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BB }, 0, 0, V|D|E, .unit = "field_order" }, +{"tb", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_TB }, 0, 0, V|D|E, .unit = "field_order" }, +{"bt", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = AV_FIELD_BT }, 0, 0, V|D|E, .unit = "field_order" }, {"dump_separator", "set information dump field separator", OFFSET(dump_separator), AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, A|V|S|D|E}, {"codec_whitelist", "List of decoders that are allowed to be used", OFFSET(codec_whitelist), AV_OPT_TYPE_STRING, { .str = NULL }, 0, 0, A|V|S|D }, {"pixel_format", "set pixel format", OFFSET(pix_fmt), AV_OPT_TYPE_PIXEL_FMT, {.i64=AV_PIX_FMT_NONE}, -1, INT_MAX, 0 }, {"video_size", "set video size", OFFSET(width), AV_OPT_TYPE_IMAGE_SIZE, {.str=NULL}, 0, INT_MAX, 0 }, {"max_pixels", "Maximum number of pixels", OFFSET(max_pixels), AV_OPT_TYPE_INT64, {.i64 = INT_MAX }, 0, INT_MAX, A|V|S|D|E }, {"max_samples", "Maximum number of samples", OFFSET(max_samples), AV_OPT_TYPE_INT64, {.i64 = INT_MAX }, 0, INT_MAX, A|D|E }, -{"hwaccel_flags", NULL, OFFSET(hwaccel_flags), AV_OPT_TYPE_FLAGS, {.i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, 0, UINT_MAX, V|D, "hwaccel_flags"}, -{"ignore_level", "ignore level even if the codec level used is unknown or higher than the maximum supported level reported by the hardware driver", 0, AV_OPT_TYPE_CONST, { .i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, INT_MIN, INT_MAX, V | D, "hwaccel_flags" }, -{"allow_high_depth", "allow to output YUV pixel formats with a different chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, -{"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, -{"unsafe_output", "allow potentially unsafe hwaccel frame output that might require special care to process successfully", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_UNSAFE_OUTPUT }, INT_MIN, INT_MAX, V | D, "hwaccel_flags"}, +{"hwaccel_flags", NULL, OFFSET(hwaccel_flags), AV_OPT_TYPE_FLAGS, {.i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, 0, UINT_MAX, V|D, .unit = "hwaccel_flags"}, +{"ignore_level", "ignore level even if the codec level used is unknown or higher than the maximum supported level reported by the hardware driver", 0, AV_OPT_TYPE_CONST, { .i64 = AV_HWACCEL_FLAG_IGNORE_LEVEL }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags" }, +{"allow_high_depth", "allow to output YUV pixel formats with a different chroma sampling than 4:2:0 and/or other than 8 bits per component", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_HIGH_DEPTH }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags"}, +{"allow_profile_mismatch", "attempt to decode anyway if HW accelerated decoder's supported profiles do not exactly match the stream", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_ALLOW_PROFILE_MISMATCH }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags"}, +{"unsafe_output", "allow potentially unsafe hwaccel frame output that might require special care to process successfully", 0, AV_OPT_TYPE_CONST, {.i64 = AV_HWACCEL_FLAG_UNSAFE_OUTPUT }, INT_MIN, INT_MAX, V | D, .unit = "hwaccel_flags"}, {"extra_hw_frames", "Number of extra hardware frames to allocate for the user", OFFSET(extra_hw_frames), AV_OPT_TYPE_INT, { .i64 = -1 }, -1, INT_MAX, V|D }, {"discard_damaged_percentage", "Percentage of damaged samples to discard a frame", OFFSET(discard_damaged_percentage), AV_OPT_TYPE_INT, {.i64 = 95 }, 0, 100, V|D }, {NULL}, diff --git a/src/ExtLib/ffmpeg/libavcodec/profiles.h b/src/ExtLib/ffmpeg/libavcodec/profiles.h index 54535e1460..b292edd333 100644 --- a/src/ExtLib/ffmpeg/libavcodec/profiles.h +++ b/src/ExtLib/ffmpeg/libavcodec/profiles.h @@ -23,7 +23,7 @@ #include "libavutil/opt.h" #define FF_AVCTX_PROFILE_OPTION(name, description, type, value) \ - {name, description, 0, AV_OPT_TYPE_CONST, {.i64 = value }, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_## type ##_PARAM, "avctx.profile"}, + {name, description, 0, AV_OPT_TYPE_CONST, {.i64 = value }, INT_MIN, INT_MAX, AV_OPT_FLAG_ENCODING_PARAM | AV_OPT_FLAG_## type ##_PARAM, .unit = "avctx.profile"}, #define FF_AAC_PROFILE_OPTS \ FF_AVCTX_PROFILE_OPTION("aac_main", NULL, AUDIO, AV_PROFILE_AAC_MAIN)\ diff --git a/src/ExtLib/ffmpeg/libavcodec/s302m.c b/src/ExtLib/ffmpeg/libavcodec/s302m.c index f1b41608f3..f8ab0337e2 100644 --- a/src/ExtLib/ffmpeg/libavcodec/s302m.c +++ b/src/ExtLib/ffmpeg/libavcodec/s302m.c @@ -211,11 +211,11 @@ static int s302m_decode_frame(AVCodecContext *avctx, AVFrame *frame, #define FLAGS AV_OPT_FLAG_AUDIO_PARAM|AV_OPT_FLAG_DECODING_PARAM static const AVOption s302m_options[] = { - {"non_pcm_mode", "Chooses what to do with NON-PCM", offsetof(S302Context, non_pcm_mode), AV_OPT_TYPE_INT, {.i64 = 3}, 0, 3, FLAGS, "non_pcm_mode"}, - {"copy" , "Pass NON-PCM through unchanged" , 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 3, FLAGS, "non_pcm_mode"}, - {"drop" , "Drop NON-PCM" , 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 3, FLAGS, "non_pcm_mode"}, - {"decode_copy" , "Decode if possible else passthrough", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 3, FLAGS, "non_pcm_mode"}, - {"decode_drop" , "Decode if possible else drop" , 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 3, FLAGS, "non_pcm_mode"}, + {"non_pcm_mode", "Chooses what to do with NON-PCM", offsetof(S302Context, non_pcm_mode), AV_OPT_TYPE_INT, {.i64 = 3}, 0, 3, FLAGS, .unit = "non_pcm_mode"}, + {"copy" , "Pass NON-PCM through unchanged" , 0, AV_OPT_TYPE_CONST, {.i64 = 0}, 0, 3, FLAGS, .unit = "non_pcm_mode"}, + {"drop" , "Drop NON-PCM" , 0, AV_OPT_TYPE_CONST, {.i64 = 1}, 0, 3, FLAGS, .unit = "non_pcm_mode"}, + {"decode_copy" , "Decode if possible else passthrough", 0, AV_OPT_TYPE_CONST, {.i64 = 2}, 0, 3, FLAGS, .unit = "non_pcm_mode"}, + {"decode_drop" , "Decode if possible else drop" , 0, AV_OPT_TYPE_CONST, {.i64 = 3}, 0, 3, FLAGS, .unit = "non_pcm_mode"}, {NULL} }; diff --git a/src/ExtLib/ffmpeg/libavcodec/tiff.c b/src/ExtLib/ffmpeg/libavcodec/tiff.c index 3ce441aa2c..71cb703821 100644 --- a/src/ExtLib/ffmpeg/libavcodec/tiff.c +++ b/src/ExtLib/ffmpeg/libavcodec/tiff.c @@ -2416,7 +2416,6 @@ static av_cold int tiff_init(AVCodecContext *avctx) return AVERROR(ENOMEM); s->avctx_mjpeg->flags = avctx->flags; s->avctx_mjpeg->flags2 = avctx->flags2; - s->avctx_mjpeg->dct_algo = avctx->dct_algo; s->avctx_mjpeg->idct_algo = avctx->idct_algo; s->avctx_mjpeg->max_pixels = avctx->max_pixels; ret = avcodec_open2(s->avctx_mjpeg, codec, NULL); diff --git a/src/ExtLib/ffmpeg/libavcodec/version.h b/src/ExtLib/ffmpeg/libavcodec/version.h index f2f14eaed1..ecdbc51c74 100644 --- a/src/ExtLib/ffmpeg/libavcodec/version.h +++ b/src/ExtLib/ffmpeg/libavcodec/version.h @@ -30,7 +30,7 @@ #include "version_major.h" #define LIBAVCODEC_VERSION_MINOR 39 -#define LIBAVCODEC_VERSION_MICRO 100 +#define LIBAVCODEC_VERSION_MICRO 101 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c index d166b16a19..36f98f5f2b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.c @@ -2415,8 +2415,8 @@ void ff_vvc_decode_neighbour(VVCLocalContext *lc, const int x_ctb, const int y_c VVCFrameContext *fc = lc->fc; const int ctb_size = fc->ps.sps->ctb_size_y; - lc->end_of_tiles_x = fc->ps.sps->width; - lc->end_of_tiles_y = fc->ps.sps->height; + lc->end_of_tiles_x = fc->ps.pps->width; + lc->end_of_tiles_y = fc->ps.pps->height; if (fc->ps.pps->ctb_to_col_bd[rx] != fc->ps.pps->ctb_to_col_bd[rx + 1]) lc->end_of_tiles_x = FFMIN(x_ctb + ctb_size, lc->end_of_tiles_x); if (fc->ps.pps->ctb_to_row_bd[ry] != fc->ps.pps->ctb_to_row_bd[ry + 1]) diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h index 91b4ed14a1..ab3fac626d 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ctu.h @@ -85,7 +85,7 @@ /** * Value of the luma sample at position (x, y) in the 2D array tab. */ -#define SAMPLE(tab, x, y) ((tab)[(y) * s->sps->width + (x)]) +#define SAMPLE(tab, x, y) ((tab)[(y) * s->pps->width + (x)]) #define SAMPLE_CTB(tab, x, y) ((tab)[(y) * min_cb_width + (x)]) #define CTB(tab, x, y) ((tab)[(y) * fc->ps.pps->ctb_width + (x)]) diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c index cebc02fd9f..df77e443f6 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c @@ -102,8 +102,8 @@ static void copy_ctb_to_hv(VVCFrameContext *fc, const uint8_t *src, const int c_idx, const int x_ctb, const int y_ctb, const int top) { const int ps = fc->ps.sps->pixel_shift; - const int w = fc->ps.sps->width >> fc->ps.sps->hshift[c_idx]; - const int h = fc->ps.sps->height >> fc->ps.sps->vshift[c_idx]; + const int w = fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]; + const int h = fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]; if (top) { /* top */ @@ -133,8 +133,8 @@ static void sao_copy_ctb_to_hv(VVCLocalContext *lc, const int rx, const int ry, const ptrdiff_t src_stride = fc->frame->linesize[c_idx]; const int ctb_size_h = ctb_size_y >> fc->ps.sps->hshift[c_idx]; const int ctb_size_v = ctb_size_y >> fc->ps.sps->vshift[c_idx]; - const int width = FFMIN(ctb_size_h, (fc->ps.sps->width >> fc->ps.sps->hshift[c_idx]) - x); - const int height = FFMIN(ctb_size_v, (fc->ps.sps->height >> fc->ps.sps->vshift[c_idx]) - y); + const int width = FFMIN(ctb_size_h, (fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]) - x); + const int height = FFMIN(ctb_size_v, (fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]) - y); const uint8_t *src = &fc->frame->data[c_idx][y * src_stride + (x << fc->ps.sps->pixel_shift)]; copy_ctb_to_hv(fc, src, src_stride, x, y, width, height, c_idx, rx, ry, top); } @@ -216,8 +216,8 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) ptrdiff_t src_stride = fc->frame->linesize[c_idx]; int ctb_size_h = ctb_size_y >> fc->ps.sps->hshift[c_idx]; int ctb_size_v = ctb_size_y >> fc->ps.sps->vshift[c_idx]; - int width = FFMIN(ctb_size_h, (fc->ps.sps->width >> fc->ps.sps->hshift[c_idx]) - x0); - int height = FFMIN(ctb_size_v, (fc->ps.sps->height >> fc->ps.sps->vshift[c_idx]) - y0); + int width = FFMIN(ctb_size_h, (fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]) - x0); + int height = FFMIN(ctb_size_v, (fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]) - y0); int tab = sao_tab[(FFALIGN(width, 8) >> 3) - 1]; uint8_t *src = &fc->frame->data[c_idx][y0 * src_stride + (x0 << fc->ps.sps->pixel_shift)]; ptrdiff_t dst_stride; @@ -230,8 +230,8 @@ void ff_vvc_sao_filter(VVCLocalContext *lc, int x, int y) break; case SAO_EDGE: { - const int w = fc->ps.sps->width >> fc->ps.sps->hshift[c_idx]; - const int h = fc->ps.sps->height >> fc->ps.sps->vshift[c_idx]; + const int w = fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]; + const int h = fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]; const int sh = fc->ps.sps->pixel_shift; dst_stride = 2*MAX_PB_SIZE + AV_INPUT_BUFFER_PADDING_SIZE; @@ -880,11 +880,11 @@ void ff_vvc_deblock_vertical(const VVCLocalContext *lc, int x0, int y0) vvc_deblock_bs(lc, x0, y0, 1); x_end = x0 + ctb_size; - if (x_end > fc->ps.sps->width) - x_end = fc->ps.sps->width; + if (x_end > fc->ps.pps->width) + x_end = fc->ps.pps->width; y_end = y0 + ctb_size; - if (y_end > fc->ps.sps->height) - y_end = fc->ps.sps->height; + if (y_end > fc->ps.pps->height) + y_end = fc->ps.pps->height; for (int c_idx = 0; c_idx < c_end; c_idx++) { const int hs = sps->hshift[c_idx]; @@ -950,11 +950,11 @@ void ff_vvc_deblock_horizontal(const VVCLocalContext *lc, int x0, int y0) vvc_deblock_bs(lc, x0, y0, 0); x_end = x0 + ctb_size; - if (x_end > fc->ps.sps->width) - x_end = fc->ps.sps->width; + if (x_end > fc->ps.pps->width) + x_end = fc->ps.pps->width; y_end = y0 + ctb_size; - if (y_end > fc->ps.sps->height) - y_end = fc->ps.sps->height; + if (y_end > fc->ps.pps->height) + y_end = fc->ps.pps->height; for (int c_idx = 0; c_idx < c_end; c_idx++) { const int hs = sps->hshift[c_idx]; @@ -1050,8 +1050,8 @@ static void alf_copy_ctb_to_hv(VVCFrameContext *fc, const uint8_t *src, const pt const int x, const int y, const int width, const int height, const int x_ctb, const int y_ctb, const int c_idx) { const int ps = fc->ps.sps->pixel_shift; - const int w = fc->ps.sps->width >> fc->ps.sps->hshift[c_idx]; - const int h = fc->ps.sps->height >> fc->ps.sps->vshift[c_idx]; + const int w = fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]; + const int h = fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]; const int border_pixels = (c_idx == 0) ? ALF_BORDER_LUMA : ALF_BORDER_CHROMA; const int offset_h[] = { 0, height - border_pixels }; const int offset_v[] = { 0, width - border_pixels }; @@ -1107,8 +1107,8 @@ static void alf_prepare_buffer(VVCFrameContext *fc, uint8_t *_dst, const uint8_t const int c_idx, const int *edges) { const int ps = fc->ps.sps->pixel_shift; - const int w = fc->ps.sps->width >> fc->ps.sps->hshift[c_idx]; - const int h = fc->ps.sps->height >> fc->ps.sps->vshift[c_idx]; + const int w = fc->ps.pps->width >> fc->ps.sps->hshift[c_idx]; + const int h = fc->ps.pps->height >> fc->ps.sps->vshift[c_idx]; const int border_pixels = c_idx == 0 ? ALF_BORDER_LUMA : ALF_BORDER_CHROMA; uint8_t *dst, *src; @@ -1241,8 +1241,8 @@ void ff_vvc_alf_copy_ctu_to_hv(VVCLocalContext* lc, const int x0, const int y0) const int vs = fc->ps.sps->vshift[c_idx]; const int x = x0 >> hs; const int y = y0 >> vs; - const int width = FFMIN(fc->ps.sps->width - x0, ctb_size_y) >> hs; - const int height = FFMIN(fc->ps.sps->height - y0, ctb_size_y) >> vs; + const int width = FFMIN(fc->ps.pps->width - x0, ctb_size_y) >> hs; + const int height = FFMIN(fc->ps.pps->height - y0, ctb_size_y) >> vs; const int src_stride = fc->frame->linesize[c_idx]; uint8_t* src = &fc->frame->data[c_idx][y * src_stride + (x << ps)]; @@ -1286,8 +1286,8 @@ void ff_vvc_alf_filter(VVCLocalContext *lc, const int x0, const int y0) const int ctb_size_v = ctb_size_y >> vs; const int x = x0 >> hs; const int y = y0 >> vs; - const int pic_width = fc->ps.sps->width >> hs; - const int pic_height = fc->ps.sps->height >> vs; + const int pic_width = fc->ps.pps->width >> hs; + const int pic_height = fc->ps.pps->height >> vs; const int width = FFMIN(pic_width - x, ctb_size_h); const int height = FFMIN(pic_height - y, ctb_size_v); const int src_stride = fc->frame->linesize[c_idx]; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c index 668730dbbf..2ed05ad2a4 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_mvs.c @@ -226,8 +226,8 @@ static int temporal_luma_motion_vector(const VVCLocalContext *lc, if (tab_mvf && (cu->y0 >> sps->ctb_log2_size_y) == (y >> sps->ctb_log2_size_y) && - y < fc->ps.sps->height && - x < fc->ps.sps->width) { + y < fc->ps.pps->height && + x < fc->ps.pps->width) { x &= ~7; y &= ~7; temp_col = TAB_MVF(x, y); diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c index 77aad720f7..53a86321d6 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c @@ -177,9 +177,6 @@ static int sps_derive(VVCSPS *sps, void *log_ctx) int ret; const H266RawSPS *r = sps->r; - sps->width = r->sps_pic_width_max_in_luma_samples; - sps->height = r->sps_pic_height_max_in_luma_samples; - ret = sps_bit_depth(sps, log_ctx); if (ret < 0) return ret; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h index ede4e74009..3d3aa061f5 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h @@ -59,8 +59,6 @@ typedef struct VVCSPS { const H266RawSPS *r; ///< RefStruct reference //derived values - uint16_t width; - uint16_t height; uint8_t hshift[VVC_MAX_SAMPLE_ARRAYS]; uint8_t vshift[VVC_MAX_SAMPLE_ARRAYS]; uint32_t max_pic_order_cnt_lsb; ///< MaxPicOrderCntLsb diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c index e1895d1cca..99f2dcf3ec 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_refs.c @@ -316,6 +316,7 @@ static void mark_ref(VVCFrame *frame, int flag) static VVCFrame *generate_missing_ref(VVCContext *s, VVCFrameContext *fc, int poc) { const VVCSPS *sps = fc->ps.sps; + const VVCPPS *pps = fc->ps.pps; VVCFrame *frame; frame = alloc_frame(s, fc); @@ -329,10 +330,10 @@ static VVCFrame *generate_missing_ref(VVCContext *s, VVCFrameContext *fc, int po frame->frame->buf[i]->size); } else { for (int i = 0; frame->frame->data[i]; i++) - for (int y = 0; y < (sps->height >> sps->vshift[i]); y++) { + for (int y = 0; y < (pps->height >> sps->vshift[i]); y++) { uint8_t *dst = frame->frame->data[i] + y * frame->frame->linesize[i]; AV_WN16(dst, 1 << (sps->bit_depth - 1)); - av_memcpy_backptr(dst + 2, 2, 2*(sps->width >> sps->hshift[i]) - 2); + av_memcpy_backptr(dst + 2, 2, 2*(pps->width >> sps->hshift[i]) - 2); } } } diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c index a1fb0ec5b1..a06464f95e 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdec.c @@ -594,6 +594,8 @@ static int frame_context_setup(VVCFrameContext *fc, VVCContext *s) { int ret; + fc->ref = NULL; + // copy refs from the last frame if (s->nb_frames && s->nb_fcs > 1) { VVCFrameContext *prev = get_frame_context(s, fc, -1); diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/simple_idct.asm b/src/ExtLib/ffmpeg/libavcodec/x86/simple_idct.asm index 982b2f0bbb..4139b6dab5 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/simple_idct.asm +++ b/src/ExtLib/ffmpeg/libavcodec/x86/simple_idct.asm @@ -845,6 +845,7 @@ INIT_MMX mmx cglobal simple_idct, 1, 2, 8, 128, block, t0 IDCT + emms RET INIT_XMM sse2 diff --git a/src/ExtLib/ffmpeg/libavfilter/af_biquads.c b/src/ExtLib/ffmpeg/libavfilter/af_biquads.c index e465539411..ddca9d8748 100644 --- a/src/ExtLib/ffmpeg/libavfilter/af_biquads.c +++ b/src/ExtLib/ffmpeg/libavfilter/af_biquads.c @@ -1477,13 +1477,13 @@ const AVFilter ff_af_##name_ = { \ {"w", "set width", OFFSET(width), AV_OPT_TYPE_DOUBLE, {.dbl=x}, 0, 99999, FLAGS} #define WIDTH_TYPE_OPTION(x) \ - {"width_type", "set filter-width type", OFFSET(width_type), AV_OPT_TYPE_INT, {.i64=x}, HERTZ, NB_WTYPE-1, FLAGS, "width_type"}, \ - {"t", "set filter-width type", OFFSET(width_type), AV_OPT_TYPE_INT, {.i64=x}, HERTZ, NB_WTYPE-1, FLAGS, "width_type"}, \ - {"h", "Hz", 0, AV_OPT_TYPE_CONST, {.i64=HERTZ}, 0, 0, FLAGS, "width_type"}, \ - {"q", "Q-Factor", 0, AV_OPT_TYPE_CONST, {.i64=QFACTOR}, 0, 0, FLAGS, "width_type"}, \ - {"o", "octave", 0, AV_OPT_TYPE_CONST, {.i64=OCTAVE}, 0, 0, FLAGS, "width_type"}, \ - {"s", "slope", 0, AV_OPT_TYPE_CONST, {.i64=SLOPE}, 0, 0, FLAGS, "width_type"}, \ - {"k", "kHz", 0, AV_OPT_TYPE_CONST, {.i64=KHERTZ}, 0, 0, FLAGS, "width_type"} + {"width_type", "set filter-width type", OFFSET(width_type), AV_OPT_TYPE_INT, {.i64=x}, HERTZ, NB_WTYPE-1, FLAGS, .unit = "width_type"}, \ + {"t", "set filter-width type", OFFSET(width_type), AV_OPT_TYPE_INT, {.i64=x}, HERTZ, NB_WTYPE-1, FLAGS, .unit = "width_type"}, \ + {"h", "Hz", 0, AV_OPT_TYPE_CONST, {.i64=HERTZ}, 0, 0, FLAGS, .unit = "width_type"}, \ + {"q", "Q-Factor", 0, AV_OPT_TYPE_CONST, {.i64=QFACTOR}, 0, 0, FLAGS, .unit = "width_type"}, \ + {"o", "octave", 0, AV_OPT_TYPE_CONST, {.i64=OCTAVE}, 0, 0, FLAGS, .unit = "width_type"}, \ + {"s", "slope", 0, AV_OPT_TYPE_CONST, {.i64=SLOPE}, 0, 0, FLAGS, .unit = "width_type"}, \ + {"k", "kHz", 0, AV_OPT_TYPE_CONST, {.i64=KHERTZ}, 0, 0, FLAGS, .unit = "width_type"} #define MIX_CHANNELS_NORMALIZE_OPTION(x, y, z) \ {"mix", "set mix", OFFSET(mix), AV_OPT_TYPE_DOUBLE, {.dbl=x}, 0, 1, FLAGS}, \ @@ -1494,24 +1494,24 @@ const AVFilter ff_af_##name_ = { \ {"n", "normalize coefficients", OFFSET(normalize), AV_OPT_TYPE_BOOL, {.i64=z}, 0, 1, FLAGS} #define TRANSFORM_OPTION(x) \ - {"transform", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=x}, 0, NB_TTYPE-1, AF, "transform_type"}, \ - {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=x}, 0, NB_TTYPE-1, AF, "transform_type"}, \ - {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, "transform_type"}, \ - {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, "transform_type"}, \ - {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, "transform_type"}, \ - {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, "transform_type"}, \ - {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, "transform_type"}, \ - {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, "transform_type"}, \ - {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, "transform_type"} + {"transform", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=x}, 0, NB_TTYPE-1, AF, .unit = "transform_type"}, \ + {"a", "set transform type", OFFSET(transform_type), AV_OPT_TYPE_INT, {.i64=x}, 0, NB_TTYPE-1, AF, .unit = "transform_type"}, \ + {"di", "direct form I", 0, AV_OPT_TYPE_CONST, {.i64=DI}, 0, 0, AF, .unit = "transform_type"}, \ + {"dii", "direct form II", 0, AV_OPT_TYPE_CONST, {.i64=DII}, 0, 0, AF, .unit = "transform_type"}, \ + {"tdi", "transposed direct form I", 0, AV_OPT_TYPE_CONST, {.i64=TDI}, 0, 0, AF, .unit = "transform_type"}, \ + {"tdii", "transposed direct form II", 0, AV_OPT_TYPE_CONST, {.i64=TDII}, 0, 0, AF, .unit = "transform_type"}, \ + {"latt", "lattice-ladder form", 0, AV_OPT_TYPE_CONST, {.i64=LATT}, 0, 0, AF, .unit = "transform_type"}, \ + {"svf", "state variable filter form", 0, AV_OPT_TYPE_CONST, {.i64=SVF}, 0, 0, AF, .unit = "transform_type"}, \ + {"zdf", "zero-delay filter form", 0, AV_OPT_TYPE_CONST, {.i64=ZDF}, 0, 0, AF, .unit = "transform_type"} #define PRECISION_OPTION(x) \ - {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=x}, -1, 3, AF, "precision"}, \ - {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=x}, -1, 3, AF, "precision"}, \ - {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, "precision"}, \ - {"s16", "signed 16-bit", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, "precision"}, \ - {"s32", "signed 32-bit", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, "precision"}, \ - {"f32", "floating-point single", 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, AF, "precision"}, \ - {"f64", "floating-point double", 0, AV_OPT_TYPE_CONST, {.i64=3}, 0, 0, AF, "precision"} + {"precision", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=x}, -1, 3, AF, .unit = "precision"}, \ + {"r", "set filtering precision", OFFSET(precision), AV_OPT_TYPE_INT, {.i64=x}, -1, 3, AF, .unit = "precision"}, \ + {"auto", "automatic", 0, AV_OPT_TYPE_CONST, {.i64=-1}, 0, 0, AF, .unit = "precision"}, \ + {"s16", "signed 16-bit", 0, AV_OPT_TYPE_CONST, {.i64=0}, 0, 0, AF, .unit = "precision"}, \ + {"s32", "signed 32-bit", 0, AV_OPT_TYPE_CONST, {.i64=1}, 0, 0, AF, .unit = "precision"}, \ + {"f32", "floating-point single", 0, AV_OPT_TYPE_CONST, {.i64=2}, 0, 0, AF, .unit = "precision"}, \ + {"f64", "floating-point double", 0, AV_OPT_TYPE_CONST, {.i64=3}, 0, 0, AF, .unit = "precision"} #define BLOCKSIZE_OPTION(x) \ {"blocksize", "set the block size", OFFSET(block_samples), AV_OPT_TYPE_INT, {.i64=x}, 0, 32768, AF}, \ diff --git a/src/ExtLib/ffmpeg/libavfilter/avfilter.c b/src/ExtLib/ffmpeg/libavfilter/avfilter.c index 31300bb515..9fe249f3f9 100644 --- a/src/ExtLib/ffmpeg/libavfilter/avfilter.c +++ b/src/ExtLib/ffmpeg/libavfilter/avfilter.c @@ -34,15 +34,14 @@ #include "libavutil/rational.h" #include "libavutil/samplefmt.h" -#define FF_INTERNAL_FIELDS 1 -#include "framequeue.h" - #include "audio.h" #include "avfilter.h" #include "filters.h" #include "formats.h" +#include "framequeue.h" #include "framepool.h" #include "internal.h" +#include "link_internal.h" #include "video.h" static void tlog_ref(void *ctx, AVFrame *ref, int end) @@ -149,6 +148,7 @@ int ff_append_outpad_free_name(AVFilterContext *f, AVFilterPad *p) int avfilter_link(AVFilterContext *src, unsigned srcpad, AVFilterContext *dst, unsigned dstpad) { + FilterLinkInternal *li; AVFilterLink *link; av_assert0(src->graph); @@ -172,9 +172,10 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, return AVERROR(EINVAL); } - link = av_mallocz(sizeof(*link)); - if (!link) + li = av_mallocz(sizeof(*li)); + if (!li) return AVERROR(ENOMEM); + link = &li->l; src->outputs[srcpad] = dst->inputs[dstpad] = link; @@ -186,17 +187,20 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, av_assert0(AV_PIX_FMT_NONE == -1 && AV_SAMPLE_FMT_NONE == -1); link->format = -1; link->colorspace = AVCOL_SPC_UNSPECIFIED; - ff_framequeue_init(&link->fifo, &src->graph->internal->frame_queues); + ff_framequeue_init(&li->fifo, &src->graph->internal->frame_queues); return 0; } void avfilter_link_free(AVFilterLink **link) { + FilterLinkInternal *li; + if (!*link) return; + li = ff_link_internal(*link); - ff_framequeue_free(&(*link)->fifo); + ff_framequeue_free(&li->fifo); ff_frame_pool_uninit((FFFramePool**)&(*link)->frame_pool); av_channel_layout_uninit(&(*link)->ch_layout); @@ -227,20 +231,24 @@ static void filter_unblock(AVFilterContext *filter) { unsigned i; - for (i = 0; i < filter->nb_outputs; i++) - filter->outputs[i]->frame_blocked_in = 0; + for (i = 0; i < filter->nb_outputs; i++) { + FilterLinkInternal * const li = ff_link_internal(filter->outputs[i]); + li->frame_blocked_in = 0; + } } void ff_avfilter_link_set_in_status(AVFilterLink *link, int status, int64_t pts) { - if (link->status_in == status) + FilterLinkInternal * const li = ff_link_internal(link); + + if (li->status_in == status) return; - av_assert0(!link->status_in); - link->status_in = status; - link->status_in_pts = pts; + av_assert0(!li->status_in); + li->status_in = status; + li->status_in_pts = pts; link->frame_wanted_out = 0; - link->frame_blocked_in = 0; + li->frame_blocked_in = 0; filter_unblock(link->dst); ff_filter_set_ready(link->dst, 200); } @@ -251,9 +259,11 @@ void ff_avfilter_link_set_in_status(AVFilterLink *link, int status, int64_t pts) */ static void link_set_out_status(AVFilterLink *link, int status, int64_t pts) { + FilterLinkInternal * const li = ff_link_internal(link); + av_assert0(!link->frame_wanted_out); - av_assert0(!link->status_out); - link->status_out = status; + av_assert0(!li->status_out); + li->status_out = status; if (pts != AV_NOPTS_VALUE) update_link_current_pts(link, pts); filter_unblock(link->dst); @@ -437,13 +447,15 @@ void ff_tlog_link(void *ctx, AVFilterLink *link, int end) int ff_request_frame(AVFilterLink *link) { + FilterLinkInternal * const li = ff_link_internal(link); + FF_TPRINTF_START(NULL, request_frame); ff_tlog_link(NULL, link, 1); av_assert1(!link->dst->filter->activate); - if (link->status_out) - return link->status_out; - if (link->status_in) { - if (ff_framequeue_queued_frames(&link->fifo)) { + if (li->status_out) + return li->status_out; + if (li->status_in) { + if (ff_framequeue_queued_frames(&li->fifo)) { av_assert1(!link->frame_wanted_out); av_assert1(link->dst->ready >= 300); return 0; @@ -451,8 +463,8 @@ int ff_request_frame(AVFilterLink *link) /* Acknowledge status change. Filters using ff_request_frame() will handle the change automatically. Filters can also check the status directly but none do yet. */ - link_set_out_status(link, link->status_in, link->status_in_pts); - return link->status_out; + link_set_out_status(link, li->status_in, li->status_in_pts); + return li->status_out; } } link->frame_wanted_out = 1; @@ -465,14 +477,18 @@ static int64_t guess_status_pts(AVFilterContext *ctx, int status, AVRational lin unsigned i; int64_t r = INT64_MAX; - for (i = 0; i < ctx->nb_inputs; i++) - if (ctx->inputs[i]->status_out == status) + for (i = 0; i < ctx->nb_inputs; i++) { + FilterLinkInternal * const li = ff_link_internal(ctx->inputs[i]); + if (li->status_out == status) r = FFMIN(r, av_rescale_q(ctx->inputs[i]->current_pts, ctx->inputs[i]->time_base, link_time_base)); + } if (r < INT64_MAX) return r; av_log(ctx, AV_LOG_WARNING, "EOF timestamp not reliable\n"); - for (i = 0; i < ctx->nb_inputs; i++) - r = FFMIN(r, av_rescale_q(ctx->inputs[i]->status_in_pts, ctx->inputs[i]->time_base, link_time_base)); + for (i = 0; i < ctx->nb_inputs; i++) { + FilterLinkInternal * const li = ff_link_internal(ctx->inputs[i]); + r = FFMIN(r, av_rescale_q(li->status_in_pts, ctx->inputs[i]->time_base, link_time_base)); + } if (r < INT64_MAX) return r; return AV_NOPTS_VALUE; @@ -480,17 +496,18 @@ static int64_t guess_status_pts(AVFilterContext *ctx, int status, AVRational lin static int ff_request_frame_to_filter(AVFilterLink *link) { + FilterLinkInternal * const li = ff_link_internal(link); int ret = -1; FF_TPRINTF_START(NULL, request_frame_to_filter); ff_tlog_link(NULL, link, 1); /* Assume the filter is blocked, let the method clear it if not */ - link->frame_blocked_in = 1; + li->frame_blocked_in = 1; if (link->srcpad->request_frame) ret = link->srcpad->request_frame(link); else if (link->src->inputs[0]) ret = ff_request_frame(link->src->inputs[0]); if (ret < 0) { - if (ret != AVERROR(EAGAIN) && ret != link->status_in) + if (ret != AVERROR(EAGAIN) && ret != li->status_in) ff_avfilter_link_set_in_status(link, ret, guess_status_pts(link->src, ret, link->time_base)); if (ret == AVERROR_EOF) ret = 0; @@ -616,7 +633,7 @@ static const AVClass *filter_child_class_iterate(void **iter) #define TFLAGS AV_OPT_FLAG_FILTERING_PARAM|AV_OPT_FLAG_RUNTIME_PARAM static const AVOption avfilter_options[] = { { "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, - { .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, FLAGS, "thread_type" }, + { .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, FLAGS, .unit = "thread_type" }, { "slice", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVFILTER_THREAD_SLICE }, .flags = FLAGS, .unit = "thread_type" }, { "enable", "set enable expression", OFFSET(enable_str), AV_OPT_TYPE_STRING, {.str=NULL}, .flags = TFLAGS }, { "threads", "Allowed number of threads", OFFSET(nb_threads), AV_OPT_TYPE_INT, @@ -988,6 +1005,7 @@ static int ff_filter_frame_framed(AVFilterLink *link, AVFrame *frame) int ff_filter_frame(AVFilterLink *link, AVFrame *frame) { + FilterLinkInternal * const li = ff_link_internal(link); int ret; FF_TPRINTF_START(NULL, filter_frame); ff_tlog_link(NULL, link, 1); ff_tlog(NULL, " "); tlog_ref(NULL, frame, 1); @@ -1027,11 +1045,11 @@ FF_ENABLE_DEPRECATION_WARNINGS #endif } - link->frame_blocked_in = link->frame_wanted_out = 0; + li->frame_blocked_in = link->frame_wanted_out = 0; link->frame_count_in++; link->sample_count_in += frame->nb_samples; filter_unblock(link->dst); - ret = ff_framequeue_add(&link->fifo, frame); + ret = ff_framequeue_add(&li->fifo, frame); if (ret < 0) { av_frame_free(&frame); return ret; @@ -1044,26 +1062,27 @@ FF_ENABLE_DEPRECATION_WARNINGS return AVERROR_PATCHWELCOME; } -static int samples_ready(AVFilterLink *link, unsigned min) +static int samples_ready(FilterLinkInternal *link, unsigned min) { return ff_framequeue_queued_frames(&link->fifo) && (ff_framequeue_queued_samples(&link->fifo) >= min || link->status_in); } -static int take_samples(AVFilterLink *link, unsigned min, unsigned max, +static int take_samples(FilterLinkInternal *li, unsigned min, unsigned max, AVFrame **rframe) { + AVFilterLink *link = &li->l; AVFrame *frame0, *frame, *buf; unsigned nb_samples, nb_frames, i, p; int ret; /* Note: this function relies on no format changes and must only be called with enough samples. */ - av_assert1(samples_ready(link, link->min_samples)); - frame0 = frame = ff_framequeue_peek(&link->fifo, 0); - if (!link->fifo.samples_skipped && frame->nb_samples >= min && frame->nb_samples <= max) { - *rframe = ff_framequeue_take(&link->fifo); + av_assert1(samples_ready(li, link->min_samples)); + frame0 = frame = ff_framequeue_peek(&li->fifo, 0); + if (!li->fifo.samples_skipped && frame->nb_samples >= min && frame->nb_samples <= max) { + *rframe = ff_framequeue_take(&li->fifo); return 0; } nb_frames = 0; @@ -1076,9 +1095,9 @@ static int take_samples(AVFilterLink *link, unsigned min, unsigned max, } nb_samples += frame->nb_samples; nb_frames++; - if (nb_frames == ff_framequeue_queued_frames(&link->fifo)) + if (nb_frames == ff_framequeue_queued_frames(&li->fifo)) break; - frame = ff_framequeue_peek(&link->fifo, nb_frames); + frame = ff_framequeue_peek(&li->fifo, nb_frames); } buf = ff_get_audio_buffer(link, nb_samples); @@ -1092,7 +1111,7 @@ static int take_samples(AVFilterLink *link, unsigned min, unsigned max, p = 0; for (i = 0; i < nb_frames; i++) { - frame = ff_framequeue_take(&link->fifo); + frame = ff_framequeue_take(&li->fifo); av_samples_copy(buf->extended_data, frame->extended_data, p, 0, frame->nb_samples, link->ch_layout.nb_channels, link->format); p += frame->nb_samples; @@ -1100,10 +1119,10 @@ static int take_samples(AVFilterLink *link, unsigned min, unsigned max, } if (p < nb_samples) { unsigned n = nb_samples - p; - frame = ff_framequeue_peek(&link->fifo, 0); + frame = ff_framequeue_peek(&li->fifo, 0); av_samples_copy(buf->extended_data, frame->extended_data, p, 0, n, link->ch_layout.nb_channels, link->format); - ff_framequeue_skip_samples(&link->fifo, n, link->time_base); + ff_framequeue_skip_samples(&li->fifo, n, link->time_base); } *rframe = buf; @@ -1112,11 +1131,12 @@ static int take_samples(AVFilterLink *link, unsigned min, unsigned max, static int ff_filter_frame_to_filter(AVFilterLink *link) { + FilterLinkInternal * const li = ff_link_internal(link); AVFrame *frame = NULL; AVFilterContext *dst = link->dst; int ret; - av_assert1(ff_framequeue_queued_frames(&link->fifo)); + av_assert1(ff_framequeue_queued_frames(&li->fifo)); ret = link->min_samples ? ff_inlink_consume_samples(link, link->min_samples, link->max_samples, &frame) : ff_inlink_consume_frame(link, &frame); @@ -1132,7 +1152,7 @@ static int ff_filter_frame_to_filter(AVFilterLink *link) before the frame; ff_filter_frame_framed() will re-increment it. */ link->frame_count_out--; ret = ff_filter_frame_framed(link, frame); - if (ret < 0 && ret != link->status_out) { + if (ret < 0 && ret != li->status_out) { link_set_out_status(link, ret, AV_NOPTS_VALUE); } else { /* Run once again, to see if several frames were available, or if @@ -1142,18 +1162,21 @@ static int ff_filter_frame_to_filter(AVFilterLink *link) return ret; } -static int forward_status_change(AVFilterContext *filter, AVFilterLink *in) +static int forward_status_change(AVFilterContext *filter, FilterLinkInternal *li_in) { + AVFilterLink *in = &li_in->l; unsigned out = 0, progress = 0; int ret; - av_assert0(!in->status_out); + av_assert0(!li_in->status_out); if (!filter->nb_outputs) { /* not necessary with the current API and sinks */ return 0; } - while (!in->status_out) { - if (!filter->outputs[out]->status_in) { + while (!li_in->status_out) { + FilterLinkInternal *li_out = ff_link_internal(filter->outputs[out]); + + if (!li_out->status_in) { progress++; ret = ff_request_frame_to_filter(filter->outputs[out]); if (ret < 0) @@ -1163,7 +1186,7 @@ static int forward_status_change(AVFilterContext *filter, AVFilterLink *in) if (!progress) { /* Every output already closed: input no longer interesting (example: overlay in shortest mode, other input closed). */ - link_set_out_status(in, in->status_in, in->status_in_pts); + link_set_out_status(in, li_in->status_in, li_in->status_in_pts); return 0; } progress = 0; @@ -1179,7 +1202,8 @@ static int ff_filter_activate_default(AVFilterContext *filter) unsigned i; for (i = 0; i < filter->nb_outputs; i++) { - int ret = filter->outputs[i]->status_in; + FilterLinkInternal *li = ff_link_internal(filter->outputs[i]); + int ret = li->status_in; if (ret) { for (int j = 0; j < filter->nb_inputs; j++) @@ -1189,19 +1213,22 @@ static int ff_filter_activate_default(AVFilterContext *filter) } for (i = 0; i < filter->nb_inputs; i++) { - if (samples_ready(filter->inputs[i], filter->inputs[i]->min_samples)) { + if (samples_ready(ff_link_internal(filter->inputs[i]), + filter->inputs[i]->min_samples)) { return ff_filter_frame_to_filter(filter->inputs[i]); } } for (i = 0; i < filter->nb_inputs; i++) { - if (filter->inputs[i]->status_in && !filter->inputs[i]->status_out) { - av_assert1(!ff_framequeue_queued_frames(&filter->inputs[i]->fifo)); - return forward_status_change(filter, filter->inputs[i]); + FilterLinkInternal * const li = ff_link_internal(filter->inputs[i]); + if (li->status_in && !li->status_out) { + av_assert1(!ff_framequeue_queued_frames(&li->fifo)); + return forward_status_change(filter, li); } } for (i = 0; i < filter->nb_outputs; i++) { + FilterLinkInternal * const li = ff_link_internal(filter->outputs[i]); if (filter->outputs[i]->frame_wanted_out && - !filter->outputs[i]->frame_blocked_in) { + !li->frame_blocked_in) { return ff_request_frame_to_filter(filter->outputs[i]); } } @@ -1357,39 +1384,44 @@ int ff_filter_activate(AVFilterContext *filter) int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts) { + FilterLinkInternal * const li = ff_link_internal(link); *rpts = link->current_pts; - if (ff_framequeue_queued_frames(&link->fifo)) + if (ff_framequeue_queued_frames(&li->fifo)) return *rstatus = 0; - if (link->status_out) - return *rstatus = link->status_out; - if (!link->status_in) + if (li->status_out) + return *rstatus = li->status_out; + if (!li->status_in) return *rstatus = 0; - *rstatus = link->status_out = link->status_in; - update_link_current_pts(link, link->status_in_pts); + *rstatus = li->status_out = li->status_in; + update_link_current_pts(link, li->status_in_pts); *rpts = link->current_pts; return 1; } size_t ff_inlink_queued_frames(AVFilterLink *link) { - return ff_framequeue_queued_frames(&link->fifo); + FilterLinkInternal * const li = ff_link_internal(link); + return ff_framequeue_queued_frames(&li->fifo); } int ff_inlink_check_available_frame(AVFilterLink *link) { - return ff_framequeue_queued_frames(&link->fifo) > 0; + FilterLinkInternal * const li = ff_link_internal(link); + return ff_framequeue_queued_frames(&li->fifo) > 0; } int ff_inlink_queued_samples(AVFilterLink *link) { - return ff_framequeue_queued_samples(&link->fifo); + FilterLinkInternal * const li = ff_link_internal(link); + return ff_framequeue_queued_samples(&li->fifo); } int ff_inlink_check_available_samples(AVFilterLink *link, unsigned min) { - uint64_t samples = ff_framequeue_queued_samples(&link->fifo); + FilterLinkInternal * const li = ff_link_internal(link); + uint64_t samples = ff_framequeue_queued_samples(&li->fifo); av_assert1(min); - return samples >= min || (link->status_in && samples); + return samples >= min || (li->status_in && samples); } static void consume_update(AVFilterLink *link, const AVFrame *frame) @@ -1403,18 +1435,19 @@ static void consume_update(AVFilterLink *link, const AVFrame *frame) int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe) { + FilterLinkInternal * const li = ff_link_internal(link); AVFrame *frame; *rframe = NULL; if (!ff_inlink_check_available_frame(link)) return 0; - if (link->fifo.samples_skipped) { - frame = ff_framequeue_peek(&link->fifo, 0); + if (li->fifo.samples_skipped) { + frame = ff_framequeue_peek(&li->fifo, 0); return ff_inlink_consume_samples(link, frame->nb_samples, frame->nb_samples, rframe); } - frame = ff_framequeue_take(&link->fifo); + frame = ff_framequeue_take(&li->fifo); consume_update(link, frame); *rframe = frame; return 1; @@ -1423,6 +1456,7 @@ int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe) int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, AVFrame **rframe) { + FilterLinkInternal * const li = ff_link_internal(link); AVFrame *frame; int ret; @@ -1430,9 +1464,9 @@ int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, *rframe = NULL; if (!ff_inlink_check_available_samples(link, min)) return 0; - if (link->status_in) - min = FFMIN(min, ff_framequeue_queued_samples(&link->fifo)); - ret = take_samples(link, min, max, &frame); + if (li->status_in) + min = FFMIN(min, ff_framequeue_queued_samples(&li->fifo)); + ret = take_samples(li, min, max, &frame); if (ret < 0) return ret; consume_update(link, frame); @@ -1442,7 +1476,8 @@ int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, AVFrame *ff_inlink_peek_frame(AVFilterLink *link, size_t idx) { - return ff_framequeue_peek(&link->fifo, idx); + FilterLinkInternal * const li = ff_link_internal(link); + return ff_framequeue_peek(&li->fifo, idx); } int ff_inlink_make_frame_writable(AVFilterLink *link, AVFrame **rframe) @@ -1526,37 +1561,41 @@ FF_ENABLE_DEPRECATION_WARNINGS void ff_inlink_request_frame(AVFilterLink *link) { - av_assert1(!link->status_in); - av_assert1(!link->status_out); + FilterLinkInternal *li = ff_link_internal(link); + av_assert1(!li->status_in); + av_assert1(!li->status_out); link->frame_wanted_out = 1; ff_filter_set_ready(link->src, 100); } void ff_inlink_set_status(AVFilterLink *link, int status) { - if (link->status_out) + FilterLinkInternal * const li = ff_link_internal(link); + if (li->status_out) return; link->frame_wanted_out = 0; - link->frame_blocked_in = 0; + li->frame_blocked_in = 0; link_set_out_status(link, status, AV_NOPTS_VALUE); - while (ff_framequeue_queued_frames(&link->fifo)) { - AVFrame *frame = ff_framequeue_take(&link->fifo); + while (ff_framequeue_queued_frames(&li->fifo)) { + AVFrame *frame = ff_framequeue_take(&li->fifo); av_frame_free(&frame); } - if (!link->status_in) - link->status_in = status; + if (!li->status_in) + li->status_in = status; } int ff_outlink_get_status(AVFilterLink *link) { - return link->status_in; + FilterLinkInternal * const li = ff_link_internal(link); + return li->status_in; } int ff_inoutlink_check_flow(AVFilterLink *inlink, AVFilterLink *outlink) { + FilterLinkInternal * const li_in = ff_link_internal(inlink); return ff_outlink_frame_wanted(outlink) || ff_inlink_check_available_frame(inlink) || - inlink->status_out; + li_in->status_out; } diff --git a/src/ExtLib/ffmpeg/libavfilter/avfilter.h b/src/ExtLib/ffmpeg/libavfilter/avfilter.h index 246d000251..b5346f40ab 100644 --- a/src/ExtLib/ffmpeg/libavfilter/avfilter.h +++ b/src/ExtLib/ffmpeg/libavfilter/avfilter.h @@ -695,51 +695,6 @@ struct AVFilterLink { * AVHWFramesContext describing the frames. */ AVBufferRef *hw_frames_ctx; - -#ifndef FF_INTERNAL_FIELDS - - /** - * Internal structure members. - * The fields below this limit are internal for libavfilter's use - * and must in no way be accessed by applications. - */ - char reserved[0xF000]; - -#else /* FF_INTERNAL_FIELDS */ - - /** - * Queue of frames waiting to be filtered. - */ - FFFrameQueue fifo; - - /** - * If set, the source filter can not generate a frame as is. - * The goal is to avoid repeatedly calling the request_frame() method on - * the same link. - */ - int frame_blocked_in; - - /** - * Link input status. - * If not zero, all attempts of filter_frame will fail with the - * corresponding code. - */ - int status_in; - - /** - * Timestamp of the input status change. - */ - int64_t status_in_pts; - - /** - * Link output status. - * If not zero, all attempts of request_frame will fail with the - * corresponding code. - */ - int status_out; - -#endif /* FF_INTERNAL_FIELDS */ - }; /** diff --git a/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c b/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c index e4f59f56e2..ea0d7713e3 100644 --- a/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c +++ b/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c @@ -32,13 +32,13 @@ #include "libavutil/opt.h" #include "libavutil/pixdesc.h" -#define FF_INTERNAL_FIELDS 1 -#include "framequeue.h" #include "avfilter.h" #include "buffersink.h" #include "formats.h" +#include "framequeue.h" #include "internal.h" +#include "link_internal.h" #include "thread.h" #define OFFSET(x) offsetof(AVFilterGraph, x) @@ -47,10 +47,10 @@ #define A AV_OPT_FLAG_AUDIO_PARAM static const AVOption filtergraph_options[] = { { "thread_type", "Allowed thread types", OFFSET(thread_type), AV_OPT_TYPE_FLAGS, - { .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, F|V|A, "thread_type" }, + { .i64 = AVFILTER_THREAD_SLICE }, 0, INT_MAX, F|V|A, .unit = "thread_type" }, { "slice", NULL, 0, AV_OPT_TYPE_CONST, { .i64 = AVFILTER_THREAD_SLICE }, .flags = F|V|A, .unit = "thread_type" }, { "threads", "Maximum number of threads", OFFSET(nb_threads), AV_OPT_TYPE_INT, - { .i64 = 0 }, 0, INT_MAX, F|V|A, "threads"}, + { .i64 = 0 }, 0, INT_MAX, F|V|A, .unit = "threads"}, {"auto", "autodetect a suitable number of threads to use", 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags = F|V|A, .unit = "threads"}, {"scale_sws_opts" , "default scale filter options" , OFFSET(scale_sws_opts) , AV_OPT_TYPE_STRING, {.str = NULL}, 0, 0, F|V }, @@ -1483,10 +1483,11 @@ int avfilter_graph_request_oldest(AVFilterGraph *graph) av_assert1(oldest->age_index >= 0); frame_count = oldest->frame_count_out; while (frame_count == oldest->frame_count_out) { + FilterLinkInternal * const li = ff_link_internal(oldest); r = ff_filter_graph_run_once(graph); if (r == AVERROR(EAGAIN) && - !oldest->frame_wanted_out && !oldest->frame_blocked_in && - !oldest->status_in) + !oldest->frame_wanted_out && !li->frame_blocked_in && + !li->status_in) ff_request_frame(oldest); else if (r < 0) return r; diff --git a/src/ExtLib/ffmpeg/libavfilter/buffersink.c b/src/ExtLib/ffmpeg/libavfilter/buffersink.c index af7f8ab58a..b0359280b6 100644 --- a/src/ExtLib/ffmpeg/libavfilter/buffersink.c +++ b/src/ExtLib/ffmpeg/libavfilter/buffersink.c @@ -30,15 +30,14 @@ #include "libavutil/internal.h" #include "libavutil/opt.h" -#define FF_INTERNAL_FIELDS 1 -#include "framequeue.h" - #include "audio.h" #include "avfilter.h" #include "buffersink.h" #include "filters.h" #include "formats.h" +#include "framequeue.h" #include "internal.h" +#include "link_internal.h" #include "video.h" typedef struct BufferSinkContext { @@ -178,9 +177,10 @@ static void uninit(AVFilterContext *ctx) static int activate(AVFilterContext *ctx) { BufferSinkContext *buf = ctx->priv; + FilterLinkInternal * const li = ff_link_internal(ctx->inputs[0]); if (buf->warning_limit && - ff_framequeue_queued_frames(&ctx->inputs[0]->fifo) >= buf->warning_limit) { + ff_framequeue_queued_frames(&li->fifo) >= buf->warning_limit) { av_log(ctx, AV_LOG_WARNING, "%d buffers queued in %s, something may be wrong.\n", buf->warning_limit, diff --git a/src/ExtLib/ffmpeg/libavfilter/buffersrc.c b/src/ExtLib/ffmpeg/libavfilter/buffersrc.c index a6a000df1e..5a4eabc716 100644 --- a/src/ExtLib/ffmpeg/libavfilter/buffersrc.c +++ b/src/ExtLib/ffmpeg/libavfilter/buffersrc.c @@ -362,30 +362,30 @@ static const AVOption buffer_options[] = { { "pixel_aspect", "sample aspect ratio", OFFSET(pixel_aspect), AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V }, { "time_base", NULL, OFFSET(time_base), AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V }, { "frame_rate", NULL, OFFSET(frame_rate), AV_OPT_TYPE_RATIONAL, { .dbl = 0 }, 0, DBL_MAX, V }, - { "colorspace", "select colorspace", OFFSET(color_space), AV_OPT_TYPE_INT, {.i64=AVCOL_SPC_UNSPECIFIED}, 0, AVCOL_SPC_NB-1, V, "colorspace"}, - { "gbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_RGB}, INT_MIN, INT_MAX, V, "colorspace"}, - { "bt709", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT709}, INT_MIN, INT_MAX, V, "colorspace"}, - { "unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_UNSPECIFIED}, INT_MIN, INT_MAX, V, "colorspace"}, - { "fcc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_FCC}, INT_MIN, INT_MAX, V, "colorspace"}, - { "bt470bg", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT470BG}, INT_MIN, INT_MAX, V, "colorspace"}, - { "smpte170m", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE170M}, INT_MIN, INT_MAX, V, "colorspace"}, - { "smpte240m", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE240M}, INT_MIN, INT_MAX, V, "colorspace"}, - { "ycgco", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_YCGCO}, INT_MIN, INT_MAX, V, "colorspace"}, - { "bt2020nc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT2020_NCL}, INT_MIN, INT_MAX, V, "colorspace"}, - { "bt2020c", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT2020_CL}, INT_MIN, INT_MAX, V, "colorspace"}, - { "smpte2085", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE2085}, INT_MIN, INT_MAX, V, "colorspace"}, - { "chroma-derived-nc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_CHROMA_DERIVED_NCL},INT_MIN, INT_MAX, V, "colorspace"}, - { "chroma-derived-c", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_CHROMA_DERIVED_CL}, INT_MIN, INT_MAX, V, "colorspace"}, - { "ictcp", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_ICTCP}, INT_MIN, INT_MAX, V, "colorspace"}, - { "range", "select color range", OFFSET(color_range), AV_OPT_TYPE_INT, {.i64=AVCOL_RANGE_UNSPECIFIED}, 0, AVCOL_RANGE_NB-1, V, "range"}, - { "unspecified", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_UNSPECIFIED}, 0, 0, V, "range"}, - { "unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_UNSPECIFIED}, 0, 0, V, "range"}, - { "limited", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG}, 0, 0, V, "range"}, - { "tv", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG}, 0, 0, V, "range"}, - { "mpeg", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG}, 0, 0, V, "range"}, - { "full", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, V, "range"}, - { "pc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, V, "range"}, - { "jpeg", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, V, "range"}, + { "colorspace", "select colorspace", OFFSET(color_space), AV_OPT_TYPE_INT, {.i64=AVCOL_SPC_UNSPECIFIED}, 0, AVCOL_SPC_NB-1, V, .unit = "colorspace"}, + { "gbr", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_RGB}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "bt709", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT709}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_UNSPECIFIED}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "fcc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_FCC}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "bt470bg", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT470BG}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "smpte170m", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE170M}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "smpte240m", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE240M}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "ycgco", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_YCGCO}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "bt2020nc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT2020_NCL}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "bt2020c", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_BT2020_CL}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "smpte2085", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_SMPTE2085}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "chroma-derived-nc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_CHROMA_DERIVED_NCL},INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "chroma-derived-c", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_CHROMA_DERIVED_CL}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "ictcp", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_SPC_ICTCP}, INT_MIN, INT_MAX, V, .unit = "colorspace"}, + { "range", "select color range", OFFSET(color_range), AV_OPT_TYPE_INT, {.i64=AVCOL_RANGE_UNSPECIFIED}, 0, AVCOL_RANGE_NB-1, V, .unit = "range"}, + { "unspecified", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_UNSPECIFIED}, 0, 0, V, .unit = "range"}, + { "unknown", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_UNSPECIFIED}, 0, 0, V, .unit = "range"}, + { "limited", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG}, 0, 0, V, .unit = "range"}, + { "tv", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG}, 0, 0, V, .unit = "range"}, + { "mpeg", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_MPEG}, 0, 0, V, .unit = "range"}, + { "full", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, V, .unit = "range"}, + { "pc", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, V, .unit = "range"}, + { "jpeg", NULL, 0, AV_OPT_TYPE_CONST, {.i64=AVCOL_RANGE_JPEG}, 0, 0, V, .unit = "range"}, { NULL }, }; diff --git a/src/ExtLib/ffmpeg/libavfilter/link_internal.h b/src/ExtLib/ffmpeg/libavfilter/link_internal.h new file mode 100644 index 0000000000..b5a8ac89ec --- /dev/null +++ b/src/ExtLib/ffmpeg/libavfilter/link_internal.h @@ -0,0 +1,69 @@ +/* + * Internal filter link API + * + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +#ifndef AVFILTER_LINK_INTERNAL_H +#define AVFILTER_LINK_INTERNAL_H + +#include + +#include "avfilter.h" +#include "framequeue.h" + +typedef struct FilterLinkInternal { + AVFilterLink l; + + /** + * Queue of frames waiting to be filtered. + */ + FFFrameQueue fifo; + + /** + * If set, the source filter can not generate a frame as is. + * The goal is to avoid repeatedly calling the request_frame() method on + * the same link. + */ + int frame_blocked_in; + + /** + * Link input status. + * If not zero, all attempts of filter_frame will fail with the + * corresponding code. + */ + int status_in; + + /** + * Timestamp of the input status change. + */ + int64_t status_in_pts; + + /** + * Link output status. + * If not zero, all attempts of request_frame will fail with the + * corresponding code. + */ + int status_out; +} FilterLinkInternal; + +static inline FilterLinkInternal *ff_link_internal(AVFilterLink *link) +{ + return (FilterLinkInternal*)link; +} + +#endif /* AVFILTER_LINK_INTERNAL_H */ diff --git a/src/ExtLib/ffmpeg/libavutil/tx.c b/src/ExtLib/ffmpeg/libavutil/tx.c index d6740071b9..cc360cff31 100644 --- a/src/ExtLib/ffmpeg/libavutil/tx.c +++ b/src/ExtLib/ffmpeg/libavutil/tx.c @@ -914,9 +914,9 @@ av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, if (!(flags & AV_TX_INPLACE)) flags |= FF_TX_OUT_OF_PLACE; - if (!scale && ((type == AV_TX_FLOAT_MDCT) || (type == AV_TX_INT32_MDCT))) + if (!scale && ((type == AV_TX_FLOAT_MDCT) || (type == AV_TX_INT32_MDCT) || (type == AV_TX_FLOAT_RDFT) || (AV_TX_INT32_RDFT))) scale = &default_scale_f; - else if (!scale && (type == AV_TX_DOUBLE_MDCT)) + else if (!scale && ((type == AV_TX_DOUBLE_MDCT) || (type == AV_TX_DOUBLE_RDFT))) scale = &default_scale_d; ret = ff_tx_init_subtx(&tmp, type, flags, NULL, len, inv, scale); diff --git a/src/ExtLib/ffmpeg/libswresample/options.c b/src/ExtLib/ffmpeg/libswresample/options.c index 3309c9c85b..265f1dbd14 100644 --- a/src/ExtLib/ffmpeg/libswresample/options.c +++ b/src/ExtLib/ffmpeg/libswresample/options.c @@ -61,20 +61,20 @@ static const AVOption options[]={ {"internal_sample_fmt" , "set internal sample format" , OFFSET(user_int_sample_fmt), AV_OPT_TYPE_SAMPLE_FMT , {.i64=AV_SAMPLE_FMT_NONE}, -1 , INT_MAX, PARAM}, #if FF_API_OLD_CHANNEL_LAYOUT {"icl" , "set input channel layout (Deprecated, use ichl)", - OFFSET(user_in_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, "channel_layout"}, + OFFSET(user_in_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, .unit = "channel_layout"}, {"in_channel_layout" , "set input channel layout (Deprecated, use in_chlayout)", - OFFSET(user_in_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, "channel_layout"}, + OFFSET(user_in_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, .unit = "channel_layout"}, {"ocl" , "set output channel layout (Deprecated, use ochl)", - OFFSET(user_out_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, "channel_layout"}, + OFFSET(user_out_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, .unit = "channel_layout"}, {"out_channel_layout" , "set output channel layout (Deprecated, use out_chlayout)", - OFFSET(user_out_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, "channel_layout"}, + OFFSET(user_out_ch_layout), AV_OPT_TYPE_CHANNEL_LAYOUT, {.i64=0 }, INT64_MIN, INT64_MAX, PARAM|DEPREC, .unit = "channel_layout"}, #endif -{"ichl" , "set input channel layout" , OFFSET(user_in_chlayout ), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, "chlayout"}, -{"in_chlayout" , "set input channel layout" , OFFSET(user_in_chlayout ), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, "chlayout"}, -{"ochl" , "set output channel layout" , OFFSET(user_out_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, "chlayout"}, -{"out_chlayout" , "set output channel layout" , OFFSET(user_out_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, "chlayout"}, -{"uchl" , "set used channel layout" , OFFSET(user_used_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, "chlayout"}, -{"used_chlayout" , "set used channel layout" , OFFSET(user_used_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, "chlayout"}, +{"ichl" , "set input channel layout" , OFFSET(user_in_chlayout ), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, .unit = "chlayout"}, +{"in_chlayout" , "set input channel layout" , OFFSET(user_in_chlayout ), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, .unit = "chlayout"}, +{"ochl" , "set output channel layout" , OFFSET(user_out_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, .unit = "chlayout"}, +{"out_chlayout" , "set output channel layout" , OFFSET(user_out_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, .unit = "chlayout"}, +{"uchl" , "set used channel layout" , OFFSET(user_used_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, .unit = "chlayout"}, +{"used_chlayout" , "set used channel layout" , OFFSET(user_used_chlayout), AV_OPT_TYPE_CHLAYOUT, {.str=NULL }, 0, 0 , PARAM, .unit = "chlayout"}, {"clev" , "set center mix level" , OFFSET(clev ), AV_OPT_TYPE_FLOAT, {.dbl=C_30DB }, -32 , 32 , PARAM}, {"center_mix_level" , "set center mix level" , OFFSET(clev ), AV_OPT_TYPE_FLOAT, {.dbl=C_30DB }, -32 , 32 , PARAM}, {"slev" , "set surround mix level" , OFFSET(slev ), AV_OPT_TYPE_FLOAT, {.dbl=C_30DB }, -32 , 32 , PARAM}, @@ -84,23 +84,23 @@ static const AVOption options[]={ {"rematrix_volume" , "set rematrix volume" , OFFSET(rematrix_volume), AV_OPT_TYPE_FLOAT, {.dbl=1.0 }, -1000 , 1000 , PARAM}, {"rematrix_maxval" , "set rematrix maxval" , OFFSET(rematrix_maxval), AV_OPT_TYPE_FLOAT, {.dbl=0.0 }, 0 , 1000 , PARAM}, -{"flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"}, -{"swr_flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, "flags"}, -{"res" , "force resampling" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_FLAG_RESAMPLE }, INT_MIN, INT_MAX , PARAM, "flags"}, +{"flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, .unit = "flags"}, +{"swr_flags" , "set flags" , OFFSET(flags ), AV_OPT_TYPE_FLAGS, {.i64=0 }, 0 , UINT_MAX , PARAM, .unit = "flags"}, +{"res" , "force resampling" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_FLAG_RESAMPLE }, INT_MIN, INT_MAX , PARAM, .unit = "flags"}, {"dither_scale" , "set dither scale" , OFFSET(dither.scale ), AV_OPT_TYPE_FLOAT, {.dbl=1 }, 0 , INT_MAX , PARAM}, -{"dither_method" , "set dither method" , OFFSET(user_dither_method),AV_OPT_TYPE_INT, {.i64=0 }, 0 , SWR_DITHER_NB-1, PARAM, "dither_method"}, -{"rectangular" , "select rectangular dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_RECTANGULAR}, INT_MIN, INT_MAX , PARAM, "dither_method"}, -{"triangular" , "select triangular dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_TRIANGULAR }, INT_MIN, INT_MAX , PARAM, "dither_method"}, -{"triangular_hp" , "select triangular dither with high pass" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_TRIANGULAR_HIGHPASS }, INT_MIN, INT_MAX, PARAM, "dither_method"}, -{"lipshitz" , "select Lipshitz noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_LIPSHITZ}, INT_MIN, INT_MAX, PARAM, "dither_method"}, -{"shibata" , "select Shibata noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_SHIBATA }, INT_MIN, INT_MAX, PARAM, "dither_method"}, -{"low_shibata" , "select low Shibata noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_LOW_SHIBATA }, INT_MIN, INT_MAX, PARAM, "dither_method"}, -{"high_shibata" , "select high Shibata noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_HIGH_SHIBATA }, INT_MIN, INT_MAX, PARAM, "dither_method"}, -{"f_weighted" , "select f-weighted noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_F_WEIGHTED }, INT_MIN, INT_MAX, PARAM, "dither_method"}, -{"modified_e_weighted" , "select modified-e-weighted noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_MODIFIED_E_WEIGHTED }, INT_MIN, INT_MAX, PARAM, "dither_method"}, -{"improved_e_weighted" , "select improved-e-weighted noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_IMPROVED_E_WEIGHTED }, INT_MIN, INT_MAX, PARAM, "dither_method"}, +{"dither_method" , "set dither method" , OFFSET(user_dither_method),AV_OPT_TYPE_INT, {.i64=0 }, 0 , SWR_DITHER_NB-1, PARAM, .unit = "dither_method"}, +{"rectangular" , "select rectangular dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_RECTANGULAR}, INT_MIN, INT_MAX , PARAM, .unit = "dither_method"}, +{"triangular" , "select triangular dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_TRIANGULAR }, INT_MIN, INT_MAX , PARAM, .unit = "dither_method"}, +{"triangular_hp" , "select triangular dither with high pass" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_TRIANGULAR_HIGHPASS }, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, +{"lipshitz" , "select Lipshitz noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_LIPSHITZ}, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, +{"shibata" , "select Shibata noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_SHIBATA }, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, +{"low_shibata" , "select low Shibata noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_LOW_SHIBATA }, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, +{"high_shibata" , "select high Shibata noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_HIGH_SHIBATA }, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, +{"f_weighted" , "select f-weighted noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_F_WEIGHTED }, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, +{"modified_e_weighted" , "select modified-e-weighted noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_MODIFIED_E_WEIGHTED }, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, +{"improved_e_weighted" , "select improved-e-weighted noise shaping dither" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_DITHER_NS_IMPROVED_E_WEIGHTED }, INT_MIN, INT_MAX, PARAM, .unit = "dither_method"}, {"filter_size" , "set swr resampling filter size", OFFSET(filter_size) , AV_OPT_TYPE_INT , {.i64=32 }, 0 , INT_MAX , PARAM }, {"phase_shift" , "set swr resampling phase shift", OFFSET(phase_shift) , AV_OPT_TYPE_INT , {.i64=10 }, 0 , 24 , PARAM }, @@ -111,9 +111,9 @@ static const AVOption options[]={ /* duplicate option in order to work with avconv */ {"resample_cutoff" , "set cutoff frequency ratio" , OFFSET(cutoff) , AV_OPT_TYPE_DOUBLE,{.dbl=0. }, 0 , 1 , PARAM }, -{"resampler" , "set resampling Engine" , OFFSET(engine) , AV_OPT_TYPE_INT , {.i64=0 }, 0 , SWR_ENGINE_NB-1, PARAM, "resampler"}, -{"swr" , "select SW Resampler" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_ENGINE_SWR }, INT_MIN, INT_MAX , PARAM, "resampler"}, -{"soxr" , "select SoX Resampler" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_ENGINE_SOXR }, INT_MIN, INT_MAX , PARAM, "resampler"}, +{"resampler" , "set resampling Engine" , OFFSET(engine) , AV_OPT_TYPE_INT , {.i64=0 }, 0 , SWR_ENGINE_NB-1, PARAM, .unit = "resampler"}, +{"swr" , "select SW Resampler" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_ENGINE_SWR }, INT_MIN, INT_MAX , PARAM, .unit = "resampler"}, +{"soxr" , "select SoX Resampler" , 0 , AV_OPT_TYPE_CONST, {.i64=SWR_ENGINE_SOXR }, INT_MIN, INT_MAX , PARAM, .unit = "resampler"}, {"precision" , "set soxr resampling precision (in bits)" , OFFSET(precision) , AV_OPT_TYPE_DOUBLE,{.dbl=20.0 }, 15.0 , 33.0 , PARAM }, {"cheby" , "enable soxr Chebyshev passband & higher-precision irrational ratio approximation" @@ -131,15 +131,15 @@ static const AVOption options[]={ {"first_pts" , "Assume the first pts should be this value (in samples)." , OFFSET(firstpts_in_samples), AV_OPT_TYPE_INT64 ,{.i64=AV_NOPTS_VALUE }, INT64_MIN,INT64_MAX, PARAM }, -{ "matrix_encoding" , "set matrixed stereo encoding" , OFFSET(matrix_encoding), AV_OPT_TYPE_INT ,{.i64 = AV_MATRIX_ENCODING_NONE}, AV_MATRIX_ENCODING_NONE, AV_MATRIX_ENCODING_NB-1, PARAM, "matrix_encoding" }, - { "none", "select none", 0, AV_OPT_TYPE_CONST, { .i64 = AV_MATRIX_ENCODING_NONE }, INT_MIN, INT_MAX, PARAM, "matrix_encoding" }, - { "dolby", "select Dolby", 0, AV_OPT_TYPE_CONST, { .i64 = AV_MATRIX_ENCODING_DOLBY }, INT_MIN, INT_MAX, PARAM, "matrix_encoding" }, - { "dplii", "select Dolby Pro Logic II", 0, AV_OPT_TYPE_CONST, { .i64 = AV_MATRIX_ENCODING_DPLII }, INT_MIN, INT_MAX, PARAM, "matrix_encoding" }, +{ "matrix_encoding" , "set matrixed stereo encoding" , OFFSET(matrix_encoding), AV_OPT_TYPE_INT ,{.i64 = AV_MATRIX_ENCODING_NONE}, AV_MATRIX_ENCODING_NONE, AV_MATRIX_ENCODING_NB-1, PARAM, .unit = "matrix_encoding" }, + { "none", "select none", 0, AV_OPT_TYPE_CONST, { .i64 = AV_MATRIX_ENCODING_NONE }, INT_MIN, INT_MAX, PARAM, .unit = "matrix_encoding" }, + { "dolby", "select Dolby", 0, AV_OPT_TYPE_CONST, { .i64 = AV_MATRIX_ENCODING_DOLBY }, INT_MIN, INT_MAX, PARAM, .unit = "matrix_encoding" }, + { "dplii", "select Dolby Pro Logic II", 0, AV_OPT_TYPE_CONST, { .i64 = AV_MATRIX_ENCODING_DPLII }, INT_MIN, INT_MAX, PARAM, .unit = "matrix_encoding" }, -{ "filter_type" , "select swr filter type" , OFFSET(filter_type) , AV_OPT_TYPE_INT , { .i64 = SWR_FILTER_TYPE_KAISER }, SWR_FILTER_TYPE_CUBIC, SWR_FILTER_TYPE_KAISER, PARAM, "filter_type" }, - { "cubic" , "select cubic" , 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_CUBIC }, INT_MIN, INT_MAX, PARAM, "filter_type" }, - { "blackman_nuttall", "select Blackman Nuttall windowed sinc", 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_BLACKMAN_NUTTALL }, INT_MIN, INT_MAX, PARAM, "filter_type" }, - { "kaiser" , "select Kaiser windowed sinc" , 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_KAISER }, INT_MIN, INT_MAX, PARAM, "filter_type" }, +{ "filter_type" , "select swr filter type" , OFFSET(filter_type) , AV_OPT_TYPE_INT , { .i64 = SWR_FILTER_TYPE_KAISER }, SWR_FILTER_TYPE_CUBIC, SWR_FILTER_TYPE_KAISER, PARAM, .unit = "filter_type" }, + { "cubic" , "select cubic" , 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_CUBIC }, INT_MIN, INT_MAX, PARAM, .unit = "filter_type" }, + { "blackman_nuttall", "select Blackman Nuttall windowed sinc", 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_BLACKMAN_NUTTALL }, INT_MIN, INT_MAX, PARAM, .unit = "filter_type" }, + { "kaiser" , "select Kaiser windowed sinc" , 0 , AV_OPT_TYPE_CONST, { .i64 = SWR_FILTER_TYPE_KAISER }, INT_MIN, INT_MAX, PARAM, .unit = "filter_type" }, { "kaiser_beta" , "set swr Kaiser window beta" , OFFSET(kaiser_beta) , AV_OPT_TYPE_DOUBLE , {.dbl=9 }, 2 , 16 , PARAM }, diff --git a/src/ExtLib/ffmpeg/libswscale/options.c b/src/ExtLib/ffmpeg/libswscale/options.c index 876032e72b..ce3119d295 100644 --- a/src/ExtLib/ffmpeg/libswscale/options.c +++ b/src/ExtLib/ffmpeg/libswscale/options.c @@ -32,24 +32,24 @@ static const char *sws_context_to_name(void *ptr) #define VE AV_OPT_FLAG_VIDEO_PARAM | AV_OPT_FLAG_ENCODING_PARAM static const AVOption swscale_options[] = { - { "sws_flags", "scaler flags", OFFSET(flags), AV_OPT_TYPE_FLAGS, { .i64 = SWS_BICUBIC }, 0, UINT_MAX, VE, "sws_flags" }, - { "fast_bilinear", "fast bilinear", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_FAST_BILINEAR }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "bilinear", "bilinear", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BILINEAR }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "bicubic", "bicubic", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BICUBIC }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "experimental", "experimental", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_X }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "neighbor", "nearest neighbor", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_POINT }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "area", "averaging area", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_AREA }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "bicublin", "luma bicubic, chroma bilinear", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BICUBLIN }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "gauss", "Gaussian", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_GAUSS }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "sinc", "sinc", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_SINC }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "lanczos", "Lanczos", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_LANCZOS }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "spline", "natural bicubic spline", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_SPLINE }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "print_info", "print info", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_PRINT_INFO }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "accurate_rnd", "accurate rounding", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ACCURATE_RND }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "full_chroma_int", "full chroma interpolation", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_FULL_CHR_H_INT }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "full_chroma_inp", "full chroma input", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_FULL_CHR_H_INP }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "bitexact", "", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BITEXACT }, INT_MIN, INT_MAX, VE, "sws_flags" }, - { "error_diffusion", "error diffusion dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ERROR_DIFFUSION}, INT_MIN, INT_MAX, VE, "sws_flags" }, + { "sws_flags", "scaler flags", OFFSET(flags), AV_OPT_TYPE_FLAGS, { .i64 = SWS_BICUBIC }, 0, UINT_MAX, VE, .unit = "sws_flags" }, + { "fast_bilinear", "fast bilinear", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_FAST_BILINEAR }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "bilinear", "bilinear", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BILINEAR }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "bicubic", "bicubic", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BICUBIC }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "experimental", "experimental", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_X }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "neighbor", "nearest neighbor", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_POINT }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "area", "averaging area", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_AREA }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "bicublin", "luma bicubic, chroma bilinear", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BICUBLIN }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "gauss", "Gaussian", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_GAUSS }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "sinc", "sinc", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_SINC }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "lanczos", "Lanczos", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_LANCZOS }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "spline", "natural bicubic spline", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_SPLINE }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "print_info", "print info", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_PRINT_INFO }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "accurate_rnd", "accurate rounding", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ACCURATE_RND }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "full_chroma_int", "full chroma interpolation", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_FULL_CHR_H_INT }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "full_chroma_inp", "full chroma input", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_FULL_CHR_H_INP }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "bitexact", "", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_BITEXACT }, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, + { "error_diffusion", "error diffusion dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ERROR_DIFFUSION}, INT_MIN, INT_MAX, VE, .unit = "sws_flags" }, { "srcw", "source width", OFFSET(srcW), AV_OPT_TYPE_INT, { .i64 = 16 }, 1, INT_MAX, VE }, { "srch", "source height", OFFSET(srcH), AV_OPT_TYPE_INT, { .i64 = 16 }, 1, INT_MAX, VE }, @@ -67,20 +67,20 @@ static const AVOption swscale_options[] = { { "dst_v_chr_pos", "destination vertical chroma position in luma grid/256" , OFFSET(dst_v_chr_pos), AV_OPT_TYPE_INT, { .i64 = -513 }, -513, 512, VE }, { "dst_h_chr_pos", "destination horizontal chroma position in luma grid/256", OFFSET(dst_h_chr_pos), AV_OPT_TYPE_INT, { .i64 = -513 }, -513, 512, VE }, - { "sws_dither", "set dithering algorithm", OFFSET(dither), AV_OPT_TYPE_INT, { .i64 = SWS_DITHER_AUTO }, 0, NB_SWS_DITHER, VE, "sws_dither" }, - { "auto", "leave choice to sws", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_AUTO }, INT_MIN, INT_MAX, VE, "sws_dither" }, - { "bayer", "bayer dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_BAYER }, INT_MIN, INT_MAX, VE, "sws_dither" }, - { "ed", "error diffusion", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_ED }, INT_MIN, INT_MAX, VE, "sws_dither" }, - { "a_dither", "arithmetic addition dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_A_DITHER}, INT_MIN, INT_MAX, VE, "sws_dither" }, - { "x_dither", "arithmetic xor dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_X_DITHER}, INT_MIN, INT_MAX, VE, "sws_dither" }, + { "sws_dither", "set dithering algorithm", OFFSET(dither), AV_OPT_TYPE_INT, { .i64 = SWS_DITHER_AUTO }, 0, NB_SWS_DITHER, VE, .unit = "sws_dither" }, + { "auto", "leave choice to sws", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_AUTO }, INT_MIN, INT_MAX, VE, .unit = "sws_dither" }, + { "bayer", "bayer dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_BAYER }, INT_MIN, INT_MAX, VE, .unit = "sws_dither" }, + { "ed", "error diffusion", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_ED }, INT_MIN, INT_MAX, VE, .unit = "sws_dither" }, + { "a_dither", "arithmetic addition dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_A_DITHER}, INT_MIN, INT_MAX, VE, .unit = "sws_dither" }, + { "x_dither", "arithmetic xor dither", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_DITHER_X_DITHER}, INT_MIN, INT_MAX, VE, .unit = "sws_dither" }, { "gamma", "gamma correct scaling", OFFSET(gamma_flag),AV_OPT_TYPE_BOOL, { .i64 = 0 }, 0, 1, VE }, - { "alphablend", "mode for alpha -> non alpha", OFFSET(alphablend),AV_OPT_TYPE_INT, { .i64 = SWS_ALPHA_BLEND_NONE}, 0, SWS_ALPHA_BLEND_NB-1, VE, "alphablend" }, - { "none", "ignore alpha", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ALPHA_BLEND_NONE}, INT_MIN, INT_MAX, VE, "alphablend" }, - { "uniform_color", "blend onto a uniform color", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ALPHA_BLEND_UNIFORM},INT_MIN, INT_MAX, VE, "alphablend" }, - { "checkerboard", "blend onto a checkerboard", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ALPHA_BLEND_CHECKERBOARD},INT_MIN, INT_MAX, VE, "alphablend" }, + { "alphablend", "mode for alpha -> non alpha", OFFSET(alphablend),AV_OPT_TYPE_INT, { .i64 = SWS_ALPHA_BLEND_NONE}, 0, SWS_ALPHA_BLEND_NB-1, VE, .unit = "alphablend" }, + { "none", "ignore alpha", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ALPHA_BLEND_NONE}, INT_MIN, INT_MAX, VE, .unit = "alphablend" }, + { "uniform_color", "blend onto a uniform color", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ALPHA_BLEND_UNIFORM},INT_MIN, INT_MAX, VE, .unit = "alphablend" }, + { "checkerboard", "blend onto a checkerboard", 0, AV_OPT_TYPE_CONST, { .i64 = SWS_ALPHA_BLEND_CHECKERBOARD},INT_MIN, INT_MAX, VE, .unit = "alphablend" }, - { "threads", "number of threads", OFFSET(nb_threads), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, VE, "threads" }, - { "auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags = VE, "threads" }, + { "threads", "number of threads", OFFSET(nb_threads), AV_OPT_TYPE_INT, {.i64 = 1 }, 0, INT_MAX, VE, .unit = "threads" }, + { "auto", NULL, 0, AV_OPT_TYPE_CONST, {.i64 = 0 }, .flags = VE, .unit = "threads" }, { NULL } }; From 2792a9d86a835fd32f9e5d18598ff7818b4f71b3 Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 16 Feb 2024 21:23:53 +0300 Subject: [PATCH 55/87] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20workflows/main.yml.=201.=20=D0=94=D0=BE?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=D1=8B=20=D0=BF=D1=83=D1=82?= =?UTF-8?q?=D0=B8=20=D0=B8=D1=81=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=B8?= =?UTF-8?q?=D1=8F.=202.=20=D0=94=D0=BB=D1=8F=20=D1=81=D0=B1=D0=BE=D1=80?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=B2=D1=81=D0=B5=D1=85=20"=D0=BF=D0=B0=D0=BA?= =?UTF-8?q?=D0=B5=D1=82=D0=BE=D0=B2"=20=D0=B2=D1=8B=D0=B7=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20buil.bat=20=D0=B4=D0=BE=D1=81=D1=82=D0=B0?= =?UTF-8?q?=D1=82=D0=BE=D1=87=D0=BD=D0=BE=20=D0=BE=D0=B4=D0=B8=D0=BD=20?= =?UTF-8?q?=D1=80=D0=B0=D0=B7.=20=D0=9F=D0=B5=D1=80=D0=B5=D0=B4=20=D1=81?= =?UTF-8?q?=D0=B1=D0=BE=D1=80=D0=BA=D0=BE=D0=B9=20=D0=BD=D0=B0=20=D0=B2?= =?UTF-8?q?=D1=81=D1=8F=D0=BA=D0=B8=D0=B9=20=D1=81=D0=BB=D1=83=D1=87=D0=B0?= =?UTF-8?q?=D0=B9=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20?= =?UTF-8?q?=D0=B2=D1=8B=D0=B7=D0=BE=D0=B2=20Clean.=20PS:=20=D0=9D=D0=B5=20?= =?UTF-8?q?=D1=81=D1=82=D0=BE=D0=B8=D1=82=20=D0=B2=D1=8B=D0=B7=D1=8B=D0=B2?= =?UTF-8?q?=D0=B0=D1=82=D1=8C=20Rebuild,=20=D0=B5=D1=81=D0=BB=D0=B8=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B5=D1=81=D0=BA=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BF?= =?UTF-8?q?=D0=B0=D0=BA=D0=B5=D1=82=D0=BE=D0=B2,=20=D1=8D=D1=82=D0=BE=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=BC=D0=B5=D0=B4=D0=BB=D0=B8=D1=82=20=D1=81=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D1=83.=20=D0=94=D0=BB=D1=8F=20=D1=81=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D0=B8=20=D1=81=20=D1=87=D0=B8=D1=81=D1=82?= =?UTF-8?q?=D0=BE=D0=B3=D0=BE=20=D0=BB=D0=B8=D1=81=D1=82=D0=B0=20=D0=BE?= =?UTF-8?q?=D0=BF=D1=82=D0=B8=D0=BC=D0=B0=D0=BB=D1=8C=D0=BD=D0=B5=D0=B5=20?= =?UTF-8?q?=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20Build.=203.=20Portable=20=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D0=B5=D0=B8=D0=BC=D0=B5=D0=BD=D0=BE=D0=B2=D0=B0=D0=BD=D1=8B=20?= =?UTF-8?q?=D0=B2=20Zip,=20=D1=82.=D0=BA.=20"=D0=BF=D0=BE=D1=80=D1=82?= =?UTF-8?q?=D0=B0=D1=82=D0=B8=D0=B2=D0=BD=D0=BE=D1=81=D1=82=D1=8C"=20?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B5=D0=B4=D0=B5=D0=BB=D1=8F=D0=B5=D1=82?= =?UTF-8?q?=D1=81=D1=8F=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8=20=D1=8E=D0=B7=D0=B5=D1=80=D0=B0=20(=D1=85?= =?UTF-8?q?=D1=80=D0=B0=D0=BD=D0=B8=D1=82=20=D0=BB=D0=B8=20=D0=BE=D0=BD=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE=D0=B9=D0=BA=D0=B8=20=D0=B2?= =?UTF-8?q?=20=D0=BF=D0=B0=D0=BF=D0=BA=D0=B5=20=D0=BF=D0=BB=D0=B5=D0=B5?= =?UTF-8?q?=D1=80=D0=B0=20=D0=B8=D0=BB=D0=B8=20=D0=BD=D0=B5=D1=82).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 40 +++++++++++++++++++------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d2ea130cc1..dff2e751f1 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,17 +4,22 @@ on: push: paths-ignore: - .github/workflows/main.yml - - docs/*.* + - docs/** - LICENSE.txt + - src/apps/mpcresources/text/** + - **.vcxproj.filters pull_request: paths-ignore: - .github/workflows/main.yml - - docs/*.* + - docs/** - LICENSE.txt + - src/apps/mpcresources/text/** + - **.vcxproj.filters jobs: build: runs-on: windows-latest + timeout-minutes: 10 steps: - name: Checkout repository @@ -33,19 +38,14 @@ jobs: .\\update_gcc.bat shell: pwsh - - name: Build MPC-BE x64 - run: | - .\\build.bat x64 All Packages - shell: pwsh - - name: Clean run: | - .\\build.bat clean All + .\\build.bat Clean All shell: pwsh - - name: Build MPC-BE x86 + - name: Build MPC-BE and standalone filters run: | - .\\build.bat x86 All Packages + .\\build.bat Build All Packages shell: pwsh - name: Upload Installer x64 @@ -55,20 +55,13 @@ jobs: path: _bin/Packages/**/MPC-BE*.x64-installer.zip compression-level: 0 - - name: Upload Portable x64 + - name: Upload Zip x64 uses: actions/upload-artifact@v4 with: - name: "Portable x64" + name: "Zip x64" path: _bin/Packages/**/MPC-BE*.x64.7z compression-level: 0 - - name: Upload standalone_filters x64 - uses: actions/upload-artifact@v4 - with: - name: "standalone_filters x64" - path: _bin/Packages/**/standalone_filters-mpc-be*.x64.7z - compression-level: 0 - - name: Upload Installer x86 uses: actions/upload-artifact@v4 with: @@ -79,9 +72,16 @@ jobs: - name: Upload Portable x86 uses: actions/upload-artifact@v4 with: - name: "Portable x86" + name: "Zip x86" path: _bin/Packages/**/MPC-BE*.x86.7z compression-level: 0 + + - name: Upload standalone_filters x64 + uses: actions/upload-artifact@v4 + with: + name: "standalone_filters x64" + path: _bin/Packages/**/standalone_filters-mpc-be*.x64.7z + compression-level: 0 - name: Upload standalone_filters x86 uses: actions/upload-artifact@v4 From 855c8adfbc10f55dc72e3315bad1c1752b45777e Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 16 Feb 2024 21:28:07 +0300 Subject: [PATCH 56/87] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20workflows/main.yml?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index dff2e751f1..b2b9c61af9 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -7,14 +7,14 @@ on: - docs/** - LICENSE.txt - src/apps/mpcresources/text/** - - **.vcxproj.filters + - '**.vcxproj.filters' pull_request: paths-ignore: - .github/workflows/main.yml - docs/** - LICENSE.txt - src/apps/mpcresources/text/** - - **.vcxproj.filters + - '**.vcxproj.filters' jobs: build: From 3ff36c48cd5ae3c2a2ab6a4f5ddf3ec5c748b2d6 Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 16 Feb 2024 22:09:20 +0300 Subject: [PATCH 57/87] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D1=80=D0=BE=D0=B2=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D0=B2=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B5=D0=BA=20=D0=B4=D0=BB=D1=8F=20=D1=80=D1=83=D1=81=D1=81?= =?UTF-8?q?=D0=BA=D0=BE=D0=B3=D0=BE=20=D1=8F=D0=B7=D1=8B=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B8=20=D0=BC=D0=B0=D1=81=D1=88=D1=82=D0=B0=D0=B1=D0=B0=20175?= =?UTF-8?q?%.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.br.rc | 10 +++++----- src/apps/mpcresources/mplayerc.by.rc | 10 +++++----- src/apps/mpcresources/mplayerc.ca.rc | 10 +++++----- src/apps/mpcresources/mplayerc.cz.rc | 10 +++++----- src/apps/mpcresources/mplayerc.de.rc | 10 +++++----- src/apps/mpcresources/mplayerc.el.rc | 10 +++++----- src/apps/mpcresources/mplayerc.es.rc | 10 +++++----- src/apps/mpcresources/mplayerc.eu.rc | 10 +++++----- src/apps/mpcresources/mplayerc.fr.rc | 10 +++++----- src/apps/mpcresources/mplayerc.he.rc | 10 +++++----- src/apps/mpcresources/mplayerc.hr.rc | 10 +++++----- src/apps/mpcresources/mplayerc.hu.rc | 10 +++++----- src/apps/mpcresources/mplayerc.hy.rc | 10 +++++----- src/apps/mpcresources/mplayerc.it.rc | 10 +++++----- src/apps/mpcresources/mplayerc.ja.rc | 10 +++++----- src/apps/mpcresources/mplayerc.kr.rc | 10 +++++----- src/apps/mpcresources/mplayerc.nl.rc | 10 +++++----- src/apps/mpcresources/mplayerc.pl.rc | 10 +++++----- src/apps/mpcresources/mplayerc.ro.rc | 10 +++++----- src/apps/mpcresources/mplayerc.ru.rc | 10 +++++----- src/apps/mpcresources/mplayerc.sc.rc | 10 +++++----- src/apps/mpcresources/mplayerc.sk.rc | 10 +++++----- src/apps/mpcresources/mplayerc.sv.rc | 10 +++++----- src/apps/mpcresources/mplayerc.tc.rc | 10 +++++----- src/apps/mpcresources/mplayerc.tr.rc | 10 +++++----- src/apps/mpcresources/mplayerc.ua.rc | 10 +++++----- src/apps/mplayerc/mplayerc.rc | 10 +++++----- 27 files changed, 135 insertions(+), 135 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.br.rc b/src/apps/mpcresources/mplayerc.br.rc index cc49b20313..50c1891e1b 100644 --- a/src/apps/mpcresources/mplayerc.br.rc +++ b/src/apps/mpcresources/mplayerc.br.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Clique",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Se nada for carregado, abrir arquivo recente",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Duplo clique",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Mover janela pela área de vídeo",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Não usar 'buscar na pasta' nos comandos 'Voltar/avançar' quando houver apenas um item na lista de reprodução",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Impedir de MINIMIZAR quando em tela cheia no monitor não padrão",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pausar reprodução do vídeo quando minimizado",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-ocultar o ponteiro durante a reprodução no modo em janela",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Sincronia vertical interna",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Ativar correção de tempo de quadro",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Limpar GPU antes da sincronia vertical",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Limpar GPU após o presente",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Limpar GPU após o presente",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Aguardar por flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Configurar sincronia EVR",IDC_STATIC2,5,67,286,117 - CONTROL "Sincronizar vídeo com exibição",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Sincronizar vídeo com exibição",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Presente na sincronia vertical mais próxima",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Ajuste de frequência:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Parece VMR-9, mas usa um redimensionador bicúbico verdadeiro." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Parece VMR-9, mas usa um redimensionador bicúbico verdadeiro." IDS_DESC_NULLVR_ANY "Conecta-se a qualquer tipo de mídia de vídeo e enviará as amostras a lugar nenhum. Use-o quando não precisar ver o vídeo e quiser evitar o uso da CPU desnecessariamente." IDS_DESC_NULLVR_UNCOMP "Igual ao renderizador nulo normal, mas só se conectará a tipos não comprimido." IDS_DESC_EVR "Renderizador de vídeo com suporte para decodificação de hardware." diff --git a/src/apps/mpcresources/mplayerc.by.rc b/src/apps/mpcresources/mplayerc.by.rc index e64414e64c..4f1b19be45 100644 --- a/src/apps/mpcresources/mplayerc.by.rc +++ b/src/apps/mpcresources/mplayerc.by.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "Сінхр. відэа да дысплэя",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Сінхр. відэа да дысплэя",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Перадаць на бліжэйшы vsync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Карэкцыя частаты:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Падлучаецца да любога тыпу відэададзеных і адсылае ўваходныя кадры ў нікуды. Рэжым можа спатрэбіцца для захавання рэсурсаў працэсара ў выпадку калі патрэбны толькі гук." IDS_DESC_NULLVR_UNCOMP "Тое ж што і нармалёвы Null-рэндэр, але падлучаецца толькі да несціснутых тыпаў дадзеных." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.ca.rc b/src/apps/mpcresources/mplayerc.ca.rc index 32de937f48..32655726f1 100644 --- a/src/apps/mpcresources/mplayerc.ca.rc +++ b/src/apps/mpcresources/mplayerc.ca.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "Sync el vídeo a la pantalla",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Sync el vídeo a la pantalla",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Presentar al vsync més proper",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Ajustar freqüència:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Conecta a cualsevol tipus de mitjà de vídeo i manda les mostres a cap lloc. Utilitza'l quant no necesitis veure el vídeo, i vulguis evitar l'ús no necessari de la cpu." IDS_DESC_NULLVR_UNCOMP "Igual que el renderitzador null normal, perè només conectarà a tipus sense compresió." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.cz.rc b/src/apps/mpcresources/mplayerc.cz.rc index 4472f4a20b..533b2a2cae 100644 --- a/src/apps/mpcresources/mplayerc.cz.rc +++ b/src/apps/mpcresources/mplayerc.cz.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "Synchronizovat video k displeji",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Synchronizovat video k displeji",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Zobrazit při nejbližším vsync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Přizpůsobit frekvenci o:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Připojí se k jakémukoliv typu videa a začne všechny vstupní vzorky zahazovat. Použijte ho pokud nepotřebujete video zobrazit a chcete ušetřit výkon procesoru." IDS_DESC_NULLVR_UNCOMP "Stejný jako běžný Null renderer, ale tento se připojí pouze k nekomprimovaným typům videa." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.de.rc b/src/apps/mpcresources/mplayerc.de.rc index d07026f11b..4bc701f7c3 100644 --- a/src/apps/mpcresources/mplayerc.de.rc +++ b/src/apps/mpcresources/mplayerc.de.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Einfacher Klick",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Wenn nichts geladen ist, die letzte Datei öffnen",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Doppelklick",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Fenster im Videobereich verschieben",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Bei nur einem Eintrag in der Wiedergabeliste keine weiteren Medien im Ordner durch 'Rückwärts springen | Vorherige Datei' / 'Vorwärts springen | Nächste Datei' öffnen",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Minimieren des Fensters auf sekundärem Anzeigegerät bei Vollbild verhindern",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Videowiedergabe pausieren, wenn minimiert",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Während der Wiedergabe im Fenstermodus den Mauszeiger automatisch verstecken",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Interne VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Bildzeitkorrektur",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "GPU vor VSync leeren",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "GPU nach Ausgabe leeren",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "GPU nach Ausgabe leeren",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Auf geleerte GPU warten",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Einstellungen von EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Videowiedergabe an Anzeige anpassen",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Videowiedergabe an Anzeige anpassen",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Videobilder mit nächstgelegener VSync darstellen",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Frequenzabstimmung:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "Sie können %s nicht als externen Filter hinzufügen.\nSie sollten Ihren bevorzugten Videorenderer in den Optionen 'Video' auswählen." + IDS_DESC_HAALI_VR "Ähnelt dem VMR-9, verwendet aber einen echten bikubischen Resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Ähnelt dem VMR-9, verwendet aber einen echten bikubischen Resizer." IDS_DESC_NULLVR_ANY "Stellt eine Verbindung zu allen videoartigen Medientypen her und sendet die eingehenden Samples ins Nichts. Sinnvoll, wenn keine Videoausgabe benötigt wird, um die CPU zu entlasten." IDS_DESC_NULLVR_UNCOMP "Wie der normale Null-Renderer, kann aber nur mit unkomprimierten Videotypen verbunden werden." IDS_DESC_EVR "Videorenderer mit GPU Hardwarebeschleunigung" diff --git a/src/apps/mpcresources/mplayerc.el.rc b/src/apps/mpcresources/mplayerc.el.rc index 9432944391..80b416f33d 100644 --- a/src/apps/mpcresources/mplayerc.el.rc +++ b/src/apps/mpcresources/mplayerc.el.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Κλικ",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Εάν δεν έχει φορτωθεί τίποτα, ανοίξτε το πρόσφατο αρχείο",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Διπλό κλικ",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Χωρίς χρήση της ‘αναζήτησης στο φάκελο’ στις εντολές ‘Μετάβαση πίσω/μπροστά’ όταν μόνο ένα στοιχείο είναι στη λίστα",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Αποτροπή ελαχιστοποίησης από την πλήρη οθόνη σε μη προεπιλεγμένη οθόνη",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Παύση της αναπαραγωγής βίντεο στην ελαχιστοποίηση",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Αυτόματη απόκρυψη του δείκτη κατά την αναπαραγωγή σε λειτουργία με παράθυρα",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Ενεργοποίηση διόρθωσης χρόνου καρέ",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Εκκαθάριση GPU πριν από το VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Εκκαθάριση GPU πριν από το παρόν",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Εκκαθάριση GPU πριν από το παρόν",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Αναμονή για εκκαθαρίσεις",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Ρυθμίσεις συγχρονισμού EVR",IDC_STATIC2,5,67,286,117 - CONTROL "Συγχρονισμός βίντεο με οθόνη",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Συγχρονισμός βίντεο με οθόνη",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Παρουσία στον πλησιέστερο VSync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Προσαρμογή συχνότητας:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Μοιάζει με VMR-9, αλλά χρησιμοποιεί ένα πραγματικό δικυβικό resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Μοιάζει με VMR-9, αλλά χρησιμοποιεί ένα πραγματικό δικυβικό resizer." IDS_DESC_NULLVR_ANY "Συνδέεται με οποιονδήποτε τύπο πολυμέσων βίντεο και στέλνει τα εισερχόμενα δείγματα στο πουθενά. Χρησιμοποιήστε το όταν δεν χρειάζεστε την εμφάνιση του βίντεο και θέλετε να εξοικονομήσετε επεξεργαστική ισχύ." IDS_DESC_NULLVR_UNCOMP "Όμοια με την κανονική ψευδή απόδοση, αλλά αυτή συνδέεται μόνο σε μη συμπιεσμένους τύπους." IDS_DESC_EVR "Πρόγραμμα απόδοσης βίντεο με υποστήριξη αποκωδικοποίησης υλικού." diff --git a/src/apps/mpcresources/mplayerc.es.rc b/src/apps/mpcresources/mplayerc.es.rc index 5a21b8c5b7..603c4d4411 100644 --- a/src/apps/mpcresources/mplayerc.es.rc +++ b/src/apps/mpcresources/mplayerc.es.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Clic",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Si nada es cargado, abrir archivo reciente",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Doble clic",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Mover ventana por el área de video",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "No usar 'buscar en carpeta' en comandos 'Saltar hacia atrás/adelante' cuando sólo hay un elemento en la lista de reproducción",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Evitar el MINIMIZADO en Pantalla Completa en un monitor no predeterminado",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pausar la reproducción de video cuando se minimiza",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Ocultar automáticamente el puntero durante la reproducción en modo ventana",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "VSync interno",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Habilita corrección de tiempo de fotograma",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Descargar GPU antes de VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Descargar GPU después del Presente",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Descargar GPU después del Presente",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Esperar por descargas",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Ajustes EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Sincronizar video a pantalla",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Sincronizar video a pantalla",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Presentar al VSync más cercano",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Ajuste de frecuencia:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "No puedes agregar %s como filtro externo.\nDebes seleccionar tu renderizador de video preferido en la página de configuración de video." + IDS_DESC_HAALI_VR "Se parece al VMR-9, pero usa un verdadero redimensionador bicúbico." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Se parece al VMR-9, pero usa un verdadero redimensionador bicúbico." IDS_DESC_NULLVR_ANY "Conecta a cualquier tipo de medio de video y manda las muestras a ningún lado. Utilízalo cuando no necesitas ver el video, y quieres evitar el uso de cpu innecesario." IDS_DESC_NULLVR_UNCOMP "Igual que el renderizador Nulo normal, pero este solo conectará a tipos sin compresión." IDS_DESC_EVR "Renderizador de video con soporte de decodificación por hardware." diff --git a/src/apps/mpcresources/mplayerc.eu.rc b/src/apps/mpcresources/mplayerc.eu.rc index a31c8f3d82..cf792c44d0 100644 --- a/src/apps/mpcresources/mplayerc.eu.rc +++ b/src/apps/mpcresources/mplayerc.eu.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Ez erabili 'bilatu agiritegian' 'Jauzi atzera/aurrera' aginduetan irakur-zerrendan gai bakarra dagoenean",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Saihestu TXIKIENTZEA Ikusleiho-osoan ez berezko monitorean",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pausatu bideo irakurketa txikiendutakoan",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Gaitu frame denbora zuzenketa",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Jalgi GPU-a VSync aurretik",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Jalgi GPU-a Aurkeztu ondoren",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Jalgi GPU-a Aurkeztu ondoren",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Itxaron jalgipenak",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Aldiberetze Ezarpenak",IDC_STATIC2,5,67,286,117 - CONTROL "Aldiberetu bideoa erakuspenera",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Aldiberetu bideoa erakuspenera",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Hurbileneko ZAlb",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Maiztasun zehaztapena:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Edozein bideo-erako multimedia motarekin elkarketatzen da eta barrurako laginak inora ez bidaliko ditu. Erabili bideo erakuspenik behar ez duzunean eta cpu-a gordetzea nahi duzunean alperrik lan egitetik." IDS_DESC_NULLVR_UNCOMP "Null aurkezle arrunta bezalakoa, baina honek hertsatugabeko motak bakarrik elkartzen ditu." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.fr.rc b/src/apps/mpcresources/mplayerc.fr.rc index 771c632e47..398055a619 100644 --- a/src/apps/mpcresources/mplayerc.fr.rc +++ b/src/apps/mpcresources/mplayerc.fr.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Clic",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Si rien n'est chargé, ouvrir le fichier récent",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double clic",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Déplacer la fenêtre par la zone vidéo",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Ne pas utiliser la « recherche dans le dossier » sur les commandes « Passer en arrière/en avant » lorsqu'il n'y a qu'un seul élément dans la Playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Empêcher de MINIMISER en plein écran sur un moniteur autre que celui par défaut",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Mettre en pause la lecture vidéo lorsqu'elle est réduite",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Masquer automatiquement le pointeur pendant la lecture en mode fenêtré",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "VSync interne",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Activer la correction du temps d'image",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Vider le GPU avant VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Vider le GPU après présentation",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Vider le GPU après présentation",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Attendre la vidange",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Paramètres EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Synchroniser la fréquence de la vidéo avec celle de l'écran",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Synchroniser la fréquence de la vidéo avec celle de l'écran",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Présenter à la Vsync la plus proche",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Fréquence d'ajustement :",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Ressemble à VMR-9, mais utilise un véritable redimensionneur bicubique." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Ressemble à VMR-9, mais utilise un véritable redimensionneur bicubique." IDS_DESC_NULLVR_ANY "Connection vers n'importe quel type de média vidéo et enverra l'exemple entrant vers nul part. Utilisez le quand vous n'avez pas besoin de l'affichage vidéo and que vous voulez garder des ressources processeur et éviter de le faire travailler inutilement." IDS_DESC_NULLVR_UNCOMP "Identique au rendu normal Null, mais ne se connectera qu'à des types non compressés." IDS_DESC_EVR "Moteur de rendu vidéo avec prise en charge du décodage matériel." diff --git a/src/apps/mpcresources/mplayerc.he.rc b/src/apps/mpcresources/mplayerc.he.rc index b5014fd766..aaaac16de4 100644 --- a/src/apps/mpcresources/mplayerc.he.rc +++ b/src/apps/mpcresources/mplayerc.he.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "סנכרן וידאו למסך",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "סנכרן וידאו למסך",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "הצג בסנכרון האנכי הקרוב ביותר",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "כיוונון תדירות:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3168,11 +3168,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "מתחבר לכל סוג מדיה דומה לוידאו וישלח את הדגימות הנכנסות לשום מקום. השתמש בזה כאשר אינך זקוק לתצוגת וידאו ואתה רוצה לחסוך עבודה מיותרת של המעבד." IDS_DESC_NULLVR_UNCOMP "כמו מציג ה-Null הרגיל, אך זה יתחבר רק לסוגים לא מכווצים." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.hr.rc b/src/apps/mpcresources/mplayerc.hr.rc index 1de5076734..25fbfa5478 100644 --- a/src/apps/mpcresources/mplayerc.hr.rc +++ b/src/apps/mpcresources/mplayerc.hr.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Klik",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Ukoliko nema učitanja, otvori nedavnu datoteku",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Dvoklik",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Pomakni prozor uz područje video zapisa",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Ne koristi 'traženje u mapi' uz naredbe 'Preskoči natrag/naprijed' uz samo jedan predmet na playlisti",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Spriječi MINIMIZIRANJE kada je postavljen puni zaslon na nepodrazumijevanom monitoru",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Zaustavi video pregled pri minimiziranju",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-skrivanje pokazivača tijekom pregleda u uokvirenom modu",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Interni VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Omogući vremensku korekciju kadra",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Čisti GPU prije VSynca",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Čisti GPU nakon Presenta",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Čisti GPU nakon Presenta",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Čekaj za čišćenja",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync Postavke",IDC_STATIC2,5,67,286,117 - CONTROL "Sinkroniziraj video prema zaslonu",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Sinkroniziraj video prema zaslonu",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Prisutan uz najbliži VSync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Podešenje frekvencije:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3168,11 +3168,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Izgleda poput VMR-9, ali koristi stvaran dvokubični mijenjač veličine." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Izgleda poput VMR-9, ali koristi stvaran dvokubični mijenjač veličine." IDS_DESC_NULLVR_ANY "Povezuje se na bilo koji video-liki tip medija i pristigle uzorke šalje u prazno. Koristite kad nemate potrebu za zaslonom i želite uštedjeti CPU od praznog hoda." IDS_DESC_NULLVR_UNCOMP "Jednako kao normalan Null render, jedino što se ovaj povezuje na nekomprimirane tipove." IDS_DESC_EVR "Video render uz hardversku podršku za dekodiranje." diff --git a/src/apps/mpcresources/mplayerc.hu.rc b/src/apps/mpcresources/mplayerc.hu.rc index 23537ffe61..764c1d6616 100644 --- a/src/apps/mpcresources/mplayerc.hu.rc +++ b/src/apps/mpcresources/mplayerc.hu.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Kattintás",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Ha semmi nincs betöltve, nyissa meg a legutóbbi fájlt",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Dupla kattintás",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Ablak áthelyezése a videó területre",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Ne használja a 'keresés a mappában' parancsot az 'Ugrás vissza/előre' parancsokra, ha csak egy elem van a lejátszási listában",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Megakadályozza a Kis méretet, amikor a Teljes képernyő nem az alap monitoron van",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Szüneteltesse a videó lejátszását, amikor kis méretben van",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "A mutató automatikus elrejtése ablakos lejátszás közben",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Belső VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Képkocka időkorrekció engedélyezése",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Kiüríti a GPU-t a VSync előtt",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Kiüríti a GPU-t a jelenlegi után",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Kiüríti a GPU-t a jelenlegi után",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Várj a kiürítésre",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Szinkronizálási beállítások",IDC_STATIC2,5,67,286,117 - CONTROL "Videó képernyőhöz illesztése",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Videó képernyőhöz illesztése",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Megjelenítés a legközelebbi VSync-nél",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Frekvencia hangolás:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "A %s nem adható hozzá külső szűrőként.\nA Videóbeállítások oldalon válassza ki a kívánt videómegjelenítőt." + IDS_DESC_HAALI_VR "Úgy néz ki, mint a VMR-9, de valódi bicubic átméretezőt használ." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Úgy néz ki, mint a VMR-9, de valódi bicubic átméretezőt használ." IDS_DESC_NULLVR_ANY "Minden videószerű médiatípushoz csatlakozni fog és a bejövő mintákat nem küldi ki sehová. Ezt akkor válassza, ha a videómegjelenítésre nincs szüksége és meg szeretné kímélni a processzorát a felesleges munkától." IDS_DESC_NULLVR_UNCOMP "Ugyan az, mint a sima Null átalakító, de ez csak tömörítetlen típusokhoz fog csatlakozni." IDS_DESC_EVR "Videó megjelenítő hardveres dekódolási támogatással." diff --git a/src/apps/mpcresources/mplayerc.hy.rc b/src/apps/mpcresources/mplayerc.hy.rc index 3652a0e1b5..231988120c 100644 --- a/src/apps/mpcresources/mplayerc.hy.rc +++ b/src/apps/mpcresources/mplayerc.hy.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "Համաժեցնել տեսանյութը էկրանի հետ",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Համաժեցնել տեսանյութը էկրանի հետ",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Ցուցադրել մոտագույն vsync-ի հետ",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Հաճախականության ուղղում.",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Միանում է ցանկացած տեսակի տեսատվյալների և մտնող կադրերը ոչ մի տեղ չի ուղարկում։ Այս եղանակը կարող է օգտակար լինել, եթե անհրաժեշտ է պահպանել ռեսուրսներից միայն ձայնը։" IDS_DESC_NULLVR_UNCOMP "Նույնն է ինչ Նորմալ Null ցուցադրիչը, բայց միացվում է միայն տվյալների չսեղմված տեսակին։" IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.it.rc b/src/apps/mpcresources/mplayerc.it.rc index 5a75be38c9..2afe66d910 100644 --- a/src/apps/mpcresources/mplayerc.it.rc +++ b/src/apps/mpcresources/mplayerc.it.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Clic",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Se non viene caricato nulla, apri il file recente",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Doppio clic",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Sposta finestra per area video",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Non usare la funzione 'cerca nella cartella' nei comandi 'Salta avanti/indietro' quando è presente un solo elemento in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Evita riduzione a icona quando è a tutto schermo su monitor non predefinito",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Metti in pausa la riproduzione video quando è ridotto a icona",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Nascondi automaticamente il puntatore durante la riproduzione in modalità finestra",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "VSync interno",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Abilita correzione del tempo per fotogramma",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Svuota GPU prima del VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Svuota GPU dopo il presente",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Svuota GPU dopo il presente",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Attendi svuotamento",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Impostazioni di sincronizzazione EVR",IDC_STATIC2,5,67,286,117 - CONTROL "Sincronizza video con schermo",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Sincronizza video con schermo",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Presenta al VSync più vicino",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Regolazione frequenza:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "Non puoi aggiungere %s come filtro esterno.\nDovresti selezionare il tuo renderer video preferito nella pagina Impostazioni video." + IDS_DESC_HAALI_VR "Sembra VMR-9, ma usa un vero ridimensionatore bicubico." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Sembra VMR-9, ma usa un vero ridimensionatore bicubico." IDS_DESC_NULLVR_ANY "Si collega a qualsiasi tipo di supporto simile a un video e non invierà i campioni in arrivo da nessuna parte. Usalo quando non hai bisogno del display video e vuoi evitare che la CPU funzioni inutilmente." IDS_DESC_NULLVR_UNCOMP "Come il normale renderer Null, ma questo si collegherà solo ai tipi non compressi." IDS_DESC_EVR "Renderer video con supporto per decodifica hardware." diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index cb7c00c44c..badfeab081 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "クリック",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "何も読み込まれていない場合は、最近使ったファイルを開く",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "ダブル クリック",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "映像領域でウィンドウを移動する",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "プレイリスト登録が 1 項目の時は「フォルダー内検索」の「前へ/次へ」を使用しない",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "既定のモニター以外では全画面表示で 最小化 を禁止する",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "最小化時にビデオ再生を一時停止させる",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "ウィンドウ モードで再生中にポインターを自動で隠す",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "内蔵の垂直同期",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "フレーム時間補正を有効にする",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "垂直同期の前に GPU をフラッシュ",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "表示後に GPU をフラッシュ",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "表示後に GPU をフラッシュ",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "フラッシュを待機する",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR 同期設定",IDC_STATIC2,5,67,286,117 - CONTROL "ビデオをディスプレイに同期させる",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "ビデオをディスプレイに同期させる",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "最も近い垂直同期で表示する",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "周波数調整:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "%s を外部フィルターとして追加することはできません。\n[映像] 設定ページで、お好みのビデオ レンダラーを選択する必要があります。" + IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "VMR-9 とほぼ同じですが、真のバイキュービック リサイザーを使用します。" IDS_DESC_NULLVR_ANY "あらゆる動画の (ような) メディア タイプに接続して入力サンプルをどこにも出力しません。映像の表示を必要とせず、CPU を無駄な動作から節約したい場合に使用してください。" IDS_DESC_NULLVR_UNCOMP "標準の Null レンダラーと同じですが、これは非圧縮タイプにのみ接続します。" IDS_DESC_EVR "ハードウェア デコードをサポートするビデオ レンダラーです。" diff --git a/src/apps/mpcresources/mplayerc.kr.rc b/src/apps/mpcresources/mplayerc.kr.rc index f80e7222e5..34c62be8ab 100644 --- a/src/apps/mpcresources/mplayerc.kr.rc +++ b/src/apps/mpcresources/mplayerc.kr.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "클릭",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "불러온 파일이 없으면 최근 파일 열기",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "두 번 클릭",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "비디오 영역으로 창 이동",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "재생 목록에 파일 하나만 있다면 '앞/뒤 탐색' 시에 '폴더 내에서 찾기' 사용 안 함",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "전체 화면 시, 최소화 방지",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "최소화 시, 영상 재생 일시 정지",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "창 모드에서 재생하는 동안 포인터 자동 숨기기",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "내장 수직 동기화",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "프레임 시간 수정 활성화",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "수직 동기화 전에 GPU 플러시",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "발표 후 GPU 플러시",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "발표 후 GPU 플러시",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "플러시 대기",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR 동기화 설정",IDC_STATIC2,5,67,286,117 - CONTROL "비디오에서 디스플레이로 싱크",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "비디오에서 디스플레이로 싱크",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "최근린 수직 동기화 적용",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "주사율 조정 :",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "VMR-9과 다름없지만, 고등 차수 보간을 사용합니다." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "VMR-9과 다름없지만, 고등 차수 보간을 사용합니다." IDS_DESC_NULLVR_ANY "모든 비디오 형식의 샘플을 출력하지 않습니다. 비디오를 출력하지 않으면서 CPU가 작동하도록 할 때 사용합니다." IDS_DESC_NULLVR_UNCOMP "일반적인 Null 렌더러와 다름없지만 압축되지 않은 형식만을 연결합니다." IDS_DESC_EVR "하드웨어 디코딩을 지원하는 비디오 렌더러입니다." diff --git a/src/apps/mpcresources/mplayerc.nl.rc b/src/apps/mpcresources/mplayerc.nl.rc index f4bdff27d3..1c6bd2662c 100644 --- a/src/apps/mpcresources/mplayerc.nl.rc +++ b/src/apps/mpcresources/mplayerc.nl.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Klikken",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Recent bestand openen als er niets wordt geladen",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Dubbelklikken",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Venster verplaatsen door het videobeeld te verslepen",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Zoek NIET op andere bestanden in dezelfde map bij het gebruik van ""Vorige/Volgende"" als er alleen een item in afspeellijst staat.",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Minimaliseren vermijden in geval van volledig scherm op niet-primair scherm",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Weergave pauseren als het venster geminimaliseerd is",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Verberg automatisch de muisaanwijzer tijdens het afspelen in de venstermodus",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Interne VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Activeer frametime-correctie",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "GPU legen voor VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "GPU legen na afspelen",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "GPU legen na afspelen",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wacht tot GPU leeg",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Instellingen voor EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Synchroniseer video aan monitor",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Synchroniseer video aan monitor",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Toon bij de dichtstbijzijnde VSync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Frequentieaanpassing:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Hetzelfde als VMR-9, maar met een echte bicubicresizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Hetzelfde als VMR-9, maar met een echte bicubicresizer." IDS_DESC_NULLVR_ANY "Verbind met elk video-achtig mediatype en zal de inkomende signalen in het, grote dan wel kleine, niets zenden. Gebruik dit als geen uitvoersignaal nodig is en de om de CPU te ontlasten." IDS_DESC_NULLVR_UNCOMP "Hetzelfde als de normale Null renderer, maar deze zal alleen verbinding maken met ongecomprimeerde types." IDS_DESC_EVR "Videorenderer met mogelijkheid tot hardwaredecoding." diff --git a/src/apps/mpcresources/mplayerc.pl.rc b/src/apps/mpcresources/mplayerc.pl.rc index 57aa783437..647bc02a45 100644 --- a/src/apps/mpcresources/mplayerc.pl.rc +++ b/src/apps/mpcresources/mplayerc.pl.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Klik",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Jeśli nic nie jest wczytane, otwórz ostatni plik",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Podwójny klik",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Nie używaj 'szukaj w folderze' oraz komend 'Przejdź do tyłu / do przodu', gdy jest tylko jedna pozycja na liście odtwarzania",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Zapobiegaj minimalizacji w trybie pełnoekranowym na dodatkowych ekranach",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Wstrzymaj odtwarzanie po minimalizacji",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Autoukrywanie kursora podczas odtwarzania w trybie okienkowym",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Włącz korekcję czasu klatki",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Opróżniaj bufor przed synchronizacją",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Opróżniaj bufor po wyświetleniu",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Opróżniaj bufor po wyświetleniu",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Czekaj na opróżnienie bufora",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Ustawienia EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Synchronizowanie wideo z ekranem",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Synchronizowanie wideo z ekranem",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Wyświetlanie najbliższej synchronizacji pionowej",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Regulacja częstotliwości:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Łączy z dowolnym formatem wideo i wysyła przychodzące próbki donikąd. Użycie wskazane, gdy strumień wideo nie musi być wyświetlany, dzięki czemu można zmniejszyć obciążenie CPU." IDS_DESC_NULLVR_UNCOMP "Działa tak samo jak „Null renderer (anything)”, ale tylko odnośnie nieskompresowanych formatów." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.ro.rc b/src/apps/mpcresources/mplayerc.ro.rc index f155ca949c..f168568e98 100644 --- a/src/apps/mpcresources/mplayerc.ro.rc +++ b/src/apps/mpcresources/mplayerc.ro.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Clic",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Dacă nu s-a încărcat nimic, deschide fișierul recent",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Dublu clic",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Mută fereastra lângă zona video",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Nu folosi 'Caută în dosar' pentru comenzile 'Sari înapoi/înainte' atunci când este numai un element în lista de redare",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Previne minimizarea playerului din ecran complet pe un monitor care nu este implicit",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Previne redarea videoclipului când este minimizat",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Ascunde automat indicatorul în timpul redării în modul fereastră",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "VSync intern",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Activează corecția timpului cadrelor",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Golește memoria GPU-ului înainte de VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Golește memoria GPU-ului după Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Golește memoria GPU-ului după Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Așteaptă pentru procesele de golire a memoriei",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Setări de sincronizare EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Sincronizează video cu afișarea",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Sincronizează video cu afișarea",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Prezintă la cel mai apropiat VSync (Sincronizare Verticală)",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Ajustarea frecvenței:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3169,11 +3169,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Arată ca VMR-9, dar folosește un redimensionator bicubic adevărat." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Arată ca VMR-9, dar folosește un redimensionator bicubic adevărat." IDS_DESC_NULLVR_ANY "Se conectează la orice mediu de tip video și mostrele video nu vor fi trimise niciunde. Folosiți-l când nu aveți nevoie de afișarea video și vreți să salvați procesorul de la o muncă inutilă." IDS_DESC_NULLVR_UNCOMP "La fel ca randorul normal Null, dar acesta se va conecta doar la tipurile necomprimate." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.ru.rc b/src/apps/mpcresources/mplayerc.ru.rc index f3c9df1cea..be5c5760bb 100644 --- a/src/apps/mpcresources/mplayerc.ru.rc +++ b/src/apps/mpcresources/mplayerc.ru.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Щелчок",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Если ничего не загружено, то открыть последний файл",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Двойной щелчок",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Переносить окно за видеообласть",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Не использовать переход по файлам в директории по нажатию ""Шаг вперед/назад""",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Не сворачивать окно на дополнительном дисплее в полноэкранном режиме",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Приостанавливать воспроизведение видео при сворачивании окна",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Скрывать курсор при воспроизведении в окне",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Встроенный VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Включить коррекцию времени кадра",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Заполнить GPU перед VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Заполнить GPU после представления",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Заполнить GPU после представления",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Ожидать заполнения",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Настройки EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Синхронизировать видео с дисплеем",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Синхронизировать видео с дисплеем",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Представлять с ближайшим vsync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Коррекция частоты:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "Вы не можете добавить %s как внешний фильтр.\nВам необходимо выбрать прдепочтительный видеорендерерв в панели настроек Видео." + IDS_DESC_HAALI_VR "Похож на VMR-9, но использует корректное бикубическое изменения размера." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Похож на VMR-9, но использует корректное бикубическое изменения размера." IDS_DESC_NULLVR_ANY "Подключается к любому типу видеоданных и отсылает входящие кадры в никуда. Режим может пригодиться для сохранения ресурсов процессора в случае, если нужен только звук." IDS_DESC_NULLVR_UNCOMP "То же, что и нормальный Null-рендер, но подключается только к несжатым типам данных." IDS_DESC_EVR "Видеорендерер с поддержкой аппаратного декодирования." diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index 26dc94799b..103c0c1e8f 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "点击",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "如果未加载任何内容,则打开最近使用的文件",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "双击",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "通过视频区域移动播放窗口",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "在播放列表中仅有一个项目时禁用 ""向前 / 后跳转"" 后打开文件中的下一个 / 上一个文件",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "在非默认显示器上全屏时防止播放器被最小化",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "最小化时暂停播放",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "在窗口模式下播放时自动隐藏鼠标指针",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "内置垂直同步",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "允许帧时间校准",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "垂直同步前刷新 (GPU) ",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "垂直同步后刷新 (GPU)",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "垂直同步后刷新 (GPU)",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "等待刷新",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR 同步设置",IDC_STATIC2,5,67,286,117 - CONTROL "将视频同步到显示器",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "将视频同步到显示器",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "使用显示器刷新率与视频帧率最接近的同步方式",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "频率调整: ",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "不能添加 %s 为外部滤镜。\n应该在视频设置页面选择首选的视频渲染器。" + IDS_DESC_HAALI_VR "与 VMR-9 类同, 但是使用真正的 bicubic 改变大小。" END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "与 VMR-9 类同, 但是使用真正的 bicubic 改变大小。" IDS_DESC_NULLVR_ANY "连接到任意视频文件类型并且会将进入的采样信息传送到任意地方。当您不需要显示视频并希望节省不必要的 cpu 工作时请使用它。" IDS_DESC_NULLVR_UNCOMP "和普通的空渲染器相同, 但仅会被连接到未压缩的类型上。" IDS_DESC_EVR "此视频渲染器支持硬件解码" diff --git a/src/apps/mpcresources/mplayerc.sk.rc b/src/apps/mpcresources/mplayerc.sk.rc index dbe070e6df..385ce8556a 100644 --- a/src/apps/mpcresources/mplayerc.sk.rc +++ b/src/apps/mpcresources/mplayerc.sk.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "Synchronizovať video s displejom",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Synchronizovať video s displejom",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Prezentovať pri najbližšej vsync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Prispôsobenie frekvencie o:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Pripája sa k videu, neodosiela však prichádzajúce pakety. Môžete ho použiť vtedy, ak nepotrebujete obrazový výstup videa a chcete obmedziť zbytočnú prácu procesora." IDS_DESC_NULLVR_UNCOMP "To isté, ako voľba Null renderer, ale spracovávať sa dajú iba nekomprimované súbory." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.sv.rc b/src/apps/mpcresources/mplayerc.sv.rc index c759c7b4a1..48bf41282e 100644 --- a/src/apps/mpcresources/mplayerc.sv.rc +++ b/src/apps/mpcresources/mplayerc.sv.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "Synka video till skärm",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Synka video till skärm",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Visa vid närmaste vertikalsynk",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Frekvensjustering:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Ansluts till vilken som helst video-liknande media typ och kommer att skicka inkommande prover till ingenstans. Använd det när du inte behöver bildskärmen och vill spara cpu från att arbeta i onödan." IDS_DESC_NULLVR_UNCOMP "Samma som de vanliga Null renderaren, men denna kommer endast att ansluta till okomprimerad typer." IDS_DESC_EVR "Video renderer with hardware decoding support." diff --git a/src/apps/mpcresources/mplayerc.tc.rc b/src/apps/mpcresources/mplayerc.tc.rc index 3c71e16b46..e3cf32a610 100644 --- a/src/apps/mpcresources/mplayerc.tc.rc +++ b/src/apps/mpcresources/mplayerc.tc.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "單按",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "如未有載入內容,則開啟最近檔案",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "雙按",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "拖曳影格時移動視窗",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "播放清單只有一個項目時,不要於「上一段/下一段」按鈕連結其他位於同一資料夾的檔案",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "避免於非預設顯示器全螢幕時最小化",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "最小化時暫停播放",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "視窗模式播放時自動隱藏滑鼠游標",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "內置垂直同步",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "啟用影格時間校正",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "在垂直同步之前排空 GPU",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "在呈現之後排空 GPU",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "在呈現之後排空 GPU",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "等待排空",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR 同步繪製 設定",IDC_STATIC2,5,67,286,117 - CONTROL "同步視訊至顯示",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "同步視訊至顯示",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "於最近的垂直同步呈現",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "頻率調整:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "和 VMR-9 類同,但使用眞正的 bicubic 變更大小。" END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "和 VMR-9 類同,但使用眞正的 bicubic 變更大小。" IDS_DESC_NULLVR_ANY "連到所有視訊媒體類型,並且不傳送傳入的取樣資料。當你不需要任何視訊顯示而又想節省不必要的 CPU 工作時可以使用。" IDS_DESC_NULLVR_UNCOMP "與無繪製器相同,但只會連到未壓縮的類型。" IDS_DESC_EVR "此視訊繪製器支援硬體解碼。" diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index d9e02dd166..7cb7134b15 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Tıklama",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Hiçbir şey yüklenmemişse son dosyayı aç",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Çift Tıklama",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Pencereyi video alanı vasıtasıyla taşı",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Oynatma listesinde sadece bir öğe olduğunda 'Geri/İleri Git' komutlarındaki 'klasörde arama' özelliğini kullanma.",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Varsayılan olmayan monitörde Tam Ekran olduğunda SİMGE DURUMUNA'yı engelle",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Küçültüldüğünde video oynatmayı duraklat",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Pencere modunda oynatma sırasında işaretçiyi otomatik gizle",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Dahili Dikey Eşzamanlama",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Görüntü zaman düzeltmesini etkinleştir",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "GPU'yu Dikey Eşzaman. önce sıfırla",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "GPU'yu gösterdikten sonra sıfırla",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "GPU'yu gösterdikten sonra sıfırla",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Sıfırlama için bekle",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "GVİ Eşzamanlama Ayarları",IDC_STATIC2,5,67,286,117 - CONTROL "Videoyu ekrana eşzamanla",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Videoyu ekrana eşzamanla",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "En yakın dikey eşzamanlama",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Frekans düzeltmesi:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "%s harici süzgeç olarak eklenemez.\nTercih ettiğiniz video işleyiciyi Video ayarları sayfasında seçmelisiniz." + IDS_DESC_HAALI_VR "VKİ-9 gibidir, ancak gerçek kübik boyutlandırıcı kullanır." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "VKİ-9 gibidir, ancak gerçek kübik boyutlandırıcı kullanır." IDS_DESC_NULLVR_ANY "Her video benzeri medya biçimine bağlanır ve dahili örnekleri bir yere göndermez. Video gösterimine ihtiyaç duymadığınız ve işlemciyi pek az kullanmak istediğiniz durumlarda bu seçeneği seçiniz." IDS_DESC_NULLVR_UNCOMP "Boş işleyici ile aynıdır, ancak sadece sıkıştırılmamış biçimleri destekler." IDS_DESC_EVR "Donanım kod çözme desteğine sahip video işleyici." diff --git a/src/apps/mpcresources/mplayerc.ua.rc b/src/apps/mpcresources/mplayerc.ua.rc index cb5dad52bc..ab15ae91e2 100644 --- a/src/apps/mpcresources/mplayerc.ua.rc +++ b/src/apps/mpcresources/mplayerc.ua.rc @@ -783,7 +783,7 @@ BEGIN LTEXT "Клацання",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Якщо нічого не завантажено, то відкрити останній файл",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Подвійне клацання",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Переносити вікно за відеообласть",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1071,7 +1071,7 @@ BEGIN CONTROL "Не використовувати перехід по файлам при виконанні команд 'Крок назад/вперед' коли лише один файл у плейлисті",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Заблокувати ЗГОРТАННЯ, якщо повноекранний режим на іншому моніторі",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Призупиняти відтворення відео при згортанні вікна",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Приховувати курсор при відтворенні у віконному режимі",IDC_CHECK5, @@ -1154,10 +1154,10 @@ BEGIN CONTROL "Вбудована синхронізація (VSync)",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Ввімкнути корекцію часу кадра",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Заповнювати GPU перед VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Заповнювати GPU після Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Заповнювати GPU після Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Чекати на заповнення",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "Налаштування EVR Sync",IDC_STATIC2,5,67,286,117 - CONTROL "Синхр. відео з диспл.",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Синхр. відео з диспл.",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Презентація при найближчому vsync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Регулюв. частоти:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3170,11 +3170,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Так само як і VMR-9, але використовує справжній bicubic масштабувальник." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Так само як і VMR-9, але використовує справжній bicubic масштабувальник." IDS_DESC_NULLVR_ANY "Підключається до будь-якого типу відеоданих і відправляє вхідні кадри в нікуди. Може бути корисний для економії ресурсів процесора, якщо потрібен лише звук." IDS_DESC_NULLVR_UNCOMP "Так само як нормальний Null-рендерер, але підключається лише до нестиснених даних." IDS_DESC_EVR "Відеорендерер з підтримкою апаратного декодування." diff --git a/src/apps/mplayerc/mplayerc.rc b/src/apps/mplayerc/mplayerc.rc index b47d950cd8..0444a751fc 100644 --- a/src/apps/mplayerc/mplayerc.rc +++ b/src/apps/mplayerc/mplayerc.rc @@ -782,7 +782,7 @@ BEGIN LTEXT "Click",IDC_STATIC,10,18,60,8 COMBOBOX IDC_COMBO1,70,16,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "If nothing is loaded, open recent file",IDC_CHECK1, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,206,10 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,32,208,10 LTEXT "Double click",IDC_STATIC,10,49,60,8 COMBOBOX IDC_COMBO2,70,47,166,30,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Move window by the video area",IDC_CHECK2,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,65,133,10 @@ -1070,7 +1070,7 @@ BEGIN CONTROL "Don't use 'search in folder' on commands 'Skip back/forward' when only one item in playlist",IDC_CHECK7, "Button",BS_AUTOCHECKBOX | BS_MULTILINE | WS_TABSTOP,7,55,280,18 CONTROL "Prevent from MINIMIZE when Fullscreen on non default monitor",IDC_CHECK6, - "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,280,9 + "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,75,282,9 CONTROL "Pause the video playback when minimized",IDC_CHECK4, "Button",BS_AUTOCHECKBOX | WS_TABSTOP,7,87,280,9 CONTROL "Auto-hide the pointer during playback in windowed mode",IDC_CHECK5, @@ -1153,10 +1153,10 @@ BEGIN CONTROL "Internal VSync",IDC_VSYNC_INTERNAL,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,26,121,10 CONTROL "Enable frame time correction",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,10,51,170,10 CONTROL "Flush GPU before VSync",IDC_CHECK5,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,14,140,10 - CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,140,10 + CONTROL "Flush GPU after Present",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,26,142,10 CONTROL "Wait for flushes",IDC_CHECK7,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,140,38,100,10 GROUPBOX "EVR Sync settings",IDC_STATIC2,5,67,286,117 - CONTROL "Sync video to display",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,140,8 + CONTROL "Sync video to display",IDC_RADIO1,"Button",BS_AUTORADIOBUTTON | WS_GROUP,10,79,142,8 CONTROL "Present at nearest VSync",IDC_RADIO2,"Button",BS_AUTORADIOBUTTON,10,109,170,8 LTEXT "Frequency adjustment:",IDC_STATIC5,20,93,85,8 EDITTEXT IDC_CYCLEDELTA,109,91,40,13,ES_RIGHT | ES_AUTOHSCROLL,WS_EX_RIGHT @@ -3186,11 +3186,11 @@ END STRINGTABLE BEGIN IDS_BLOCK_EXTERNAL_VR "You can not add %s as external filter.\nYou should select your preferred video renderer on the Video settings page." + IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." END STRINGTABLE BEGIN - IDS_DESC_HAALI_VR "Looks like VMR-9, but uses a true bicubic resizer." IDS_DESC_NULLVR_ANY "Connects to any video-like media type and will send the incoming samples to nowhere. Use it when you don't need the video display and want to save the cpu from working unnecessarily." IDS_DESC_NULLVR_UNCOMP "Same as the normal Null renderer, but this will only connect to uncompressed types." IDS_DESC_EVR "Video renderer with hardware decoding support." From e095a54699487a78f4fa3aa231c7b195df486176 Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 16 Feb 2024 22:44:16 +0300 Subject: [PATCH 58/87] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20workflows/main.yml?= =?UTF-8?q?.=20=D0=91=D1=8B=D0=BB=D0=BE=20=D0=BD=D0=B5=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=D1=8C=D0=BD=D0=BE=D0=B5=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B5=20?= =?UTF-8?q?timeout-minutes.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index b2b9c61af9..92bb833ecb 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,7 +10,7 @@ on: - '**.vcxproj.filters' pull_request: paths-ignore: - - .github/workflows/main.yml + - .github/workflows/main.yml - docs/** - LICENSE.txt - src/apps/mpcresources/text/** @@ -19,7 +19,7 @@ on: jobs: build: runs-on: windows-latest - timeout-minutes: 10 + timeout-minutes: 60 steps: - name: Checkout repository @@ -69,7 +69,7 @@ jobs: path: _bin/Packages/**/MPC-BE*.x86-installer.zip compression-level: 0 - - name: Upload Portable x86 + - name: Upload Zip x86 uses: actions/upload-artifact@v4 with: name: "Zip x86" From 428a286c7e13e04f7595cfbfd71c49a3a686b7db Mon Sep 17 00:00:00 2001 From: v0lt Date: Fri, 16 Feb 2024 23:26:22 +0300 Subject: [PATCH 59/87] =?UTF-8?q?=D0=9A=D0=BE=D1=81=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/OSD.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/apps/mplayerc/OSD.cpp b/src/apps/mplayerc/OSD.cpp index 01d4b82c63..5ddfb4dda1 100644 --- a/src/apps/mplayerc/OSD.cpp +++ b/src/apps/mplayerc/OSD.cpp @@ -443,10 +443,10 @@ void COSD::DrawMessage() GradientFill(&m_MemDC, &rectMessages); - DWORD uFormat = DT_LEFT|DT_VCENTER|DT_NOPREFIX; + UINT uFormat = DT_LEFT|DT_VCENTER|DT_NOPREFIX; if (rectText.right + 10 >= (rectMessages.right)) { - uFormat = uFormat|DT_END_ELLIPSIS; + uFormat |= DT_END_ELLIPSIS; } const CAppSettings& s = AfxGetAppSettings(); @@ -999,7 +999,7 @@ void COSD::DrawWnd() GradientFill(&mdc, &rcBar); - DWORD uFormat = DT_LEFT | DT_TOP | DT_END_ELLIPSIS | DT_NOPREFIX; + const UINT uFormat = DT_LEFT | DT_TOP | DT_END_ELLIPSIS | DT_NOPREFIX; CRect r; From 89cf569c29ba45d1cb98e736d04df475cde651b8 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sat, 17 Feb 2024 07:09:13 +0300 Subject: [PATCH 60/87] =?UTF-8?q?workflows/main.yml:=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D1=81=D0=BE=D0=B1=D0=B8=D1=80=D0=B0=D0=B5=D0=BC=20Standalone?= =?UTF-8?q?=20filters.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 92bb833ecb..cc6d83f7f7 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -45,7 +45,7 @@ jobs: - name: Build MPC-BE and standalone filters run: | - .\\build.bat Build All Packages + .\\build.bat Build Packages shell: pwsh - name: Upload Installer x64 @@ -75,17 +75,3 @@ jobs: name: "Zip x86" path: _bin/Packages/**/MPC-BE*.x86.7z compression-level: 0 - - - name: Upload standalone_filters x64 - uses: actions/upload-artifact@v4 - with: - name: "standalone_filters x64" - path: _bin/Packages/**/standalone_filters-mpc-be*.x64.7z - compression-level: 0 - - - name: Upload standalone_filters x86 - uses: actions/upload-artifact@v4 - with: - name: "standalone_filters x86" - path: _bin/Packages/**/standalone_filters-mpc-be*.x86.7z - compression-level: 0 From 058d956c6c2b362b49a339f31893055dcd4ad2de Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sat, 17 Feb 2024 15:11:35 +1000 Subject: [PATCH 61/87] =?UTF-8?q?CFileItem/CExtraFileItem=20-=20=D1=82?= =?UTF-8?q?=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BC=D0=B5=D1=82=D0=BE=D0=B4?= =?UTF-8?q?=D1=8B=20=D0=B2=D0=BE=D0=B7=D0=B2=D1=80=D0=B0=D1=89=D0=B0=D1=8E?= =?UTF-8?q?=D1=82=20=D0=BD=D0=B5=20=D0=BA=D0=BE=D0=BF=D0=B8=D0=B8=20=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=BE=D0=BA=20=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=81?= =?UTF-8?q?=D1=82=D0=B0=D0=BD=D1=82=D0=BD=D1=8B=D0=B5=20=D1=81=D1=81=D1=8B?= =?UTF-8?q?=D0=BB=D0=BA=D0=B8.=20=D0=A2=D0=B5=D0=BC=20=D1=81=D0=B0=D0=BC?= =?UTF-8?q?=D1=8B=D0=BC=20=D0=B8=D0=B7=D0=B1=D0=B0=D0=B2=D0=B8=D0=BC=D1=81?= =?UTF-8?q?=D1=8F=20=D0=BE=D1=82=20=D0=BB=D0=B8=D1=88=D0=BD=D0=B8=D1=85=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=BF=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B9=20=D0=B3=D0=B4=D0=B5=20=D1=8D=D1=82=D0=BE=20=D0=B2=D0=BE?= =?UTF-8?q?=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/FileItem.h | 42 ++++++++++++------------- src/apps/mplayerc/MainFrm.cpp | 14 ++++----- src/apps/mplayerc/PlayerPlaylistBar.cpp | 3 +- 3 files changed, 29 insertions(+), 30 deletions(-) diff --git a/src/apps/mplayerc/FileItem.h b/src/apps/mplayerc/FileItem.h index e03c7f0a6a..5ddc71296b 100644 --- a/src/apps/mplayerc/FileItem.h +++ b/src/apps/mplayerc/FileItem.h @@ -1,5 +1,5 @@ /* - * (C) 2023 see Authors.txt + * (C) 2023-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -23,13 +23,12 @@ #include "DSUtil/CUE.h" #include "DSUtil/FileHandle.h" -typedef std::vector ChaptersList; - +using ChaptersList = std::vector; class CFileItem { - CString m_fpath; - CString m_title; + CStringW m_fpath; + CStringW m_title; ChaptersList m_chapters; REFERENCE_TIME m_duration = 0; @@ -38,10 +37,10 @@ class CFileItem CFileItem() = default; ~CFileItem() = default; - CFileItem(const CString& fpath) + CFileItem(const CStringW& fpath) : m_fpath(fpath) {} - CFileItem(const CString& fpath, const CString& title, const REFERENCE_TIME duration = 0) + CFileItem(const CStringW& fpath, const CStringW& title, const REFERENCE_TIME duration = 0) : m_fpath(fpath) , m_title(title) , m_duration(duration) @@ -57,13 +56,13 @@ class CFileItem return *this; } - const CFileItem& operator = (const CString& str) { + const CFileItem& operator = (const CStringW& str) { m_fpath = str; return *this; } - operator CString() const { + operator CStringW() const { return m_fpath; } @@ -71,11 +70,11 @@ class CFileItem return m_fpath; } - CString GetPath() const { + const CStringW& GetPath() const { return m_fpath; }; - CString GetExt() const { + CStringW GetExt() const { return GetFileExt(m_fpath); }; @@ -88,11 +87,11 @@ class CFileItem }; // Title - void SetTitle(const CString& title) { + void SetTitle(const CStringW& title) { m_title = title; } - CString GetTitle() const { + const CStringW& GetTitle() const { return m_title; }; @@ -105,11 +104,11 @@ class CFileItem m_chapters.clear(); } - size_t GetChapterCount() { + size_t GetChapterCount() const { return m_chapters.size(); } - void GetChapters(ChaptersList& chaplist) { + void GetChapters(ChaptersList& chaplist) const { chaplist = m_chapters; } @@ -121,8 +120,7 @@ class CFileItem } }; -typedef std::list CFileItemList; - +using CFileItemList = std::list; class CExtraFileItem { @@ -161,7 +159,7 @@ class CExtraFileItem m_fpath = fpath; } - CStringW GetPath() const { + const CStringW& GetPath() const { return m_fpath; }; @@ -174,14 +172,14 @@ class CExtraFileItem m_title = title; } - CStringW GetTitle() const { + const CStringW& GetTitle() const { return m_title; }; - CStringA GetLang() const { + const CStringA& GetLang() const { return m_lang; }; }; -typedef std::list CAudioItemList; -typedef std::list CSubtitleItemList; +using CAudioItemList = std::list; +using CSubtitleItemList = std::list; diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 31d2950bec..1e3d4586ed 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -12198,7 +12198,7 @@ CString CMainFrame::OpenFile(OpenFileData* pOFD) m_wndPlaylistBar.SetCurLabel(m_youtubeFields.title); } else if (s.bYoutubePageParser && pOFD->auds.empty()) { - const CStringW url = pOFD->fi.GetPath(); + auto& url = pOFD->fi.GetPath(); bool ok = Youtube::CheckURL(url); if (ok) { ok = Youtube::Parse_URL( @@ -12224,7 +12224,7 @@ CString CMainFrame::OpenFile(OpenFileData* pOFD) && pOFD->auds.empty() && ::PathIsURLW(pOFD->fi)) { - const CStringW url = pOFD->fi.GetPath(); + auto& url = pOFD->fi.GetPath(); const auto ext = GetFileExt(url).MakeLower(); bool ok = (ext != L".m3u" && ext != L".m3u8"); @@ -12500,7 +12500,7 @@ CString CMainFrame::OpenFile(OpenFileData* pOFD) } if (pOFD->fi.Valid()) { - const CString fn = youtubeUrl.GetLength() ? youtubeUrl : pOFD->fi.GetPath(); + auto& fn = youtubeUrl.GetLength() ? youtubeUrl : pOFD->fi.GetPath(); if (!StartsWith(fn, L"pipe:")) { const bool diskImage = m_DiskImage.GetDriveLetter() && m_SessionInfo.Path.GetLength(); @@ -13497,7 +13497,7 @@ void CMainFrame::OpenSetupAudioStream() CPlaylistItem pli; if (m_wndPlaylistBar.GetCur(pli)) { for (const auto& fi : pli.m_auds) { - CString str = fi.GetPath(); + auto& str = fi.GetPath(); extAudioList.emplace_back(GetFileOnly(str)); } } @@ -13971,7 +13971,7 @@ bool CMainFrame::OpenMediaPrivate(std::unique_ptr& pOMD) m_bWasPausedOnMinimizedVideo = false; if (pFileData) { - CString path = pFileData->fi.GetPath(); + auto& path = pFileData->fi.GetPath(); if (::PathIsURLW(path) && path.Find(L"://") <= 0) { pFileData->fi = L"http://" + path; } @@ -15696,7 +15696,7 @@ void CMainFrame::SetupAudioTracksSubMenu() CPlaylistItem pli; if (m_wndPlaylistBar.GetCur(pli)) { for (const auto& fi : pli.m_auds) { - CString str = fi.GetPath(); + auto& str = fi.GetPath(); if (!str.IsEmpty() && name == GetFileOnly(str)) { fExternal = true; break; @@ -16169,7 +16169,7 @@ bool CMainFrame::LoadSubtitle(const CExtraFileItem& subItem, ISubStream **actual } CComPtr pSubStream; - const CStringW fname = subItem.GetPath(); + auto& fname = subItem.GetPath(); const CStringW ext = GetFileExt(fname).MakeLower(); if (ext == L".mks" && s.IsISRAutoLoadEnabled()) { diff --git a/src/apps/mplayerc/PlayerPlaylistBar.cpp b/src/apps/mplayerc/PlayerPlaylistBar.cpp index f5c7761b10..61b3d0dec5 100644 --- a/src/apps/mplayerc/PlayerPlaylistBar.cpp +++ b/src/apps/mplayerc/PlayerPlaylistBar.cpp @@ -2515,7 +2515,8 @@ OpenMediaData* CPlayerPlaylistBar::GetCurOMD(REFERENCE_TIME rtStart) pli->AutoLoadFiles(); - CString fn = pli->m_fi.GetPath().MakeLower(); + CStringW fn = pli->m_fi.GetPath(); + fn.MakeLower(); if (TGetPathType(fn) != IT_FILE) { return nullptr; From 0ee5f2aa3510bb34df8f9cfe8240816e907fe477 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sat, 17 Feb 2024 15:20:36 +1000 Subject: [PATCH 62/87] =?UTF-8?q?=D0=A1=D0=BF=D0=B8=D1=81=D0=BE=D0=BA=20?= =?UTF-8?q?=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B8=D1=85=20=D0=B0=D1=83=D0=B4?= =?UTF-8?q?=D0=B8=D0=BE-=D0=B4=D0=BE=D1=80=D0=BE=D0=B6=D0=B5=D0=BA=20-=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BF=D0=BE=D0=BA=D0=B0?= =?UTF-8?q?=D0=B7=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D0=BD=D0=B5=20=D1=82?= =?UTF-8?q?=D0=BE=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=B8=D0=BC=D1=8F=20=D1=84?= =?UTF-8?q?=D0=B0=D0=B9=D0=BB=D0=B0=20=D0=BD=D0=BE=20=D0=B8=20=D0=BF=D1=83?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BE=D1=82=D0=BD=D0=BE=D1=81=D0=B8=D1=82=D0=B5?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D0=BE=20=D0=BF=D1=83=D1=82=D0=B8=20=D0=BE?= =?UTF-8?q?=D1=81=D0=BD=D0=BE=D0=B2=D0=BD=D0=BE=D0=B3=D0=BE=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0.=20=D0=95=D1=81=D0=BB=D0=B8=20=D0=B2=D0=BD?= =?UTF-8?q?=D0=B5=D1=88=D0=BD=D0=B8=D0=B5=20=D0=B0=D1=83=D0=B4=D0=B8=D0=BE?= =?UTF-8?q?-=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20=D0=B7=D0=B0=D0=B3=D1=80?= =?UTF-8?q?=D1=83=D0=B6=D0=B5=D0=BD=D1=8B=20=D0=BF=D0=BE=20=D0=B4=D1=80?= =?UTF-8?q?=D1=83=D0=B3=D0=BE=D0=BC=D1=83=20=D0=BF=D1=83=D1=82=D0=B8=20-?= =?UTF-8?q?=20=D1=82=D0=BE=20=D1=82=D0=BE=D0=B3=D0=B4=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D0=BE=20=D0=B8=D0=BC=D1=8F=20=D1=84=D0=B0?= =?UTF-8?q?=D0=B9=D0=BB=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 11 +++++++++-- src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp | 4 +++- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 1e3d4586ed..eaad646dc4 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -15695,9 +15695,16 @@ void CMainFrame::SetupAudioTracksSubMenu() bool fExternal = false; CPlaylistItem pli; if (m_wndPlaylistBar.GetCur(pli)) { + auto mainFileDir = GetFolderOnly(pli.m_fi); for (const auto& fi : pli.m_auds) { - auto& str = fi.GetPath(); - if (!str.IsEmpty() && name == GetFileOnly(str)) { + auto& audioPath = fi.GetPath(); + if (!audioPath.IsEmpty() && name == audioPath) { + if (!mainFileDir.IsEmpty() && StartsWith(name, mainFileDir.GetString())) { + name.Delete(0, mainFileDir.GetLength()); + } else { + name = GetFileOnly(name.GetString()); + } + fExternal = true; break; } diff --git a/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp b/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp index 7d6974f151..c57d4b05d9 100644 --- a/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp +++ b/src/filters/switcher/AudioSwitcher/StreamSwitcher.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -643,12 +643,14 @@ HRESULT CStreamSwitcherInputPin::CompleteConnect(IPin* pReceivePin) } else { if (!pinName.IsEmpty()) { fileName = pinName; + /* } else { fileName.Replace('\\', '/'); CString fn = fileName.Mid(fileName.ReverseFind('/') + 1); if (!fn.IsEmpty()) { fileName = fn; } + */ } } From 5efaf7f6a7c2723d69f0c3af14cccfc0de5a0af8 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sat, 17 Feb 2024 15:50:22 +1000 Subject: [PATCH 63/87] =?UTF-8?q?=D0=94=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=BA=20=D0=BF=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D1=8B=D0=B4=D1=83=D1=89=D0=B5=D0=BC=D1=83=20=D0=BA=D0=BE=D0=BC?= =?UTF-8?q?=D0=BC=D0=B8=D1=82=D1=83.=20=D0=9D=D0=B5=D0=B1=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D1=88=D0=B0=D1=8F=20=D0=BA=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B0=D0=B2=D1=82=D0=BE=D0=B7=D0=B0=D0=B3=D1=80=D1=83?= =?UTF-8?q?=D0=B7=D0=BA=D0=B8=20=D0=B2=D0=BD=D0=B5=D1=88=D0=BD=D0=B8=D1=85?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 7 ++++--- src/apps/mplayerc/PlayerPlaylistBar.cpp | 15 +++++---------- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index eaad646dc4..40593f1cc7 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -15697,9 +15697,10 @@ void CMainFrame::SetupAudioTracksSubMenu() if (m_wndPlaylistBar.GetCur(pli)) { auto mainFileDir = GetFolderOnly(pli.m_fi); for (const auto& fi : pli.m_auds) { - auto& audioPath = fi.GetPath(); - if (!audioPath.IsEmpty() && name == audioPath) { - if (!mainFileDir.IsEmpty() && StartsWith(name, mainFileDir.GetString())) { + auto& audioFile = fi.GetPath(); + if (!audioFile.IsEmpty() && name == audioFile) { + auto audioFileDir = GetFolderOnly(audioFile); + if (!mainFileDir.IsEmpty() && audioFileDir != mainFileDir && StartsWith(name, mainFileDir.GetString())) { name.Delete(0, mainFileDir.GetLength()); } else { name = GetFileOnly(name.GetString()); diff --git a/src/apps/mplayerc/PlayerPlaylistBar.cpp b/src/apps/mplayerc/PlayerPlaylistBar.cpp index 61b3d0dec5..08fcab7931 100644 --- a/src/apps/mplayerc/PlayerPlaylistBar.cpp +++ b/src/apps/mplayerc/PlayerPlaylistBar.cpp @@ -341,10 +341,11 @@ static void StringToPaths(const CString& curentdir, const CString& str, std::vec } else { CPath parentdir(path + L"\\.."); parentdir.Canonicalize(); + parentdir.AddBackslash(); do { if ((fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) && wcscmp(fd.cFileName, L".") && wcscmp(fd.cFileName, L"..")) { - CString folder = parentdir + '\\' + fd.cFileName + '\\'; + CString folder = parentdir + fd.cFileName + '\\'; size_t index = 0; size_t count = paths.size(); @@ -374,15 +375,9 @@ void CPlaylistItem::AutoLoadFiles() return; } - int n = fpath.ReverseFind('\\') + 1; - CStringW curdir = fpath.Left(n); - CStringW name = fpath.Mid(n); - CStringW ext; - n = name.ReverseFind('.'); - if (n >= 0) { - ext = name.Mid(n + 1).MakeLower(); - name.Truncate(n); - } + auto curdir = GetFolderOnly(fpath); + auto name = GetFileOnly(fpath); + auto ext = GetFileExt(fpath); CString BDLabel, empty; AfxGetMainFrame()->MakeBDLabel(fpath, empty, &BDLabel); From beb476dadd5923cee84e4729f8ccf914e907e243 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sat, 17 Feb 2024 16:41:32 +1000 Subject: [PATCH 64/87] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20=D0=B2=20ffmpeg.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ExtLib/ffmpeg/libavcodec/dxva2_hevc.c | 1 + src/ExtLib/ffmpeg/libavcodec/dxva2_internal.h | 3 +-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ExtLib/ffmpeg/libavcodec/dxva2_hevc.c b/src/ExtLib/ffmpeg/libavcodec/dxva2_hevc.c index 4e4a63c310..13826d3327 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dxva2_hevc.c +++ b/src/ExtLib/ffmpeg/libavcodec/dxva2_hevc.c @@ -33,6 +33,7 @@ struct hevc_dxva2_picture_context { // ==> Start patch MPC + //DXVA_PicParams_HEVC pp; DXVA_PicParams_HEVC_Rext pp; // ==> End patch MPC DXVA_Qmatrix_HEVC qm; diff --git a/src/ExtLib/ffmpeg/libavcodec/dxva2_internal.h b/src/ExtLib/ffmpeg/libavcodec/dxva2_internal.h index 84b1113c5b..16089631f8 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dxva2_internal.h +++ b/src/ExtLib/ffmpeg/libavcodec/dxva2_internal.h @@ -216,8 +216,7 @@ void ff_dxva2_h264_fill_picture_parameters(const AVCodecContext *avctx, AVDXVACo void ff_dxva2_h264_fill_scaling_lists(const AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_Qmatrix_H264 *qm); // ==> Start patch MPC -//void ff_dxva2_hevc_fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_PicParams_HEVC *pp); -void ff_dxva2_hevc_fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_PicParams_HEVC_Rext *ppext); +void ff_dxva2_hevc_fill_picture_parameters(const AVCodecContext *avctx, AVDXVAContext *ctx, /*DXVA_PicParams_HEVC *pp*/DXVA_PicParams_HEVC_Rext *ppext); // ==> End patch MPC void ff_dxva2_hevc_fill_scaling_lists(const AVCodecContext *avctx, AVDXVAContext *ctx, DXVA_Qmatrix_HEVC *qm); From 59524fd0b5d95f030073ac4541de8f52e336fb82 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sat, 17 Feb 2024 21:39:59 +0300 Subject: [PATCH 65/87] =?UTF-8?q?WavDest:=20=D0=98=D1=81=D0=BA=D0=BB=D1=8E?= =?UTF-8?q?=D1=87=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D1=82=D0=B5=D0=BD=D1=86?= =?UTF-8?q?=D0=B8=D0=B0=D0=BB=D1=8C=D0=BD=D0=B0=D1=8F=20=D1=83=D1=82=D0=B5?= =?UTF-8?q?=D1=87=D0=BA=D0=B0=20=D0=BF=D0=B0=D0=BC=D1=8F=D1=82=D0=B8.=20?= =?UTF-8?q?=D0=9A=D0=BE=D1=81=D0=BC=D0=B5=D1=82=D0=B8=D0=BA=D0=B0=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/filters/muxer/WavDest/WavDest.cpp | 12 +++++------- src/filters/muxer/WavDest/WavDest.h | 8 ++++---- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/filters/muxer/WavDest/WavDest.cpp b/src/filters/muxer/WavDest/WavDest.cpp index 6451fdfcd5..df38156439 100644 --- a/src/filters/muxer/WavDest/WavDest.cpp +++ b/src/filters/muxer/WavDest/WavDest.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -72,8 +72,6 @@ CFilterApp theApp; CWavDestFilter::CWavDestFilter(LPUNKNOWN pUnk, HRESULT* phr) : CTransformFilter(L"WavDest filter", pUnk, __uuidof(this)) - , m_cbWavData(0) - , m_cbHeader(0) { if (CWavDestOutputPin* pOut = DNew CWavDestOutputPin(this, phr)) { if (SUCCEEDED(*phr)) { @@ -284,9 +282,9 @@ HRESULT CWavDestFilter::StopStreaming() HRESULT hr = ((IMemInputPin*) pDwnstrmInputPin)->QueryInterface(IID_PPV_ARGS(&pStream)); if (SUCCEEDED(hr)) { - BYTE* pb = (BYTE*)_alloca(m_cbHeader); + auto pb = std::make_unique(m_cbHeader); - RIFFLIST* pRiffWave = (RIFFLIST*)pb; + RIFFLIST* pRiffWave = (RIFFLIST*)pb.get(); RIFFCHUNK* pRiffFmt = (RIFFCHUNK*)(pRiffWave + 1); RIFFCHUNK* pRiffData = (RIFFCHUNK*)(((BYTE*)(pRiffFmt + 1)) + m_pInput->CurrentMediaType().FormatLength()); @@ -302,11 +300,11 @@ HRESULT CWavDestFilter::StopStreaming() pRiffWave->fccListType = FCC('WAVE'); LARGE_INTEGER li; - ZeroMemory(&li, sizeof(li)); + li.QuadPart = 0; hr = pStream->Seek(li, STREAM_SEEK_SET, 0); if (SUCCEEDED(hr)) { - hr = pStream->Write(pb, m_cbHeader, 0); + hr = pStream->Write(pb.get(), m_cbHeader, 0); } pStream->Release(); } diff --git a/src/filters/muxer/WavDest/WavDest.h b/src/filters/muxer/WavDest/WavDest.h index 510e005493..8ab9976e5a 100644 --- a/src/filters/muxer/WavDest/WavDest.h +++ b/src/filters/muxer/WavDest/WavDest.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -35,6 +35,9 @@ class CWavDestOutputPin : public CTransformOutputPin class __declspec(uuid("8685214E-4D32-4058-BE04-D01104F00B0C")) CWavDestFilter : public CTransformFilter { + ULONG m_cbWavData = 0; + ULONG m_cbHeader = 0; + public: CWavDestFilter(LPUNKNOWN pUnk, HRESULT* pHr); ~CWavDestFilter(); @@ -58,7 +61,4 @@ class __declspec(uuid("8685214E-4D32-4058-BE04-D01104F00B0C")) HRESULT Copy(IMediaSample* pSource, IMediaSample* pDest) const; HRESULT Transform(IMediaSample* pMediaSample); HRESULT Transform(AM_MEDIA_TYPE* pType, const signed char ContrastLevel) const; - - ULONG m_cbWavData; - ULONG m_cbHeader; }; From a767699a7f5ded05a0b45a48355200734fb9cfb7 Mon Sep 17 00:00:00 2001 From: v0lt Date: Sat, 17 Feb 2024 23:38:57 +0300 Subject: [PATCH 66/87] =?UTF-8?q?=D0=9A=D0=BE=D1=81=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/SaveTaskDlg.cpp | 3 +-- src/filters/parser/StreamDriveThru/StreamDriveThru.cpp | 6 +++--- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/src/apps/mplayerc/SaveTaskDlg.cpp b/src/apps/mplayerc/SaveTaskDlg.cpp index 86d86acfce..28123783ce 100644 --- a/src/apps/mplayerc/SaveTaskDlg.cpp +++ b/src/apps/mplayerc/SaveTaskDlg.cpp @@ -478,8 +478,7 @@ HRESULT CSaveTaskDlg::DownloadHTTP(CStringW url, const CStringW filepath) } } - int attempts = 0; - while (!m_bAbort && attempts <= 20) { + while (!m_bAbort) { DWORD dwSizeRead = 0; hr = httpAsync.Read(pBuffer.data(), bufLen, dwSizeRead); if (hr != S_OK) { diff --git a/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp b/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp index b1640d4ba1..506f96f0c2 100644 --- a/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp +++ b/src/filters/parser/StreamDriveThru/StreamDriveThru.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -123,7 +123,7 @@ DWORD CStreamDriveThruFilter::ThreadProc() case CMD_RUN: Reply(S_OK); - do { + { CComPtr pAsyncReader; CComPtr pStream; @@ -195,7 +195,7 @@ DWORD CStreamDriveThruFilter::ThreadProc() if (CComPtr pPin = m_pOutput->GetConnected()) { pPin->EndOfStream(); } - } while (false); + } break; } From 49b7638b7632eb1a7ac6583144da16307c5db09b Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Sun, 18 Feb 2024 13:41:26 +1000 Subject: [PATCH 67/87] =?UTF-8?q?=D0=9F=D1=80=D0=B5=D0=B4=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D1=81=D0=BC=D0=BE=D1=82=D1=80=20=D0=BD=D0=B0=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BB=D0=BE=D1=81=D0=B5=20=D0=BF=D0=B5=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B5=20-=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D1=8C=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB?= =?UTF-8?q?=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82=D1=8C=20=D0=B4=D0=BB=D1=8F?= =?UTF-8?q?=20=D0=BE=D0=BD=D0=BB=D0=B0=D0=B9=D0=BD,=20=D0=BE=D0=BF=D1=86?= =?UTF-8?q?=D0=B8=D0=BE=D0=BD=D0=B0=D0=BB=D1=8C=D0=BD=D0=BE,=20=D0=BF?= =?UTF-8?q?=D0=BE=20=D1=83=D0=BC=D0=BE=D0=BB=D1=87=D0=B0=D0=BD=D0=B8=D1=8E?= =?UTF-8?q?=20=D0=B2=D1=8B=D0=BA=D0=BB=D1=8E=D1=87=D0=B5=D0=BD=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.br.rc | 9 +++--- src/apps/mpcresources/mplayerc.by.rc | 9 +++--- src/apps/mpcresources/mplayerc.ca.rc | 9 +++--- src/apps/mpcresources/mplayerc.cz.rc | 9 +++--- src/apps/mpcresources/mplayerc.de.rc | 9 +++--- src/apps/mpcresources/mplayerc.el.rc | 9 +++--- src/apps/mpcresources/mplayerc.es.rc | 9 +++--- src/apps/mpcresources/mplayerc.eu.rc | 9 +++--- src/apps/mpcresources/mplayerc.fr.rc | 9 +++--- src/apps/mpcresources/mplayerc.he.rc | 9 +++--- src/apps/mpcresources/mplayerc.hr.rc | 9 +++--- src/apps/mpcresources/mplayerc.hu.rc | 9 +++--- src/apps/mpcresources/mplayerc.hy.rc | 9 +++--- src/apps/mpcresources/mplayerc.it.rc | 9 +++--- src/apps/mpcresources/mplayerc.ja.rc | 9 +++--- src/apps/mpcresources/mplayerc.kr.rc | 9 +++--- src/apps/mpcresources/mplayerc.nl.rc | 9 +++--- src/apps/mpcresources/mplayerc.pl.rc | 9 +++--- src/apps/mpcresources/mplayerc.ro.rc | 9 +++--- src/apps/mpcresources/mplayerc.ru.rc | 9 +++--- src/apps/mpcresources/mplayerc.sc.rc | 9 +++--- src/apps/mpcresources/mplayerc.sk.rc | 9 +++--- src/apps/mpcresources/mplayerc.sv.rc | 9 +++--- src/apps/mpcresources/mplayerc.tc.rc | 9 +++--- src/apps/mpcresources/mplayerc.tr.rc | 9 +++--- src/apps/mpcresources/mplayerc.ua.rc | 9 +++--- src/apps/mpcresources/text/mplayerc.br.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.by.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.ca.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.cz.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.de.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.el.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.es.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.eu.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.fr.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.he.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.hr.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.hu.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.hy.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.it.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.ja.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.kr.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.nl.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.pl.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.ro.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.ru.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.sc.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.sk.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.sv.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.tc.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.tr.rc.txt | 31 ++++++++++--------- src/apps/mpcresources/text/mplayerc.ua.rc.txt | 31 ++++++++++--------- src/apps/mplayerc/AppSettings.cpp | 3 ++ src/apps/mplayerc/AppSettings.h | 1 + src/apps/mplayerc/MainFrm.cpp | 16 ++++++---- src/apps/mplayerc/PPageInterface.cpp | 8 ++++- src/apps/mplayerc/PPageInterface.h | 3 +- src/apps/mplayerc/SettingsDefines.h | 3 +- src/apps/mplayerc/mplayerc.rc | 9 +++--- 60 files changed, 592 insertions(+), 522 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.br.rc b/src/apps/mpcresources/mplayerc.br.rc index 50c1891e1b..00bf05bc12 100644 --- a/src/apps/mpcresources/mplayerc.br.rc +++ b/src/apps/mpcresources/mplayerc.br.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Usar dica de tempo:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Usar prévia na busca",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Tamanho relativo à largura da tela:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Tamanho relativo à largura da tela:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Usar marcador de capítulos",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Usar barra de voar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Tamanho da fonte da lista de reprodução:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.by.rc b/src/apps/mpcresources/mplayerc.by.rc index 4f1b19be45..7edcf16f23 100644 --- a/src/apps/mpcresources/mplayerc.by.rc +++ b/src/apps/mpcresources/mplayerc.by.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ca.rc b/src/apps/mpcresources/mplayerc.ca.rc index 32655726f1..f3f14a51d4 100644 --- a/src/apps/mpcresources/mplayerc.ca.rc +++ b/src/apps/mpcresources/mplayerc.ca.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.cz.rc b/src/apps/mpcresources/mplayerc.cz.rc index 533b2a2cae..72cb5b28ee 100644 --- a/src/apps/mpcresources/mplayerc.cz.rc +++ b/src/apps/mpcresources/mplayerc.cz.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.de.rc b/src/apps/mpcresources/mplayerc.de.rc index 4bc701f7c3..8e1b10d2b9 100644 --- a/src/apps/mpcresources/mplayerc.de.rc +++ b/src/apps/mpcresources/mplayerc.de.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Zeit-Tooltip anzeigen:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Vorschau bei der Suche anzeigen",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Größe bezogen auf Bildschirmbreite:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Größe bezogen auf Bildschirmbreite:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Kapitelmarker in der Suchleiste anzeigen",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Flybar aktivieren",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Schriftgröße der Wiedergabeliste:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.el.rc b/src/apps/mpcresources/mplayerc.el.rc index 80b416f33d..bb3b94e400 100644 --- a/src/apps/mpcresources/mplayerc.el.rc +++ b/src/apps/mpcresources/mplayerc.el.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Χρήση συμβουλής χρόνου:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Χρήση της προεπισκόπησης στην αναζήτηση",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Μέγεθος σε σχέση με το πλάτος της οθόνης:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Μέγεθος σε σχέση με το πλάτος της οθόνης:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Εμφάνιση σημάνσεων κεφαλαίων στη γραμμή αναζήτησης",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Χρήση εναέριας μπάρας",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Μέγεθος γραμματοσειράς λίστας αναπαραγωγής:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.es.rc b/src/apps/mpcresources/mplayerc.es.rc index 603c4d4411..d9c285a61e 100644 --- a/src/apps/mpcresources/mplayerc.es.rc +++ b/src/apps/mpcresources/mplayerc.es.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Usar herramienta informativa de tiempo:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Usar vista previa en la búsqueda",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Tamaño relativo al ancho de pantalla:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Tamaño relativo al ancho de pantalla:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Usar marcador de capítulos",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Usar barra flotante",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Tamaño de fuente de Lista de Reproducción:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.eu.rc b/src/apps/mpcresources/mplayerc.eu.rc index cf792c44d0..353b340781 100644 --- a/src/apps/mpcresources/mplayerc.eu.rc +++ b/src/apps/mpcresources/mplayerc.eu.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Erabili denbora oharra:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Erabili aurrekoa bilaketan",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Neurria ikusleiho zabaleraren arabera:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Neurria ikusleiho zabaleraren arabera:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Erabili atal markatzailea",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Erabili gainbarra",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.fr.rc b/src/apps/mpcresources/mplayerc.fr.rc index 398055a619..e21a4ec6ad 100644 --- a/src/apps/mpcresources/mplayerc.fr.rc +++ b/src/apps/mpcresources/mplayerc.fr.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Utiliser l'info-bulle temporelle :",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Utiliser l'aperçu dans la recherche",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Taille par rapport à la largeur de l'écran :",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Taille par rapport à la largeur de l'écran :",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Utiliser le marqueur de chapitres",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Utiliser la barre volante",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Taille de la police de la Playlist:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.he.rc b/src/apps/mpcresources/mplayerc.he.rc index aaaac16de4..6fd357dbe3 100644 --- a/src/apps/mpcresources/mplayerc.he.rc +++ b/src/apps/mpcresources/mplayerc.he.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.hr.rc b/src/apps/mpcresources/mplayerc.hr.rc index 25fbfa5478..07f4e550a7 100644 --- a/src/apps/mpcresources/mplayerc.hr.rc +++ b/src/apps/mpcresources/mplayerc.hr.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Koristi vremenski tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Koristi pretpregled prilikom pretrage",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Veličina relativna širini ekrana:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Veličina relativna širini ekrana:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Koristi marker poglavlja",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Koristi flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Veličina fonta playliste:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.hu.rc b/src/apps/mpcresources/mplayerc.hu.rc index 764c1d6616..d2e989d9d3 100644 --- a/src/apps/mpcresources/mplayerc.hu.rc +++ b/src/apps/mpcresources/mplayerc.hu.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Használja az időtippet:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Használja az előnézetet a keresésben",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "A képernyő szélességéhez viszonyított méret:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "A képernyő szélességéhez viszonyított méret:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Használjon fejezetjelölőt",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Használjon léptéket",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Lejátszási lista betüméret:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.hy.rc b/src/apps/mpcresources/mplayerc.hy.rc index 231988120c..34cfdb1c24 100644 --- a/src/apps/mpcresources/mplayerc.hy.rc +++ b/src/apps/mpcresources/mplayerc.hy.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.it.rc b/src/apps/mpcresources/mplayerc.it.rc index 2afe66d910..8dee7e4aa4 100644 --- a/src/apps/mpcresources/mplayerc.it.rc +++ b/src/apps/mpcresources/mplayerc.it.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Usa descrizione comando sul tempo:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Usa l'anteprima nella ricerca",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Dimensioni relative alla larghezza dello schermo:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Dimensioni relative alla larghezza dello schermo:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Usa marcatore capitoli",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Usa la flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Dimensione carattere playlist:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index badfeab081..6e258c0f45 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "タイム ツールヒントを使用する:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "検索でプレビュー機能を使用する",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "画面横幅に対するサイズ:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "画面横幅に対するサイズ:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "チャプター マーカーを使用する",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "フライ バーを使用する",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "プレイリスト フォント サイズ:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.kr.rc b/src/apps/mpcresources/mplayerc.kr.rc index 34c62be8ab..267ca6b474 100644 --- a/src/apps/mpcresources/mplayerc.kr.rc +++ b/src/apps/mpcresources/mplayerc.kr.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "시간 툴팁 사용 :",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "탐색 표시줄에서 미리 보기 사용",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "화면 너비 대비 크기 :",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "화면 너비 대비 크기 :",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "챕터 구분 표기 사용",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "플라이바 사용",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "재생 목록 글자 크기 :",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.nl.rc b/src/apps/mpcresources/mplayerc.nl.rc index 1c6bd2662c..c64a31ab24 100644 --- a/src/apps/mpcresources/mplayerc.nl.rc +++ b/src/apps/mpcresources/mplayerc.nl.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Toon scherminfo voor tijd:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Activeer voorvertoning op zoekbalk",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Grootte op basis v/d schermbreedte:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Grootte op basis v/d schermbreedte:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Toon hoofdstukmarkeringen op zoekbalk",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Gebruik flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Tekengrootte van afspeellijst:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.pl.rc b/src/apps/mpcresources/mplayerc.pl.rc index 647bc02a45..c032678057 100644 --- a/src/apps/mpcresources/mplayerc.pl.rc +++ b/src/apps/mpcresources/mplayerc.pl.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Pokazuj dymek z czasem:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Użyj podglądu podczas szukania",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Rozmiar w stosunku do szerokości ekranu:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Rozmiar w stosunku do szerokości ekranu:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Pokaż znacznik rozdziałów",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Użyj flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Rozmiar czcionki listy odtwarzania:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ro.rc b/src/apps/mpcresources/mplayerc.ro.rc index f168568e98..a9f395d724 100644 --- a/src/apps/mpcresources/mplayerc.ro.rc +++ b/src/apps/mpcresources/mplayerc.ro.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Folosește indiciu de timp:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Folosește previzualizarea în căutare",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Dimensiunea raportată la lățimea ecranului:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Dimensiunea raportată la lățimea ecranului:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Arată semne pentru capitole în bara de căutare",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Folosește bara pentru sărituri",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Dimensiunea scrisului (fontului) listei de redare:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ru.rc b/src/apps/mpcresources/mplayerc.ru.rc index be5c5760bb..7a19b47dec 100644 --- a/src/apps/mpcresources/mplayerc.ru.rc +++ b/src/apps/mpcresources/mplayerc.ru.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Показывать время",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Использовать предпросмотр при поиске видеофрагмента",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Размер относительно размера экрана:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Размер относительно размера экрана:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Онлайн",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Использовать маркер для чаптеров",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Показать панель управления поверх видео",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Размер шрифта плейлиста:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index 103c0c1e8f..557c538f36 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "使用时间工具提示:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "搜索时显示预览",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "相对于屏幕宽度的缩略图大小:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "相对于屏幕宽度的缩略图大小:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "显示章节标记",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "全屏模式时启用悬浮工具条",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "播放列表字体大小:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.sk.rc b/src/apps/mpcresources/mplayerc.sk.rc index 385ce8556a..9246452997 100644 --- a/src/apps/mpcresources/mplayerc.sk.rc +++ b/src/apps/mpcresources/mplayerc.sk.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.sv.rc b/src/apps/mpcresources/mplayerc.sv.rc index 48bf41282e..9c3a1bf137 100644 --- a/src/apps/mpcresources/mplayerc.sv.rc +++ b/src/apps/mpcresources/mplayerc.sv.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.tc.rc b/src/apps/mpcresources/mplayerc.tc.rc index e3cf32a610..3274ab2cd1 100644 --- a/src/apps/mpcresources/mplayerc.tc.rc +++ b/src/apps/mpcresources/mplayerc.tc.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "使用時間工具提示:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "搜尋列顯示預覽縮圖",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "相對於螢幕寬度的縮圖大小:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "相對於螢幕寬度的縮圖大小:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "搜尋列顯示章節標籤",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "使用浮動工具列(flybar)",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "播放清單字型大小",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index 7cb7134b15..acdcd404d9 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Süre bilgi ipucunu göster:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Arama Çubuğu üzerinde ön izleme resmi göster",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Ekran genişliğine göre boyut:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Ekran genişliğine göre boyut:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Bölüm işaretlerini göster",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Şeffaf Çubuğu göster",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Oynatma listesi yazı tipi boyutu:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ua.rc b/src/apps/mpcresources/mplayerc.ua.rc index ab15ae91e2..3c540e844a 100644 --- a/src/apps/mpcresources/mplayerc.ua.rc +++ b/src/apps/mpcresources/mplayerc.ua.rc @@ -436,10 +436,11 @@ BEGIN CONTROL "Використовувати підказку з поточним часом відтворення:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Використовувати попередній перегляд при перемотуванні",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Розмір відносно ширини екрана:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Розмір відносно ширини екрана:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Використовувати маркери розділів",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Використовувати flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Розмір шрифта списка відтворення:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/text/mplayerc.br.rc.txt b/src/apps/mpcresources/text/mplayerc.br.rc.txt index 936cfeb2ac..6cff54ae28 100644 --- a/src/apps/mpcresources/text/mplayerc.br.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.br.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Restaurar resolução ao sair do programa" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Usar tema ""escuro"" (padrão)" 7 "Brilho:" 9 "Configurar cor do indicador de som:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Usar dica de tempo:" 26 "Usar prévia na busca" 27 "Tamanho relativo à largura da tela:" -31 "Usar marcador de capítulos" -32 "Usar barra de voar" -33 "Tamanho da fonte da lista de reprodução:" -36 "OSD" -37 "Fonte:" -41 "F" -42 "Fundo:" -43 "G1" -44 "G2" -45 "Transparente:" -47 "Tam.da borda:" -50 "Sombra" -51 "Anti-aliasing" -52 "Usar recursos da barra de tarefas do Windows 7 (e superior)" +31 "Online" +32 "Usar marcador de capítulos" +33 "Usar barra de voar" +34 "Tamanho da fonte da lista de reprodução:" +37 "OSD" +38 "Fonte:" +42 "F" +43 "Fundo:" +44 "G1" +45 "G2" +46 "Transparente:" +48 "Tam.da borda:" +51 "Sombra" +52 "Anti-aliasing" +53 "Usar recursos da barra de tarefas do Windows 7 (e superior)" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.by.rc.txt b/src/apps/mpcresources/text/mplayerc.by.rc.txt index 7afa93f36c..e80a287682 100644 --- a/src/apps/mpcresources/text/mplayerc.by.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.by.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Узнаўляць вырашальнасць пасля выхаду з праграмы" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.ca.rc.txt b/src/apps/mpcresources/text/mplayerc.ca.rc.txt index b9d9cc90cc..dfc7c51cf0 100644 --- a/src/apps/mpcresources/text/mplayerc.ca.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ca.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Restaurar resolució en sortir" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.cz.rc.txt b/src/apps/mpcresources/text/mplayerc.cz.rc.txt index 620a26e51b..be2f5c0bb6 100644 --- a/src/apps/mpcresources/text/mplayerc.cz.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.cz.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Po ukončení obnovit výchozí rozlišení" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.de.rc.txt b/src/apps/mpcresources/text/mplayerc.de.rc.txt index 9b043a9248..6184b68017 100644 --- a/src/apps/mpcresources/text/mplayerc.de.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.de.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Ursprüngliche Auflösung beim Schließen der App wiederherstellen" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Dunkles Theme aktivieren" 7 "Helligkeit:" 9 "Farbe des Lautstärkestellers:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Zeit-Tooltip anzeigen:" 26 "Vorschau bei der Suche anzeigen" 27 "Größe bezogen auf Bildschirmbreite:" -31 "Kapitelmarker in der Suchleiste anzeigen" -32 "Flybar aktivieren" -33 "Schriftgröße der Wiedergabeliste:" -36 "OSD" -37 "Schrift:" -41 "F" -42 "Hintergrund:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Rahmengröße:" -50 "Schatten" -51 "Anti-Aliasing" -52 "Windows-Taskbarfunktionen verwenden (ab Windows 7)" +31 "Online" +32 "Kapitelmarker in der Suchleiste anzeigen" +33 "Flybar aktivieren" +34 "Schriftgröße der Wiedergabeliste:" +37 "OSD" +38 "Schrift:" +42 "F" +43 "Hintergrund:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Rahmengröße:" +51 "Schatten" +52 "Anti-Aliasing" +53 "Windows-Taskbarfunktionen verwenden (ab Windows 7)" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.el.rc.txt b/src/apps/mpcresources/text/mplayerc.el.rc.txt index 026218ca61..f4ee3c3238 100644 --- a/src/apps/mpcresources/text/mplayerc.el.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.el.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Επαναφορά ανάλυσης στην έξοδο του προγράμματος" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Χρήση του ""σκοτεινού"" θέματος (προεπιλογή)" 7 "Φωτεινότητα :" 9 "Ρύθμιση του χρώματος από την ένδειξη του ήχου:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Χρήση συμβουλής χρόνου:" 26 "Χρήση της προεπισκόπησης στην αναζήτηση" 27 "Μέγεθος σε σχέση με το πλάτος της οθόνης:" -31 "Εμφάνιση σημάνσεων κεφαλαίων στη γραμμή αναζήτησης" -32 "Χρήση εναέριας μπάρας" -33 "Μέγεθος γραμματοσειράς λίστας αναπαραγωγής:" -36 "OSD" -37 "Γραμματοσ.:" -41 "F" -42 "Φόντο:" -43 "G1" -44 "G2" -45 "Διαφάνεια:" -47 "Περίγραμμα:" -50 "Σκιά" -51 "Anti-aliasing" -52 "Χρήση χαρακτηριστικών γραμμής εργασίας των Windows 7" +31 "Online" +32 "Εμφάνιση σημάνσεων κεφαλαίων στη γραμμή αναζήτησης" +33 "Χρήση εναέριας μπάρας" +34 "Μέγεθος γραμματοσειράς λίστας αναπαραγωγής:" +37 "OSD" +38 "Γραμματοσ.:" +42 "F" +43 "Φόντο:" +44 "G1" +45 "G2" +46 "Διαφάνεια:" +48 "Περίγραμμα:" +51 "Σκιά" +52 "Anti-aliasing" +53 "Χρήση χαρακτηριστικών γραμμής εργασίας των Windows 7" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.es.rc.txt b/src/apps/mpcresources/text/mplayerc.es.rc.txt index 290942a29d..64abf6e0e6 100644 --- a/src/apps/mpcresources/text/mplayerc.es.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.es.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Restaurar resolución al salir" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Usar Tema ""Oscuro"" (predeterminado)" 7 "Brillo :" 9 "Ajuste de color del indicador de sonido:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Usar herramienta informativa de tiempo:" 26 "Usar vista previa en la búsqueda" 27 "Tamaño relativo al ancho de pantalla:" -31 "Usar marcador de capítulos" -32 "Usar barra flotante" -33 "Tamaño de fuente de Lista de Reproducción:" -36 "OSD" -37 "Fuente:" -41 "F" -42 "Fondo:" -43 "G1" -44 "G2" -45 "Transparencia:" -47 "Borde:" -50 "Sombra" -51 "Suavizado" -52 "Usar características de la Barra de tareas de Windows 7 (y superior)" +31 "Online" +32 "Usar marcador de capítulos" +33 "Usar barra flotante" +34 "Tamaño de fuente de Lista de Reproducción:" +37 "OSD" +38 "Fuente:" +42 "F" +43 "Fondo:" +44 "G1" +45 "G2" +46 "Transparencia:" +48 "Borde:" +51 "Sombra" +52 "Suavizado" +53 "Usar características de la Barra de tareas de Windows 7 (y superior)" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.eu.rc.txt b/src/apps/mpcresources/text/mplayerc.eu.rc.txt index c1202a1bca..5176e807c9 100644 --- a/src/apps/mpcresources/text/mplayerc.eu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.eu.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Leheneratu bereizmena programatik irtetzerakoan" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Erabili ""iluna"" azalgaia (berezkoa)" 7 "Dizdira :" 9 "Soinu adierazle margo ezarpena:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Erabili denbora oharra:" 26 "Erabili aurrekoa bilaketan" 27 "Neurria ikusleiho zabaleraren arabera:" -31 "Erabili atal markatzailea" -32 "Erabili gainbarra" -33 "Playlist font size:" -36 "IGE" -37 "Hizkia:" -41 "F" -42 "Barrena:" -43 "G1" -44 "G2" -45 "Gardena:" -47 "Hertz Neurria:" -50 "Itzala" -51 "Hertz-lehunketa" -52 "Erabili Windows 7 (eta berriagoa) Eginkizun-barra ezaugarriak" +31 "Online" +32 "Erabili atal markatzailea" +33 "Erabili gainbarra" +34 "Playlist font size:" +37 "IGE" +38 "Hizkia:" +42 "F" +43 "Barrena:" +44 "G1" +45 "G2" +46 "Gardena:" +48 "Hertz Neurria:" +51 "Itzala" +52 "Hertz-lehunketa" +53 "Erabili Windows 7 (eta berriagoa) Eginkizun-barra ezaugarriak" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.fr.rc.txt b/src/apps/mpcresources/text/mplayerc.fr.rc.txt index f68d0b34c9..0484b6759e 100644 --- a/src/apps/mpcresources/text/mplayerc.fr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.fr.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Restaurer la résolution après la fermeture" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Utiliser le thème sombre (par défaut)" 7 "Luminosité :" 9 "Réglage de la couleur de l'indicateur sonore :" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Utiliser l'info-bulle temporelle :" 26 "Utiliser l'aperçu dans la recherche" 27 "Taille par rapport à la largeur de l'écran :" -31 "Utiliser le marqueur de chapitres" -32 "Utiliser la barre volante" -33 "Taille de la police de la Playlist:" -36 "OSD" -37 "Police :" -41 "F" -42 "Arrière-plan :" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Taille de bordure :" -50 "Ombre " -51 "Anti-aliasing" -52 "Utiliser les fonctionnalités de la barre des tâches de Windows 7 (et supérieur)" +31 "Online" +32 "Utiliser le marqueur de chapitres" +33 "Utiliser la barre volante" +34 "Taille de la police de la Playlist:" +37 "OSD" +38 "Police :" +42 "F" +43 "Arrière-plan :" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Taille de bordure :" +51 "Ombre " +52 "Anti-aliasing" +53 "Utiliser les fonctionnalités de la barre des tâches de Windows 7 (et supérieur)" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.he.rc.txt b/src/apps/mpcresources/text/mplayerc.he.rc.txt index d104a424fe..7650ababf1 100644 --- a/src/apps/mpcresources/text/mplayerc.he.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.he.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "שחזר רזולוצייה ביציאה מהתוכנה" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.hr.rc.txt b/src/apps/mpcresources/text/mplayerc.hr.rc.txt index 54ded2cc1c..bbb43c585e 100644 --- a/src/apps/mpcresources/text/mplayerc.hr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hr.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Vrati rezoluciju pri izlasku iz programa" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Koristi ""tamnu"" temu (default)" 7 "Svjetlina :" 9 "Postavi boju indikatora zvuka:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Koristi vremenski tooltip:" 26 "Koristi pretpregled prilikom pretrage" 27 "Veličina relativna širini ekrana:" -31 "Koristi marker poglavlja" -32 "Koristi flybar" -33 "Veličina fonta playliste:" -36 "OSD" -37 "Font:" -41 "F" -42 "Pozadina:" -43 "G1" -44 "G2" -45 "Prozirnost:" -47 "Veličina granice:" -50 "Sjena" -51 "Anti-aliasing" -52 "Koristi Windows 7 (i iznad) Taskbar mogućnosti" +31 "Online" +32 "Koristi marker poglavlja" +33 "Koristi flybar" +34 "Veličina fonta playliste:" +37 "OSD" +38 "Font:" +42 "F" +43 "Pozadina:" +44 "G1" +45 "G2" +46 "Prozirnost:" +48 "Veličina granice:" +51 "Sjena" +52 "Anti-aliasing" +53 "Koristi Windows 7 (i iznad) Taskbar mogućnosti" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.hu.rc.txt b/src/apps/mpcresources/text/mplayerc.hu.rc.txt index a9cb0b34c5..6d7b7d8918 100644 --- a/src/apps/mpcresources/text/mplayerc.hu.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hu.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Felbontás visszaállítása kilépéskor" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Használja a ""sötét"" témát (alapértelmezett)" 7 "Fényerősség:" 9 "A hangjelző színének beállítása:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Használja az időtippet:" 26 "Használja az előnézetet a keresésben" 27 "A képernyő szélességéhez viszonyított méret:" -31 "Használjon fejezetjelölőt" -32 "Használjon léptéket" -33 "Lejátszási lista betüméret:" -36 "OSD" -37 "Betűtípus:" -41 "F" -42 "Háttér:" -43 "G1" -44 "G2" -45 "Átlátszóság:" -47 "Szegély mérete:" -50 "Árnyék" -51 "Élsimítás" -52 "Használja a Windows 7 (és újabb) tálca szolgáltatásait" +31 "Online" +32 "Használjon fejezetjelölőt" +33 "Használjon léptéket" +34 "Lejátszási lista betüméret:" +37 "OSD" +38 "Betűtípus:" +42 "F" +43 "Háttér:" +44 "G1" +45 "G2" +46 "Átlátszóság:" +48 "Szegély mérete:" +51 "Árnyék" +52 "Élsimítás" +53 "Használja a Windows 7 (és újabb) tálca szolgáltatásait" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.hy.rc.txt b/src/apps/mpcresources/text/mplayerc.hy.rc.txt index 1afed5d108..36d2d6e6ff 100644 --- a/src/apps/mpcresources/text/mplayerc.hy.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.hy.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Վերականգնել չափը՝ ծրագրիը փակելիս" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.it.rc.txt b/src/apps/mpcresources/text/mplayerc.it.rc.txt index e5245f0560..51a829ff09 100644 --- a/src/apps/mpcresources/text/mplayerc.it.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.it.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Ripristino risoluzione all'uscita dal programma" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Usa il tema scuro (predefinito)" 7 "Luminosità:" 9 "Imposta il colore dell'indicatore del suono:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Usa descrizione comando sul tempo:" 26 "Usa l'anteprima nella ricerca" 27 "Dimensioni relative alla larghezza dello schermo:" -31 "Usa marcatore capitoli" -32 "Usa la flybar" -33 "Dimensione carattere playlist:" -36 "OSD" -37 "Carattere:" -41 "F" -42 "Sfondo:" -43 "G1" -44 "G2" -45 "Trasparente:" -47 "Pixel bordo:" -50 "Ombra" -51 "Anti-aliasing" -52 "Usa funzionalità barra delle applicazioni di Windows 7 (e versioni successive)." +31 "Online" +32 "Usa marcatore capitoli" +33 "Usa la flybar" +34 "Dimensione carattere playlist:" +37 "OSD" +38 "Carattere:" +42 "F" +43 "Sfondo:" +44 "G1" +45 "G2" +46 "Trasparente:" +48 "Pixel bordo:" +51 "Ombra" +52 "Anti-aliasing" +53 "Usa funzionalità barra delle applicazioni di Windows 7 (e versioni successive)." END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.ja.rc.txt b/src/apps/mpcresources/text/mplayerc.ja.rc.txt index b2919ba89c..f1afecb6dd 100644 --- a/src/apps/mpcresources/text/mplayerc.ja.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ja.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "プログラム終了時に解像度を元に戻す" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "ダーク テーマを使用する (既定)" 7 "明るさ :" 9 "音量調節の色設定:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "タイム ツールヒントを使用する:" 26 "検索でプレビュー機能を使用する" 27 "画面横幅に対するサイズ:" -31 "チャプター マーカーを使用する" -32 "フライ バーを使用する" -33 "プレイリスト フォント サイズ:" -36 "OSD" -37 "フォント:" -41 "F" -42 "背景:" -43 "G1" -44 "G2" -45 "透過度:" -47 "境界線サイズ:" -50 "影" -51 "アンチエイリアス" -52 "Windows 7 (とそれ以降) のタスク バーの機能を使用する" +31 "Online" +32 "チャプター マーカーを使用する" +33 "フライ バーを使用する" +34 "プレイリスト フォント サイズ:" +37 "OSD" +38 "フォント:" +42 "F" +43 "背景:" +44 "G1" +45 "G2" +46 "透過度:" +48 "境界線サイズ:" +51 "影" +52 "アンチエイリアス" +53 "Windows 7 (とそれ以降) のタスク バーの機能を使用する" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.kr.rc.txt b/src/apps/mpcresources/text/mplayerc.kr.rc.txt index bd797b97f5..0fb809f059 100644 --- a/src/apps/mpcresources/text/mplayerc.kr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.kr.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "종료 후, 해상도 복원" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "다크 테마 사용(기본값)" 7 "명도 :" 9 "음량 조절 색 설정 :" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "시간 툴팁 사용 :" 26 "탐색 표시줄에서 미리 보기 사용" 27 "화면 너비 대비 크기 :" -31 "챕터 구분 표기 사용" -32 "플라이바 사용" -33 "재생 목록 글자 크기 :" -36 "화면 표시" -37 "화면 표시 글꼴 :" -41 "F" -42 "배경 :" -43 "G1" -44 "G2" -45 "투명도 :" -47 "경계 크기 :" -50 "그림자" -51 "위신호 제거" -52 "(윈도7 이상) 작업 표시줄 기능 사용" +31 "Online" +32 "챕터 구분 표기 사용" +33 "플라이바 사용" +34 "재생 목록 글자 크기 :" +37 "화면 표시" +38 "화면 표시 글꼴 :" +42 "F" +43 "배경 :" +44 "G1" +45 "G2" +46 "투명도 :" +48 "경계 크기 :" +51 "그림자" +52 "위신호 제거" +53 "(윈도7 이상) 작업 표시줄 기능 사용" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.nl.rc.txt b/src/apps/mpcresources/text/mplayerc.nl.rc.txt index fd3dbaf3dd..506aac52f4 100644 --- a/src/apps/mpcresources/text/mplayerc.nl.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.nl.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Herstel resolutie bij afsluiten" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Gebruik Donker thema (standaard)" 7 "Helderheid :" 9 "Kleur van de geluidindicator:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Toon scherminfo voor tijd:" 26 "Activeer voorvertoning op zoekbalk" 27 "Grootte op basis v/d schermbreedte:" -31 "Toon hoofdstukmarkeringen op zoekbalk" -32 "Gebruik flybar" -33 "Tekengrootte van afspeellijst:" -36 "OSD" -37 "Lettertype:" -41 "F" -42 "Achtergrond:" -43 "G1" -44 "G2" -45 "Transparantie:" -47 "Omlijning:" -50 "Schaduw" -51 "Anti-aliasing" -52 "Gebruik mogelijkheden van Windows 7 (en hoger)-taakbalk" +31 "Online" +32 "Toon hoofdstukmarkeringen op zoekbalk" +33 "Gebruik flybar" +34 "Tekengrootte van afspeellijst:" +37 "OSD" +38 "Lettertype:" +42 "F" +43 "Achtergrond:" +44 "G1" +45 "G2" +46 "Transparantie:" +48 "Omlijning:" +51 "Schaduw" +52 "Anti-aliasing" +53 "Gebruik mogelijkheden van Windows 7 (en hoger)-taakbalk" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.pl.rc.txt b/src/apps/mpcresources/text/mplayerc.pl.rc.txt index 8a08601bcf..df7e6d727c 100644 --- a/src/apps/mpcresources/text/mplayerc.pl.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.pl.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Przywróć domyślny trybu po zakończeniu programu" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Użyj ""ciemnego"" motywu (domyślne)" 7 "Jasność:" 9 "Ustawianie koloru wskaźnika dźwięku:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Pokazuj dymek z czasem:" 26 "Użyj podglądu podczas szukania" 27 "Rozmiar w stosunku do szerokości ekranu:" -31 "Pokaż znacznik rozdziałów" -32 "Użyj flybar" -33 "Rozmiar czcionki listy odtwarzania:" -36 "OSD" -37 "Czcionka:" -41 "F" -42 "Tło:" -43 "G1" -44 "G2" -45 "Przezroczystość:" -47 "Rozmiar obramowania:" -50 "Cień" -51 "Wygładzanie krawędzi" -52 "Użyj funkcji paska zadań (Windows 7 i nowsze)" +31 "Online" +32 "Pokaż znacznik rozdziałów" +33 "Użyj flybar" +34 "Rozmiar czcionki listy odtwarzania:" +37 "OSD" +38 "Czcionka:" +42 "F" +43 "Tło:" +44 "G1" +45 "G2" +46 "Przezroczystość:" +48 "Rozmiar obramowania:" +51 "Cień" +52 "Wygładzanie krawędzi" +53 "Użyj funkcji paska zadań (Windows 7 i nowsze)" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.rc.txt b/src/apps/mpcresources/text/mplayerc.rc.txt index f1e8153e2f..10fd13cf59 100644 --- a/src/apps/mpcresources/text/mplayerc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Restore resolution on program exit" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.ro.rc.txt b/src/apps/mpcresources/text/mplayerc.ro.rc.txt index 7ae0381689..e9a51e4aab 100644 --- a/src/apps/mpcresources/text/mplayerc.ro.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ro.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Restaurează rezoluția la ieșirea din program" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Folosește tema " 7 "Luminozitate :" 9 "Setarea culorii indicatorului sunetului:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Folosește indiciu de timp:" 26 "Folosește previzualizarea în căutare" 27 "Dimensiunea raportată la lățimea ecranului:" -31 "Arată semne pentru capitole în bara de căutare" -32 "Folosește bara pentru sărituri" -33 "Dimensiunea scrisului (fontului) listei de redare:" -36 "OSD" -37 "Font:" -41 "F" -42 "Fundal:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Dimensiunea chenarului:" -50 "Umbră" -51 "Anti-aliasare" -52 "Folosește facilitățile barei de activități Windows 7" +31 "Online" +32 "Arată semne pentru capitole în bara de căutare" +33 "Folosește bara pentru sărituri" +34 "Dimensiunea scrisului (fontului) listei de redare:" +37 "OSD" +38 "Font:" +42 "F" +43 "Fundal:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Dimensiunea chenarului:" +51 "Umbră" +52 "Anti-aliasare" +53 "Folosește facilitățile barei de activități Windows 7" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.ru.rc.txt b/src/apps/mpcresources/text/mplayerc.ru.rc.txt index 309837cf9d..b0e88fb6d2 100644 --- a/src/apps/mpcresources/text/mplayerc.ru.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ru.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Восстанавливать разрешение после выхода из программы" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Использовать ""тёмную"" тему оформления (по умолчанию)" 7 "Яркость :" 9 "Настройка цвета индикатора громкости:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Показывать время" 26 "Использовать предпросмотр при поиске видеофрагмента" 27 "Размер относительно размера экрана:" -31 "Использовать маркер для чаптеров" -32 "Показать панель управления поверх видео" -33 "Размер шрифта плейлиста:" -36 "OSD" -37 "Шрифт:" -41 "F" -42 "Фон:" -43 "G1" -44 "G2" -45 "Прозрачность:" -47 "Бордюр:" -50 "Тень" -51 "Сглаживание" -52 "Использовать возможности таскбара Windows 7 (и выше)" +31 "Онлайн" +32 "Использовать маркер для чаптеров" +33 "Показать панель управления поверх видео" +34 "Размер шрифта плейлиста:" +37 "OSD" +38 "Шрифт:" +42 "F" +43 "Фон:" +44 "G1" +45 "G2" +46 "Прозрачность:" +48 "Бордюр:" +51 "Тень" +52 "Сглаживание" +53 "Использовать возможности таскбара Windows 7 (и выше)" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.sc.rc.txt b/src/apps/mpcresources/text/mplayerc.sc.rc.txt index ec1796cc11..4368f34fd6 100644 --- a/src/apps/mpcresources/text/mplayerc.sc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sc.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "退出后恢复默认分辨率" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "使用暗黑主题 (默认)" 7 "亮度:" 9 "设置声音控制条颜色:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "使用时间工具提示:" 26 "搜索时显示预览" 27 "相对于屏幕宽度的缩略图大小:" -31 "显示章节标记" -32 "全屏模式时启用悬浮工具条" -33 "播放列表字体大小:" -36 "屏幕显示" -37 "字体:" -41 "F" -42 "背景:" -43 "G1" -44 "G2" -45 "透明:" -47 "边框大小:" -50 "阴影" -51 "抗锯齿" -52 "使用 Windows 7 (或更高版本) 任务栏功能" +31 "Online" +32 "显示章节标记" +33 "全屏模式时启用悬浮工具条" +34 "播放列表字体大小:" +37 "屏幕显示" +38 "字体:" +42 "F" +43 "背景:" +44 "G1" +45 "G2" +46 "透明:" +48 "边框大小:" +51 "阴影" +52 "抗锯齿" +53 "使用 Windows 7 (或更高版本) 任务栏功能" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.sk.rc.txt b/src/apps/mpcresources/text/mplayerc.sk.rc.txt index 1cfa73f83f..4a06c99aeb 100644 --- a/src/apps/mpcresources/text/mplayerc.sk.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sk.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Po ukončení obnoviť pôvodné rozlíšenie" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.sv.rc.txt b/src/apps/mpcresources/text/mplayerc.sv.rc.txt index 82d86792ad..672fa4761b 100644 --- a/src/apps/mpcresources/text/mplayerc.sv.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sv.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Restore resolution after exit" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Use the ""dark"" theme (default)" 7 "Brightness :" 9 "Setting the color of the indicator of sound:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Use time tooltip:" 26 "Use the preview in the search" 27 "Size relative to screen width:" -31 "Use chapters marker" -32 "Use flybar" -33 "Playlist font size:" -36 "OSD" -37 "Font:" -41 "F" -42 "Background:" -43 "G1" -44 "G2" -45 "Transparent:" -47 "Border Size:" -50 "Shadow" -51 "Anti-aliasing" -52 "Use Windows 7 (and above) Taskbar features" +31 "Online" +32 "Use chapters marker" +33 "Use flybar" +34 "Playlist font size:" +37 "OSD" +38 "Font:" +42 "F" +43 "Background:" +44 "G1" +45 "G2" +46 "Transparent:" +48 "Border Size:" +51 "Shadow" +52 "Anti-aliasing" +53 "Use Windows 7 (and above) Taskbar features" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.tc.rc.txt b/src/apps/mpcresources/text/mplayerc.tc.rc.txt index 5476f5ea2e..85e6c8d936 100644 --- a/src/apps/mpcresources/text/mplayerc.tc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tc.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "離開後回復解析度" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "使用暗黑主題(預設)" 7 "亮度:" 9 "設定音量控制器色彩:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "使用時間工具提示:" 26 "搜尋列顯示預覽縮圖" 27 "相對於螢幕寬度的縮圖大小:" -31 "搜尋列顯示章節標籤" -32 "使用浮動工具列(flybar)" -33 "播放清單字型大小" -36 "OSD" -37 "字型:" -41 "F" -42 "背景:" -43 "G1" -44 "G2" -45 "透明度:" -47 "外框大小:" -50 "陰影" -51 "去鋸齒" -52 "使用 Windows 7 (或以上)工作列功能" +31 "Online" +32 "搜尋列顯示章節標籤" +33 "使用浮動工具列(flybar)" +34 "播放清單字型大小" +37 "OSD" +38 "字型:" +42 "F" +43 "背景:" +44 "G1" +45 "G2" +46 "透明度:" +48 "外框大小:" +51 "陰影" +52 "去鋸齒" +53 "使用 Windows 7 (或以上)工作列功能" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.tr.rc.txt b/src/apps/mpcresources/text/mplayerc.tr.rc.txt index bbadba50db..94be545e0e 100644 --- a/src/apps/mpcresources/text/mplayerc.tr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tr.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Çıkışta çözünürlüğü geri al" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "'Koyu' arayüzü kullan (varsayılan)" 7 "Parlaklık :" 9 "Ses göstergesi renk ayarı:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Süre bilgi ipucunu göster:" 26 "Arama Çubuğu üzerinde ön izleme resmi göster" 27 "Ekran genişliğine göre boyut:" -31 "Bölüm işaretlerini göster" -32 "Şeffaf Çubuğu göster" -33 "Oynatma listesi yazı tipi boyutu:" -36 "OSD" -37 "Yazı tipi:" -41 "F" -42 "Arka plan:" -43 "G1" -44 "G2" -45 "Şeffaflık:" -47 "Kenar Genişliği:" -50 "Gölge" -51 "Kenar yumuşatma" -52 "Windows 7 (ve üzeri) Görev çubuğu özelliklerini kullan" +31 "Online" +32 "Bölüm işaretlerini göster" +33 "Şeffaf Çubuğu göster" +34 "Oynatma listesi yazı tipi boyutu:" +37 "OSD" +38 "Yazı tipi:" +42 "F" +43 "Arka plan:" +44 "G1" +45 "G2" +46 "Şeffaflık:" +48 "Kenar Genişliği:" +51 "Gölge" +52 "Kenar yumuşatma" +53 "Windows 7 (ve üzeri) Görev çubuğu özelliklerini kullan" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mpcresources/text/mplayerc.ua.rc.txt b/src/apps/mpcresources/text/mplayerc.ua.rc.txt index 48cb284269..2a6e81e245 100644 --- a/src/apps/mpcresources/text/mplayerc.ua.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.ua.rc.txt @@ -290,7 +290,7 @@ BEGIN DIALOGEX IDD_PPAGEFULLSCREEN LINES 34 32 "Відновлювати роздільну здатність після закриття програми" END -BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 +BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 6 "Використовувати ""темну"" тему (типово)" 7 "Яскравість :" 9 "Налаштування кольору індикатора гучності:" @@ -307,20 +307,21 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 54 24 "Використовувати підказку з поточним часом відтворення:" 26 "Використовувати попередній перегляд при перемотуванні" 27 "Розмір відносно ширини екрана:" -31 "Використовувати маркери розділів" -32 "Використовувати flybar" -33 "Розмір шрифта списка відтворення:" -36 "OSD" -37 "Шрифт:" -41 "F" -42 "Фон:" -43 "G1" -44 "G2" -45 "Прозорість:" -47 "Розмір бордюрів:" -50 "Тінь" -51 "Згладжування" -52 "Використовувати особливості панелі завдань Windows 7 (і пізніших)" +31 "Online" +32 "Використовувати маркери розділів" +33 "Використовувати flybar" +34 "Розмір шрифта списка відтворення:" +37 "OSD" +38 "Шрифт:" +42 "F" +43 "Фон:" +44 "G1" +45 "G2" +46 "Прозорість:" +48 "Розмір бордюрів:" +51 "Тінь" +52 "Згладжування" +53 "Використовувати особливості панелі завдань Windows 7 (і пізніших)" END BEGIN DIALOGEX IDD_PPAGEINTERNALFILTERS LINES 22 diff --git a/src/apps/mplayerc/AppSettings.cpp b/src/apps/mplayerc/AppSettings.cpp index c462c8f708..59a0c878ab 100644 --- a/src/apps/mplayerc/AppSettings.cpp +++ b/src/apps/mplayerc/AppSettings.cpp @@ -762,6 +762,7 @@ void CAppSettings::ResetSettings() fLCDSupport = false; bWinMediaControls = false; fSmartSeek = false; + bSmartSeekOnline = false; iSmartSeekSize = 15; iSmartSeekVR = 0; fChapterMarker = false; @@ -1434,6 +1435,7 @@ void CAppSettings::LoadSettings(bool bForce/* = false*/) profile.ReadBool(IDS_R_SETTINGS, IDS_RS_LCD_SUPPORT, fLCDSupport); profile.ReadBool(IDS_R_SETTINGS, IDS_RS_WINMEDIACONTROLS, bWinMediaControls); profile.ReadBool(IDS_R_SETTINGS, IDS_RS_SMARTSEEK, fSmartSeek); + profile.ReadBool(IDS_R_SETTINGS, IDS_RS_SMARTSEEK_ONLINE, bSmartSeekOnline); profile.ReadInt(IDS_R_SETTINGS, IDS_RS_SMARTSEEK_SIZE, iSmartSeekSize, 5, 30); profile.ReadInt(IDS_R_SETTINGS, IDS_RS_SMARTSEEK_VIDEORENDERER, iSmartSeekVR, 0, 1); profile.ReadBool(IDS_R_SETTINGS, IDS_RS_CHAPTER_MARKER, fChapterMarker); @@ -1776,6 +1778,7 @@ void CAppSettings::SaveSettings() profile.WriteBool(IDS_R_SETTINGS, IDS_RS_LCD_SUPPORT, fLCDSupport); profile.WriteBool(IDS_R_SETTINGS, IDS_RS_WINMEDIACONTROLS, bWinMediaControls); profile.WriteBool(IDS_R_SETTINGS, IDS_RS_SMARTSEEK, fSmartSeek); + profile.WriteBool(IDS_R_SETTINGS, IDS_RS_SMARTSEEK_ONLINE, bSmartSeekOnline); profile.WriteInt(IDS_R_SETTINGS, IDS_RS_SMARTSEEK_SIZE, iSmartSeekSize); profile.WriteInt(IDS_R_SETTINGS, IDS_RS_SMARTSEEK_VIDEORENDERER, iSmartSeekVR); profile.WriteBool(IDS_R_SETTINGS, IDS_RS_CHAPTER_MARKER, fChapterMarker); diff --git a/src/apps/mplayerc/AppSettings.h b/src/apps/mplayerc/AppSettings.h index fda28b7e32..c92bb118c6 100644 --- a/src/apps/mplayerc/AppSettings.h +++ b/src/apps/mplayerc/AppSettings.h @@ -723,6 +723,7 @@ class CAppSettings bool fUseTimeTooltip; int nTimeTooltipPosition; bool fSmartSeek; + bool bSmartSeekOnline; int iSmartSeekSize; int iSmartSeekVR; bool fChapterMarker; diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 40593f1cc7..4316832ac0 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -11927,11 +11927,15 @@ CString CMainFrame::OpenCreateGraphObject(OpenMediaData* pOMD) ReleasePreviewGraph(); // Hmm, most likely it is no longer needed bool bUseSmartSeek = s.fSmartSeek; - - if (OpenFileData* pFileData = dynamic_cast(pOMD)) { - CString fn = pFileData->fi; - if (!fn.IsEmpty() && (fn.Find(L"://") >= 0)) { // disable SmartSeek for streaming data. - bUseSmartSeek = false; + if (!s.bSmartSeekOnline) { + if (OpenFileData* pFileData = dynamic_cast(pOMD)) { + auto& fn = pFileData->fi.GetPath(); + if (!fn.IsEmpty()) { + CUrlParser urlParser(fn.GetString()); + if (urlParser.IsValid()) { + bUseSmartSeek = false; + } + } } } @@ -12024,7 +12028,7 @@ CString CMainFrame::OpenCreateGraphObject(OpenMediaData* pOMD) m_pCB = DNew CDSMChapterBag(nullptr, nullptr); - return L""; + return {}; } void CMainFrame::ReleasePreviewGraph() diff --git a/src/apps/mplayerc/PPageInterface.cpp b/src/apps/mplayerc/PPageInterface.cpp index aeb2ff2c78..283e8527b1 100644 --- a/src/apps/mplayerc/PPageInterface.cpp +++ b/src/apps/mplayerc/PPageInterface.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -36,6 +36,7 @@ CPPageInterface::CPPageInterface() , m_nThemeBlue(255) , m_fUseTimeTooltip(TRUE) , m_fSmartSeek(FALSE) + , m_bSmartSeekOnline(FALSE) , m_fChapterMarker(FALSE) , m_fFlybar(TRUE) , m_fFontShadow(FALSE) @@ -78,6 +79,7 @@ void CPPageInterface::DoDataExchange(CDataExchange* pDX) DDX_Control(pDX, IDC_COMBO3, m_TimeTooltipPosition); DDX_Control(pDX, IDC_COMBO1, m_FontType); DDX_Check(pDX, IDC_CHECK_PRV, m_fSmartSeek); + DDX_Check(pDX, IDC_CHECK6, m_bSmartSeekOnline); DDX_Control(pDX, IDC_EDIT1, m_edSmartSeekSize); DDX_Control(pDX, IDC_COMBO4, m_SmartSeekVR); DDX_Check(pDX, IDC_CHECK_CHM, m_fChapterMarker); @@ -147,6 +149,7 @@ BOOL CPPageInterface::OnInitDialog() m_OSD_Font = s.strOSDFont; m_fSmartSeek = s.fSmartSeek; + m_bSmartSeekOnline = s.bSmartSeekOnline; m_edSmartSeekSize.SetRange(5, 30); m_edSmartSeekSize = s.iSmartSeekSize; m_SmartSeekVR.AddString(L"EVR"); @@ -189,6 +192,7 @@ BOOL CPPageInterface::OnInitDialog() GetDlgItem(IDC_EDIT1)->EnableWindow(m_fSmartSeek); GetDlgItem(IDC_STATIC7)->EnableWindow(m_fSmartSeek); m_SmartSeekVR.EnableWindow(m_fSmartSeek); + GetDlgItem(IDC_CHECK6)->EnableWindow(m_fSmartSeek); if (!SysVersion::IsWin11orLater()) { m_chkDarkTitle.EnableWindow(FALSE); @@ -237,6 +241,7 @@ BOOL CPPageInterface::OnApply() m_FontType.GetLBText(m_FontType.GetCurSel(),s.strOSDFont); s.fSmartSeek = !!m_fSmartSeek; + s.bSmartSeekOnline = !!m_bSmartSeekOnline; s.iSmartSeekSize = m_edSmartSeekSize; s.iSmartSeekVR = m_SmartSeekVR.GetCurSel(); @@ -668,6 +673,7 @@ void CPPageInterface::OnUsePreview() GetDlgItem(IDC_EDIT1)->EnableWindow(m_fSmartSeek); GetDlgItem(IDC_STATIC7)->EnableWindow(m_fSmartSeek); m_SmartSeekVR.EnableWindow(m_fSmartSeek); + GetDlgItem(IDC_CHECK6)->EnableWindow(m_fSmartSeek); SetModified(); } diff --git a/src/apps/mplayerc/PPageInterface.h b/src/apps/mplayerc/PPageInterface.h index 1030943043..fd9437240b 100644 --- a/src/apps/mplayerc/PPageInterface.h +++ b/src/apps/mplayerc/PPageInterface.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -43,6 +43,7 @@ class CPPageInterface : public CPPageBase int m_nThemeBlue; BOOL m_fUseTimeTooltip; BOOL m_fSmartSeek; + BOOL m_bSmartSeekOnline; BOOL m_fChapterMarker; BOOL m_fFlybar; BOOL m_fFontShadow; diff --git a/src/apps/mplayerc/SettingsDefines.h b/src/apps/mplayerc/SettingsDefines.h index 498332b223..738b6f7e2d 100644 --- a/src/apps/mplayerc/SettingsDefines.h +++ b/src/apps/mplayerc/SettingsDefines.h @@ -1,5 +1,5 @@ /* - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -327,6 +327,7 @@ #define IDS_RS_LCD_SUPPORT L"LcdSupport" #define IDS_RS_WINMEDIACONTROLS L"WinMediaControls" #define IDS_RS_SMARTSEEK L"UseSmartSeek" +#define IDS_RS_SMARTSEEK_ONLINE L"UseSmartSeekOnline" #define IDS_RS_SMARTSEEK_SIZE L"SmartSeekSize" #define IDS_RS_SMARTSEEK_VIDEORENDERER L"SmartSeekVideoRenderer" #define IDS_RS_CHAPTER_MARKER L"ChapterMarker" diff --git a/src/apps/mplayerc/mplayerc.rc b/src/apps/mplayerc/mplayerc.rc index 0444a751fc..473a5d9ebc 100644 --- a/src/apps/mplayerc/mplayerc.rc +++ b/src/apps/mplayerc/mplayerc.rc @@ -435,10 +435,11 @@ BEGIN CONTROL "Use time tooltip:",IDC_CHECK8,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,99,152,9 COMBOBOX IDC_COMBO3,170,97,115,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP CONTROL "Use the preview in the search",IDC_CHECK_PRV,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,113,264,9 - LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,130,8 - EDITTEXT IDC_EDIT1,159,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER - LTEXT "%",IDC_STATIC7,186,127,10,8 - COMBOBOX IDC_COMBO4,209,125,76,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + LTEXT "Size relative to screen width:",IDC_STATIC6,24,127,116,8 + EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER + LTEXT "%",IDC_STATIC7,170,127,10,8 + COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 From 0496637219ce0cc2baf7b7a9dadfe84ee44b7ced Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Mon, 19 Feb 2024 15:45:36 +1000 Subject: [PATCH 68/87] =?UTF-8?q?=D0=9F=D1=80=D0=B8=20=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B5=20=D0=B2=D1=81=D1=82=D1=80=D0=BE=D0=B5=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BF=D0=B0=D1=80=D1=81=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=20Youtube=20=D0=B2=20=D0=B8=D1=81=D1=82=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D0=B8=20=D1=81=D0=BE=D1=85=D1=80=D0=B0=D0=BD=D1=8F=D0=BB?= =?UTF-8?q?=D0=B0=D1=81=D1=8C=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D1=81=D0=B0=D0=BC=20=D0=BF=D0=BE=D1=82=D0=BE?= =?UTF-8?q?=D0=BA=20=D0=B0=20=D0=BD=D0=B5=20=D1=81=D0=B0=D0=BC=D0=B0=20?= =?UTF-8?q?=D1=81=D1=81=D1=8B=D0=BB=D0=BA=D0=B0=20=D0=BD=D0=B0=20=D1=80?= =?UTF-8?q?=D0=BE=D0=BB=D0=B8=D0=BA,=20=D0=B8=D1=81=D0=BF=D1=80=D0=B0?= =?UTF-8?q?=D0=B2=D0=BB=D0=B5=D0=BD=D0=BE.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/MainFrm.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mplayerc/MainFrm.cpp b/src/apps/mplayerc/MainFrm.cpp index 4316832ac0..7779a5bebb 100644 --- a/src/apps/mplayerc/MainFrm.cpp +++ b/src/apps/mplayerc/MainFrm.cpp @@ -12202,7 +12202,7 @@ CString CMainFrame::OpenFile(OpenFileData* pOFD) m_wndPlaylistBar.SetCurLabel(m_youtubeFields.title); } else if (s.bYoutubePageParser && pOFD->auds.empty()) { - auto& url = pOFD->fi.GetPath(); + auto url = pOFD->fi.GetPath(); bool ok = Youtube::CheckURL(url); if (ok) { ok = Youtube::Parse_URL( From 56c9c3db48ed7f51d3577d2082794716dea5aef2 Mon Sep 17 00:00:00 2001 From: v0lt Date: Mon, 19 Feb 2024 17:05:13 +0300 Subject: [PATCH 69/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D0=BA=D0=B8=D1=82=D0=B0=D0=B9=D1=81=D0=BA=D0=B8?= =?UTF-8?q?=D0=B9=20(Simplified)=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE?= =?UTF-8?q?=D0=B4=20(=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20wushantao).=20=D0=9E?= =?UTF-8?q?=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=B8=D1=81=D0=BF?= =?UTF-8?q?=D0=B0=D0=BD=D1=81=D0=BA=D0=B8=D0=B9=20=D0=BF=D0=B5=D1=80=D0=B5?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2=D1=82=D0=BE=D1=80=20IPeluchi?= =?UTF-8?q?to).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.es.rc | 2 +- src/apps/mpcresources/mplayerc.sc.rc | 2 +- src/apps/mpcresources/text/mplayerc.es.rc.txt | 2 +- src/apps/mpcresources/text/mplayerc.sc.rc.txt | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.es.rc b/src/apps/mpcresources/mplayerc.es.rc index d9c285a61e..d21675db56 100644 --- a/src/apps/mpcresources/mplayerc.es.rc +++ b/src/apps/mpcresources/mplayerc.es.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "En línea",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Usar marcador de capítulos",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Usar barra flotante",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Tamaño de fuente de Lista de Reproducción:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index 557c538f36..236b4ffcbd 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "在线视频",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "显示章节标记",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "全屏模式时启用悬浮工具条",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "播放列表字体大小:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/text/mplayerc.es.rc.txt b/src/apps/mpcresources/text/mplayerc.es.rc.txt index 64abf6e0e6..3ed77e017a 100644 --- a/src/apps/mpcresources/text/mplayerc.es.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.es.rc.txt @@ -307,7 +307,7 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 24 "Usar herramienta informativa de tiempo:" 26 "Usar vista previa en la búsqueda" 27 "Tamaño relativo al ancho de pantalla:" -31 "Online" +31 "En línea" 32 "Usar marcador de capítulos" 33 "Usar barra flotante" 34 "Tamaño de fuente de Lista de Reproducción:" diff --git a/src/apps/mpcresources/text/mplayerc.sc.rc.txt b/src/apps/mpcresources/text/mplayerc.sc.rc.txt index 4368f34fd6..f3c183444a 100644 --- a/src/apps/mpcresources/text/mplayerc.sc.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.sc.rc.txt @@ -307,7 +307,7 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 24 "使用时间工具提示:" 26 "搜索时显示预览" 27 "相对于屏幕宽度的缩略图大小:" -31 "Online" +31 "在线视频" 32 "显示章节标记" 33 "全屏模式时启用悬浮工具条" 34 "播放列表字体大小:" From d9ac61c715945845f37bd7a83e0967738acfd6a3 Mon Sep 17 00:00:00 2001 From: cumhur Date: Mon, 19 Feb 2024 18:23:33 +0300 Subject: [PATCH 70/87] Update mplayerc.tr.rc.txt --- src/apps/mpcresources/text/mplayerc.tr.rc.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mpcresources/text/mplayerc.tr.rc.txt b/src/apps/mpcresources/text/mplayerc.tr.rc.txt index 94be545e0e..cc248446f9 100644 --- a/src/apps/mpcresources/text/mplayerc.tr.rc.txt +++ b/src/apps/mpcresources/text/mplayerc.tr.rc.txt @@ -307,7 +307,7 @@ BEGIN DIALOGEX IDD_PPAGEINTERFACE LINES 55 24 "Süre bilgi ipucunu göster:" 26 "Arama Çubuğu üzerinde ön izleme resmi göster" 27 "Ekran genişliğine göre boyut:" -31 "Online" +31 "Çevrim içi" 32 "Bölüm işaretlerini göster" 33 "Şeffaf Çubuğu göster" 34 "Oynatma listesi yazı tipi boyutu:" From 937f30333df6c8517f243c638bf7640766dd24c8 Mon Sep 17 00:00:00 2001 From: v0lt Date: Mon, 19 Feb 2024 20:03:24 +0300 Subject: [PATCH 71/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=20=D1=82=D1=83=D1=80=D0=B5=D1=86=D0=BA=D0=B8=D0=B9?= =?UTF-8?q?=20=D0=BF=D0=B5=D1=80=D0=B5=D0=B2=D0=BE=D0=B4=20(=D0=B0=D0=B2?= =?UTF-8?q?=D1=82=D0=BE=D1=80=20cmhrky).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.tr.rc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index acdcd404d9..ded0a530b0 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Çevrim içi",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT CONTROL "Bölüm işaretlerini göster",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Şeffaf Çubuğu göster",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Oynatma listesi yazı tipi boyutu:",IDC_STATIC,13,165,110,8 From 1b253687077fce03df72494a77713c98059c3105 Mon Sep 17 00:00:00 2001 From: v0lt Date: Mon, 19 Feb 2024 21:18:32 +0300 Subject: [PATCH 72/87] =?UTF-8?q?=D0=A3=D1=85=D0=BE=D0=B4=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=BE=D1=82=20multicharacter-=D0=BB=D0=B8=D1=82=D0=B5=D1=80?= =?UTF-8?q?=D0=B0=D0=BB=D0=BE=D0=B2=20=D1=81=20escape-=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=D0=BC=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/filters/parser/AudioSplitter/AudioFile.cpp | 4 ++-- src/filters/parser/AudioSplitter/MPC7File.cpp | 4 ++-- src/filters/reader/StreamReader/LiveStream.cpp | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/src/filters/parser/AudioSplitter/AudioFile.cpp b/src/filters/parser/AudioSplitter/AudioFile.cpp index ae577fdfd8..6928efe85b 100644 --- a/src/filters/parser/AudioSplitter/AudioFile.cpp +++ b/src/filters/parser/AudioSplitter/AudioFile.cpp @@ -1,5 +1,5 @@ /* - * (C) 2014-2021 see Authors.txt + * (C) 2014-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -92,7 +92,7 @@ CAudioFile* CAudioFile::CreateFilter(CBaseSplitterFile* pFile) pAudioFile = DNew CDSFFile(); } else if (*id == FCC('MPCK')) { pAudioFile = DNew CMPC8File(); - } else if ((*id & 0x00ffffff) == FCC('MP+\0') && (data[3] & 0x0f) == 0x7) { + } else if ((*id & 0x00ffffff) == MAKEFOURCC('M','P','+',0) && (data[3] & 0x0f) == 0x7) { pAudioFile = DNew CMPC7File(); } else if (*id == FCC('fLaC')) { pAudioFile = DNew CFLACFile(); diff --git a/src/filters/parser/AudioSplitter/MPC7File.cpp b/src/filters/parser/AudioSplitter/MPC7File.cpp index 583c265831..a9d9bb0eb2 100644 --- a/src/filters/parser/AudioSplitter/MPC7File.cpp +++ b/src/filters/parser/AudioSplitter/MPC7File.cpp @@ -1,5 +1,5 @@ /* - * (C) 2020-2023 see Authors.txt + * (C) 2020-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -60,7 +60,7 @@ HRESULT CMPC7File::Open(CBaseSplitterFile* pFile) } DWORD id = 0; - if (m_pFile->ByteRead((BYTE*)&id, 4) != S_OK || (id & 0x00ffffff) != FCC('MP+\0') || ((id >> 24) & 0x0f) != 0x7) { + if (m_pFile->ByteRead((BYTE*)&id, 4) != S_OK || (id & 0x00ffffff) != MAKEFOURCC('M','P','+',0) || ((id >> 24) & 0x0f) != 0x7) { return E_FAIL; } diff --git a/src/filters/reader/StreamReader/LiveStream.cpp b/src/filters/reader/StreamReader/LiveStream.cpp index f25c8879b4..afcc5e9656 100644 --- a/src/filters/reader/StreamReader/LiveStream.cpp +++ b/src/filters/reader/StreamReader/LiveStream.cpp @@ -1,5 +1,5 @@ /* - * (C) 2017-2023 see Authors.txt + * (C) 2017-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -205,7 +205,7 @@ static void GetType(const BYTE* buf, int size, GUID& subtype) subtype = MEDIASUBTYPE_Ogg; } else if (size > 4 && GETU32(buf) == 0xA3DF451A) { subtype = MEDIASUBTYPE_Matroska; - } else if (size > 4 && GETU32(buf) == FCC('FLV\x1')) { + } else if (size > 4 && GETU32(buf) == MAKEFOURCC('F','L','V',1)) { subtype = MEDIASUBTYPE_FLV; } else if (size > 8 && GETU32(buf + 4) == FCC('ftyp')) { subtype = MEDIASUBTYPE_MP4; From 1dc0307476c278e6bccc9b2a6cffa417e3bde145 Mon Sep 17 00:00:00 2001 From: v0lt Date: Mon, 19 Feb 2024 21:33:55 +0300 Subject: [PATCH 73/87] =?UTF-8?q?=D0=9C=D0=B8=D0=BA=D1=80=D0=BE=D0=BE?= =?UTF-8?q?=D0=BF=D1=82=D0=B8=D0=BC=D0=B8=D0=B7=D0=B0=D1=86=D0=B8=D1=8F=20?= =?UTF-8?q?=D1=80=D0=B0=D1=81=D0=BF=D0=BE=D0=B7=D0=BD=D0=B0=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20=D1=84=D0=B0=D0=B9=D0=BB=D0=BE=D0=B2=20Mus?= =?UTF-8?q?epack=20SV7.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/filters/parser/AudioSplitter/AudioFile.cpp | 2 +- src/filters/parser/AudioSplitter/MPC7File.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/filters/parser/AudioSplitter/AudioFile.cpp b/src/filters/parser/AudioSplitter/AudioFile.cpp index 6928efe85b..c743decd0b 100644 --- a/src/filters/parser/AudioSplitter/AudioFile.cpp +++ b/src/filters/parser/AudioSplitter/AudioFile.cpp @@ -92,7 +92,7 @@ CAudioFile* CAudioFile::CreateFilter(CBaseSplitterFile* pFile) pAudioFile = DNew CDSFFile(); } else if (*id == FCC('MPCK')) { pAudioFile = DNew CMPC8File(); - } else if ((*id & 0x00ffffff) == MAKEFOURCC('M','P','+',0) && (data[3] & 0x0f) == 0x7) { + } else if ((*id & 0x0fffffff) == MAKEFOURCC('M','P','+',7)) { pAudioFile = DNew CMPC7File(); } else if (*id == FCC('fLaC')) { pAudioFile = DNew CFLACFile(); diff --git a/src/filters/parser/AudioSplitter/MPC7File.cpp b/src/filters/parser/AudioSplitter/MPC7File.cpp index a9d9bb0eb2..6472ca6b1c 100644 --- a/src/filters/parser/AudioSplitter/MPC7File.cpp +++ b/src/filters/parser/AudioSplitter/MPC7File.cpp @@ -60,7 +60,7 @@ HRESULT CMPC7File::Open(CBaseSplitterFile* pFile) } DWORD id = 0; - if (m_pFile->ByteRead((BYTE*)&id, 4) != S_OK || (id & 0x00ffffff) != MAKEFOURCC('M','P','+',0) || ((id >> 24) & 0x0f) != 0x7) { + if (m_pFile->ByteRead((BYTE*)&id, 4) != S_OK || (id & 0x0fffffff) != MAKEFOURCC('M','P','+',7)) { return E_FAIL; } From 4b39c78a9b5417d93915f668f4a5f8cba027d6e2 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 20 Feb 2024 07:08:50 +0300 Subject: [PATCH 74/87] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6?= =?UTF-8?q?=D0=BA=D0=B0=20=D0=B4=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B8=D1=82?= =?UTF-8?q?=D0=B5=D0=BB=D1=8C=D0=BD=D1=8B=D1=85=20=D0=B4=D0=B5=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=D0=B5=D1=80=D0=BE=D0=B2=20HEVC=20Intel=20=D0=B4=D0=BB?= =?UTF-8?q?=D1=8F=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20D3D11=20copy=20?= =?UTF-8?q?back.=20=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=D0=B0?= =?UTF-8?q?=20=D0=BF=D0=BE=D0=B4=D0=B4=D0=B5=D1=80=D0=B6=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B4=D0=B5=D0=BA=D0=BE=D0=B4=D0=B8=D1=80=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D0=BD=D0=B8=D1=8F=20HEVC=20YUV422=208-=D0=B1=D0=B8=D1=82=20?= =?UTF-8?q?=D1=81=20=D0=BF=D0=BE=D0=BC=D0=BE=D1=89=D1=8C=D1=8E=20=D0=B4?= =?UTF-8?q?=D0=B5=D0=BA=D0=BE=D0=B4=D0=B5=D1=80=D0=B0=20HEVC=5FVLD=5FMain4?= =?UTF-8?q?22=5F10=5FIntel.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ExtLib/ffmpeg/libavcodec/dxva2.c | 84 +++++++++++++++++++ .../ffmpeg/libavutil/hwcontext_d3d11va.c | 20 +++-- .../transform/MPCVideoDec/MPCVideoDec.cpp | 53 ++++++++---- 3 files changed, 133 insertions(+), 24 deletions(-) diff --git a/src/ExtLib/ffmpeg/libavcodec/dxva2.c b/src/ExtLib/ffmpeg/libavcodec/dxva2.c index a917d39df7..c1f8d7ccc8 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dxva2.c +++ b/src/ExtLib/ffmpeg/libavcodec/dxva2.c @@ -58,6 +58,15 @@ DEFINE_GUID(ff_DXVA2_NoEncrypt, 0x1b81beD0, 0xa0c7,0x11d3,0xb9,0x84,0x0 DEFINE_GUID(ff_GUID_NULL, 0x00000000, 0x0000,0x0000,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00); DEFINE_GUID(ff_IID_IDirectXVideoDecoderService, 0xfc51a551,0xd5e7,0x11d9,0xaf,0x55,0x00,0x05,0x4e,0x43,0xff,0x02); +// ==> Start patch MPC +DEFINE_GUID(ff_DXVA2_HEVC_VLD_Main12_Intel, 0x8FF8A3AA, 0xC456, 0x4132, 0xB6, 0xEF, 0x69, 0xD9, 0xDD, 0x72, 0x57, 0x1D); +DEFINE_GUID(ff_DXVA2_HEVC_VLD_Main422_10_Intel, 0xE484DCB8, 0xCAC9, 0x4859, 0x99, 0xF5, 0x5C, 0x0D, 0x45, 0x06, 0x90, 0x89); +DEFINE_GUID(ff_DXVA2_HEVC_VLD_Main422_12_Intel, 0xC23DD857, 0x874B, 0x423C, 0xB6, 0xE0, 0x82, 0xCE, 0xAA, 0x9B, 0x11, 0x8A); +DEFINE_GUID(ff_DXVA2_HEVC_VLD_Main444_Intel, 0x41A5AF96, 0xE415, 0x4B0C, 0x9D, 0x03, 0x90, 0x78, 0x58, 0xE2, 0x3E, 0x78); +DEFINE_GUID(ff_DXVA2_HEVC_VLD_Main444_10_Intel, 0x6A6A81BA, 0x912A, 0x485D, 0xB5, 0x7F, 0xCC, 0xD2, 0xD3, 0x7B, 0x8D, 0x94); +DEFINE_GUID(ff_DXVA2_HEVC_VLD_Main444_12_Intel, 0x5B08E35D, 0x0C66, 0x4C51, 0xA6, 0xF1, 0x89, 0xD0, 0x0C, 0xB2, 0xC1, 0x97); +// ==> End patch MPC + typedef struct dxva_mode { const GUID *guid; enum AVCodecID codec; @@ -87,6 +96,11 @@ static const int prof_vp9_profile2[] = {AV_PROFILE_VP9_2, static const int prof_av1_profile0[] = {AV_PROFILE_AV1_MAIN, AV_PROFILE_UNKNOWN}; +// ==> Start patch MPC +static const int prof_hevc_rext[] = {AV_PROFILE_HEVC_REXT, + AV_PROFILE_UNKNOWN}; +// ==> End patch MPC + static const dxva_mode dxva_modes[] = { /* MPEG-2 */ { &ff_DXVA2_ModeMPEG2_VLD, AV_CODEC_ID_MPEG2VIDEO, prof_mpeg2_main }, @@ -115,6 +129,16 @@ static const dxva_mode dxva_modes[] = { /* AV1 */ { &ff_DXVA2_ModeAV1_VLD_Profile0, AV_CODEC_ID_AV1, prof_av1_profile0 }, + // ==> Start patch MPC + /* HEVC/H.265 Rext */ + { &ff_DXVA2_HEVC_VLD_Main12_Intel, AV_CODEC_ID_HEVC, prof_hevc_rext }, + { &ff_DXVA2_HEVC_VLD_Main422_10_Intel, AV_CODEC_ID_HEVC, prof_hevc_rext }, + { &ff_DXVA2_HEVC_VLD_Main422_12_Intel, AV_CODEC_ID_HEVC, prof_hevc_rext }, + { &ff_DXVA2_HEVC_VLD_Main444_Intel, AV_CODEC_ID_HEVC, prof_hevc_rext }, + { &ff_DXVA2_HEVC_VLD_Main444_10_Intel, AV_CODEC_ID_HEVC, prof_hevc_rext }, + { &ff_DXVA2_HEVC_VLD_Main444_12_Intel, AV_CODEC_ID_HEVC, prof_hevc_rext }, + // ==> End patch MPC + { NULL, 0 }, }; @@ -312,6 +336,16 @@ static int dxva_get_decoder_guid(AVCodecContext *avctx, void *service, void *sur if (IsEqualGUID(decoder_guid, &ff_DXVADDI_Intel_ModeH264_E)) sctx->workaround |= FF_DXVA2_WORKAROUND_INTEL_CLEARVIDEO; + // ==> Start patch MPC + av_log(avctx, AV_LOG_VERBOSE, + "Used guid : {%8.8x-%4.4x-%4.4x-%2.2x%2.2x-%2.2x%2.2x%2.2x%2.2x%2.2x%2.2x}", + (unsigned)decoder_guid->Data1, decoder_guid->Data2, decoder_guid->Data3, + decoder_guid->Data4[0], decoder_guid->Data4[1], + decoder_guid->Data4[2], decoder_guid->Data4[3], + decoder_guid->Data4[4], decoder_guid->Data4[5], + decoder_guid->Data4[6], decoder_guid->Data4[7]); + // ==> End patch MPC + return 0; } @@ -469,6 +503,15 @@ static DXGI_FORMAT d3d11va_map_sw_to_hw_format(enum AVPixelFormat pix_fmt) case AV_PIX_FMT_NV12: return DXGI_FORMAT_NV12; case AV_PIX_FMT_P010: return DXGI_FORMAT_P010; case AV_PIX_FMT_YUV420P: return DXGI_FORMAT_420_OPAQUE; + // ==> Start patch MPC + case AV_PIX_FMT_P016: return DXGI_FORMAT_P016; + case AV_PIX_FMT_YUYV422: return DXGI_FORMAT_YUY2; + case AV_PIX_FMT_Y210: return DXGI_FORMAT_Y210; + case AV_PIX_FMT_Y212: return DXGI_FORMAT_Y216; + case AV_PIX_FMT_VUYX: return DXGI_FORMAT_AYUV; + case AV_PIX_FMT_XV30: return DXGI_FORMAT_Y410; + case AV_PIX_FMT_XV36: return DXGI_FORMAT_Y416; + // ==> End patch MPC default: return DXGI_FORMAT_UNKNOWN; } } @@ -600,6 +643,41 @@ static void ff_dxva2_unlock(AVCodecContext *avctx) #endif } +// ==> Start patch MPC +static enum AVPixelFormat map_sw_pix_format(enum AVPixelFormat pix_fmt, enum AVPixelFormat hw_pix_fmt) +{ +#if CONFIG_D3D11VA + if (hw_pix_fmt == AV_PIX_FMT_D3D11) { + switch (pix_fmt) + { + case AV_PIX_FMT_YUV420P10: + case AV_PIX_FMT_P010: + return AV_PIX_FMT_P010; + case AV_PIX_FMT_YUV420P12: + return AV_PIX_FMT_P016; + case AV_PIX_FMT_YUV422P: + return AV_PIX_FMT_YUYV422; + case AV_PIX_FMT_YUV422P10: + return AV_PIX_FMT_Y210; + case AV_PIX_FMT_YUV444P: + return AV_PIX_FMT_VUYX; + case AV_PIX_FMT_YUV444P10: + return AV_PIX_FMT_XV30; + case AV_PIX_FMT_YUV422P12: + return AV_PIX_FMT_Y212; + case AV_PIX_FMT_YUV444P12: + return AV_PIX_FMT_XV36; + case AV_PIX_FMT_NV12: + default: + return AV_PIX_FMT_NV12; + } + } +#endif + return pix_fmt == AV_PIX_FMT_YUV420P10 ? + AV_PIX_FMT_P010 : AV_PIX_FMT_NV12; +} +// ==> End patch MPC + int ff_dxva2_common_frame_params(AVCodecContext *avctx, AVBufferRef *hw_frames_ctx) { @@ -637,8 +715,14 @@ int ff_dxva2_common_frame_params(AVCodecContext *avctx, else num_surfaces += 2; + // ==> Start patch MPC + /* frames_ctx->sw_format = avctx->sw_pix_fmt == AV_PIX_FMT_YUV420P10 ? AV_PIX_FMT_P010 : AV_PIX_FMT_NV12; + */ + frames_ctx->sw_format = map_sw_pix_format(avctx->sw_pix_fmt, frames_ctx->format); + // ==> End patch MPC + frames_ctx->width = FFALIGN(avctx->coded_width, surface_alignment); frames_ctx->height = FFALIGN(avctx->coded_height, surface_alignment); frames_ctx->initial_pool_size = num_surfaces; diff --git a/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c b/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c index 25c8e5fa0e..c2fad859f7 100644 --- a/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c +++ b/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c @@ -86,21 +86,29 @@ static const struct { } supported_formats[] = { { DXGI_FORMAT_NV12, AV_PIX_FMT_NV12 }, { DXGI_FORMAT_P010, AV_PIX_FMT_P010 }, + { DXGI_FORMAT_B8G8R8A8_UNORM, AV_PIX_FMT_BGRA }, + { DXGI_FORMAT_R10G10B10A2_UNORM, AV_PIX_FMT_X2BGR10 }, + { DXGI_FORMAT_R16G16B16A16_FLOAT, AV_PIX_FMT_RGBAF16 }, + { DXGI_FORMAT_AYUV, AV_PIX_FMT_VUYX }, + { DXGI_FORMAT_YUY2, AV_PIX_FMT_YUYV422 }, + { DXGI_FORMAT_Y210, AV_PIX_FMT_Y210 }, + { DXGI_FORMAT_Y410, AV_PIX_FMT_XV30 }, + { DXGI_FORMAT_P016, AV_PIX_FMT_P012 }, + { DXGI_FORMAT_Y216, AV_PIX_FMT_Y212 }, + { DXGI_FORMAT_Y416, AV_PIX_FMT_XV36 }, + // Special opaque formats. The pix_fmt is merely a place holder, as the + // opaque format cannot be accessed directly. + { DXGI_FORMAT_420_OPAQUE, AV_PIX_FMT_YUV420P }, // ==> Start patch MPC - // 420 12bit + { DXGI_FORMAT_P016, AV_PIX_FMT_P016 }, { DXGI_FORMAT_P016, AV_PIX_FMT_YUV420P12 }, - // 422 8/10/12 bit { DXGI_FORMAT_YUY2, AV_PIX_FMT_YUV422P }, { DXGI_FORMAT_Y210, AV_PIX_FMT_YUV422P10 }, { DXGI_FORMAT_Y216, AV_PIX_FMT_YUV422P12 }, - // 444 8/10/12 bit { DXGI_FORMAT_AYUV, AV_PIX_FMT_YUV444P }, { DXGI_FORMAT_Y410, AV_PIX_FMT_YUV444P10 }, { DXGI_FORMAT_Y416, AV_PIX_FMT_YUV444P12 }, // ==> End patch MPC - // Special opaque formats. The pix_fmt is merely a place holder, as the - // opaque format cannot be accessed directly. - { DXGI_FORMAT_420_OPAQUE, AV_PIX_FMT_YUV420P }, }; static void d3d11va_default_lock(void *ctx) diff --git a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp index 4f79d80f59..4672f3611a 100644 --- a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp +++ b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp @@ -165,6 +165,7 @@ struct { { AV_CODEC_ID_H264, DXVA2_H264_VLD_Intel, false }, // HEVC Intel { AV_CODEC_ID_HEVC, DXVA2_HEVC_VLD_Main12_Intel, false, AV_PIX_FMT_YUV420P12 }, + { AV_CODEC_ID_HEVC, DXVA2_HEVC_VLD_Main422_10_Intel, false, AV_PIX_FMT_YUV422P }, { AV_CODEC_ID_HEVC, DXVA2_HEVC_VLD_Main422_10_Intel, false, AV_PIX_FMT_YUV422P10 }, { AV_CODEC_ID_HEVC, DXVA2_HEVC_VLD_Main422_12_Intel, false, AV_PIX_FMT_YUV422P12 }, { AV_CODEC_ID_HEVC, DXVA2_HEVC_VLD_Main444_Intel, false, AV_PIX_FMT_YUV444P }, @@ -3652,27 +3653,25 @@ HRESULT CMPCVideoDecFilter::DecodeInternal(AVPacket *avpkt, REFERENCE_TIME rtSta auto frames_ctx = (AVHWFramesContext*)hw_frame->hw_frames_ctx->data; if (frames_ctx->format == AV_PIX_FMT_D3D11) { - const auto dxgi_format = - (frames_ctx->sw_format == AV_PIX_FMT_P010) ? DXGI_FORMAT_P010 : - (frames_ctx->sw_format == AV_PIX_FMT_NV12) ? DXGI_FORMAT_NV12 : - DXGI_FORMAT_UNKNOWN; // formal assignment - auto device_hwctx = reinterpret_cast(frames_ctx->device_ctx->hwctx); auto texture = reinterpret_cast(hw_frame->data[0]); auto index = reinterpret_cast(hw_frame->data[1]); + D3D11_TEXTURE2D_DESC inputTexDesc = {}; + texture->GetDesc(&inputTexDesc); + D3D11_TEXTURE2D_DESC texDesc = {}; if (m_pStagingD3D11Texture2D) { m_pStagingD3D11Texture2D->GetDesc(&texDesc); - if (texDesc.Format != dxgi_format || texDesc.Width != frames_ctx->width || texDesc.Height != frames_ctx->height) { + if (texDesc.Format != inputTexDesc.Format || texDesc.Width != inputTexDesc.Width || texDesc.Height != inputTexDesc.Height) { m_pStagingD3D11Texture2D.Release(); } } if (!m_pStagingD3D11Texture2D) { - texDesc.Width = frames_ctx->width; - texDesc.Height = frames_ctx->height; + texDesc.Width = inputTexDesc.Width; + texDesc.Height = inputTexDesc.Height; texDesc.MipLevels = 1; - texDesc.Format = dxgi_format; + texDesc.Format = inputTexDesc.Format; texDesc.SampleDesc = { 1, 0 }; texDesc.ArraySize = 1; texDesc.Usage = D3D11_USAGE_STAGING; @@ -3694,17 +3693,35 @@ HRESULT CMPCVideoDecFilter::DecodeInternal(AVPacket *avpkt, REFERENCE_TIME rtSta DLog(L"CMPCVideoDecFilter::DecodeInternal() : ID3D11DeviceContext::Map() failed : %s", HR2Str(hr)); CLEAR_AND_CONTINUE; } - m_pFrame->data[0] = (BYTE*)mappedResource.pData; - m_pFrame->data[1] = m_pFrame->data[0] + texDesc.Height * mappedResource.RowPitch; - m_pFrame->linesize[0] = mappedResource.RowPitch; - m_pFrame->linesize[1] = mappedResource.RowPitch; - m_pFrame->format = frames_ctx->sw_format; - m_pFrame->width = hw_frame->width; - m_pFrame->height = hw_frame->height; - m_FormatConverter.Converting(pDataOut, m_pFrame); + int codedbytes = 1; + switch (frames_ctx->sw_format) { + case AV_PIX_FMT_P010: + case AV_PIX_FMT_P016: + case AV_PIX_FMT_YUYV422: + codedbytes = 2; + break; + case AV_PIX_FMT_Y210: + case AV_PIX_FMT_Y212: + case AV_PIX_FMT_VUYX: + case AV_PIX_FMT_XV30: + codedbytes = 4; + break; + case AV_PIX_FMT_XV36: + codedbytes = 8; + break; + } + + auto width = mappedResource.RowPitch / codedbytes; + + av_image_fill_linesizes(m_pFrame->linesize, frames_ctx->sw_format, width); + av_image_fill_pointers(m_pFrame->data, frames_ctx->sw_format, texDesc.Height, reinterpret_cast(mappedResource.pData), m_pFrame->linesize); - m_pFrame->data[0] = m_pFrame->data[1] = nullptr; + m_pFrame->format = frames_ctx->sw_format; + m_pFrame->width = hw_frame->width; + m_pFrame->height = hw_frame->height; + + m_FormatConverter.Converting(pDataOut, m_pFrame); device_hwctx->device_context->Unmap(m_pStagingD3D11Texture2D, 0); From 83cd0268138f001914afe2a8166b10885b0bccf8 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 20 Feb 2024 14:41:07 +1000 Subject: [PATCH 75/87] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BE=D0=B1=20NVDEC=20444=20=D0=B4=D0=B5?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B5=D1=80=D0=B5.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/filters/transform/MPCVideoDec/MPCVideoDec.cpp | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp index 4672f3611a..5bdda4b6b4 100644 --- a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp +++ b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp @@ -3566,8 +3566,16 @@ HRESULT CMPCVideoDecFilter::DecodeInternal(AVPacket *avpkt, REFERENCE_TIME rtSta case AV_CODEC_ID_VP9: codec = L"VP9"; break; } + auto frames_ctx = (AVHWFramesContext*)hw_frame->hw_frames_ctx->data; + CString description = m_bUseD3D11cb ? L"D3D11 Copy-back" : (m_bUseD3D12cb ? L"D3D12 Copy-back" : L"NVDEC"); if (!codec.IsEmpty()) { + if (m_bUseNVDEC) { + if (frames_ctx->sw_format == AV_PIX_FMT_YUV444P || frames_ctx->sw_format == AV_PIX_FMT_YUV444P16) { + codec.Append(L" 444"); + } + } + const int depth = GetLumaBits(m_pAVCtx->sw_pix_fmt); if (depth > 8) { codec.AppendFormat(L" %d-bit", depth); @@ -3578,7 +3586,6 @@ HRESULT CMPCVideoDecFilter::DecodeInternal(AVPacket *avpkt, REFERENCE_TIME rtSta DXVAState::SetActiveState(GUID_NULL, description); - auto frames_ctx = (AVHWFramesContext*)hw_frame->hw_frames_ctx->data; if (frames_ctx->format == AV_PIX_FMT_CUDA) { auto device_hwctx = reinterpret_cast(frames_ctx->device_ctx); auto cuda_hwctx = reinterpret_cast(device_hwctx->hwctx); From 01c606b3bd032230c9196598d64fbe4b313f1afb Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Tue, 20 Feb 2024 15:54:15 +1000 Subject: [PATCH 76/87] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B0=20=D0=B8=D0=BD=D1=84=D0=BE=D1=80=D0=BC=D0=B0?= =?UTF-8?q?=D1=86=D0=B8=D1=8F=20=D0=BE=D0=B1=20D3D11=20copy=20back=20422/4?= =?UTF-8?q?44=20=D0=B4=D0=B5=D0=BA=D0=BE=D0=B4=D0=B5=D1=80=D0=B0=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/filters/transform/MPCVideoDec/MPCVideoDec.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp index 5bdda4b6b4..75de147685 100644 --- a/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp +++ b/src/filters/transform/MPCVideoDec/MPCVideoDec.cpp @@ -3574,6 +3574,19 @@ HRESULT CMPCVideoDecFilter::DecodeInternal(AVPacket *avpkt, REFERENCE_TIME rtSta if (frames_ctx->sw_format == AV_PIX_FMT_YUV444P || frames_ctx->sw_format == AV_PIX_FMT_YUV444P16) { codec.Append(L" 444"); } + } else if (m_bUseD3D11cb) { + switch (frames_ctx->sw_format) { + case AV_PIX_FMT_YUYV422: + case AV_PIX_FMT_Y210: + case AV_PIX_FMT_Y212: + codec.Append(L" 422"); + break; + case AV_PIX_FMT_VUYX: + case AV_PIX_FMT_XV30: + case AV_PIX_FMT_XV36: + codec.Append(L" 444"); + break; + } } const int depth = GetLumaBits(m_pAVCtx->sw_pix_fmt); From 3f6db4f98dc259f0e20217270b37998bb6017795 Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 20 Feb 2024 19:34:37 +0300 Subject: [PATCH 77/87] =?UTF-8?q?=D0=9A=D0=BE=D1=81=D0=BC=D0=B5=D1=82?= =?UTF-8?q?=D0=B8=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/PlayerSeekBar.cpp | 10 +++------- src/apps/mplayerc/PlayerSeekBar.h | 4 ++-- src/apps/mplayerc/PlayerVolumeCtrl.cpp | 4 ++-- src/apps/mplayerc/ShaderAutoCompleteDlg.cpp | 5 +---- src/apps/mplayerc/ShaderAutoCompleteDlg.h | 4 ++-- 5 files changed, 10 insertions(+), 17 deletions(-) diff --git a/src/apps/mplayerc/PlayerSeekBar.cpp b/src/apps/mplayerc/PlayerSeekBar.cpp index e5ab452d62..abb8a1a455 100644 --- a/src/apps/mplayerc/PlayerSeekBar.cpp +++ b/src/apps/mplayerc/PlayerSeekBar.cpp @@ -49,13 +49,9 @@ BOOL CPlayerSeekBar::Create(CWnd* pParentWnd) m_tooltip.SetDelayTime(TTDT_INITIAL, 0); m_tooltip.SetDelayTime(TTDT_RESHOW, 0); - ZeroMemory(&m_ti, sizeof(TOOLINFO)); - m_ti.cbSize = sizeof(TOOLINFO); - m_ti.uFlags = TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE; - m_ti.hwnd = m_hWnd; - m_ti.hinst = AfxGetInstanceHandle(); - m_ti.lpszText = nullptr; - m_ti.uId = (UINT_PTR)m_hWnd; + m_ti.hwnd = m_hWnd; + m_ti.hinst = AfxGetInstanceHandle(); + m_ti.uId = (UINT_PTR)m_hWnd; m_tooltip.SendMessageW(TTM_ADDTOOLW, 0, (LPARAM)&m_ti); diff --git a/src/apps/mplayerc/PlayerSeekBar.h b/src/apps/mplayerc/PlayerSeekBar.h index 152464f6c8..f284166085 100644 --- a/src/apps/mplayerc/PlayerSeekBar.h +++ b/src/apps/mplayerc/PlayerSeekBar.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2021 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -46,7 +46,7 @@ class CPlayerSeekBar : public CDialogBar REFERENCE_TIME m_tooltipLastPos = -1; UINT_PTR m_tooltipTimer = 1; - TOOLINFO m_ti = {}; + TOOLINFOW m_ti = { sizeof(TOOLINFOW), TTF_IDISHWND | TTF_TRACK | TTF_ABSOLUTE }; CToolTipCtrl m_tooltip; CCritSec m_CBLock; CComPtr m_pChapterBag; diff --git a/src/apps/mplayerc/PlayerVolumeCtrl.cpp b/src/apps/mplayerc/PlayerVolumeCtrl.cpp index 0ddcc0b75c..de01c29a8a 100644 --- a/src/apps/mplayerc/PlayerVolumeCtrl.cpp +++ b/src/apps/mplayerc/PlayerVolumeCtrl.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2021 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -429,7 +429,7 @@ void CVolumeCtrl::OnLButtonDown(UINT nFlags, CPoint point) SetCapture(); if (m_toolTipHandle) { - TOOLINFO ti = { sizeof(TOOLINFO) }; + TOOLINFOW ti = { sizeof(TOOLINFOW) }; ti.uFlags = TTF_TRACK | TTF_IDISHWND | TTF_ABSOLUTE; ti.hwnd = m_hWnd; ti.uId = (UINT_PTR)m_hWnd; diff --git a/src/apps/mplayerc/ShaderAutoCompleteDlg.cpp b/src/apps/mplayerc/ShaderAutoCompleteDlg.cpp index 748ea35966..87cbb5b259 100644 --- a/src/apps/mplayerc/ShaderAutoCompleteDlg.cpp +++ b/src/apps/mplayerc/ShaderAutoCompleteDlg.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2021 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -157,9 +157,6 @@ BOOL CShaderAutoCompleteDlg::OnInitDialog() CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, nullptr, nullptr, nullptr, nullptr); - memset(&m_ti, 0, sizeof(m_ti)); - m_ti.cbSize = sizeof(TOOLINFO); - m_ti.uFlags = TTF_ABSOLUTE|TTF_TRACK; m_ti.hwnd = m_hWnd; m_ti.lpszText = m_text; diff --git a/src/apps/mplayerc/ShaderAutoCompleteDlg.h b/src/apps/mplayerc/ShaderAutoCompleteDlg.h index 150cf26a01..01a30df16e 100644 --- a/src/apps/mplayerc/ShaderAutoCompleteDlg.h +++ b/src/apps/mplayerc/ShaderAutoCompleteDlg.h @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2021 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -27,7 +27,7 @@ class CShaderAutoCompleteDlg : public CResizableDialog { - TOOLINFO m_ti; + TOOLINFOW m_ti = { sizeof(TOOLINFOW), TTF_ABSOLUTE|TTF_TRACK }; HWND m_hToolTipWnd; WCHAR m_text[1024]; From aefe46940585cfd56c98f6212120729ee0e9e083 Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 20 Feb 2024 19:36:25 +0300 Subject: [PATCH 78/87] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B0=20=D0=BE=D1=88=D0=B8=D0=B1=D0=BA=D0=B0?= =?UTF-8?q?=20=D0=BF=D1=80=D0=BE=D0=B2=D0=B5=D1=80=D0=BA=D0=B8=20=D1=83?= =?UTF-8?q?=D0=BA=D0=B0=D0=B7=D0=B0=D1=82=D0=B5=D0=BB=D1=8F.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/FGManagerBDA.cpp | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/apps/mplayerc/FGManagerBDA.cpp b/src/apps/mplayerc/FGManagerBDA.cpp index 2995a21dda..6b0c6b0f2f 100644 --- a/src/apps/mplayerc/FGManagerBDA.cpp +++ b/src/apps/mplayerc/FGManagerBDA.cpp @@ -1,5 +1,5 @@ /* - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -595,17 +595,19 @@ STDMETHODIMP CFGManagerBDA::Enable(long lIndex, DWORD dwFlags) if (pChannel) { if (lIndex>=0 && lIndex < pChannel->GetAudioCount()) { - pStreamInfo = pChannel->GetAudio(lIndex); - pStream = &m_DVBStreams[pStreamInfo->Type]; - if (pStream && pStreamInfo) { - nState = GetState(); - if (m_nCurAudioType != pStreamInfo->Type) { - SwitchStream (m_nCurAudioType, pStreamInfo->Type); - } - pStream->Map (pStreamInfo->PID); - ChangeState ((FILTER_STATE)nState); + pStreamInfo = pChannel->GetAudio(lIndex); + if (pStreamInfo) { + pStream = &m_DVBStreams[pStreamInfo->Type]; + if (pStream) { + nState = GetState(); + if (m_nCurAudioType != pStreamInfo->Type) { + SwitchStream(m_nCurAudioType, pStreamInfo->Type); + } + pStream->Map(pStreamInfo->PID); + ChangeState((FILTER_STATE)nState); - hr = S_OK; + hr = S_OK; + } } } else if (lIndex > 0 && lIndex < pChannel->GetAudioCount()+pChannel->GetSubtitleCount()) { pStreamInfo = pChannel->GetSubtitle(lIndex-pChannel->GetAudioCount()); From 901b1b0084188f068c648aff7bc830d7aa102d4e Mon Sep 17 00:00:00 2001 From: v0lt Date: Tue, 20 Feb 2024 20:14:39 +0300 Subject: [PATCH 79/87] =?UTF-8?q?=D0=9F=D0=BE=D0=B4=D0=BC=D0=BE=D0=B4?= =?UTF-8?q?=D1=83=D0=BB=D1=8C=20rapidjson=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=20=D0=B4=D0=BE=20v1.1.0-748-g3f73edae.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 1 + docs/Changelog.txt | 1 + src/ExtLib/rapidjson | 2 +- 3 files changed, 3 insertions(+), 1 deletion(-) diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index 6ceb14b0da..d935cbb808 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -35,6 +35,7 @@ MPCVideoDec Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; + rapidjson git-v1.1.0-748-g3f73edae; ZenLib git-v0.4.41-12-g26b4aa1; zlib 1.3.1. diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 7cd0417777..9634292900 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -35,6 +35,7 @@ Updated libraries: Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; + rapidjson git-v1.1.0-748-g3f73edae; ZenLib git-v0.4.41-12-g26b4aa1; zlib 1.3.1. diff --git a/src/ExtLib/rapidjson b/src/ExtLib/rapidjson index 6089180ecb..3f73edae00 160000 --- a/src/ExtLib/rapidjson +++ b/src/ExtLib/rapidjson @@ -1 +1 @@ -Subproject commit 6089180ecb704cb2b136777798fa1be303618975 +Subproject commit 3f73edae00aba5b0112a80b4d41e6f1ff7d92a3d From cecc12cda8448573dcc0895484e31c55b4f04a9a Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Wed, 21 Feb 2024 08:59:13 +1000 Subject: [PATCH 80/87] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B8=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D1=80=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=BA=D0=BE=D0=B4=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B8=D1=82?= =?UTF-8?q?=D0=B0=205efaf7f6a7c2723d69f0c3af14cccfc0de5a0af8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/PlayerPlaylistBar.cpp | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/src/apps/mplayerc/PlayerPlaylistBar.cpp b/src/apps/mplayerc/PlayerPlaylistBar.cpp index 08fcab7931..b79f0e5b36 100644 --- a/src/apps/mplayerc/PlayerPlaylistBar.cpp +++ b/src/apps/mplayerc/PlayerPlaylistBar.cpp @@ -1,6 +1,6 @@ /* * (C) 2003-2006 Gabest - * (C) 2006-2023 see Authors.txt + * (C) 2006-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -370,13 +370,13 @@ void CPlaylistItem::AutoLoadFiles() return; } - CStringW fpath = m_fi; + auto& fpath = m_fi.GetPath(); if (fpath.Find(L"://") >= 0) { // skip URLs return; } auto curdir = GetFolderOnly(fpath); - auto name = GetFileOnly(fpath); + auto name = RemoveFileExt(GetFileOnly(fpath)); auto ext = GetFileExt(fpath); CString BDLabel, empty; @@ -404,7 +404,7 @@ void CPlaylistItem::AutoLoadFiles() searchPattern.emplace_back(path + BDLabel + L".*"); } - WIN32_FIND_DATAW fd = {0}; + WIN32_FIND_DATAW fd = {}; HANDLE hFind; for (size_t j = 0; j < searchPattern.size(); j++) { @@ -415,11 +415,11 @@ void CPlaylistItem::AutoLoadFiles() if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { continue; } - const CStringW fn = fd.cFileName; + const CStringW fn(fd.cFileName); if (fn[name.GetLength()] != L'.') { continue; } - const CStringW ext2 = fn.Mid(fn.ReverseFind('.') + 1).MakeLower(); + const CStringW ext2 = GetFileExt(fn); if (ext == ext2 || !mf.FindAudioExt(ext2)) { continue; } @@ -466,8 +466,7 @@ void CPlaylistItem::AutoLoadFiles() } // cue-sheet file auto-load - CString cuefn(fpath); - cuefn.Replace(ext, L"cue"); + const CString cuefn = RenameFileExt(fpath, L".cue"); if (::PathFileExistsW(cuefn)) { CString filter; std::vector mask; From f5b5683d03b1f3454ff4063eaf7602c3b9071a41 Mon Sep 17 00:00:00 2001 From: v0lt Date: Wed, 21 Feb 2024 06:44:39 +0300 Subject: [PATCH 81/87] =?UTF-8?q?=D0=9E=D0=B1=D0=BD=D0=BE=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20ffmpeg=20git-n6.2-dev-1203-gcb9f1f59?= =?UTF-8?q?a1.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/Changelog.Rus.txt | 2 +- docs/Changelog.txt | 2 +- src/ExtLib/ffmpeg/libavcodec/aacsbr.c | 39 +++-- .../ffmpeg/libavcodec/aacsbr_template.c | 2 +- src/ExtLib/ffmpeg/libavcodec/av1dec.c | 2 +- src/ExtLib/ffmpeg/libavcodec/avcodec.h | 4 + src/ExtLib/ffmpeg/libavcodec/dxva2.c | 2 +- src/ExtLib/ffmpeg/libavcodec/encode.h | 6 + src/ExtLib/ffmpeg/libavcodec/flashsv2enc.c | 2 +- src/ExtLib/ffmpeg/libavcodec/h2645_parse.c | 5 +- .../ffmpeg/libavcodec/h264qpel_template.c | 93 ++++++----- src/ExtLib/ffmpeg/libavcodec/hapdec.c | 2 + src/ExtLib/ffmpeg/libavcodec/internal.h | 22 --- src/ExtLib/ffmpeg/libavcodec/jpeg2000.c | 18 +- src/ExtLib/ffmpeg/libavcodec/jpeg2000dec.c | 22 ++- src/ExtLib/ffmpeg/libavcodec/rv34dsp.c | 2 + src/ExtLib/ffmpeg/libavcodec/rv34dsp.h | 1 + src/ExtLib/ffmpeg/libavcodec/texturedsp.h | 1 + .../ffmpeg/libavcodec/texturedsp_template.c | 4 +- src/ExtLib/ffmpeg/libavcodec/version.h | 4 +- src/ExtLib/ffmpeg/libavcodec/version_major.h | 1 + src/ExtLib/ffmpeg/libavcodec/vp8dsp.c | 2 + src/ExtLib/ffmpeg/libavcodec/vp8dsp.h | 1 + src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c | 2 +- .../libavcodec/vvc/vvc_filter_template.c | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c | 4 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_itx_1d.c | 2 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c | 10 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h | 7 +- src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c | 18 -- src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h | 2 +- .../ffmpeg/libavcodec/vvc/vvcdsp_template.c | 2 +- src/ExtLib/ffmpeg/libavcodec/x86/fpel.asm | 2 - src/ExtLib/ffmpeg/libavcodec/x86/fpel.h | 8 - src/ExtLib/ffmpeg/libavcodec/x86/h264_qpel.c | 32 ++-- .../ffmpeg/libavcodec/x86/h26x/h2656dsp.h | 2 +- .../ffmpeg/libavcodec/x86/hevcdsp_init.c | 78 ++++----- .../ffmpeg/libavcodec/x86/hpeldsp_init.c | 15 +- .../ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c | 24 +-- src/ExtLib/ffmpeg/libavfilter/audio.c | 22 +-- src/ExtLib/ffmpeg/libavfilter/avfilter.c | 58 +++---- src/ExtLib/ffmpeg/libavfilter/avfilter.h | 29 ---- .../ffmpeg/libavfilter/avfilter_internal.h | 156 ++++++++++++++++++ src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c | 132 ++++++++------- src/ExtLib/ffmpeg/libavfilter/buffersink.c | 2 +- src/ExtLib/ffmpeg/libavfilter/graphparser.c | 3 +- src/ExtLib/ffmpeg/libavfilter/internal.h | 64 ++----- src/ExtLib/ffmpeg/libavfilter/pthread.c | 26 +-- src/ExtLib/ffmpeg/libavfilter/video.c | 22 +-- src/ExtLib/ffmpeg/libavutil/channel_layout.c | 68 +++++--- src/ExtLib/ffmpeg/libavutil/channel_layout.h | 6 +- src/ExtLib/ffmpeg/libavutil/common.h | 20 +-- src/ExtLib/ffmpeg/libavutil/intreadwrite.h | 4 +- src/ExtLib/ffmpeg/libavutil/pixfmt.h | 7 + src/ExtLib/ffmpeg/libavutil/tx.c | 8 +- src/ExtLib/ffmpeg/libavutil/version.c | 17 -- src/ExtLib/ffmpeg/libavutil/version.h | 2 +- 57 files changed, 609 insertions(+), 488 deletions(-) create mode 100644 src/ExtLib/ffmpeg/libavfilter/avfilter_internal.h diff --git a/docs/Changelog.Rus.txt b/docs/Changelog.Rus.txt index d935cbb808..75857ac0cc 100644 --- a/docs/Changelog.Rus.txt +++ b/docs/Changelog.Rus.txt @@ -31,7 +31,7 @@ MPCVideoDec Обновлены библиотеки: dav1d git-1.4.0-1-g97cc6ce; - ffmpeg git-n6.2-dev-1117-g7ed1e806e7; + ffmpeg git-n6.2-dev-1203-gcb9f1f59a1; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/docs/Changelog.txt b/docs/Changelog.txt index 9634292900..8847d7db67 100644 --- a/docs/Changelog.txt +++ b/docs/Changelog.txt @@ -31,7 +31,7 @@ Updated Korean translation (by Hackjjang). Updated libraries: dav1d git-1.4.0-1-g97cc6ce; - ffmpeg git-n6.2-dev-1117-g7ed1e806e7; + ffmpeg git-n6.2-dev-1203-gcb9f1f59a1; Little-CMS git-lcms2.16-26-gc2a5401; MediaInfo git-v24.01-g51dbd896; nanosvg git-93ce879; diff --git a/src/ExtLib/ffmpeg/libavcodec/aacsbr.c b/src/ExtLib/ffmpeg/libavcodec/aacsbr.c index 7b07590f39..637189a256 100644 --- a/src/ExtLib/ffmpeg/libavcodec/aacsbr.c +++ b/src/ExtLib/ffmpeg/libavcodec/aacsbr.c @@ -31,10 +31,10 @@ #include "sbr.h" #include "aacsbr.h" #include "aacsbrdata.h" -#include "internal.h" #include "aacps.h" #include "sbrdsp.h" #include "libavutil/internal.h" +#include "libavutil/intfloat.h" #include "libavutil/libm.h" #include "libavutil/avassert.h" #include "libavutil/mem_internal.h" @@ -47,6 +47,25 @@ #include "mips/aacsbr_mips.h" #endif /* ARCH_MIPS */ +/** + * 2^(x) for integer x + * @return correctly rounded float + */ +static av_always_inline float exp2fi(int x) { + /* Normal range */ + if (-126 <= x && x <= 128) + return av_int2float((x+127) << 23); + /* Too large */ + else if (x > 128) + return INFINITY; + /* Subnormal numbers */ + else if (x > -150) + return av_int2float(1 << (x+149)); + /* Negligibly small */ + else + return 0; +} + static void aacsbr_func_ptr_init(AACSBRContext *c); static void make_bands(int16_t* bands, int start, int stop, int num_bands) @@ -79,13 +98,13 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) for (k = 0; k < sbr->n[sbr->data[0].bs_freq_res[e]]; k++) { float temp1, temp2, fac; if (sbr->data[0].bs_amp_res) { - temp1 = ff_exp2fi(sbr->data[0].env_facs_q[e][k] + 7); - temp2 = ff_exp2fi(pan_offset - sbr->data[1].env_facs_q[e][k]); + temp1 = exp2fi(sbr->data[0].env_facs_q[e][k] + 7); + temp2 = exp2fi(pan_offset - sbr->data[1].env_facs_q[e][k]); } else { - temp1 = ff_exp2fi((sbr->data[0].env_facs_q[e][k]>>1) + 7) * + temp1 = exp2fi((sbr->data[0].env_facs_q[e][k]>>1) + 7) * exp2_tab[sbr->data[0].env_facs_q[e][k] & 1]; - temp2 = ff_exp2fi((pan_offset - sbr->data[1].env_facs_q[e][k])>>1) * + temp2 = exp2fi((pan_offset - sbr->data[1].env_facs_q[e][k])>>1) * exp2_tab[(pan_offset - sbr->data[1].env_facs_q[e][k]) & 1]; } if (temp1 > 1E20) { @@ -99,8 +118,8 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) } for (e = 1; e <= sbr->data[0].bs_num_noise; e++) { for (k = 0; k < sbr->n_q; k++) { - float temp1 = ff_exp2fi(NOISE_FLOOR_OFFSET - sbr->data[0].noise_facs_q[e][k] + 1); - float temp2 = ff_exp2fi(12 - sbr->data[1].noise_facs_q[e][k]); + float temp1 = exp2fi(NOISE_FLOOR_OFFSET - sbr->data[0].noise_facs_q[e][k] + 1); + float temp2 = exp2fi(12 - sbr->data[1].noise_facs_q[e][k]); float fac; av_assert0(temp1 <= 1E20); fac = temp1 / (1.0f + temp2); @@ -113,9 +132,9 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) for (e = 1; e <= sbr->data[ch].bs_num_env; e++) for (k = 0; k < sbr->n[sbr->data[ch].bs_freq_res[e]]; k++){ if (sbr->data[ch].bs_amp_res) - sbr->data[ch].env_facs[e][k] = ff_exp2fi(sbr->data[ch].env_facs_q[e][k] + 6); + sbr->data[ch].env_facs[e][k] = exp2fi(sbr->data[ch].env_facs_q[e][k] + 6); else - sbr->data[ch].env_facs[e][k] = ff_exp2fi((sbr->data[ch].env_facs_q[e][k]>>1) + 6) + sbr->data[ch].env_facs[e][k] = exp2fi((sbr->data[ch].env_facs_q[e][k]>>1) + 6) * exp2_tab[sbr->data[ch].env_facs_q[e][k] & 1]; if (sbr->data[ch].env_facs[e][k] > 1E20) { av_log(NULL, AV_LOG_ERROR, "envelope scalefactor overflow in dequant\n"); @@ -126,7 +145,7 @@ static void sbr_dequant(SpectralBandReplication *sbr, int id_aac) for (e = 1; e <= sbr->data[ch].bs_num_noise; e++) for (k = 0; k < sbr->n_q; k++) sbr->data[ch].noise_facs[e][k] = - ff_exp2fi(NOISE_FLOOR_OFFSET - sbr->data[ch].noise_facs_q[e][k]); + exp2fi(NOISE_FLOOR_OFFSET - sbr->data[ch].noise_facs_q[e][k]); } } } diff --git a/src/ExtLib/ffmpeg/libavcodec/aacsbr_template.c b/src/ExtLib/ffmpeg/libavcodec/aacsbr_template.c index 88d69e00c3..ae16578bf3 100644 --- a/src/ExtLib/ffmpeg/libavcodec/aacsbr_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/aacsbr_template.c @@ -927,7 +927,7 @@ static void read_sbr_extension(AACContext *ac, SpectralBandReplication *sbr, switch (bs_extension_id) { case EXTENSION_ID_PS: if (!ac->oc[1].m4ac.ps) { - av_log(ac->avctx, AV_LOG_ERROR, "Parametric Stereo signaled to be not-present but was found in the bitstream, force stereo output.\n"); + av_log(ac->avctx, AV_LOG_ERROR, "Parametric Stereo signaled to be not-present but was found in the bitstream.\n"); // ==> Start patch MPC *num_bits_left -= ff_ps_read_data(ac->avctx, gb, &sbr->ps.common, *num_bits_left); ac->avctx->profile = AV_PROFILE_AAC_HE_V2; diff --git a/src/ExtLib/ffmpeg/libavcodec/av1dec.c b/src/ExtLib/ffmpeg/libavcodec/av1dec.c index 7ffa7821e9..7debc4deda 100644 --- a/src/ExtLib/ffmpeg/libavcodec/av1dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/av1dec.c @@ -743,7 +743,7 @@ static int set_context_with_sequence(AVCodecContext *avctx, avctx->color_range = seq->color_config.color_range ? AVCOL_RANGE_JPEG : AVCOL_RANGE_MPEG; avctx->color_primaries = seq->color_config.color_primaries; - avctx->colorspace = seq->color_config.color_primaries; + avctx->colorspace = seq->color_config.matrix_coefficients; avctx->color_trc = seq->color_config.transfer_characteristics; switch (seq->color_config.chroma_sample_position) { diff --git a/src/ExtLib/ffmpeg/libavcodec/avcodec.h b/src/ExtLib/ffmpeg/libavcodec/avcodec.h index 0018ccbb0c..43859251cc 100644 --- a/src/ExtLib/ffmpeg/libavcodec/avcodec.h +++ b/src/ExtLib/ffmpeg/libavcodec/avcodec.h @@ -187,12 +187,16 @@ struct AVCodecParameters; * @{ */ +#if FF_API_BUFFER_MIN_SIZE /** * @ingroup lavc_encoding * minimum encoding buffer size * Used to avoid some checks during header writing. + * @deprecated Unused: avcodec_receive_packet() does not work + * with preallocated packet buffers. */ #define AV_INPUT_BUFFER_MIN_SIZE 16384 +#endif /** * @ingroup lavc_encoding diff --git a/src/ExtLib/ffmpeg/libavcodec/dxva2.c b/src/ExtLib/ffmpeg/libavcodec/dxva2.c index c1f8d7ccc8..475177027f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/dxva2.c +++ b/src/ExtLib/ffmpeg/libavcodec/dxva2.c @@ -719,7 +719,7 @@ int ff_dxva2_common_frame_params(AVCodecContext *avctx, /* frames_ctx->sw_format = avctx->sw_pix_fmt == AV_PIX_FMT_YUV420P10 ? AV_PIX_FMT_P010 : AV_PIX_FMT_NV12; - */ + */ frames_ctx->sw_format = map_sw_pix_format(avctx->sw_pix_fmt, frames_ctx->format); // ==> End patch MPC diff --git a/src/ExtLib/ffmpeg/libavcodec/encode.h b/src/ExtLib/ffmpeg/libavcodec/encode.h index e019cd7702..85331e04b7 100644 --- a/src/ExtLib/ffmpeg/libavcodec/encode.h +++ b/src/ExtLib/ffmpeg/libavcodec/encode.h @@ -26,6 +26,12 @@ #include "avcodec.h" #include "packet.h" +/** + * Used by some encoders as upper bound for the length of headers. + * TODO: Use proper codec-specific upper bounds. + */ +#define FF_INPUT_BUFFER_MIN_SIZE 16384 + /** * Called by encoders to get the next frame for encoding. * diff --git a/src/ExtLib/ffmpeg/libavcodec/flashsv2enc.c b/src/ExtLib/ffmpeg/libavcodec/flashsv2enc.c index 75b48eb1fd..6dcb9102a8 100644 --- a/src/ExtLib/ffmpeg/libavcodec/flashsv2enc.c +++ b/src/ExtLib/ffmpeg/libavcodec/flashsv2enc.c @@ -857,7 +857,7 @@ static int flashsv2_encode_frame(AVCodecContext *avctx, AVPacket *pkt, int res; int keyframe = 0; - if ((res = ff_alloc_packet(avctx, pkt, s->frame_size + AV_INPUT_BUFFER_MIN_SIZE)) < 0) + if ((res = ff_alloc_packet(avctx, pkt, s->frame_size + FF_INPUT_BUFFER_MIN_SIZE)) < 0) return res; /* First frame needs to be a keyframe */ diff --git a/src/ExtLib/ffmpeg/libavcodec/h2645_parse.c b/src/ExtLib/ffmpeg/libavcodec/h2645_parse.c index 28d8225003..d89c9ce8e5 100644 --- a/src/ExtLib/ffmpeg/libavcodec/h2645_parse.c +++ b/src/ExtLib/ffmpeg/libavcodec/h2645_parse.c @@ -40,8 +40,9 @@ int ff_h2645_extract_rbsp(const uint8_t *src, int length, nal->skipped_bytes = 0; #define STARTCODE_TEST \ - if (i + 2 < length && src[i + 1] == 0 && src[i + 2] <= 3) { \ - if (src[i + 2] != 3 && src[i + 2] != 0) { \ + if (i + 2 < length && src[i + 1] == 0 && \ + (src[i + 2] == 3 || src[i + 2] == 1)) { \ + if (src[i + 2] == 1) { \ /* startcode, so we must be past the end */ \ length = i; \ } \ diff --git a/src/ExtLib/ffmpeg/libavcodec/h264qpel_template.c b/src/ExtLib/ffmpeg/libavcodec/h264qpel_template.c index 27c5b8f17f..61fa55c689 100644 --- a/src/ExtLib/ffmpeg/libavcodec/h264qpel_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/h264qpel_template.c @@ -26,7 +26,7 @@ #include "hpel_template.c" #include "pel_template.c" -static inline void FUNC(copy_block2)(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride, int h) +static inline void FUNC(copy_block2)(uint8_t *dst, const uint8_t *av_restrict src, int dstStride, int srcStride, int h) { int i; for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ src -= 2*srcStride;\ @@ -150,12 +153,13 @@ static av_unused void FUNC(OPNAME ## h264_qpel2_hv_lowpass)(uint8_t *_dst, pixel tmp++;\ }\ }\ -static void FUNC(OPNAME ## h264_qpel4_h_lowpass)(uint8_t *_dst, const uint8_t *_src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel4_h_lowpass)(uint8_t *_dst, const uint8_t *av_restrict _src, int dstStride, int srcStride)\ +{\ const int h=4;\ INIT_CLIP\ int i;\ pixel *dst = (pixel*)_dst;\ - const pixel *src = (const pixel*)_src;\ + const pixel *av_restrict src = (const pixel*)_src;\ dstStride >>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ src -= 2*srcStride;\ @@ -238,12 +244,13 @@ static void FUNC(OPNAME ## h264_qpel4_hv_lowpass)(uint8_t *_dst, pixeltmp *tmp, }\ }\ \ -static void FUNC(OPNAME ## h264_qpel8_h_lowpass)(uint8_t *_dst, const uint8_t *_src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel8_h_lowpass)(uint8_t *_dst, const uint8_t *av_restrict _src, int dstStride, int srcStride)\ +{\ const int h=8;\ INIT_CLIP\ int i;\ pixel *dst = (pixel*)_dst;\ - const pixel *src = (const pixel*)_src;\ + const pixel *av_restrict src = (const pixel*)_src;\ dstStride >>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ for(i=0; i>= sizeof(pixel)-1;\ srcStride >>= sizeof(pixel)-1;\ src -= 2*srcStride;\ @@ -350,7 +359,8 @@ static void FUNC(OPNAME ## h264_qpel8_hv_lowpass)(uint8_t *_dst, pixeltmp *tmp, }\ }\ \ -static void FUNC(OPNAME ## h264_qpel16_v_lowpass)(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel16_v_lowpass)(uint8_t *dst, const uint8_t *av_restrict src, int dstStride, int srcStride)\ +{\ FUNC(OPNAME ## h264_qpel8_v_lowpass)(dst , src , dstStride, srcStride);\ FUNC(OPNAME ## h264_qpel8_v_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ src += 8*srcStride;\ @@ -359,7 +369,8 @@ static void FUNC(OPNAME ## h264_qpel16_v_lowpass)(uint8_t *dst, const uint8_t *s FUNC(OPNAME ## h264_qpel8_v_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ }\ \ -static void FUNC(OPNAME ## h264_qpel16_h_lowpass)(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel16_h_lowpass)(uint8_t *dst, const uint8_t *av_restrict src, int dstStride, int srcStride)\ +{\ FUNC(OPNAME ## h264_qpel8_h_lowpass)(dst , src , dstStride, srcStride);\ FUNC(OPNAME ## h264_qpel8_h_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ src += 8*srcStride;\ @@ -368,7 +379,7 @@ static void FUNC(OPNAME ## h264_qpel16_h_lowpass)(uint8_t *dst, const uint8_t *s FUNC(OPNAME ## h264_qpel8_h_lowpass)(dst+8*sizeof(pixel), src+8*sizeof(pixel), dstStride, srcStride);\ }\ \ -static void FUNC(OPNAME ## h264_qpel16_hv_lowpass)(uint8_t *dst, pixeltmp *tmp, const uint8_t *src, int dstStride, int tmpStride, int srcStride){\ +static void FUNC(OPNAME ## h264_qpel16_hv_lowpass)(uint8_t *dst, pixeltmp *tmp, const uint8_t *av_restrict src, int dstStride, int tmpStride, int srcStride){\ FUNC(OPNAME ## h264_qpel8_hv_lowpass)(dst , tmp , src , dstStride, tmpStride, srcStride);\ FUNC(OPNAME ## h264_qpel8_hv_lowpass)(dst+8*sizeof(pixel), tmp+8, src+8*sizeof(pixel), dstStride, tmpStride, srcStride);\ src += 8*srcStride;\ @@ -378,31 +389,31 @@ static void FUNC(OPNAME ## h264_qpel16_hv_lowpass)(uint8_t *dst, pixeltmp *tmp, }\ #define H264_MC(OPNAME, SIZE) \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc00)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc00)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ FUNCC(OPNAME ## pixels ## SIZE)(dst, src, stride, SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc10)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc10)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t half[SIZE*SIZE*sizeof(pixel)];\ FUNC(put_h264_qpel ## SIZE ## _h_lowpass)(half, src, SIZE*sizeof(pixel), stride);\ FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, src, half, stride, stride, SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc20)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc20)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ FUNC(OPNAME ## h264_qpel ## SIZE ## _h_lowpass)(dst, src, stride, stride);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc30)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc30)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t half[SIZE*SIZE*sizeof(pixel)];\ FUNC(put_h264_qpel ## SIZE ## _h_lowpass)(half, src, SIZE*sizeof(pixel), stride);\ FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, src+sizeof(pixel), half, stride, stride, SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc01)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc01)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -412,7 +423,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc01)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, full_mid, half, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc02)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc02)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -420,7 +431,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc02)(uint8_t *dst, const uint FUNC(OPNAME ## h264_qpel ## SIZE ## _v_lowpass)(dst, full_mid, stride, SIZE*sizeof(pixel));\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc03)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc03)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -430,7 +441,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc03)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, full_mid+SIZE*sizeof(pixel), half, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc11)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc11)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -442,7 +453,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc11)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, halfH, halfV, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc31)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc31)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -454,7 +465,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc31)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, halfH, halfV, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc13)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc13)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -466,7 +477,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc13)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, halfH, halfV, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc33)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc33)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -478,13 +489,13 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc33)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, halfH, halfV, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc22)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc22)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ pixeltmp tmp[SIZE*(SIZE+5)*sizeof(pixel)];\ FUNC(OPNAME ## h264_qpel ## SIZE ## _hv_lowpass)(dst, tmp, src, stride, SIZE*sizeof(pixel), stride);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc21)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc21)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ pixeltmp tmp[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t halfH[SIZE*SIZE*sizeof(pixel)];\ @@ -494,7 +505,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc21)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, halfH, halfHV, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc23)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc23)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ pixeltmp tmp[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t halfH[SIZE*SIZE*sizeof(pixel)];\ @@ -504,7 +515,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc23)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, halfH, halfHV, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc12)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc12)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ @@ -517,7 +528,7 @@ static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc12)(uint8_t *dst, const uint FUNC(OPNAME ## pixels ## SIZE ## _l2)(dst, halfV, halfHV, stride, SIZE*sizeof(pixel), SIZE*sizeof(pixel), SIZE);\ }\ \ -static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc32)(uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void FUNCC(OPNAME ## h264_qpel ## SIZE ## _mc32)(uint8_t *dst, const uint8_t *av_restrict src, ptrdiff_t stride)\ {\ uint8_t full[SIZE*(SIZE+5)*sizeof(pixel)];\ uint8_t * const full_mid= full + SIZE*2*sizeof(pixel);\ diff --git a/src/ExtLib/ffmpeg/libavcodec/hapdec.c b/src/ExtLib/ffmpeg/libavcodec/hapdec.c index 3a848e9f67..6066cb814c 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hapdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/hapdec.c @@ -323,6 +323,8 @@ static int hap_decode(AVCodecContext *avctx, AVFrame *frame, ctx->dec[t].frame_data.out = frame->data[0]; ctx->dec[t].stride = frame->linesize[0]; + ctx->dec[t].width = avctx->coded_width; + ctx->dec[t].height = avctx->coded_height; ff_texturedsp_exec_decompress_threads(avctx, &ctx->dec[t]); } diff --git a/src/ExtLib/ffmpeg/libavcodec/internal.h b/src/ExtLib/ffmpeg/libavcodec/internal.h index eb9e0d707c..04f7cebdcb 100644 --- a/src/ExtLib/ffmpeg/libavcodec/internal.h +++ b/src/ExtLib/ffmpeg/libavcodec/internal.h @@ -26,10 +26,7 @@ #include -#include "libavutil/buffer.h" #include "libavutil/channel_layout.h" -#include "libavutil/mathematics.h" -#include "libavutil/pixfmt.h" #include "avcodec.h" #include "config.h" @@ -157,25 +154,6 @@ int ff_match_2uint16(const uint16_t (*tab)[2], int size, int a, int b); unsigned int ff_toupper4(unsigned int x); -/** - * 2^(x) for integer x - * @return correctly rounded float - */ -static av_always_inline float ff_exp2fi(int x) { - /* Normal range */ - if (-126 <= x && x <= 128) - return av_int2float((x+127) << 23); - /* Too large */ - else if (x > 128) - return INFINITY; - /* Subnormal numbers */ - else if (x > -150) - return av_int2float(1 << (x+149)); - /* Negligibly small */ - else - return 0; -} - int avpriv_h264_has_num_reorder_frames(AVCodecContext *avctx); int avpriv_codec_get_cap_skip_frame_fill_param(const AVCodec *codec); diff --git a/src/ExtLib/ffmpeg/libavcodec/jpeg2000.c b/src/ExtLib/ffmpeg/libavcodec/jpeg2000.c index 0aa984bc53..d6ffb02319 100644 --- a/src/ExtLib/ffmpeg/libavcodec/jpeg2000.c +++ b/src/ExtLib/ffmpeg/libavcodec/jpeg2000.c @@ -32,7 +32,6 @@ #include "libavutil/mem.h" #include "libavutil/thread.h" #include "avcodec.h" -#include "internal.h" #include "jpeg2000.h" #define SHL(a, n) ((n) >= 0 ? (a) << (n) : (a) >> -(n)) @@ -201,6 +200,17 @@ void ff_jpeg2000_set_significance(Jpeg2000T1Context *t1, int x, int y, // static const uint8_t lut_gain[2][4] = { { 0, 0, 0, 0 }, { 0, 1, 1, 2 } }; (unused) +/** + * 2^(x) for integer x in the range -126..128. + * @return correctly rounded float + */ +static av_always_inline float exp2fi(int x) +{ + av_assert2(-126 <= x && x <= 128); + /* Normal range */ + return av_int2float((x+127) << 23); +} + static void init_band_stepsize(AVCodecContext *avctx, Jpeg2000Band *band, Jpeg2000CodingStyle *codsty, @@ -230,7 +240,7 @@ static void init_band_stepsize(AVCodecContext *avctx, * R_b = R_I + log2 (gain_b ) * see ISO/IEC 15444-1:2002 E.1.1 eqn. E-3 and E-4 */ gain = cbps; - band->f_stepsize = ff_exp2fi(gain - qntsty->expn[gbandno]); + band->f_stepsize = exp2fi(gain - qntsty->expn[gbandno]); band->f_stepsize *= qntsty->mant[gbandno] / 2048.0 + 1.0; break; default: @@ -391,7 +401,7 @@ static int init_band(AVCodecContext *avctx, Jpeg2000CodingStyle *codsty, Jpeg2000QuantStyle *qntsty, int bandno, int gbandno, int reslevelno, - int cbps, int dx, int dy) + const int cbps, int dx, int dy) { Jpeg2000Band *band = reslevel->band + bandno; uint8_t log2_band_prec_width, log2_band_prec_height; @@ -466,7 +476,7 @@ static int init_band(AVCodecContext *avctx, int ff_jpeg2000_init_component(Jpeg2000Component *comp, Jpeg2000CodingStyle *codsty, Jpeg2000QuantStyle *qntsty, - int cbps, int dx, int dy, + const int cbps, int dx, int dy, AVCodecContext *avctx) { int reslevelno, bandno, gbandno = 0, ret, i, j; diff --git a/src/ExtLib/ffmpeg/libavcodec/jpeg2000dec.c b/src/ExtLib/ffmpeg/libavcodec/jpeg2000dec.c index 691cfbd891..1afc6b1e2d 100644 --- a/src/ExtLib/ffmpeg/libavcodec/jpeg2000dec.c +++ b/src/ExtLib/ffmpeg/libavcodec/jpeg2000dec.c @@ -489,7 +489,7 @@ static int get_cox(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c) /* get coding parameters for a particular tile or whole image*/ static int get_cod(Jpeg2000DecoderContext *s, Jpeg2000CodingStyle *c, - uint8_t *properties) + const uint8_t *properties) { Jpeg2000CodingStyle tmp; int compno, ret; @@ -639,7 +639,7 @@ static int get_qcx(Jpeg2000DecoderContext *s, int n, Jpeg2000QuantStyle *q) /* Get quantization parameters for a particular tile or a whole image. */ static int get_qcd(Jpeg2000DecoderContext *s, int n, Jpeg2000QuantStyle *q, - uint8_t *properties) + const uint8_t *properties) { Jpeg2000QuantStyle tmp; int compno, ret; @@ -886,8 +886,8 @@ static int get_ppm(Jpeg2000DecoderContext *s, int n) return AVERROR(ENOMEM); s->has_ppm = 1; memset(&s->packed_headers_stream, 0, sizeof(s->packed_headers_stream)); - bytestream_get_buffer(&s->g.buffer, s->packed_headers + s->packed_headers_size, - n - 3); + bytestream2_get_bufferu(&s->g, s->packed_headers + s->packed_headers_size, + n - 3); s->packed_headers_size += n - 3; return 0; @@ -921,10 +921,8 @@ static int get_ppt(Jpeg2000DecoderContext *s, int n) } else return AVERROR(ENOMEM); memset(&tile->packed_headers_stream, 0, sizeof(tile->packed_headers_stream)); - memcpy(tile->packed_headers + tile->packed_headers_size, - s->g.buffer, n - 3); + bytestream2_get_bufferu(&s->g, tile->packed_headers + tile->packed_headers_size, n - 3); tile->packed_headers_size += n - 3; - bytestream2_skip(&s->g, n - 3); return 0; } @@ -1004,7 +1002,7 @@ static int getlblockinc(Jpeg2000DecoderContext *s) return res; } -static inline void select_header(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, +static inline void select_header(Jpeg2000DecoderContext *s, const Jpeg2000Tile *tile, int *tp_index) { s->g = tile->tile_part[*tp_index].header_tpg; @@ -1015,8 +1013,8 @@ static inline void select_header(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, } } -static inline void select_stream(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, - int *tp_index, Jpeg2000CodingStyle *codsty) +static inline void select_stream(Jpeg2000DecoderContext *s, const Jpeg2000Tile *tile, + int *tp_index, const Jpeg2000CodingStyle *codsty) { s->g = tile->tile_part[*tp_index].tpg; if (bytestream2_get_bytes_left(&s->g) == 0 && s->bit_index == 8) { @@ -1033,9 +1031,9 @@ static inline void select_stream(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, } static int jpeg2000_decode_packet(Jpeg2000DecoderContext *s, Jpeg2000Tile *tile, int *tp_index, - Jpeg2000CodingStyle *codsty, + const Jpeg2000CodingStyle *codsty, Jpeg2000ResLevel *rlevel, int precno, - int layno, uint8_t *expn, int numgbits) + int layno, const uint8_t *expn, int numgbits) { int bandno, cblkno, ret, nb_code_blocks; int cwsno; diff --git a/src/ExtLib/ffmpeg/libavcodec/rv34dsp.c b/src/ExtLib/ffmpeg/libavcodec/rv34dsp.c index c5e53cff14..203d13c89b 100644 --- a/src/ExtLib/ffmpeg/libavcodec/rv34dsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/rv34dsp.c @@ -138,6 +138,8 @@ av_cold void ff_rv34dsp_init(RV34DSPContext *c) #if ARCH_ARM ff_rv34dsp_init_arm(c); +#elif ARCH_RISCV + ff_rv34dsp_init_riscv(c); #elif ARCH_X86 ff_rv34dsp_init_x86(c); #endif diff --git a/src/ExtLib/ffmpeg/libavcodec/rv34dsp.h b/src/ExtLib/ffmpeg/libavcodec/rv34dsp.h index 64bfbabfe4..175edf15e2 100644 --- a/src/ExtLib/ffmpeg/libavcodec/rv34dsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/rv34dsp.h @@ -79,6 +79,7 @@ void ff_rv34dsp_init(RV34DSPContext *c); void ff_rv40dsp_init(RV34DSPContext *c); void ff_rv34dsp_init_arm(RV34DSPContext *c); +void ff_rv34dsp_init_riscv(RV34DSPContext *c); void ff_rv34dsp_init_x86(RV34DSPContext *c); void ff_rv40dsp_init_aarch64(RV34DSPContext *c); diff --git a/src/ExtLib/ffmpeg/libavcodec/texturedsp.h b/src/ExtLib/ffmpeg/libavcodec/texturedsp.h index b7218823fc..19cfc744e6 100644 --- a/src/ExtLib/ffmpeg/libavcodec/texturedsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/texturedsp.h @@ -72,6 +72,7 @@ typedef struct TextureDSPThreadContext { uint8_t *out; // Output frame data } frame_data; ptrdiff_t stride; // Frame linesize + int width, height; // Frame width / height union { const uint8_t *in; // Compressed texture for decompression uint8_t *out; // Compressed texture of compression diff --git a/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c b/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c index 9589cc4187..b9caf494cc 100644 --- a/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/texturedsp_template.c @@ -27,8 +27,8 @@ static int exec_func(AVCodecContext *avctx, void *arg, { const TextureDSPThreadContext *ctx = arg; uint8_t *d = ctx->tex_data.out; - int w_block = avctx->coded_width / TEXTURE_BLOCK_W; - int h_block = avctx->coded_height / TEXTURE_BLOCK_H; + int w_block = ctx->width / TEXTURE_BLOCK_W; + int h_block = ctx->height / TEXTURE_BLOCK_H; int x, y; int start_slice, end_slice; int base_blocks_per_slice = h_block / ctx->slice_count; diff --git a/src/ExtLib/ffmpeg/libavcodec/version.h b/src/ExtLib/ffmpeg/libavcodec/version.h index ecdbc51c74..19f3f4a272 100644 --- a/src/ExtLib/ffmpeg/libavcodec/version.h +++ b/src/ExtLib/ffmpeg/libavcodec/version.h @@ -29,8 +29,8 @@ #include "version_major.h" -#define LIBAVCODEC_VERSION_MINOR 39 -#define LIBAVCODEC_VERSION_MICRO 101 +#define LIBAVCODEC_VERSION_MINOR 40 +#define LIBAVCODEC_VERSION_MICRO 100 #define LIBAVCODEC_VERSION_INT AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \ LIBAVCODEC_VERSION_MINOR, \ diff --git a/src/ExtLib/ffmpeg/libavcodec/version_major.h b/src/ExtLib/ffmpeg/libavcodec/version_major.h index 45209c0a4f..161442df95 100644 --- a/src/ExtLib/ffmpeg/libavcodec/version_major.h +++ b/src/ExtLib/ffmpeg/libavcodec/version_major.h @@ -53,6 +53,7 @@ #define FF_API_AVFFT (LIBAVCODEC_VERSION_MAJOR < 62) #define FF_API_FF_PROFILE_LEVEL (LIBAVCODEC_VERSION_MAJOR < 62) #define FF_API_AVCODEC_CLOSE (LIBAVCODEC_VERSION_MAJOR < 62) +#define FF_API_BUFFER_MIN_SIZE (LIBAVCODEC_VERSION_MAJOR < 62) // reminder to remove CrystalHD decoders on next major bump #define FF_CODEC_CRYSTAL_HD (LIBAVCODEC_VERSION_MAJOR < 61) diff --git a/src/ExtLib/ffmpeg/libavcodec/vp8dsp.c b/src/ExtLib/ffmpeg/libavcodec/vp8dsp.c index 7a85e9f4ca..72d4ea3793 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vp8dsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/vp8dsp.c @@ -742,6 +742,8 @@ av_cold void ff_vp8dsp_init(VP8DSPContext *dsp) ff_vp8dsp_init_aarch64(dsp); #elif ARCH_ARM ff_vp8dsp_init_arm(dsp); +#elif ARCH_RISCV + ff_vp8dsp_init_riscv(dsp); #elif ARCH_X86 ff_vp8dsp_init_x86(dsp); #elif ARCH_MIPS diff --git a/src/ExtLib/ffmpeg/libavcodec/vp8dsp.h b/src/ExtLib/ffmpeg/libavcodec/vp8dsp.h index 16b5e9c35b..30dc2c6cc1 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vp8dsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/vp8dsp.h @@ -92,6 +92,7 @@ void ff_vp78dsp_init_x86(VP8DSPContext *c); void ff_vp8dsp_init(VP8DSPContext *c); void ff_vp8dsp_init_aarch64(VP8DSPContext *c); void ff_vp8dsp_init_arm(VP8DSPContext *c); +void ff_vp8dsp_init_riscv(VP8DSPContext *c); void ff_vp8dsp_init_x86(VP8DSPContext *c); void ff_vp8dsp_init_mips(VP8DSPContext *c); void ff_vp8dsp_init_loongarch(VP8DSPContext *c); diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c index df77e443f6..5fa711c9e0 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter.c @@ -1328,5 +1328,5 @@ void ff_vvc_lmcs_filter(const VVCLocalContext *lc, const int x, const int y) const int height = FFMIN(fc->ps.pps->height - y, ctb_size); uint8_t *data = fc->frame->data[LUMA] + y * fc->frame->linesize[LUMA] + (x << fc->ps.sps->pixel_shift); if (sc->sh.r->sh_lmcs_used_flag) - fc->vvcdsp.lmcs.filter(data, fc->frame->linesize[LUMA], width, height, fc->ps.lmcs.inv_lut); + fc->vvcdsp.lmcs.filter(data, fc->frame->linesize[LUMA], width, height, &fc->ps.lmcs.inv_lut); } diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter_template.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter_template.c index b7eaef5125..9b3a0e46f7 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_filter_template.c @@ -22,9 +22,9 @@ #include "libavcodec/h26x/h2656_sao_template.c" -static void FUNC(lmcs_filter_luma)(uint8_t *_dst, ptrdiff_t dst_stride, const int width, const int height, const uint8_t *_lut) +static void FUNC(lmcs_filter_luma)(uint8_t *_dst, ptrdiff_t dst_stride, const int width, const int height, const void *_lut) { - const pixel *lut = (const pixel *)_lut; + const pixel *lut = _lut; pixel *dst = (pixel*)_dst; dst_stride /= sizeof(pixel); diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c index e05f3db93e..6c9c8a7165 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_inter.c @@ -571,7 +571,7 @@ static void pred_regular_luma(VVCLocalContext *lc, const int hf_idx, const int v const int intra_weight = ciip_derive_intra_weight(lc, x0, y0, sbw, sbh); fc->vvcdsp.intra.intra_pred(lc, x0, y0, sbw, sbh, 0); if (sc->sh.r->sh_lmcs_used_flag) - fc->vvcdsp.lmcs.filter(inter, inter_stride, sbw, sbh, fc->ps.lmcs.fwd_lut); + fc->vvcdsp.lmcs.filter(inter, inter_stride, sbw, sbh, &fc->ps.lmcs.fwd_lut); fc->vvcdsp.inter.put_ciip(dst, dst_stride, sbw, sbh, inter, inter_stride, intra_weight); } @@ -887,7 +887,7 @@ static void predict_inter(VVCLocalContext *lc) if (lc->sc->sh.r->sh_lmcs_used_flag && !cu->ciip_flag) { uint8_t* dst0 = POS(0, cu->x0, cu->y0); - fc->vvcdsp.lmcs.filter(dst0, fc->frame->linesize[LUMA], cu->cb_width, cu->cb_height, fc->ps.lmcs.fwd_lut); + fc->vvcdsp.lmcs.filter(dst0, fc->frame->linesize[LUMA], cu->cb_width, cu->cb_height, &fc->ps.lmcs.fwd_lut); } } diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_itx_1d.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_itx_1d.c index 01a50aad25..cb076f680f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_itx_1d.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_itx_1d.c @@ -639,7 +639,7 @@ void ff_vvc_inv_dct2_64(int *coeffs, const ptrdiff_t stride, const size_t nz) coeffs[61 * stride] = E[2] - O[2]; coeffs[62 * stride] = E[1] - O[1]; coeffs[63 * stride] = E[0] - O[0]; -}; +} static void matrix_mul(int *coeffs, const ptrdiff_t stride, const int8_t* matrix, const int size, const size_t nz) { diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c index 53a86321d6..e6e46d2039 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.c @@ -642,9 +642,9 @@ static int lmcs_derive_lut(VVCLMCS *lmcs, const H266RawAPS *rlmcs, const H266Raw const uint16_t fwd_sample = lmcs_derive_lut_sample(sample, lmcs->pivot, input_pivot, scale_coeff, idx_y, max); if (bit_depth > 8) - ((uint16_t *)lmcs->fwd_lut)[sample] = fwd_sample; + lmcs->fwd_lut.u16[sample] = fwd_sample; else - lmcs->fwd_lut[sample] = fwd_sample; + lmcs->fwd_lut.u8 [sample] = fwd_sample; } @@ -652,16 +652,16 @@ static int lmcs_derive_lut(VVCLMCS *lmcs, const H266RawAPS *rlmcs, const H266Raw i = lmcs->min_bin_idx; for (uint16_t sample = 0; sample < max; sample++) { uint16_t inv_sample; - while (sample >= lmcs->pivot[i + 1] && i <= lmcs->max_bin_idx) + while (i <= lmcs->max_bin_idx && sample >= lmcs->pivot[i + 1]) i++; inv_sample = lmcs_derive_lut_sample(sample, input_pivot, lmcs->pivot, inv_scale_coeff, i, max); if (bit_depth > 8) - ((uint16_t *)lmcs->inv_lut)[sample] = inv_sample; + lmcs->inv_lut.u16[sample] = inv_sample; else - lmcs->inv_lut[sample] = inv_sample; + lmcs->inv_lut.u8 [sample] = inv_sample; } return 0; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h index 3d3aa061f5..5adf3f3453 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvc_ps.h @@ -191,9 +191,10 @@ typedef struct VVCLMCS { uint8_t min_bin_idx; uint8_t max_bin_idx; - //*2 for high depth - uint8_t fwd_lut[LMCS_MAX_LUT_SIZE * 2]; - uint8_t inv_lut[LMCS_MAX_LUT_SIZE * 2]; + union { + uint8_t u8[LMCS_MAX_LUT_SIZE]; + uint16_t u16[LMCS_MAX_LUT_SIZE]; ///< for high bit-depth + } fwd_lut, inv_lut; uint16_t pivot[LMCS_MAX_BIN_SIZE + 1]; uint16_t chroma_scale_coeff[LMCS_MAX_BIN_SIZE]; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c index 214dc4e6c0..d63b9bc9b3 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.c @@ -64,24 +64,6 @@ static int vvc_sad(const int16_t *src0, const int16_t *src1, int dx, int dy, return sad; } -#define itx_fn(type, s) \ -static void itx_##type##_##s(int *coeffs, ptrdiff_t step, size_t nz) \ -{ \ - ff_vvc_inv_##type##_##s(coeffs, step, nz); \ -} - -#define itx_fn_common(type) \ - itx_fn(type, 4); \ - itx_fn(type, 8); \ - itx_fn(type, 16); \ - itx_fn(type, 32); \ - -itx_fn_common(dct2); -itx_fn_common(dst7); -itx_fn_common(dct8); -itx_fn(dct2, 2); -itx_fn(dct2, 64); - typedef struct IntraEdgeParams { uint8_t* top; uint8_t* left; diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h index 6f59e73654..f4fb3cb7d7 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp.h @@ -119,7 +119,7 @@ typedef struct VVCItxDSPContext { } VVCItxDSPContext; typedef struct VVCLMCSDSPContext { - void (*filter)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const uint8_t *lut); + void (*filter)(uint8_t *dst, ptrdiff_t dst_stride, int width, int height, const void *lut); } VVCLMCSDSPContext; typedef struct VVCLFDSPContext { diff --git a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp_template.c b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp_template.c index f92c266478..33815d6765 100644 --- a/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp_template.c +++ b/src/ExtLib/ffmpeg/libavcodec/vvc/vvcdsp_template.c @@ -97,7 +97,7 @@ static void FUNC(transform_bdpcm)(int *coeffs, const int width, const int height static void FUNC(ff_vvc_itx_dsp_init)(VVCItxDSPContext *const itx) { #define VVC_ITX(TYPE, type, s) \ - itx->itx[TYPE][TX_SIZE_##s] = itx_##type##_##s; \ + itx->itx[TYPE][TX_SIZE_##s] = ff_vvc_inv_##type##_##s; \ #define VVC_ITX_COMMON(TYPE, type) \ VVC_ITX(TYPE, type, 4); \ diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/fpel.asm b/src/ExtLib/ffmpeg/libavcodec/x86/fpel.asm index ebe8e43750..278d1410fc 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/fpel.asm +++ b/src/ExtLib/ffmpeg/libavcodec/x86/fpel.asm @@ -89,10 +89,8 @@ cglobal %1_pixels%2, 4,5,4 %endmacro INIT_MMX mmx -OP_PIXELS put, 4 OP_PIXELS put, 8 OP_PIXELS put, 16 -OP_PIXELS avg, 16 INIT_MMX mmxext OP_PIXELS avg, 4 diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/fpel.h b/src/ExtLib/ffmpeg/libavcodec/x86/fpel.h index 832d0b4007..c2d3c3a449 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/fpel.h +++ b/src/ExtLib/ffmpeg/libavcodec/x86/fpel.h @@ -22,22 +22,14 @@ #include #include -void ff_avg_pixels4_mmx(uint8_t *block, const uint8_t *pixels, - ptrdiff_t line_size, int h); void ff_avg_pixels4_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -void ff_avg_pixels8_mmx(uint8_t *block, const uint8_t *pixels, - ptrdiff_t line_size, int h); void ff_avg_pixels8_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -void ff_avg_pixels16_mmx(uint8_t *block, const uint8_t *pixels, - ptrdiff_t line_size, int h); void ff_avg_pixels16_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_avg_pixels16_sse2(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -void ff_put_pixels4_mmx(uint8_t *block, const uint8_t *pixels, - ptrdiff_t line_size, int h); void ff_put_pixels8_mmx(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); void ff_put_pixels16_mmx(uint8_t *block, const uint8_t *pixels, diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/h264_qpel.c b/src/ExtLib/ffmpeg/libavcodec/x86/h264_qpel.c index 2df4c11f82..d69ccda89c 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/h264_qpel.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/h264_qpel.c @@ -47,8 +47,8 @@ void ff_avg_pixels16_l2_mmxext(uint8_t *dst, const uint8_t *src1, const uint8_t #define ff_put_pixels16_l2_sse2 ff_put_pixels16_l2_mmxext #define ff_avg_pixels16_l2_sse2 ff_avg_pixels16_l2_mmxext #define ff_put_pixels16_mmxext ff_put_pixels16_mmx -#define ff_put_pixels8_mmxext ff_put_pixels8_mmx -#define ff_put_pixels4_mmxext ff_put_pixels4_mmx +#define ff_put_pixels8_mmxext(...) +#define ff_put_pixels4_mmxext(...) #define DEF_QPEL(OPNAME)\ void ff_ ## OPNAME ## _h264_qpel4_h_lowpass_mmxext(uint8_t *dst, const uint8_t *src, int dstStride, int srcStride);\ @@ -217,11 +217,10 @@ static void avg_h264_qpel16_mc00_sse2 (uint8_t *dst, const uint8_t *src, { ff_avg_pixels16_sse2(dst, src, stride, 16); } -#define put_h264_qpel8_mc00_sse2 put_h264_qpel8_mc00_mmxext #define avg_h264_qpel8_mc00_sse2 avg_h264_qpel8_mc00_mmxext #define H264_MC_C(OPNAME, SIZE, MMX, ALIGN) \ -static void OPNAME ## h264_qpel ## SIZE ## _mc00_ ## MMX (uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ +static void av_unused OPNAME ## h264_qpel ## SIZE ## _mc00_ ## MMX (uint8_t *dst, const uint8_t *src, ptrdiff_t stride)\ {\ ff_ ## OPNAME ## pixels ## SIZE ## _ ## MMX(dst, src, stride, SIZE);\ }\ @@ -424,16 +423,20 @@ LUMA_MC_816(10, mc33, sse2) #endif /* HAVE_X86ASM */ -#define SET_QPEL_FUNCS0123(PFX, IDX, SIZE, CPU, PREFIX) \ +#define SET_QPEL_FUNCS123(PFX, IDX, SIZE, CPU, PREFIX) \ do { \ - c->PFX ## _pixels_tab[IDX][ 0] = PREFIX ## PFX ## SIZE ## _mc00_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 1] = PREFIX ## PFX ## SIZE ## _mc10_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 2] = PREFIX ## PFX ## SIZE ## _mc20_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 3] = PREFIX ## PFX ## SIZE ## _mc30_ ## CPU; \ } while (0) -#define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX) \ +#define SET_QPEL_FUNCS0123(PFX, IDX, SIZE, CPU, PREFIX) \ do { \ - SET_QPEL_FUNCS0123(PFX, IDX, SIZE, CPU, PREFIX); \ + c->PFX ## _pixels_tab[IDX][ 0] = PREFIX ## PFX ## SIZE ## _mc00_ ## CPU; \ + SET_QPEL_FUNCS123(PFX, IDX, SIZE, CPU, PREFIX); \ + } while (0) +#define SET_QPEL_FUNCS_1PP(PFX, IDX, SIZE, CPU, PREFIX) \ + do { \ + SET_QPEL_FUNCS123(PFX, IDX, SIZE, CPU, PREFIX); \ c->PFX ## _pixels_tab[IDX][ 4] = PREFIX ## PFX ## SIZE ## _mc01_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 5] = PREFIX ## PFX ## SIZE ## _mc11_ ## CPU; \ c->PFX ## _pixels_tab[IDX][ 6] = PREFIX ## PFX ## SIZE ## _mc21_ ## CPU; \ @@ -447,6 +450,11 @@ LUMA_MC_816(10, mc33, sse2) c->PFX ## _pixels_tab[IDX][14] = PREFIX ## PFX ## SIZE ## _mc23_ ## CPU; \ c->PFX ## _pixels_tab[IDX][15] = PREFIX ## PFX ## SIZE ## _mc33_ ## CPU; \ } while (0) +#define SET_QPEL_FUNCS(PFX, IDX, SIZE, CPU, PREFIX) \ + do { \ + c->PFX ## _pixels_tab[IDX][ 0] = PREFIX ## PFX ## SIZE ## _mc00_ ## CPU; \ + SET_QPEL_FUNCS_1PP(PFX, IDX, SIZE, CPU, PREFIX); \ + } while (0) #define H264_QPEL_FUNCS(x, y, CPU) \ do { \ @@ -473,8 +481,8 @@ av_cold void ff_h264qpel_init_x86(H264QpelContext *c, int bit_depth) if (EXTERNAL_MMXEXT(cpu_flags)) { if (!high_bit_depth) { SET_QPEL_FUNCS0123(put_h264_qpel, 0, 16, mmxext, ); - SET_QPEL_FUNCS0123(put_h264_qpel, 1, 8, mmxext, ); - SET_QPEL_FUNCS(put_h264_qpel, 2, 4, mmxext, ); + SET_QPEL_FUNCS123 (put_h264_qpel, 1, 8, mmxext, ); + SET_QPEL_FUNCS_1PP(put_h264_qpel, 2, 4, mmxext, ); SET_QPEL_FUNCS0123(avg_h264_qpel, 0, 16, mmxext, ); SET_QPEL_FUNCS0123(avg_h264_qpel, 1, 8, mmxext, ); SET_QPEL_FUNCS(avg_h264_qpel, 2, 4, mmxext, ); @@ -513,7 +521,9 @@ av_cold void ff_h264qpel_init_x86(H264QpelContext *c, int bit_depth) if (EXTERNAL_SSE2_FAST(cpu_flags)) { if (!high_bit_depth) { - H264_QPEL_FUNCS(0, 0, sse2); + c->put_h264_qpel_pixels_tab[0][0] = put_h264_qpel16_mc00_sse2; + c->avg_h264_qpel_pixels_tab[0][0] = avg_h264_qpel16_mc00_sse2; + c->avg_h264_qpel_pixels_tab[1][0] = avg_h264_qpel8_mc00_sse2; } } diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h index e31aae6b0d..0ea08b6a20 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h +++ b/src/ExtLib/ffmpeg/libavcodec/x86/h26x/h2656dsp.h @@ -31,7 +31,7 @@ #define H2656_PEL_PROTOTYPE(name, D, opt) \ void ff_h2656_put_ ## name ## _ ## D ## _##opt(int16_t *dst, ptrdiff_t dststride, const uint8_t *_src, ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width); \ -void ff_h2656_put_uni_ ## name ## _ ## D ## _##opt(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width); \ +void ff_h2656_put_uni_ ## name ## _ ## D ## _##opt(uint8_t *_dst, ptrdiff_t _dststride, const uint8_t *_src, ptrdiff_t _srcstride, int height, const int8_t *hf, const int8_t *vf, int width) \ #define H2656_MC_8TAP_PROTOTYPES(fname, bitd, opt) \ H2656_PEL_PROTOTYPE(fname##4, bitd, opt); \ diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c index e132699105..0cf686e906 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/hevcdsp_init.c @@ -123,17 +123,17 @@ void ff_hevc_put_hevc_uni_ ## a ## _ ## depth ## _##opt(uint8_t *dst, ptrdiff_t #define FW_DIR_HV(npel, n, w, depth, opt) \ FW_PUT_FUNCS(npel, npel ## _hv##w, n ## tap_hv##w, depth, opt) -FW_PEL(4, 8, sse4); -FW_PEL(6, 8, sse4); -FW_PEL(8, 8, sse4); -FW_PEL(12, 8, sse4); -FW_PEL(16, 8, sse4); -FW_PEL(4, 10, sse4); -FW_PEL(6, 10, sse4); -FW_PEL(8, 10, sse4); -FW_PEL(4, 12, sse4); -FW_PEL(6, 12, sse4); -FW_PEL(8, 12, sse4); +FW_PEL(4, 8, sse4) +FW_PEL(6, 8, sse4) +FW_PEL(8, 8, sse4) +FW_PEL(12, 8, sse4) +FW_PEL(16, 8, sse4) +FW_PEL(4, 10, sse4) +FW_PEL(6, 10, sse4) +FW_PEL(8, 10, sse4) +FW_PEL(4, 12, sse4) +FW_PEL(6, 12, sse4) +FW_PEL(8, 12, sse4) #define FW_EPEL(w, depth, opt) FW_DIR(epel, 4, w, depth, opt) #define FW_EPEL_HV(w, depth, opt) FW_DIR_HV(epel, 4, w, depth, opt) @@ -141,18 +141,18 @@ FW_PEL(8, 12, sse4); FW_EPEL(w, depth, opt) \ FW_EPEL_HV(w, depth, opt) -FW_EPEL(12, 8, sse4); +FW_EPEL(12, 8, sse4) -FW_EPEL_FUNCS(4, 8, sse4); -FW_EPEL_FUNCS(6, 8, sse4); -FW_EPEL_FUNCS(8, 8, sse4); -FW_EPEL_FUNCS(16, 8, sse4); -FW_EPEL_FUNCS(4, 10, sse4); -FW_EPEL_FUNCS(6, 10, sse4); -FW_EPEL_FUNCS(8, 10, sse4); -FW_EPEL_FUNCS(4, 12, sse4); -FW_EPEL_FUNCS(6, 12, sse4); -FW_EPEL_FUNCS(8, 12, sse4); +FW_EPEL_FUNCS(4, 8, sse4) +FW_EPEL_FUNCS(6, 8, sse4) +FW_EPEL_FUNCS(8, 8, sse4) +FW_EPEL_FUNCS(16, 8, sse4) +FW_EPEL_FUNCS(4, 10, sse4) +FW_EPEL_FUNCS(6, 10, sse4) +FW_EPEL_FUNCS(8, 10, sse4) +FW_EPEL_FUNCS(4, 12, sse4) +FW_EPEL_FUNCS(6, 12, sse4) +FW_EPEL_FUNCS(8, 12, sse4) #define FW_QPEL(w, depth, opt) FW_DIR(qpel, 8, w, depth, opt) #define FW_QPEL_HV(w, depth, opt) FW_DIR_HV(qpel, 8, w, depth, opt) @@ -160,31 +160,31 @@ FW_EPEL_FUNCS(8, 12, sse4); FW_QPEL(w, depth, opt) \ FW_QPEL_HV(w, depth, opt) -FW_QPEL(12, 8, sse4); -FW_QPEL(16, 8, sse4); +FW_QPEL(12, 8, sse4) +FW_QPEL(16, 8, sse4) -FW_QPEL_FUNCS(4, 8, sse4); -FW_QPEL_FUNCS(8, 8, sse4); -FW_QPEL_FUNCS(4, 10, sse4); -FW_QPEL_FUNCS(8, 10, sse4); -FW_QPEL_FUNCS(4, 12, sse4); -FW_QPEL_FUNCS(8, 12, sse4); +FW_QPEL_FUNCS(4, 8, sse4) +FW_QPEL_FUNCS(8, 8, sse4) +FW_QPEL_FUNCS(4, 10, sse4) +FW_QPEL_FUNCS(8, 10, sse4) +FW_QPEL_FUNCS(4, 12, sse4) +FW_QPEL_FUNCS(8, 12, sse4) #if HAVE_AVX2_EXTERNAL -FW_PEL(32, 8, avx2); -FW_PUT(pel, pel_pixels16, pixels16, 10, avx2); +FW_PEL(32, 8, avx2) +FW_PUT(pel, pel_pixels16, pixels16, 10, avx2) -FW_EPEL(32, 8, avx2); -FW_EPEL(16, 10, avx2); +FW_EPEL(32, 8, avx2) +FW_EPEL(16, 10, avx2) -FW_EPEL_HV(32, 8, avx2); -FW_EPEL_HV(16, 10, avx2); +FW_EPEL_HV(32, 8, avx2) +FW_EPEL_HV(16, 10, avx2) -FW_QPEL(32, 8, avx2); -FW_QPEL(16, 10, avx2); +FW_QPEL(32, 8, avx2) +FW_QPEL(16, 10, avx2) -FW_QPEL_HV(16, 10, avx2); +FW_QPEL_HV(16, 10, avx2) #endif #endif diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/hpeldsp_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/hpeldsp_init.c index f08c66f5c8..4a0513d06d 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/hpeldsp_init.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/hpeldsp_init.c @@ -62,11 +62,9 @@ void ff_avg_pixels8_y2_mmxext(uint8_t *block, const uint8_t *pixels, void ff_avg_approx_pixels8_xy2_mmxext(uint8_t *block, const uint8_t *pixels, ptrdiff_t line_size, int h); -#define avg_pixels16_mmx ff_avg_pixels16_mmx #define put_pixels8_mmx ff_put_pixels8_mmx #define put_pixels16_mmx ff_put_pixels16_mmx #define put_pixels8_xy2_mmx ff_put_pixels8_xy2_mmx -#define avg_no_rnd_pixels16_mmx ff_avg_pixels16_mmx #define put_no_rnd_pixels8_mmx ff_put_pixels8_mmx #define put_no_rnd_pixels16_mmx ff_put_pixels16_mmx @@ -138,7 +136,6 @@ HPELDSP_AVG_PIXELS16(_mmxext) if (HAVE_MMX_EXTERNAL) \ c->PFX ## _pixels_tab IDX [0] = PFX ## _pixels ## SIZE ## _ ## CPU -#if HAVE_MMX_INLINE #define SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU) \ do { \ SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU); \ @@ -149,10 +146,6 @@ HPELDSP_AVG_PIXELS16(_mmxext) c->PFX ## _pixels_tab IDX [1] = PFX ## _pixels ## SIZE ## _x2_ ## CPU; \ c->PFX ## _pixels_tab IDX [2] = PFX ## _pixels ## SIZE ## _y2_ ## CPU; \ } while (0) -#else -#define SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU) SET_HPEL_FUNCS_EXT(PFX, IDX, SIZE, CPU) -#define SET_HPEL_FUNCS12(PFX, IDX, SIZE, CPU) ((void)0) -#endif #define SET_HPEL_FUNCS(PFX, IDX, SIZE, CPU) \ do { \ SET_HPEL_FUNCS03(PFX, IDX, SIZE, CPU); \ @@ -161,11 +154,14 @@ HPELDSP_AVG_PIXELS16(_mmxext) static void hpeldsp_init_mmx(HpelDSPContext *c, int flags) { +#if HAVE_MMX_INLINE SET_HPEL_FUNCS03(put, [0], 16, mmx); SET_HPEL_FUNCS(put_no_rnd, [0], 16, mmx); - SET_HPEL_FUNCS(avg_no_rnd, , 16, mmx); + SET_HPEL_FUNCS12(avg_no_rnd, , 16, mmx); + c->avg_no_rnd_pixels_tab[3] = avg_no_rnd_pixels16_xy2_mmx; SET_HPEL_FUNCS03(put, [1], 8, mmx); SET_HPEL_FUNCS(put_no_rnd, [1], 8, mmx); +#endif } static void hpeldsp_init_mmxext(HpelDSPContext *c, int flags) @@ -190,6 +186,8 @@ static void hpeldsp_init_mmxext(HpelDSPContext *c, int flags) c->put_no_rnd_pixels_tab[1][1] = ff_put_no_rnd_pixels8_x2_exact_mmxext; c->put_no_rnd_pixels_tab[1][2] = ff_put_no_rnd_pixels8_y2_exact_mmxext; + c->avg_no_rnd_pixels_tab[0] = ff_avg_pixels16_mmxext; + if (!(flags & AV_CODEC_FLAG_BITEXACT)) { c->put_no_rnd_pixels_tab[0][1] = put_no_rnd_pixels16_x2_mmxext; c->put_no_rnd_pixels_tab[0][2] = put_no_rnd_pixels16_y2_mmxext; @@ -214,6 +212,7 @@ static void hpeldsp_init_sse2_fast(HpelDSPContext *c, int flags) c->avg_pixels_tab[0][1] = ff_avg_pixels16_x2_sse2; c->avg_pixels_tab[0][2] = ff_avg_pixels16_y2_sse2; c->avg_pixels_tab[0][3] = ff_avg_pixels16_xy2_sse2; + c->avg_no_rnd_pixels_tab[0] = ff_avg_pixels16_sse2; #endif /* HAVE_SSE2_EXTERNAL */ } diff --git a/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c index 8ee4074350..0d2c683f0f 100644 --- a/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c +++ b/src/ExtLib/ffmpeg/libavcodec/x86/vvc/vvcdsp_init.c @@ -40,12 +40,12 @@ static void ff_vvc_put_ ## name ## _ ## depth ## _##opt(int16_t *dst, const uint } #define FW_PUT_TAP(fname, bitd, opt ) \ - FW_PUT(fname##4, bitd, opt ); \ - FW_PUT(fname##8, bitd, opt ); \ - FW_PUT(fname##16, bitd, opt ); \ - FW_PUT(fname##32, bitd, opt ); \ - FW_PUT(fname##64, bitd, opt ); \ - FW_PUT(fname##128, bitd, opt ); \ + FW_PUT(fname##4, bitd, opt ) \ + FW_PUT(fname##8, bitd, opt ) \ + FW_PUT(fname##16, bitd, opt ) \ + FW_PUT(fname##32, bitd, opt ) \ + FW_PUT(fname##64, bitd, opt ) \ + FW_PUT(fname##128, bitd, opt ) \ #define FW_PUT_4TAP(fname, bitd, opt) \ FW_PUT(fname ## 2, bitd, opt) \ @@ -66,9 +66,9 @@ static void ff_vvc_put_ ## name ## _ ## depth ## _##opt(int16_t *dst, const uint FW_PUT_4TAP_SSE4(bitd) \ FW_PUT_8TAP_SSE4(bitd) -FW_PUT_SSE4( 8); -FW_PUT_SSE4(10); -FW_PUT_SSE4(12); +FW_PUT_SSE4( 8) +FW_PUT_SSE4(10) +FW_PUT_SSE4(12) #define FW_PUT_TAP_AVX2(n, bitd) \ FW_PUT(n ## tap_h32, bitd, avx2) \ @@ -100,10 +100,10 @@ FW_PUT_AVX2(12) #define FW_PUT_16BPC_AVX2(bitd) \ FW_PUT(pixels16, bitd, avx2) \ FW_PUT_TAP_16BPC_AVX2(4, bitd) \ - FW_PUT_TAP_16BPC_AVX2(8, bitd); + FW_PUT_TAP_16BPC_AVX2(8, bitd) -FW_PUT_16BPC_AVX2(10); -FW_PUT_16BPC_AVX2(12); +FW_PUT_16BPC_AVX2(10) +FW_PUT_16BPC_AVX2(12) #define PEL_LINK(dst, C, W, idx1, idx2, name, D, opt) \ dst[C][W][idx1][idx2] = ff_vvc_put_## name ## _ ## D ## _##opt; \ diff --git a/src/ExtLib/ffmpeg/libavfilter/audio.c b/src/ExtLib/ffmpeg/libavfilter/audio.c index 417cc0fb6e..38fe3ac48a 100644 --- a/src/ExtLib/ffmpeg/libavfilter/audio.c +++ b/src/ExtLib/ffmpeg/libavfilter/audio.c @@ -26,6 +26,7 @@ #include "audio.h" #include "avfilter.h" +#include "avfilter_internal.h" #include "framepool.h" #include "internal.h" @@ -44,6 +45,7 @@ AVFrame *ff_null_get_audio_buffer(AVFilterLink *link, int nb_samples) AVFrame *ff_default_get_audio_buffer(AVFilterLink *link, int nb_samples) { AVFrame *frame = NULL; + FilterLinkInternal *const li = ff_link_internal(link); int channels = link->ch_layout.nb_channels; int align = av_cpu_max_align(); #if FF_API_OLD_CHANNEL_LAYOUT @@ -54,10 +56,10 @@ FF_DISABLE_DEPRECATION_WARNINGS FF_ENABLE_DEPRECATION_WARNINGS #endif - if (!link->frame_pool) { - link->frame_pool = ff_frame_pool_audio_init(av_buffer_allocz, channels, - nb_samples, link->format, align); - if (!link->frame_pool) + if (!li->frame_pool) { + li->frame_pool = ff_frame_pool_audio_init(av_buffer_allocz, channels, + nb_samples, link->format, align); + if (!li->frame_pool) return NULL; } else { int pool_channels = 0; @@ -65,7 +67,7 @@ FF_ENABLE_DEPRECATION_WARNINGS int pool_align = 0; enum AVSampleFormat pool_format = AV_SAMPLE_FMT_NONE; - if (ff_frame_pool_get_audio_config(link->frame_pool, + if (ff_frame_pool_get_audio_config(li->frame_pool, &pool_channels, &pool_nb_samples, &pool_format, &pool_align) < 0) { return NULL; @@ -74,15 +76,15 @@ FF_ENABLE_DEPRECATION_WARNINGS if (pool_channels != channels || pool_nb_samples < nb_samples || pool_format != link->format || pool_align != align) { - ff_frame_pool_uninit((FFFramePool **)&link->frame_pool); - link->frame_pool = ff_frame_pool_audio_init(av_buffer_allocz, channels, - nb_samples, link->format, align); - if (!link->frame_pool) + ff_frame_pool_uninit(&li->frame_pool); + li->frame_pool = ff_frame_pool_audio_init(av_buffer_allocz, channels, + nb_samples, link->format, align); + if (!li->frame_pool) return NULL; } } - frame = ff_frame_pool_get(link->frame_pool); + frame = ff_frame_pool_get(li->frame_pool); if (!frame) return NULL; diff --git a/src/ExtLib/ffmpeg/libavfilter/avfilter.c b/src/ExtLib/ffmpeg/libavfilter/avfilter.c index 9fe249f3f9..3aa20085ed 100644 --- a/src/ExtLib/ffmpeg/libavfilter/avfilter.c +++ b/src/ExtLib/ffmpeg/libavfilter/avfilter.c @@ -36,12 +36,12 @@ #include "audio.h" #include "avfilter.h" +#include "avfilter_internal.h" #include "filters.h" #include "formats.h" #include "framequeue.h" #include "framepool.h" #include "internal.h" -#include "link_internal.h" #include "video.h" static void tlog_ref(void *ctx, AVFrame *ref, int end) @@ -159,7 +159,7 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, src->outputs[srcpad] || dst->inputs[dstpad]) return AVERROR(EINVAL); - if (!src->internal->initialized || !dst->internal->initialized) { + if (!fffilterctx(src)->initialized || !fffilterctx(dst)->initialized) { av_log(src, AV_LOG_ERROR, "Filters must be initialized before linking.\n"); return AVERROR(EINVAL); } @@ -187,7 +187,7 @@ int avfilter_link(AVFilterContext *src, unsigned srcpad, av_assert0(AV_PIX_FMT_NONE == -1 && AV_SAMPLE_FMT_NONE == -1); link->format = -1; link->colorspace = AVCOL_SPC_UNSPECIFIED; - ff_framequeue_init(&li->fifo, &src->graph->internal->frame_queues); + ff_framequeue_init(&li->fifo, &fffiltergraph(src->graph)->frame_queues); return 0; } @@ -201,21 +201,23 @@ void avfilter_link_free(AVFilterLink **link) li = ff_link_internal(*link); ff_framequeue_free(&li->fifo); - ff_frame_pool_uninit((FFFramePool**)&(*link)->frame_pool); + ff_frame_pool_uninit(&li->frame_pool); av_channel_layout_uninit(&(*link)->ch_layout); av_freep(link); } -static void update_link_current_pts(AVFilterLink *link, int64_t pts) +static void update_link_current_pts(FilterLinkInternal *li, int64_t pts) { + AVFilterLink *const link = &li->l; + if (pts == AV_NOPTS_VALUE) return; link->current_pts = pts; link->current_pts_us = av_rescale_q(pts, link->time_base, AV_TIME_BASE_Q); /* TODO use duration */ - if (link->graph && link->age_index >= 0) - ff_avfilter_graph_update_heap(link->graph, link); + if (link->graph && li->age_index >= 0) + ff_avfilter_graph_update_heap(link->graph, li); } void ff_filter_set_ready(AVFilterContext *filter, unsigned priority) @@ -265,7 +267,7 @@ static void link_set_out_status(AVFilterLink *link, int status, int64_t pts) av_assert0(!li->status_out); li->status_out = status; if (pts != AV_NOPTS_VALUE) - update_link_current_pts(link, pts); + update_link_current_pts(li, pts); filter_unblock(link->dst); ff_filter_set_ready(link->src, 200); } @@ -322,6 +324,7 @@ int avfilter_config_links(AVFilterContext *filter) for (i = 0; i < filter->nb_inputs; i ++) { AVFilterLink *link = filter->inputs[i]; AVFilterLink *inlink; + FilterLinkInternal *li = ff_link_internal(link); if (!link) continue; if (!link->src || !link->dst) { @@ -334,14 +337,14 @@ int avfilter_config_links(AVFilterContext *filter) link->current_pts = link->current_pts_us = AV_NOPTS_VALUE; - switch (link->init_state) { + switch (li->init_state) { case AVLINK_INIT: continue; case AVLINK_STARTINIT: av_log(filter, AV_LOG_INFO, "circular filter chain detected\n"); return 0; case AVLINK_UNINIT: - link->init_state = AVLINK_STARTINIT; + li->init_state = AVLINK_STARTINIT; if ((ret = avfilter_config_links(link->src)) < 0) return ret; @@ -412,7 +415,7 @@ int avfilter_config_links(AVFilterContext *filter) return ret; } - link->init_state = AVLINK_INIT; + li->init_state = AVLINK_INIT; } } @@ -668,15 +671,17 @@ static int default_execute(AVFilterContext *ctx, avfilter_action_func *func, voi AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name) { + FFFilterContext *ctx; AVFilterContext *ret; int preinited = 0; if (!filter) return NULL; - ret = av_mallocz(sizeof(AVFilterContext)); - if (!ret) + ctx = av_mallocz(sizeof(*ctx)); + if (!ctx) return NULL; + ret = &ctx->p; ret->av_class = &avfilter_class; ret->filter = filter; @@ -698,10 +703,7 @@ AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name) av_opt_set_defaults(ret->priv); } - ret->internal = av_mallocz(sizeof(*ret->internal)); - if (!ret->internal) - goto err; - ret->internal->execute = default_execute; + ctx->execute = default_execute; ret->nb_inputs = filter->nb_inputs; if (ret->nb_inputs ) { @@ -735,7 +737,6 @@ AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name) av_freep(&ret->output_pads); ret->nb_outputs = 0; av_freep(&ret->priv); - av_freep(&ret->internal); av_free(ret); return NULL; } @@ -807,7 +808,6 @@ void avfilter_free(AVFilterContext *filter) av_expr_free(filter->enable); filter->enable = NULL; av_freep(&filter->var_values); - av_freep(&filter->internal); av_free(filter); } @@ -891,9 +891,10 @@ int ff_filter_process_command(AVFilterContext *ctx, const char *cmd, int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options) { + FFFilterContext *ctxi = fffilterctx(ctx); int ret = 0; - if (ctx->internal->initialized) { + if (ctxi->initialized) { av_log(ctx, AV_LOG_ERROR, "Filter already initialized\n"); return AVERROR(EINVAL); } @@ -906,9 +907,9 @@ int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options) if (ctx->filter->flags & AVFILTER_FLAG_SLICE_THREADS && ctx->thread_type & ctx->graph->thread_type & AVFILTER_THREAD_SLICE && - ctx->graph->internal->thread_execute) { + fffiltergraph(ctx->graph)->thread_execute) { ctx->thread_type = AVFILTER_THREAD_SLICE; - ctx->internal->execute = ctx->graph->internal->thread_execute; + ctxi->execute = fffiltergraph(ctx->graph)->thread_execute; } else { ctx->thread_type = 0; } @@ -924,7 +925,7 @@ int avfilter_init_dict(AVFilterContext *ctx, AVDictionary **options) return ret; } - ctx->internal->initialized = 1; + ctxi->initialized = 1; return 0; } @@ -1393,7 +1394,7 @@ int ff_inlink_acknowledge_status(AVFilterLink *link, int *rstatus, int64_t *rpts if (!li->status_in) return *rstatus = 0; *rstatus = li->status_out = li->status_in; - update_link_current_pts(link, li->status_in_pts); + update_link_current_pts(li, li->status_in_pts); *rpts = link->current_pts; return 1; } @@ -1424,9 +1425,10 @@ int ff_inlink_check_available_samples(AVFilterLink *link, unsigned min) return samples >= min || (li->status_in && samples); } -static void consume_update(AVFilterLink *link, const AVFrame *frame) +static void consume_update(FilterLinkInternal *li, const AVFrame *frame) { - update_link_current_pts(link, frame->pts); + AVFilterLink *const link = &li->l; + update_link_current_pts(li, frame->pts); ff_inlink_process_commands(link, frame); link->dst->is_disabled = !ff_inlink_evaluate_timeline_at_frame(link, frame); link->frame_count_out++; @@ -1448,7 +1450,7 @@ int ff_inlink_consume_frame(AVFilterLink *link, AVFrame **rframe) } frame = ff_framequeue_take(&li->fifo); - consume_update(link, frame); + consume_update(li, frame); *rframe = frame; return 1; } @@ -1469,7 +1471,7 @@ int ff_inlink_consume_samples(AVFilterLink *link, unsigned min, unsigned max, ret = take_samples(li, min, max, &frame); if (ret < 0) return ret; - consume_update(link, frame); + consume_update(li, frame); *rframe = frame; return 1; } diff --git a/src/ExtLib/ffmpeg/libavfilter/avfilter.h b/src/ExtLib/ffmpeg/libavfilter/avfilter.h index b5346f40ab..5eff35b836 100644 --- a/src/ExtLib/ffmpeg/libavfilter/avfilter.h +++ b/src/ExtLib/ffmpeg/libavfilter/avfilter.h @@ -611,13 +611,6 @@ struct AVFilterLink { */ AVFilterFormatsConfig outcfg; - /** stage of the initialization of the link properties (dimensions, etc) */ - enum { - AVLINK_UNINIT = 0, ///< not started - AVLINK_STARTINIT, ///< started, but incomplete - AVLINK_INIT ///< complete - } init_state; - /** * Graph the filter belongs to. */ @@ -635,11 +628,6 @@ struct AVFilterLink { */ int64_t current_pts_us; - /** - * Index in the age array. - */ - int age_index; - /** * Frame rate of the stream on the link, or 1/0 if unknown or variable; * if left to 0/0, will be automatically copied from the first input @@ -678,11 +666,6 @@ struct AVFilterLink { */ int64_t sample_count_in, sample_count_out; - /** - * A pointer to a FFFramePool struct. - */ - void *frame_pool; - /** * True if a frame is currently wanted on the output of this filter. * Set when ff_request_frame() is called by the output, @@ -899,18 +882,6 @@ typedef struct AVFilterGraph { avfilter_execute_func *execute; char *aresample_swr_opts; ///< swr options to use for the auto-inserted aresample filters, Access ONLY through AVOptions - - /** - * Private fields - * - * The following fields are for internal use only. - * Their type, offset, number and semantic can change without notice. - */ - - AVFilterLink **sink_links; - int sink_links_count; - - unsigned disable_auto_convert; } AVFilterGraph; /** diff --git a/src/ExtLib/ffmpeg/libavfilter/avfilter_internal.h b/src/ExtLib/ffmpeg/libavfilter/avfilter_internal.h new file mode 100644 index 0000000000..2c31c3e7de --- /dev/null +++ b/src/ExtLib/ffmpeg/libavfilter/avfilter_internal.h @@ -0,0 +1,156 @@ +/* + * This file is part of FFmpeg. + * + * FFmpeg is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * FFmpeg is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with FFmpeg; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + */ + +/* + * APIs internal to the generic filter(graph) layer. + * + * MUST NOT be included by individual filters. + */ + +#ifndef AVFILTER_AVFILTER_INTERNAL_H +#define AVFILTER_AVFILTER_INTERNAL_H + +#include + +#include "avfilter.h" +#include "framequeue.h" + +typedef struct FilterLinkInternal { + AVFilterLink l; + + struct FFFramePool *frame_pool; + + /** + * Queue of frames waiting to be filtered. + */ + FFFrameQueue fifo; + + /** + * If set, the source filter can not generate a frame as is. + * The goal is to avoid repeatedly calling the request_frame() method on + * the same link. + */ + int frame_blocked_in; + + /** + * Link input status. + * If not zero, all attempts of filter_frame will fail with the + * corresponding code. + */ + int status_in; + + /** + * Timestamp of the input status change. + */ + int64_t status_in_pts; + + /** + * Link output status. + * If not zero, all attempts of request_frame will fail with the + * corresponding code. + */ + int status_out; + + /** + * Index in the age array. + */ + int age_index; + + /** stage of the initialization of the link properties (dimensions, etc) */ + enum { + AVLINK_UNINIT = 0, ///< not started + AVLINK_STARTINIT, ///< started, but incomplete + AVLINK_INIT ///< complete + } init_state; +} FilterLinkInternal; + +static inline FilterLinkInternal *ff_link_internal(AVFilterLink *link) +{ + return (FilterLinkInternal*)link; +} + +typedef struct AVFilterCommand { + double time; ///< time expressed in seconds + char *command; ///< command + char *arg; ///< optional argument for the command + int flags; + struct AVFilterCommand *next; +} AVFilterCommand; + +typedef struct FFFilterGraph { + /** + * The public AVFilterGraph. See avfilter.h for it. + */ + AVFilterGraph p; + + struct FilterLinkInternal **sink_links; + int sink_links_count; + + unsigned disable_auto_convert; + + void *thread; + avfilter_execute_func *thread_execute; + FFFrameQueueGlobal frame_queues; +} FFFilterGraph; + +static inline FFFilterGraph *fffiltergraph(AVFilterGraph *graph) +{ + return (FFFilterGraph*)graph; +} + +/** + * Update the position of a link in the age heap. + */ +void ff_avfilter_graph_update_heap(AVFilterGraph *graph, + struct FilterLinkInternal *li); + +/** + * Allocate a new filter context and return it. + * + * @param filter what filter to create an instance of + * @param inst_name name to give to the new filter context + * + * @return newly created filter context or NULL on failure + */ +AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name); + +/** + * Remove a filter from a graph; + */ +void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter); + +int ff_filter_activate(AVFilterContext *filter); + +/** + * Parse filter options into a dictionary. + * + * @param logctx context for logging + * @param priv_class a filter's private class for shorthand options or NULL + * @param options dictionary to store parsed options in + * @param args options string to parse + * + * @return a non-negative number on success, a negative error code on failure + */ +int ff_filter_opt_parse(void *logctx, const AVClass *priv_class, + AVDictionary **options, const char *args); + +int ff_graph_thread_init(FFFilterGraph *graph); + +void ff_graph_thread_free(FFFilterGraph *graph); + +#endif /* AVFILTER_AVFILTER_INTERNAL_H */ diff --git a/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c b/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c index ea0d7713e3..674711ec35 100644 --- a/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c +++ b/src/ExtLib/ffmpeg/libavfilter/avfiltergraph.c @@ -34,12 +34,11 @@ #include "avfilter.h" +#include "avfilter_internal.h" #include "buffersink.h" #include "formats.h" #include "framequeue.h" #include "internal.h" -#include "link_internal.h" -#include "thread.h" #define OFFSET(x) offsetof(AVFilterGraph, x) #define F AV_OPT_FLAG_FILTERING_PARAM @@ -68,33 +67,30 @@ static const AVClass filtergraph_class = { }; #if !HAVE_THREADS -void ff_graph_thread_free(AVFilterGraph *graph) +void ff_graph_thread_free(FFFilterGraph *graph) { } -int ff_graph_thread_init(AVFilterGraph *graph) +int ff_graph_thread_init(FFFilterGraph *graph) { - graph->thread_type = 0; - graph->nb_threads = 1; + graph->p.thread_type = 0; + graph->p.nb_threads = 1; return 0; } #endif AVFilterGraph *avfilter_graph_alloc(void) { - AVFilterGraph *ret = av_mallocz(sizeof(*ret)); - if (!ret) - return NULL; + FFFilterGraph *graph = av_mallocz(sizeof(*graph)); + AVFilterGraph *ret; - ret->internal = av_mallocz(sizeof(*ret->internal)); - if (!ret->internal) { - av_freep(&ret); + if (!graph) return NULL; - } + ret = &graph->p; ret->av_class = &filtergraph_class; av_opt_set_defaults(ret); - ff_framequeue_global_init(&ret->internal->frame_queues); + ff_framequeue_global_init(&graph->frame_queues); return ret; } @@ -117,23 +113,25 @@ void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter } } -void avfilter_graph_free(AVFilterGraph **graph) +void avfilter_graph_free(AVFilterGraph **graphp) { - if (!*graph) + AVFilterGraph *graph = *graphp; + FFFilterGraph *graphi = fffiltergraph(graph); + + if (!graph) return; - while ((*graph)->nb_filters) - avfilter_free((*graph)->filters[0]); + while (graph->nb_filters) + avfilter_free(graph->filters[0]); - ff_graph_thread_free(*graph); + ff_graph_thread_free(graphi); - av_freep(&(*graph)->sink_links); + av_freep(&graphi->sink_links); - av_opt_free(*graph); + av_opt_free(graph); - av_freep(&(*graph)->filters); - av_freep(&(*graph)->internal); - av_freep(graph); + av_freep(&graph->filters); + av_freep(graphp); } int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *filt, @@ -160,7 +158,7 @@ int avfilter_graph_create_filter(AVFilterContext **filt_ctx, const AVFilter *fil void avfilter_graph_set_auto_convert(AVFilterGraph *graph, unsigned flags) { - graph->disable_auto_convert = flags; + fffiltergraph(graph)->disable_auto_convert = flags; } AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, @@ -168,12 +166,13 @@ AVFilterContext *avfilter_graph_alloc_filter(AVFilterGraph *graph, const char *name) { AVFilterContext **filters, *s; + FFFilterGraph *graphi = fffiltergraph(graph); - if (graph->thread_type && !graph->internal->thread_execute) { + if (graph->thread_type && !graphi->thread_execute) { if (graph->execute) { - graph->internal->thread_execute = graph->execute; + graphi->thread_execute = graph->execute; } else { - int ret = ff_graph_thread_init(graph); + int ret = ff_graph_thread_init(graphi); if (ret < 0) { av_log(graph, AV_LOG_ERROR, "Error initializing threading: %s.\n", av_err2str(ret)); return NULL; @@ -471,7 +470,7 @@ static int query_formats(AVFilterGraph *graph, void *log_ctx) char inst_name[30]; const char *opts; - if (graph->disable_auto_convert) { + if (fffiltergraph(graph)->disable_auto_convert) { av_log(log_ctx, AV_LOG_ERROR, "The filters '%s' and '%s' do not have a common format " "and automatic conversion is disabled.\n", @@ -1286,17 +1285,17 @@ static int graph_config_pointers(AVFilterGraph *graph, void *log_ctx) unsigned i, j; int sink_links_count = 0, n = 0; AVFilterContext *f; - AVFilterLink **sinks; + FilterLinkInternal **sinks; for (i = 0; i < graph->nb_filters; i++) { f = graph->filters[i]; for (j = 0; j < f->nb_inputs; j++) { f->inputs[j]->graph = graph; - f->inputs[j]->age_index = -1; + ff_link_internal(f->inputs[j])->age_index = -1; } for (j = 0; j < f->nb_outputs; j++) { f->outputs[j]->graph = graph; - f->outputs[j]->age_index= -1; + ff_link_internal(f->outputs[j])->age_index = -1; } if (!f->nb_outputs) { if (f->nb_inputs > INT_MAX - sink_links_count) @@ -1311,14 +1310,15 @@ static int graph_config_pointers(AVFilterGraph *graph, void *log_ctx) f = graph->filters[i]; if (!f->nb_outputs) { for (j = 0; j < f->nb_inputs; j++) { - sinks[n] = f->inputs[j]; - f->inputs[j]->age_index = n++; + sinks[n] = ff_link_internal(f->inputs[j]); + sinks[n]->age_index = n; + n++; } } } av_assert0(n == sink_links_count); - graph->sink_links = sinks; - graph->sink_links_count = sink_links_count; + fffiltergraph(graph)->sink_links = sinks; + fffiltergraph(graph)->sink_links_count = sink_links_count; return 0; } @@ -1401,29 +1401,29 @@ int avfilter_graph_queue_command(AVFilterGraph *graph, const char *target, const return 0; } -static void heap_bubble_up(AVFilterGraph *graph, - AVFilterLink *link, int index) +static void heap_bubble_up(FFFilterGraph *graph, + FilterLinkInternal *li, int index) { - AVFilterLink **links = graph->sink_links; + FilterLinkInternal **links = graph->sink_links; av_assert0(index >= 0); while (index) { int parent = (index - 1) >> 1; - if (links[parent]->current_pts_us >= link->current_pts_us) + if (links[parent]->l.current_pts_us >= li->l.current_pts_us) break; links[index] = links[parent]; links[index]->age_index = index; index = parent; } - links[index] = link; - link->age_index = index; + links[index] = li; + li->age_index = index; } -static void heap_bubble_down(AVFilterGraph *graph, - AVFilterLink *link, int index) +static void heap_bubble_down(FFFilterGraph *graph, + FilterLinkInternal *li, int index) { - AVFilterLink **links = graph->sink_links; + FilterLinkInternal **links = graph->sink_links; av_assert0(index >= 0); @@ -1432,32 +1432,37 @@ static void heap_bubble_down(AVFilterGraph *graph, if (child >= graph->sink_links_count) break; if (child + 1 < graph->sink_links_count && - links[child + 1]->current_pts_us < links[child]->current_pts_us) + links[child + 1]->l.current_pts_us < links[child]->l.current_pts_us) child++; - if (link->current_pts_us < links[child]->current_pts_us) + if (li->l.current_pts_us < links[child]->l.current_pts_us) break; links[index] = links[child]; links[index]->age_index = index; index = child; } - links[index] = link; - link->age_index = index; + links[index] = li; + li->age_index = index; } -void ff_avfilter_graph_update_heap(AVFilterGraph *graph, AVFilterLink *link) +void ff_avfilter_graph_update_heap(AVFilterGraph *graph, FilterLinkInternal *li) { - heap_bubble_up (graph, link, link->age_index); - heap_bubble_down(graph, link, link->age_index); + FFFilterGraph *graphi = fffiltergraph(graph); + + heap_bubble_up (graphi, li, li->age_index); + heap_bubble_down(graphi, li, li->age_index); } int avfilter_graph_request_oldest(AVFilterGraph *graph) { - AVFilterLink *oldest = graph->sink_links[0]; + FFFilterGraph *graphi = fffiltergraph(graph); + FilterLinkInternal *oldesti = graphi->sink_links[0]; + AVFilterLink *oldest = &oldesti->l; int64_t frame_count; int r; - while (graph->sink_links_count) { - oldest = graph->sink_links[0]; + while (graphi->sink_links_count) { + oldesti = graphi->sink_links[0]; + oldest = &oldesti->l; if (oldest->dst->filter->activate) { r = av_buffersink_get_frame_flags(oldest->dst, NULL, AV_BUFFERSINK_FLAG_PEEK); @@ -1472,22 +1477,21 @@ int avfilter_graph_request_oldest(AVFilterGraph *graph) oldest->dst->name, oldest->dstpad->name); /* EOF: remove the link from the heap */ - if (oldest->age_index < --graph->sink_links_count) - heap_bubble_down(graph, graph->sink_links[graph->sink_links_count], - oldest->age_index); - oldest->age_index = -1; + if (oldesti->age_index < --graphi->sink_links_count) + heap_bubble_down(graphi, graphi->sink_links[graphi->sink_links_count], + oldesti->age_index); + oldesti->age_index = -1; } - if (!graph->sink_links_count) + if (!graphi->sink_links_count) return AVERROR_EOF; av_assert1(!oldest->dst->filter->activate); - av_assert1(oldest->age_index >= 0); + av_assert1(oldesti->age_index >= 0); frame_count = oldest->frame_count_out; while (frame_count == oldest->frame_count_out) { - FilterLinkInternal * const li = ff_link_internal(oldest); r = ff_filter_graph_run_once(graph); if (r == AVERROR(EAGAIN) && - !oldest->frame_wanted_out && !li->frame_blocked_in && - !li->status_in) + !oldest->frame_wanted_out && !oldesti->frame_blocked_in && + !oldesti->status_in) ff_request_frame(oldest); else if (r < 0) return r; diff --git a/src/ExtLib/ffmpeg/libavfilter/buffersink.c b/src/ExtLib/ffmpeg/libavfilter/buffersink.c index b0359280b6..6665eddee7 100644 --- a/src/ExtLib/ffmpeg/libavfilter/buffersink.c +++ b/src/ExtLib/ffmpeg/libavfilter/buffersink.c @@ -32,12 +32,12 @@ #include "audio.h" #include "avfilter.h" +#include "avfilter_internal.h" #include "buffersink.h" #include "filters.h" #include "formats.h" #include "framequeue.h" #include "internal.h" -#include "link_internal.h" #include "video.h" typedef struct BufferSinkContext { diff --git a/src/ExtLib/ffmpeg/libavfilter/graphparser.c b/src/ExtLib/ffmpeg/libavfilter/graphparser.c index 4da6b3a60c..656bed22b8 100644 --- a/src/ExtLib/ffmpeg/libavfilter/graphparser.c +++ b/src/ExtLib/ffmpeg/libavfilter/graphparser.c @@ -29,6 +29,7 @@ #include "libavutil/opt.h" #include "avfilter.h" +#include "avfilter_internal.h" #include "internal.h" #define WHITESPACES " \n\t\r" @@ -626,7 +627,7 @@ int avfilter_graph_segment_init(AVFilterGraphSegment *seg, int flags) if (p->filter_name) return fail_creation_pending(seg, p->filter_name, __func__); - if (!p->filter || p->filter->internal->initialized) + if (!p->filter || fffilterctx(p->filter)->initialized) continue; ret = avfilter_init_dict(p->filter, NULL); diff --git a/src/ExtLib/ffmpeg/libavfilter/internal.h b/src/ExtLib/ffmpeg/libavfilter/internal.h index eef03f6e09..458c937a83 100644 --- a/src/ExtLib/ffmpeg/libavfilter/internal.h +++ b/src/ExtLib/ffmpeg/libavfilter/internal.h @@ -26,20 +26,6 @@ #include "libavutil/internal.h" #include "avfilter.h" -#include "framequeue.h" - -typedef struct AVFilterCommand { - double time; ///< time expressed in seconds - char *command; ///< command - char *arg; ///< optional argument for the command - int flags; - struct AVFilterCommand *next; -} AVFilterCommand; - -/** - * Update the position of a link in the age heap. - */ -void ff_avfilter_graph_update_heap(AVFilterGraph *graph, AVFilterLink *link); /** * A filter pad used for either input or output. @@ -127,24 +113,28 @@ struct AVFilterPad { int (*config_props)(AVFilterLink *link); }; -struct AVFilterGraphInternal { - void *thread; - avfilter_execute_func *thread_execute; - FFFrameQueueGlobal frame_queues; -}; +typedef struct FFFilterContext { + /** + * The public AVFilterContext. See avfilter.h for it. + */ + AVFilterContext p; -struct AVFilterInternal { avfilter_execute_func *execute; // 1 when avfilter_init_*() was successfully called on this filter // 0 otherwise int initialized; -}; +} FFFilterContext; + +static inline FFFilterContext *fffilterctx(AVFilterContext *ctx) +{ + return (FFFilterContext*)ctx; +} static av_always_inline int ff_filter_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs) { - return ctx->internal->execute(ctx, func, arg, ret, nb_jobs); + return fffilterctx(ctx)->execute(ctx, func, arg, ret, nb_jobs); } enum FilterFormatsState { @@ -346,23 +336,6 @@ int ff_request_frame(AVFilterLink *link); */ int ff_filter_frame(AVFilterLink *link, AVFrame *frame); -/** - * Allocate a new filter context and return it. - * - * @param filter what filter to create an instance of - * @param inst_name name to give to the new filter context - * - * @return newly created filter context or NULL on failure - */ -AVFilterContext *ff_filter_alloc(const AVFilter *filter, const char *inst_name); - -int ff_filter_activate(AVFilterContext *filter); - -/** - * Remove a filter from a graph; - */ -void ff_filter_graph_remove_filter(AVFilterGraph *graph, AVFilterContext *filter); - /** * The filter is aware of hardware frames, and any hardware frame context * should not be automatically propagated through it. @@ -405,17 +378,4 @@ int ff_filter_process_command(AVFilterContext *ctx, const char *cmd, int ff_filter_init_hw_frames(AVFilterContext *avctx, AVFilterLink *link, int default_pool_size); -/** - * Parse filter options into a dictionary. - * - * @param logctx context for logging - * @param priv_class a filter's private class for shorthand options or NULL - * @param options dictionary to store parsed options in - * @param args options string to parse - * - * @return a non-negative number on success, a negative error code on failure - */ -int ff_filter_opt_parse(void *logctx, const AVClass *priv_class, - AVDictionary **options, const char *args); - #endif /* AVFILTER_INTERNAL_H */ diff --git a/src/ExtLib/ffmpeg/libavfilter/pthread.c b/src/ExtLib/ffmpeg/libavfilter/pthread.c index 06860610a5..26243d877e 100644 --- a/src/ExtLib/ffmpeg/libavfilter/pthread.c +++ b/src/ExtLib/ffmpeg/libavfilter/pthread.c @@ -29,8 +29,7 @@ #include "libavutil/slicethread.h" #include "avfilter.h" -#include "internal.h" -#include "thread.h" +#include "avfilter_internal.h" typedef struct ThreadContext { AVFilterGraph *graph; @@ -59,7 +58,7 @@ static void slice_thread_uninit(ThreadContext *c) static int thread_execute(AVFilterContext *ctx, avfilter_action_func *func, void *arg, int *ret, int nb_jobs) { - ThreadContext *c = ctx->graph->internal->thread; + ThreadContext *c = fffiltergraph(ctx->graph)->thread; if (nb_jobs <= 0) return 0; @@ -80,8 +79,9 @@ static int thread_init_internal(ThreadContext *c, int nb_threads) return FFMAX(nb_threads, 1); } -int ff_graph_thread_init(AVFilterGraph *graph) +int ff_graph_thread_init(FFFilterGraph *graphi) { + AVFilterGraph *graph = &graphi->p; int ret; if (graph->nb_threads == 1) { @@ -89,27 +89,27 @@ int ff_graph_thread_init(AVFilterGraph *graph) return 0; } - graph->internal->thread = av_mallocz(sizeof(ThreadContext)); - if (!graph->internal->thread) + graphi->thread = av_mallocz(sizeof(ThreadContext)); + if (!graphi->thread) return AVERROR(ENOMEM); - ret = thread_init_internal(graph->internal->thread, graph->nb_threads); + ret = thread_init_internal(graphi->thread, graph->nb_threads); if (ret <= 1) { - av_freep(&graph->internal->thread); + av_freep(&graphi->thread); graph->thread_type = 0; graph->nb_threads = 1; return (ret < 0) ? ret : 0; } graph->nb_threads = ret; - graph->internal->thread_execute = thread_execute; + graphi->thread_execute = thread_execute; return 0; } -void ff_graph_thread_free(AVFilterGraph *graph) +void ff_graph_thread_free(FFFilterGraph *graph) { - if (graph->internal->thread) - slice_thread_uninit(graph->internal->thread); - av_freep(&graph->internal->thread); + if (graph->thread) + slice_thread_uninit(graph->thread); + av_freep(&graph->thread); } diff --git a/src/ExtLib/ffmpeg/libavfilter/video.c b/src/ExtLib/ffmpeg/libavfilter/video.c index b7bb17fb87..dac5c25512 100644 --- a/src/ExtLib/ffmpeg/libavfilter/video.c +++ b/src/ExtLib/ffmpeg/libavfilter/video.c @@ -29,6 +29,7 @@ #include "libavutil/imgutils.h" #include "avfilter.h" +#include "avfilter_internal.h" #include "framepool.h" #include "internal.h" #include "video.h" @@ -47,6 +48,7 @@ AVFrame *ff_null_get_video_buffer(AVFilterLink *link, int w, int h) AVFrame *ff_default_get_video_buffer2(AVFilterLink *link, int w, int h, int align) { + FilterLinkInternal *const li = ff_link_internal(link); AVFrame *frame = NULL; int pool_width = 0; int pool_height = 0; @@ -68,13 +70,13 @@ AVFrame *ff_default_get_video_buffer2(AVFilterLink *link, int w, int h, int alig return frame; } - if (!link->frame_pool) { - link->frame_pool = ff_frame_pool_video_init(av_buffer_allocz, w, h, - link->format, align); - if (!link->frame_pool) + if (!li->frame_pool) { + li->frame_pool = ff_frame_pool_video_init(av_buffer_allocz, w, h, + link->format, align); + if (!li->frame_pool) return NULL; } else { - if (ff_frame_pool_get_video_config(link->frame_pool, + if (ff_frame_pool_get_video_config(li->frame_pool, &pool_width, &pool_height, &pool_format, &pool_align) < 0) { return NULL; @@ -83,15 +85,15 @@ AVFrame *ff_default_get_video_buffer2(AVFilterLink *link, int w, int h, int alig if (pool_width != w || pool_height != h || pool_format != link->format || pool_align != align) { - ff_frame_pool_uninit((FFFramePool **)&link->frame_pool); - link->frame_pool = ff_frame_pool_video_init(av_buffer_allocz, w, h, - link->format, align); - if (!link->frame_pool) + ff_frame_pool_uninit(&li->frame_pool); + li->frame_pool = ff_frame_pool_video_init(av_buffer_allocz, w, h, + link->format, align); + if (!li->frame_pool) return NULL; } } - frame = ff_frame_pool_get(link->frame_pool); + frame = ff_frame_pool_get(li->frame_pool); if (!frame) return NULL; diff --git a/src/ExtLib/ffmpeg/libavutil/channel_layout.c b/src/ExtLib/ffmpeg/libavutil/channel_layout.c index 8b488c48c0..95c4a5b202 100644 --- a/src/ExtLib/ffmpeg/libavutil/channel_layout.c +++ b/src/ExtLib/ffmpeg/libavutil/channel_layout.c @@ -679,6 +679,29 @@ int av_channel_layout_copy(AVChannelLayout *dst, const AVChannelLayout *src) return 0; } +static int64_t masked_description(const AVChannelLayout *channel_layout, int start_channel) +{ + uint64_t mask = 0; + for (int i = start_channel; i < channel_layout->nb_channels; i++) { + enum AVChannel ch = channel_layout->u.map[i].id; + if (ch >= 0 && ch < 63 && mask < (1ULL << ch)) + mask |= (1ULL << ch); + else + return AVERROR(EINVAL); + } + return mask; +} + +static int has_channel_names(const AVChannelLayout *channel_layout) +{ + if (channel_layout->order != AV_CHANNEL_ORDER_CUSTOM) + return 0; + for (int i = 0; i < channel_layout->nb_channels; i++) + if (channel_layout->u.map[i].name[0]) + return 1; + return 0; +} + /** * If the layout is n-th order standard-order ambisonic, with optional * extra non-diegetic channels at the end, return the order. @@ -746,9 +769,17 @@ static int try_describe_ambisonic(AVBPrint *bp, const AVChannelLayout *channel_l extra.nb_channels = av_popcount64(channel_layout->u.mask); extra.u.mask = channel_layout->u.mask; } else { - extra.order = AV_CHANNEL_ORDER_CUSTOM; - extra.nb_channels = channel_layout->nb_channels - nb_ambi_channels; - extra.u.map = channel_layout->u.map + nb_ambi_channels; + int64_t mask; + if (!has_channel_names(channel_layout) && + (mask = masked_description(channel_layout, nb_ambi_channels)) > 0) { + extra.order = AV_CHANNEL_ORDER_NATIVE; + extra.nb_channels = av_popcount64(mask); + extra.u.mask = mask; + } else { + extra.order = AV_CHANNEL_ORDER_CUSTOM; + extra.nb_channels = channel_layout->nb_channels - nb_ambi_channels; + extra.u.map = channel_layout->u.map + nb_ambi_channels; + } } av_bprint_chars(bp, '+', 1); @@ -774,9 +805,17 @@ int av_channel_layout_describe_bprint(const AVChannelLayout *channel_layout, // fall-through case AV_CHANNEL_ORDER_CUSTOM: if (channel_layout->order == AV_CHANNEL_ORDER_CUSTOM) { + int64_t mask; int res = try_describe_ambisonic(bp, channel_layout); if (res >= 0) return 0; + if (!has_channel_names(channel_layout) && + (mask = masked_description(channel_layout, 0)) > 0) { + AVChannelLayout native = { .order = AV_CHANNEL_ORDER_NATIVE, + .nb_channels = av_popcount64(mask), + .u.mask = mask }; + return av_channel_layout_describe_bprint(&native, bp); + } } if (channel_layout->nb_channels) av_bprintf(bp, "%d channels (", channel_layout->nb_channels); @@ -1037,29 +1076,6 @@ uint64_t av_channel_layout_subset(const AVChannelLayout *channel_layout, return ret; } -static int64_t masked_description(AVChannelLayout *channel_layout, int start_channel) -{ - uint64_t mask = 0; - for (int i = start_channel; i < channel_layout->nb_channels; i++) { - enum AVChannel ch = channel_layout->u.map[i].id; - if (ch >= 0 && ch < 63 && mask < (1ULL << ch)) - mask |= (1ULL << ch); - else - return AVERROR(EINVAL); - } - return mask; -} - -static int has_channel_names(AVChannelLayout *channel_layout) -{ - if (channel_layout->order != AV_CHANNEL_ORDER_CUSTOM) - return 0; - for (int i = 0; i < channel_layout->nb_channels; i++) - if (channel_layout->u.map[i].name[0]) - return 1; - return 0; -} - int av_channel_layout_retype(AVChannelLayout *channel_layout, enum AVChannelOrder order, int flags) { int allow_lossy = !(flags & AV_CHANNEL_LAYOUT_RETYPE_FLAG_LOSSLESS); diff --git a/src/ExtLib/ffmpeg/libavutil/channel_layout.h b/src/ExtLib/ffmpeg/libavutil/channel_layout.h index d8c76f9005..2098633f40 100644 --- a/src/ExtLib/ffmpeg/libavutil/channel_layout.h +++ b/src/ExtLib/ffmpeg/libavutil/channel_layout.h @@ -119,7 +119,7 @@ enum AVChannelOrder { /** * The channel order does not correspond to any other predefined order and * is stored as an explicit map. For example, this could be used to support - * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_SILENCE) + * layouts with 64 or more channels, or with empty/skipped (AV_CHAN_UNUSED) * channels at arbitrary positions. */ AV_CHANNEL_ORDER_CUSTOM, @@ -146,6 +146,10 @@ enum AVChannelOrder { * as defined in AmbiX format $ 2.1. */ AV_CHANNEL_ORDER_AMBISONIC, + /** + * Number of channel orders, not part of ABI/API + */ + FF_CHANNEL_ORDER_NB }; diff --git a/src/ExtLib/ffmpeg/libavutil/common.h b/src/ExtLib/ffmpeg/libavutil/common.h index 312d601977..ab333dc508 100644 --- a/src/ExtLib/ffmpeg/libavutil/common.h +++ b/src/ExtLib/ffmpeg/libavutil/common.h @@ -42,6 +42,13 @@ #include "attributes.h" #include "error.h" #include "macros.h" +#include "mem.h" + +#ifdef HAVE_AV_CONFIG_H +# include "config.h" +# include "intmath.h" +# include "internal.h" +#endif /* HAVE_AV_CONFIG_H */ //rounded division & shift #define RSHIFT(a,b) ((a) > 0 ? ((a) + ((1<<(b))>>1))>>(b) : ((a) + ((1<<(b))>>1)-1)>>(b)) @@ -84,11 +91,6 @@ /* misc math functions */ -#ifdef HAVE_AV_CONFIG_H -# include "config.h" -# include "intmath.h" -#endif - #ifndef av_ceil_log2 # define av_ceil_log2 av_ceil_log2_c #endif @@ -568,12 +570,4 @@ static av_always_inline av_const int av_parity_c(uint32_t v) }\ }\ - - -#include "mem.h" - -#ifdef HAVE_AV_CONFIG_H -# include "internal.h" -#endif /* HAVE_AV_CONFIG_H */ - #endif /* AVUTIL_COMMON_H */ diff --git a/src/ExtLib/ffmpeg/libavutil/intreadwrite.h b/src/ExtLib/ffmpeg/libavutil/intreadwrite.h index a768c9a9e3..910423d1ac 100644 --- a/src/ExtLib/ffmpeg/libavutil/intreadwrite.h +++ b/src/ExtLib/ffmpeg/libavutil/intreadwrite.h @@ -583,9 +583,7 @@ union unaligned_16 { uint16_t l; } __attribute__((packed)) av_alias; #endif /* Parameters for AV_COPY*, AV_SWAP*, AV_ZERO* must be - * naturally aligned. They may be implemented using MMX, - * so emms_c() must be called before using any float code - * afterwards. + * naturally aligned. */ #define AV_COPY(n, d, s) \ diff --git a/src/ExtLib/ffmpeg/libavutil/pixfmt.h b/src/ExtLib/ffmpeg/libavutil/pixfmt.h index 9c87571f49..3ffba7c0d3 100644 --- a/src/ExtLib/ffmpeg/libavutil/pixfmt.h +++ b/src/ExtLib/ffmpeg/libavutil/pixfmt.h @@ -32,6 +32,13 @@ #define AVPALETTE_SIZE 1024 #define AVPALETTE_COUNT 256 +/** + * Maximum number of planes in any pixel format. + * This should be used when a maximum is needed, but code should not + * be written to require a maximum for no good reason. + */ +#define AV_VIDEO_MAX_PLANES 4 + /** * Pixel format. * diff --git a/src/ExtLib/ffmpeg/libavutil/tx.c b/src/ExtLib/ffmpeg/libavutil/tx.c index cc360cff31..f991618b4b 100644 --- a/src/ExtLib/ffmpeg/libavutil/tx.c +++ b/src/ExtLib/ffmpeg/libavutil/tx.c @@ -914,10 +914,12 @@ av_cold int av_tx_init(AVTXContext **ctx, av_tx_fn *tx, enum AVTXType type, if (!(flags & AV_TX_INPLACE)) flags |= FF_TX_OUT_OF_PLACE; - if (!scale && ((type == AV_TX_FLOAT_MDCT) || (type == AV_TX_INT32_MDCT) || (type == AV_TX_FLOAT_RDFT) || (AV_TX_INT32_RDFT))) - scale = &default_scale_f; - else if (!scale && ((type == AV_TX_DOUBLE_MDCT) || (type == AV_TX_DOUBLE_RDFT))) + if (!scale && ((type == AV_TX_DOUBLE_MDCT) || (type == AV_TX_DOUBLE_DCT) || + (type == AV_TX_DOUBLE_DCT_I) || (type == AV_TX_DOUBLE_DST_I) || + (type == AV_TX_DOUBLE_RDFT))) scale = &default_scale_d; + else if (!scale && !TYPE_IS(FFT, type)) + scale = &default_scale_f; ret = ff_tx_init_subtx(&tmp, type, flags, NULL, len, inv, scale); if (ret < 0) diff --git a/src/ExtLib/ffmpeg/libavutil/version.c b/src/ExtLib/ffmpeg/libavutil/version.c index b0f4f94a7a..baead7c4a0 100644 --- a/src/ExtLib/ffmpeg/libavutil/version.c +++ b/src/ExtLib/ffmpeg/libavutil/version.c @@ -18,14 +18,9 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA */ -#include - #include "config.h" #include "avassert.h" #include "avutil.h" -#include "common.h" -#include "libm.h" -#include "log.h" #include "samplefmt.h" #include "version.h" @@ -43,18 +38,6 @@ unsigned avutil_version(void) av_assert0(AVMEDIA_TYPE_ATTACHMENT == 4); av_assert0(AV_PICTURE_TYPE_BI == 7); av_assert0(LIBAVUTIL_VERSION_MICRO >= 100); - av_assert0(HAVE_MMX2 == HAVE_MMXEXT); - - av_assert0(((size_t)-1) > 0); // C guarantees this but if false on a platform we care about revert at least b284e1ffe343d6697fb950d1ee517bafda8a9844 - - if (av_sat_dadd32(1, 2) != 5) { - av_log(NULL, AV_LOG_FATAL, "Libavutil has been built with a broken binutils, please upgrade binutils and rebuild\n"); - abort(); - } - - if (llrint(1LL<<60) != 1LL<<60) { - av_log(NULL, AV_LOG_ERROR, "Libavutil has been linked to a broken llrint()\n"); - } return LIBAVUTIL_VERSION_INT; } diff --git a/src/ExtLib/ffmpeg/libavutil/version.h b/src/ExtLib/ffmpeg/libavutil/version.h index cebf4a0acd..9f45af93df 100644 --- a/src/ExtLib/ffmpeg/libavutil/version.h +++ b/src/ExtLib/ffmpeg/libavutil/version.h @@ -79,7 +79,7 @@ */ #define LIBAVUTIL_VERSION_MAJOR 58 -#define LIBAVUTIL_VERSION_MINOR 38 +#define LIBAVUTIL_VERSION_MINOR 39 #define LIBAVUTIL_VERSION_MICRO 100 #define LIBAVUTIL_VERSION_INT AV_VERSION_INT(LIBAVUTIL_VERSION_MAJOR, \ From a26d277b7eac86faf81155c5e12ea2e1ddf6566d Mon Sep 17 00:00:00 2001 From: v0lt Date: Wed, 21 Feb 2024 06:55:33 +0300 Subject: [PATCH 82/87] =?UTF-8?q?workflows/main.yml:=20=D0=BA=D0=BE=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BE?= =?UTF-8?q?=D0=BF=D0=B8=D1=81=D0=B0=D0=BD=D0=B8=D1=8F=20=D1=88=D0=B0=D0=B3?= =?UTF-8?q?=D0=B0=20=D1=81=D0=B1=D0=BE=D1=80=D0=BA=D0=B8.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index cc6d83f7f7..1e65123c4b 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -43,7 +43,7 @@ jobs: .\\build.bat Clean All shell: pwsh - - name: Build MPC-BE and standalone filters + - name: Build MPC-BE run: | .\\build.bat Build Packages shell: pwsh From b1e567623b15a1dae4f1c1ccd1079723c0bd028c Mon Sep 17 00:00:00 2001 From: v0lt Date: Wed, 21 Feb 2024 07:10:49 +0300 Subject: [PATCH 83/87] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D1=80=D0=B0=D0=B7?= =?UTF-8?q?=D0=BC=D0=B5=D1=80=D0=B0=20=D0=BA=D0=BE=D0=BD=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=BB=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mpcresources/mplayerc.br.rc | 2 +- src/apps/mpcresources/mplayerc.by.rc | 2 +- src/apps/mpcresources/mplayerc.ca.rc | 2 +- src/apps/mpcresources/mplayerc.cz.rc | 2 +- src/apps/mpcresources/mplayerc.de.rc | 2 +- src/apps/mpcresources/mplayerc.el.rc | 2 +- src/apps/mpcresources/mplayerc.es.rc | 2 +- src/apps/mpcresources/mplayerc.eu.rc | 2 +- src/apps/mpcresources/mplayerc.fr.rc | 2 +- src/apps/mpcresources/mplayerc.he.rc | 2 +- src/apps/mpcresources/mplayerc.hr.rc | 2 +- src/apps/mpcresources/mplayerc.hu.rc | 2 +- src/apps/mpcresources/mplayerc.hy.rc | 2 +- src/apps/mpcresources/mplayerc.it.rc | 2 +- src/apps/mpcresources/mplayerc.ja.rc | 2 +- src/apps/mpcresources/mplayerc.kr.rc | 2 +- src/apps/mpcresources/mplayerc.nl.rc | 2 +- src/apps/mpcresources/mplayerc.pl.rc | 2 +- src/apps/mpcresources/mplayerc.ro.rc | 2 +- src/apps/mpcresources/mplayerc.ru.rc | 2 +- src/apps/mpcresources/mplayerc.sc.rc | 2 +- src/apps/mpcresources/mplayerc.sk.rc | 2 +- src/apps/mpcresources/mplayerc.sv.rc | 2 +- src/apps/mpcresources/mplayerc.tc.rc | 2 +- src/apps/mpcresources/mplayerc.tr.rc | 2 +- src/apps/mpcresources/mplayerc.ua.rc | 2 +- src/apps/mplayerc/mplayerc.rc | 2 +- 27 files changed, 27 insertions(+), 27 deletions(-) diff --git a/src/apps/mpcresources/mplayerc.br.rc b/src/apps/mpcresources/mplayerc.br.rc index 00bf05bc12..eb3a7d123a 100644 --- a/src/apps/mpcresources/mplayerc.br.rc +++ b/src/apps/mpcresources/mplayerc.br.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Usar marcador de capítulos",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Usar barra de voar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Tamanho da fonte da lista de reprodução:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.by.rc b/src/apps/mpcresources/mplayerc.by.rc index 7edcf16f23..d6e1509048 100644 --- a/src/apps/mpcresources/mplayerc.by.rc +++ b/src/apps/mpcresources/mplayerc.by.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ca.rc b/src/apps/mpcresources/mplayerc.ca.rc index f3f14a51d4..dfef7d777f 100644 --- a/src/apps/mpcresources/mplayerc.ca.rc +++ b/src/apps/mpcresources/mplayerc.ca.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.cz.rc b/src/apps/mpcresources/mplayerc.cz.rc index 72cb5b28ee..7bfd294160 100644 --- a/src/apps/mpcresources/mplayerc.cz.rc +++ b/src/apps/mpcresources/mplayerc.cz.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.de.rc b/src/apps/mpcresources/mplayerc.de.rc index 8e1b10d2b9..599ffd3d67 100644 --- a/src/apps/mpcresources/mplayerc.de.rc +++ b/src/apps/mpcresources/mplayerc.de.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Kapitelmarker in der Suchleiste anzeigen",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Flybar aktivieren",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Schriftgröße der Wiedergabeliste:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.el.rc b/src/apps/mpcresources/mplayerc.el.rc index bb3b94e400..d46584673d 100644 --- a/src/apps/mpcresources/mplayerc.el.rc +++ b/src/apps/mpcresources/mplayerc.el.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Εμφάνιση σημάνσεων κεφαλαίων στη γραμμή αναζήτησης",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Χρήση εναέριας μπάρας",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Μέγεθος γραμματοσειράς λίστας αναπαραγωγής:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.es.rc b/src/apps/mpcresources/mplayerc.es.rc index d21675db56..c2ddfd5c40 100644 --- a/src/apps/mpcresources/mplayerc.es.rc +++ b/src/apps/mpcresources/mplayerc.es.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "En línea",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "En línea",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Usar marcador de capítulos",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Usar barra flotante",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Tamaño de fuente de Lista de Reproducción:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.eu.rc b/src/apps/mpcresources/mplayerc.eu.rc index 353b340781..a0349751f8 100644 --- a/src/apps/mpcresources/mplayerc.eu.rc +++ b/src/apps/mpcresources/mplayerc.eu.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Erabili atal markatzailea",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Erabili gainbarra",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.fr.rc b/src/apps/mpcresources/mplayerc.fr.rc index e21a4ec6ad..5934f912b3 100644 --- a/src/apps/mpcresources/mplayerc.fr.rc +++ b/src/apps/mpcresources/mplayerc.fr.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Utiliser le marqueur de chapitres",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Utiliser la barre volante",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Taille de la police de la Playlist:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.he.rc b/src/apps/mpcresources/mplayerc.he.rc index 6fd357dbe3..56ea9fbb4c 100644 --- a/src/apps/mpcresources/mplayerc.he.rc +++ b/src/apps/mpcresources/mplayerc.he.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.hr.rc b/src/apps/mpcresources/mplayerc.hr.rc index 07f4e550a7..4bb38af4a3 100644 --- a/src/apps/mpcresources/mplayerc.hr.rc +++ b/src/apps/mpcresources/mplayerc.hr.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Koristi marker poglavlja",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Koristi flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Veličina fonta playliste:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.hu.rc b/src/apps/mpcresources/mplayerc.hu.rc index d2e989d9d3..9beaf7f656 100644 --- a/src/apps/mpcresources/mplayerc.hu.rc +++ b/src/apps/mpcresources/mplayerc.hu.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Használjon fejezetjelölőt",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Használjon léptéket",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Lejátszási lista betüméret:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.hy.rc b/src/apps/mpcresources/mplayerc.hy.rc index 34cfdb1c24..4b794f5c05 100644 --- a/src/apps/mpcresources/mplayerc.hy.rc +++ b/src/apps/mpcresources/mplayerc.hy.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.it.rc b/src/apps/mpcresources/mplayerc.it.rc index 8dee7e4aa4..294df20dca 100644 --- a/src/apps/mpcresources/mplayerc.it.rc +++ b/src/apps/mpcresources/mplayerc.it.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Usa marcatore capitoli",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Usa la flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Dimensione carattere playlist:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ja.rc b/src/apps/mpcresources/mplayerc.ja.rc index 6e258c0f45..04e799b9bf 100644 --- a/src/apps/mpcresources/mplayerc.ja.rc +++ b/src/apps/mpcresources/mplayerc.ja.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "チャプター マーカーを使用する",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "フライ バーを使用する",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "プレイリスト フォント サイズ:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.kr.rc b/src/apps/mpcresources/mplayerc.kr.rc index 267ca6b474..19c5f6f766 100644 --- a/src/apps/mpcresources/mplayerc.kr.rc +++ b/src/apps/mpcresources/mplayerc.kr.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "챕터 구분 표기 사용",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "플라이바 사용",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "재생 목록 글자 크기 :",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.nl.rc b/src/apps/mpcresources/mplayerc.nl.rc index c64a31ab24..e02980635d 100644 --- a/src/apps/mpcresources/mplayerc.nl.rc +++ b/src/apps/mpcresources/mplayerc.nl.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Toon hoofdstukmarkeringen op zoekbalk",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Gebruik flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Tekengrootte van afspeellijst:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.pl.rc b/src/apps/mpcresources/mplayerc.pl.rc index c032678057..ca05a47052 100644 --- a/src/apps/mpcresources/mplayerc.pl.rc +++ b/src/apps/mpcresources/mplayerc.pl.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Pokaż znacznik rozdziałów",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Użyj flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Rozmiar czcionki listy odtwarzania:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ro.rc b/src/apps/mpcresources/mplayerc.ro.rc index a9f395d724..7c281c13c5 100644 --- a/src/apps/mpcresources/mplayerc.ro.rc +++ b/src/apps/mpcresources/mplayerc.ro.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Arată semne pentru capitole în bara de căutare",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Folosește bara pentru sărituri",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Dimensiunea scrisului (fontului) listei de redare:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ru.rc b/src/apps/mpcresources/mplayerc.ru.rc index 7a19b47dec..a9b582460b 100644 --- a/src/apps/mpcresources/mplayerc.ru.rc +++ b/src/apps/mpcresources/mplayerc.ru.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Онлайн",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Онлайн",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Использовать маркер для чаптеров",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Показать панель управления поверх видео",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Размер шрифта плейлиста:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.sc.rc b/src/apps/mpcresources/mplayerc.sc.rc index 236b4ffcbd..b184c9bb60 100644 --- a/src/apps/mpcresources/mplayerc.sc.rc +++ b/src/apps/mpcresources/mplayerc.sc.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "在线视频",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "在线视频",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "显示章节标记",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "全屏模式时启用悬浮工具条",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "播放列表字体大小:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.sk.rc b/src/apps/mpcresources/mplayerc.sk.rc index 9246452997..ec3f975a4a 100644 --- a/src/apps/mpcresources/mplayerc.sk.rc +++ b/src/apps/mpcresources/mplayerc.sk.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.sv.rc b/src/apps/mpcresources/mplayerc.sv.rc index 9c3a1bf137..f8c34fcb3a 100644 --- a/src/apps/mpcresources/mplayerc.sv.rc +++ b/src/apps/mpcresources/mplayerc.sv.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.tc.rc b/src/apps/mpcresources/mplayerc.tc.rc index 3274ab2cd1..8483742623 100644 --- a/src/apps/mpcresources/mplayerc.tc.rc +++ b/src/apps/mpcresources/mplayerc.tc.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "搜尋列顯示章節標籤",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "使用浮動工具列(flybar)",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "播放清單字型大小",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.tr.rc b/src/apps/mpcresources/mplayerc.tr.rc index ded0a530b0..0fc2d882f0 100644 --- a/src/apps/mpcresources/mplayerc.tr.rc +++ b/src/apps/mpcresources/mplayerc.tr.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Çevrim içi",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Çevrim içi",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Bölüm işaretlerini göster",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Şeffaf Çubuğu göster",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Oynatma listesi yazı tipi boyutu:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mpcresources/mplayerc.ua.rc b/src/apps/mpcresources/mplayerc.ua.rc index 3c540e844a..e92b37046b 100644 --- a/src/apps/mpcresources/mplayerc.ua.rc +++ b/src/apps/mpcresources/mplayerc.ua.rc @@ -440,7 +440,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Використовувати маркери розділів",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Використовувати flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Розмір шрифта списка відтворення:",IDC_STATIC,13,165,110,8 diff --git a/src/apps/mplayerc/mplayerc.rc b/src/apps/mplayerc/mplayerc.rc index 473a5d9ebc..b5ef471c70 100644 --- a/src/apps/mplayerc/mplayerc.rc +++ b/src/apps/mplayerc/mplayerc.rc @@ -439,7 +439,7 @@ BEGIN EDITTEXT IDC_EDIT1,142,125,25,13,ES_RIGHT | ES_AUTOHSCROLL | ES_NUMBER LTEXT "%",IDC_STATIC7,170,127,10,8 COMBOBOX IDC_COMBO4,183,126,42,64,CBS_DROPDOWNLIST | WS_VSCROLL | WS_TABSTOP - CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,231,127,60,8,WS_EX_TRANSPARENT + CONTROL "Online",IDC_CHECK6,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,230,127,58,8,WS_EX_TRANSPARENT CONTROL "Use chapters marker",IDC_CHECK_CHM,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,139,182,9 CONTROL "Use flybar",IDC_CHECK_FLYBAR,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,152,182,9 LTEXT "Playlist font size:",IDC_STATIC,13,165,110,8 From a3976e63c8dd532e8f7b315190d24673e5dd2502 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Thu, 22 Feb 2024 09:20:11 +1000 Subject: [PATCH 84/87] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0/=D0=BA=D0=BE=D1=81?= =?UTF-8?q?=D0=BC=D0=B5=D1=82=D0=B8=D0=BA=D0=B0=20=D0=BA=D0=BE=D0=B4=D0=B0?= =?UTF-8?q?.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/FileItem.h | 5 ++- src/apps/mplayerc/PlayerPlaylistBar.cpp | 50 ++++++++++++------------- 2 files changed, 28 insertions(+), 27 deletions(-) diff --git a/src/apps/mplayerc/FileItem.h b/src/apps/mplayerc/FileItem.h index 5ddc71296b..99f80854c5 100644 --- a/src/apps/mplayerc/FileItem.h +++ b/src/apps/mplayerc/FileItem.h @@ -96,8 +96,9 @@ class CFileItem }; // Chapters - void AddChapter(const Chapters& chapter) { - m_chapters.emplace_back(chapter); + template + void AddChapter(Args&&... args) { + m_chapters.emplace_back(args ...); } void ClearChapter() { diff --git a/src/apps/mplayerc/PlayerPlaylistBar.cpp b/src/apps/mplayerc/PlayerPlaylistBar.cpp index b79f0e5b36..0170b2fe9e 100644 --- a/src/apps/mplayerc/PlayerPlaylistBar.cpp +++ b/src/apps/mplayerc/PlayerPlaylistBar.cpp @@ -379,7 +379,7 @@ void CPlaylistItem::AutoLoadFiles() auto name = RemoveFileExt(GetFileOnly(fpath)); auto ext = GetFileExt(fpath); - CString BDLabel, empty; + CStringW BDLabel, empty; AfxGetMainFrame()->MakeBDLabel(fpath, empty, &BDLabel); if (BDLabel.GetLength()) { FixFilename(BDLabel); @@ -388,7 +388,7 @@ void CPlaylistItem::AutoLoadFiles() CAppSettings& s = AfxGetAppSettings(); if (s.fAutoloadAudio) { - std::vector paths; + std::vector paths; StringToPaths(curdir, s.strAudioPaths, paths); for (const auto& apa : s.slAudioPathsAddons) { @@ -398,7 +398,7 @@ void CPlaylistItem::AutoLoadFiles() CMediaFormats& mf = s.m_Formats; if (!mf.FindAudioExt(ext)) { for (const auto& path : paths) { - std::vector searchPattern; + std::vector searchPattern; searchPattern.emplace_back(path + name + L".*"); // more general filename mask, clarification will follow if (BDLabel.GetLength()) { searchPattern.emplace_back(path + BDLabel + L".*"); @@ -407,25 +407,25 @@ void CPlaylistItem::AutoLoadFiles() WIN32_FIND_DATAW fd = {}; HANDLE hFind; - for (size_t j = 0; j < searchPattern.size(); j++) { - hFind = FindFirstFileW(searchPattern[j], &fd); + for (const auto& pattern : searchPattern) { + hFind = FindFirstFileW(pattern, &fd); if (hFind != INVALID_HANDLE_VALUE) { do { if (fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { continue; } - const CStringW fn(fd.cFileName); + CStringW fn(fd.cFileName); if (fn[name.GetLength()] != L'.') { continue; } const CStringW ext2 = GetFileExt(fn); - if (ext == ext2 || !mf.FindAudioExt(ext2)) { + if (ext.CompareNoCase(ext2) == 0 || !mf.FindAudioExt(ext2)) { continue; } - const CStringW fullpath = path + fn; - if (!FindFileInList(m_auds, fullpath)) { - m_auds.emplace_back(fullpath); + fn = path + fn; + if (!FindFileInList(m_auds, fn)) { + m_auds.emplace_back(fn); } } while (FindNextFileW(hFind, &fd)); @@ -437,14 +437,14 @@ void CPlaylistItem::AutoLoadFiles() } if (s.IsISRAutoLoadEnabled()) { - std::vector paths; + std::vector paths; StringToPaths(curdir, s.strSubtitlePaths, paths); for (const auto& spa : s.slSubtitlePathsAddons) { paths.emplace_back(spa); } - std::vector ret; + std::vector ret; Subtitle::GetSubFileNames(fpath, paths, ret); for (const auto& sub_fn : ret) { @@ -468,18 +468,18 @@ void CPlaylistItem::AutoLoadFiles() // cue-sheet file auto-load const CString cuefn = RenameFileExt(fpath, L".cue"); if (::PathFileExistsW(cuefn)) { - CString filter; - std::vector mask; - AfxGetAppSettings().m_Formats.GetAudioFilter(filter, mask); - std::list sl; + CStringW filter; + std::vector mask; + s.m_Formats.GetAudioFilter(filter, mask); + std::list sl; Explode(mask[0], sl, L';'); - BOOL bExists = false; - for (CString _mask : sl) { + bool bExists = false; + for (auto _mask : sl) { _mask.Delete(0, 2); _mask.MakeLower(); if (_mask == ext) { - bExists = TRUE; + bExists = true; break; } } @@ -488,7 +488,7 @@ void CPlaylistItem::AutoLoadFiles() CFileItem* fi = &m_fi; if (!fi->GetChapterCount()) { - CString Title, Performer; + CStringW Title, Performer; std::list CUETrackList; if (ParseCUESheetFile(cuefn, CUETrackList, Title, Performer)) { std::list fileNames; @@ -504,18 +504,18 @@ void CPlaylistItem::AutoLoadFiles() MakeCUETitle(m_label, Title, Performer); for (const auto& cueTrack : CUETrackList) { - CString cueTrackTitle; + CStringW cueTrackTitle; MakeCUETitle(cueTrackTitle, cueTrack.m_Title, cueTrack.m_Performer, cueTrack.m_trackNum); - fi->AddChapter(Chapters{cueTrackTitle, cueTrack.m_rt}); + fi->AddChapter(cueTrackTitle, cueTrack.m_rt); } fi->SetTitle(m_label); ChaptersList chaplist; fi->GetChapters(chaplist); - BOOL bTrustedChap = FALSE; + bool bTrustedChap = false; for (size_t i = 0; i < chaplist.size(); i++) { if (chaplist[i].rt > 0) { - bTrustedChap = TRUE; + bTrustedChap = true; break; } } @@ -1917,7 +1917,7 @@ bool CPlayerPlaylistBar::ParseCUEPlayList(CString fn) if (cueTrack.m_fn == fName) { CString cueTrackTitle; MakeCUETitle(cueTrackTitle, cueTrack.m_Title, cueTrack.m_Performer, cueTrack.m_trackNum); - fi.AddChapter(Chapters{cueTrackTitle, cueTrack.m_rt}); + fi.AddChapter(cueTrackTitle, cueTrack.m_rt); if (bFirst && fileNames.size() > 1) { MakeCUETitle(pli.m_label, cueTrack.m_Title, cueTrack.m_Performer); From fd13cf66bf5efe91e28f8652fdcf30435af285d6 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Thu, 22 Feb 2024 10:08:02 +1000 Subject: [PATCH 85/87] =?UTF-8?q?=D0=94=D0=BE=D1=80=D0=B0=D0=B1=D0=BE?= =?UTF-8?q?=D1=82=D0=BA=D0=B0=20=D0=B4=D0=BB=D1=8F=20acestream=20-=20?= =?UTF-8?q?=D1=82=D0=B5=D0=BF=D0=B5=D1=80=D1=8C=20=D0=BA=D0=BE=D1=80=D1=80?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=D0=BD=D0=BE=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=B0=D1=82=D1=8B=D0=B2=D0=B0=D0=B5=D1=82=20=D0=B7=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BF=D1=80=D0=B8=D0=BE=D1=80?= =?UTF-8?q?=D0=B8=D1=82=D0=B5=D1=82=20=D1=84=D0=B8=D0=BB=D1=8C=D1=82=D1=80?= =?UTF-8?q?=D0=BE=D0=B2=20=D0=B2=20=D0=BD=D0=B0=D1=81=D1=82=D1=80=D0=BE?= =?UTF-8?q?=D0=B9=D0=BA=D0=B0=D1=85=20=D0=B4=D0=BB=D1=8F=20HTTP.=20=D0=9A?= =?UTF-8?q?=D0=BE=D1=81=D0=BC=D0=B5=D1=82=D0=B8=D0=BA=D0=B0=20=D0=BA=D0=BE?= =?UTF-8?q?=D0=B4=D0=B0.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/apps/mplayerc/Content.cpp | 9 +++-- src/apps/mplayerc/FGManager.cpp | 60 ++++++++++++++++----------------- 2 files changed, 37 insertions(+), 32 deletions(-) diff --git a/src/apps/mplayerc/Content.cpp b/src/apps/mplayerc/Content.cpp index b263204b40..42027de665 100644 --- a/src/apps/mplayerc/Content.cpp +++ b/src/apps/mplayerc/Content.cpp @@ -1,5 +1,5 @@ /* - * (C) 2016-2023 see Authors.txt + * (C) 2016-2024 see Authors.txt * * This file is part of MPC-BE. * @@ -99,6 +99,7 @@ namespace Content { CString ct; CString body; CString hdr; + CString realPath; }; static std::map Contents; @@ -146,6 +147,7 @@ namespace Content { CString realPath(fn); CorrectAceStream(realPath); + content.realPath = realPath; content.bHTTPConnected = (content.HTTPAsync->Connect(realPath, AfxGetAppSettings().iNetworkTimeout * 1000, L"Icy-MetaData: 1\r\n") == S_OK); content.hdr = content.HTTPAsync->GetHeader(); @@ -471,7 +473,10 @@ namespace Content { void GetRaw(const CString& fn, std::vector& raw) { - auto it = Contents.find(fn); + auto it = std::find_if(Contents.begin(), Contents.end(), [&fn](const auto& pair) { + return pair.first == fn || pair.second.realPath == fn; + }); + if (it != Contents.end()) { auto& content = it->second; raw = content.raw; diff --git a/src/apps/mplayerc/FGManager.cpp b/src/apps/mplayerc/FGManager.cpp index 054c637dcb..cc381bae41 100644 --- a/src/apps/mplayerc/FGManager.cpp +++ b/src/apps/mplayerc/FGManager.cpp @@ -454,40 +454,40 @@ HRESULT CFGManager::EnumSourceFilters(LPCWSTR lpcwstrFileName, CFGFilterList& fl } if (type.GetLength()) { - if (const auto it = s.FiltersPriority.values.find(type); it != s.FiltersPriority.values.cend() && it->second != CLSID_NULL) { - const auto& clsid_value = it->second; - - for (const auto& pFGF : m_override) { - if (pFGF->GetCLSID() == clsid_value) { - const std::list& types = pFGF->GetTypes(); - if (types.size() && !httpbuf.size()) { - bool bIsSplitter = false; - auto it = types.cbegin(); - while (it != types.cend() && std::next(it) != types.cend()) { - CLSID major = *it++; - CLSID sub = *it++; - - if (major == MEDIATYPE_Stream) { - bIsSplitter = true; - - std::list typesNew; - typesNew.emplace_back(major); - typesNew.emplace_back(sub); - pFGF->SetTypes(typesNew); - - break; + for (const auto& [_, clsid_value] : s.FiltersPriority.values) { + if (clsid_value != CLSID_NULL) { + for (const auto& pFGF : m_override) { + if (pFGF->GetCLSID() == clsid_value) { + const std::list& types = pFGF->GetTypes(); + if (types.size() && !httpbuf.size()) { + bool bIsSplitter = false; + auto it = types.cbegin(); + while (it != types.cend() && std::next(it) != types.cend()) { + CLSID major = *it++; + CLSID sub = *it++; + + if (major == MEDIATYPE_Stream) { + bIsSplitter = true; + + std::list typesNew; + typesNew.emplace_back(major); + typesNew.emplace_back(sub); + pFGF->SetTypes(typesNew); + + break; + } + } + if (bIsSplitter) { + CFGFilter* pFGFAsync = LookupFilterRegistry(CLSID_AsyncReader, m_override, MERIT64_HIGH + 1); + fl.Insert(pFGFAsync, 0); } } - if (bIsSplitter) { - CFGFilter* pFGFAsync = LookupFilterRegistry(CLSID_AsyncReader, m_override, MERIT64_HIGH + 1); - fl.Insert(pFGFAsync, 0); - } - } - pFGF->SetMerit(MERIT64_HIGH); - fl.Insert(pFGF, 0, false, false); + pFGF->SetMerit(MERIT64_HIGH); + fl.Insert(pFGF, 0, false, false); - break; + break; + } } } } From b7ad4b0975a83268d1ac3e2626518bb0ee5b2ac9 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Thu, 22 Feb 2024 11:02:41 +1000 Subject: [PATCH 86/87] =?UTF-8?q?ffmpeg=20-=20=D1=83=D0=B1=D1=80=D0=B0?= =?UTF-8?q?=D0=BD=D0=BE=20=D0=BF=D1=80=D0=B5=D0=B4=D1=83=D0=BF=D1=80=D0=B5?= =?UTF-8?q?=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5(=D1=81=D0=B2=D1=8F=D0=B7?= =?UTF-8?q?=D0=B0=D0=BD=D0=BE=20=D1=81=20=D0=BD=D0=B0=D1=88=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=BA=D0=B0=D1=81=D1=82=D0=BE=D0=BC=D0=BD=D1=8B=D0=BC=20=D0=BA?= =?UTF-8?q?=D0=BE=D0=B4=D0=BE=D0=BC).=20=D0=94=D0=BE=D1=80=D0=B0=D0=B1?= =?UTF-8?q?=D0=BE=D1=82=D0=B0=D0=BD=20=D0=BA=D0=BE=D0=B4=20d3d11va=20?= =?UTF-8?q?=D0=B4=D0=BB=D1=8F=20HEVC=20Rext=20=D1=84=D0=BE=D1=80=D0=BC?= =?UTF-8?q?=D0=B0=D1=82=D0=BE=D0=B2,=20=D1=82=D0=B5=D0=BF=D0=B5=D1=80?= =?UTF-8?q?=D1=8C=20=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE=20=D1=81=20=D0=BD=D0=B8?= =?UTF-8?q?=D0=BC=D0=B8=20=D1=81=D0=BF=D0=BE=D0=BA=D0=BE=D0=B9=D0=BD=D0=BE?= =?UTF-8?q?=20=D0=B8=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0?= =?UTF-8?q?=D1=82=D1=8C=20av=5Fhwframe=5Ftransfer=5Fdata()=20-=20=D1=83=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=81=20=D0=BE=D0=BD=20=D0=BD=D0=B5=20=D0=B8=D1=81?= =?UTF-8?q?=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D1=83=D0=B5=D1=82=D1=81=D1=8F=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B4=D0=B0=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BC?= =?UTF-8?q?=D0=BE=D0=BC=D0=B5=D0=BD=D1=82=20=D0=BD=D0=BE=20=D1=82=D0=B0?= =?UTF-8?q?=D0=BA=20=D0=B7=D0=B0=D1=82=D0=BE=20=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BA=D0=B8=20ffmpeg=20=D0=B7=D0=B0=D0=BA=D0=BE=D0=BD=D1=87?= =?UTF-8?q?=D0=B5=D0=BD=D1=8B.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/custom_code/ffmpeg.txt | 1 + src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c | 4 ++- .../ffmpeg/libavutil/hwcontext_d3d11va.c | 25 +++++++++++++++++++ 3 files changed, 29 insertions(+), 1 deletion(-) diff --git a/docs/custom_code/ffmpeg.txt b/docs/custom_code/ffmpeg.txt index 1bdb385539..285d4234f2 100644 --- a/docs/custom_code/ffmpeg.txt +++ b/docs/custom_code/ffmpeg.txt @@ -14,6 +14,7 @@ * libavcodec/aacsbr_template.c * libavcodec/bsf_list.c * libavcodec/codec_list.c +* libavcodec/d3d12va_hevc.c * libavcodec/dxva2.c * libavcodec/dxva2_hevc.c * libavcodec/dxva2_internal.h diff --git a/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c b/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c index a4964a05c6..c99b4a1ca7 100644 --- a/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c +++ b/src/ExtLib/ffmpeg/libavcodec/d3d12va_hevc.c @@ -62,7 +62,9 @@ static int d3d12va_hevc_start_frame(AVCodecContext *avctx, av_unused const uint8 ctx->used_mask = 0; - ff_dxva2_hevc_fill_picture_parameters(avctx, (AVDXVAContext *)ctx, &ctx_pic->pp); + // ==> Start patch MPC + ff_dxva2_hevc_fill_picture_parameters(avctx, (AVDXVAContext *)ctx, (DXVA_PicParams_HEVC_Rext*)&ctx_pic->pp); + // ==> End patch MPC ff_dxva2_hevc_fill_scaling_lists(avctx, (AVDXVAContext *)ctx, &ctx_pic->qm); diff --git a/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c b/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c index c2fad859f7..9b12629854 100644 --- a/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c +++ b/src/ExtLib/ffmpeg/libavutil/hwcontext_d3d11va.c @@ -404,11 +404,36 @@ static void fill_texture_ptrs(uint8_t *data[4], int linesize[4], D3D11_TEXTURE2D_DESC *desc, D3D11_MAPPED_SUBRESOURCE *map) { +// ==> Start patch MPC + /* int i; for (i = 0; i < 4; i++) linesize[i] = map->RowPitch; + */ + int width; + int codedbytes = 1; + + switch (ctx->sw_format) { + case AV_PIX_FMT_P010: + case AV_PIX_FMT_P016: + case AV_PIX_FMT_YUYV422: + codedbytes = 2; + break; + case AV_PIX_FMT_Y210: + case AV_PIX_FMT_Y212: + case AV_PIX_FMT_VUYX: + case AV_PIX_FMT_XV30: + codedbytes = 4; + break; + case AV_PIX_FMT_XV36: + codedbytes = 8; + break; + } + width = map->RowPitch / codedbytes; + av_image_fill_linesizes(linesize, ctx->sw_format, width); +// ==> End patch MPC av_image_fill_pointers(data, ctx->sw_format, desc->Height, (uint8_t*)map->pData, linesize); } From ef23fb14a435063a713cf6b695f62049f367cc55 Mon Sep 17 00:00:00 2001 From: Aleksoid Date: Thu, 22 Feb 2024 18:52:41 +1000 Subject: [PATCH 87/87] =?UTF-8?q?=D0=9A=D0=BE=D1=80=D1=80=D0=B5=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=BA=D0=B0=20=D0=BA=D0=B0=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D0=BC=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BE=D0=B4?= =?UTF-8?q?=D0=B0=20ffmpeg.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ExtLib/ffmpeg/libavcodec/hevcdec.c | 27 ++++++++++++-------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/src/ExtLib/ffmpeg/libavcodec/hevcdec.c b/src/ExtLib/ffmpeg/libavcodec/hevcdec.c index 6dd4c91aa2..2e506f80ae 100644 --- a/src/ExtLib/ffmpeg/libavcodec/hevcdec.c +++ b/src/ExtLib/ffmpeg/libavcodec/hevcdec.c @@ -498,13 +498,6 @@ static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps) #endif #if CONFIG_HEVC_VIDEOTOOLBOX_HWACCEL *fmt++ = AV_PIX_FMT_VIDEOTOOLBOX; -#endif - break; -// ==> Start patch MPC - case AV_PIX_FMT_YUV422P12: -#if CONFIG_HEVC_D3D11VA_HWACCEL - *fmt++ = AV_PIX_FMT_D3D11VA_VLD; - *fmt++ = AV_PIX_FMT_D3D11; #endif #if CONFIG_HEVC_VULKAN_HWACCEL *fmt++ = AV_PIX_FMT_VULKAN; @@ -535,16 +528,20 @@ static enum AVPixelFormat get_format(HEVCContext *s, const HEVCSPS *sps) #endif #if CONFIG_HEVC_NVDEC_HWACCEL *fmt++ = AV_PIX_FMT_CUDA; +#endif + break; + case AV_PIX_FMT_YUV422P12: // ==> Start patch MPC -//#endif -// break; -// case AV_PIX_FMT_YUV422P12: -//#if CONFIG_HEVC_VAAPI_HWACCEL -// *fmt++ = AV_PIX_FMT_VAAPI; -//#endif -//#if CONFIG_HEVC_VULKAN_HWACCEL -// *fmt++ = AV_PIX_FMT_VULKAN; +#if CONFIG_HEVC_D3D11VA_HWACCEL + *fmt++ = AV_PIX_FMT_D3D11VA_VLD; + *fmt++ = AV_PIX_FMT_D3D11; +#endif // ==> End patch MPC +#if CONFIG_HEVC_VAAPI_HWACCEL + *fmt++ = AV_PIX_FMT_VAAPI; +#endif +#if CONFIG_HEVC_VULKAN_HWACCEL + *fmt++ = AV_PIX_FMT_VULKAN; #endif break; }