[maemo-developers] [maemo-developers] Does camera in N800 support X11 Xv extension?

From: koos vriezen koos.vriezen at gmail.com
Date: Tue Feb 6 00:17:48 EET 2007
Hi,

4 Feb 2007 19:47:02 +0100, Tim Teulings <rael at edge.ping.de>:
> Hallo!
>
> Subject says it all:
>
> Does the camera in the N800 support the X11 Xv extension, that mean can
> I use this extension for displaying images of the camera or must I use
> v4l V2 (what about the V1 interface) or gstreamer?

I did a small test, see code below. And it seem you must use the gstreamer or
the v4l grabber unfortunately (lets hope the next version has XvPutVideo for
this device, or I made a mistake :-) ).

(note I had to comment out the XvInputMask check to get output at all)

$ g++ -o xvtest xvtest.cpp -lX11 -lXv
$ run-standalone.sh ./xvtest
xvport 56
XV_COLORKEY[72] (0 .. 65535) current: 1091
XV_OMAP_DOWNSCALING[73] (0 .. 2) current: 1
XV_OMAP_VSYNC[74] (0 .. 2) current: 1


#include <stdio.h>
#include <string.h>
#include <X11/X.h>
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#include <X11/keysym.h>
#include <X11/Xatom.h>
#include <X11/Xutil.h>
#include <X11/extensions/XShm.h>
#include <X11/extensions/Xvlib.h>

int main (int argc, char ** argv) {
  Display * display = XOpenDisplay(NULL);
  int screen  = XDefaultScreen(display);

  unsigned int ver, rel, req, evb, err;
  if (XvQueryExtension (display, &ver, &rel, &req, &evb, &err) != Success) {
    fprintf (stderr, "XVideo not supported on display\n");
    XCloseDisplay (display);
    return 1;
  }
  XvAdaptorInfo * ai;
  unsigned int adaptors;
  bool xv_success = true;
  if (XvQueryAdaptors (display, XDefaultRootWindow (display),
&adaptors, &ai) == Success) {
    for (unsigned i = 0; i < adaptors; i++) {
      //if ((ai[i].type & XvInputMask) &&
      //    (ai[i].type & XvVideoMask) &&
      //    ai[i].base_id > 0) {
        int port = ai[i].base_id;
        fprintf (stderr, "xvport %d\n", port);
        bool freq_found = false;
        XvAttribute *attributes = 0L;
        int nr_attr, cur_val;
        attributes = XvQueryPortAttributes (display, port, &nr_attr);
        if (attributes) {
          for (int i = 0; i < nr_attr; i++) {
            if (!strcmp (attributes[i].name, "XV_FREQ"))
              freq_found = true;
            Atom atom = XInternAtom (display, attributes[i].name, false);
            fprintf (stderr, "%s[%d] (%d .. %d)", attributes[i].name, ( int ) at
om, attributes[i].min_value, attributes[i].max_value);
                     if ((attributes[i].flags & XvGettable) &&
XvGetPortAttribute (displa
y, port, atom, &cur_val) == Success)
              fprintf (stderr, " current: %d", cur_val);
            fprintf (stderr, "\n");
          }
          XFree(attributes);
        }
       XvEncodingInfo * encodings = 0L;
        unsigned nr_encode;
        XvQueryEncodings (display, port, &nr_encode, &encodings);
        if (encodings) {
          for (unsigned i = 0; i < nr_encode; i++) {
            if (strcmp (encodings[i].name, "XV_IMAGE"))
              fprintf (stderr, " encoding: %d %s dim %d %d\n", ( int )
encodings[i].encoding_id, encodings[i].name, encodings[i].width,
encodings[i].height);
          }
        }
        XvFreeEncodingInfo (encodings);
      //}
    }
  }
  XvFreeAdaptorInfo(ai);
  XCloseDisplay (display);
  return 0;
}

More information about the maemo-developers mailing list