]> git.sesse.net Git - movit/blobdiff - effect_chain.cpp
Add input support for packed 10-bit Y'CbCr.
[movit] / effect_chain.cpp
index 2ba42e94ae7cc0aa4fd35c6854b2556f8c6f7ee4..4d13d3f8d30c6f24c0520f4c4633e864b9d12904 100644 (file)
@@ -110,6 +110,29 @@ void EffectChain::add_ycbcr_output(const ImageFormat &format, OutputAlphaFormat
        assert(ycbcr_format.chroma_subsampling_y == 1);
 }
 
+void EffectChain::change_ycbcr_output_format(const YCbCrFormat &ycbcr_format)
+{
+       assert(output_color_ycbcr);
+       assert(output_ycbcr_format.chroma_subsampling_x == ycbcr_format.chroma_subsampling_x);
+       assert(output_ycbcr_format.chroma_subsampling_y == ycbcr_format.chroma_subsampling_y);
+       assert(fabs(output_ycbcr_format.cb_x_position - ycbcr_format.cb_x_position) < 1e-3);
+       assert(fabs(output_ycbcr_format.cb_y_position - ycbcr_format.cb_y_position) < 1e-3);
+       assert(fabs(output_ycbcr_format.cr_x_position - ycbcr_format.cr_x_position) < 1e-3);
+       assert(fabs(output_ycbcr_format.cr_y_position - ycbcr_format.cr_y_position) < 1e-3);
+
+       output_ycbcr_format = ycbcr_format;
+       if (finalized) {
+               // Find the YCbCrConversionEffect node. We don't store it to avoid
+               // an unneeded ABI break (this can be fixed on next break).
+               for (Node *node : nodes) {
+                       if (node->effect->effect_type_id() == "YCbCrConversionEffect") {
+                               YCbCrConversionEffect *effect = (YCbCrConversionEffect *)(node->effect);
+                               effect->change_output_format(ycbcr_format);
+                       }
+               }
+       }
+}
+
 Node *EffectChain::add_node(Effect *effect)
 {
        for (unsigned i = 0; i < nodes.size(); ++i) {