Commit 2f5f0962 authored by Austin Yuan's avatar Austin Yuan

test/putsurface: add UV element into the auto-generated image

Signed-off-by: default avatarAustin Yuan <shengquan.yuan@gmail.com>
parent 0f52ab9f
......@@ -52,7 +52,7 @@ if (va_status != VA_STATUS_SUCCESS) { \
exit(1); \
}
#include "loadsurface.h"
#include "../loadsurface.h"
#define SURFACE_NUM 18 /* 16 surfaces for src, 2 surface for reconstructed/reference */
#define CODEDBUF_NUM 5
static VADisplay va_dpy;
......
../putsurface/loadsurface.h
\ No newline at end of file
......@@ -21,6 +21,120 @@
* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
#include "loadsurface_yuv.h"
static int scale_2dimage(unsigned char *src_img, int src_imgw, int src_imgh,
unsigned char *dst_img, int dst_imgw, int dst_imgh)
{
int row=0, col=0;
for (row=0; row<dst_imgh; row++) {
for (col=0; col<dst_imgw; col++) {
*(dst_img + row * dst_imgw + col) = *(src_img + (row * src_imgh/dst_imgh) * src_imgw + col * src_imgw/dst_imgw);
}
}
return 0;
}
static int YUV_blend_with_pic(int width, int height,
unsigned char *Y_start, int Y_pitch,
unsigned char *U_start, int U_pitch,
unsigned char *V_start, int V_pitch,
int UV_interleave, int fixed_alpha)
{
/* PIC YUV format */
unsigned char *pic_y_old = yuvga_pic;
unsigned char *pic_u_old = pic_y_old + 640*480;
unsigned char *pic_v_old = pic_u_old + 640*480/4;
unsigned char *pic_y, *pic_u, *pic_v;
int alpha_values[] = {100,90,80,70,60,50,40,30,20,30,40,50,60,70,80,90};
static int alpha_idx = 0;
int alpha;
int allocated = 0;
int row, col;
if (fixed_alpha == 0) {
alpha = alpha_values[alpha_idx % 16 ];
alpha_idx ++;
} else
alpha = fixed_alpha;
//alpha = 0;
pic_y = pic_y_old;
pic_u = pic_u_old;
pic_v = pic_v_old;
if (width != 640 || height != 480) { /* need to scale the pic */
pic_y = (unsigned char *)malloc(width * height);
pic_u = (unsigned char *)malloc(width * height/4);
pic_v = (unsigned char *)malloc(width * height/4);
allocated = 1;
scale_2dimage(pic_y_old, 640, 480,
pic_y, width, height);
scale_2dimage(pic_u_old, 320, 240,
pic_u, width/2, height/2);
scale_2dimage(pic_v_old, 320, 240,
pic_v, width/2, height/2);
}
/* begin blend */
/* Y plane */
for (row=0; row<height; row++)
for (col=0; col<width; col++) {
unsigned char *p = Y_start + row * Y_pitch + col;
unsigned char *q = pic_y + row * width + col;
*p = *p * (100 - alpha) / 100 + *q * alpha/100;
}
if (UV_interleave == 0) {
for (row=0; row<height/2; row++)
for (col=0; col<width/2; col++) {
unsigned char *p = U_start + row * U_pitch + col;
unsigned char *q = pic_u + row * width/2 + col;
*p = *p * (100 - alpha) / 100 + *q * alpha/100;
}
for (row=0; row<height/2; row++)
for (col=0; col<width/2; col++) {
unsigned char *p = V_start + row * V_pitch + col;
unsigned char *q = pic_v + row * width/2 + col;
*p = *p * (100 - alpha) / 100 + *q * alpha/100;
}
} else { /* NV12 */
for (row=0; row<height/2; row++)
for (col=0; col<width/2; col++) {
unsigned char *pU = U_start + row * U_pitch + col*2;
unsigned char *qU = pic_u + row * width/2 + col;
unsigned char *pV = pU + 1;
unsigned char *qV = pic_v + row * width/2 + col;
*pU = *pU * (100 - alpha) / 100 + *qU * alpha/100;
*pV = *pV * (100 - alpha) / 100 + *qV * alpha/100;
}
}
if (allocated) {
free(pic_y);
free(pic_u);
free(pic_v);
}
return 0;
}
static int yuvgen_planar(int width, int height,
unsigned char *Y_start, int Y_pitch,
unsigned char *U_start, int U_pitch,
......@@ -28,7 +142,7 @@ static int yuvgen_planar(int width, int height,
int UV_interleave, int box_width, int row_shift,
int field)
{
int row;
int row, alpha;
/* copy Y plane */
for (row=0;row<height;row++) {
......@@ -82,6 +196,20 @@ static int yuvgen_planar(int width, int height,
}
}
if (getenv("AUTO_NOUV"))
return 0;
if (getenv("AUTO_ALPHA"))
alpha = 0;
else
alpha = 70;
YUV_blend_with_pic(width,height,
Y_start, Y_pitch,
U_start, U_pitch,
V_start, V_pitch,
UV_interleave, alpha);
return 0;
}
......
This source diff could not be displayed because it is too large. You can view the blob instead.
......@@ -62,7 +62,7 @@ if (va_status != VA_STATUS_SUCCESS) { \
fprintf(stderr,"%s:%s (%d) failed,exit\n", __func__, func, __LINE__); \
exit(1); \
}
#include "loadsurface.h"
#include "../loadsurface.h"
#define SURFACE_NUM 5
static VASurfaceID surface_id[SURFACE_NUM];
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment