summaryrefslogtreecommitdiffstats
path: root/examples/postproc.txt
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-05-25 11:35:35 -0700
committerAndreas Huber <andih@google.com>2010-05-25 11:35:35 -0700
commit90d3ed91ae9228e1c8bab561b6138d4cb8c1e4fd (patch)
treea7532190d725cca337359d51cb23ad2dbf89abf4 /examples/postproc.txt
parentf513bf59d19d8a686f14e9b234204b1bd9044f57 (diff)
downloadandroid_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.txt67
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