Virtualdub код ошибки 2

Только что, я сел и проверил проект VirtualDub с помощью PVS-Studio. Выбор был случаен. Я считаю, самое главное регулярно проверять/перепроверять различные проекты, чтобы показать, как развивается анализатор кода PVS-Studio. А какой проект будет проверен, не так важно. Ошибки есть везде. Проект VirtualDub мы уже проверяли в 2011 году, но тогда почти ничего интересного не нашлось. Вот я и решил посмотреть, как обстоят дела, спустя 2 года.

0220_Checking_VirtualDub_ru/image1.png

Я скачал с сайта VirtualDub архив VirtualDub-1.10.3-src.7z. Для анализа я использовал PVS-Studio версии 5.10. На анализ я потратил около часа, так что не судите строго. Наверняка, я что-то пропустил. И наоборот, мог поcчитать корректный код за подозрительный. Прошу, тех, кто поддерживает проект VirtualDub не полагаться на мой отчет, а произвести самостоятельную проверку. Мы всегда идём на встречу open-source сообществу и готовы выделить регистрационный ключ.

Ещё я хочу попросить Эвери Ли отнестись к этой статье с пониманием. В прошлый раз, он очень болезненно воспринял упоминание VirtualDub в одной из моих статей. Я вовсе не хотел, и не хочу сказать, что какая-то программа является глючной. Программные ошибки есть везде. Моя цель показать пользу, которую может давать использование статического анализа кода. Попутно, это сделает open-source проекты немного надёжнее. Это замечательно.

Конечно, разовые проверки малоэффективны. Но с этим, к сожалению, я ничего поделать не могу. Использовать или не использовать регулярно инструменты статического анализа, зависит от разработчиков. Я только могу пытаться объяснить, в чем польза регулярного использования. Вот одна из интересных заметок на эту тему: Лев Толстой и статический анализ кода.

Впрочем, эта статья про ошибки, а не методологию использования статического анализа. Давайте посмотрим, что нового интересного нашел анализатор PVS-Studio в VirtualDub.

Виртуальные деструкторы

В языке программирования C++ деструктор полиморфного базового класса должен объявляться виртуальным. Только так обеспечивается корректное разрушение объекта производного класса через указатель на соответствующий базовый класс.

Я знаю, что все это знают. Однако это не мешает забыть объявить деструктор виртуальным.

В VirtualDub есть класс VDDialogBaseW32:

Как видите, он содержит виртуальные функции. Однако деструктор не объявлен виртуальным. Естественно, он него наследуются классы. Например, VDDialogAudioFilterFormatConvConfig:

Предупреждение выданное PVS-Studio: V599 The destructor was not declared as a virtual one, although the ‘VDDialogBaseW32’ class contains virtual functions. VirtualDub gui. cpp 997

Как видите, для уничтожения объекта используется указатель на базовый класс. Такое удаление объекта приведет к неопределенному поведению программы.

Аналогичная беда существует и с классом VDMPEGAudioPolyphaseFilter.

Ещё о неопределённом поведении

По поводу ошибок, связанных с виртуальным деструктором, вопросов не возникает. Намного более скользкой темой являются операции сдвига. Вот один из таких примеров:

Можно сколько угодно утверждать, что это совершенно надёжный код, который успешно используется уже больше 10 лет. Однако, всё равно, здесь мы имеем дело с неопределенным поведением программы. Вот что стандарт говорит на тему таких конструкций:

The shift operators << and >> group left-to-right.

The operands shall be of integral or unscoped enumeration type and integral promotions are performed.

1. The type of the result is that of the promoted left operand. The behavior is undefined if the right operand is negative, or greater than or equal to the length in bits of the promoted left operand.

2. The value of E1 << E2 is E1 left-shifted E2 bit positions; vacated bits are zero-filled. If E1 has an unsigned type, the value of the result is E1 * 2^E2, reduced modulo one more than the maximum value representable in the result type. Otherwise, if E1 has a signed type and non-negative value, and E1*2^E2 is representable in the result type, then that is the resulting value; otherwise, the behavior is undefined.

