Hi All,<br clear="all">Theora codec current version encode streams according to given encoding parameter values at the begining. But now i am tring to encode the stream with different encodeing parameter values dynamically. Bandwidth measurement component added to the encoder measure the available bandwidth and planing to encode dynamically according to this value.<br>
<br>Initially set parameters sucessfully in the function theora_encode_init(In encoder_toplevel.c). Now i am tring to change encoding parameters dynamically for each key frame. I created a new function nbs_UpdateFrame identiticle to UpdateFrame and set quality parameters in that function. Because of that, it passes CP_INSTANCE with new values to&nbsp; WriteFrameHeader,&nbsp; EncodeData (In encode.c, I think these are the functions that actually encode the stream). Then&nbsp; the new function nbs_UpdateFrame called in CompressKeyFrame function instead of&nbsp; UpdateFrame function.<br>
<br>static void CompressKeyFrame(CP_INSTANCE *cpi){<br>&nbsp; ogg_uint32_t&nbsp; i;&nbsp;&nbsp;&nbsp; <br><br>&nbsp; /* Before we compress reset the carry over to the actual frame carry over */<br>&nbsp; cpi-&gt;CarryOver = cpi-&gt;Configuration.TargetBandwidth * cpi-&gt;CurrentFrame&nbsp; /<br>
&nbsp;&nbsp;&nbsp; cpi-&gt;Configuration.OutputFrameRate - cpi-&gt;TotalByteCount;<br><br>&nbsp; /* Keep track of the total number of Key Frames Coded */<br>&nbsp; cpi-&gt;KeyFrameCount += 1;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; <br><br>&nbsp; /* A key frame is not a dropped frame there for reset the count of<br>
&nbsp;&nbsp;&nbsp;&nbsp; consequative dropped frames. */<br>&nbsp; cpi-&gt;DropCount = 0;<br><br>&nbsp; SetupKeyFrame(cpi);<br><br>&nbsp; /* set a target size for this frame */<br>&nbsp; cpi-&gt;ThisFrameTargetBytes = (ogg_int32_t) cpi-&gt;frame_target_rate +<br>
&nbsp;&nbsp;&nbsp; ( (cpi-&gt;Configuration.KeyFrameDataTarget - cpi-&gt;frame_target_rate) *<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpi-&gt;LastKeyFrame / cpi-&gt;pb.info.keyframe_frequency_force );<br><br>&nbsp; if ( cpi-&gt;ThisFrameTargetBytes &gt; cpi-&gt;Configuration.KeyFrameDataTarget )<br>
&nbsp;&nbsp;&nbsp; cpi-&gt;ThisFrameTargetBytes = cpi-&gt;Configuration.KeyFrameDataTarget;<br><br>&nbsp; /* Get a DCT quantizer level for the key frame. */<br>&nbsp; cpi-&gt;MotionScore = cpi-&gt;pb.UnitFragments;<br><br>&nbsp; RegulateQ(cpi, cpi-&gt;pb.UnitFragments);<br>
<br>&nbsp; cpi-&gt;pb.LastFrameQualityValue = cpi-&gt;pb.ThisFrameQualityValue;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp; /* Initialise DCT tables. */<br>&nbsp; UpdateQC(cpi, cpi-&gt;pb.ThisFrameQualityValue);<br><br>&nbsp; /* Initialise the cpi-&gt;pb.display_fragments and other fragment<br>
&nbsp;&nbsp;&nbsp;&nbsp; structures for the first frame. */<br>&nbsp; for ( i = 0; i &lt; cpi-&gt;pb.UnitFragments; i ++ )<br>&nbsp;&nbsp;&nbsp; cpi-&gt;FragmentLastQ[i] = cpi-&gt;pb.ThisFrameQualityValue;<br>&nbsp;&nbsp;&nbsp; <br>&nbsp; /* Compress and output the frist frame. */<br>
&nbsp; PickIntra( cpi,<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; cpi-&gt;pb.YSBRows, cpi-&gt;pb.YSBCols);<br>&nbsp; //UpdateFrame(cpi);<br>&nbsp; nbs_UpdateFrame(cpi);<br>}<br><br><br>But, It was not done sucessfully. Please help me to solve the problem.<br>-- <br>
Nuwan Millawitiya