Накладываемая картинка показывается в предпросмотре готовым куском
В окне картинки не было вовсе, хотя в ролик она попадала. Плеер получал сам файл, а его декодер на этом webp спотыкался: «webp: invalid TIFF header in Exif data» — накладывать стало нечего. У неподвижного кадра есть и вторая беда: в списке кусков у него нет длины. Теперь наложению отдаётся заготовка — обычное видео нужной длины, сделанное тем же путём, что и остальные вставки, только цепочкой без полей: поля тут вредны, чёрное закрыло бы нижнее видео. Масштаб уже внутри куска, плееру остаётся поставить его на место. Заготовки наложения собираются отдельным списком: уплощение ниже заполняет список недостающего заново и затёрло бы их. Проверено на том самом файле: в окне картинка легла поверх видео, в ролике слева нижнее видео (253, 0, 0), справа картинка. Числовые проверки в flattest: кусок собирается слоями, у верхнего слоя полей нет, предпросмотру отдан кусок из кэша, и он заказан к созданию.
This commit is contained in:
parent
3d3d02368c
commit
766f1ad196
3 changed files with 106 additions and 4 deletions
|
|
@ -1122,6 +1122,35 @@ begin
|
|||
Check(Missing[0].TargetPath <> PlainPath,
|
||||
'кусок с кадрированием — отдельный файл');
|
||||
end;
|
||||
|
||||
{ Под картинкой появляется видео — и она должна лечь поверх него, а
|
||||
не закрыть его своими чёрными полями. }
|
||||
Proj.AddTrack('V2');
|
||||
Proj.AddClip(Proj.Tracks[1], Media, 0, 5, 0);
|
||||
FlattenStream(Proj, tkVideo, 0, Segs, Missing);
|
||||
Check((Length(Segs) = 1) and (Length(Segs[0].Layers) = 2),
|
||||
'кусок собирается слоями: нижнее видео и картинка поверх');
|
||||
if (Length(Segs) = 1) and (Length(Segs[0].Layers) = 2) then
|
||||
Check(Pos('pad=', Segs[0].Layers[1].FitFilter) = 0,
|
||||
'у верхнего слоя полей нет');
|
||||
|
||||
{ Предпросмотру картинка отдаётся готовым куском, а не самим файлом:
|
||||
своих декодеров у плеера хватает не на всё, а у неподвижного кадра
|
||||
нет длины. }
|
||||
FlattenPreview(Proj, Segs, AudioSegs, Overlays, Missing, True);
|
||||
Check(Length(Overlays) = 1, 'картинка ушла в накладываемые');
|
||||
if Length(Overlays) = 1 then
|
||||
begin
|
||||
Check(Pos('.nlve-cache', Overlays[0].FilePath) > 0,
|
||||
'показывается готовый кусок, а не сам файл');
|
||||
Check(Pos('pad=', Overlays[0].Filter) = 0,
|
||||
'полей в цепочке наложения нет');
|
||||
PlainPath := '';
|
||||
for I := 0 to High(Missing) do
|
||||
if Missing[I].TargetPath = Overlays[0].FilePath then
|
||||
PlainPath := Missing[I].TargetPath;
|
||||
Check(PlainPath <> '', 'этот кусок заказан к созданию');
|
||||
end;
|
||||
finally
|
||||
Proj.Free;
|
||||
end;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue