1

私は C++ でアプリケーションを作成していますyuv。ウェブカメラから取得した画像を に変換してx265_picture、 にエンコードできるようにしたいと考えていhevcます。http://x265.readthedocs.org/en/default/api.html#introductionのチュートリアルに従いました。yuvただし、に変換する方法については何もありませんx265_picture。これはどのように達成できますか?

x265_param *param = x265_param_alloc();

x265_param_default_preset(param, "ultrafast", "zerolatency");

x265_param_parse(param, "fps", "30");
x265_param_parse(param, "input-res", "352x288"); //wxh
x265_param_parse(param, "bframes", "0");
x265_param_parse(param, "rc-lookahead", "20");
x265_param_parse(param, "repeat-headers", "1");

x265_picture *pic_in = x265_picture_alloc();
x265_picture *pic_out = x265_picture_alloc();

x265_picture_init(param, pic_in);

x265_nal *pp_nal;
uint32_t pi_nal;
x265_encoder *encoder = x265_encoder_open(param);
x265_encoder_encode(encoder, &pp_nal, &pi_nal, pic_in, pic_out);
4

1 に答える 1

1

x265 のデフォルトの色空間タイプをi420(エイリアス yuv 4:2:0 平面) に設定することで、この印刷を確認できます。

x265_picture_init(param, pic_in);       
fprintf(stderr,"colorSpace:%s\n", x265_source_csp_names[pic_in->colorSpace]);

入力 x265_picture 構造体をi420バッファーにリンクするには、次のようなものを使用する必要があります。

pic_in->stride[0] = param->sourceWidth;
pic_in->stride[1] = pic_in->stride[0] >> x265_cli_csps[pic_in->colorSpace].width[1];
pic_in->stride[2] = pic_in->stride[0] >> x265_cli_csps[pic_in->colorSpace].width[2];
pic_in->planes[0] = i420_buffer;
pic_in->planes[1] = (char*)pic_in->planes[0] + pic_in->stride[0] * param->sourceHeight;
pic_in->planes[2] = (char*)pic_in->planes[1] + pic_in->stride[1] * (param->sourceHeight >> x265_cli_csps[pic_in->colorSpace].height[1]);    

ウェブカメラのyuvフォーマットが他のものである場合は、色空間タイプを設定するか (libx265 がサポートしている場合)、libyuvを使用してフォーマットに変換することができi420ます。

于 2015-09-21T11:43:36.383 に答える