X-Git-Url: https://git.sesse.net/?p=movit;a=blobdiff_plain;f=ycbcr_input.h;h=bb51049753215448bb899c68afd0b0eb7d343431;hp=566f8286841da3aa1f82b68074b326083d047324;hb=6a176580b95002657b381acfaf3892b345e28364;hpb=f99a1a6295d7809703f6b0dfb7ab4360916b002e diff --git a/ycbcr_input.h b/ycbcr_input.h index 566f828..bb51049 100644 --- a/ycbcr_input.h +++ b/ycbcr_input.h @@ -161,6 +161,16 @@ public: this->owns_texture[channel] = false; } + // You can change the Y'CbCr format freely, also after finalize, + // although with one limitation: If Cb and Cr come from the same + // texture and their offsets offsets are the same (ie., within 1e-6) + // when finalizing, they most continue to be so forever, as this + // optimization is compiled into the shader. + // + // If you change subsampling parameters, you'll need to call + // set_width() / set_height() again after this. + void change_ycbcr_format(const YCbCrFormat &ycbcr_format); + virtual void inform_added(EffectChain *chain) { resource_pool = chain->get_resource_pool(); @@ -180,6 +190,10 @@ private: GLenum type; GLuint pbos[3], texture_num[3]; GLint uniform_tex_y, uniform_tex_cb, uniform_tex_cr; + Eigen::Matrix3d uniform_ycbcr_matrix; + float uniform_offset[3]; + Point2D uniform_cb_offset, uniform_cr_offset; + bool cb_cr_offsets_equal; unsigned width, height, widths[3], heights[3]; const unsigned char *pixel_data[3];