嵌入式 获取I帧并存储且转换为jpg图片

2019-07-13 06:04发布

获取I帧并存储且转换为jpg图片 kj.sh root@u12d32:/opt/qy_test/avserver# cat kj.sh #!/usr/local/env sh gcc -o i_frame_to_jpg i_frame_to_jpg.c ./i_frame_to_jpg $1 ls
i_frame_to_jpg.c
#include #include #include int main(int argc, char *argv[]) { int i = 0; char cmd[128] = {0}; if(argc != 2) { printf("%s %d The param must be two ,please ! ",__FUNCTION__,__LINE__); return -1; } for(i = 0; i <= atoi(argv[1]);i++) { memset(cmd,0,128); sprintf(cmd,"ffmpeg -i joseph_%dth_i_frame -y -ss 00:00:00 -vframes 1 joseph_%dth_jclient.jpg >/dev/null",i,i); printf("%s %d The sys has tranform %dth i_frame to %dth jclient jpg ! ",__FUNCTION__,__LINE__,i,i); system(cmd); } return 0; }
 
get_i_frame_save_to_file   save_to_file_function void ipnc_i_frame_save(char *i_buf_addr, int i_buf_size,int transfer_time_in) { FILE *fp_video; char i_frame_name[32] = {0}; memset(i_frame_name,0,32); sprintf(i_frame_name,"joseph_%dth_i_frame",transfer_time_in); printf("%s %d %s ",__FUNCTION__,__LINE__,i_frame_name); fp_video = fopen(i_frame_name, "wb"); #if 1 fwrite(i_buf_addr,i_buf_size,1,fp_video); fflush(fp_video); fclose(fp_video); #endif } get_i_frame_from_enc int sub_stream_i_frame_size = 0; int sub_stream_i_frame_times = 0; int sub_stream_i_frame_buf_size = 0; int sub_stream_i_frame_position = 0; char *sub_stream_i_frame_buf = NULL; if((i == 1) && (stStream.u32PackCount == 4)) { sub_stream_i_frame_times++; sub_stream_i_frame_position = 0; sub_stream_i_frame_buf_size = 0; for (iv_temp = 0; iv_temp < stStream.u32PackCount; iv_temp++) sub_stream_i_frame_buf_size+=stStream.pstPack[iv_temp].u32Len[0]; sub_stream_i_frame_buf = (char *)malloc(sub_stream_i_frame_buf_size); memset(sub_stream_i_frame_buf,0,sub_stream_i_frame_buf_size); for (iv_temp = 0; iv_temp< stStream.u32PackCount; iv_temp++) { memcpy(sub_stream_i_frame_buf+sub_stream_i_frame_position,stStream.pstPack[iv_temp].pu8Addr[0],stStream.pstPack[iv_temp].u32Len[0]); sub_stream_i_frame_position += stStream.pstPack[iv_temp].u32Len[0]; } ipnc_i_frame_save(sub_stream_i_frame_buf, sub_stream_i_frame_buf_size, sub_stream_i_frame_times); }