⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yuv2rgb565.c

📁 一个用armasm汇编写的YUV2RGB565源码,适合做视频的朋友参考,应用于WinCE Windows Mobile 5平台.
💻 C
字号:
#include <stdio.h>
#include <stdlib.h>
#include "yuv2rgb565.h"

//struct dummy
//{
//    int  yuv[3];
//    int  stride[3];
//};
//
//typedef struct AVPicture
//{
//    unsigned char  *data[4];
//    int             linesize[4];       ///< number of bytes per line
//} AVPicture;
//
//  void convert_yuv420_rgb565(struct dummy *picture, unsigned char *results, unsigned char *_py,unsigned char *_pu,unsigned char *_pv);
//int main( int argc, char *argv[] )
//{
//    int             fileback;
//    int             frameWidth=176;
//    int             frameHeight=144;
//    int             rgbstride= (640+128)*2;
//    int             destwidth=640;
//    int             destheight=240;
//    int             frameSize;
//    struct timeval  tm_start,tm_end;
//    int             elapsedTime;
//    unsigned char  *bufferYUV;
//    unsigned short *bufferRGB;
//    FILE           *filedata;
//    struct dummy    picture;
////  AVPicture       picture;
//
//    if ( argc < 2 )
//    {
//        fprintf(stderr, "160 120 \n");
//        return 1;
//    }
//
//    frameWidth = atoi( argv[1] );
//    frameHeight = atoi( argv[2] );
//
//    frameSize = frameWidth * frameHeight * 3 / 2;
//
//    bufferYUV = (unsigned char *)malloc( frameSize );
//    bufferRGB = (unsigned short *)malloc( 768*240 *2 );
//
//    filedata = fopen("input06_YUV420_176_144.raw", "rb" ); /*file name *****/
//
//    if ( !filedata )
//    {
//        fprintf( stderr, "couldn't open the source file \n" );
//        return 1;
//    }
//    fileback = fread( bufferYUV, 1, frameSize, filedata );
//    if ( fileback != frameSize )
//    {
//        printf( "error: the resolution doesn't agree with file size\n" );
//        return 1;
//    }
//    fclose( filedata );
//
//    filedata = fopen( "output.raw", "wb" ); /****rgb file name **************/
//    if ( !filedata )
//    {
//        fprintf( stderr, "couldn't open the source file \n" );
//        return 1;
//    }
//
//#if 1
//    // picture.yuv[0] = bufferYUV;
//    //picture.yuv[1] = bufferYUV + frameWidth * frameHeight;
//   // picture.yuv[2] = bufferYUV + frameWidth * frameHeight * 5 / 4;
//       picture.yuv[0] =   destwidth;
//       picture.yuv[1] =   destheight;
//       picture.yuv[2] =  0;
//   
////  picture.stride[0] = frameWidth * frameHeight;
////  picture.stride[1] = picture.stride[2] = frameWidth * frameHeight / 4;
//    //picture.stride[0] = frameWidth;
//    //picture.stride[1] = picture.stride[2] = frameWidth / 2;
//      picture.stride[0] = frameWidth;
//      picture.stride[1] = frameHeight;
//      picture.stride[2] = rgbstride;  
//#else
//    picture.data[0] = bufferYUV;
//    picture.data[1] = bufferYUV + frameWidth * frameHeight;
//    picture.data[2] = bufferYUV + frameWidth * frameHeight * 5 / 4;
//    picture.data[3] = NULL;
//
//    picture.linesize[0] = frameWidth;
//    picture.linesize[1] = picture.linesize[2] = frameWidth / 2;
//    picture.linesize[3] = 0;
//#endif
//
//     unsigned char *_py ;
//    _py = bufferYUV;
//    unsigned char *_pu;
//    _pu = bufferYUV + frameWidth * frameHeight;
//    unsigned char *_pv;
//   _pv = bufferYUV  +frameWidth * frameHeight*5/4;
//
//
//
//    gettimeofday( &tm_start, NULL );
//    convert_yuv420_rgb565( &picture, (unsigned char *)bufferRGB, _py,_pu,_pv);
//    gettimeofday( &tm_end, NULL );
//    elapsedTime = (int)( tm_end.tv_sec - tm_start.tv_sec ) * 1000000L + (int)( tm_end.tv_usec - tm_start.tv_usec );
//    printf( "total time elapsed: %d (us)\n", elapsedTime );
//
//    fwrite( bufferRGB, 1, 768*240*2, filedata );
//    fclose( filedata );
//
//    //house keeping
//    free( bufferYUV );
//    free( bufferRGB );
//
//    return 0;
//} /* main */

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -