- 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]);
- input[1] = new YCbCrInput(inout_format, ycbcr_format, WIDTH, HEIGHT, YCBCR_INPUT_SPLIT_Y_AND_CBCR);
- chain.add_input(input[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]);
- 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_output(inout_format, OUTPUT_ALPHA_FORMAT_POSTMULTIPLIED);
- 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();
-
- 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();
- }