static void dec_preprocess(MSFilter* f) { DecState *s = (DecState *)f->data; vpx_codec_caps_t caps = vpx_codec_get_caps(s->iface); /* Initialize codec */ if (!s->ready){ s->flags = 0; #if 0 /* Deactivate fragments input for the vpx decoder because it has been broken in libvpx 1.4. * This will have the effect to output complete frames. */ if ((s->avpf_enabled == TRUE) && (caps & VPX_CODEC_CAP_INPUT_FRAGMENTS)) { s->flags |= VPX_CODEC_USE_INPUT_FRAGMENTS; } #endif if (caps & VPX_CODEC_CAP_ERROR_CONCEALMENT) { s->flags |= VPX_CODEC_USE_ERROR_CONCEALMENT; } if (dec_initialize_impl(f) != 0) return; ms_message("VP8: initializing decoder context: avpf=[%i] freeze_on_error=[%i]",s->avpf_enabled,s->freeze_on_error); vp8rtpfmt_unpacker_init(&s->unpacker, f, s->avpf_enabled, s->freeze_on_error, (s->flags & VPX_CODEC_USE_INPUT_FRAGMENTS) ? TRUE : FALSE); s->first_image_decoded = FALSE; s->ready=TRUE; } }
static void dec_preprocess(MSFilter* f) { DecState *s = (DecState *)f->data; vpx_codec_caps_t caps = vpx_codec_get_caps(s->iface); /* Initialize codec */ if (!s->ready){ s->flags = 0; if ((s->avpf_enabled == TRUE) && (caps & VPX_CODEC_CAP_INPUT_FRAGMENTS)) { s->flags |= VPX_CODEC_USE_INPUT_FRAGMENTS; } if (caps & VPX_CODEC_CAP_ERROR_CONCEALMENT) { s->flags |= VPX_CODEC_USE_ERROR_CONCEALMENT; } #ifdef VPX_CODEC_CAP_FRAME_THREADING if ((caps & VPX_CODEC_CAP_FRAME_THREADING) && (ms_factory_get_cpu_count(f->factory) > 1)) { s->flags |= VPX_CODEC_USE_FRAME_THREADING; } #endif if(vpx_codec_dec_init(&s->codec, s->iface, NULL, s->flags)) ms_error("Failed to initialize decoder"); ms_message("VP8: initializing decoder context: avpf=[%i] freeze_on_error=[%i]",s->avpf_enabled,s->freeze_on_error); vp8rtpfmt_unpacker_init(&s->unpacker, f, s->avpf_enabled, s->freeze_on_error, (s->flags & VPX_CODEC_USE_INPUT_FRAGMENTS) ? TRUE : FALSE); s->first_image_decoded = FALSE; s->ready=TRUE; } }