3. The value of E1 >> E2 is E1 right-shifted E2 bit positions. If E1 has an unsigned type or if E1 has a signed type and a non-negative value, the value of the result is the integral part of the quotient of E1/2^E2. If E1 has a signed type and a negative value, the resulting value is implementation-defined.

То, что код работает, это везение. При осваивании нового компилятора или других ключей для оптимизации, программа может неожиданно изменить своё поведение. Подробнее про сдвиги и о том, стоит или не стоит править код, можно почитать в статье «Не зная брода, не лезь в воду. Часть третья».

Вот полный список мест, где анализатор PVS-Studio обнаружил Undefined behavior или Unspecified behavior в проекте VirtualDub.

Опечатки

Диагностическое сообщение выданное PVS-Studio: V529 Odd semicolon ‘;’ after ‘while’ operator. VirtualDub crash. cpp 462

Обратите внимание на точку с запятой, стоящую после ‘while’. Здесь или ошибка или код неверно отформатирован. Я думаю, это именно ошибка. Цикл «while(*pszHeap++);» пройдет до конца строки и в результате, переменная ‘pszHeap’ будет указывать на память после терминального нуля. Проверка «if (pszHeap[-1]==’.’)» не имеет смысла. По адресу «pszHeap[-1]» всегда находится терминальный ноль.

Рассмотрим другую опечатку, при работе со строками.

Диагностическое сообщение выданное PVS-Studio: V637 Two opposite conditions were encountered. The second condition is always false. Check lines: 183, 184. VirtualDub backface. cpp 183

Оператор new генерирует исключения при ошибке выделения памяти

В старом коде, часто можно встретить проверку того, что вернул оператор new. Выглядит это так:

Современные компиляторы, поддерживающие стандарт языка Си++, должны сгенерировать исключение, если не удалось выделить память. Можно сделать, чтобы оператор ‘new’ не генерировал исключения, но к рассматриваемым случаям, сейчас это отношения не имеет.

Таким образом, проверка if (!p) является лишней. В целом такой код безобиден. Лишняя проверка. Ничего страшного.

Однако старый код может привести к неприятным последствиям. Рассмотрим фрагмент из проекта VirtualDub.

Диагностическое сообщение выданное PV-Studio: V668 There is no sense in testing the ‘next’ pointer against null, as the memory was allocated using the ‘new’ operator. The exception will be generated in the case of memory allocation error. VirtualDub hexviewer. cpp 2012

Если в строке «char *revstring = new char[nFindLength];» возникнет исключение, то произойдет утечка памяти. Операторы delete[] не будут вызваны. Не критичная ошибка, но всё равно стоит про неё упомянуть.

Здесь, перечислены все места, где в VirtualDub проверяется указатель после вызова оператора ‘new’.

Ссылка на уничтоженный объект

Диагностическое сообщение выданное PVS-Studio: V558 Function returns the reference to temporary local object: tmp. VirtualDub vdstl. h 460

Функция реализована неправильно. Она возвращает ссылку на локальный объект ‘tmp’. После выхода из функции, он будет уже разрушен. Работа с этой ссылкой, приведёт к неопределенному поведению.

Кстати, оператор ++, находящийся рядом, реализован правильно.

В начале используем, потом проверяем

В разных программах, часто можно встретить ошибку, когда указатель сначала разыменовывается, а уже только потом, сравнивается с NULL. Такие ошибки не проявляют себя очень долгое время, так как равенство указателя NULL, это нештатная редкая ситуация. Эти недочёты, существуют и в коде VirtualDub. Пример:

Диагностическое сообщение выданное PVS-Studio: V595 The ‘mpData’ pointer was utilized before it was verified against nullptr. Check lines: 1422, 1429. Tessa context_d3d9.cpp 1422

В начале указатель «mpData» разыменовывается. Затем проверяется: «if (mpData)». Такие ошибка обычно возникаю в процессе рефакторинга. Новый код вставляется до нужных проверок.

Другие места, где анализатор выдает предупреждение V595, перечислены здесь.

Работа с типом HRESULT

Диагностическое сообщение выданное PVS-Studio: V545 Such conditional expression of ‘if’ operator is incorrect for the HRESULT type value ‘AVIStreamInfoA(pas, & asi, sizeof asi)’. The SUCCEEDED or FAILED macro should be used instead. VirtualDub avireadhandlertunnelw32.cpp 230

Функция AVIStreamInfo() возвращает значение типа HRESULT. Этот тип нельзя интерпретировать как ‘bool’. Информация, хранящаяся в переменной типа HRESULT, имеет достаточно сложную структуру. Для проверки значения HRESULT необходимо использовать макрос SUCCEEDED или FAILED, объявленные в «WinError. h». Вот как устроены эти макросы:

Правильный вариант кода:

Аналогичные предупреждения PVS-Studio выдаёт на следующие строки:

Магические числа

Задание длины строки с помощью числа не очень хорошая идея. Очень легко ошибиться, подсчитывая символы. Пример:

Диагностическое сообщение выданное PVS-Studio: V512 A call of the ‘memcmp’ function will lead to underflow of the buffer ‘»GL_EXT_blend_subtract»‘. Riza opengl. cpp 393

Длина строки «GL_EXT_blend_subtract» не 20, а 21 символ. Ошибка некритична. На практике коллизий не возникнет. Тем не менее, следует избегать таких магических чисел. Лучше использовать специальный макрос для подсчета длины строки. Пример:

В Си++ можно сделать более безопасную шаблонную функцию:

Абсолютные пути

Диагностическое сообщение выданное PVS-Studio: V631 Consider inspecting the ‘LoadLibraryA’ function call. Defining an absolute path to the file or directory is considered a poor style. VirtualDub leaks. cpp 67, 69

Думаю понятно, чем этот код плох. Конечно, код связан с отладкой, и вряд ли как-то негативно скажется на конечных пользователях. Но всё равно, было бы лучше получить правильный путь до Program Files.

Неправильный аргумент

Диагностическое сообщение выданное PVS-Studio: V576 Incorrect format. Consider checking the fourth actual argument of the ‘printf’ function. The argument is expected to be not greater than 32-bit. Asuka lookup. cpp 56

Переменная ‘rva’ является 64-битным типом. Это значит, что в стек будет помещено 8 байт. Функция printf() является функцией с переменным количеством аргументов. Тип данных, которые она должна обработать, задаётся с помощью строки форматирования. В данном случае, переменная ‘rva’ будет обработана как 32-битная переменная («%x»).

Приведёт данная ошибка к сбою или нет, зависит от того, как организует передачу аргументов компилятор и от разрядности платформы. Например, в Win64 все целочисленные типы вначале приводятся к 64-битному типу, и уже затем помещаются в стек. Проблемы, что переменная займет в стеке больше места, чем надо, не будет.

Впрочем, если переменная ‘rva’ хранит значения более INT_MAX, её значение в любом случае будет распечатано некорректно.

Аналогичные предупреждения анализатор выдаёт здесь:

Неправильные сравнения

Диагностическое сообщение выданное PVS-Studio: V547 Expression ‘res < 0’ is always false. Unsigned type value is never < 0. Riza w32videocodecpack. cpp 828

Переменная ‘res’ имеем беззнаковый тип DWORD. Это значит, что выражение «res < 0» всегда равно значению ‘false’.

Аналогичная проверка содержится здесь: w32videocodec. cpp 284.

Рассмотрим ещё одну схожую ошибку.

Разное странное

Диагностическое сообщение выданное PVS-Studio: V501 There are identical sub-expressions ‘stream. mChunkCount’ to the left and to the right of the ‘&&’ operator. VirtualDub avioutputfile. cpp 761

Два раза проверяется переменная ‘stream. mChunkCount’. Одна проверка лишняя или забыли проверить что-то ещё.

Диагностическое сообщение выданное PVS-Studio: V570 The ‘this->hic’ variable is assigned to itself. Riza w32videocodecpack. cpp 253

Диагностическое сообщение выданное PVS-Studio: V646 Consider inspecting the application’s logic. It’s possible that ‘else’ keyword is missing. VirtualDub optdlg. cpp 120

Возможно, код неправильно отформатирован. А возможно, забыто ключевое слово ‘else’.

Диагностическое сообщение выданное PVS-Studio: V519 The ‘mbAudioHardwarePresent’ variable is assigned values twice successively. Perhaps this is a mistake. Check lines: 274, 275. VDCapture cap_screen. cpp 275

