// imprecisely, called “YUV”), which is typically what you get from a video decoder.
// It upsamples planes as needed, using the default linear upsampling OpenGL gives you.
-#include <GL/glew.h>
+#include <epoxy/gl.h>
#include <assert.h>
#include <string>
#include "effect_chain.h"
#include "image_format.h"
#include "input.h"
+#include "ycbcr.h"
-class ResourcePool;
-
-struct YCbCrFormat {
- // Which formula for Y' to use.
- YCbCrLumaCoefficients luma_coefficients;
-
- // If true, assume Y'CbCr coefficients are full-range, ie. go from 0 to 255
- // instead of the limited 220/225 steps in classic MPEG. For instance,
- // JPEG uses the Rec. 601 luma coefficients, but full range.
- bool full_range;
+namespace movit {
- // Sampling factors for chroma components. For no subsampling (4:4:4),
- // set both to 1.
- unsigned chroma_subsampling_x, chroma_subsampling_y;
-
- // Positioning of the chroma samples. MPEG-1 and JPEG is (0.5, 0.5);
- // MPEG-2 and newer typically are (0.0, 0.5).
- float cb_x_position, cb_y_position;
- float cr_x_position, cr_y_position;
-};
+class ResourcePool;
class YCbCrInput : public Input {
public:
unsigned get_height() const { return height; }
Colorspace get_color_space() const { return image_format.color_space; }
GammaCurve get_gamma_curve() const { return image_format.gamma_curve; }
+ virtual bool can_supply_mipmaps() const { return false; }
// Tells the input where to fetch the actual pixel data. Note that if you change
// this data, you must either call set_pixel_data() again (using the same pointer
resource_pool = chain->get_resource_pool();
}
+ bool set_int(const std::string& key, int value);
+
private:
ImageFormat image_format;
YCbCrFormat ycbcr_format;
GLuint pbos[3], texture_num[3];
- int needs_mipmaps;
-
unsigned width, height, widths[3], heights[3];
const unsigned char *pixel_data[3];
unsigned pitch[3];
ResourcePool *resource_pool;
};
+} // namespace movit
+
#endif // !defined(_MOVIT_YCBCR_INPUT_H)