3 * Copyright (C) 2014 Brian Matherly <pez4brian@yahoo.com>
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software Foundation,
17 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
19 #include <framework/mlt.h>
20 #include <vid.stab/libvidstab.h>
23 mlt_image_format validate_format( mlt_image_format format )
27 case mlt_image_rgb24a:
29 return mlt_image_rgb24;
30 case mlt_image_yuv420p:
31 return mlt_image_yuv420p;
34 case mlt_image_yuv422:
35 case mlt_image_opengl:
37 case mlt_image_glsl_texture:
38 return mlt_image_yuv422;
42 VSPixelFormat mltimage_to_vsimage( mlt_image_format mlt_format, int width, int height, uint8_t* mlt_img, uint8_t** vs_img )
47 // Convert RGB24 to YUV444 because it is the only planar
48 // format with comparable bit depth.
50 *vs_img = mlt_pool_alloc( width * height * 3 );
52 int total = width * height + 1;
53 uint8_t* yp = *vs_img;
54 uint8_t* up = yp + ( width * height );
55 uint8_t* vp = up + ( width * height );
62 RGB2YUV_601_SCALED(r, g, b, y, u, v);
70 case mlt_image_yuv420p:
71 // This format maps with no conversion
76 case mlt_image_yuv422:
77 // Convert packed to planar
79 *vs_img = mlt_pool_alloc( width * height * 2 );
80 uint8_t* yp = *vs_img;
81 uint8_t* up = yp + ( width * height );
82 uint8_t* vp = up + ( width * height / 2 );
83 int total = ( width * height / 2 ) + 1;
100 void vsimage_to_mltimage( uint8_t* vs_img, uint8_t* mlt_img, mlt_image_format mlt_format, int width, int height )
104 case mlt_image_rgb24:
105 // Convert YUV444 to RGB24.
107 int y, u, v, r, g, b;
108 int total = width * height + 1;
109 uint8_t* yp = vs_img;
110 uint8_t* up = yp + ( width * height );
111 uint8_t* vp = up + ( width * height );
118 YUV2RGB_601_SCALED( y, u, v, r, g, b );
125 case mlt_image_yuv420p:
126 // This format was never converted
128 case mlt_image_yuv422:
129 // Convert planar to packed
131 uint8_t* yp = vs_img;
132 uint8_t* up = yp + ( width * height );
133 uint8_t* vp = up + ( width * height / 2 );
134 int total = ( width * height / 2 ) + 1;
150 void free_vsimage( uint8_t* vs_img, VSPixelFormat format )
152 if( format != PF_YUV420P )
154 mlt_pool_release( vs_img );