Заключение

Как видите, даже при разовом запуске, статический анализ может быть полезен. Но намного полезнее запускать его регулярно. Ведь предупреждения (warnings) в компиляторе, программисты включают не один раз перед релизом, а пользуются ими постоянно. Та же самая ситуация и с инструментами статического анализа. Постоянное их использование позволяет оперативно устранять ошибки. Можно рассматривать PVS-Studio как некую надстройку над компилятором, которая выдаёт больше интересных предупреждений. Наилучший вариант, это использование инкрементального анализа кода. Вы обнаружите новые ошибки сразу после компиляции измененных файлов.

Руководство по использованию VirtualDub

Как пользоваться VirtualDub

VirtualDub — популярное приложение для монтажа видео. Несмотря на относительно простой интерфейс по сравнению с такими гигантами как Adobe After Effects и Sony Vegas Pro, описываемый софт обладает весьма обширным функционалом. Сегодня мы поведаем вам о том, какие именно операции можно выполнять с помощью VirtualDub, а также приведем практические примеры.

Как пользоваться VirtualDub

У VirtualDub практически такие же функции, как и у любого другого редактора. Вы можете вырезать фрагменты ролика, склеивать куски клипа, вырезать и заменять аудио-дорожки, накладывать фильтры, конвертировать данные, а также записывать видео из различных источников. Вдобавок это все сопровождается наличием встроенных кодеков. Теперь давайте разберем по порядку более детально все функции, которые могут понадобиться рядовому пользователю.

Открываем файлы для редактирования

Наверное, каждый пользователь знает и понимает, что перед тем, как приступить к редактированию видеоролика, необходимо его сперва открыть в приложении. Вот как это делается в VirtualDub.

Заходим во вкладку Файл в VirtualDub

Кнопка открытия файла в VirtualDub

Выбираем файл для открытия в VirtualDub

Обратите внимание, что по умолчанию софт не может открывать файлы формата MP4 и MOV. Это при том, что в перечне поддерживаемых форматов они указаны. Для включения данной функции потребуется ряд действий, связанных с установкой плагина, создании дополнительной папки и параметров конфигурации. Как именно этого добиться, мы расскажем вам в самом конце статьи.

Вырезаем и сохраняем отрывок клипа

Если вы хотите вырезать из ролика или фильма понравившийся фрагмент с последующим его сохранением, необходимо выполнить следующий ряд действий.

Устанавливаем отметку начала отрезка видео в VirtualDub

Нажимаем на кнопку начала выделения в VirtualDub

Указываем конец фрагмента и жмем кнопку выделения в VirtualDub

Включаем параметры потока для вырезания фрагмента в софте Virtual Dub

Сохраняем выделенный фрагмент видео в софте VirtualDub

Указываем местоположение и название для будущего файла в VirtualDub

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

Вырезаем лишний фрагмент из ролика

С помощью VirtualDub можно также с легкостью не просто сохранить выбранный отрывок, но и вовсе удалить его из фильма/мультика/клипа. Выполняется это действие буквально за считанные минуты.

Указываем начало и конец фрагмента для удаления в VirtualDub

Сохраняем видео после удаления фрагмента в софте VirtualDub.

Сохраняем отредактированное видео в VirtualDub

Теперь следует зайти в папку, в которую вы сохраняли файл. Он готов к просмотру или дальнейшему использованию.

Изменяем разрешение видео

Иногда возникают ситуации, когда вам надо изменить разрешение ролика. Например, вы хотите посмотреть сериал на мобильном устройстве или планшете, но они по каким-то причинам не могут воспроизвести клип с большим разрешением. В таком случае можно снова прибегнуть к помощи VirtualDub.

Открываем список фильтров видео в софте VirtualDub.

Добавляем фильтр видео для изменения разрешения в VirtualDub

Добавляем фильтр resize в VirtualDub

Указываем новое разрешение для видео в VirtualDub

Применяем фильтр resize к видео в VirtualDub

Результат изменения разрешения видео в VirtualDub

Включаем режим полной обработки перед сохранением видео в софте VirtualDub

Сохраняем видео с новым разрешением в VirtualDub

