{
switch_assert(img);
switch_assert(new_img);
+ int i, j, k = 1;
if (!img->fmt == SWITCH_IMG_FMT_I420) return;
-
if (*new_img != NULL) {
if (img->d_w != (*new_img)->d_w || img->d_h != (*new_img)->d_w) {
switch_img_free(new_img);
}
if (*new_img == NULL) {
- *new_img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, img->d_w, img->d_h, 0);
+ *new_img = switch_img_alloc(NULL, SWITCH_IMG_FMT_I420, img->d_w, img->d_h, 1);
}
switch_assert(*new_img);
- memcpy((*new_img)->img_data, img->img_data, (img->d_w * img->d_h * 3) / 2);
+
+ for (i = 0; i < 3; i++) {
+ if (!img->planes[i] || !img->stride[i]) break;
+ if (i > 0) k = 2;
+
+ for (j = 0; j < (*new_img)->h; j++) {
+ memcpy((*new_img)->planes[i] + (*new_img)->stride[i] * j / k, img->planes[i] + img->stride[i] * j / k, img->d_w);
+ }
+ }
}
/* For Emacs: