Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Imlib+Mplayer 
:(
    Опции темы
JekaZZ
Дата 6.2.2009, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 3



Есть мультимедийная программа под Linux, использует SDL, Imlib, MPlayer, Xine. Графику выводит через иксы. 
Так вот стояло это и работало на slackware-11.0:
 - kernel 2.6.14
 - x11-6.9.0
 - imlib-1.9.14
 - SDL-1.2.9

Программа воспроизводит видео с помощью Mplayer и поверх его изображения отображет png картинку. Картинка имеет форму, то есть у нее прозрачный фон, она не прямоугольная.

Возникла необходимость перевести программу на новый дистрибутив - Slackware 12.1:
 - kernel 2.6.28.3
 - imlib-1.6.15
 - X.org 7.4
 - SDL-1.2.9

Программу пересобрал в новой системе. 

Перестало работать отображение картинки поверх изображения mplayer. 
Видно только черный силуэт картинки, то есть она отображается, но вся черным цветом.

Программа не мной писана. Посмотрел код - для изображений использует imlib. Там же используются функции xlib.
Так как ни с Imlib-ом ни с xlib-ом не знаком, прошу помощи. 
Что могло произойти и как это решить?
PM MAIL   Вверх
0xDX
Дата 7.2.2009, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



JekaZZ - как ваш вопрос относится к классике С++?
Впредь пишете вопросы в соответствующие места.


PM MAIL   Вверх
andrew_121
Дата 7.2.2009, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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



JekaZZ, Могу помочь.


--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
JekaZZ
Дата 9.2.2009, 15:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 3



Подозрения падают на xlib. 
Картинка выводится таким образом:
 - с помощью imlib грузится картинка, 
 - получается ее маска
 - создается окно X
 - картинка устанавливается фоном окна X
 - форма окна X устанавливается по маске рисунка

Код

ImlibData* m_data=Imlib_init(m_display);
ImlibImage* m_image=Imlib_load_image(m_data, (char*)filename);
Window m_window=XCreateSimpleWindow(m_display, m_parentWindow, x, y, w, h, 1, 0, 0);
Imlib_render(m_data, m_image, w, h);
Pixmap m_pixmap=Imlib_move_image(m_data, m_image);
Pixmap m_mask=Imlib_move_mask(m_data, m_image);
XSetWindowBackgroundPixmap(m_display, m_window, m_pixmap);
XShapeCombineMask(m_display, m_window, ShapeBounding, 0, 0, m_mask, ShapeSet);


Imlib_render(m_data, m_image, w, h) возвращает 1, то есть здесь все в порядке. 
XSetWindowBackgroundPixmap возвращает 1, но что это означает я так и не нашел. 
Как получить код последней ошибки Xlib?
PM MAIL   Вверх
andrew_121
Дата 9.2.2009, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодофей
****


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

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





--------------------
Удалил аккаунт. Прощайте!
PM MAIL   Вверх
JekaZZ
Дата 10.2.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

Репутация: нет
Всего: 3



Сделал маленькую программку с той же последовательностью действий, что и в программе: 1. загрузка картинки, 2. установка ее фоном окна, 3. установка формы окна.
 Вобщем, ошибка та же , что и в программе - после установки формы окна происходит ошибка BadMatch. Если перед этим убрать установку фона, то ошибка не возникает, следовательно ошибка возникает именно из-за установки фона, тем более, что фон не устанавливается, а форма окна устанавливается.

Вот эта тестовая программка:
Код

#include <X11/Xlib.h>
#include <Imlib.h>
#include <stdio.h>
#include <unistd.h>

int handler(Display *d, XErrorEvent *e)
{
    printf("->Error: %d\n", e->error_code);
}

char* fileName="img.png";  // сюда вставить имя файла

int main(int argc, char* argv[])
{
    puts("Set error handler");
    XSetErrorHandler(&handler);

    puts("Open display");
    Display *d = XOpenDisplay(0);
    printf("Display: %x\n", d);
    if (d == NULL)
        return -1;
    
    puts("Create window");
    Window w = XCreateSimpleWindow(d,
                                    DefaultRootWindow(d),
                    100, 100, 
                    200, 200,
                    0,
                    0,
                    0
                    );

    puts("Init imlib");
    ImlibData *id = Imlib_init(d);
    printf("Imlib data: %x\n", id);
    if (id == NULL)
    return -1;
    
    puts("Load image");
    ImlibImage* iimg = Imlib_load_image(id, fileName);
    printf("Imlib image: %x. W:%d, H:%d \n", iimg, iimg->rgb_width, iimg->rgb_height);
    if (iimg == NULL)
    return -1;
    
    puts("Imlib Render");
    if(!Imlib_render(id, iimg, iimg->rgb_width, iimg->rgb_height)) {
    puts("->Error: Imlib render returns 0");
    return -1;
    }
    
    XSetErrorHandler(&handler);
    
    puts("Imlib Move image & mask");
    Pixmap pix = Imlib_move_image(id, iimg);
    Pixmap mask = Imlib_move_mask(id, iimg);

    puts("Set window background");
    int r = XSetWindowBackgroundPixmap(d, w, pix);
    printf("Set background returns %d\n", r);
    
    puts("Set window shape");
    XShapeCombineMask(d, w, ShapeBounding, 0, 0, mask, ShapeSet);

    puts("Map window");
    XMapRaised(d, w);
    XSync(d, false);
    
    sleep(10);
    return 0;
}


Картинка точно грузится, так как определяется ее размеры и устанавливается по ее контуру форма окна
В чем может быть дело? Почему фон не устанавливается, что значит эта ошибка?

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




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


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

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