PictureView 3 — просмотр изображений различных форматов

Здесь можно обсудить ваш любимый плагин.
SEt
Posts: 452
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 17 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt » Sun 07 Apr, 2013 22:25

В этой теме обсуждается плагин PictureView 3.
Старый тред с обсуждением предыдущих версий: PictureView 1 и 2.

Дальнейшее развитие версии 1.5, переделано под API Far 3.0.



Об извлечении плагинов из дистрибутивов ACDSee.


PS: API как было убогим в Far 2, так и осталось...
Attachments
PictureView3_20140813_last_xp.7z
Последняя версия, работающая на WinXP
(321.22 KiB) Downloaded 679 times

User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT » Tue 28 May, 2019 21:27

Latest post of the previous page:

Спасибо, что продолжаете развивать свой замечательный плагин!
SEt wrote:
Tue 28 May, 2019 18:56
Новый декодер: ITP. Интерфейс для системных IThumbnailProvider декодеров – то, что использует Explorer для рисования картинок файлов. Показывает один кадр для видео. Поддерживает всевозможные внешние декодеры, которые можно установить в систему (например, декодер SVG), только обратите внимание на соответствие битности декодера и битности Far'а. Приоритет 0, то есть работает только при форсированном запуске (по префиксу, через меню плагинов, при отключенном быстром распознавании форматов).
Вопрос: то, что для видеофайлов (MOV/AVI) с кодеком JPEG/MJPG используется не ITP, а ACDSee:JPG (независимо от [?] Skip quick format detection), — это ожидаемо?
Фар есть инструмент, а не нянька. © 2009 DrKnS

SEt
Posts: 452
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 17 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt » Tue 28 May, 2019 22:17

Да: у ITP очень низкий приоритет – его спрашивают последним. А ACDSee декодер имеет свойство искать JPEG в некоторой окрестности, а не только с начала файла.

В принципе, сейчас можно полностью отказаться от IDE_ACDStd.apl – другие декодеры быстрее или лучше.

User avatar
Grom PE
Posts: 29
Joined: Sun 21 Jun, 2015 14:24
Has thanked: 5 times

PictureView 3 — просмотр изображений различных форматов

Post by Grom PE » Fri 31 May, 2019 12:50

Хотел обновиться, потом вспомнил, что нужна версия с зумом nearest neighbor. Не выношу размытости при кратном зуме больше 100%. Почему бы не сделать опцию?

SEt
Posts: 452
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 17 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt » Fri 31 May, 2019 22:40

Grom PE wrote:
Fri 31 May, 2019 12:50
Хотел обновиться, потом вспомнил, что нужна версия с зумом nearest neighbor.
Декодеры в большинстве случаев можно безопасно обновлять без изменения самого PV.
Если у вас и так всё работает – то новые заплатки вам не нужны.
Grom PE wrote:
Fri 31 May, 2019 12:50
Почему бы не сделать опцию?
Возможно, я дойду до этого.
Last edited by SEt on Fri 31 May, 2019 22:41, edited 1 time in total.

User avatar
a'Lexus
Posts: 45
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus » Thu 05 Sep, 2019 12:12

На билдах Far старше 5457, при открытом через ArcLite архиве на одной панели, рушит Far после попытки смены диска или создания каталога на второй панели.

Code: Select all

   ╔══════════════════════════ Exception occurred ══════════════════════════╗
   ║ Exception:   0xC0000005 - EXCEPTION_ACCESS_VIOLATION                   ║
   ║ Details:     Memory at 00007FF8C7B22820 could not be read              ║
   ║ errno:                                                                 ║
   ║ LastError:                                                             ║
   ║ NTSTATUS:                                                              ║
   ║ Address:     0x7FF77532BE8E - Far.exe!<unknown> (get the pdb)          ║
   ║ Source:                                                                ║
   ║ Function:    main                                                      ║
   ║ Module:      D:\Far Manager\Far.exe                                    ║
   ╟────────────────────────────────────────────────────────────────────────╢
   ║          { Terminate Far } [ Stack ] [ Minidump ] [ Ignore ]           ║
   ╚════════════════════════════════════════════════════════════════════════╝
In love with FAR since 1997

User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT » Thu 05 Sep, 2019 13:40

a'Lexus, сделайте, как написано тут: Поведение при обнаружении проблем.
И если рядом с Far.exe подложить соответствующий Far.pdb (например, скачать свежий Фар и оттуда же для него архив с PDB-файлом) и нажать в диаложке кнопку [ Stack ], то что выведется?
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
a'Lexus
Posts: 45
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus » Thu 05 Sep, 2019 22:52

