Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] [Phonon] Утечка памяти, Проигрывание звуков из буфера 
:(
    Опции темы
just_geek
Дата 29.1.2009, 01:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Версия Qt - 4.4.0 Open Source Edition,  MS VC++ 2005 SP1

Есть такой код:

Код

// дело происходит в конструкторе класса
// ...
    _music = Phonon::createPlayer(Phonon::GameCategory);
    _wavBuffer = new QBuffer;
// ...

// функция проигрывания
void my_play(const QString &filename)
{
// _snd экземпляр класса отвечающего за работу с псевдо архивом
    if ( _snd != NULL )
    {
        _music->stop();
        _music->clearQueue();

        if ( _wavBuffer->isOpen() )
            _wavBuffer->close();

        QByteArray array = _snd->read(filename);
        _wavBuffer->open(QIODevice::ReadWrite);

        _wavBuffer->write(array);
        Phonon::MediaSource source(_wavBuffer);
        _music->setCurrentSource(source);
        _music->play();
    }
}


При первом вызове функции my_play объем памяти потребляемый приложением увеличивается с 10 до 25 мб... При последующих вызовах он объем растет. Звуки по размеру маленькие 5-50 кб в WAV формате.

Кто нибудь сталкивался с такой ерундой? Или может есть идеи как это безобразие исправить :(
PM MAIL   Вверх
pan2004
Дата 29.1.2009, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 357
Регистрация: 28.7.2007

Репутация: 6
Всего: 9



Если дело действительно в Phonon, перейди на 4.4.3. Возможно уже исправили.

Добавлено через 40 секунд
Цитата(just_geek @  29.1.2009,  01:14 Найти цитируемый пост)
_wavBuffer = new QBuffer;

А этот буфер когданибудь удаляется?


--------------------
Qt4/C++ fan
WinXP SP3: MSVC++2005 Qt4.5.1 Boost1.39
сыграем в дурака?
PM MAIL   Вверх
just_geek
Дата 30.1.2009, 01:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Цитата(pan2004 @  29.1.2009,  17:10 Найти цитируемый пост)
А этот буфер когданибудь удаляется?

Конечно. Дело даже не в этом. Если закомментировать 
Код

_music->setCurrentSource(source);

утечек нет. ВИдимо действительно придется попробовать 4.4.3.


p.s. появилась безумная мысль, а не может влиять старая версия DX SDK? (где-то 2004-2005 год)
PM MAIL   Вверх
just_geek
Дата 30.1.2009, 14:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Обновление до 4.4.3 не принесло результатов.  smile  Что ж делать то smile 
PM MAIL   Вверх
ecspertiza
Дата 30.1.2009, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 763
Регистрация: 3.11.2008
Где: г.Смоленск

Репутация: 4
Всего: 5



дык если Phonon такой глючный поюзай SDL, она тож кроссплатформенная.


--------------------
С уважением,
мастер конфетного цеха!

онлайн компилер
залип
PM MAIL   Вверх
just_geek
Дата 30.1.2009, 16:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Если ситуация в ближайшие дни не проясниться, попробую заменить на audiere || rtaudio

Это сообщение отредактировал(а) just_geek - 30.1.2009, 16:47
PM MAIL   Вверх
SABROG
Дата 30.1.2009, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Похожая ситуация: http://www.qtforum.org/article/26603/phono...rom-memory.html
Правда пока без ответа.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
just_geek
Дата 31.1.2009, 05:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



это мой пост... Даже не знаю, может написать уже разработчикам phonon? Ибо планируется довольно крупный проект, и охото иметь меньше зависимостей...
PM MAIL   Вверх
Любитель
Дата 31.1.2009, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Программист-романтик
****


Профиль
Группа: Комодератор
Сообщений: 3645
Регистрация: 21.5.2005
Где: Воронеж

Репутация: 16
Всего: 92



Напиши в кутешный багтреккер. Если дело действтельно в той строчке, что ты написал, то скорей всего это баг именно фонона. Можно ещё воспользоваться профайлером + дебажные версии Qt. И постараться найти причину (но в багтреккер в любом случае стоит написать).


--------------------
PM MAIL ICQ Skype   Вверх
just_geek
Дата 2.2.2009, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Вроде точнее локализовал ошибку smile Даже без буфера утекает...
Код

    _CrtMemState _state, _state2, _s3;
    _CrtMemCheckpoint(&_state);

    _music->setCurrentSource("F:\\_sounds\\" + filename);

    _CrtMemCheckpoint(&_state2);

    _CrtMemDifference(&_s3, &_state, &_state2);
    _CrtMemDumpStatistics(&_s3);
    _CrtMemDumpAllObjectsSince (&_state);


Код

0 bytes in 0 Free Blocks.
296 bytes in 7 Normal Blocks.
0 bytes in 0 CRT Blocks.
0 bytes in 0 Ignore Blocks.
0 bytes in 0 Client Blocks.
Largest number used: 0 bytes.
Total allocations: 4086 bytes.
Dumping objects ->
{218294} normal block at 0x00F34898, 40 bytes long.
 Data: <         uM     > 00 00 00 00 04 00 CD CD E8 75 4D 01 00 00 00 00
{218293} normal block at 0x00F34C60, 40 bytes long.
 Data: <                > 01 00 00 00 05 00 00 00 01 00 00 00 04 00 00 00
{218292} normal block at 0x033B6A60, 66 bytes long.
 Data: <            rj; > 01 00 00 00 17 00 00 00 17 00 00 00 72 6A 3B 03
{218290} normal block at 0x00F34840, 40 bytes long.
 Data: <         MM     > 01 00 00 00 03 00 CD CD A8 4D 4D 01 00 00 00 00
{218287} normal block at 0x00EE4D30, 12 bytes long.
 Data: <P           > 50 A4 F3 00 B8 B0 F3 00 B8 B0 F3 00
{218274} normal block at 0x00F346E0, 40 bytes long.
 Data: <         MM     > 02 00 00 00 02 00 CD CD A8 4D 4D 01 00 00 00 00
{218270} normal block at 0x02FD2BD0, 128 bytes long.
 Data: <    6        +  > 01 00 00 00 36 00 00 00 18 00 00 00 E2 2B FD 02
{218267} normal block at 0x0341DB38, 30 bytes long.
 Data: <            J A > 01 00 00 00 05 00 00 00 05 00 00 00 4A DB 41 03
{218266} normal block at 0x030FD2D0, 28 bytes long.
 Data: <                > 01 00 00 00 04 00 00 00 04 00 00 00 E2 D2 0F 03
{218265} normal block at 0x00F41AB0, 88 bytes long.
 Data: <          0g  0g> 01 00 00 00 D0 D2 0F 03 20 16 30 67 20 16 30 67
{218217} normal block at 0x0339FF10, 40 bytes long.
 Data: <0Z              > 30 5A 04 10 02 00 00 00 00 00 00 00 B0 1A F4 00
Object dump complete.


Надо в кдеешныйбагтракер писать, а не кутэшный...

Это сообщение отредактировал(а) just_geek - 2.2.2009, 04:59
PM MAIL   Вверх
SABROG
Дата 2.2.2009, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Попробуй может mingw'ой собрать, у него другой CRT.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
just_geek
Дата 2.2.2009, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



А может кто нибудь протестить? А то на моей машинке кутэ даже на VC++ долго собирается >2 часов. А на mingw это будет просто кошмар. Правда у mingw нету _Crt* функций..
PM MAIL   Вверх
SABROG
Дата 2.2.2009, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Выложи тогда архив с минимально работающим кодом, .pro файлом и всеми делами. Или скачай QtCreator, там все уже mingw'шное.


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
just_geek
Дата 2.2.2009, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 309
Регистрация: 13.12.2007

Репутация: 7
Всего: 10



Вот. Там только в некоторых местах надо будет подправить путь до папки с wav-файлами. И если сильно надо. Сделать #define PLAY_1
т.к. два варианта проигрывания есть. 1й - передается путь до файла, 2й - файл загружается в буфер.


з.ы. написано минут за 10. Сильно ногами не бить smile

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  phonon_test.rar 1,68 Kb
PM MAIL   Вверх
SABROG
Дата 2.2.2009, 17:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Пришлось убрать всякие crt, windows, pragma once. В итоге собрать не смог, т.к. в QtCreator'е либы phonon'а нет, а в более раннем снапшоте я его не собирал...


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0746 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.