thedeemon: (office)
[personal profile] thedeemon
Делаю плагин для AviSynth, это такая гибкая штука для обработки видео: снаружи скриптовый язычок, внутри написанные на С++ модули. Модули эти обмениваются видео кадрами, для которых сделано автоматическое управление временем жизни через COM-like подсчет ссылок. Документация велит обычные указатели на VideoFrame не использовать, а использовать умный указатель PVideoFrame везде, он сам счетчик ссылок дергает когда надо. А еще там некоторое подобие uniqueness typing а-ля Clean: PVideoFrame может кому угодно выдать указатель для чтения видеоданных, но на запись он даст указатель только когда счетчик ссылок равен 1, т.е. писать можно только когда никто не смотрит, когда кадр всецело твой. Натурально как в Clean, там тоже, когда никто объект не пытается менять, можно несколько ссылок на него иметь из разных мест, а вот писать туда можно только когда ссылка единственная, уникальная. Но только в Clean сделано правильно: ежели мы уникальный указатель в функцию передали, то он внутри нее тоже уникальный, а то, что где-то на стеке остался еще один - во фрейме вызывающей функции - это не считается, он же сейчас недоступен. А вот на С++ когда умный указатель PVideoFrame передается в функцию, то это идет как создание копии, и теперь у нас на кадр две ссылки: одна в вызывающей функции и одна в вызванной. Счетчик ссылок становится больше 1, и все, получить указатель на видеоданные для записи он уже не дает. Приходится в функции ссылку на умный указатель передавать. Указатель на указатель на указатель... Такой вот смешной дизайн.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

thedeemon: (Default)
Dmitry Popov

May 2025

S M T W T F S
    123
45678910
11 121314151617
18192021222324
25262728293031

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 16th, 2025 10:16 pm
Powered by Dreamwidth Studios