c++ - vp9 encoder returns a null packet -
i using code encode video stream using vp8 , decided give vp9 try changed every thing starts vp_* 8 9.
but vp9 encoder return null packet although encoder doesn't return error.
here code i'am using configuring.
vpx_codec_err_t error = vpx_codec_enc_config_default(vpx_codec_vp9_cx(), &enc_cfg, 0); if(error != vpx_codec_ok) return error; enc_cfg.g_timebase.den = fps; enc_cfg.rc_undershoot_pct = 95; enc_cfg.rc_target_bitrate = bitrate; enc_cfg.g_error_resilient = 1; enc_cfg.kf_max_dist = 999999; enc_cfg.rc_buf_initial_sz = 4000; enc_cfg.rc_buf_sz = 6000; enc_cfg.rc_buf_optimal_sz = 5000; enc_cfg.rc_end_usage = vpx_cbr; enc_cfg.g_h = height; enc_cfg.g_w = width; enc_cfg.rc_min_quantizer = 4; enc_cfg.rc_max_quantizer = 56; enc_cfg.g_threads = 4; enc_cfg.g_pass = vpx_rc_one_pass; error = vpx_codec_enc_init(&codec, vpx_codec_vp9_cx(), &enc_cfg, 0); if(error != vpx_codec_ok) return error; vpx_img_alloc(&vpx_image,vpx_img_fmt_i420 , width, height, 1); configured = true; return vpx_codec_ok;
and code encoding
libyuv::rawtoi420(frame, vpx_image.d_w * 3, vpx_image.planes[vpx_plane_y],vpx_image.stride[vpx_plane_y], vpx_image.planes[vpx_plane_u], vpx_image.stride[vpx_plane_u], vpx_image.planes[vpx_plane_v], vpx_image.stride[vpx_plane_v], vpx_image.d_w, vpx_image.d_h); const vpx_codec_cx_pkt_t *pkt; vpx_codec_err_t error = vpx_codec_encode(&codec, &vpx_image, 0, 1, 0, vpx_dl_good_quality); if(error != vpx_codec_ok) return vector<byte>(); vpx_codec_iter_t iter = null; if((pkt = vpx_codec_get_cx_data(&codec, &iter)))//always return null ? { if(pkt->kind == vpx_codec_cx_frame_pkt) { int length = pkt->data.frame.sz; byte* buf = (byte*) pkt->data.frame.buf; vector<byte> data(buf, buf + length); return data; } return vector<byte>(); } return vector<byte>();
the code working if i'am using vp8 instead of 9, welcomed
just came across post because faced same problem. other know: solved setting
enc_cfg.g_lag_in_frames = 0;
this disallows encoder consume default 25 frames until produces output.
Comments
Post a Comment