From ec8195b93e8cdebb4966fc64e9632d3fe09cff2a Mon Sep 17 00:00:00 2001 From: veejay <> Date: Fri, 10 Nov 2023 23:09:04 +0100 Subject: [PATCH] indenting --- veejay-current/veejay-core/libyuv/yuvconv.c | 2227 ++++++++++--------- veejay-current/veejay-core/libyuv/yuvconv.h | 1 - 2 files changed, 1114 insertions(+), 1114 deletions(-) diff --git a/veejay-current/veejay-core/libyuv/yuvconv.c b/veejay-current/veejay-core/libyuv/yuvconv.c index 8cb6de70..009989a7 100644 --- a/veejay-current/veejay-core/libyuv/yuvconv.c +++ b/veejay-current/veejay-core/libyuv/yuvconv.c @@ -1,5 +1,5 @@ /* veejay - Linux VeeJay - * (C) 2002-2004 Niels Elburg + * (C) 2002-2004 Niels Elburg * * * This program is free software; you can redistribute it and/or modify @@ -56,361 +56,361 @@ typedef struct { - struct SwsContext *sws; - SwsFilter *src_filter; - SwsFilter *dst_filter; - int swscale_flags; - int format; - int width; - int height; + struct SwsContext *sws; + SwsFilter *src_filter; + SwsFilter *dst_filter; + int swscale_flags; + int format; + int width; + int height; } vj_sws; -static int sws_context_flags_ = 0; -static int full_range_pixel_value_ = 0; +static int sws_context_flags_ = 0; +static int full_range_pixel_value_ = 0; static struct { - int i; - const char *s; + int i; + const char *s; } pixstr[] = { - {PIX_FMT_YUV420P, "PIX_FMT_YUV420P"}, -{ PIX_FMT_YUV422P, "PIX_FMT_YUV422P"}, -{ PIX_FMT_YUVJ420P, "PIX_FMT_YUVJ420P"}, -{ PIX_FMT_YUVJ422P, "PIX_FMT_YUVJ422P"}, -{ PIX_FMT_RGB24, "PIX_FMT_RGB24"}, -{ PIX_FMT_BGR24, "PIX_FMT_BGR24"}, -{ PIX_FMT_YUV444P, "PIX_FMT_YUV444P"}, -{ PIX_FMT_YUVJ444P, "PIX_FMT_YUVJ444P"}, -{ PIX_FMT_YUVA422P, "PIX_FMT_YUVA422P"}, -{ PIX_FMT_YUVA420P, "PIX_FMT_YUVA420P"}, -{ PIX_FMT_YUVA444P, "PIX_FMT_YUVA444P"}, -{ PIX_FMT_RGB32, "PIX_FMT_RGB32"}, -{ PIX_FMT_BGR32, "PIX_FMT_BGR32"}, -{ PIX_FMT_GRAY8, "PIX_FMT_GRAY8"}, -{ PIX_FMT_RGB32_1, "PIX_FMT_RGB32_1"}, -{ PIX_FMT_YUYV422, "PIX_FMT_YUYV422"}, -{ PIX_FMT_UYVY422, "PIX_FMT_UYVY422"}, -{ PIX_FMT_RGBA, "PIX_FMT_RGBA"}, -{ PIX_FMT_BGRA, "PIX_FMT_BGRA"}, -{ PIX_FMT_ARGB, "PIX_FMT_ARGB"}, -{ PIX_FMT_ABGR, "PIX_FMT_ABGR"}, -{ 0 , NULL} + {PIX_FMT_YUV420P, "PIX_FMT_YUV420P"}, +{ PIX_FMT_YUV422P, "PIX_FMT_YUV422P"}, +{ PIX_FMT_YUVJ420P, "PIX_FMT_YUVJ420P"}, +{ PIX_FMT_YUVJ422P, "PIX_FMT_YUVJ422P"}, +{ PIX_FMT_RGB24, "PIX_FMT_RGB24"}, +{ PIX_FMT_BGR24, "PIX_FMT_BGR24"}, +{ PIX_FMT_YUV444P, "PIX_FMT_YUV444P"}, +{ PIX_FMT_YUVJ444P, "PIX_FMT_YUVJ444P"}, +{ PIX_FMT_YUVA422P, "PIX_FMT_YUVA422P"}, +{ PIX_FMT_YUVA420P, "PIX_FMT_YUVA420P"}, +{ PIX_FMT_YUVA444P, "PIX_FMT_YUVA444P"}, +{ PIX_FMT_RGB32, "PIX_FMT_RGB32"}, +{ PIX_FMT_BGR32, "PIX_FMT_BGR32"}, +{ PIX_FMT_GRAY8, "PIX_FMT_GRAY8"}, +{ PIX_FMT_RGB32_1, "PIX_FMT_RGB32_1"}, +{ PIX_FMT_YUYV422, "PIX_FMT_YUYV422"}, +{ PIX_FMT_UYVY422, "PIX_FMT_UYVY422"}, +{ PIX_FMT_RGBA, "PIX_FMT_RGBA"}, +{ PIX_FMT_BGRA, "PIX_FMT_BGRA"}, +{ PIX_FMT_ARGB, "PIX_FMT_ARGB"}, +{ PIX_FMT_ABGR, "PIX_FMT_ABGR"}, +{ 0 , NULL} }; -const char *yuv_get_pixfmt_description(int fmt) +const char *yuv_get_pixfmt_description(int fmt) { - int i; - for( i = 0; pixstr[i].s != NULL ; i ++ ) - if( fmt == pixstr[i].i ) - return pixstr[i].s; - return "NONE"; + int i; + for( i = 0; pixstr[i].s != NULL ; i ++ ) + if( fmt == pixstr[i].i ) + return pixstr[i].s; + return "NONE"; } -static float jpeg_to_CCIR_tableY[256]; -static float CCIR_to_jpeg_tableY[256]; -static float jpeg_to_CCIR_tableUV[256]; -static float CCIR_to_jpeg_tableUV[256]; +static float jpeg_to_CCIR_tableY[256]; +static float CCIR_to_jpeg_tableY[256]; +static float jpeg_to_CCIR_tableUV[256]; +static float CCIR_to_jpeg_tableUV[256]; #define round1(x) ( (int32_t)( (x>0) ? (x) + 0.5 : (x) - 0.5 )) #define _CLAMP(a,min,max) ( round1(a) < min ? min : ( round1(a) > max ? max : round1(a) )) static struct { - int id; + int id; } ccir_pixfmts[] = { - { PIX_FMT_YUV420P }, - { PIX_FMT_YUYV422 }, - { PIX_FMT_YUV422P }, - { PIX_FMT_YUV444P }, - { PIX_FMT_YUVA420P}, - { PIX_FMT_YUVA422P}, - { -1 } + { PIX_FMT_YUV420P }, + { PIX_FMT_YUYV422 }, + { PIX_FMT_YUV422P }, + { PIX_FMT_YUV444P }, + { PIX_FMT_YUVA420P}, + { PIX_FMT_YUVA422P}, + { -1 } }; static struct { - int id; + int id; } jpeg_pixfmts[] = { - { PIX_FMT_YUVJ420P }, - { PIX_FMT_YUVJ422P }, - { PIX_FMT_YUVJ444P }, - { -1 }, + { PIX_FMT_YUVJ420P }, + { PIX_FMT_YUVJ422P }, + { PIX_FMT_YUVJ444P }, + { -1 }, }; -static int auto_conversion_ccir_jpeg_ = 0; +static int auto_conversion_ccir_jpeg_ = 0; -static int is_CCIR(int a) { - int i; - for( i = 0; ccir_pixfmts[i].id != -1; i ++ ) - if( a == ccir_pixfmts[i].id ) - return 1; - return 0; +static int is_CCIR(int a) { + int i; + for( i = 0; ccir_pixfmts[i].id != -1; i ++ ) + if( a == ccir_pixfmts[i].id ) + return 1; + return 0; } -static int is_JPEG(int a) { - int i; - for( i = 0; jpeg_pixfmts[i].id != -1 ; i ++ ) - if( a == jpeg_pixfmts[i].id ) - return 1; - return 0; +static int is_JPEG(int a) { + int i; + for( i = 0; jpeg_pixfmts[i].id != -1 ; i ++ ) + if( a == jpeg_pixfmts[i].id ) + return 1; + return 0; } -void verify_CCIR_auto(int a, int b, VJFrame *dst ) +void verify_CCIR_auto(int a, int b, VJFrame *dst ) { - int a_is_CCIR = is_CCIR(a); - int a_is_JPEG = is_JPEG(a); + int a_is_CCIR = is_CCIR(a); + int a_is_JPEG = is_JPEG(a); - int b_is_CCIR = is_CCIR(b); - int b_is_JPEG = is_JPEG(b); + int b_is_CCIR = is_CCIR(b); + int b_is_JPEG = is_JPEG(b); - if( a_is_JPEG && b_is_CCIR ) { - yuv_scale_pixels_from_y( dst->data[0], dst->len ); - yuv_scale_pixels_from_uv( dst->data[1], dst->uv_len ); - yuv_scale_pixels_from_uv( dst->data[2], dst->uv_len ); - } - else if( a_is_CCIR && b_is_JPEG ) { - yuv_scale_pixels_from_ycbcr( dst->data[0], 16.0f, 235.0f, dst->len ); - yuv_scale_pixels_from_ycbcr( dst->data[1], 16.0f, 240.0f, dst->uv_len ); - yuv_scale_pixels_from_ycbcr( dst->data[2], 16.0f, 240.0f, dst->uv_len ); - } + if( a_is_JPEG && b_is_CCIR ) { + yuv_scale_pixels_from_y( dst->data[0], dst->len ); + yuv_scale_pixels_from_uv( dst->data[1], dst->uv_len ); + yuv_scale_pixels_from_uv( dst->data[2], dst->uv_len ); + } + else if( a_is_CCIR && b_is_JPEG ) { + yuv_scale_pixels_from_ycbcr( dst->data[0], 16.0f, 235.0f, dst->len ); + yuv_scale_pixels_from_ycbcr( dst->data[1], 16.0f, 240.0f, dst->uv_len ); + yuv_scale_pixels_from_ycbcr( dst->data[2], 16.0f, 240.0f, dst->uv_len ); + } } -int yuv_use_auto_ccir_jpeg() +int yuv_use_auto_ccir_jpeg() { - return auto_conversion_ccir_jpeg_; + return auto_conversion_ccir_jpeg_; } int get_chroma_from_pixfmt(int pixfmt) { - int chroma; - switch(pixfmt) { - case PIX_FMT_YUVJ420P: chroma = Y4M_CHROMA_420JPEG; break; - case PIX_FMT_YUV420P: chroma = Y4M_CHROMA_420MPEG2; break; - case PIX_FMT_YUV422P: chroma = Y4M_CHROMA_422; break; - case PIX_FMT_YUV444P: chroma = Y4M_CHROMA_444; break; - case PIX_FMT_YUVJ422P: chroma = Y4M_CHROMA_422; break; - case PIX_FMT_YUVJ444P: chroma = Y4M_CHROMA_444; break; - case PIX_FMT_YUV411P: chroma = Y4M_CHROMA_411; break; - case PIX_FMT_YUVA420P: chroma = Y4M_CHROMA_420JPEG; break; - case PIX_FMT_YUVA422P: chroma = Y4M_CHROMA_422; break; - case PIX_FMT_YUVA444P: chroma = Y4M_CHROMA_444; break; - case PIX_FMT_GRAY8: chroma = PIX_FMT_GRAY8; break; - default: - chroma = Y4M_CHROMA_444; - break; - } - return chroma; + int chroma; + switch(pixfmt) { + case PIX_FMT_YUVJ420P: chroma = Y4M_CHROMA_420JPEG; break; + case PIX_FMT_YUV420P: chroma = Y4M_CHROMA_420MPEG2; break; + case PIX_FMT_YUV422P: chroma = Y4M_CHROMA_422; break; + case PIX_FMT_YUV444P: chroma = Y4M_CHROMA_444; break; + case PIX_FMT_YUVJ422P: chroma = Y4M_CHROMA_422; break; + case PIX_FMT_YUVJ444P: chroma = Y4M_CHROMA_444; break; + case PIX_FMT_YUV411P: chroma = Y4M_CHROMA_411; break; + case PIX_FMT_YUVA420P: chroma = Y4M_CHROMA_420JPEG; break; + case PIX_FMT_YUVA422P: chroma = Y4M_CHROMA_422; break; + case PIX_FMT_YUVA444P: chroma = Y4M_CHROMA_444; break; + case PIX_FMT_GRAY8: chroma = PIX_FMT_GRAY8; break; + default: + chroma = Y4M_CHROMA_444; + break; + } + return chroma; } int get_pixfmt_from_chroma(int chroma) { - int src_fmt = 0; - switch( chroma ) { - case Y4M_CHROMA_420JPEG: - src_fmt = PIX_FMT_YUVJ420P; break; - case Y4M_CHROMA_420MPEG2: - case Y4M_CHROMA_420PALDV: - src_fmt = PIX_FMT_YUV420P; break; - case Y4M_CHROMA_422: - src_fmt = PIX_FMT_YUV422P; break; - case Y4M_CHROMA_444: - src_fmt = PIX_FMT_YUV444P; break; - case Y4M_CHROMA_411: - src_fmt = PIX_FMT_YUV411P; break; - case Y4M_CHROMA_MONO: - src_fmt = PIX_FMT_GRAY8; break; - default: - break; - } - return src_fmt; + int src_fmt = 0; + switch( chroma ) { + case Y4M_CHROMA_420JPEG: + src_fmt = PIX_FMT_YUVJ420P; break; + case Y4M_CHROMA_420MPEG2: + case Y4M_CHROMA_420PALDV: + src_fmt = PIX_FMT_YUV420P; break; + case Y4M_CHROMA_422: + src_fmt = PIX_FMT_YUV422P; break; + case Y4M_CHROMA_444: + src_fmt = PIX_FMT_YUV444P; break; + case Y4M_CHROMA_411: + src_fmt = PIX_FMT_YUV411P; break; + case Y4M_CHROMA_MONO: + src_fmt = PIX_FMT_GRAY8; break; + default: + break; + } + return src_fmt; } -int vj_to_pixfmt(int fmt) { - int pixfmt; - switch(fmt) { - case FMT_420: pixfmt = PIX_FMT_YUV420P; break; - case FMT_420F: pixfmt = PIX_FMT_YUVJ420P; break; - case FMT_422: pixfmt = PIX_FMT_YUV422P; break; - case FMT_422F: pixfmt = PIX_FMT_YUVJ422P; break; - case FMT_444: pixfmt = PIX_FMT_YUV444P;break; - default: - pixfmt = -1; - break; - } - return pixfmt; +int vj_to_pixfmt(int fmt) { + int pixfmt; + switch(fmt) { + case FMT_420: pixfmt = PIX_FMT_YUV420P; break; + case FMT_420F: pixfmt = PIX_FMT_YUVJ420P; break; + case FMT_422: pixfmt = PIX_FMT_YUV422P; break; + case FMT_422F: pixfmt = PIX_FMT_YUVJ422P; break; + case FMT_444: pixfmt = PIX_FMT_YUV444P;break; + default: + pixfmt = -1; + break; + } + return pixfmt; } -int pixfmt_to_vj(int pixfmt) { - int fmt; - switch(pixfmt) { - case PIX_FMT_YUV420P: fmt = FMT_420; break; - case PIX_FMT_YUVJ420P: fmt = FMT_420F; break; - case PIX_FMT_YUVJ422P: fmt = FMT_422F; break; - case PIX_FMT_YUV422P: fmt = FMT_422; break; - default: fmt = -1; break; - } - return fmt; +int pixfmt_to_vj(int pixfmt) { + int fmt; + switch(pixfmt) { + case PIX_FMT_YUV420P: fmt = FMT_420; break; + case PIX_FMT_YUVJ420P: fmt = FMT_420F; break; + case PIX_FMT_YUVJ422P: fmt = FMT_422F; break; + case PIX_FMT_YUV422P: fmt = FMT_422; break; + default: fmt = -1; break; + } + return fmt; } -int vj_is_full_range(int fmt) { - return ( fmt == FMT_420F || fmt == FMT_422F ) ? 1: 0; +int vj_is_full_range(int fmt) { + return ( fmt == FMT_420F || fmt == FMT_422F ) ? 1: 0; } -int pixfmt_is_full_range(int pixfmt) { - return ( pixfmt == PIX_FMT_YUVJ420P || pixfmt == PIX_FMT_YUVJ422P || pixfmt == PIX_FMT_YUVJ444P ) ? 1:0; +int pixfmt_is_full_range(int pixfmt) { + return ( pixfmt == PIX_FMT_YUVJ420P || pixfmt == PIX_FMT_YUVJ422P || pixfmt == PIX_FMT_YUVJ444P ) ? 1:0; } -static int global_scaler_ = SWS_FAST_BILINEAR; -static int full_chroma_interpolation_ = 0; -int yuv_which_scaler() +static int global_scaler_ = SWS_FAST_BILINEAR; +static int full_chroma_interpolation_ = 0; +int yuv_which_scaler() { - return global_scaler_; + return global_scaler_; } -void yuv_init_lib(int extra_flags, int auto_ccir_jpeg, int default_zoomer) +void yuv_init_lib(int extra_flags, int auto_ccir_jpeg, int default_zoomer) { - sws_context_flags_ = yuv_sws_get_cpu_flags(); - if(extra_flags) { - full_chroma_interpolation_ = 1; - veejay_msg(VEEJAY_MSG_WARNING, - "Interpolating full chroma in converter/scaler"); - } - if( default_zoomer ) { - if( default_zoomer == 1 ) { - global_scaler_ = SWS_FAST_BILINEAR; - } else if (default_zoomer == 2 ) { - global_scaler_ = SWS_BICUBIC; - } - } + sws_context_flags_ = yuv_sws_get_cpu_flags(); + if(extra_flags) { + full_chroma_interpolation_ = 1; + veejay_msg(VEEJAY_MSG_WARNING, + "Interpolating full chroma in converter/scaler"); + } + if( default_zoomer ) { + if( default_zoomer == 1 ) { + global_scaler_ = SWS_FAST_BILINEAR; + } else if (default_zoomer == 2 ) { + global_scaler_ = SWS_BICUBIC; + } + } - auto_conversion_ccir_jpeg_ = auto_ccir_jpeg; - if( auto_conversion_ccir_jpeg_ ) { - veejay_msg(VEEJAY_MSG_WARNING, - "On-the-fly conversion between CCIR 601 and JPEG color range!"); - auto_conversion_ccir_jpeg_ = 1; - } + auto_conversion_ccir_jpeg_ = auto_ccir_jpeg; + if( auto_conversion_ccir_jpeg_ ) { + veejay_msg(VEEJAY_MSG_WARNING, + "On-the-fly conversion between CCIR 601 and JPEG color range!"); + auto_conversion_ccir_jpeg_ = 1; + } - // initialize tables for jpeg <-> ccir conversion - veejay_memset( jpeg_to_CCIR_tableY, 0, sizeof( jpeg_to_CCIR_tableY ) ); - veejay_memset( CCIR_to_jpeg_tableY, 0, sizeof( CCIR_to_jpeg_tableY ) ); - veejay_memset( jpeg_to_CCIR_tableUV, 0, sizeof( jpeg_to_CCIR_tableUV ) ); - veejay_memset( CCIR_to_jpeg_tableUV, 0, sizeof( CCIR_to_jpeg_tableUV ) ); + // initialize tables for jpeg <-> ccir conversion + veejay_memset( jpeg_to_CCIR_tableY, 0, sizeof( jpeg_to_CCIR_tableY ) ); + veejay_memset( CCIR_to_jpeg_tableY, 0, sizeof( CCIR_to_jpeg_tableY ) ); + veejay_memset( jpeg_to_CCIR_tableUV, 0, sizeof( jpeg_to_CCIR_tableUV ) ); + veejay_memset( CCIR_to_jpeg_tableUV, 0, sizeof( CCIR_to_jpeg_tableUV ) ); - unsigned int i; - float s = (235.0f - 16.0f) / 255.0f; - float u = (240.0f - 16.0f) / 255.0f; - float c = 255.0f / ( 235.0f-16.0f ); - float d = 255.0f / ( 240.0f-16.0f ); + unsigned int i; + float s = (235.0f - 16.0f) / 255.0f; + float u = (240.0f - 16.0f) / 255.0f; + float c = 255.0f / ( 235.0f-16.0f ); + float d = 255.0f / ( 240.0f-16.0f ); - for( i = 0; i < 256 ; i ++ ) { - jpeg_to_CCIR_tableY[i] = _CLAMP( (float)i * s + 16.0f , 16.0f, 235.0f ); - jpeg_to_CCIR_tableUV[i]= _CLAMP( (float)i * u + 16.0f , 16.0f, 240.0f ); - CCIR_to_jpeg_tableY[i] = _CLAMP( (float)i * c - 16.0f , 0.0f, 255.0f ); - CCIR_to_jpeg_tableUV[i]= _CLAMP( (float)i * d - 16.0f , 0.0f, 255.0f ); - } + for( i = 0; i < 256 ; i ++ ) { + jpeg_to_CCIR_tableY[i] = _CLAMP( (float)i * s + 16.0f , 16.0f, 235.0f ); + jpeg_to_CCIR_tableUV[i]= _CLAMP( (float)i * u + 16.0f , 16.0f, 240.0f ); + CCIR_to_jpeg_tableY[i] = _CLAMP( (float)i * c - 16.0f , 0.0f, 255.0f ); + CCIR_to_jpeg_tableUV[i]= _CLAMP( (float)i * d - 16.0f , 0.0f, 255.0f ); + } } -void yuv_plane_sizes( VJFrame *src, int *p1, int *p2, int *p3, int *p4 ) +void yuv_plane_sizes( VJFrame *src, int *p1, int *p2, int *p3, int *p4 ) { - switch(src->format) { - case PIX_FMT_YUV420P: - case PIX_FMT_YUVJ420P: - *p1 = src->len; - *p2 = src->len / 4; - *p3 = src->len / 4; - *p4 = 0; - break; - case PIX_FMT_YUV422P: - case PIX_FMT_YUVJ422P: - case PIX_FMT_YUVJ444P: - case PIX_FMT_YUV444P: - - if(p1 != NULL) { - *p1 = src->len; - } - if(p2 != NULL) { - *p2 = src->uv_len; - } - if(p3 != NULL) { - *p3 = src->uv_len; - } + switch(src->format) { + case PIX_FMT_YUV420P: + case PIX_FMT_YUVJ420P: + *p1 = src->len; + *p2 = src->len / 4; + *p3 = src->len / 4; + *p4 = 0; + break; + case PIX_FMT_YUV422P: + case PIX_FMT_YUVJ422P: + case PIX_FMT_YUVJ444P: + case PIX_FMT_YUV444P: + + if(p1 != NULL) { + *p1 = src->len; + } + if(p2 != NULL) { + *p2 = src->uv_len; + } + if(p3 != NULL) { + *p3 = src->uv_len; + } - if(p4 != NULL) { - *p4 = 0; - } - break; - case PIX_FMT_YUVA420P: - case PIX_FMT_YUVA422P: - if(p1 != NULL) { - *p1 = src->len; - } - if(p2 != NULL) { - *p2 = src->uv_len; - } - if(p3 != NULL) { - *p3 = src->uv_len; - } - if(p4 != NULL) { - *p4 = src->len; - } - break; - case PIX_FMT_YUVA444P: - if(p1 != NULL) { - *p1 = src->len; - } - if(p2 != NULL) { - *p2 = src->len; - } - if(p3 != NULL) { - *p3 = src->len; - } - if(p4 != NULL) { - *p4 = src->len; - } - break; - case PIX_FMT_RGB24: - case PIX_FMT_BGR24: - if( p1 != NULL ) - *p1 = src->len * 3; - *p2 = 0; - *p3 = 0; - *p4 = 0; - break; - case PIX_FMT_RGBA: - case PIX_FMT_BGRA: - case PIX_FMT_ARGB: - case PIX_FMT_ABGR: - if( p1 != NULL ) - *p1 = src->len * 4; - *p2 = 0; - *p3 = 0; - *p4 = 0; - break; - case PIX_FMT_YUYV422: - if( p1 != NULL ) - *p1 = src->len * 2; - *p2 = 0; - *p3 = 0; - *p4 = 0; - break; - default: - if(p1 != NULL) { - *p1 = src->len; - } - if(p2 != NULL) { - *p2 = 0; - } - if(p3 != NULL) { - *p3 = 0; - } + if(p4 != NULL) { + *p4 = 0; + } + break; + case PIX_FMT_YUVA420P: + case PIX_FMT_YUVA422P: + if(p1 != NULL) { + *p1 = src->len; + } + if(p2 != NULL) { + *p2 = src->uv_len; + } + if(p3 != NULL) { + *p3 = src->uv_len; + } + if(p4 != NULL) { + *p4 = src->len; + } + break; + case PIX_FMT_YUVA444P: + if(p1 != NULL) { + *p1 = src->len; + } + if(p2 != NULL) { + *p2 = src->len; + } + if(p3 != NULL) { + *p3 = src->len; + } + if(p4 != NULL) { + *p4 = src->len; + } + break; + case PIX_FMT_RGB24: + case PIX_FMT_BGR24: + if( p1 != NULL ) + *p1 = src->len * 3; + *p2 = 0; + *p3 = 0; + *p4 = 0; + break; + case PIX_FMT_RGBA: + case PIX_FMT_BGRA: + case PIX_FMT_ARGB: + case PIX_FMT_ABGR: + if( p1 != NULL ) + *p1 = src->len * 4; + *p2 = 0; + *p3 = 0; + *p4 = 0; + break; + case PIX_FMT_YUYV422: + if( p1 != NULL ) + *p1 = src->len * 2; + *p2 = 0; + *p3 = 0; + *p4 = 0; + break; + default: + if(p1 != NULL) { + *p1 = src->len; + } + if(p2 != NULL) { + *p2 = 0; + } + if(p3 != NULL) { + *p3 = 0; + } - if(p4 != NULL) { - *p4 = 0; - } + if(p4 != NULL) { + *p4 = 0; + } - break; - } + break; + } } -void yuv_set_pixel_range(int full_range) +void yuv_set_pixel_range(int full_range) { - full_range_pixel_value_ = full_range; + full_range_pixel_value_ = full_range; } int yuv_get_pixel_range() @@ -418,227 +418,227 @@ int yuv_get_pixel_range() return full_range_pixel_value_; } -int alpha_fmt_to_yuv(int fmt) +int alpha_fmt_to_yuv(int fmt) { - switch(fmt) { - case PIX_FMT_YUVA422P: - return (full_range_pixel_value_ ? PIX_FMT_YUVJ422P: PIX_FMT_YUV422P ); break; - case PIX_FMT_YUVA420P: - return (full_range_pixel_value_ ? PIX_FMT_YUVJ420P: PIX_FMT_YUV420P ); break; - case PIX_FMT_YUVA444P: - return (full_range_pixel_value_ ? PIX_FMT_YUVJ444P: PIX_FMT_YUV444P ); break; + switch(fmt) { + case PIX_FMT_YUVA422P: + return (full_range_pixel_value_ ? PIX_FMT_YUVJ422P: PIX_FMT_YUV422P ); break; + case PIX_FMT_YUVA420P: + return (full_range_pixel_value_ ? PIX_FMT_YUVJ420P: PIX_FMT_YUV420P ); break; + case PIX_FMT_YUVA444P: + return (full_range_pixel_value_ ? PIX_FMT_YUVJ444P: PIX_FMT_YUV444P ); break; - } - return fmt; -} + } + return fmt; +} -int yuv_to_alpha_fmt(int fmt) +int yuv_to_alpha_fmt(int fmt) { - switch(fmt) { - case PIX_FMT_YUV422P: - case PIX_FMT_YUVJ422P: - return PIX_FMT_YUVA422P; - case PIX_FMT_YUV420P: - case PIX_FMT_YUVJ420P: - return PIX_FMT_YUVA420P; - case PIX_FMT_YUV444P: - case PIX_FMT_YUVJ444P: - return PIX_FMT_YUVA444P; - } - return (full_range_pixel_value_ ? PIX_FMT_YUVJ444P: PIX_FMT_YUV444P ); + switch(fmt) { + case PIX_FMT_YUV422P: + case PIX_FMT_YUVJ422P: + return PIX_FMT_YUVA422P; + case PIX_FMT_YUV420P: + case PIX_FMT_YUVJ420P: + return PIX_FMT_YUVA420P; + case PIX_FMT_YUV444P: + case PIX_FMT_YUVJ444P: + return PIX_FMT_YUVA444P; + } + return (full_range_pixel_value_ ? PIX_FMT_YUVJ444P: PIX_FMT_YUV444P ); } -VJFrame *yuv_yuv_template( uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int fmt ) +VJFrame *yuv_yuv_template( uint8_t *Y, uint8_t *U, uint8_t *V, int w, int h, int fmt ) { - VJFrame *f = (VJFrame*) vj_calloc(sizeof(VJFrame)); - f->format = fmt; - f->data[0] = Y; - f->data[1] = U; - f->data[2] = V; - f->width = w; - f->height = h; - switch(fmt) - { - case PIX_FMT_YUV422P: - case PIX_FMT_YUVJ422P: - f->uv_width = w>>1; - f->uv_height= f->height; - f->stride[0] = w; - f->stride[1] = w>>1; - f->stride[2] = w>>1; - f->shift_h = 1; + VJFrame *f = (VJFrame*) vj_calloc(sizeof(VJFrame)); + f->format = fmt; + f->data[0] = Y; + f->data[1] = U; + f->data[2] = V; + f->width = w; + f->height = h; + switch(fmt) + { + case PIX_FMT_YUV422P: + case PIX_FMT_YUVJ422P: + f->uv_width = w>>1; + f->uv_height= f->height; + f->stride[0] = w; + f->stride[1] = w>>1; + f->stride[2] = w>>1; + f->shift_h = 1; f->yuv_fmt = PIX_FMT_YUV422P; f->range = (fmt == PIX_FMT_YUVJ422P ? 1 : 0 ); - break; - case PIX_FMT_YUVA422P: - f->uv_width = w>>1; - f->uv_height=f->height; - f->stride[0] = w; - f->stride[1] = f->stride[2] = w>>1; - f->stride[3] = w; - f->shift_h = 1; + break; + case PIX_FMT_YUVA422P: + f->uv_width = w>>1; + f->uv_height=f->height; + f->stride[0] = w; + f->stride[1] = f->stride[2] = w>>1; + f->stride[3] = w; + f->shift_h = 1; f->yuv_fmt = PIX_FMT_YUVA422P; f->range = full_range_pixel_value_; - break; - case PIX_FMT_YUV444P: - case PIX_FMT_YUVJ444P: - f->uv_width = w; - f->uv_height=f->height; - f->stride[0] = w; - f->stride[1] = f->stride[2] = f->stride[0]; + break; + case PIX_FMT_YUV444P: + case PIX_FMT_YUVJ444P: + f->uv_width = w; + f->uv_height=f->height; + f->stride[0] = w; + f->stride[1] = f->stride[2] = f->stride[0]; f->yuv_fmt = PIX_FMT_YUV444P; f->range = (fmt == PIX_FMT_YUVJ444P ? 1 : 0 ); - break; - case PIX_FMT_YUVA444P: - f->uv_width = w; - f->uv_height=f->height; - f->stride[0] = w; - f->stride[1] = f->stride[2] = f->stride[0]; - f->stride[3] = w; + break; + case PIX_FMT_YUVA444P: + f->uv_width = w; + f->uv_height=f->height; + f->stride[0] = w; + f->stride[1] = f->stride[2] = f->stride[0]; + f->stride[3] = w; f->yuv_fmt = PIX_FMT_YUVA444P; f->range = full_range_pixel_value_; - break; - case PIX_FMT_YUV420P: - case PIX_FMT_YUVJ420P: - f->uv_width = w>>1; - f->uv_height=f->height>>1; - f->stride[0] = w; - f->stride[1] = f->stride[2] = f->stride[0]>>1; - f->shift_v = 1; - f->shift_h = 1; + break; + case PIX_FMT_YUV420P: + case PIX_FMT_YUVJ420P: + f->uv_width = w>>1; + f->uv_height=f->height>>1; + f->stride[0] = w; + f->stride[1] = f->stride[2] = f->stride[0]>>1; + f->shift_v = 1; + f->shift_h = 1; f->yuv_fmt = PIX_FMT_YUV420P; f->range = (fmt == PIX_FMT_YUVJ420P ? 1 : 0 ); - break; - case PIX_FMT_YUVA420P: - f->uv_width = w>>1; - f->uv_height=f->height>>1; - f->stride[0] = w; - f->stride[1] = f->stride[2] = f->stride[0]>>1; - f->stride[3] = f->stride[0]; - f->shift_v = 1; - f->shift_h = 1; + break; + case PIX_FMT_YUVA420P: + f->uv_width = w>>1; + f->uv_height=f->height>>1; + f->stride[0] = w; + f->stride[1] = f->stride[2] = f->stride[0]>>1; + f->stride[3] = f->stride[0]; + f->shift_v = 1; + f->shift_h = 1; f->yuv_fmt = PIX_FMT_YUVA420P; f->range = full_range_pixel_value_; - break; - case PIX_FMT_GRAY8: - f->stride[0] = w; - f->stride[1] = f->stride[2] = 0; + break; + case PIX_FMT_GRAY8: + f->stride[0] = w; + f->stride[1] = f->stride[2] = 0; f->yuv_fmt = fmt; f->range = full_range_pixel_value_; - break; - case PIX_FMT_YUYV422: - case PIX_FMT_UYVY422: - f->stride[0] = w * 2; - f->stride[1] = f->stride[2] = 0; + break; + case PIX_FMT_YUYV422: + case PIX_FMT_UYVY422: + f->stride[0] = w * 2; + f->stride[1] = f->stride[2] = 0; f->yuv_fmt = fmt; f->range = full_range_pixel_value_; - break; - case PIX_FMT_RGB24: - case PIX_FMT_BGR24: - f->stride[0] = w * 3; - f->uv_width = 0; f->uv_height=0; - f->data[1] = NULL;f->data[2] = NULL; + break; + case PIX_FMT_RGB24: + case PIX_FMT_BGR24: + f->stride[0] = w * 3; + f->uv_width = 0; f->uv_height=0; + f->data[1] = NULL;f->data[2] = NULL; f->yuv_fmt = fmt; - break; - case PIX_FMT_BGR32: - case PIX_FMT_RGB32: - case PIX_FMT_ARGB: - case PIX_FMT_ABGR: - f->stride[0] = w * 4; - f->uv_width = 0; f->uv_height = 0; - f->data[1] = NULL; f->data[2] = NULL; + break; + case PIX_FMT_BGR32: + case PIX_FMT_RGB32: + case PIX_FMT_ARGB: + case PIX_FMT_ABGR: + f->stride[0] = w * 4; + f->uv_width = 0; f->uv_height = 0; + f->data[1] = NULL; f->data[2] = NULL; f->yuv_fmt = fmt; - break; - default: - break; - } - f->len = w*h; - f->uv_len = f->uv_width*f->uv_height; + break; + default: + break; + } + f->len = w*h; + f->uv_len = f->uv_width*f->uv_height; - return f; + return f; } -VJFrame *yuv_rgb_template( uint8_t *rgb_buffer, int w, int h, int fmt ) +VJFrame *yuv_rgb_template( uint8_t *rgb_buffer, int w, int h, int fmt ) { - VJFrame *f = (VJFrame*) vj_calloc(sizeof(VJFrame)); - f->format = fmt; - f->data[0] = rgb_buffer; - f->data[1] = NULL; - f->data[2] = NULL; - f->data[3] = NULL; - f->width = w; - f->height = h; - switch( fmt ) - { - case PIX_FMT_RGB24: - case PIX_FMT_BGR24: - f->stride[0] = w * 3; - break; - default: - f->stride[0] = w * 4; - break; - } - f->stride[1] = 0; - f->stride[2] = 0; - f->len = w * h; + VJFrame *f = (VJFrame*) vj_calloc(sizeof(VJFrame)); + f->format = fmt; + f->data[0] = rgb_buffer; + f->data[1] = NULL; + f->data[2] = NULL; + f->data[3] = NULL; + f->width = w; + f->height = h; + switch( fmt ) + { + case PIX_FMT_RGB24: + case PIX_FMT_BGR24: + f->stride[0] = w * 3; + break; + default: + f->stride[0] = w * 4; + break; + } + f->stride[1] = 0; + f->stride[2] = 0; + f->len = w * h; f->yuv_fmt = fmt; - return f; + return f; } -void yuv_convert_any_ac( VJFrame *src, VJFrame *dst ) +void yuv_convert_any_ac( VJFrame *src, VJFrame *dst ) { void *ctx = yuv_fx_context_create( src, dst ); yuv_fx_context_process( ctx, src,dst ); yuv_fx_context_destroy( ctx ); } -void *yuv_fx_context_create( VJFrame *src, VJFrame *dst ) +void *yuv_fx_context_create( VJFrame *src, VJFrame *dst ) { - struct SwsContext *ctx = sws_getContext( src->width,src->height, src->yuv_fmt, dst->width,dst->height,dst->yuv_fmt, - sws_context_flags_, NULL,NULL,NULL ); - return (void*) ctx; + struct SwsContext *ctx = sws_getContext( src->width,src->height, src->yuv_fmt, dst->width,dst->height,dst->yuv_fmt, + sws_context_flags_, NULL,NULL,NULL ); + return (void*) ctx; } -void yuv_fx_context_process( void *ctx, VJFrame *src, VJFrame *dst ) +void yuv_fx_context_process( void *ctx, VJFrame *src, VJFrame *dst ) { #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( src->data[1] ); - check_desired_alignment( src->data[2] ); - check_desired_alignment( dst->data[0] ); - check_desired_alignment( dst->data[1] ); - check_desired_alignment( dst->data[2] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( src->data[1] ); + check_desired_alignment( src->data[2] ); + check_desired_alignment( dst->data[0] ); + check_desired_alignment( dst->data[1] ); + check_desired_alignment( dst->data[2] ); #endif - sws_scale( (struct SwsContext*) ctx,(const uint8_t * const*) src->data, src->stride,0,src->height,(uint8_t * const*) dst->data,dst->stride ); + sws_scale( (struct SwsContext*) ctx,(const uint8_t * const*) src->data, src->stride,0,src->height,(uint8_t * const*) dst->data,dst->stride ); } -void yuv_fx_context_destroy( void *ctx ) +void yuv_fx_context_destroy( void *ctx ) { - struct SwsContext *stx = (struct SwsContext*) ctx; - sws_freeContext( stx ); + struct SwsContext *stx = (struct SwsContext*) ctx; + sws_freeContext( stx ); } -void yuv_convert_any3( void *scaler, VJFrame *src, int src_stride[4], VJFrame *dst) +void yuv_convert_any3( void *scaler, VJFrame *src, int src_stride[4], VJFrame *dst) { - vj_sws *s = (vj_sws*) scaler; - int dst_stride[4] = { ru4(dst->stride[0]),ru4(dst->stride[1]),ru4(dst->stride[2]), ru4(dst->stride[3]) }; + vj_sws *s = (vj_sws*) scaler; + int dst_stride[4] = { ru4(dst->stride[0]),ru4(dst->stride[1]),ru4(dst->stride[2]), ru4(dst->stride[3]) }; #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( src->data[1] ); - check_desired_alignment( src->data[2] ); - check_desired_alignment( dst->data[0] ); - check_desired_alignment( dst->data[1] ); - check_desired_alignment( dst->data[2] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( src->data[1] ); + check_desired_alignment( src->data[2] ); + check_desired_alignment( dst->data[0] ); + check_desired_alignment( dst->data[1] ); + check_desired_alignment( dst->data[2] ); #endif - sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*) dst->data, dst_stride); -} + sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*) dst->data, dst_stride); +} /* convert 4:2:0 to yuv 4:2:2 packed */ void yuv422p_to_yuv422(uint8_t * yuv420[3], uint8_t * dest, int width, - int height) + int height) { unsigned int x, y; uint8_t *Cb = yuv420[1]; @@ -646,19 +646,19 @@ void yuv422p_to_yuv422(uint8_t * yuv420[3], uint8_t * dest, int width, uint8_t *Y = yuv420[0]; #pragma omp simd for (y = 0; y < height; ++y) { - for (x = 0; x < width; x +=2) { - *(dest + 0) = Y[0]; - *(dest + 1) = Cb[0]; - *(dest + 2) = Y[1]; - *(dest + 3) = Cr[0]; - dest += 4; - Y += 2; - ++Cb; - ++Cr; - } - Y += width; - Cb += (width>>1); - Cr += (height>>1); + for (x = 0; x < width; x +=2) { + *(dest + 0) = Y[0]; + *(dest + 1) = Cb[0]; + *(dest + 2) = Y[1]; + *(dest + 3) = Cr[0]; + dest += 4; + Y += 2; + ++Cb; + ++Cr; + } + Y += width; + Cb += (width>>1); + Cr += (height>>1); } } @@ -666,24 +666,24 @@ void yuv422p_to_yuv422(uint8_t * yuv420[3], uint8_t * dest, int width, /* convert 4:2:0 to yuv 4:2:2 */ void yuv420p_to_yuv422(uint8_t * yuv420[3], uint8_t * dest, int width, - int height) + int height) { unsigned int x, y; #pragma omp simd for (y = 0; y < height; ++y) { - uint8_t *Y = yuv420[0] + y * width; - uint8_t *Cb = yuv420[1] + (y >> 1) * (width >> 1); - uint8_t *Cr = yuv420[2] + (y >> 1) * (width >> 1); - for (x = 0; x < width; x += 2) { - *(dest + 0) = Y[0]; - *(dest + 1) = Cb[0]; - *(dest + 2) = Y[1]; - *(dest + 3) = Cr[0]; - dest += 4; - Y += 2; - ++Cb; - ++Cr; - } + uint8_t *Y = yuv420[0] + y * width; + uint8_t *Cb = yuv420[1] + (y >> 1) * (width >> 1); + uint8_t *Cr = yuv420[2] + (y >> 1) * (width >> 1); + for (x = 0; x < width; x += 2) { + *(dest + 0) = Y[0]; + *(dest + 1) = Cb[0]; + *(dest + 2) = Y[1]; + *(dest + 3) = Cr[0]; + dest += 4; + Y += 2; + ++Cb; + ++Cr; + } } } @@ -709,9 +709,9 @@ void yuv420p_to_yuv422(uint8_t * yuv420[3], uint8_t * dest, int width, Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111, USA. - - took yuy2 -> planar 422 and 422 planar -> yuy2 mmx conversion - routines. - (Niels, 02/2005) + - took yuy2 -> planar 422 and 422 planar -> yuy2 mmx conversion + routines. + (Niels, 02/2005) *****************************************************************/ @@ -839,58 +839,58 @@ static inline void yuvPlanartoyuy2(const uint8_t *ysrc, const uint8_t *usrc, con } -void yuv422_to_yuyv(uint8_t *src[3], uint8_t *dstI, int w, int h) +void yuv422_to_yuyv(uint8_t *src[3], uint8_t *dstI, int w, int h) { - yuvPlanartoyuy2( src[0], src[1], src[2], dstI, w, h, w, w, w * 2, 2 ); + yuvPlanartoyuy2( src[0], src[1], src[2], dstI, w, h, w, w, w * 2, 2 ); } -void yuy2toyv16(uint8_t *dst_y, uint8_t *dst_u, uint8_t *dst_v, uint8_t *srcI, int w, int h ) +void yuy2toyv16(uint8_t *dst_y, uint8_t *dst_u, uint8_t *dst_v, uint8_t *srcI, int w, int h ) { - int j,jmax,imax,i; - uint8_t *src = srcI; - - jmax = w / 8; - imax = h; + int j,jmax,imax,i; + uint8_t *src = srcI; + + jmax = w / 8; + imax = h; - for( i = 0; i < imax ;i ++ ) - { - for( j = 0; j < jmax ; j ++ ) - { - YUY2_TO_YUV_PLANAR; - src += 16; - dst_y += 8; - dst_u += 4; - dst_v += 4; - } - } + for( i = 0; i < imax ;i ++ ) + { + for( j = 0; j < jmax ; j ++ ) + { + YUY2_TO_YUV_PLANAR; + src += 16; + dst_y += 8; + dst_u += 4; + dst_v += 4; + } + } __asm__ __volatile__ ( _EMMS:::"memory"); } void vj_yuy2toyv12(uint8_t * _y, uint8_t * _u, uint8_t * _v, uint8_t * input, - int width, int height) + int width, int height) { - int j,jmax,imax,i; - uint8_t *src = input; - uint8_t *dst_y = _y; - uint8_t *dst_u = _u; - uint8_t *dst_v = _v; - jmax = width / 8; - imax = height; + int j,jmax,imax,i; + uint8_t *src = input; + uint8_t *dst_y = _y; + uint8_t *dst_u = _u; + uint8_t *dst_v = _v; + jmax = width / 8; + imax = height; - for( i = 0; i < imax ;i ++ ) - { - for( j = 0; j < jmax ; j ++ ) - { - YUY2_TO_YUV_PLANAR; - src += 16; - dst_y += 8; - dst_u += 4; - dst_v += 4; - } - dst_u += width; - dst_v += width; - } + for( i = 0; i < imax ;i ++ ) + { + for( j = 0; j < jmax ; j ++ ) + { + YUY2_TO_YUV_PLANAR; + src += 16; + dst_y += 8; + dst_u += 4; + dst_v += 4; + } + dst_u += width; + dst_v += width; + } __asm__ __volatile__ ( _EMMS:::"memory"); } @@ -900,7 +900,7 @@ void vj_yuy2toyv12(uint8_t * _y, uint8_t * _u, uint8_t * _v, uint8_t * input, // non mmx functions #if !defined(HAVE_ASM_MMX) && !defined(HAVE_ARM) void vj_yuy2toyv12(uint8_t * _y, uint8_t * _u, uint8_t * _v, uint8_t * input, - int width, int height) + int width, int height) { int i, j, w2; uint8_t *y, *u, *v; @@ -913,45 +913,45 @@ void vj_yuy2toyv12(uint8_t * _y, uint8_t * _u, uint8_t * _v, uint8_t * input, u = _u; for (i = 0; i < height; i += 4) { - /* top field scanline */ - for (j = 0; j < w2; j++) { - /* packed YUV 422 is: Y[i] U[i] Y[i+1] V[i] */ - *(y++) = *(input++); - *(u++) = *(input++); - *(y++) = *(input++); - *(v++) = *(input++); - } - for (j = 0; j < w2; j++) - { - *(y++) = *(input++); - *(u++) = *(input++); - *(y++) = *(input++); - *(v++) = *(input++); - - } + /* top field scanline */ + for (j = 0; j < w2; j++) { + /* packed YUV 422 is: Y[i] U[i] Y[i+1] V[i] */ + *(y++) = *(input++); + *(u++) = *(input++); + *(y++) = *(input++); + *(v++) = *(input++); + } + for (j = 0; j < w2; j++) + { + *(y++) = *(input++); + *(u++) = *(input++); + *(y++) = *(input++); + *(v++) = *(input++); + + } - /* next two scanlines, one frome each field , interleaved */ - for (j = 0; j < w2; j++) { - /* skip every second line for U and V */ - *(y++) = *(input++); - input++; - *(y++) = *(input++); - input++; - } - /* bottom field scanline*/ - for (j = 0; j < w2; j++) { - /* skip every second line for U and V */ - *(y++) = *(input++); - input++; - *(y++) = *(input++); - input++; - } + /* next two scanlines, one frome each field , interleaved */ + for (j = 0; j < w2; j++) { + /* skip every second line for U and V */ + *(y++) = *(input++); + input++; + *(y++) = *(input++); + input++; + } + /* bottom field scanline*/ + for (j = 0; j < w2; j++) { + /* skip every second line for U and V */ + *(y++) = *(input++); + input++; + *(y++) = *(input++); + input++; + } } } void yuy2toyv16(uint8_t * _y, uint8_t * _u, uint8_t * _v, uint8_t * input, - int width, int height) + int width, int height) { int i, j, w2; @@ -966,13 +966,13 @@ void yuy2toyv16(uint8_t * _y, uint8_t * _u, uint8_t * _v, uint8_t * input, for (i = 0; i < height; i ++ ) { - for (j = 0; j < w2; j++) { - /* packed YUV 422 is: Y[i] U[i] Y[i+1] V[i] */ - *(y++) = *(input++); - *(u++) = *(input++); - *(y++) = *(input++); - *(v++) = *(input++); - } + for (j = 0; j < w2; j++) { + /* packed YUV 422 is: Y[i] U[i] Y[i+1] V[i] */ + *(y++) = *(input++); + *(u++) = *(input++); + *(y++) = *(input++); + *(v++) = *(input++); + } } } @@ -982,26 +982,26 @@ void yuv422_to_yuyv(uint8_t *yuv422[3], uint8_t *pixels, int w, int h) uint8_t *Y = yuv422[0]; uint8_t *U = yuv422[1]; uint8_t *V = yuv422[2]; // U Y V Y - for(y = 0; y < h; y ++ ) - { - Y = yuv422[0] + y * w; - U = yuv422[1] + (y>>1) * w; - V = yuv422[2] + (y>>1) * w; - for( x = 0 ; x < w ; x += 4 ) - { - *(pixels + 0) = Y[0]; - *(pixels + 1) = U[0]; - *(pixels + 2) = Y[1]; - *(pixels + 3) = V[0]; - *(pixels + 4) = Y[2]; - *(pixels + 5) = U[1]; - *(pixels + 6) = Y[3]; - *(pixels + 7) = V[1]; - pixels += 8; - Y+=4; - U+=2; - V+=2; - } + for(y = 0; y < h; y ++ ) + { + Y = yuv422[0] + y * w; + U = yuv422[1] + (y>>1) * w; + V = yuv422[2] + (y>>1) * w; + for( x = 0 ; x < w ; x += 4 ) + { + *(pixels + 0) = Y[0]; + *(pixels + 1) = U[0]; + *(pixels + 2) = Y[1]; + *(pixels + 3) = V[0]; + *(pixels + 4) = Y[2]; + *(pixels + 5) = U[1]; + *(pixels + 6) = Y[3]; + *(pixels + 7) = V[1]; + pixels += 8; + Y+=4; + U+=2; + V+=2; + } } } #endif @@ -1019,7 +1019,7 @@ void yuv422_to_yuyv(uint8_t *yuv422[3], uint8_t *pixels, int w, int h) { V = yuv422[2] + (y >> 1) * w; for (x = 0; x < w; x += 16) { - uint8x8_t y0 = vld1_u8(Y); + uint8x8_t y0 = vld1_u8(Y); uint8x8_t u0 = vld1_u8(U); uint8x8_t y1 = vld1_u8(Y + 8); uint8x8_t v0 = vld1_u8(V); @@ -1028,17 +1028,17 @@ void yuv422_to_yuyv(uint8_t *yuv422[3], uint8_t *pixels, int w, int h) { yuyv0.val[0] = y0; yuyv0.val[1] = u0; yuyv0.val[0] = vext_u8(y0, v0, 1); - + uint8x8x2_t yuyv1; yuyv1.val[0] = y1; yuyv1.val[1] = vext_u8(u0, y1, 7); - yuyv1.val[0] = v0; + yuyv1.val[0] = v0; vst2_u8(pixels, yuyv0); vst2_u8(pixels + 16, yuyv1); pixels += 32; - Y += 16; + Y += 16; U += 8; V += 8; } @@ -1049,7 +1049,7 @@ void yuv422_to_yuyv(uint8_t *yuv422[3], uint8_t *pixels, int w, int h) { /* lav_common - some general utility functionality used by multiple - lavtool utilities. */ + lavtool utilities. */ /* Copyright (C) 2000, Rainer Johanni, Andrew Stevens */ /* - added scene change detection code 2001, pHilipp Zabel */ @@ -1071,9 +1071,9 @@ int luminance_mean(uint8_t * frame[], int w, int h) p = frame[0]; lim = frame[0] + w * (h - 1); while (p < lim) { - sum += (p[0] + p[1]) + (p[w - 3] + p[w - 2]); - p += 31; - count += 4; + sum += (p[0] + p[1]) + (p[w - 3] + p[w - 2]); + p += 31; + count += 4; } w = w / 2; @@ -1082,88 +1082,88 @@ int luminance_mean(uint8_t * frame[], int w, int h) p = frame[1]; lim = frame[1] + w * (h - 1); while (p < lim) { - sum += (p[0] + p[1]) + (p[w - 3] + p[w - 2]); - p += 31; - count += 4; + sum += (p[0] + p[1]) + (p[w - 3] + p[w - 2]); + p += 31; + count += 4; } p = frame[2]; lim = frame[2] + w * (h - 1); while (p < lim) { - sum += (p[0] + p[1]) + (p[w - 3] + p[w - 2]); - p += 31; - count += 4; + sum += (p[0] + p[1]) + (p[w - 3] + p[w - 2]); + p += 31; + count += 4; } if(count == 0) - return 0; + return 0; return sum / count; } -void* yuv_init_swscaler(VJFrame *src, VJFrame *dst, sws_template *tmpl, int swscale_flagss) +void* yuv_init_swscaler(VJFrame *src, VJFrame *dst, sws_template *tmpl, int swscale_flagss) { - vj_sws *s = (vj_sws*) vj_calloc(sizeof(vj_sws)); - if(!s) - return NULL; + vj_sws *s = (vj_sws*) vj_calloc(sizeof(vj_sws)); + if(!s) + return NULL; - int swscale_flags = 0; - switch(tmpl->flags) - { - case 1: - swscale_flags = swscale_flags|SWS_FAST_BILINEAR; - break; - case 2: - swscale_flags = swscale_flags|SWS_BILINEAR; - break; - case 4: - swscale_flags = swscale_flags|SWS_BICUBIC; - break; - case 3: - swscale_flags = swscale_flags |SWS_POINT; - break; - case 5: - swscale_flags = swscale_flags|SWS_X; - break; - case 6: - swscale_flags = swscale_flags | SWS_AREA; - break; - case 7: - swscale_flags = swscale_flags | SWS_BICUBLIN; - break; - case 8: - swscale_flags = swscale_flags | SWS_GAUSS; - break; - case 9: - swscale_flags = swscale_flags | SWS_SINC; - break; - case 10: - swscale_flags = swscale_flags |SWS_LANCZOS; - break; - case 11: - swscale_flags = swscale_flags | SWS_SPLINE; - break; - } + int swscale_flags = 0; + switch(tmpl->flags) + { + case 1: + swscale_flags = swscale_flags|SWS_FAST_BILINEAR; + break; + case 2: + swscale_flags = swscale_flags|SWS_BILINEAR; + break; + case 4: + swscale_flags = swscale_flags|SWS_BICUBIC; + break; + case 3: + swscale_flags = swscale_flags |SWS_POINT; + break; + case 5: + swscale_flags = swscale_flags|SWS_X; + break; + case 6: + swscale_flags = swscale_flags | SWS_AREA; + break; + case 7: + swscale_flags = swscale_flags | SWS_BICUBLIN; + break; + case 8: + swscale_flags = swscale_flags | SWS_GAUSS; + break; + case 9: + swscale_flags = swscale_flags | SWS_SINC; + break; + case 10: + swscale_flags = swscale_flags |SWS_LANCZOS; + break; + case 11: + swscale_flags = swscale_flags | SWS_SPLINE; + break; + } - if( full_chroma_interpolation_ ) - swscale_flags = swscale_flags | SWS_FULL_CHR_H_INT; + if( full_chroma_interpolation_ ) + swscale_flags = swscale_flags | SWS_FULL_CHR_H_INT; - s->src_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); - s->dst_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); + s->src_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); + s->dst_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); - s->sws = sws_getContext( - src->width, - src->height, - src->format, - dst->width, - dst->height, - dst->format, - swscale_flags, - s->src_filter, - s->dst_filter, - NULL - ); + s->sws = sws_getContext( + src->width, + src->height, + src->format, + dst->width, + dst->height, + dst->format, + swscale_flags, + s->src_filter, + s->dst_filter, + NULL + ); int dummy[4]; int srcRange, dstRange; @@ -1183,94 +1183,94 @@ void* yuv_init_swscaler(VJFrame *src, VJFrame *dst, sws_template *tmpl, int swsc dst->width,dst->height,dst->yuv_fmt,yuv_get_pixfmt_description(dst->yuv_fmt), dst->range); #endif - if(!s->sws) - { - veejay_msg(VEEJAY_MSG_DEBUG,"sws_getContext failed"); - if(s)free(s); - return NULL; - } - - return ((void*)s); + if(!s->sws) + { + veejay_msg(VEEJAY_MSG_DEBUG,"sws_getContext failed"); + if(s)free(s); + return NULL; + } + + return ((void*)s); } static void *yuv_init_sws_cached_context(vj_sws *s, VJFrame *src, VJFrame *dst, sws_template *tmpl, int swscale_flagss) { - int swscale_flags = 0; - switch(tmpl->flags) - { - case 1: - swscale_flags = swscale_flags|SWS_FAST_BILINEAR; - break; - case 2: - swscale_flags = swscale_flags|SWS_BILINEAR; - break; - case 4: - swscale_flags = swscale_flags|SWS_BICUBIC; - break; - case 3: - swscale_flags = swscale_flags |SWS_POINT; - break; - case 5: - swscale_flags = swscale_flags|SWS_X; - break; - case 6: - swscale_flags = swscale_flags | SWS_AREA; - break; - case 7: - swscale_flags = swscale_flags | SWS_BICUBLIN; - break; - case 8: - swscale_flags = swscale_flags | SWS_GAUSS; - break; - case 9: - swscale_flags = swscale_flags | SWS_SINC; - break; - case 10: - swscale_flags = swscale_flags |SWS_LANCZOS; - break; - case 11: - swscale_flags = swscale_flags | SWS_SPLINE; - break; - } + int swscale_flags = 0; + switch(tmpl->flags) + { + case 1: + swscale_flags = swscale_flags|SWS_FAST_BILINEAR; + break; + case 2: + swscale_flags = swscale_flags|SWS_BILINEAR; + break; + case 4: + swscale_flags = swscale_flags|SWS_BICUBIC; + break; + case 3: + swscale_flags = swscale_flags |SWS_POINT; + break; + case 5: + swscale_flags = swscale_flags|SWS_X; + break; + case 6: + swscale_flags = swscale_flags | SWS_AREA; + break; + case 7: + swscale_flags = swscale_flags | SWS_BICUBLIN; + break; + case 8: + swscale_flags = swscale_flags | SWS_GAUSS; + break; + case 9: + swscale_flags = swscale_flags | SWS_SINC; + break; + case 10: + swscale_flags = swscale_flags |SWS_LANCZOS; + break; + case 11: + swscale_flags = swscale_flags | SWS_SPLINE; + break; + } - if( full_chroma_interpolation_ ) - swscale_flags = swscale_flags | SWS_FULL_CHR_H_INT; + if( full_chroma_interpolation_ ) + swscale_flags = swscale_flags | SWS_FULL_CHR_H_INT; - if( !sws_isSupportedInput( src->format ) ) { - veejay_msg(VEEJAY_MSG_DEBUG, "No support for input format"); - } - if( !sws_isSupportedOutput( dst->format ) ) { - veejay_msg(VEEJAY_MSG_DEBUG, "No support for output format"); - } + if( !sws_isSupportedInput( src->format ) ) { + veejay_msg(VEEJAY_MSG_DEBUG, "No support for input format"); + } + if( !sws_isSupportedOutput( dst->format ) ) { + veejay_msg(VEEJAY_MSG_DEBUG, "No support for output format"); + } - if( s->sws != NULL ) { - if( s->width != src->width || s->format != src->format || s->height != src->height ) { - sws_freeContext( s->sws ); - s->sws = NULL; - } - } + if( s->sws != NULL ) { + if( s->width != src->width || s->format != src->format || s->height != src->height ) { + sws_freeContext( s->sws ); + s->sws = NULL; + } + } - s->src_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); - s->dst_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); + s->src_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); + s->dst_filter = sws_getDefaultFilter( 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 0.0f, 1 ); - if( s->sws == NULL ) { - s->sws = sws_getContext( - src->width, - src->height, - src->format, - dst->width, - dst->height, - dst->format, - swscale_flags, - s->src_filter, - s->dst_filter, - NULL - ); - s->width = src->width; - s->height = src->height; - s->format = src->format; - } + if( s->sws == NULL ) { + s->sws = sws_getContext( + src->width, + src->height, + src->format, + dst->width, + dst->height, + dst->format, + swscale_flags, + s->src_filter, + s->dst_filter, + NULL + ); + s->width = src->width; + s->height = src->height; + s->format = src->format; + } int dummy[4]; int srcRange, dstRange; @@ -1288,277 +1288,277 @@ static void *yuv_init_sws_cached_context(vj_sws *s, VJFrame *src, VJFrame *dst, src->width,src->height,src->yuv_fmt,yuv_get_pixfmt_description(src->yuv_fmt), src->range, dst->width,dst->height,dst->yuv_fmt,yuv_get_pixfmt_description(dst->yuv_fmt), dst->range ); #endif - if( s->sws == NULL ) - { - veejay_msg(VEEJAY_MSG_ERROR,"Failed to get scaler context for %dx%d in %d -> %dx%d in %d", - src->width,src->height,src->format, dst->width,dst->height,dst->format ); + if( s->sws == NULL ) + { + veejay_msg(VEEJAY_MSG_ERROR,"Failed to get scaler context for %dx%d in %d -> %dx%d in %d", + src->width,src->height,src->format, dst->width,dst->height,dst->format ); - return NULL; - } + return NULL; + } - - return (void*) s; + + return (void*) s; } -void* yuv_init_cached_swscaler(void *cache,VJFrame *src, VJFrame *dst, sws_template *tmpl, int swscale_flags) +void* yuv_init_cached_swscaler(void *cache,VJFrame *src, VJFrame *dst, sws_template *tmpl, int swscale_flags) { - vj_sws *ctx = (vj_sws*) cache; - if( ctx == NULL ) - { - ctx = (vj_sws*) vj_calloc(sizeof(vj_sws)); - return yuv_init_sws_cached_context(ctx,src, dst, tmpl, swscale_flags); - } - - return yuv_init_sws_cached_context( ctx, src, dst, tmpl, swscale_flags); + vj_sws *ctx = (vj_sws*) cache; + if( ctx == NULL ) + { + ctx = (vj_sws*) vj_calloc(sizeof(vj_sws)); + return yuv_init_sws_cached_context(ctx,src, dst, tmpl, swscale_flags); + } + + return yuv_init_sws_cached_context( ctx, src, dst, tmpl, swscale_flags); } void yuv_crop(VJFrame *src, VJFrame *dst, VJRectangle *rect ) { - int x; - int y; - int i = 0; + int x; + int y; + int i = 0; - for( i = 0 ; i < 3 ; i ++ ) - { - int j = 0; - uint8_t *srcPlane = src->data[i]; - uint8_t *dstPlane = dst->data[i]; - for( y = rect->top ; y < ( src->height - rect->bottom ); y ++ ) - { - for ( x = rect->left ; x < ( src->width - rect->right ); x ++ ) - { - dstPlane[j] = srcPlane[ y * src->width + x ]; - j++; - } - } - } + for( i = 0 ; i < 3 ; i ++ ) + { + int j = 0; + uint8_t *srcPlane = src->data[i]; + uint8_t *dstPlane = dst->data[i]; + for( y = rect->top ; y < ( src->height - rect->bottom ); y ++ ) + { + for ( x = rect->left ; x < ( src->width - rect->right ); x ++ ) + { + dstPlane[j] = srcPlane[ y * src->width + x ]; + j++; + } + } + } } -VJFrame *yuv_allocate_crop_image( VJFrame *src, VJRectangle *rect ) +VJFrame *yuv_allocate_crop_image( VJFrame *src, VJRectangle *rect ) { - int w = src->width - rect->left - rect->right; - int h = src->height - rect->top - rect->bottom; + int w = src->width - rect->left - rect->right; + int h = src->height - rect->top - rect->bottom; - if( w <= 0 ) - return NULL; - if( h <= 0 ) - return NULL; + if( w <= 0 ) + return NULL; + if( h <= 0 ) + return NULL; - VJFrame *new = (VJFrame*) vj_malloc(sizeof(VJFrame)); - if(!new) - return NULL; + VJFrame *new = (VJFrame*) vj_malloc(sizeof(VJFrame)); + if(!new) + return NULL; - new->width = w; - new->height = h; - new->uv_len = (w >> src->shift_h) * (h >> src->shift_v ); - new->len = w * h; - new->uv_width = (w >> src->shift_h ); - new->uv_height = (h >> src->shift_v ); - new->shift_v = src->shift_v; - new->shift_h = src->shift_h; + new->width = w; + new->height = h; + new->uv_len = (w >> src->shift_h) * (h >> src->shift_v ); + new->len = w * h; + new->uv_width = (w >> src->shift_h ); + new->uv_height = (h >> src->shift_v ); + new->shift_v = src->shift_v; + new->shift_h = src->shift_h; - return new; + return new; } -void yuv_free_swscaler(void *sws) +void yuv_free_swscaler(void *sws) { - if(sws) - { - vj_sws *s = (vj_sws*) sws; - if(s->sws) - { - sws_freeContext( s->sws ); - s->sws = NULL; - } - if(s) { - if(s->dst_filter) - { - sws_freeFilter( s->dst_filter ); - s->dst_filter = NULL; - } - if(s->src_filter) { - sws_freeFilter( s->src_filter ); - s->src_filter = NULL; - } - free(s); - } - sws = NULL; - } + if(sws) + { + vj_sws *s = (vj_sws*) sws; + if(s->sws) + { + sws_freeContext( s->sws ); + s->sws = NULL; + } + if(s) { + if(s->dst_filter) + { + sws_freeFilter( s->dst_filter ); + s->dst_filter = NULL; + } + if(s->src_filter) { + sws_freeFilter( s->src_filter ); + s->src_filter = NULL; + } + free(s); + } + sws = NULL; + } } -void yuv_convert_and_scale_gray_rgb(void *sws,VJFrame *src, VJFrame *dst) +void yuv_convert_and_scale_gray_rgb(void *sws,VJFrame *src, VJFrame *dst) { - vj_sws *s = (vj_sws*) sws; - const int src_stride[3] = { src->width,0,0 }; - const int dst_stride[3] = { src->width * 3, 0,0 }; + vj_sws *s = (vj_sws*) sws; + const int src_stride[3] = { src->width,0,0 }; + const int dst_stride[3] = { src->width * 3, 0,0 }; #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( dst->data[0] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( dst->data[0] ); #endif - sws_scale( s->sws,(const uint8_t * const*) src->data,src_stride, 0,src->height,(uint8_t * const*)dst->data, dst_stride ); + sws_scale( s->sws,(const uint8_t * const*) src->data,src_stride, 0,src->height,(uint8_t * const*)dst->data, dst_stride ); } -void yuv_convert_and_scale_from_rgb(void *sws , VJFrame *src, VJFrame *dst) +void yuv_convert_and_scale_from_rgb(void *sws , VJFrame *src, VJFrame *dst) { - vj_sws *s = (vj_sws*) sws; - int n = 3; - if( src->format == PIX_FMT_RGBA || - src->format == PIX_FMT_BGRA || - src->format == PIX_FMT_ARGB || - src->format == PIX_FMT_ABGR || - src->format == PIX_FMT_BGR32 || - src->format == PIX_FMT_RGB32 ) - n = 4; - - const int src_stride[4] = { src->width*n,0,0,0}; - const int dst_stride[4] = { dst->width,dst->uv_width,dst->uv_width,dst->stride[3] }; + vj_sws *s = (vj_sws*) sws; + int n = 3; + if( src->format == PIX_FMT_RGBA || + src->format == PIX_FMT_BGRA || + src->format == PIX_FMT_ARGB || + src->format == PIX_FMT_ABGR || + src->format == PIX_FMT_BGR32 || + src->format == PIX_FMT_RGB32 ) + n = 4; + + const int src_stride[4] = { src->width*n,0,0,0}; + const int dst_stride[4] = { dst->width,dst->uv_width,dst->uv_width,dst->stride[3] }; #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( dst->data[0] ); - check_desired_alignment( dst->data[1] ); - check_desired_alignment( dst->data[2] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( dst->data[0] ); + check_desired_alignment( dst->data[1] ); + check_desired_alignment( dst->data[2] ); #endif - sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height, (uint8_t * const*)dst->data, dst_stride ); + sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height, (uint8_t * const*)dst->data, dst_stride ); } -void yuv_convert_and_scale_rgb(void *sws , VJFrame *src, VJFrame *dst) +void yuv_convert_and_scale_rgb(void *sws , VJFrame *src, VJFrame *dst) { - vj_sws *s = (vj_sws*) sws; - int n = 3; + vj_sws *s = (vj_sws*) sws; + int n = 3; - if( dst->format == PIX_FMT_RGBA || - dst->format == PIX_FMT_BGRA || - dst->format == PIX_FMT_ARGB || - dst->format == PIX_FMT_ABGR || - dst->format == PIX_FMT_RGB32 || - dst->format == PIX_FMT_BGR32 ) - n = 4; + if( dst->format == PIX_FMT_RGBA || + dst->format == PIX_FMT_BGRA || + dst->format == PIX_FMT_ARGB || + dst->format == PIX_FMT_ABGR || + dst->format == PIX_FMT_RGB32 || + dst->format == PIX_FMT_BGR32 ) + n = 4; - const int src_stride[4] = { src->width,src->uv_width,src->uv_width,src->stride[3] }; - const int dst_stride[4] = { dst->width*n,0,0,0 }; + const int src_stride[4] = { src->width,src->uv_width,src->uv_width,src->stride[3] }; + const int dst_stride[4] = { dst->width*n,0,0,0 }; #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( src->data[1] ); - check_desired_alignment( src->data[2] ); - check_desired_alignment( dst->data[0] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( src->data[1] ); + check_desired_alignment( src->data[2] ); + check_desired_alignment( dst->data[0] ); #endif - sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*) dst->data, dst_stride ); + sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*) dst->data, dst_stride ); } -void yuv_convert_and_scale(void *sws , VJFrame *src, VJFrame *dst) +void yuv_convert_and_scale(void *sws , VJFrame *src, VJFrame *dst) { - vj_sws *s = (vj_sws*) sws; + vj_sws *s = (vj_sws*) sws; #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( src->data[1] ); - check_desired_alignment( src->data[2] ); - check_desired_alignment( dst->data[0] ); - check_desired_alignment( dst->data[1] ); - check_desired_alignment( dst->data[2] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( src->data[1] ); + check_desired_alignment( src->data[2] ); + check_desired_alignment( dst->data[0] ); + check_desired_alignment( dst->data[1] ); + check_desired_alignment( dst->data[2] ); #endif - sws_scale( s->sws,(const uint8_t * const*) src->data, src->stride, 0, src->height,(uint8_t * const*)dst->data, dst->stride ); + sws_scale( s->sws,(const uint8_t * const*) src->data, src->stride, 0, src->height,(uint8_t * const*)dst->data, dst->stride ); } -void yuv_convert_and_scale_grey(void *sws , VJFrame *src, VJFrame *dst) +void yuv_convert_and_scale_grey(void *sws , VJFrame *src, VJFrame *dst) { - vj_sws *s = (vj_sws*) sws; - const int src_stride[3] = { src->width,0,0 }; - const int dst_stride[3] = { dst->width,0,0 }; + vj_sws *s = (vj_sws*) sws; + const int src_stride[3] = { src->width,0,0 }; + const int dst_stride[3] = { dst->width,0,0 }; #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( dst->data[0] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( dst->data[0] ); #endif - sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*) dst->data, dst_stride ); + sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*) dst->data, dst_stride ); } -void yuv_convert_and_scale_packed(void *sws , VJFrame *src, VJFrame *dst) +void yuv_convert_and_scale_packed(void *sws , VJFrame *src, VJFrame *dst) { - vj_sws *s = (vj_sws*) sws; + vj_sws *s = (vj_sws*) sws; - const int src_stride[3] = { src->width,src->uv_width,src->uv_width }; - const int dst_stride[3] = { dst->width * 2,0,0 }; + const int src_stride[3] = { src->width,src->uv_width,src->uv_width }; + const int dst_stride[3] = { dst->width * 2,0,0 }; #ifdef STRICT_CHECKING - check_desired_alignment( src->data[0] ); - check_desired_alignment( src->data[1] ); - check_desired_alignment( src->data[2] ); - check_desired_alignment( dst->data[0] ); + check_desired_alignment( src->data[0] ); + check_desired_alignment( src->data[1] ); + check_desired_alignment( src->data[2] ); + check_desired_alignment( dst->data[0] ); #endif - sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*)dst->data, dst_stride ); + sws_scale( s->sws,(const uint8_t * const*) src->data, src_stride, 0, src->height,(uint8_t * const*)dst->data, dst_stride ); } -int yuv_sws_get_cpu_flags(void) +int yuv_sws_get_cpu_flags(void) { - int swscale_flags = 0; - swscale_flags = swscale_flags | global_scaler_; + int swscale_flags = 0; + swscale_flags = swscale_flags | global_scaler_; - return swscale_flags; + return swscale_flags; } static struct -{ - int i; - const char *name; +{ + int i; + const char *name; } sws_scaler_types[] = { - { 1, "Fast bilinear (default)" }, - { 2, "Bilinear" }, - { 3, "Bicubic" }, - { 4, "Nearest neighbour"}, - { 5, "Experimental"}, - { 6, "Area"}, - { 7, "Linear bicubic"}, - { 8, "Gaussian"}, - { 9, "Sinc"}, - { 10, "Lanzcos"}, - { 11, "Natural bicubic spline"}, - { 0, NULL } + { 1, "Fast bilinear (default)" }, + { 2, "Bilinear" }, + { 3, "Bicubic" }, + { 4, "Nearest neighbour"}, + { 5, "Experimental"}, + { 6, "Area"}, + { 7, "Linear bicubic"}, + { 8, "Gaussian"}, + { 9, "Sinc"}, + { 10, "Lanzcos"}, + { 11, "Natural bicubic spline"}, + { 0, NULL } }; -const char *yuv_get_scaler_name(int id) +const char *yuv_get_scaler_name(int id) { - int i; - for( i = 0; sws_scaler_types[i].i != 0 ; i ++ ) - if( id == sws_scaler_types[i].i ) - return sws_scaler_types[i].name; - return NULL; + int i; + for( i = 0; sws_scaler_types[i].i != 0 ; i ++ ) + if( id == sws_scaler_types[i].i ) + return sws_scaler_types[i].name; + return NULL; } void yuv422to420planar(uint8_t *src[3], uint8_t *dst[3], int len ) { - - const int half = len / 2; - int i; - for( i = 0; i < half; i ++ ) { - dst[1][i] = ( src[1][2 * i] + src[1][2 * i + 1]) / 2; - dst[2][i] = ( src[2][2 * i] + src[2][2 * i + 1]) / 2; - } + + const int half = len / 2; + int i; + for( i = 0; i < half; i ++ ) { + dst[1][i] = ( src[1][2 * i] + src[1][2 * i + 1]) / 2; + dst[2][i] = ( src[2][2 * i] + src[2][2 * i + 1]) / 2; + } } #if !defined(HAVE_ASM_MMX) && !defined(HAVE_ARM) -void yuv420to422planar( uint8_t *src[3], uint8_t *dst[3], int w, int h ) +void yuv420to422planar( uint8_t *src[3], uint8_t *dst[3], int w, int h ) { - unsigned int x,y; - unsigned int k=0; - const int hei = h >> 1; - const int wid = w >> 1; - uint8_t *u = dst[1]; - uint8_t *v = dst[2]; - uint8_t *a = src[1]; - uint8_t *b = src[2]; - for( y = 0 ; y < hei; y ++ ) { - u = dst[1] + ( (y << 1 ) * wid ); //@ dup - v = dst[2] + ( (y << 1 ) * wid ); - for( x= 0; x < wid ; x ++ ) { - u[k] = a[ y * wid + x]; - u[k + wid ] = a[y*wid+x]; - v[k] = b[ y * wid + x]; - v[k + wid ] = b[y * wid + x ]; - k += 2; - } - } + unsigned int x,y; + unsigned int k=0; + const int hei = h >> 1; + const int wid = w >> 1; + uint8_t *u = dst[1]; + uint8_t *v = dst[2]; + uint8_t *a = src[1]; + uint8_t *b = src[2]; + for( y = 0 ; y < hei; y ++ ) { + u = dst[1] + ( (y << 1 ) * wid ); //@ dup + v = dst[2] + ( (y << 1 ) * wid ); + for( x= 0; x < wid ; x ++ ) { + u[k] = a[ y * wid + x]; + u[k + wid ] = a[y*wid+x]; + v[k] = b[ y * wid + x]; + v[k + wid ] = b[y * wid + x ]; + k += 2; + } + } } #endif @@ -1588,247 +1588,248 @@ void yuv420to422planar(uint8_t *src[3], uint8_t *dst[3], int w, int h) { #endif #ifdef HAVE_ASM_MMX -static inline void copy8( uint8_t *to, uint8_t *to2, uint8_t *from ) { - __asm__ __volatile__ ( - "movq (%0), %%mm0\n" - "movq %%mm0, (%1)\n" - "movq %%mm0, (%2)\n" - :: "r" (from), "r" (to) , "r" (to2) : "memory" - ); +static inline void copy8( uint8_t *to, uint8_t *to2, uint8_t *from ) { + __asm__ __volatile__ ( + "movq (%0), %%mm0\n" + "movq %%mm0, (%1)\n" + "movq %%mm0, (%2)\n" + :: "r" (from), "r" (to) , "r" (to2) : "memory" + ); } -void yuv420to422planar( uint8_t *src[3], uint8_t *dst[3], int w, int h ) +void yuv420to422planar( uint8_t *src[3], uint8_t *dst[3], int w, int h ) { - unsigned int x,y; - const int hei = (h >> 1); - const int work = (w >> 1) / 8; - const int wid = w >> 1; - uint8_t *u = dst[1]; - uint8_t *v = dst[2]; - uint8_t *a = src[1]; - uint8_t *b = src[2]; - uint8_t *u2 = dst[1]; - uint8_t *v2 = dst[2]; - for( y = 0; y < hei; y ++ ) { - u = dst[1] + ( (y << 1 ) * wid ); - u2 = dst[1] + (( (y+1)<<1) * wid); - a = src[1] + ( y * wid ); - for( x = 0; x < work; x ++ ) { - copy8( u,u2, a ); - u += 8; - u2 += 8; - a += 8; - } - } - for( y = 0; y < hei; y ++ ) { - v = dst[2] + ( (y << 1 ) * wid ); - v2 = dst[2] + (( (y+1)<<1) * wid ); - b = src[2] + ( y * wid ); - for( x = 0; x < work; x ++ ) { - copy8( v,v2, b ); - v += 8; - v2 += 8; - b += 8; - } - } + unsigned int x,y; + const int hei = (h >> 1); + const int work = (w >> 1) / 8; + const int wid = w >> 1; + uint8_t *u = dst[1]; + uint8_t *v = dst[2]; + uint8_t *a = src[1]; + uint8_t *b = src[2]; + uint8_t *u2 = dst[1]; + uint8_t *v2 = dst[2]; + for( y = 0; y < hei; y ++ ) { + u = dst[1] + ( (y << 1 ) * wid ); + u2 = dst[1] + (( (y+1)<<1) * wid); + a = src[1] + ( y * wid ); + for( x = 0; x < work; x ++ ) { + copy8( u,u2, a ); + u += 8; + u2 += 8; + a += 8; + } + } + for( y = 0; y < hei; y ++ ) { + v = dst[2] + ( (y << 1 ) * wid ); + v2 = dst[2] + (( (y+1)<<1) * wid ); + b = src[2] + ( y * wid ); + for( x = 0; x < work; x ++ ) { + copy8( v,v2, b ); + v += 8; + v2 += 8; + b += 8; + } + } __asm__ __volatile__ ( _EMMS:::"memory"); } #endif -static void yuy2_scale_pixels_from_yuv_job( void *arg ) +static void yuy2_scale_pixels_from_yuv_job( void *arg ) { - vj_task_arg_t *v = (vj_task_arg_t*) arg; - uint8_t *plane = v->input[0]; - int len = v->strides[0]; + vj_task_arg_t *v = (vj_task_arg_t*) arg; + uint8_t *plane = v->input[0]; + int len = v->strides[0]; - unsigned int i; - for( i = 0; i < len; i += 4 ) { - plane[i+0] = jpeg_to_CCIR_tableY[ plane[i+0] ]; - plane[i+1] = jpeg_to_CCIR_tableUV[plane[i+1] ]; - plane[i+2] = jpeg_to_CCIR_tableY[ plane[i+2] ]; - plane[i+3] = jpeg_to_CCIR_tableUV[ plane[i+3] ]; - } + unsigned int i; + for( i = 0; i < len; i += 4 ) { + plane[i+0] = jpeg_to_CCIR_tableY[ plane[i+0] ]; + plane[i+1] = jpeg_to_CCIR_tableUV[plane[i+1] ]; + plane[i+2] = jpeg_to_CCIR_tableY[ plane[i+2] ]; + plane[i+3] = jpeg_to_CCIR_tableUV[ plane[i+3] ]; + } } -void yuy2_scale_pixels_from_yuv( uint8_t *plane, int len ) +void yuy2_scale_pixels_from_yuv( uint8_t *plane, int len ) { - unsigned int rlen = 2 * len ; - unsigned int i; - for( i = 0; i < rlen; i += 4 ) { - plane[i+0] = jpeg_to_CCIR_tableY[ plane[i+0] ]; - plane[i+1] = jpeg_to_CCIR_tableUV[plane[i+1] ]; - plane[i+2] = jpeg_to_CCIR_tableY[ plane[i+2] ]; - plane[i+3] = jpeg_to_CCIR_tableUV[ plane[i+3] ]; - } + unsigned int rlen = 2 * len ; + unsigned int i; + for( i = 0; i < rlen; i += 4 ) { + plane[i+0] = jpeg_to_CCIR_tableY[ plane[i+0] ]; + plane[i+1] = jpeg_to_CCIR_tableUV[plane[i+1] ]; + plane[i+2] = jpeg_to_CCIR_tableY[ plane[i+2] ]; + plane[i+3] = jpeg_to_CCIR_tableUV[ plane[i+3] ]; + } } -static void yuy2_scale_pixels_from_ycbcr_job( void *arg ) +static void yuy2_scale_pixels_from_ycbcr_job( void *arg ) { - vj_task_arg_t *v = (vj_task_arg_t*) arg; - uint8_t *plane = v->input[0]; - int len = v->strides[0]; - unsigned int i; - for( i = 0; i < len; i += 4 ) { - plane[i+0] = CCIR_to_jpeg_tableY[ plane[i+0] ]; - plane[i+1] = CCIR_to_jpeg_tableUV[plane[i+1] ]; - plane[i+2] = CCIR_to_jpeg_tableY[ plane[i+2] ]; - plane[i+3] = CCIR_to_jpeg_tableUV[ plane[i+3] ]; - } + vj_task_arg_t *v = (vj_task_arg_t*) arg; + uint8_t *plane = v->input[0]; + int len = v->strides[0]; + unsigned int i; + for( i = 0; i < len; i += 4 ) { + plane[i+0] = CCIR_to_jpeg_tableY[ plane[i+0] ]; + plane[i+1] = CCIR_to_jpeg_tableUV[plane[i+1] ]; + plane[i+2] = CCIR_to_jpeg_tableY[ plane[i+2] ]; + plane[i+3] = CCIR_to_jpeg_tableUV[ plane[i+3] ]; + } } -void yuy2_scale_pixels_from_ycbcr( uint8_t *plane, int len ) +void yuy2_scale_pixels_from_ycbcr( uint8_t *plane, int len ) { - unsigned int rlen = 2 * len ; - unsigned int i; - for( i = 0; i < rlen; i += 4 ) { - plane[i+0] = CCIR_to_jpeg_tableY[ plane[i+0] ]; - plane[i+1] = CCIR_to_jpeg_tableUV[plane[i+1] ]; - plane[i+2] = CCIR_to_jpeg_tableY[ plane[i+2] ]; - plane[i+3] = CCIR_to_jpeg_tableUV[ plane[i+3] ]; - } + unsigned int rlen = 2 * len ; + unsigned int i; + for( i = 0; i < rlen; i += 4 ) { + plane[i+0] = CCIR_to_jpeg_tableY[ plane[i+0] ]; + plane[i+1] = CCIR_to_jpeg_tableUV[plane[i+1] ]; + plane[i+2] = CCIR_to_jpeg_tableY[ plane[i+2] ]; + plane[i+3] = CCIR_to_jpeg_tableUV[ plane[i+3] ]; + } } -static void yuy_scale_pixels_from_yuv_job( void *arg) +static void yuy_scale_pixels_from_yuv_job( void *arg) { - vj_task_arg_t *t = (vj_task_arg_t*) arg; - - unsigned int i; - uint8_t *y = t->input[0]; - uint8_t *u = t->input[1]; - uint8_t *v = t->input[2]; - uint8_t *dY = t->output[0]; - uint8_t *dU = t->output[1]; - uint8_t *dV = t->output[2]; - - for( i = 0; i < t->strides[0] ; i ++ ) { - dY[i] = jpeg_to_CCIR_tableY[ y[i] ]; - } - for( i = 0; i < t->strides[1] ; i ++ ) { - dU[i] = jpeg_to_CCIR_tableUV[ u[i] ]; - dV[i] = jpeg_to_CCIR_tableUV[ v[i] ]; - } + vj_task_arg_t *t = (vj_task_arg_t*) arg; + + unsigned int i; + uint8_t *y = t->input[0]; + uint8_t *u = t->input[1]; + uint8_t *v = t->input[2]; + uint8_t *dY = t->output[0]; + uint8_t *dU = t->output[1]; + uint8_t *dV = t->output[2]; + + for( i = 0; i < t->strides[0] ; i ++ ) { + dY[i] = jpeg_to_CCIR_tableY[ y[i] ]; + } + for( i = 0; i < t->strides[1] ; i ++ ) { + dU[i] = jpeg_to_CCIR_tableUV[ u[i] ]; + dV[i] = jpeg_to_CCIR_tableUV[ v[i] ]; + } } -void yuv_scale_pixels_from_yuv( uint8_t *src[3], uint8_t *dst[3], int len, int uv_len ) +void yuv_scale_pixels_from_yuv( uint8_t *src[3], uint8_t *dst[3], int len, int uv_len ) { - unsigned int i; - uint8_t *y = src[0]; - uint8_t *u = src[1]; - uint8_t *v = src[2]; - uint8_t *dY = dst[0]; - uint8_t *dU = dst[1]; - uint8_t *dV = dst[2]; - for( i = 0; i < len ; i ++ ) { - dY[i] = jpeg_to_CCIR_tableY[ y[i] ]; - } - len = len / 2; - for( i = 0; i < len ; i ++ ) { - dU[i] = jpeg_to_CCIR_tableUV[ u[i] ]; - dV[i] = jpeg_to_CCIR_tableUV[ v[i] ]; - } + unsigned int i; + uint8_t *y = src[0]; + uint8_t *u = src[1]; + uint8_t *v = src[2]; + uint8_t *dY = dst[0]; + uint8_t *dU = dst[1]; + uint8_t *dV = dst[2]; + for( i = 0; i < len ; i ++ ) { + dY[i] = jpeg_to_CCIR_tableY[ y[i] ]; + } + len = len / 2; + for( i = 0; i < len ; i ++ ) { + dU[i] = jpeg_to_CCIR_tableUV[ u[i] ]; + dV[i] = jpeg_to_CCIR_tableUV[ v[i] ]; + } } -void yuv_scale_pixels_from_y( uint8_t *plane, int len ) +void yuv_scale_pixels_from_y( uint8_t *plane, int len ) { - unsigned int i; + unsigned int i; - for( i = 0; i < len ; i ++ ) { - plane[i] = jpeg_to_CCIR_tableY[ plane[i] ]; - } + for( i = 0; i < len ; i ++ ) { + plane[i] = jpeg_to_CCIR_tableY[ plane[i] ]; + } } -void yuv_scale_pixels_from_uv( uint8_t *plane, int len ) +void yuv_scale_pixels_from_uv( uint8_t *plane, int len ) { - unsigned int i; + unsigned int i; - for( i = 0; i < len ; i ++ ) { - plane[i] = jpeg_to_CCIR_tableUV[ plane[i] ]; - } + for( i = 0; i < len ; i ++ ) { + plane[i] = jpeg_to_CCIR_tableUV[ plane[i] ]; + } } -void yuv_scale_pixels_from_ycbcr( uint8_t *plane, float min, float max, int len ) +void yuv_scale_pixels_from_ycbcr( uint8_t *plane, float min, float max, int len ) { - unsigned int i; + unsigned int i; - if( max == 235.0f ) { - for( i = 0; i < len ; i ++ ) { - plane[i] = CCIR_to_jpeg_tableY[ plane[i] ]; - } - } else if ( max == 240.0f ) { - for( i = 0; i < len ; i ++ ) { - plane[i] = CCIR_to_jpeg_tableUV[ plane[i] ]; - } - } + if( max == 235.0f ) { + for( i = 0; i < len ; i ++ ) { + plane[i] = CCIR_to_jpeg_tableY[ plane[i] ]; + } + } else if ( max == 240.0f ) { + for( i = 0; i < len ; i ++ ) { + plane[i] = CCIR_to_jpeg_tableUV[ plane[i] ]; + } + } } -void yuv_scale_pixels_from_ycbcr2( uint8_t *plane[3], uint8_t *dst[3], int len ) +void yuv_scale_pixels_from_ycbcr2( uint8_t *plane[3], uint8_t *dst[3], int len ) { - unsigned int i; - uint8_t *y = plane[0]; - uint8_t *u = plane[1]; - uint8_t *v = plane[2]; - uint8_t *dy = dst[0]; - uint8_t *du = dst[1]; - uint8_t *dv = dst[2]; - for( i = 0; i < len ; i ++ ) { - dy[i] = CCIR_to_jpeg_tableY[ y[i] ]; - } + unsigned int i; + uint8_t *y = plane[0]; + uint8_t *u = plane[1]; + uint8_t *v = plane[2]; + uint8_t *dy = dst[0]; + uint8_t *du = dst[1]; + uint8_t *dv = dst[2]; + for( i = 0; i < len ; i ++ ) { + dy[i] = CCIR_to_jpeg_tableY[ y[i] ]; + } - len = len / 2; - for( i = 0; i < len ; i ++ ) { - du[i] = CCIR_to_jpeg_tableUV[ u[i] ]; - dv[i] = CCIR_to_jpeg_tableUV[ v[i] ]; - } + len = len / 2; + for( i = 0; i < len ; i ++ ) { + du[i] = CCIR_to_jpeg_tableUV[ u[i] ]; + dv[i] = CCIR_to_jpeg_tableUV[ v[i] ]; + } } #define packv0__( y0,u0,v0,y1 ) (( (int) y0 ) & 0xff ) +\ - ( (((int) u0 ) & 0xff) << 8) +\ - ( ((((int) v0) & 0xff) << 16 )) +\ - ( ((((int) y1) & 0xff) << 24 ) ) + ( (((int) u0 ) & 0xff) << 8) +\ + ( ((((int) v0) & 0xff) << 16 )) +\ + ( ((((int) y1) & 0xff) << 24 ) ) #define packv1__( u1,v1,y2,u2 )(( (int) u1 ) & 0xff ) +\ - ( (((int) v1 ) & 0xff) << 8) +\ - ( ((((int) y2) & 0xff) << 16 )) +\ - ( ((((int) u2) & 0xff) << 24 ) ) + ( (((int) v1 ) & 0xff) << 8) +\ + ( ((((int) y2) & 0xff) << 16 )) +\ + ( ((((int) u2) & 0xff) << 24 ) ) #define packv2__( v2,y3,u3,v3 )(( (int) v2 ) & 0xff ) +\ - ( (((int) y3 ) & 0xff) << 8) +\ - ( ((((int) u3) & 0xff) << 16 )) +\ - ( ((((int) v3) & 0xff) << 24 ) ) + ( (((int) y3 ) & 0xff) << 8) +\ + ( ((((int) u3) & 0xff) << 16 )) +\ + ( ((((int) v3) & 0xff) << 24 ) ) //! YUV 4:2:4 Planar to 4:4:4 Packed: Y, V, U, Y,V, U , .... */ void yuv444_yvu444_1plane( - uint8_t *data[3], - const int width, - const int height, - uint8_t *dst_buffer) + uint8_t *data[3], + const int width, + const int height, + uint8_t *dst_buffer) { - unsigned int x; - uint8_t *yp = data[0]; - uint8_t *up = data[2]; - uint8_t *vp = data[1]; - int len = (width * height) >> 2; - uint8_t *dst = dst_buffer; + unsigned int x; + uint8_t *yp = data[0]; + uint8_t *up = data[2]; + uint8_t *vp = data[1]; + int len = (width * height) >> 2; + uint8_t *dst = dst_buffer; #pragma omp simd - for( x=0; x < len; x ++ ) - { - dst[0] = packv0__( yp[0],up[0],vp[0],yp[1]); - dst[1] = packv1__( up[1],vp[1],yp[2],up[2]); - dst[2] = packv2__( vp[2],yp[3],up[3],vp[3]); + for( x=0; x < len; x ++ ) + { + dst[0] = packv0__( yp[0],up[0],vp[0],yp[1]); + dst[1] = packv1__( up[1],vp[1],yp[2],up[2]); + dst[2] = packv2__( vp[2],yp[3],up[3],vp[3]); - yp += 4; - up += 4; - vp += 4; - dst += 3; - } - + yp += 4; + up += 4; + vp += 4; + dst += 3; + } + } void yuv_interpolate_frames( uint8_t *dst, uint8_t *a, uint8_t *b, const int len, const float frac ) { - int i; - for( i = 0; i < len; i ++ ) { - dst[i] = a[i] + ( frac * ( b[i] - a[i] ) ); - } + int i; +#pragma omp simd + for( i = 0; i < len; i ++ ) { + dst[i] = a[i] + ( frac * ( b[i] - a[i] ) ); + } } diff --git a/veejay-current/veejay-core/libyuv/yuvconv.h b/veejay-current/veejay-core/libyuv/yuvconv.h index 79e43bd8..d6632aed 100644 --- a/veejay-current/veejay-core/libyuv/yuvconv.h +++ b/veejay-current/veejay-core/libyuv/yuvconv.h @@ -146,5 +146,4 @@ void yuv444_yvu444_1plane( void verify_CCIR_auto(int a, int b, VJFrame *dst ); int yuv_which_scaler(); void yuv_interpolate_frames( uint8_t *dst, uint8_t *a, uint8_t *b, const int len, const float frac ); - #endif