Зайдя в выбранную ранее папку вы увидите ролик с новым разрешением. Вот собственно и весь процесс изменения разрешения.

Поворот видео

Очень часто случаются ситуации, когда при съемке камера держится не в том положении, в каком нужно. В итоге получаются перевернутые ролики. С помощью VirtualDub вы легко сможете исправить подобную проблему. Отметим, что в данном софте вы сможете выбрать как произвольный угол поворота, так и фиксированные значения типа 90, 180 и 270 градусов. Теперь обо всем по порядку.

Открываем список фильтров видео в софте VirtualDub.

Добавляем фильтр видео для изменения разрешения в VirtualDub

Выбираем фильтр rotate или rotate2 в VirtualDub

Выбираем угол поворота видео в VirtualDub

Указываем произвольный угол поворота видео в VirtualDub

Применяем фильтр поворота видео в VirtualDub

Результат применения фильтра поворота видео в VirtualDub

Включаем режим полной обработки перед сохранением видео в софте VirtualDub

Сохраняем перевернутое видео в VirtualDub

Как видите, перевернуть ролик в VirtualDub очень легко. Но это еще не все, на что способна данная программа.

Создание GIF анимации

Если вам понравилась во время просмотра ролика какая-то его часть, вы можете с легкостью превратить ее в анимацию. В будущем ее можно использовать на различных форумах, переписках в социальных сетях и так далее.

Открываем список фильтров видео в софте VirtualDub.

Добавляем фильтр видео для изменения разрешения в VirtualDub

Добавляем фильтр resize в VirtualDub

Устанавливаем разрешение для анимации в VirtualDub

Закрываем окно со списком фильтров в VirtualDub

Открываем функцию изменения частоты кадров в софте VirtualDub

Изменяем частоту кадров анимации в VirtualDub

Заходим в меню сохранения анимации в VirtualDub

Указываем параметры сохранения анимации в VirtualDub

Запись картинки с экрана

Одной из особенностей VirtualDub является возможность записи на видео всех действий, которые выполняются на компьютере. Конечно, для подобных операций есть и узконаправленный софт.

Герой нашей сегодняшней статьи справляется с этим на достойном уровне тоже. Вот как это реализовывается здесь:

Запускаем функцию захвата видео в VirtualDub

Устанавливаем метод захвата видео в VirtualDub

Изменяем разрешение захватываемого видео в VirtualDub

Устанавливаем значение разрешения и формата для захвата видео в VirtualDub

Отключаем предварительный просмотр видео в VirtualDub

Применяем компрессию к видео в VirtualDub

Выбираем файл для сохранения видео в VirtualDub

Включаем захват видео в VirtualDub

Начало захвата видео в VirtualDub

Останавливаем захват видео в VirtualDub

Вот так выглядит процесс захвата картинки с помощью приложения VirtualDub.

Удаление звуковой дорожки

Напоследок мы хотели бы рассказать вам о такой простой функции, как удаление звуковой дорожки из выбранного видео. Делается это очень просто.

Удаляем звуковую дорожку из видео в VirtualDub

В результате звук из вашего клипа будет полностью удален.

Как открыть ролики формата MP4 и MOV

В самом начале статьи мы упоминали о том, что у редактора есть некоторые проблемы с открытием файлов указанных выше форматов. В качестве бонуса мы расскажем вам о том, как исправить этот недостаток. Мы не будем расписывать все в деталях, а упомянем лишь в общих чертах. Если у вас не выйдет сделать все предложенные действия самостоятельно, тогда пишите в комментариях. Вот что нужно сделать.

На этом наша статья подошла к концу. Мы рассказали вам об основных функциях VirtualDub, которые могут пригодиться рядовому пользователю. Помимо описанных возможностей, в редакторе есть еще много других функций и фильтров. Но для их правильного использования от вас потребуются более глубокие знания, поэтому затрагивать их в этой статье мы не стали. Если же вам понадобится консультация по решению каких-то задач, тогда милости просим в комментарии.

ЗакрытьМы рады, что смогли помочь Вам в решении проблемы.

Помимо этой статьи, на сайте еще 11876 инструкций.
Добавьте сайт Lumpics. ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

ЗакрытьОпишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

