資源簡(jiǎn)介
Linux下用V4L2采集視頻,并用x264編碼成h264視頻

代碼片段和文件信息
#include?
#include?
#include?
#include?“h264encoder.h“
void?compress_begin(Encoder?*en?int?width?int?height)?{
en->param?=?(x264_param_t?*)?malloc(sizeof(x264_param_t));
en->picture?=?(x264_picture_t?*)?malloc(sizeof(x264_picture_t));
x264_param_default(en->param);?//set?default?param
//en->param->rc.i_rc_method?=?X264_RC_CQP;//設(shè)置為恒定碼率
//?en->param->i_log_level?=?X264_LOG_NONE;
//?en->param->i_threads??=?X264_SYNC_LOOKAHEAD_AUTO;//取空緩存區(qū)使用不死鎖保證
en->param->i_width?=?width;?//set?frame?width
en->param->i_height?=?height;?//set?frame?height
//en->param->i_frame_total?=?0;
//??en->param->i_keyint_max?=?10;
en->param->rc.i_lookahead?=?0;?//表示i幀向前緩沖區(qū)
//???en->param->i_bframe?=?5;?//兩個(gè)參考幀之間b幀的數(shù)目
//??en->param->b_open_gop?=?0;
//??en->param->i_bframe_pyramid?=?0;
//???en->param->i_bframe_adaptive?=?X264_B_ADAPT_TRELLIS;
//en->param->rc.i_bitrate?=?1024?*?10;//rate?為10?kbps
en->param->i_fps_num?=?5;?//幀率分子
en->param->i_fps_den?=?1;?//幀率分母
x264_param_apply_profile(en->param?x264_profile_names[0]);?//使用baseline
if?((en->handle?=?x264_encoder_open(en->param))?==?0)?{
return;
}
/*?Create?a?new?pic?*/
x264_picture_alloc(en->picture?X264_CSP_I422?en->param->i_width
en->param->i_height);
en->picture->img.i_csp?=?X264_CSP_I422;
en->picture->img.i_plane?=?3;
}
int?compress_frame(Encoder?*en?int?type?uint8_t?*in?uint8_t?*out)?{
x264_picture_t?pic_out;
int?nNal?=?-1;
int?result?=?0;
int?i?=?0;
uint8_t?*p_out?=?out;
char?*y?=?en->picture->img.plane[0];
char?*u?=?en->picture->img.plane[1];
char?*v?=?en->picture->img.plane[2];
int?is_y?=?1?is_u?=?1;
int?y_index?=?0?u_index?=?0?v_index?=?0;
int?yuv422_length?=?2?*?en->param->i_width?*?en->param->i_height;
//序列為YU?YV?YU?YV,一個(gè)yuv422幀的長(zhǎng)度?width?*?height?*?2?個(gè)字節(jié)
for?(i?=?0;?i? if?(is_y)?{
*(y?+?y_index)?=?*(in?+?i);
++y_index;
is_y?=?0;
}?else?{
if?(is_u)?{
*(u?+?u_index)?=?*(in?+?i);
++u_index;
is_u?=?0;
}?else?{
*(v?+?v_index)?=?*(in?+?i);
++v_index;
is_u?=?1;
}
is_y?=?1;
}
}
switch?(type)?{
case?0:
en->picture->i_type?=?X264_TYPE_P;
break;
case?1:
en->picture->i_type?=?X264_TYPE_IDR;
break;
case?2:
en->picture->i_type?=?X264_TYPE_I;
break;
default:
en->picture->i_type?=?X264_TYPE_AUTO;
break;
}
if?(x264_encoder_encode(en->handle?&(en->nal)?&nNal?en->picture
&pic_out)?0)?{
return?-1;
}
for?(i?=?0;?i? memcpy(p_out?en->nal[i].p_payload?en->nal[i].i_payload);
p_out?+=?en->nal[i].i_payload;
result?+=?en->nal[i].i_payload;
}
return?result;
}
void?compress_end(Encoder?*en)?{
if?(en->picture)?{
x264_picture_clean(en->picture);
free(en->picture);
en->picture?=?0;
}
if?(en->param)?{
free(en->param);
en->param?=?0;
}
if?(en->handle)?{
x264_encoder_close(en->handle);
}
free(en);
}
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件??????972945??2012-05-01?13:19??camera\bin\camera_h264encode
?????文件?????????245??2012-04-17?05:42??camera\include\x264_config.h
?????文件???????40894??2012-03-30?20:45??camera\include\x264.h
?????文件?????1026684??2012-04-29?07:42??camera\lib\libx264.a
?????目錄???????????0??2012-05-01?13:19??camera\bin\
?????文件????????3020??2012-05-01?13:12??camera\h264encoder.c
?????文件????????3552??2012-05-01?07:54??camera\h264encoder.c~
?????文件?????????553??2012-05-01?13:13??camera\h264encoder.h
?????文件?????????564??2012-04-30?16:58??camera\h264encoder.h~
?????文件???????15336??2012-05-01?13:19??camera\h264encoder.o
?????目錄???????????0??2012-05-01?13:19??camera\include\
?????目錄???????????0??2012-04-30?16:28??camera\lib\
?????文件????????1444??2012-05-01?13:14??camera\main.c
?????文件????????1711??2012-05-01?06:32??camera\main.c~
?????文件???????11108??2012-05-01?13:19??camera\main.o
?????文件?????????300??2012-04-30?16:59??camera\Makefile
?????文件?????????331??2012-04-30?16:58??camera\Makefile~
?????文件????????7754??2012-05-01?13:15??camera\video_capture.c
?????文件????????7754??2012-05-01?13:15??camera\video_capture.c~
?????文件?????????895??2012-05-01?13:14??camera\video_capture.h
?????文件?????????936??2012-04-29?13:11??camera\video_capture.h~
?????文件???????31944??2012-05-01?13:19??camera\video_capture.o
- 上一篇:HDCP 2.2 Spec.
- 下一篇:OpenGL入門教程高清完整
評(píng)論
共有 條評(píng)論