Hi I'm evaluating Theora for a video communication system and would like some info as to what the following struct members (from the theora_info structure) do and what values one should pass to them: If there is some documentation somewhere that I've missed, please direct me to it. ===== Extract from theora.h ====int quality; int quick_p; /* quick encode/decode */ void *codec_setup; /* encode only */ int dropframes_p; int keyframe_auto_p; ogg_uint32_t keyframe_frequency; ogg_uint32_t keyframe_frequency_force; /* also used for decode init to get granpos shift correct */ ogg_uint32_t keyframe_data_target_bitrate; ogg_int32_t keyframe_auto_threshold; ogg_uint32_t keyframe_mindistance; ogg_int32_t noise_sensitivity; ogg_int32_t sharpness; ====================== #quality: I know that this can be used instead of specifying a target bitrate, but what are the legal values and what do they do? #quick_p: What is the legal values and what impact will this have on quality? #keyframe_auto_threshold: What does this do? #noise_sensitivity: How does this work and what are the legal values? #sharpness: This isn't even specified in the example encoder. What does this do? Thanks in advance! Regards, Eduard ------------------------------------------------- Eduard Kriegler Project Engineer Department of Electrical & Electronic Engineering University of Stellenbosch South Africa
>>>>> "Eduard" == Eduard Kriegler <kriegler@sun.ac.za> writes:> Hi I'm evaluating Theora for a video communication system and would > like some info as to what the following struct members (from the > theora_info structure) do and what values one should pass to them:this is what I know from looking at the sources some time ago. so don't be too sure that it's correct...> int quality;valid range: 0..63> int quick_p;should always be `1'. `0' is a little higher quality (or smaller file) but unbarably slow.> /* encode only */ int dropframes_p;whether to drop frames when target bitrate is overflown by some amount. is usually 0 (false). setting this to one might be a very good idea for low bitrate video communication.> int keyframe_auto_p;whether to automatically insert a keyframe when there is too much difference between two frames. that seems like a good idea, so set this to `1'.> ogg_uint32_t keyframe_frequency;expected target keyframe frequency (actually the inverse of the frequency: specifies how many frames will usually pass between keyframes). used for some bitrate calculations. not very sure about it...> ogg_uint32_t keyframe_frequency_force;maximum distance (in frames) between keyframes.> ogg_uint32_t keyframe_data_target_bitrate;dont know.> ogg_int32_t keyframe_auto_threshold;how much difference there must be between two frames to automatically generate a new keyframe, when keyframe_auto_p is nonzero. valid range 0..100 (?).> ogg_uint32_t keyframe_mindistance;minimum distance [frames] between keyframes. (used with keyframe_auto_p=1)> ogg_int32_t noise_sensitivity;not sure. valid values are 0..3 i think. this has some effect on how quanization is done.> ogg_int32_t sharpness;valid values are 0..2. values are inverse, setting it `0' will result in sharpest images but also with the worst ringing artefacts. setting this to two smoothes the image and allows much lower bitrates while still not causing too many noticable artefacts. david -- GnuPG public key: http://user.cs.tu-berlin.de/~dvdkhlng/dk.gpg Fingerprint: B17A DC95 D293 657B 4205 D016 7DEF 5323 C174 7D40