#include #include #include #include #include static const unsigned short ycbcr16x16_420[8*8*6] = { 0x00A5,0x00A5,0x00A5,0x0072,0x00A5,0x0072,0x0072,0x0072, 0x0072,0x00A5,0x0072,0x0072,0x00A5,0x0072,0x0072,0x0072, 0x0072,0x00A5,0x0072,0x0072,0x00A5,0x00A5,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x00A5, 0x0072,0x0072,0x0072,0x0072,0x0072,0x0072,0x00A5,0x00A5, 0x0072,0x0072,0x0072,0x0072,0x0072,0x00A5,0x00A5,0x00A5, 0x0072,0x0072,0x0072,0x0072,0x00A5,0x00A5,0x00A5,0x00A5, 0x004F,0x004F,0x004F,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2, 0x00B2,0x00B2,0x004F,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2, 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2, 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2, 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2, 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2, 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x004F, 0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x00B2,0x004F,0x004F, 0x003E,0x003E,0x003E,0x0060,0x0060,0x0060,0x0060,0x0060, 0x0060,0x0060,0x003E,0x0060,0x0060,0x0060,0x0060,0x0060, 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060, 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060, 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060, 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060, 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x003E, 0x0060,0x0060,0x0060,0x0060,0x0060,0x0060,0x003E,0x003E }; static const signed short ycbcr16x16_420_2[8*8*6] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }; int main(int argc, char **argv) { const unsigned int video_width = 32, video_height = 32; const unsigned int window_width = video_width * 2, window_height = video_height * 2; int quit = 0; Display *display; Window root, window; Pixmap framebuffer; XEvent event; struct pipe_context *pipe; struct VL_CONTEXT *ctx; struct VL_SURFACE *sfc, *ref_sfc; struct VL_MOTION_VECTOR motion_vector = { {0, 0}, {32, 32} }; display = XOpenDisplay(NULL); root = XDefaultRootWindow(display); window = XCreateSimpleWindow(display, root, 0, 0, window_width, window_height, 0, 0, 0); framebuffer = XCreatePixmap(display, root, window_width, window_height, 24); XSelectInput(display, window, ExposureMask | KeyPressMask); XMapWindow(display, window); XSync(display, 0); pipe = create_pipe_context(display); vlCreateContext(display, pipe, video_width, video_height, VL_FORMAT_YCBCR_420, &ctx); vlCreateSurface(ctx, &sfc); vlCreateSurface(ctx, &ref_sfc); vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 0, 0, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, ref_sfc); vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 1, 0, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, ref_sfc); vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 0, 1, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, ref_sfc); vlRenderIMacroBlock(VL_FRAME_PICTURE, VL_FIELD_FIRST, 1, 1, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420, ref_sfc); vlRenderPMacroBlock ( VL_FRAME_PICTURE, VL_FIELD_FIRST, 0, 0, VL_FIELD_MC, &motion_vector, 0x3F, VL_DCT_FRAME_CODED, (short*)ycbcr16x16_420_2, ref_sfc, sfc ); vlPutSurface(sfc, framebuffer, 0, 0, video_width, video_height, 0, 0, window_width, window_height, VL_FRAME_PICTURE); puts("Press any key to continue..."); while (!quit) { XNextEvent(display, &event); switch (event.type) { case Expose: { XCopyArea ( display, framebuffer, window, XDefaultGC(display, XDefaultScreen(display)), 0, 0, window_width, window_height, 0, 0 ); break; } case KeyPress: { quit = 1; break; } } } vlDestroySurface(sfc); vlDestroySurface(ref_sfc); vlDestroyContext(ctx); XFreePixmap(display, framebuffer); XDestroyWindow(display, window); XCloseDisplay(display); return 0; }