}
}
-
} // namespace
Mixer::Mixer(const QSurfaceFormat &format, unsigned num_cards)
cards[card_index].usb->start_bm_capture();
}
- //chain->enable_phase_timing(true);
-
// Set up stuff for NV12 conversion.
// Cb/Cr shader.
unsigned num_fields = interlaced ? 2 : 1;
timespec frame_upload_start;
if (interlaced) {
- // NOTE: This isn't deinterlacing. This is just sending the two fields along
- // as separate frames without considering anything like the half-field offset.
- // We'll need to add a proper deinterlacer on the receiving side to get this right.
+ // Send the two fields along as separate frames; the other side will need to add
+ // a deinterlacer to actually get this right.
assert(height % 2 == 0);
height /= 2;
assert(frame_length % 2 == 0);
num_fields = 2;
clock_gettime(CLOCK_MONOTONIC, &frame_upload_start);
}
+ userdata->last_interlaced = interlaced;
RefCountedFrame new_frame(video_frame);
// Upload the textures.
check_error();
glBindBuffer(GL_PIXEL_UNPACK_BUFFER_ARB, pbo);
check_error();
- glFlushMappedBufferRange(GL_PIXEL_UNPACK_BUFFER, 0, video_frame.size);
+ glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
check_error();
- //glMemoryBarrier(GL_CLIENT_MAPPED_BUFFER_BARRIER_BIT);
- //check_error();
glBindTexture(GL_TEXTURE_2D, userdata->tex_cbcr[field]);
check_error();
Theme::Chain theme_main_chain = theme->get_chain(0, pts(), WIDTH, HEIGHT, input_state);
EffectChain *chain = theme_main_chain.chain;
theme_main_chain.setup_chain();
+ //theme_main_chain.chain->enable_phase_timing(true);
GLuint y_tex, cbcr_tex;
bool got_frame = h264_encoder->begin_frame(&y_tex, &cbcr_tex);