<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:dw="https://www.dreamwidth.org">
  <id>tag:dreamwidth.org,2016-12-27:2634070</id>
  <title>Dmitry Popov</title>
  <subtitle>Dmitry Popov</subtitle>
  <author>
    <name>Dmitry Popov</name>
  </author>
  <link rel="alternate" type="text/html" href="https://thedeemon.dreamwidth.org/"/>
  <link rel="self" type="text/xml" href="https://thedeemon.dreamwidth.org/data/atom"/>
  <updated>2017-12-14T08:42:39Z</updated>
  <dw:journal username="thedeemon" type="personal"/>
  <entry>
    <id>tag:dreamwidth.org,2016-12-27:2634070:119953</id>
    <link rel="alternate" type="text/html" href="https://thedeemon.dreamwidth.org/119953.html"/>
    <link rel="self" type="text/xml" href="https://thedeemon.dreamwidth.org/data/atom/?itemid=119953"/>
    <title>видео со змеей</title>
    <published>2017-12-14T06:38:51Z</published>
    <updated>2017-12-14T08:42:39Z</updated>
    <category term="python"/>
    <dw:security>public</dw:security>
    <dw:reply-count>1</dw:reply-count>
    <content type="html">&lt;small&gt;(noob rant)&lt;/small&gt; А вот Питон. Никогда раньше на нем не писал, но тут приходят клиенты и говорят: хотим ваше чудо чудесное в своем приложении на питоне использовать, да на винде, не где-нибудь. Я им говорю, ща, демку вам набросаем. Про себя думаю, это ж Питон, там батарейки, аккумуляторы, богатая экосистема, напишешь import antigravity и полетел. А там... Вот есть технология, которая примерно ровесница самому питону, и до сих пор вполне себе работает во всех виндах - Video for Windows. Какие есть в питоне средства с ней работать? Я так понял, вообще никаких. Ну ладно, может это слишком виндово для &lt;s&gt;г&lt;/s&gt;змеев. Для сжатия видео все равно будет моя DLL-ка вызываться. Но потом мне надо сжатое видео в файл записать. Что там у вас в библиотеках для записи AVI, сравнительно простого и старинного формата? Да как-то тоже практически ничего, про видео видно лишь пару оберток над ffmpeg. Вызывать стороннее приложение - вот все, на что питонисты способны тут. В итоге плюнул, сделал свою простенькую &lt;a href="https://gist.github.com/thedeemon/f6b58990c0ae6f45c03debc68c18a8d1"&gt;писалку AVI&lt;/a&gt; в 128 строк, для небольших файлов. &lt;br /&gt;В итоге все заработало как хотелось, даже в процессе получилось в моей DLL-ке баг найти: в одном месте 64-битный указатель обрезался до 32 бит при передаче в мою виртуальную машинку, ИЧСХ при загрузке DLL-ки из моих тестовых прог и при загрузке кодека в приложения вроде VirtualDub все раньше работало, т.е. указатель тот всегда оказывался нулем в верхних битах. А вот при вызове из питона не оказался, так получилось это обнаружить.&lt;br /&gt;Для работы с DLL использовал модуль ctypes. Они там берутся контролировать типы передаваемых данных, и, как я понял, для передачи бинарных данных вроде BYTE* предполагается использовать массивы вроде c_ubyte * size, причем тип указывается при объявлении прототипа ф-ии, и если у меня при разных вызовах передается разное количество данных, то получается фигня: массив другой длины это уже другой тип, его ctypes не дает передать. Это что же, перед каждым вызовом надо заново определять тип вызываемой функции? Или, видимо, надо объявлять там POINTER(c_ubyte), а при вызовах делать cast()...&lt;br /&gt;И в то же время этот их строгий контроль типов спокойно разрешил целое число вместо указателя на void передать (ненамеренно). С непривычки тяжело, конечно, пока писал скрипт на 200 строк успел несколько раз словить в рантайме "а вот тут число аргументов не то", "а вот эту переменную я не знаю" и другие прелести недотипизированных интерпретируемых языков.&lt;br /&gt;&lt;br /&gt;&lt;img src="https://www.dreamwidth.org/tools/commentcount?user=thedeemon&amp;ditemid=119953" width="30" height="12" alt="comment count unavailable" style="vertical-align: middle;"/&gt; comments</content>
  </entry>
</feed>
