Export to GitHub

cuberok - issue #61

r255, r256 and later revisions break FFmpeg plugin


Posted on Jul 17, 2009 by Quick Giraffe

Сравниваю, как cuberok играет на r254 и r255 и более поздних: на r254 ffmpeg играет ровно и плавно (я говорю про форматы ogg/vorbis и flac в первую очередь), на r255 играет только mp3, на ogg запинается, на flac падает. На более поздних ревизиях не падает, но запинается на ogg и flac, играет только mp3

Comment #1

Posted on Jul 17, 2009 by Quick Giraffe

(No comment was entered for this change.)

Comment #2

Posted on Jul 17, 2009 by Swift Kangaroo

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

В r255 очередь появилась, но работала не полностью адекватно

С r256 очередь считается условно рабочей. Если проблема только в производительности, то нужно попробовать увеличить длину очереди и уменьшить паузу при чтении, например так:

--- player_ffmpeg.cpp.orig 2009-07-17 16:23:56.687500000 +0400 +++ player_ffmpeg.cpp 2009-07-17 16:24:17.609375000 +0400 @@ -30,7 +30,7 @@ #include #include #define SDL_AUDIO_BUFFER_SIZE 1024 -#define QUEUESIZE 16 +#define QUEUESIZE 32

Q_EXPORT_PLUGIN2(player_ffmpeg, PlayerFfmpeg)

@@ -329,7 +329,7 @@ av_free_packet(&packet); } //if(ffmpeg.eofstream) ffmpeg.needToStop = true; - SDL_Delay(100); + SDL_Delay(30); } SDL_LockAudio(); SDL_PauseAudio(1);

Если проблема не с производительностью, а с кодеком, то сия операция должна непомочь. Результатов жду тут.

ЗЫЖ У меня девелоперская машина наверно слишком шустрая, сам запинок не замечал.

Comment #3

Posted on Jul 17, 2009 by Quick Giraffe

На мощности тоже не могу жаловаться, но дома, хоть и в меньшей степени, чем на работе, эффект наблюдается. На домашней машине патч помог. На работе теперь только в понедельник проверю. И, как отображено в соседнем баге, при выходе cuberok сегфолтится:

0 0xb73e4146 in ?? () from /usr/lib/qt4/libQtCore.so.4

(gdb) bt

0 0xb73e4146 in ?? () from /usr/lib/qt4/libQtCore.so.4

1 0x085057b0 in ?? ()

2 0xbfb4a938 in ?? ()

3 0x0867a1f8 in ?? ()

4 0xb751cff4 in ?? () from /usr/lib/qt4/libQtCore.so.4

5 0x00000008 in ?? ()

6 0x0860e458 in ?? ()

7 0xbfb48aa8 in ?? ()

8 0xb73e2207 in ?? () from /usr/lib/qt4/libQtCore.so.4

9 0xbfb48a88 in ?? ()

10 0x00000008 in ?? ()

11 0x0860e45c in ?? ()

12 0x0860e45c in ?? ()

13 0x00000000 in ?? ()

(gdb)

Понимаю, что толку от такого бэктрейса мало, но давно по глупости собрал свою генту с -fomit-frame-pointer

Comment #4

Posted on Jul 17, 2009 by Quick Giraffe

Итак, вот у меня компьютер core2duo model name : Intel(R) Core(TM)2 Duo CPU E8200 @ 2.66GHz 4 Gb оперативной памяти. Диски SATA. SATA controller: Intel Corporation 82801IR/IO/IH (ICH9R/DO/DH) PCI bridge: Intel Corporation 82801I

Звуковая карта, похоже, не при чём. 00:1b.0 Audio device: Intel Corporation 82801I (ICH9 Family) HD Audio Controller (rev 02)

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

В фоне запущены emerge world и на VirtualBox устанавливается Debian. Торреннты раздаются, много торрентов, Звук при использовании плагина ffmpeg заметно запинается. Даже с применённым предложенным патчем. Сейчас установки сделал даже вот такие:

Index: src/player_ffmpeg.cpp

--- src/player_ffmpeg.cpp (revision 265) +++ src/player_ffmpeg.cpp (working copy) @@ -30,7 +30,7 @@ #include #include #define SDL_AUDIO_BUFFER_SIZE 1024 -#define QUEUESIZE 16 +#define QUEUESIZE 1024

Q_EXPORT_PLUGIN2(player_ffmpeg, PlayerFfmpeg)

@@ -329,7 +329,7 @@ av_free_packet(&packet); } //if(ffmpeg.eofstream) ffmpeg.needToStop = true; - SDL_Delay(100); + SDL_Delay(2); } SDL_LockAudio(); SDL_PauseAudio(1);

Похоже, что при нагрузке эти настройки не влияют. GStreamer-плагин и mplayer играют чисто.

Comment #5

Posted on Jul 20, 2009 by Swift Kangaroo

Щас переделал чуток очередь, на дебе в виртуальной машине флаки вроде не лагают. Так же исправил сегфолт на выходе.

Comment #6

Posted on Jul 20, 2009 by Quick Giraffe

Мне всё интереснее и интереснее, что будет дальше с seek на флаках ))

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

Comment #7

Posted on Jul 20, 2009 by Quick Giraffe

На работе всё играет, проблема, которая описана в начале прошла. Осталось только то, что описано в Comment 4. Сейчас нагрузки нет, но регулярно (несколько раз в течение трека) возникает вот это маленькое "запинание". Не сказать, чтоб часто, на на gstreamer этого нет. Такое ощущение, как будто оно и нет нагрузки вовсе. Происходит не только на flac, но и на ogg/vorbis.

Status: Accepted

Labels:
Type-Defect Priority-Medium