LINUX.ORG.RU

Сообщения kulti

 

[MPEG-TS]анали на валидность без декодирования

Есть устройство, которое зависает, если приходит «корявый» видео-поток. Появилась мысль не отдавать испорченные пакеты на декодирование. Сижу, курю спеки по TS, PES и ES, но что-то ничего, что там могло бы указаывать на невалидность потока не нахожу.

Кто-нибудь знает, это вообще возможно? Может, какие альтернативные мысли имеются.

kulti
()

Какая-то непонятная хрень твориться с сетью...

Есть у меня приложение одно: устанавливает tcp-соединение, получает и обрабатывает данные, закрывает соединение и по новой(открывает, получает, обрабатывает, закрывает). Через некоторое время сеть работать перестает. Приложение пытается установить соединение и по таймау-ту прекращает попытки. Ничто не пингуетсе etc. Останавливаю приложение - вся сеть оживает.

У кого-нибудь есть идеи куда копать?

kulti
()

poll на кол-во байт

Всякие select и poll умеют работать только с таймаутами, что не очень удобно при работе с tcp-соединением... Т.е. при получении одного байта мне уже сообщают, что мол POLLIN, а мне нужно, чтобы в сокете было некоторое минимальное кол-во байт.

Как дождаться нужного кол-ва байт без while(){usleep();} ?

kulti
()

[ffmpeg]запихнуть h264 rtsp поток в flv без декодинга/энкодинга

Были у меня http потоки mjpeg'a с камер всяких, я их спокойно avformat'ом на AVPacket'ы разбирал, потом avcodec'ом декодил и энкодил в h264. Потом опять же avformat'ом запихивал в flv контейнер.

Тут появились камеры, которые могут сразу h264 поток отдавать. То, что rtsp - это не проблема, благо ffmpeg сам умеет с ним работать, но вот обойтись без транскодирования пока никак не выходит. Т.е. если как раньше делать, то все ок - получаеся смотрибельный flv, а вот когда пытаюсь avformat'ом прочитаь и сразу же записать в flv, то получается ерунда какая-то. VLC ругается так:

[h264 @ 0xb0b0d5b0] QP 120 out of range
[h264 @ 0xb0b0d5b0] decode_slice_header error
[h264 @ 0xb0b0d5b0] concealing 4000 DC, 4000 AC, 4000 MV errors
[h264 @ 0xb0b0d5b0] deblocking_filter_idc 32 out of range
[h264 @ 0xb0b0d5b0] decode_slice_header error
[h264 @ 0xb0b0d5b0] concealing 4000 DC, 4000 AC, 4000 MV errors
[h264 @ 0xb0b0d5b0] illegal memory management control operation 32
[h264 @ 0xb0b0d5b0] top block unavailable for requested intra mode at 6 0
[h264 @ 0xb0b0d5b0] error while decoding MB 6 0
[h264 @ 0xb0b0d5b0] number of reference frames exceeds max (probably corrupt input), discarding one
[h264 @ 0xb0b0d5b0] concealing 4000 DC, 4000 AC, 4000 MV errors
...

На сколько я понял av_read_frame читает ровно один видео фрейм и av_write_frame как раз его и требует, но что-то не срастается... Пробовал начинать писать с пакета, у которого стоит флаг AV_PKT_FLAG_KEY - ноль эффекта.

В чем может быть проблема?

PS. После «распада» ffmpeg что-то список рассылки не пашет...

 

kulti
()

[gmail]хочу bottom reply

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

 

kulti
()

[boost][property_tree][json]how to create empty array?

Есть какой-нибудь способ создать пустой массив, чтоб write_json вот такое вывыодил:

{
    "id": "id",
    "method": "test_method",
    "params": []
}

Как массив с элементами сделать - знаю, а вот пустой... уже весь мозг сломал.

PS. еще одни вопросик попутно возник. В 1.45 у write_json флаг появился, чтобы оно не читабельный json выводило, а все в одну строчку без пробелов херачило. На старых версиях такого поведения никак не добиться, да?

 ,

kulti
()

[hg]создать новый default бранч

Пусть в репозитории есть 10 ревизий, но я неожиданно понял, что хочу вернуться к 5 ревизии и начать делать другой функционал. Причем ревизии с 6 по 10 мне не факт, что понадобятся когда-нибудь, но на всякий случай хотелось бы их положить в закрытый бранч.

т.е. хочется из такого

o---o---o---o---o---o---o---o---o---@
1   2   3   4   5   6   7   8   9   10
получить такое
o---o---o---o---o---o---@
1   2   3   4   5 \ 11  12
                   ---o---o---o---o---o
                      6   7   8   9   10

Пытался делать новый бранч с существующим именем default и закрывать старый. Пробовал анонимный бранч делать и закрыать его. В локальной копии все выглядит так, как я хочу, но когда пытаюсь сделать push - ругается:

abort: push creates new remote heads on branch 'default'! (did you forget to merge? use push -f to force)

-f, конечно, можно заюзать, но может я пытаюсь сделать что-то неправильное?

 

kulti
()

[нужен совет]RPC, наверное

Хочу написать одно клиент-серверное приложение, чтоб клиент и сервер были не жестко завязаны и можно было легко протокол взаимодействия расширять. Насколько я знаю, для этого RPC можно использовать. Может, что-то еще существует? Какой именно RPC-протокол посоветуете?

Так же интересуют годные библиотеки для языков C++ и Python. Сам работал только с ulxmlrpcpp на клиентской стороне...

kulti
()

[wi-fi] не цепляется к домашней сети

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

iwconfig eth1 essid «my_home_network» - ноль эмоций, essid как был пустой, так и остался.

iwlist scannig - нашел с десяток точек доступа соседей, но не мою, которая в паре метров от него стоит.

Перед этим ничего такого вроде не обновлял. Вечером в логе emerga посмотрю, что именно, если нужно.

Куда копать?

 

kulti
()

[bitbucket]у кого-нить работает automatically resolving?

Собсна сабж.

В документации сказано, что нужно просто Issues Service включить. Но видимо нужно что-то еще...

 

kulti
()

[HTML] Трехколоночный макет с резиновой серединой и прозрачными краями

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

Куски css и html:

#content { clear: both; width: 100%; position: relative; height: 200px;}
#content_left { float: left; position: relative; margin-left: -100%; width: 19px; height: inherit; background-image: url('../img/left_border.png'); }
#content_right { float: left; position: relative; margin-left: -19px; width: 19px; height: inherit; background-image: url('../img/right_border.png'); }
#content_container { float: left; width: 100%; overflow: hidden; }
#content_middle { padding: 0 19px 0 19px; background-image: url('../img/paper_bg.png'); }

<div id="content">
  <div id="content_container"><div id="content_middle">{% block content %}{% endblock %}</div></div>
  <div id="content_left"></div>
  <div id="content_right"></div>
</div>

Можно ли как-нить это победить? Сам придумал лишь одно: отказаться от текстуры для background у body и использовать просто цвет, убрав прозрачность у соответствующих элементов.

 

kulti
()

[GUI framework] своя системой рендеринга

Есть железка и api для рисования. По сути создается битмап, который и отображается.

Ищется GUI framework, позволяющий использовать кастомную систему рендеринга.

Язык С++

PS. И ссылочку с ответом на вопрос «как?» крайне желательно.

kulti
()

Подмена системных вызовов

Есть закрытый код. Пытаюсь сделать так, чтобы сокет читал из файла, а не из сети. Т.е. подменяю системные вызовы socket(), recv() etc.

Написал тестовую прогу. Сделал LD_PRELOAD=./mylib.so ./test Моя прога работает на ура. Но когда подсовываю свою либу закрытой проге, то она делает вызовы recv() и данные там точно правильные, но такое впечатление, что она их считает некошерными.

Что вообще может «мешать» воспринимать проге данные, как правильные?

kulti
()

[bash]история комманд

Не знаю, как это называется, но в csh есть такая фича: если набираешь некий символ, а потом листаешь хистори стрелками вверх/вниз, то показываются только те комманды из хистори, которые с этой буквы начинаются.

Гуглю, как получить подобный эффект для bash. Единственное, что пока нашел - это

Try '!iptables' history expansion command which refers to the most recent command starting with 'iptables'

Оно вообще есть?

 

kulti
()

[python][ide]хочу

В общем, хочется удобный способ разработки на python+django. Самое главное - человеческий автокомплит. Остальное не так важно.

eric - когда-то давно смотрел - монструозен

ulipad - непомерно жрет ресурсы

