Крупнов Александр
Интересующийся
Сообщений: 9
|
|
« : 24 Июнь, 2011, 18:55:33 » |
|
Доброго времени суток!
Имею следующую платформу: i945, devg-gma9xx, devg-i830. Нужно: рисование в оверлее/слое с хрома-ключом - рисованием слоя только на пикселях с определенным цветом. Проблема в том, что слои и оверлей создаютсЯ нормально, но ни хрома ключ в GF (gf_layer_set_chroma_cap, причем gf_layer_query дает флаги CHROMA_CAPS = 0x900), ни в оверлее (Pg_SCALER_PROP_CHROMA_ENABLE and Pg_SCALER_PROP_CHROMA_SPECIFY_KEY_MASK) не дают прозрачности (рисования по цвету). Причем! Приложение egl-gears на слое №2 и №3 рисует поверх всех окон Photon (сквозь шестеренки видны окна и рабочий стол, меню и тп.п, то есть не блиттинг и не direct mode, не gf_context_set_chroma)... Вопросы: 1) Как получить хрома-ключ? 2) Может быть есть исходник egl-gears? У меня есть примеры из Foundry27 Graphics Project, но там только gles-egl-gears, в котором нет исходников того приложения, а TDK Advanced Graphicы получить не могу - есть лицензии только на QNX 6.21, 6.3.0, 6.4.1, но не на AG TDK, в составе котороо есть вроде бы те исходники...
ПС: QNX 6.5.0 Evaluation пока пробовал только при запуске с CD, но там урезанные драйвера и слои/оверлеи работают очень криво...
|
|
« Последнее редактирование: 24 Июнь, 2011, 19:00:31 от Крупнов Александр »
|
Записан
|
ЗАО НИИИТ-РК, Челябинск
|
|
|
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1075
|
|
« Ответ #1 : 27 Июнь, 2011, 14:26:34 » |
|
Доброго времени суток!
Имею следующую платформу: i945, devg-gma9xx, devg-i830. Нужно: рисование в оверлее/слое с хрома-ключом - рисованием слоя только на пикселях с определенным цветом. Проблема в том, что слои и оверлей создаютсЯ нормально, но ни хрома ключ в GF (gf_layer_set_chroma_cap, причем gf_layer_query дает флаги CHROMA_CAPS = 0x900), ни в оверлее (Pg_SCALER_PROP_CHROMA_ENABLE and Pg_SCALER_PROP_CHROMA_SPECIFY_KEY_MASK) не дают прозрачности (рисования по цвету). Причем! Приложение egl-gears на слое №2 и №3 рисует поверх всех окон Photon (сквозь шестеренки видны окна и рабочий стол, меню и тп.п, то есть не блиттинг и не direct mode, не gf_context_set_chroma)... Вопросы: 1) Как получить хрома-ключ? 2) Может быть есть исходник egl-gears? У меня есть примеры из Foundry27 Graphics Project, но там только gles-egl-gears, в котором нет исходников того приложения, а TDK Advanced Graphicы получить не могу - есть лицензии только на QNX 6.21, 6.3.0, 6.4.1, но не на AG TDK, в составе котороо есть вроде бы те исходники...
ПС: QNX 6.5.0 Evaluation пока пробовал только при запуске с CD, но там урезанные драйвера и слои/оверлеи работают очень криво...
Имеет смысл попробовать инициализацию слоя следующим образом: gf_layer_attach(); gf_layer_set_chroma(); gf_layer_set_src_viewport(); gf_layer_set_dst_viewport(); gf_layer_enable(); gf_layer_update(); /* Изменения в настройки слоя будут применены после выполнения этой функции */ egl-gears работает по схожему принципу, за исключением gf_layer_update, его вызывает OpenGL ES самостоятельно.
|
|
|
Записан
|
|
|
|
Крупнов Александр
Интересующийся
Сообщений: 9
|
|
« Ответ #2 : 28 Июнь, 2011, 07:47:17 » |
|
Благодарю за ответ! Практически так я и делаю, кроме того, что вызываю gf_layer_update() после каждой изменения параметра gf_layer_set*. Сегодня я наконец пробился с этой фигней, однако все так грустно, что хоть плач Я стал анализировать возвращаемые значения gf_layer_update() для слоев 2 и 3, в которых работает egl-gears, и получил, что при любой комбинации флагов CHROMA_OP_DST/CHROMA_OP_SRC/CHROMA_OP_DRAW/CHROMA_OP_NO_DRAW, кроме CHROMA_OP_SRC|CHROMA_OP_NODRAW (то есть сравнить значение с источником-картинкой и не рисовать если совпало) gf_layer_update() возвращает 7 - то есть не поддержано. То есть поддерживается только CHROMA_OP_SRC|CHROMA_OP_NODRAW. Причем и на i830 и на gma9xx. Так же и egl-gears рисует. Мне же нужно CHROMA_OP_DST|CHROMA_OP_DRAW. Вот теперь и не знаю, что делать... Кстати! Ошибка в драйвере: для gma9xx gf_layer_query дает флаги CHROMA_CAPS = 0x900, что как раз и обозначает CHROMA_OP_DST|CHROMA_OP_DRAW - это неправильно. Правильно дает i830 CHROMA_CAPS = 0x1001 - вот это и есть CHROMA_OP_SRC|CHROMA_OP_NODRAW. НО! для слоя №1 (YUV-слой) оба драйвера дают 0х900 и как бы разрешают операции с хрома-ключом. При этом gf_layer_update() полсе конфигурирования gf_layer_set_chroma возвращает GF_ERR_OK - типа все ОК... А прозрачности нету совсем... Может ошибка или хитрость? В QNX 6.5.0 - так же совершенно.
|
|
|
Записан
|
ЗАО НИИИТ-РК, Челябинск
|
|
|
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1075
|
|
« Ответ #3 : 28 Июнь, 2011, 11:22:33 » |
|
Благодарю за ответ! Практически так я и делаю, кроме того, что вызываю gf_layer_update() после каждой изменения параметра gf_layer_set*. Сегодня я наконец пробился с этой фигней, однако все так грустно, что хоть плач Я стал анализировать возвращаемые значения gf_layer_update() для слоев 2 и 3, в которых работает egl-gears, и получил, что при любой комбинации флагов CHROMA_OP_DST/CHROMA_OP_SRC/CHROMA_OP_DRAW/CHROMA_OP_NO_DRAW, кроме CHROMA_OP_SRC|CHROMA_OP_NODRAW (то есть сравнить значение с источником-картинкой и не рисовать если совпало) gf_layer_update() возвращает 7 - то есть не поддержано. То есть поддерживается только CHROMA_OP_SRC|CHROMA_OP_NODRAW. Причем и на i830 и на gma9xx. Так же и egl-gears рисует. Мне же нужно CHROMA_OP_DST|CHROMA_OP_DRAW. Вот теперь и не знаю, что делать... Вы правы, egl-gears использует именно эту комбинацию флагов. Кстати! Ошибка в драйвере: для gma9xx gf_layer_query дает флаги CHROMA_CAPS = 0x900, что как раз и обозначает CHROMA_OP_DST|CHROMA_OP_DRAW - это неправильно. Правильно дает i830 CHROMA_CAPS = 0x1001 - вот это и есть CHROMA_OP_SRC|CHROMA_OP_NODRAW. НО! для слоя №1 (YUV-слой) оба драйвера дают 0х900 и как бы разрешают операции с хрома-ключом. При этом gf_layer_update() полсе конфигурирования gf_layer_set_chroma возвращает GF_ERR_OK - типа все ОК... А прозрачности нету совсем... Может ошибка или хитрость? В QNX 6.5.0 - так же совершенно.
Исходя из того, что эти драйверы поддерживают различный набор аппаратуры я бы не стал говорить об ошибке на данном этапе. Драйверы действительно поддерживают различные операции с chromakey для слоев. Судя по исходным кодам для QNX 6.5.0 ситуация должна быть следующей: devg-gma9xx.so*_CHROMA_OP_SRC_MATCH - для слоев > 1 *_CHROMA_OP_DST_MATCH - не поддерживается *_CHROMA_OP_DRAW - не поддерживается devg-i830.so*_CHROMA_OP_SRC_MATCH - для слоев > 1 *_CHROMA_OP_DST_MATCH - для слоя 1 Других ограничений я в явном виде не встретил. Что касается CHROMA_CAPS в devg-gma9xx.so мы уточним ситуацию.
|
|
|
Записан
|
|
|
|
Крупнов Александр
Интересующийся
Сообщений: 9
|
|
« Ответ #4 : 28 Июнь, 2011, 12:28:43 » |
|
То есть, стоит еще раз попытаться использовать _CHROMA_OP_DST_MATCH с драйвером devg-i830.so в 6.5.0 и слоем №1 (который YUV)? Что же, займусь этим прямо сейчас! Спасибо за информацию - дало надежду! Единственно, пока не могу сообразить, как рисовать в этом слое (использовать YUV в принципе умею): контекст привязать к surface, созданной для этого слоя, невозможно, а получить указатель собственно на плоскость отображения не знаю как... Возможно gf_surface_get_info(), а потом gf_surface_info_t *info->vaddr? Попробую!
|
|
|
Записан
|
ЗАО НИИИТ-РК, Челябинск
|
|
|
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1075
|
|
« Ответ #5 : 28 Июнь, 2011, 13:06:15 » |
|
Стоит также отметить, что devg-gma9xx.so поддерживает существенно меньшее число контроллеров и, если в нем запрещена операция DST_MATCH, видимо, на то были причины.
|
|
|
Записан
|
|
|
|
Крупнов Александр
Интересующийся
Сообщений: 9
|
|
« Ответ #6 : 28 Июнь, 2011, 13:40:15 » |
|
Итак, посмотрел в 6.5.0 и i830 - та же самая грусть-печаль... Слой создается, отображается и... Независимо от цвета на основном слое (фотона) и установленной операции продолжает отображаться... Причем, установка gf_layer_set_chroma() проходит успешно и параметры потом считываются gf_layer_query_state() тоже правильно... Под спойлером привожу текст программы. В нем, конечно же, не устанавливается контекст. Но слой создается, поверхность тоже... #include <errno.h> #include <stdio.h> #include <Pt.h> #include <Ph.h> #include <photon/Pg.h> #include <gf/gf.h>
void print_gf_format( gf_format_t format ) { if( format == GF_FORMAT_BYTE ) { printf( "\tGF_FORMAT_BYTE\n" ); } if( format == GF_FORMAT_PAL8 ) { printf( "\tGF_FORMAT_PAL8\n" ); } if( format == GF_FORMAT_PACK_ARGB1555 ) { printf( "\tGF_FORMAT_PACK_ARGB1555\n" ); } if( format == GF_FORMAT_PKLE_ARGB1555 ) { printf( "\tGF_FORMAT_PKLE_ARGB1555 \n" ); } if( format == GF_FORMAT_PKBE_ARGB1555 ) { printf( "\tGF_FORMAT_PKBE_ARGB1555\n" ); } if( format == GF_FORMAT_PACK_RGB565 ) { printf( "\tGF_FORMAT_PACK_RGB565\n" ); } if( format == GF_FORMAT_PKLE_RGB565 ) { printf( "\tGF_FORMAT_PKLE_RGB565\n" ); } if( format == GF_FORMAT_PKBE_RGB565 ) { printf( "\tGF_FORMAT_PKBE_RGB565\n" ); } if( format == GF_FORMAT_BGR888 ) { printf( "\tGF_FORMAT_BGR888\n" ); } if( format == GF_FORMAT_BGRA8888 ) { printf( "\tGF_FORMAT_BGRA8888\n" ); } if( format == GF_FORMAT_ARGB8888 ) { printf( "\tGF_FORMAT_ARGB8888\n" ); } if( format == GF_FORMAT_PACK_YUV_UYVY ) { printf( "\tGF_FORMAT_PACK_YUV_UYVY\n" ); } if( format == GF_FORMAT_PKLE_YUV_UYVY ) { printf( "\tGF_FORMAT_PKLE_YUV_UYVY\n" ); } if( format == GF_FORMAT_PKBE_YUV_UYVY ) { printf( "\tGF_FORMAT_PKBE_YUV_UYVY\n" ); } if( format == GF_FORMAT_PACK_YUV_YUY2 ) { printf( "\tGF_FORMAT_PACK_YUV_YUY2\n" ); } if( format == GF_FORMAT_PKLE_YUV_YUY2 ) { printf( "\tGF_FORMAT_PKLE_YUV_YUY2\n" ); } if( format == GF_FORMAT_PKBE_YUV_YUY2 ) { printf( "\tGF_FORMAT_PKBE_YUV_YUY2\n" ); } if( format == GF_FORMAT_PACK_YUV_YVYU ) { printf( "\tGF_FORMAT_PACK_YUV_YVYU\n" ); } if( format == GF_FORMAT_PKLE_YUV_YVYU ) { printf( "\tGF_FORMAT_PKLE_YUV_YVYU\n" ); } if( format == GF_FORMAT_PKBE_YUV_YVYU ) { printf( "\tGF_FORMAT_PKBE_YUV_YVYU\n" ); } if( format == GF_FORMAT_PACK_YUV_V422 ) { printf( "\tGF_FORMAT_PACK_YUV_V422\n" ); } if( format == GF_FORMAT_PKLE_YUV_V422 ) { printf( "\tGF_FORMAT_PKLE_YUV_V422\n" ); } if( format == GF_FORMAT_PKBE_YUV_V422 ) { printf( "\tGF_FORMAT_PKBE_YUV_V422 \n" ); } if( format == GF_FORMAT_PACK_YUV_NV12 ) { printf( "\tGF_FORMAT_PACK_YUV_NV12\n" ); } if( format == GF_FORMAT_PACK_YUV_AYUV ) { printf( "\tGF_FORMAT_PACK_YUV_AYUV\n" ); } if( format == GF_FORMAT_PLANAR_YUV_YVU9 ) { printf( "\tGF_FORMAT_PLANAR_YUV_YVU9\n" ); } if( format == GF_FORMAT_PLANAR_YUV_YV12 ) { printf( "\tGF_FORMAT_PLANAR_YUV_YV12\n" ); } if( format == GF_FORMAT_PLANAR_YUV_420 ) { printf( "\tGF_FORMAT_PLANAR_YUV_420\n" ); }
}
int main( int argc, char **argv ) { int ret; unsigned int i, j; gf_dev_t pdev; gf_dev_info_t ginfo; gf_display_t pdisplay; gf_display_info_t dinfo; gf_layer_t player; gf_layer_info_t linfo; gf_format_t need_format; gf_surface_t psurface; gf_surface_info_t sinfo; const unsigned order[] = { 0, 1, 2, 3 }; gf_chroma_t *gfchroma = NULL; gf_color_t gfchromacolor = 0; gf_color_t gfsurfacecolor; uint8_t red, green, blue, alpha; gf_palette_t layer_palette;
gfchroma = (gf_chroma_t*)malloc( sizeof(gf_chroma_t) ); if( !gfchroma ) { printf( "can't malloc chroma: %s\n", strerror(errno) ); exit(0); }
memset( gfchroma, 0, sizeof(*gfchroma) );
red = 0xf0; green = 0x00; blue = 0xf0; alpha = 0x00;
gfchromacolor = (alpha << 24) | (red << 16) | (green << 8 ) | (blue << 0 );
red = 0; green = 0; blue = 0; alpha = 0;
gfsurfacecolor = (alpha << 24) | (red << 16) | (green << 8 ) | (blue << 0 );
layer_palette.ncolors = 1; layer_palette.colors = &gfsurfacecolor;
ret = gf_dev_attach( &pdev, GF_DEVICE_INDEX(0), &ginfo );
if( ret != GF_ERR_OK ) { printf( "dev: error %d\n", ret ); exit( ret ); }
printf( "displays number %d\n", ginfo.ndisplays );
for( i = 0; i < ginfo.ndisplays; ) { ret = gf_display_attach( &pdisplay, pdev, i, &dinfo ); printf( "display: number %d\n", i ); if( ret == GF_ERR_OK ) { printf( "display: attached\n" ); printf( "display: resolution %dX%d, refresh = %dHz\n",dinfo.xres,dinfo.yres,dinfo.refresh); printf( "display: layers %d\n",dinfo.nlayers); printf( "display: format 0x%08X, named ",dinfo.format); print_gf_format( dinfo.format ); break; } else { printf( "display: attach error %d\n", ret ); gf_dev_detach( pdev ); exit( ret ); } i ++; }
gf_modeinfo_t mode;
for( i = 0; ; i ++ ) { ret = gf_display_query_mode( pdisplay, i, &mode );
if( ret != GF_ERR_OK ) { break; } printf( "mode %d primary format: ", i ); print_gf_format( mode.primary_format ); if( mode.flags & GF_MODE_GENERIC != GF_MODE_GENERIC ) { printf( "resolution: %dx%d, refresh %d\n", mode.xres, mode.yres, mode.refresh[0] ); } }
ret = gf_display_set_layer_order( pdisplay, order, GF_LAYER_UPDATE_NO_WAIT_IDLE ); printf( "layer order: %d\n", ret );
need_format = dinfo.format;
need_format = GF_FORMAT_PACK_YUV_UYVY; // need_format = GF_FORMAT_PACK_YUV_YUY2; // need_format = GF_FORMAT_BGRA8888;
for( i = 0; i < dinfo.nlayers; ) { ret = gf_layer_attach( &player, pdisplay, i, 0 | GF_LAYER_ATTACH_NODEFAULTS | GF_LAYER_ATTACH_PASSIVE //| GF_LAYER_ATTACH_NOAUTODISABLE );
if( ret != GF_ERR_OK ) { printf( "layer %d: attach error %d\n", i, ret ); if( ret == GF_ERR_INUSE ) { printf( "layer %d is IN_USE\n", i ); i ++; continue; } else { printf( "layer %d error %d. BREAK\n", i, ret ); break; } }
for( j = 0; j < 16; ) { ret = gf_layer_query( player, j, &linfo );
printf( "--------------------------------------\n" );
if( ret != GF_ERR_OK ) { printf( "layer %d reg %d: query error %d\n", i, j, ret ); j ++; break; }
printf( "layer %d, reg %d: caps 0x%08X, chroma 0x%08X alpha=0x%08X\n", i, j, linfo.caps, linfo.chromakey_caps, linfo.alpha_valid_flags ); printf( "order caps 0x%08X\n", linfo.order_caps ); printf( "format 0x%08X:\n", linfo.format ); print_gf_format( linfo.format );
if( linfo.caps & GF_LAYER_CAP_MAIN_DISPLAY == GF_LAYER_CAP_MAIN_DISPLAY ) { printf( "layer %d: MAIN layer, continue...", i ); j ++; break; }
if( linfo.format == need_format ) { printf( "Will use this!\n" ); break; }
j ++; }
printf( "--------------------------------------\n" );
gf_layer_detach( player );
if( linfo.format == need_format ) { break; }
i ++; }
unsigned upflags; upflags = 0 //| GF_LAYER_UPDATE_NO_WAIT_IDLE //| GF_LAYER_UPDATE_NO_WAIT_VSYNC ;
ret = gf_layer_attach( &player, pdisplay, i, 0 //| GF_LAYER_ATTACH_NODEFAULTS //| GF_LAYER_ATTACH_PASSIVE //| GF_LAYER_ATTACH_NOAUTODISABLE );
if( ret != GF_ERR_OK ) { printf( "layer_attach %d ret = %d\n", i, ret ); gf_display_detach( pdisplay ); gf_dev_detach( pdev );
exit(0); }
printf( "Attached to layer: %d\n", i );
gf_layer_disable( player ); gf_layer_update( player, upflags );
ret =
gf_surface_create_layer ( &psurface, &player, 1, 0, //640, 512, dinfo.xres/2, dinfo.yres/2, need_format, NULL, //&layer_palette, 0 | GF_SURFACE_CREATE_PAGE_ALIGNED //| GF_SURFACE_CREATE_SHAREABLE | GF_SURFACE_CREATE_PHYS_CONTIG | GF_SURFACE_CREATE_CPU_LINEAR_ACCESSIBLE | GF_SURFACE_CREATE_CPU_FAST_ACCESS //| GF_SURFACE_CREATE_2D_ACCESSIBLE //| GF_SURFACE_CREATE_3D_ACCESSIBLE //| GF_SURFACE_CREATE_VG_ACCESSIBLE );
if( ret != GF_ERR_OK ) { printf( "can't create surface: %d\n", ret ); gf_layer_detach( player ); gf_display_detach( pdisplay ); gf_dev_detach( pdev ); exit(0); }
if( NULL == gf_surface_get_info( psurface, &sinfo ) ) { printf( "can't get surface info: %d\n", ret ); gf_surface_free( psurface ); gf_layer_detach( player ); gf_display_detach( pdisplay ); gf_dev_detach( pdev ); exit(0); }
printf( "surface: sid = %d, w=%d, h=%d, stride=%d, flags=0x%08X\n", sinfo.sid, sinfo.w, sinfo.h, sinfo.stride, sinfo.flags ); printf( "surface: paddr=0x%08X vaddr=0x%08X\n", sinfo.paddr, sinfo.vaddr ); printf( "format:" ); print_gf_format( sinfo.format );
gf_context_t pcontext; ret = gf_context_create( &pcontext );
if( ret != GF_ERR_OK ) { printf( "can't create context: %d\n", ret ); gf_surface_free( psurface ); gf_layer_detach( player ); gf_display_detach( pdisplay ); gf_dev_detach( pdev ); exit(0); }
if( (ret=gf_context_set_surface( pcontext, psurface )) != GF_ERR_OK) { printf( "can't set context surface: %d\n", ret ); }
gfchroma->mode = 0 //| GF_CHROMA_OP_SRC_MATCH | GF_CHROMA_OP_DST_MATCH | GF_CHROMA_OP_DRAW //| GF_CHROMA_OP_NO_DRAW ; gfchroma->color0 = gfchromacolor;
printf( "chromacolor=0x%08X, mode=0x%08X\n", gfchroma->color0, gfchroma->mode );
gf_layer_set_chroma( player, gfchroma ); ret = gf_layer_update( player, upflags ); printf( "chroma update: %d\n", ret );
gf_layer_set_surfaces( player, &psurface, 1 ); ret = gf_layer_update( player, upflags ); printf( "set_surfaces update: %d\n", ret );
gf_layer_set_src_viewport( player, 0, 0, dinfo.xres/2, dinfo.yres/2 ); ret = gf_layer_update( player, upflags ); printf( "src_viewport update: %d\n", ret );
gf_layer_set_dst_viewport( player, dinfo.xres-sinfo.w, dinfo.yres-sinfo.h-200, dinfo.xres, dinfo.yres-200 ); ret = gf_layer_update( player, upflags ); printf( "dst_viewport update: %d\n", ret );
gf_layer_enable( player ); ret = gf_layer_update( player, upflags ); printf( "enable update: %d\n", ret );
gf_layer_state_t pstate;
ret = gf_layer_query_state( player, &pstate );
if( ret != GF_ERR_OK ) { printf( "layer state error: %d\n", ret ); gf_layer_disable( player ); gf_layer_update( player, upflags ); gf_context_unset_surface( pcontext ); gf_surface_free( psurface ); gf_context_free( pcontext ); gf_layer_detach( player ); gf_display_detach( pdisplay ); gf_dev_detach( pdev ); exit(0); }
printf( "src: %d,%d,%d,%d dst: %d,%d,%d,%d\n", pstate.src_vp.x1, pstate.src_vp.y1, pstate.src_vp.x2, pstate.src_vp.y2, pstate.dst_vp.x1, pstate.dst_vp.y1, pstate.dst_vp.x2, pstate.dst_vp.y2 );
printf( "en: %d, chroma: m=0x%02X, c0=0x%08X, c1=0x%08X, msk=0x%08X\n", pstate.enabled, pstate.chroma.mode, pstate.chroma.color0, pstate.chroma.color1, pstate.chroma.mask );
short x = 0, y = 0;
gf_draw_begin( pcontext ); gf_context_set_fgcolor(pcontext,gfchromacolor); gf_draw_rect(pcontext,0,0,640,512); gf_draw_end( pcontext );
for( i = 0; i < 100; i ++ ) { gf_draw_begin( pcontext );
gf_context_set_fgcolor(pcontext,gfchromacolor); gf_draw_rect(pcontext,0,0,640,512);
gf_context_set_fgcolor(pcontext,0xF0F0F0); gf_draw_rect(pcontext,10+x,10+y,50+x,50+y);
gf_context_set_fgcolor(pcontext,0x0F0F0F); gf_draw_rect(pcontext,20+x,20+y,40+x,40+y);
gf_draw_end( pcontext );
x = i*5; y = i*5;
delay( 100 ); }
gf_layer_disable( player ); gf_layer_update( player, upflags ); gf_context_unset_surface( pcontext ); gf_surface_free( psurface ); gf_context_free( pcontext ); gf_layer_detach( player ); gf_display_detach( pdisplay ); gf_dev_detach( pdev );
free( gfchroma );
printf( "normal exit...\n" );
exit(0); return 0; }
Кстати! Никак не могу получить gf_surface_info_t *info->vaddr, но всегда получаю gf_surface_info_t *info->paddr. Это почему? Можно ли как-нибудь использовать это значение?
|
|
« Последнее редактирование: 28 Июнь, 2011, 13:44:09 от Крупнов Александр »
|
Записан
|
ЗАО НИИИТ-РК, Челябинск
|
|
|
Крупнов Александр
Интересующийся
Сообщений: 9
|
|
« Ответ #7 : 30 Июнь, 2011, 07:47:31 » |
|
Вопрос вдогонку: если использовать видеокарту matrox g550, то что там с хрома-ключом?
|
|
|
Записан
|
ЗАО НИИИТ-РК, Челябинск
|
|
|
Крупнов Александр
Интересующийся
Сообщений: 9
|
|
« Ответ #8 : 05 Июль, 2011, 05:15:16 » |
|
Ребят, я, конечно, понимаю, что вопрос сложный, но помогите решить. Если нужно, то можем с предприятия сделать официальный запрос. Мы клиенты СВД ВС, в прошлом году купили лицензию на 6.4.1 СДП, сотрудничаем уже очень давно - с 90х. Куда слать запрос? На support@kpda.ru? Или факсом?
|
|
|
Записан
|
ЗАО НИИИТ-РК, Челябинск
|
|
|
Александр Варварик
Администратор
Легенда
Сообщений: 1353
|
|
« Ответ #9 : 05 Июль, 2011, 05:34:11 » |
|
И вопрос не простой и мы только в воскресенье с МВМС. Честно говоря не очень понятно в чем мы можем оказать помощь.
PS. Мы знаем, что вы наш клиент и сотрудничаем мы действительно давно, поэтому в прошлом году мы помогли вам обновить ваши средства разработки 6.3 SE до 6.4.1 SDP, несмотря на то что такой программы обновления у QSS нет, но мы идем навстречу нашим клиентам и по возможности решаем проблемные вопросы.
|
|
|
Записан
|
|
|
|
Андрей Докучаев
Сотрудник СВД ВС
Легенда
Сообщений: 1075
|
|
« Ответ #10 : 05 Июль, 2011, 14:13:48 » |
|
Вопрос вдогонку: если использовать видеокарту matrox g550, то что там с хрома-ключом?
Драйвер devg-matroxg.so поддерживает лишь *_CHROMA_OP_DST_MATCH для слоя 1. Другие операции не поддерживаются. Итак, посмотрел в 6.5.0 и i830 - та же самая грусть-печаль... Слой создается, отображается и... Независимо от цвета на основном слое (фотона) и установленной операции продолжает отображаться... Причем, установка gf_layer_set_chroma() проходит успешно и параметры потом считываются gf_layer_query_state() тоже правильно... Под спойлером привожу текст программы. В нем, конечно же, не устанавливается контекст. Но слой создается, поверхность тоже... #include <errno.h> #include <stdio.h> #include <Pt.h> #include <Ph.h> #include <photon/Pg.h> #include <gf/gf.h>
...
Кстати! Никак не могу получить gf_surface_info_t *info->vaddr, но всегда получаю gf_surface_info_t *info->paddr. Это почему? Можно ли как-нибудь использовать это значение? Как я выше писал, devg-i830.so поддерживает гораздо большее число контроллеров, по сравнению с узко специализированным devg-gma9xx.so. Не исключено, что интересующая операция поддерживается лишь в некоторых контроллерах. Вероятно Ваш контроллер не из их числа (об этом можно судить исходя из возможностей devg-gma9xx.so). Полагаю дальнейший диалог лучше переводить на электронную почту.
|
|
|
Записан
|
|
|
|
Крупнов Александр
Интересующийся
Сообщений: 9
|
|
« Ответ #11 : 06 Июль, 2011, 05:20:19 » |
|
Понял, что вы пытаетесь донести до меня. Перехожу на электронку. На <почтовый адрес удалён>? И вопрос не простой и мы только в воскресенье с МВМС. Честно говоря не очень понятно в чем мы можем оказать помощь.
PS. Мы знаем, что вы наш клиент и сотрудничаем мы действительно давно, поэтому в прошлом году мы помогли вам обновить ваши средства разработки 6.3 SE до 6.4.1 SDP, несмотря на то что такой программы обновления у QSS нет, но мы идем навстречу нашим клиентам и по возможности решаем проблемные вопросы.
Ну, вы меня совсем застыдили Признаю, что некорректно наезжать на людей, помогающих нам. Извиняюсь за возможное свое такое поведение. А уточнил про клиентов - для надежности, все-таки не с конторского адреса/интернета сижу, а с личного. Жаль, кстати, что не смог поехать на МВМС, думаю было бы полезно...
|
|
« Последнее редактирование: 06 Июль, 2011, 07:39:35 от Олег Большаков »
|
Записан
|
ЗАО НИИИТ-РК, Челябинск
|
|
|
Олег Большаков
|
|
« Ответ #12 : 06 Июль, 2011, 07:40:52 » |
|
Удалил e-mail с целью защиты от спамеров. Да, Вы указали правильный почтовый адрес. Есть ещё возможность обратиться к нам через Форму обратной связи.
|
|
|
Записан
|
|
|
|
Александр Варварик
Администратор
Легенда
Сообщений: 1353
|
|
« Ответ #13 : 06 Июль, 2011, 23:19:56 » |
|
Жаль, кстати, что не смог поехать на МВМС, думаю было бы полезно...
конечно жалко, можно было бы пообщаться, посмотреть пульты которые делают наши заказчики (в части вашей специфики), пообщаться с ними на предмет каких-то реализаций.
|
|
|
Записан
|
|
|
|
|