Помогла ли вам эта статья?

Поделиться статьей в социальных сетях:

Еще статьи по данной теме:

Вызывает затруднение работа в режиме захвата экрана рабочего стола на ноуте MSI с ОС 8.1,через VirtualDub v.1.10.4,не отображается метка курсора. Пробовал попеременно отключать видеокарту Nvidia 860M и встроенную графику Intel, курсор всё равно не виден. На 32-бит. или 64-бит. версии VirtualDub, роли не играет. В настройках VD флажок делать захват курсора стоит. Куда ещё копать, подскажите кто в теме.

VaLLeon, Доброго времени суток. Что значит метка курсора? Вы имеете ввиду сам курсор или нажатия ЛКМ и ПКМ? Если проблема с отображением самого курсора, то попробуйте распаковать заново чистую версию программы. По умолчанию курсор должен отображаться без каких-либо проблем. Кроме того, вы можете попробовать загрузить оригинальную англоязычную версию ПО с соответствующей страницы. Возможно, у вас возникают проблемы именно с русифицированным продуктом.

Именно сам курсор. Версии не влияют. Копался в настройках режима захвата, графики видеокарты и мыши, теперь вообще начала падать при выборе функции захвата. Должна же она нормально работать, у других разве не было такой проблемки, в инете толком ничего конкретного про это не нашёл, абракадабра какая-то получается.

Понять в чем кроется проблема очень проблематично в удаленном режиме. К этому может быть причастна как сама программа, так и стороннее ПО. Подобная проблема является своеобразной. Тем более, что все настройки вы устанавливаете правильно. Если вы хотите принципиально пользоваться данным редактором, тогда попробуйте написать письмо разработчику софта. Электронный адрес указан на его официальной странице. Возможно, он сможет разобраться в чем дело. Правда придется сформулировать свои мысли на английском языке.

Описанные вами проблемы с черным экраном при выборе другого режима обработки встречаются и на Windows 10. Но VirtualDub не является самым лучшим инструментом для захвата изображения с экрана. Именно поэтому данному факту не придают большого значения в сети. VirtualDub — это в первую очередь редактор все-таки. Мы же советуем вам присмотреться к другому ПО, которое поможет без проблем записать видео.

«кодек под названием «ffdshow». Его также можно без проблем отыскать на просторах интернета. Загружаете установочный пакет и инсталлируете его на компьютер»
— а куда именно на компьютер?
Я перед этим устанавливал этот кодек для Format Factory, так теперь инсталлер открывается с папкой Program Files/Format Factory как бы по умолчанию. Понятно, что надо изменить путь, но куда? В корневую Program Files/VirtualDub или в какую-то вложенную?

Статья понятная и оформлена толково, спасибо. Вот бы еще мпеги открыть этим Дубом… ?

А у вас самого VirtualDub работает с mp4? или это «теоретически»?

Здравствуйте. Все описанные действия были проверены на практике до написания статьи. Поэтому ответ на Ваш вопрос — да, работает.

А у меня вот такая фигня:
[!] Plugins: Failed to load «C:\Documents and
Settings\MyComp\Desktop\VirtualDub_v1.10.4\plugins\textsub_223.vdf»:
Cannot load plugin module «C:\Documents and
Settings\MyComp\Desktop\VirtualDub_v1.10.4\plugins\textsub_223.vdf»:
The specified module could not be found.

[!] Plugins: Failed to load «C:\Documents and
Settings\MyComp\Desktop\VirtualDub_v1.10.4\plugins\vobsub_223.vdf»:
Cannot load plugin module «C:\Documents and
Settings\MyComp\Desktop\VirtualDub_v1.10.4\plugins\vobsub_223.vdf»: The
specified module could not be found.

[!] Plugins: Failed to load «C:\Documents and
Settings\MyComp\Desktop\VirtualDub_v1.10.4\plugins\wimgfilter. vdf»:
Cannot load plugin module «C:\Documents and
Settings\MyComp\Desktop\VirtualDub_v1.10.4\plugins\wimgfilter. vdf»: The
specified module could not be found.

[E] Error: No input audio stream to extract.

[*] Beginning preview operation.

[i] Dub: Recompressing using format: RGB888.

