有人用过x264吗,小弟我改的x264编码后的视频全是马赛克,大侠们帮小弟我看看

有人用过x264吗,我改的x264编码后的视频全是马赛克,大侠们帮我看看啊
[code=C/C++][/code]
void CEncode264::Encode(BYTE* pInData, int nLen/*, BYTE* pOutBuf, int *nOutLen, int *nKeyFrame*/) 
{  

if((nLen != myParam.i_width * myParam.i_height * 3) ||(pInData==NULL) ) 
return; 
BYTE* pOutBuf=NULL;
int nOutLen=0;
myParam.i_frame_total ++;  
memcpy(m_Pic.img.plane[0], pInData, myParam.i_width * myParam.i_height);  
memcpy(m_Pic.img.plane[1], pInData + myParam.i_width * myParam.i_height, myParam.i_width * myParam.i_height / 4);  
memcpy(m_Pic.img.plane[2], pInData + myParam.i_width * myParam.i_height * 5 / 4, myParam.i_width * myParam.i_height / 4);  
m_Pic.i_pts = (int64_t)myParam.i_frame_total * myParam.i_fps_den;  
static x264_picture_t pic_out;  
x264_nal_t *nal = NULL;  
int i_nal, i;  
if( &m_Pic )  
{  
m_Pic.i_type = X264_TYPE_AUTO;  
m_Pic.i_qpplus1 = 0; } //TraceTime("x264_encoder_encode begin");  
if( x264_encoder_encode( h, &nal, &i_nal, &m_Pic, &pic_out ) < 0 )  
{  
return;  
}  
//TraceTime("x264_encoder_encode end");  
int nOutCanUse = nOutLen; nOutLen = 0;  
for( i = 0; i < i_nal; i++ )  
{ int i_size = 0;  
if( nOutCanUse < nal[i].i_payload * 3/2 + 4 ) //确认足够大的缓冲区
  {
  nOutCanUse = nal[i].i_payload * 2 + 4; //2倍VLC长度+4
  x264_free( pOutBuf ); //释放前面申请的MUX_BUFFER
  pOutBuf = (uint8_t *)x264_malloc( nOutCanUse ); //申请当前大小的缓冲区
  }

  i_size = nOutCanUse;

if( ( i_size = x264_nal_encode( pOutBuf , &nOutCanUse, 1, &nal[i] ) ) > 0 ) // + *nOutLen
{  
/* *nOutLen += i_size;  
nOutCanUse -= i_size; */ 
fwrite(pOutBuf,i_size,1, fout );
 
}  
}  
// pic_out.i_type==X264_TYPE_IDR;
}

------解决方案--------------------
这个是编码线程函数了。。看看你的初始化参数吧,可能是码率太低了
------解决方案--------------------
看看你初始化那段代码
------解决方案--------------------
C/C++ code

void x264_param_set(x264_param_t *p_x264_param, int i_width, int i_height, int i_fps, int i_keyint_min, int i_keyint_max)
{
    x264_param_default(p_x264_param);

    p_x264_param->i_threads                        = 0;
    p_x264_param->b_deterministic                = 1;

    /* Video properties */
    p_x264_param->i_csp                            = X264_CSP_I420;
    p_x264_param->i_width                        = i_width;
    p_x264_param->i_height                        = i_height;
    p_x264_param->vui.i_sar_width                = 0;
    p_x264_param->vui.i_sar_height                = 0;
    p_x264_param->vui.i_overscan                = 0;  /* undef */
    p_x264_param->vui.i_vidformat                = 5;  /* undef */
    p_x264_param->vui.b_fullrange                = 0;  /* off */
    p_x264_param->vui.i_colorprim                = 2;  /* undef */
    p_x264_param->vui.i_transfer                = 2;  /* undef */
    p_x264_param->vui.i_colmatrix                = 2;  /* undef */
    p_x264_param->vui.i_chroma_loc                = 0;  /* left center */
    p_x264_param->i_fps_num                        = i_fps;
    p_x264_param->i_fps_den                        = 1;
    p_x264_param->i_level_idc                    = -1;

    /* Encoder parameters */
    p_x264_param->i_frame_reference                = 1;
    p_x264_param->i_keyint_max                    = i_keyint_max;
    p_x264_param->i_keyint_min                    = i_keyint_min;
    p_x264_param->i_bframe                        = 0;
    p_x264_param->i_scenecut_threshold            = 40;
    p_x264_param->i_bframe_adaptive                = X264_B_ADAPT_FAST;
    p_x264_param->i_bframe_bias                    = 0;
    p_x264_param->b_bframe_pyramid                = 0;

    p_x264_param->b_deblocking_filter            = 1;
    p_x264_param->i_deblocking_filter_alphac0    = 0;
    p_x264_param->i_deblocking_filter_beta        = 0;

    p_x264_param->b_cabac                        = 0;
    p_x264_param->i_cabac_init_idc                = 0;

    p_x264_param->rc.i_rc_method                = X264_RC_CQP;
    p_x264_param->rc.i_bitrate                    = 2000;
    p_x264_param->rc.f_rate_tolerance            = 1.0;
    p_x264_param->rc.i_vbv_max_bitrate            = 0;
    p_x264_param->rc.i_vbv_buffer_size            = 0;
    p_x264_param->rc.f_vbv_buffer_init            = 0.9;
    p_x264_param->rc.i_qp_constant                = 28;
    p_x264_param->rc.f_rf_constant                = 0;
    p_x264_param->rc.i_qp_min                    = 10;
    p_x264_param->rc.i_qp_max                    = 51;
    p_x264_param->rc.i_qp_step                    = 4;
    p_x264_param->rc.f_ip_factor                = 1.4;
    p_x264_param->rc.f_pb_factor                = 1.3;
    p_x264_param->rc.i_aq_mode                    = X264_AQ_NONE;
    p_x264_param->rc.f_aq_strength                = 1.0;

    p_x264_param->rc.b_stat_write                 = 0;
    p_x264_param->rc.b_stat_read                = 0;
    p_x264_param->rc.f_qcompress                = 0.6;
    p_x264_param->rc.f_qblur                    = 0.5;
    p_x264_param->rc.f_complexity_blur            = 20;
    p_x264_param->rc.i_zones                    = 0;
    p_x264_param->i_log_level                    = X264_LOG_INFO;

    p_x264_param->analyse.intra                    = X264_ANALYSE_I4x4|X264_ANALYSE_I8x8;
    p_x264_param->analyse.inter                    = X264_ANALYSE_I4x4|X264_ANALYSE_I8x8|X264_ANALYSE_PSUB16x16;
    p_x264_param->analyse.i_direct_mv_pred        = X264_DIRECT_PRED_SPATIAL;
    p_x264_param->analyse.i_me_method            = X264_ME_DIA;
    p_x264_param->analyse.f_psy_rd                = 1.0;
    p_x264_param->analyse.f_psy_trellis            = 0;
    p_x264_param->analyse.i_me_range            = 16;
    p_x264_param->analyse.i_subpel_refine        = 3;
    p_x264_param->analyse.b_chroma_me            = 0;
    p_x264_param->analyse.i_mv_range_thread        = -1;
    p_x264_param->analyse.i_mv_range            = -1;
    p_x264_param->analyse.i_chroma_qp_offset    = 0;
    p_x264_param->analyse.b_fast_pskip            = 1;
    p_x264_param->analyse.b_dct_decimate        = 1;
    p_x264_param->analyse.i_luma_deadzone[0]    = 21;
    p_x264_param->analyse.i_luma_deadzone[1]    = 11;
    p_x264_param->analyse.b_psnr                = 0;
    p_x264_param->analyse.b_ssim                = 0;

    p_x264_param->i_cqm_preset                    = X264_CQM_FLAT;
    FillMemory(p_x264_param->cqm_4iy, 16, 16);
    FillMemory(p_x264_param->cqm_4ic, 16, 16);
    FillMemory(p_x264_param->cqm_4py, 16, 16);
    FillMemory(p_x264_param->cqm_4pc, 16, 16);

    p_x264_param->b_repeat_headers                = 1;
    p_x264_param->b_aud                            = 0;
}

//////////////////////////////////////////////////////////////////////////

int x264_encode(x264_t *i_x264, x264_nal_t **i_x264_nal, int *i_nal_count, uint8_t *i_yv12, int i_width, int i_height, int64_t i_pts)
{
    x264_picture_t pic_input    = { 0 };
    x264_picture_t pic_output    = { 0 };

    pic_input.i_type            = X264_TYPE_AUTO;
    pic_input.i_pts                = i_pts;

    pic_input.img.i_csp            = X264_CSP_I420;
    pic_input.img.i_plane        = 3;
    pic_input.img.i_stride[0]    = i_width;
    pic_input.img.i_stride[1]    = pic_input.img.i_stride[0] >> 1;
    pic_input.img.i_stride[2]    = pic_input.img.i_stride[1];

    pic_input.img.plane[0]        = i_yv12;
    pic_input.img.plane[1]        = i_yv12 + i_width * i_height + (i_width * i_height >> 2);
    pic_input.img.plane[2]        = i_yv12 + i_width * i_height;

    return x264_encoder_encode(i_x264, i_x264_nal, i_nal_count, &pic_input, &pic_output);
}