diff --git a/libavdevice/jack_audio.c b/libavdevice/jack_audio.c
index bd6a770dd000f088db9b86f151feaa56c0e5d9e0..5ba67316821b09bb210e4979c02c13f4b975a6bd 100644
--- a/libavdevice/jack_audio.c
+++ b/libavdevice/jack_audio.c
@@ -188,6 +188,10 @@ static int start_jack(AVFormatContext *context)
 
     /* Create time filter */
     self->timefilter  = ff_timefilter_new (1.0 / self->sample_rate, self->buffer_size, 1.5);
+    if (!self->timefilter) {
+        jack_client_close(self->client);
+        return AVERROR(ENOMEM);
+    }
 
     /* Create FIFO buffers */
     self->filled_pkts = av_fifo_alloc(FIFO_PACKETS_NUM * sizeof(AVPacket));
diff --git a/libavdevice/timefilter.c b/libavdevice/timefilter.c
index 424e4929bdab1d195b283b540e419b9d8a1c8ddb..b4133e085ca7a15b81fa0ce836478365ccff63b2 100644
--- a/libavdevice/timefilter.c
+++ b/libavdevice/timefilter.c
@@ -49,6 +49,10 @@ TimeFilter *ff_timefilter_new(double time_base,
 {
     TimeFilter *self       = av_mallocz(sizeof(TimeFilter));
     double o               = 2 * M_PI * bandwidth * period * time_base;
+
+    if (!self)
+        return NULL;
+
     self->clock_period     = time_base;
     self->feedback2_factor = qexpneg(M_SQRT2 * o);
     self->feedback3_factor = qexpneg(o * o) / period;
@@ -121,6 +125,10 @@ int main(void)
                     for (par1 = bestpar1 * 0.8; par1 <= bestpar1 * 1.21; par1 += bestpar1 * 0.05) {
                         double error   = 0;
                         TimeFilter *tf = ff_timefilter_new(1, par0, par1);
+                        if (!tf) {
+                            printf("Could not alocate memory for timefilter.\n");
+                            exit(1);
+                        }
                         for (i = 0; i < SAMPLES; i++) {
                             double filtered;
                             filtered = ff_timefilter_update(tf, samples[i], i ? (samplet[i] - samplet[i-1]) : 1);
diff --git a/libavdevice/timefilter.h b/libavdevice/timefilter.h
index 66629591a2691f0b02782c1b0981510da60863f2..cb3d0a788f5a661afd1519c295c4d290586c9901 100644
--- a/libavdevice/timefilter.h
+++ b/libavdevice/timefilter.h
@@ -58,6 +58,8 @@ typedef struct TimeFilter TimeFilter;
  * @param period      expected update interval, in input units
  * @param brandwidth  filtering bandwidth, in Hz
  *
+ * @return a pointer to a TimeFilter struct, or NULL on error
+ *
  * For more details about these parameters and background concepts please see:
  * http://www.kokkinizita.net/papers/usingdll.pdf
  */
diff --git a/libavdevice/v4l2.c b/libavdevice/v4l2.c
index 1b2ede4a225b19334e102c3c34313773de512f00..cb962b7be77b9894f25f1ca1aea6453195e8ade0 100644
--- a/libavdevice/v4l2.c
+++ b/libavdevice/v4l2.c
@@ -455,6 +455,8 @@ static int init_convert_timestamp(AVFormatContext *ctx, int64_t ts)
         av_log(ctx, AV_LOG_INFO, "Detected monotonic timestamps, converting\n");
         /* microseconds instead of seconds, MHz instead of Hz */
         s->timefilter = ff_timefilter_new(1, period, 1.0E-6);
+        if (!s->timefilter)
+            return AVERROR(ENOMEM);
         s->ts_mode = V4L_TS_CONVERT_READY;
         return 0;
     }