[i] Dub: I/O thread has not cycled for thirty seconds — possible livelock.
(Thread action: stalled due to full pipe to processing thread) (Current
address: 7C90E4F4)

[i] Dub: Processing thread has not cycled for thirty seconds — possible
livelock. (Thread action: decompressing video frame) (Current address:
77C46FA3)

[i] Dub: I/O thread has not cycled for thirty seconds — possible livelock.
(Thread action: stalled due to full pipe to processing thread) (Current
address: 7C90E4F4)

[i] Dub: Processing thread has not cycled for thirty seconds — possible
livelock. (Thread action: decompressing video frame) (Current address:
77C46FA3)

[i] Dub: I/O thread has not cycled for thirty seconds — possible livelock.
(Thread action: stalled due to full pipe to processing thread) (Current
address: 7C90E4F4)

[i] Dub: Processing thread has not cycled for thirty seconds — possible
livelock. (Thread action: decompressing video frame) (Current address:
6D0A60D2)

Это лог с одного mp4 фильма, всего пробовал три фильма, результат одинаковый,
Дуб их видит в списке и какбэ открывает, но при воспроизведении пробегает 200-300 фреймов (для каждого фильма постоянное число каждый раз, н-р 183) и зависает,
точнее, тормозится, если верить логу,
дольше пяти минут я не ждал, закрывал (может, потом был бы прорыв, не знаю :).
Фреймы при этом бегут пустые, черные.
Звуковую дорожку Дуб не видит ни в прямопот., ни в конверт. режиме (No input audio stream to extract).
В общем, я сдался, вынул звук с помощью FF. Правда, вышло с VBR. Вот этого мне и хотелось избежать. Хотелось просто дорогу как она есть с родными характеристиками.
Спасибо, что быстро отвечаете.

Скажите пожалуйста, такие ошибки на версии программы x32 или x64? Как мы писали в статье, плагин нужно устанавливать в ту папку, название которой соответствует разрядности приложения. Если проблему у вас не получиться решить самостоятельно, тогда попробуйте скачать из интернета версию программы с уже встроенными фильтрами и плагинами. Как правило, такие сборки уже настроены и не требуют дополнительного вмешательства с вашей стороны.

Добрый день! VirtualDub 1.10.4 Rus. Подскажите, please:
1. Для чего в опциях видеозахвата нужен режим Видео — Вертикальное уменьшение — 2:1 Линейное или Кубическое?
2. Где, в каком файле VirtualDub хранит свои настройки?
Спасибо!

Валерий, доброго времени суток. Как видно из названия, фильтр «Вертикальное уменьшение — 2:1» позволяет уменьшить размер каждого кадра по вертикали в два раза, используя при этом соответствующую матрицу. Кубическое сглаживание позволит добиться наиболее красивой картинки за счет дополнительного использования ресурсов компьютера. При линейной фильтрации могут быть видны не ровные края объектов на изображении. В любом случае вам необходимо проверять это на практике и смотреть результат. Что касается настроек программы, то она их не сохраняет. Вы можете сделать это самостоятельно, нажав комбинацию клавиш «Ctrl+S». По умолчанию файл настроек будет находиться в папке «Документы» на системной диске.

Добрый день, Игорь!
1. Принцип вертикального уменьшения понятен. Но кому и зачем может понадобиться видеофайл со сплюснутой вдвое по вертикали картинкой?
2. Если изменить настройки VirtualDub, выйти из программы, даже выключить ПК, потом снова зайти — изменённые настройки будут присутствовать. Всё-таки где-то это сохраняется автоматически, без «Ctrl+S»?
Спасибо ещё раз!

Валерий, еще раз здравствуйте. К сожалению, мы не можем вам сказать зачем, а главное — кому может понадобиться вертикальное уменьшение. Учитывая тот факт, что программа позволяет выбрать произвольное разрешение для конкретных ситуаций. Что касается настроек, то мы имели ввиду настройки фильтров. При банальном перезапуске программы они сбрасываются. А о каких настройках говорите вы? Возможно, мы просто не поняли друг друга.

Источники:

https://pvs-studio. com/ru/b/0220/

https://lumpics. ru/how-to-use-virtualdub/

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: