Есть устройство, которое зависает, если приходит «корявый» видео-поток. Появилась мысль не отдавать испорченные пакеты на декодирование. Сижу, курю спеки по TS, PES и ES, но что-то ничего, что там могло бы указаывать на невалидность потока не нахожу.
Кто-нибудь знает, это вообще возможно? Может, какие альтернативные мысли имеются.
Есть у меня приложение одно: устанавливает tcp-соединение, получает и обрабатывает данные, закрывает соединение и по новой(открывает, получает, обрабатывает, закрывает). Через некоторое время сеть работать перестает. Приложение пытается установить соединение и по таймау-ту прекращает попытки. Ничто не пингуетсе etc. Останавливаю приложение - вся сеть оживает.
Всякие select и poll умеют работать только с таймаутами, что не очень удобно при работе с tcp-соединением... Т.е. при получении одного байта мне уже сообщают, что мол POLLIN, а мне нужно, чтобы в сокете было некоторое минимальное кол-во байт.
Как дождаться нужного кол-ва байт без while(){usleep();} ?
Были у меня 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 что-то список рассылки не пашет...
Сейчас в гуглопочте по умолчанию реплай делается сверху цитироваия. Я ж хочу наоборот. В настройках такое поведение изменить нельзя. Нагуглил, что для лисы есть некий экстеншен, который позволяет включить такое поведение, но для хрома что-то не видать...
Как массив с элементами сделать - знаю, а вот пустой... уже весь мозг сломал.
PS. еще одни вопросик попутно возник. В 1.45 у write_json флаг появился, чтобы оно не читабельный json выводило, а все в одну строчку без пробелов херачило. На старых версиях такого поведения никак не добиться, да?
Пусть в репозитории есть 10 ревизий, но я неожиданно понял, что хочу вернуться к 5 ревизии и начать делать другой функционал. Причем ревизии с 6 по 10 мне не факт, что понадобятся когда-нибудь, но на всякий случай хотелось бы их положить в закрытый бранч.
Пытался делать новый бранч с существующим именем default и закрывать старый. Пробовал анонимный бранч делать и закрыать его. В локальной копии все выглядит так, как я хочу, но когда пытаюсь сделать push - ругается:
abort: push creates new remote heads on branch 'default'!
(did you forget to merge? use push -f to force)
-f, конечно, можно заюзать, но может я пытаюсь сделать что-то неправильное?
Хочу написать одно клиент-серверное приложение, чтоб клиент и сервер были не жестко завязаны и можно было легко протокол взаимодействия расширять. Насколько я знаю, для этого RPC можно использовать. Может, что-то еще существует? Какой именно RPC-протокол посоветуете?
Так же интересуют годные библиотеки для языков C++ и Python. Сам работал только с ulxmlrpcpp на клиентской стороне...
Понадобился мне сабж. Нагуглил много рецептов для трехколоночного шаблона с резиновой серединой, в частности такую штуку. Их вариант и взял за основу. Но во всех примерах в качестве фона исользуют заливку цветом, а у меня картинка с прозрачным краем. В итоге по краям получилась такая кака.
Можно ли как-нить это победить? Сам придумал лишь одно: отказаться от текстуры для background у body и использовать просто цвет, убрав прозрачность у соответствующих элементов.
Есть закрытый код. Пытаюсь сделать так, чтобы сокет читал из файла, а не из сети. Т.е. подменяю системные вызовы socket(), recv() etc.
Написал тестовую прогу. Сделал LD_PRELOAD=./mylib.so ./test Моя прога работает на ура. Но когда подсовываю свою либу закрытой проге, то она делает вызовы recv() и данные там точно правильные, но такое впечатление, что она их считает некошерными.
Что вообще может «мешать» воспринимать проге данные, как правильные?
Не знаю, как это называется, но в csh есть такая фича: если набираешь некий символ, а потом листаешь хистори стрелками вверх/вниз, то показываются только те комманды из хистори, которые с этой буквы начинаются.
Гуглю, как получить подобный эффект для bash. Единственное, что пока нашел - это
Try '!iptables' history expansion command which refers to the most recent command starting with 'iptables'
В общем, хочется удобный способ разработки на python+django. Самое главное - человеческий автокомплит. Остальное не так важно.
eric - когда-то давно смотрел - монструозен
ulipad - непомерно жрет ресурсы
eclipse+pydev - ява-же =)
vim - пробовал настроить автокомплит, но судя по всему оно берет слова из текущего файла и просто предлагает их. И кому такое нужно? Вимом пользуюсь регулярно и с удовольствием, но только для всякой мелочи.
emacs - не предлагать - я vim люблю
spyderlib - поставил, но автокомплит там тоже толком не завелся, только для стандартных вызовов, а вот django дополнять не хочет
snaked - заустить не удалось, т.к. ругается на отсутствие pgobject. pip install pygtk выдает ошибку - «ImportError: No module named dsextras»
Обновился с 4.4.5 до 4.5.3 после чего kdm перестал отрисовываться. Причем курсор в нужном месте меняет свой вид, как над полем для ввода. Ввожу логи-пароль. После этого подгружаются kde-шные курсоры, но вход в систему не происходит. Давлю alt+ctr+backspace - тадам! отрисовался kdm и теперь входит нормально.
Нагуглил, что с этой версии обязательный флаг для сборки policykit. Включил - пересобрал, перезагрузился - не помогло.
Гуглю на тему независимости от endian. Везде предлагают использовать конверторы по типу htons() etc. Но никак не найду, почему вот такой вариант не будет работать:
Гоняю валгриндом прогу, которая юзает 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)
Вопрос: можно ли как-нибудь заблокировать сообщение об ошибке не последовательностью вызовов, а ее причиной?
Гуглопоиск предлагает svnadmin dump, что мне не подходит. В принципе можно написать скрипт, который чекаутит первую ревизию, коммитит ее в новый репозиторий etc, но зачем самому велосипед делать, если уже наверняка есть. Еще в голове родился велосипед: экспортировать в mercurial, а потом оттуда в svn, но второе действие, как осущетвить не нашел.
Пытаюсь сделать 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;
}