Can the ipp 5.0 H.264 encoder/decoder be used in a realtime streaming application?
I'm sorry, I can not understand why do you asking that? We provide you IPP libraries,which is set of low-level highly-optimized functions, which implements mostly used algorithms in different application areas and we provide you samples, which demonstrates how to use these IPP functions to build different applications, like encoders, decoders, image viewers and so on. We hope it is enough for you to adopt IPP for your particular application, is not it? Or do you have some specific concern?
I'm just asking because the JVT reference software is nowhere near real-time.. I was just curious if the Intel IPP version is fast enough to be used in a real-time application, or if it is mainly meant for processing offline files. I'm working on compiling the samples. but as there are no project files for visual studio, it's a bit more challenging.
Let me just clarify.. What I am asking is if the H.264 encoder sample using the Intel IPP 5.0 Library is fast enough to be used on a modern machine in real time.. I may get the answer myself once I compile the sample, but surely someone most know how fast it is ;)
you know, performance depends on many different factors, like encoder parameters, video frame size and so on.
But surely, IPP H.264 encoder is able to work in real-time on modern computers with using average size video.
The H.264 decoder sample seems to work fine in realtime.
However the H.264 encoder sampleseems to introduce a delay over a second when encoding a CIF stream even though the CPU usage is very low. Still trying to figure out why.
i test the ipp 5.0 h264 encoder on windows xp, Pentium M 715 (1.5Ghz), encode a cif video with follow params
H264EncoderParams param;param.key_frame_controls.method = 1;param.key_frame_controls.interval = 100;param.B_Frame_Rate = 1;param.src_width = _info.width;param.src_height = _info.height;param.dst_width = _info.width;param.dst_height = _info.height;param.frame_rate_code = 5;param.key_frame_controls.method = param.rate_controls.method = H264_RCM_MPEG2; // RC method(0 - quant_codes, 1 - CBR MBwise, 2 - CBR framewise, 3 - Debug);param.rate_controls.bitrate = 100000;//_info.bitrate;param.key_frame_controls.rate_controls.bitrate = param.B_frame_rate_controls.bitrate = param.rate_controls.bitrate;param.rate_controls.quant = 26;param.B_frame_rate_controls.quant = param.rate_controls.quant;param.key_frame_controls.rate_controls.quant = 10;
param.key_frame_controls.interval = param.key_frame_controls.idr_interval = _info.fps * 10;//N (# of frames in between I frames), //IDR interval. Last two parameters must be equal. param.B_frame_rate_controls.method = param.rate_controls.method;
param.B_Frame_Rate = 0; //Number of B frames between I (or P) and next Pparam.treat_B_as_reference = 0;// treat B as a reference (only 0 is supported!) param.num_ref_frames = 2;// num_ref_frames (2-16), param.num_ref_to_start_code_B_slice = 1; //minimum length of list1 for backward prediction (only 1 is supported!). param.level_idc = 40;// level_idc (check that num_ref_frames and frame size are in accordance with the level)
param.me_split_8x8s = 0; // subblock splitparam.me_search_x = param.me_search_y = 4; // search x,search_yparam.use_weighted_pred = param.use_weighted_bipred = param.use_implicit_weighted_bipred = 0; // weighted prediction, weighted biprediction implicit weighted biprediction (not supported!)
param.use_spatial_direct_pred = 0; // direct type (0 - temporal 1 - spatial)param.use_direct_inference = 0; // direct_inference_flagparam.entropy_coding_mode = 1;
param.Deblocking_Filter_Mode = 1; // deblocking mode (0 - "on", 1 - "off")param.Deblocking_Filter_Alpha = 0; // deblocking_filter_alpha [-6,6]param.Deblocking_Filter_Beta = 0; // deblocking_filter_beta [-6,6]
param.entropy_coding_mode = 1; // entropy coding mode (0-cavlc,1-cabac)param.cabac_init_idc = 0; // cabac_init_idc (0,1,2)param.coding_type = 0; // picture coding type (0 - only FRM, 1 - only FLD , 2 - only AFRM, 3 - pure PicAFF(no MBAFF) 4 PicAFF + MBAFF). Only 0 (FRM) is supported!
param.numThreads = 1;param.FrameRate = _info.fps;((H264VideoEncoder*)enc)->Init(¶m);
but I only got about 10-12fps with full cpu load, but the x264 can got about 30 fps with same environment/param, so anyone know why? thanks