eclipse+pydev - ява-же =)

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

emacs - не предлагать - я vim люблю

spyderlib - поставил, но автокомплит там тоже толком не завелся, только для стандартных вызовов, а вот django дополнять не хочет

snaked - заустить не удалось, т.к. ругается на отсутствие pgobject. pip install pygtk выдает ошибку - «ImportError: No module named dsextras»

 ,

kulti
()

[kdm] не отрисовывается

Обновился с 4.4.5 до 4.5.3 после чего kdm перестал отрисовываться. Причем курсор в нужном месте меняет свой вид, как над полем для ввода. Ввожу логи-пароль. После этого подгружаются kde-шные курсоры, но вход в систему не происходит. Давлю alt+ctr+backspace - тадам! отрисовался kdm и теперь входит нормально.

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

Кто-нить знает, что делать, куда копать?

 

kulti
()

Вопрос про endian

Гуглю на тему независимости от endian. Везде предлагают использовать конверторы по типу htons() etc. Но никак не найду, почему вот такой вариант не будет работать:

//server
void writeInt16(char* buf, int16_t val)
{
  buf[0] = (val >> 8);
  buf[1] = (val & 0xff);
}

//client
int16_t readInt16(const char* buf)
{
  return (buf[0] << 8) + buf[1];
}
Т.е. идея в том, чтобы читать и писать по 8 байт.

kulti
()

[valgrind] suppressions

Гоняю валгриндом прогу, которая юзает curl и ssl. Ругается на неинициализированные переменные в ssl'е. Пишу свой suppressions файл. Проблема в том, что добавив все вызовы ssl внутри курла, валгринд продолжает ругается, но уже в моем коде, который использует возвращаемые курлом значения, которые внутри курла были получены в результате вызовов ssl. Проверил сей факт очень просто - добавил --track-origins=yes

==29449== Uninitialised value was created by a stack allocation ==29449== at 0x41F0106: RAND_load_file (in /usr/lib/libcrypto.so.1.0.0)

Вопрос: можно ли как-нибудь заблокировать сообщение об ошибке не последовательностью вызовов, а ее причиной?

 

kulti
()

[SVN]Скопировать часть репозитория в другой репозиторий

Собсна сабж.

Гуглопоиск предлагает svnadmin dump, что мне не подходит. В принципе можно написать скрипт, который чекаутит первую ревизию, коммитит ее в новый репозиторий etc, но зачем самому велосипед делать, если уже наверняка есть. Еще в голове родился велосипед: экспортировать в mercurial, а потом оттуда в svn, но второе действие, как осущетвить не нашел.

UPD. нужна история изменений

 

kulti
()

[hook][mipsel]падает при вызове оригинального метода

Доброго всем!

Пытаюсь сделать hook. На x86 все работает прекрасно, когда пытаюсь запустить это на mipsel - падает при вызове setsockopt_orig. В чем вообще могут быть грабли?

#define _GNU_SOURCE
#include <sys/time.h>
#include <stdio.h>
#include <stdlib.h>
#include <dlfcn.h>
#include <sys/socket.h>

static void * wrapper_routine(void *);

/* Original setsockopt function */
static int (*setsockopt_orig)(int socket, int level, int option_name,
              const void *option_value, socklen_t option_len) = NULL;


/* Library initialization function */
void wooinit(void) __attribute__((constructor));

void wooinit(void)
{
    setsockopt_orig = dlsym(RTLD_NEXT, "setsockopt");
    fprintf(stderr, "setsockopt: orig addr 0x%x\n", setsockopt_orig);
    if(setsockopt_orig == NULL)
    {
        char *error = dlerror();
        if(error == NULL)
        {
            error = "setsockopt is NULL";
        }
        fprintf(stderr, "%s\n", error);
        exit(EXIT_FAILURE);
    }
}

/* Our wrapper function for the real setsockopt() */
int setsockopt(int socket, int level, int option_name,
               const void *option_value, socklen_t option_len)
{
  int ret = 0;
  fprintf(stderr, "setsockopt hook call\n");
  if( setsockopt_orig != NULL )
  {
    ret = setsockopt_orig(socket, level, option_name, option_value, option_len);
  }
  fprintf(stderr, "setsockopt hook: ret %d\n", ret);
  return ret;
}

 

kulti
()

RSS подписка на новые темы