Community
cancel
Showing results for 
Search instead for 
Did you mean: 
kkmanoj
Beginner
121 Views

Dynamic bitrate/flow control support for h.263

Hello,

I am using the H.263(1996) encoder/decoder for our video conferencing application.

Currently we have a requirement of dynamic bitrate/flow control support in h.263 encoder.

The scenario is :

H.263 encoder is initialized and pumping the encoded data at 512kbps with encoder settings as 176 X 144 , 512kbps, 15 fps.

Now the remote clientsendsFCC (FlowControlCommandof h.245) toencode H.263 data at lower bitrate 128kbps.


Is there any way in intel's IPP to reconfigure bitrate for H.263 encoder.

TIA

Manoj

0 Kudos
3 Replies
Intel_C_Intel
Employee
121 Views

Hello Manoj,

In the current implementation the rate control initialization is done within theencoder Init() function, which means that to change the bitrate one should close and re-initialize the encoder:

enc->Close();
params->info.bitrate = new_bitrate;
enc->Init(params);

Thanks,
Timofei

kkmanoj
Beginner
121 Views

Thanks Timofei,

In our video conferencing solution the remote party is sending FCC (FlowControlCommand ref. ITU-T h.245) multiple times during the call, requesting to encode H.263 data at different bit-rates based upon available (network) bandwidth.


We needto avoid multipleClose and Initas it is not feasableafter eastablishment of the call (or during theconversation).
Please suggest something else as we already tried this but not gain.


TIA

Manoj

121 Views

manoj,

I took some snippet of code from the Init function to reinitialize the bit rate when the frame rate dynamically changes. maybe Timofei can correct me if somethings wrong.

the below function is part of the ippVideoEncoderMPEG4 class. You can create a similar thing for H263 and call the function. Do you get FCC only to change the bitrate or to change the frame rate too.

Not sure whether it is totally necessary to Close and init the encoder . Maybe Timofei can answer that.

Ram

void ippVideoEncoderMPEG4::SetRateControlParam(Ipp32u FrameRate)
{
if (mRateControl) {
//mBitsDesiredFrame = (Ipp32s)((Ipp64s)mBitRate * par->TimeIncrement / par->TimeResolution);
mBitsDesiredFrame = (Ipp32s)((Ipp64s)mBitRate / FrameRate);
//mBitsDesiredTotal = 0;
mQuantIVOP = mQuantPVOP = (mSourceWidth * mSourceHeight / mBitsDesiredFrame >> 1) + 1;
mp4_Clip(mQuantIVOP, VOL.short_video_header ? 3 : 2, 31);
mp4_Clip(mQuantPVOP, VOL.short_video_header ? 3 : 2, 31);
mQuantBVOP = (mQuantPVOP * 5 >> 2) + 1;
mp4_Clip(mQuantBVOP, 2, 31);
mRCqh = -1; mRCqs = 0; mRCbf = 0;
if (mRateControl == 2)
mMEflags &= ~ME_4MV;
mRCfa = mBitsDesiredFrame;
mRCfap = 10; //par->TimeResolution / par->TimeIncrement;
mRCqap = 100;
mRCbap = 100;
mRCq = mQuantIVOP;
mRCqa = 1. / (Ipp64f)mRCq;

}

}

Reply