• ffmpeg之yuv2rgb_c_24_rgb


     1 YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0)                
     2     LOADCHROMA(0);
     3     PUTRGB24(dst_1, py_1, 0);
     4     PUTRGB24(dst_2, py_2, 0);
     5 
     6     LOADCHROMA(1);
     7     PUTRGB24(dst_2, py_2, 1);
     8     PUTRGB24(dst_1, py_1, 1);
     9 
    10     LOADCHROMA(2);
    11     PUTRGB24(dst_1, py_1, 2);
    12     PUTRGB24(dst_2, py_2, 2);
    13 
    14     LOADCHROMA(3);
    15     PUTRGB24(dst_2, py_2, 3);
    16     PUTRGB24(dst_1, py_1, 3);
    17 ENDYUV2RGBLINE(24, 0)
    18     LOADCHROMA(0);
    19     PUTRGB24(dst_1, py_1, 0);
    20     PUTRGB24(dst_2, py_2, 0);
    21 
    22     LOADCHROMA(1);
    23     PUTRGB24(dst_2, py_2, 1);
    24     PUTRGB24(dst_1, py_1, 1);
    25 ENDYUV2RGBLINE(24, 1)
    26     LOADCHROMA(0);
    27     PUTRGB24(dst_1, py_1, 0);
    28     PUTRGB24(dst_2, py_2, 0);
    29 ENDYUV2RGBFUNC()
    View Code
    1 #define PUTRGB24(dst, src, i)                       
    2     Y              = src[2 * i];                    
    3     dst[6 * i + 0] = r[Y];                          
    4     dst[6 * i + 1] = g[Y];                          
    5     dst[6 * i + 2] = b[Y];                          
    6     Y              = src[2 * i + 1];                
    7     dst[6 * i + 3] = r[Y];                          
    8     dst[6 * i + 4] = g[Y];                          
    9     dst[6 * i + 5] = b[Y];
    View Code
    1 #define LOADCHROMA(i)                               
    2     U = pu[i];                                      
    3     V = pv[i];                                      
    4     r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];                     
    5     g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
    6     b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];
    View Code
     1 #define ENDYUV2RGBLINE(dst_delta, ss)               
     2     pu    += 4 >> ss;                               
     3     pv    += 4 >> ss;                               
     4     py_1  += 8 >> ss;                               
     5     py_2  += 8 >> ss;                               
     6     dst_1 += dst_delta >> ss;                       
     7     dst_2 += dst_delta >> ss;                       
     8     }                                               
     9     if (c->dstW & (4 >> ss)) {                      
    10         int av_unused Y, U, V;                      
    View Code
    1 #define ENDYUV2RGBFUNC()                            
    2             }                                       
    3         }                                           
    4         return srcSliceH;                           
    5     }
    View Code
      1 #define YUV2RGBFUNC(yuv2rgb_c_24_rgb, uint8_t, 0)                           
      2     static int yuv2rgb_c_24_rgb(SwsContext *c, const uint8_t *src[],        
      3                          int srcStride[], int srcSliceY, int srcSliceH,     
      4                          uint8_t *dst[], int dstStride[])                   
      5     {                                                                       
      6         int y;                                                              
      7                                                                             
      8         if (!0 && c->srcFormat == AV_PIX_FMT_YUV422P)                                 
      9         {                                                                    
     10             srcStride[1] *= 2;                                              
     11             srcStride[2] *= 2;                                              
     12         }                                                                   
     13         for (y = 0; y < srcSliceH; y += 2) 
     14         {                                                                     
     15             uint8_t *dst_1 =                                                
     16                 (uint8_t *)(dst[0] + (y + srcSliceY)     * dstStride[0]);   
     17             uint8_t *dst_2 =                                                
     18                 (uint8_t *)(dst[0] + (y + srcSliceY + 1) * dstStride[0]);   
     19             uint8_t av_unused *r, *g, *b;                                   
     20             const uint8_t *py_1 = src[0] +  y       * srcStride[0];         
     21             const uint8_t *py_2 = py_1   +            srcStride[0];         
     22             const uint8_t *pu   = src[1] + (y >> 1) * srcStride[1];         
     23             const uint8_t *pv   = src[2] + (y >> 1) * srcStride[2];         
     24             const uint8_t av_unused *pa_1, *pa_2;                           
     25             unsigned int h_size = c->dstW >> 3;                             
     26             if (0)                                                             
     27             {                                                                
     28                 pa_1 = src[3] + y * srcStride[3];                           
     29                 pa_2 = pa_1   +     srcStride[3];                           
     30             }                                                               
     31             while (h_size--)                                                 
     32             {                                                                
     33                 int av_unused U, V, Y;                                      
     34                 U = pu[0];                                                  
     35                 V = pv[0];                                                  
     36                 r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];           
     37                 g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
     38                 b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];
     39     
     40                 Y              = py_1[2 * 0];                                
     41                 dst_1[6 * 0 + 0] = r[Y];                                      
     42                 dst_1[6 * 0 + 1] = g[Y];                                     
     43                 dst_1[6 * 0 + 2] = b[Y];                                      
     44                 Y              = py_1[2 * 0 + 1];                            
     45                 dst_1[6 * 0 + 3] = r[Y];                                      
     46                 dst_1[6 * 0 + 4] = g[Y];                                      
     47                 dst_1[6 * 0 + 5] = b[Y];
     48 
     49                 Y              = py_2[2 * 0];                                
     50                 dst_2[6 * 0 + 0] = r[Y];                                      
     51                 dst_2[6 * 0 + 1] = g[Y];                                      
     52                 dst_2[6 * 0 + 2] = b[Y];                                      
     53                 Y              = py_2[2 * 0 + 1];                            
     54                 dst_2[6 * 0 + 3] = r[Y];                                      
     55                 dst_2[6 * 0 + 4] = g[Y];                                      
     56                 dst_2[6 * 0 + 5] = b[Y];
     57                 
     58                 U = pu[1];                                                  
     59                 V = pv[1];                                                  
     60                 r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];           
     61                 g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
     62                 b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];
     63                 
     64                 Y              = py_2[2 * 1];                                
     65                 dst_2[6 * 1 + 0] = r[Y];                                      
     66                 dst_2[6 * 1 + 1] = g[Y];                                      
     67                 dst_2[6 * 1 + 2] = b[Y];                                      
     68                 Y              = py_2[2 * 1 + 1];                            
     69                 dst_2[6 * 1 + 3] = r[Y];                                      
     70                 dst_2[6 * 1 + 4] = g[Y];                                      
     71                 dst_2[6 * 1 + 5] = b[Y];
     72                 
     73                 Y              = py_1[2 * 1];                                
     74                 dst_1[6 * 1 + 0] = r[Y];                                      
     75                 dst_1[6 * 1 + 1] = g[Y];                                      
     76                 dst_1[6 * 1 + 2] = b[Y];                                      
     77                 Y              = py_1[2 * 1 + 1];                            
     78                 dst_1[6 * 1 + 3] = r[Y];                                      
     79                 dst_1[6 * 1 + 4] = g[Y];                                      
     80                 dst_1[6 * 1 + 5] = b[Y];
     81 
     82                 U = pu[2];                                                  
     83                 V = pv[2];                                                  
     84                 r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];           
     85                 g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
     86                 b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];
     87 
     88                 Y              = py_1[2 * 2];                                
     89                 dst_1[6 * 2 + 0] = r[Y];                                      
     90                 dst_1[6 * 2 + 1] = g[Y];                                      
     91                 dst_1[6 * 2 + 2] = b[Y];                                      
     92                 Y              = py_1[2 * 2 + 1];                            
     93                 dst_1[6 * 2 + 3] = r[Y];                                      
     94                 dst_1[6 * 2 + 4] = g[Y];                                      
     95                 dst_1[6 * 2 + 5] = b[Y];                                        
     96 
     97                 Y              = py_2[2 * 2];                                
     98                 dst_2[6 * 2 + 0] = r[Y];                                      
     99                 dst_2[6 * 2 + 1] = g[Y];                                      
    100                 dst_2[6 * 2 + 2] = b[Y];                                      
    101                 Y              = py_2[2 * 2 + 1];                            
    102                 dst_2[6 * 2 + 3] = r[Y];                                      
    103                 dst_2[6 * 2 + 4] = g[Y];                                      
    104                 dst_2[6 * 2 + 5] = b[Y];                                    
    105     
    106                 U = pu[3];                                                  
    107                 V = pv[3];                                                  
    108                 r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];           
    109                 g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
    110                 b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];                
    111 
    112                 Y              = py_2[2 * 3];                                
    113                 dst_2[6 * 3 + 0] = r[Y];                                      
    114                 dst_2[6 * 3 + 1] = g[Y];                                      
    115                 dst_2[6 * 3 + 2] = b[Y];                                      
    116                 Y              = py_2[2 * 3 + 1];                            
    117                 dst_2[6 * 3 + 3] = r[Y];                                      
    118                 dst_2[6 * 3 + 4] = g[Y];                                      
    119                 dst_2[6 * 3 + 5] = b[Y];                                        
    120 
    121                 Y              = py_1[2 * 3];                                
    122                 dst_1[6 * 3 + 0] = r[Y];                                      
    123                 dst_1[6 * 3 + 1] = g[Y];                                      
    124                 dst_1[6 * 3 + 2] = b[Y];                                      
    125                 Y              = py_1[2 * 3 + 1];                            
    126                 dst_1[6 * 3 + 3] = r[Y];                                      
    127                 dst_1[6 * 3 + 4] = g[Y];                                      
    128                 dst_1[6 * 3 + 5] = b[Y];                                    
    129     
    130                 pu    += 4 >> 0;                                               
    131                 pv    += 4 >> 0;                                               
    132                 py_1  += 8 >> 0;                                               
    133                 py_2  += 8 >> 0;                                               
    134                 dst_1 += 24 >> 0;                                           
    135                 dst_2 += 24 >> 0;                                           
    136             }                                                               
    137             if (c->dstW & (4 >> 0))                                         
    138             {                                                                  
    139                 int av_unused Y, U, V;                                      
    140 
    141                 U = pu[0];                                                  
    142                 V = pv[0];                                                  
    143                 r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];           
    144                 g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
    145                 b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];                
    146 
    147                 Y              = py_1[2 * 0];                                
    148                 dst_1[6 * 0 + 0] = r[Y];                                      
    149                 dst_1[6 * 0 + 1] = g[Y];                                      
    150                 dst_1[6 * 0 + 2] = b[Y];                                      
    151                 Y              = py_1[2 * 0 + 1];                            
    152                 dst_1[6 * 0 + 3] = r[Y];                                      
    153                 dst_1[6 * 0 + 4] = g[Y];                                      
    154                 dst_1[6 * 0 + 5] = b[Y];                                        
    155 
    156                 Y              = py_2[2 * 0];                                
    157                 dst_2[6 * 0 + 0] = r[Y];                                      
    158                 dst_2[6 * 0 + 1] = g[Y];                                      
    159                 dst_2[6 * 0 + 2] = b[Y];                                      
    160                 Y              = py_2[2 * 0 + 1];                            
    161                 dst_2[6 * 0 + 3] = r[Y];                                      
    162                 dst_2[6 * 0 + 4] = g[Y];                                      
    163                 dst_2[6 * 0 + 5] = b[Y];                                    
    164 
    165                 U = pu[1];                                                  
    166                 V = pv[1];                                                  
    167                 r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];           
    168                 g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
    169                 b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];            
    170 
    171                 Y              = py_2[2 * 1];                                
    172                 dst_2[6 * 1 + 0] = r[Y];                                      
    173                 dst_2[6 * 1 + 1] = g[Y];                                      
    174                 dst_2[6 * 1 + 2] = b[Y];                                      
    175                 Y              = py_2[2 * 1 + 1];                            
    176                 dst_2[6 * 1 + 3] = r[Y];                                      
    177                 dst_2[6 * 1 + 4] = g[Y];                                      
    178                 dst_2[6 * 1 + 5] = b[Y];                                        
    179 
    180                 Y              = py_1[2 * 1];                                
    181                 dst_1[6 * 1 + 0] = r[Y];                                      
    182                 dst_1[6 * 1 + 1] = g[Y];                                      
    183                 dst_1[6 * 1 + 2] = b[Y];                                      
    184                 Y              = py_1[2 * 1 + 1];                            
    185                 dst_1[6 * 1 + 3] = r[Y];                                      
    186                 dst_1[6 * 1 + 4] = g[Y];                                      
    187                 dst_1[6 * 1 + 5] = b[Y];                                    
    188 
    189                 pu    += 4 >> 1;                                               
    190                 pv    += 4 >> 1;                                               
    191                 py_1  += 8 >> 1;                                               
    192                 py_2  += 8 >> 1;                                               
    193                 dst_1 += 24 >> 1;                                           
    194                 dst_2 += 24 >> 1;                                           
    195             }                                                               
    196             if (c->dstW & (4 >> ss))                                         
    197             {                                                                  
    198                 int av_unused Y, U, V;                                      
    199 
    200                 U = pu[0];                                                  
    201                 V = pv[0];                                                          
    202                 r = (void *)c->table_rV[V+YUVRGB_TABLE_HEADROOM];           
    203                 g = (void *)(c->table_gU[U+YUVRGB_TABLE_HEADROOM] + c->table_gV[V+YUVRGB_TABLE_HEADROOM]);  
    204                 b = (void *)c->table_bU[U+YUVRGB_TABLE_HEADROOM];            
    205 
    206                 Y              = py_1[2 * 0];                                
    207                 dst_1[6 * 0 + 0] = r[Y];                                      
    208                 dst_1[6 * 0 + 1] = g[Y];                                      
    209                 dst_1[6 * 0 + 2] = b[Y];                                      
    210                 Y              = py_1[2 * 0 + 1];                            
    211                 dst_1[6 * 0 + 3] = r[Y];                                      
    212                 dst_1[6 * 0 + 4] = g[Y];                                      
    213                 dst_1[6 * 0 + 5] = b[Y];                                    
    214 
    215                 Y              = py_2[2 * 0];                                
    216                 dst_2[6 * 0 + 0] = r[Y];                                      
    217                 dst_2[6 * 0 + 1] = g[Y];                                      
    218                 dst_2[6 * 0 + 2] = b[Y];                                      
    219                 Y              = py_2[2 * 0 + 1];                            
    220                 dst_2[6 * 0 + 3] = r[Y];                                      
    221                 dst_2[6 * 0 + 4] = g[Y];                                      
    222                 dst_2[6 * 0 + 5] = b[Y];                                        
    223             }                                                               
    224         }                                                                   
    225         return srcSliceH;                                                   
    226     }
    View Code
  • 相关阅读:
    对物联网的认识
    读书笔记
    Intel:从屌丝逆袭成业界大佬
    实模式:奇葩的存在
    depot_tools Google代码管理工具包
    std::out_of_range异常
    SensorMode选择
    shell脚本学习(2)查找
    shell脚本学习(1)入门
    输入子系统
  • 原文地址:https://www.cnblogs.com/pokerface/p/6197687.html
Copyright © 2020-2023  润新知