Stack:
In love with FAR since 1997

User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT » Thu 05 Sep, 2019 23:30

a'Lexus wrote:
Thu 05 Sep, 2019 22:52
Stack:
А где выполненные предшествующие требования? Телепатов тут нет.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
a'Lexus
Posts: 45
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus » Fri 06 Sep, 2019 06:51

Last edited by HaRT on Fri 06 Sep, 2019 11:37, edited 1 time in total.
Reason: Спрятан офтопик
In love with FAR since 1997

User avatar
HaRT
Moderator
Posts: 8830
Joined: Tue 30 Aug, 2005 17:21
Location: Санкт-Петербург
Has thanked: 86 times
Been thanked: 151 times

PictureView 3 — просмотр изображений различных форматов

Post by HaRT » Fri 06 Sep, 2019 11:14

 ! Message from: HaRT
a'Lexus wrote:
Fri 06 Sep, 2019 06:51
Или пусть пользователи выявят проблему, поправят все сами, а вам дадут готовый результат?
Да, это предпочтительный вариант.
А пока на всякий случай перечитайте Правила. Судя по вашему тону, вы давно этого не делали.
Фар есть инструмент, а не нянька. © 2009 DrKnS

User avatar
a'Lexus
Posts: 45
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus » Fri 06 Sep, 2019 11:32

Last edited by HaRT on Fri 06 Sep, 2019 11:35, edited 1 time in total.
Reason: Спрятан офтопик
In love with FAR since 1997

User avatar
zg
zero-gravity
Posts: 5572
Joined: Tue 15 Mar, 2005 17:36
Location: riga
Been thanked: 89 times
Contact:

PictureView 3 — просмотр изображений различных форматов

Post by zg » Fri 06 Sep, 2019 12:58

a'Lexus wrote:
Fri 06 Sep, 2019 11:32
Стоит учесть,что указывая проблему, я оказываю вам услугу.
нет, если это не полноценный багрепорт.
1. очень часто в таких случаях реально ошибки нет. выясняется это долго, трата времени впустую.
2. даже если баг есть, то в итоге он проявится у того, кто сможет сделать полноценный багрепорт.

User avatar
John Doe
Бюрократ
Posts: 12323
Joined: Wed 27 Apr, 2005 20:42
Has thanked: 33 times
Been thanked: 168 times

PictureView 3 — просмотр изображений различных форматов

Post by John Doe » Fri 06 Sep, 2019 15:41

a'Lexus wrote:
Fri 06 Sep, 2019 06:51
Тупо скопировать в Plugins последниего билда Far плагин и проверить его работу не судьба?
Не воспроизводится.

User avatar
DrKnS
Posts: 5338
Joined: Thu 04 Aug, 2005 06:44
Location: Kyiv
Has thanked: 6 times
Been thanked: 217 times

PictureView 3 — просмотр изображений различных форматов

Post by DrKnS » Fri 06 Sep, 2019 15:52

Господа, нет необходимости выяснять отношения - давайте исходить из того, что здесь никто никому ничего не должен.

a'Lexus, со стеком гораздо лучше, спасибо.

Очевидно, что кто-то опять неправильно работает с COM и вызывает лишний CoUninitialize, убивая этим ITaskbarList3 внутри фара.

В дистрибутиве плагина с COM работают вроде бы только ITP.pvd и WIC.pvd.

ITP.pvd:
  1. public pvdInit
  2. pvdInit proc near
  3. sub     rsp, 28h
  4. mov     edx, 6          ; dwCoInit
  5. xor     ecx, ecx        ; pvReserved
  6. call    cs:CoInitializeEx
  7. xor     ecx, ecx
  8. test    eax, eax
  9. setns   cl
  10. mov     eax, ecx
  11. add     rsp, 28h
  12. retn
  13. pvdInit endp
  14.  
  15. public pvdExit
  16. pvdExit proc near
  17. jmp     cs:CoUninitialize
  18. pvdExit endp
Предполагаю, это примерно соответствует
  1. bool pvdInit()
  2. {
  3.     return SUCCEEDED(CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE));
  4. }
  5.  
  6. void pvdExit()
  7. {
  8.     CoUninitialize();
  9. }


WIC.pvd:
  1. public pvdInit
  2. pvdInit proc near
  3. ...
  4. sub     rsp, 48h
  5. mov     edx, 6          ; dwCoInit
  6. xor     ecx, ecx        ; pvReserved
  7. call    cs:CoInitializeEx
  8. test    eax, eax
  9. jns     short loc_18000121C
  10.  
  11. public pvdExit
  12. pvdExit proc near
  13. sub     rsp, 28h
  14. mov     rcx, cs:ppv
  15. mov     rax, [rcx]
  16. call    qword ptr [rax+10h]
  17. add     rsp, 28h
  18. jmp     cs:CoUninitialize
  19. pvdExit endp
Предполагаю, это примерно соответствует
  1. bool pvdInit()
  2. {
  3.     if (FAILED(CoInitializeEx(nullptr, COINIT_APARTMENTTHREADED | COINIT_DISABLE_OLE1DDE)))
  4.         return false;
  5.     /* something */
  6. }
  7.  
  8. void pvdExit()
  9. {
  10.     /* something */
  11.     CoUninitialize();
  12. }

Я не знаю, как там работает интерфейс PVD и вызывается ли pvdExit, если pvdInit вернул false (исходников нет, документации нет, а ковыряться дальше мне лень). Если вызывается - ой, если нет - видимо, валит кто-то другой.
Но даже то, что выше - неправильно, т.к. модули не будут работать, если кто-то уже проинициализировал COM в другом режиме.

Как правильно инициализировать COM (у меня такое чувство, что нужна статья в Писании):
  1. void foo()
  2. {
  3.     HRESULT Result = CoInitializeEx(/* whatever */);
  4.     bool ComInitialized = SUCCEEDED(Result);
  5.     bool ComAvailable = ComInitialized || Result == RPC_E_CHANGED_MODE;
  6.  
  7.     if (ComAvailable)
  8.     {
  9.         // Use COM
  10.     }
  11.  
  12.     if (ComInitialized)
  13.         CoUninitialize();
  14. }

User avatar
a'Lexus
Posts: 45
Joined: Mon 17 Oct, 2016 22:30

PictureView 3 — просмотр изображений различных форматов

Post by a'Lexus » Fri 06 Sep, 2019 18:06

John Doe wrote:
Fri 06 Sep, 2019 15:41
Не воспроизводится.
DrKnS wrote:
Fri 06 Sep, 2019 15:52
со стеком гораздо лучше, спасибо.
Может вот ,что еще поможет:/
Far30b5462.x64.20190902 работает без проблем, 5463 у меня нет, 5464 и более старшие крашатся сразу после запуска.
При повторном запуске - при смене диска или создании каталога.
Steck при запуске:


p.s. Смею предположить, что повлияло вот это:
drkns 02.09.2019 21:09:11 +0100 - build 5463
1. Инициализируем COM как multithreaded, вроде бы так правильнее в нашем случае.
Last edited by a'Lexus on Fri 06 Sep, 2019 19:19, edited 1 time in total.
In love with FAR since 1997

Smitis
Posts: 1584
Joined: Fri 18 Mar, 2005 12:51
Location: Питер
Has thanked: 18 times
Been thanked: 35 times

PictureView 3 — просмотр изображений различных форматов

Post by Smitis » Sat 07 Sep, 2019 19:36

После 5462 ФАР начал падать, но только сегодня наконец собрался и выяснил, что это PictureView. Оказалось, это не только у меня.
Если что, есть стек, минидамп, но, как понял, это уже не нужно и причина выявлена.
Разум когда-нибудь победит.

SEt
Posts: 452
Joined: Mon 21 Mar, 2005 10:22
Location: Питер
Been thanked: 17 times

PictureView 3 — просмотр изображений различных форматов

Post by SEt » Sat 07 Sep, 2019 23:06

Да, есть такое, в PV вызывался CoUninitialize при не успешном CoInitializeEx. В следующей версии будет исправлено.

Но в данном случае – это была очень полезная ошибка, так как иначе вот это прошло бы тихо:
drkns 02.09.2019 21:09:11 +0100 - build 5463
1. Инициализируем COM как multithreaded, вроде бы так правильнее в нашем случае.
Какая прекрасная идея: "вроде бы так правильнее"! А что должны сделать плагины? Как им понять, что теперь COM работает по-другому?

EDIT:
Ну и MSDN говорит, что
Because OLE technologies are not thread-safe, the OleInitialize function calls CoInitializeEx with the COINIT_APARTMENTTHREADED flag. As a result, an apartment that is initialized for multithreaded object concurrency cannot use the features enabled by OleInitialize.
Applications that use the following functionality must call OleInitialize before calling any other function in the COM library:
  • Clipboard
  • Drag and Drop
  • Object linking and embedding (OLE)
Так что в плагинах ещё что-то может принципиально отвалиться, если они теперь обязаны жить в COINIT_MULTITHREADED.
Last edited by SEt on Sat 07 Sep, 2019 23:30, edited 2 times in total.

Post Reply

Return to “Обсуждение плагинов”