diff options
author | Andreas Huber <andih@google.com> | 2010-05-25 11:35:35 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-05-25 11:35:35 -0700 |
commit | 90d3ed91ae9228e1c8bab561b6138d4cb8c1e4fd (patch) | |
tree | a7532190d725cca337359d51cb23ad2dbf89abf4 /examples/postproc.txt | |
parent | f513bf59d19d8a686f14e9b234204b1bd9044f57 (diff) | |
download | android_external_libvpx-90d3ed91ae9228e1c8bab561b6138d4cb8c1e4fd.tar.gz android_external_libvpx-90d3ed91ae9228e1c8bab561b6138d4cb8c1e4fd.tar.bz2 android_external_libvpx-90d3ed91ae9228e1c8bab561b6138d4cb8c1e4fd.zip |
Initial checkin of libvpx based on libvpx-0.9.0, androidified
Change-Id: If8a6d31334580954fa899e57377d45ed64e984e3
related-to-bug: 2483739
Diffstat (limited to 'examples/postproc.txt')
-rw-r--r-- | examples/postproc.txt | 67 |
1 files changed, 67 insertions, 0 deletions
diff --git a/examples/postproc.txt b/examples/postproc.txt new file mode 100644 index 0000000..c65ddda --- /dev/null +++ b/examples/postproc.txt @@ -0,0 +1,67 @@ +@TEMPLATE decoder_tmpl.c +Postprocessing Decoder +====================== +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION +This example adds postprocessing to the simple decoder loop. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ INTRODUCTION + + +Initializing Postprocessing +--------------------------- +You must inform the codec that you might request postprocessing at +initialization time. This is done by passing the VPX_CODEC_USE_POSTPROC +flag to `vpx_codec_dec_init`. If the codec does not support +postprocessing, this call will return VPX_CODEC_INCAPABLE. For +demonstration purposes, we also fall back to default initialization if +the codec does not provide support. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT +/* Initialize codec */ +res = vpx_codec_dec_init(&codec, interface, NULL, + VPX_CODEC_USE_POSTPROC); +if(res == VPX_CODEC_INCAPABLE) { + printf("NOTICE: Postproc not supported by %s\n", + vpx_codec_iface_name(interface)); + res = vpx_codec_dec_init(&codec, interface, NULL, 0); +} +if(res) + die_codec(&codec, "Failed to initialize decoder"); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DEC_INIT + + +Using Adaptive Postprocessing +----------------------------- +VP6 provides "adaptive postprocessing." It will automatically select the +best postprocessing filter on a frame by frame basis based on the amount +of time remaining before the user's specified deadline expires. The +special value 0 indicates that the codec should take as long as +necessary to provide the best quality frame. This example gives the +codec 15ms (15000us) to return a frame. Remember that this is a soft +deadline, and the codec may exceed it doing its regular processing. In +these cases, no additional postprocessing will be done. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DECODE +/* Decode the frame with 15ms deadline */ +if(vpx_codec_decode(&codec, frame, frame_sz, NULL, 15000)) + die_codec(&codec, "Failed to decode frame"); +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ DECODE + + +Codec Specific Postprocessing Controls +-------------------------------------- +Some codecs provide fine grained controls over their built-in +postprocessors. VP8 is one example. The following sample code toggles +postprocessing on and off every 15 frames. +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PRE_DECODE +#if CONFIG_VP8_DECODER +if(frame_cnt%30 == 1) { + vp8_postproc_cfg_t pp = {0, 0, 0}; + + if(vpx_codec_control(&codec, VP8_SET_POSTPROC, &pp)) + die_codec(&codec, "Failed to turn off postproc"); +} else if(frame_cnt%30 == 16) { + vp8_postproc_cfg_t pp = {VP8_DEBLOCK | VP8_DEMACROBLOCK, 4, 0}; + + if(vpx_codec_control(&codec, VP8_SET_POSTPROC, &pp)) + die_codec(&codec, "Failed to turn on postproc"); +}; +#endif +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ PRE_DECODE |