首页 > 编程知识 正文

关于数字编码的例子,h265硬件解码

时间:2023-05-05 01:44:40 阅读:62664 作者:835

/wwdz *最简单的lkdwn的X264视频代码qxdxy Simplest X264 Encoder * *雷霄骅lei Xiaohua * lei Xiaohua 1020 @ 126.com *中国传媒大学/数字电视技术* digitaltvtechnology * http://blog.csdn.net/lei Xiaohua 1020 * *本程序可以将YUV格式的像素数据编码到H.264码流中,是最简单的lib xxiaohua thissoftwareencodeyuvdatatoh.264 bitstream.* it ' sthesimplestencoderexamplebasedonlibx 264.* /。include stdio.h # inclure if defined (_ cplusplus (extern ' c ' { # include ' x264 } # else # include ' x264.h ' # endif int main (int argc,char wdz ) int y_size; int i,j; //file * FP _ src=fopen (./test 420.YUV ',' rb '; file * FP _ src=fopen (' ./cuc _ ie school _ 640 x360 _ YUV 420 p.YUV ',' rb ' ); file * FP _ dst=fopen (' cuc _ ie school.h264 ',' wb ' ); //encode 50帧//if set 0,encode all frameint frame_num=10; int csp=X264_zzdlc_I420; //int width=640,height=360; int width=960,height=1280; int iNal=0; x264_nal_t* pNals=NULL; x264_t* pHandle=NULL; x264 _ picture _ t * ppic _ in=(x264 _ picture _ t * ) malloc(sizeof(x264_picture_t ) ); x264 _ picture _ t * ppic _ out=(x264 _ picture _ t * ) malloc(sizeof(x264_picture_t ) ); x264_param_t * p param=(x264 _ param _ t * ) malloc(sizeof ) x264 _ param _ t ); //check if (FP _ src==null|| FP _ dst==null ) ) printf ) ' erroropenfiles.n ' ); 返回- 1; }x264_param_default(Pparam ); pParam-i_width=width; pParam-i_height=height; //parampparam-I _ log _ level=x264 _ log _ debug; param-I _ threads=x264 _ sync _ look ahead _ auto; pParam-i_frame_total=0; pParam-i_keyint_max=10; p param-I _ b帧=5; pParam-b_open_gop=0; pParam-i_bframe_pyramid=0; pParam-rc.i_qp_constant=0; pParam-rc.i_qp_max=0; pParam-rc.i_qp_min=0; p param-I _ b frame _ adaptive=x264 _ b _ adapt _ trellis; pParam-i_fps_den=1; pParam-i_fps_num=25; p param-I _ time base _ den=p param-I _ fps _ num; p param-I _ time base _ num=p param-I _ fps _ den; pParam-i_csp=csp; x264 _ param _ apply _ profile (p param,x264_profile_names[5] ); p handle=x264 _ encoder _ open (p param ); x264_picture_init(ppic_out; x264_picture_alloc(ppic_in,csp,pParam-i_width,pParam-i_height ); //ret=x264 _ encoder _ headers (p handle,pNals,iNal ); y _ size=p param-I _ width * p param-I _ height; //detectframenumberif (frame _ num==0) fseek ) FP_src,0,SEEK_END ); switch(CSP ) case x264 _ ZZ DLC _ I 4443360 frame _ num=ftell (FP _ src )/(y_size*3); 布雷克; case x264 _ ZZ DLC _ I 4203360 frame _ num=ftell (FP _ src )/(y_size*3/2); 布雷克; d故障:打印(colorspacenotsupport. n ); 返回- 1; }fseek(FP_src,0,SEEK_SET ); //looptoencodefor(I=0; iframe_num; I ) switch(CSP ) casex264_zzDLC_I444: ) fread(ppic_in-img.plane[0],y_size,1,fp_src ); //YFread(ppic_in-img.plane[1],y_size,1,fp_src ); //UFread(ppic_in-img.plane[2],y_size,1,fp_src ); //Vbreak; } case x264 _ ZZ DLC _ I 420: { fread _ in-img.plane [0],y_size,1,fp_src; //YFread(ppic_in-img.plane[1],y _ size/4,1,fp_src ); //UFread(ppic_in-img.plane[2],y _ size/4,1,fp_src ); //Vbreak; } default : { printf (colorspacenotsupport. n ); 返回- 1; }}pPic_in-i_pts=i; ret=x264 _ encoder _ encode (p handle,pNals,iNal,pPic_in,pPic_out ); if(ret0) printf(error.n ); 返回- 1; } printf (安全代码帧: (n ),I ); for(j=0; j iNal; j ) ) fwrite(pnals[j].p_payload,1,pNals[j].i_payload,fp_dst ); }}i=0; //flushencoderwhile(1) ret=x264_encoder_encode ) phandle,pNals,iNal,NULL,pPic_out; if(ret==0) {break; } printf (flush 1帧.n ); for(j=0; j iNal; j ) ) fwrite(pnals[j].p_payload,1,pNals[j].i_payload,fp_dst ); (I; }x264_picture_clean(ppic_in ); x264_encoder_close(Phandle ); pHandle=NULL; free(ppic_in ); free(ppic_out ); 自由(p param ); fclose(FP_src; fclose(FP_dst; 返回0; }

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。