Подложка полосы задаётся на показе окна, в журнал пишутся громкости и шаги закрытия
Подложка. SetMenuInfo работает по дескриптору меню, а тот появляется вместе с дескриптором окна — то есть после создания формы. Оба прежних вызова попадали на несозданный дескриптор и молча ничего не делали. Теперь вызов идёт из показа окна. Громкости. В журнал пишется, какая дорожка какую громкость получила и какая цепочка смешивания ушла в mpv. Снимками экрана это не разобрать: в одном месте одного и того же клипа звук есть, в соседнем нет, и без цепочки видно только следствие. Закрытие. Каждый шаг отмечается в журнале: остановка предпросмотра, ожидание потоков миниатюр и разбора звука, сохранение настроек, закрытие плеера, выгрузка libmpv. Под Wine программа зависает при выходе, а по молчаливому журналу шаг не найти.
This commit is contained in:
parent
bc7418ac35
commit
11075d6b52
2 changed files with 40 additions and 0 deletions
|
|
@ -364,11 +364,18 @@ begin
|
|||
ApplyDarkTheme(Self);
|
||||
end;
|
||||
|
||||
{ Каждый шаг закрытия отмечается в журнале.
|
||||
|
||||
Под Wine программа зависала при выходе, и по молчаливому журналу
|
||||
понять, на чём именно, нельзя: последняя запись оставалась от работы, а
|
||||
не от закрытия. Записи дешёвые, а без них искать пришлось бы наугад. }
|
||||
procedure TMainForm.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
Log('Закрытие: останавливаю предпросмотр.');
|
||||
FPreviewTimer.Enabled := False;
|
||||
if Assigned(FThumbThread) then
|
||||
begin
|
||||
Log('Закрытие: жду поток миниатюр.');
|
||||
{ Поток обращается к форме через Synchronize, поэтому дожидаться его
|
||||
обязательно: иначе он попробует достучаться до уже разрушенного окна. }
|
||||
FThumbThread.Terminate;
|
||||
|
|
@ -377,6 +384,7 @@ begin
|
|||
end;
|
||||
if Assigned(FPeaksThread) then
|
||||
begin
|
||||
Log('Закрытие: жду разбор звука.');
|
||||
{ При закрытии ждать приходится: поток обращается к окну. Ждать
|
||||
недолго — запущенный ffmpeg прерывается по тому же признаку. }
|
||||
FPeaksRestart := False;
|
||||
|
|
@ -385,12 +393,17 @@ begin
|
|||
FreeAndNil(FPeaksThread);
|
||||
end;
|
||||
FreeAndNil(FThumbMap);
|
||||
Log('Закрытие: сохраняю настройки.');
|
||||
CollectSettings;
|
||||
FSettings.Save;
|
||||
FreeAndNil(FSettings);
|
||||
Log('Закрытие: закрываю плеер.');
|
||||
FreeAndNil(FPlayer);
|
||||
Log('Закрытие: выгружаю libmpv.');
|
||||
UnloadMpvLib;
|
||||
Log('Закрытие: освобождаю проект.');
|
||||
FreeAndNil(FProject);
|
||||
Log('Закрытие завершено.');
|
||||
{ Сами списки принадлежат форме и уничтожатся с ней; здесь только
|
||||
перечень ссылок на них. }
|
||||
end;
|
||||
|
|
@ -688,6 +701,15 @@ begin
|
|||
Exit;
|
||||
FStarted := True;
|
||||
|
||||
{ Подложка полосы меню задаётся здесь, а не при создании формы.
|
||||
|
||||
Она задаётся через SetMenuInfo по дескриптору меню, а тот появляется
|
||||
вместе с дескриптором окна — то есть уже после создания формы. Вызов
|
||||
из BuildMenu поэтому попадал на несозданный дескриптор и молча ничего
|
||||
не делал: пункты рисовались нашими руками, а полоса правее последнего
|
||||
названия оставалась светлой. }
|
||||
ApplyDarkMenu(Menu);
|
||||
|
||||
StartPlayer;
|
||||
|
||||
{ Файлы из командной строки попадают в список проекта. Так на программу
|
||||
|
|
@ -2023,7 +2045,22 @@ begin
|
|||
if Key = FLastVolumeKey then
|
||||
Exit;
|
||||
FLastVolumeKey := Key;
|
||||
|
||||
{ Кто какую громкость получил — в журнал. Иначе разбираться, почему в
|
||||
одном месте звук есть, а в соседнем нет, приходится по снимкам
|
||||
экрана. }
|
||||
Key := '';
|
||||
for I := 0 to High(FPreviewAudioTracks) do
|
||||
begin
|
||||
if Key <> '' then
|
||||
Key := Key + ', ';
|
||||
Key := Key + FPreviewAudioTracks[I].Name + '=' + SecondsToStr(Vols[I]);
|
||||
end;
|
||||
Log(Format('Громкости на %s: %s', [SecondsToStr(ATime), Key]));
|
||||
|
||||
FPlayer.SetTrackVolumes(Vols);
|
||||
if FPlayer.AudioGraph <> '' then
|
||||
Log('Цепочка звука: ' + FPlayer.AudioGraph);
|
||||
end;
|
||||
|
||||
procedure TMainForm.GenerateProgress(Sender: TObject);
|
||||
|
|
|
|||
|
|
@ -189,6 +189,9 @@ type
|
|||
property OnDuration: TNotifyEvent read FOnDuration write FOnDuration;
|
||||
property OnPauseChange: TNotifyEvent read FOnPauseChange write FOnPauseChange;
|
||||
property OnLog: TMpvLogEvent read FOnLog write FOnLog;
|
||||
{ Цепочка смешивания, отданная mpv. Нужна журналу: по ней видно, какая
|
||||
дорожка какую громкость получила на самом деле. }
|
||||
property AudioGraph: string read FLastGraph;
|
||||
end;
|
||||
|
||||
implementation
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue