- printf("egl=%p\n", eglGetCurrentContext());
-
- CHECK(init_movit("/usr/share/movit", MOVIT_DEBUG_ON));
- printf("GPU texture subpixel precision: about %.1f bits\n",
- log2(1.0f / movit_texel_subpixel_precision));
- printf("Wrongly rounded x+0.48 or x+0.52 values: %d/510\n",
- movit_num_wrongly_rounded);
- if (movit_num_wrongly_rounded > 0) {
- if (movit_shader_rounding_supported) {
- printf("Rounding off in the shader to compensate.\n");
- } else {
- printf("No shader roundoff available; cannot compensate.\n");
- }
- }
-
- //printf("egl_api=%d EGL_OPENGL_API=%d\n", epoxy_egl_get_current_gl_context_api(), EGL_OPENGL_API);
- //exit(0);
-
- check_error();
-
- EffectChain chain(WIDTH, HEIGHT);
- check_error();
-#if 0
- glViewport(0, 0, WIDTH, HEIGHT);
- check_error();
-
- glMatrixMode(GL_PROJECTION);
- check_error();
- glLoadIdentity();
- check_error();
- glOrtho(0.0, 1.0, 0.0, 1.0, 0.0, 1.0);
- check_error();
-
- glMatrixMode(GL_MODELVIEW);
- glLoadIdentity();
-#endif
-
- ImageFormat inout_format;
- inout_format.color_space = COLORSPACE_sRGB;
- inout_format.gamma_curve = GAMMA_sRGB;
-
- YCbCrFormat ycbcr_format;
- ycbcr_format.chroma_subsampling_x = 2;
- ycbcr_format.chroma_subsampling_y = 1;
- ycbcr_format.cb_x_position = 0.0;
- ycbcr_format.cr_x_position = 0.0;
- ycbcr_format.cb_y_position = 0.5;
- ycbcr_format.cr_y_position = 0.5;
- ycbcr_format.luma_coefficients = YCBCR_REC_601;
- ycbcr_format.full_range = false;
-
- YCbCrInput *input[NUM_CARDS];
-
- input[0] = new YCbCrInput(inout_format, ycbcr_format, WIDTH, HEIGHT, YCBCR_INPUT_SPLIT_Y_AND_CBCR);
- chain.add_input(input[0]);
- //if (NUM_CARDS == 2) {
- input[1] = new YCbCrInput(inout_format, ycbcr_format, WIDTH, HEIGHT, YCBCR_INPUT_SPLIT_Y_AND_CBCR);
- chain.add_input(input[1]);
- //}
- //YCbCr422InterleavedInput *input = new YCbCr422InterleavedInput(inout_format, ycbcr_format, WIDTH, HEIGHT);
- //YCbCr422InterleavedInput *input = new YCbCr422InterleavedInput(inout_format, ycbcr_format, 2, 1);
- Effect *resample_effect = chain.add_effect(new ResampleEffect(), input[0]);
- Effect *padding_effect = chain.add_effect(new IntegralPaddingEffect());
- float border_color[] = { 0.0f, 0.0f, 0.0f, 1.0f };
- CHECK(padding_effect->set_vec4("border_color", border_color));
-
- //Effect *resample2_effect = chain.add_effect(new ResampleEffect(), input[1 % NUM_CARDS]);
- Effect *resample2_effect = chain.add_effect(new ResampleEffect(), input[1]);
- Effect *saturation_effect = chain.add_effect(new SaturationEffect());
- CHECK(saturation_effect->set_float("saturation", 0.3f));
- Effect *wb_effect = chain.add_effect(new WhiteBalanceEffect());
- CHECK(wb_effect->set_float("output_color_temperature", 3500.0));
- Effect *padding2_effect = chain.add_effect(new IntegralPaddingEffect());
-
- chain.add_effect(new OverlayEffect(), padding_effect, padding2_effect);
-
- ycbcr_format.chroma_subsampling_x = 1;
-
- chain.add_ycbcr_output(inout_format, OUTPUT_ALPHA_FORMAT_POSTMULTIPLIED, ycbcr_format, YCBCR_OUTPUT_SPLIT_Y_AND_CBCR);
- chain.set_dither_bits(8);
- chain.set_output_origin(OUTPUT_ORIGIN_TOP_LEFT);
- chain.finalize();
-
-#if 0
- // generate a PBO to hold the data we read back with glReadPixels()
- // (Intel/DRI goes into a slow path if we don't read to PBO)
- GLuint pbo;
- glGenBuffers(1, &pbo);
- glBindBuffer(GL_PIXEL_PACK_BUFFER_ARB, pbo);
- glBufferData(GL_PIXEL_PACK_BUFFER_ARB, WIDTH * HEIGHT * 4, NULL, GL_STREAM_READ);
-#endif
-
- //make_hsv_wheel_texture();
-
-// QSurface *create_surface(const QSurfaceFormat &format);
- H264Encoder h264_encoder(surface2, WIDTH, HEIGHT, "test.mp4");
-
- printf("Configuring first card...\n");
- cards[0].usb = new BMUSBCapture(0x1edb, 0xbd3b); // 0xbd4f
- //cards[0].usb = new BMUSBCapture(0x1edb, 0xbd4f);
- cards[0].usb->set_frame_callback(std::bind(bm_frame, 0, _1, _2, _3, _4, _5, _6, _7));
- std::unique_ptr<PBOFrameAllocator> pbo_allocator1(new PBOFrameAllocator(1280 * 750 * 2 + 44));
- cards[0].usb->set_video_frame_allocator(pbo_allocator1.get());
- cards[0].usb->configure_card();
-
- std::unique_ptr<PBOFrameAllocator> pbo_allocator2(new PBOFrameAllocator(1280 * 750 * 2 + 44));
- if (NUM_CARDS == 2) {
- printf("Configuring second card...\n");
- cards[1].usb = new BMUSBCapture(0x1edb, 0xbd4f);
- cards[1].usb->set_frame_callback(std::bind(bm_frame, 1, _1, _2, _3, _4, _5, _6, _7));
- cards[1].usb->set_video_frame_allocator(pbo_allocator2.get());
- cards[1].usb->configure_card();
- }