43 , drawingArea_{drawing_area}
53 Glib::RefPtr<Gdk::Window> area_window =
drawingArea_.get_window();
55 window = GDK_WINDOW_XID (area_window->gobj());
56 display = GDK_WINDOW_XDISPLAY (area_window->gobj());
59 XvAdaptorInfo* adaptorInfo;
61 if (XvQueryAdaptors (
display,
window, &count, &adaptorInfo) == Success)
63 INFO(
stage,
"XvQueryAdaptors count: %d", count);
64 for (
uint n = 0;
gotPort ==
false and n < count; ++n )
67 INFO(
stage,
"%s, %lu, %lu", adaptorInfo[ n ].name,
68 adaptorInfo[ n ].base_id, adaptorInfo[ n ].num_ports - 1);
70 for (
uint port = adaptorInfo[ n ].base_id;
71 port < adaptorInfo[ n ].base_id + adaptorInfo[ n ].num_ports;
74 if ( XvGrabPort(
display, port, CurrentTime ) == Success )
77 XvImageFormatValues* list;
79 list = XvListImageFormats(
display, port, &formats );
81 INFO(
stage,
"formats supported: %d", formats);
83 for (
int i = 0; i < formats; i ++ )
85 INFO(
stage,
"0x%x (%c%c%c%c) %s",
87 ( list[ i ].
id ) & 0xff,
88 ( list[ i ].
id >> 8 ) & 0xff,
89 ( list[ i ].
id >> 16 ) & 0xff,
90 ( list[ i ].
id >> 24 ) & 0xff,
91 ( list[ i ].
format == XvPacked ) ?
"packed" :
"planar" );
92 if ( list[ i ].
id == FORMAT_ID_YUY2 and not
gotPort )
98 XvUngrabPort(
display, port, CurrentTime );
116 for (
uint index = 0; index < unum; ++index )
118 INFO (
stage,
"%d: %s, %ldx%ld rate = %d/%d"
120 , enc->width, enc->height
121 , enc->rate.numerator
122 , enc->rate.denominator);
126 for (
int k = 0; k < num; k++ )
128 if ( xvattr[k].flags & XvSettable )
130 if (strcmp (xvattr[k].name,
"XV_AUTOPAINT_COLORKEY") == 0 )
132 Atom val_atom = XInternAtom(
display, xvattr[k].name, False );
134 NOBUG_ERROR(
stage,
"Couldn't set Xv attribute %s\n", xvattr[k].name);
137 if (strcmp (xvattr[k].name,
"XV_COLORKEY") == 0 )
139 Atom val_atom = XInternAtom(
display, xvattr[k].name, False );
141 NOBUG_ERROR(
stage,
"Couldn't set Xv attribute %s\n", xvattr[k].name);
156 shmInfo.shmid = shmget( IPC_PRIVATE,
xvImage->data_size, IPC_CREAT | 0777 );
173 shmctl(
shmInfo.shmid, IPC_RMID, 0 );
182 ERROR (
stage,
"unable to use XVideo for display.");
217 REQUIRE (image !=
NULL);
224 int org_x = 0, org_y = 0, destW = 0, destH = 0;
228 org_x, org_y, destW, destH );
231 org_x += spaceAlloc.get_x();
232 org_y += spaceAlloc.get_y();
238 org_x, org_y, destW, destH,
false);
void calculateVideoLayout(int widgetWidth, int widgetHeight, int &imgOrg_x, int &imgOrg_y, int &imgWidth, int &imgHeight)
Calculates the coordinates for placing a video image inside a widget.