diff --git a/ffmpeg.c b/ffmpeg.c
index b84fb1534c3c4a5156e936fbb43001c8f901de90..ae02b0078467716338a316a889a9574231c13213 100644
--- a/ffmpeg.c
+++ b/ffmpeg.c
@@ -693,7 +693,13 @@ static void write_frame(AVFormatContext *s, AVPacket *pkt, OutputStream *ost)
                                            &new_pkt.data, &new_pkt.size,
                                            pkt->data, pkt->size,
                                            pkt->flags & AV_PKT_FLAG_KEY);
-        if(a == 0 && new_pkt.data != pkt->data && new_pkt.destruct) {
+FF_DISABLE_DEPRECATION_WARNINGS
+        if(a == 0 && new_pkt.data != pkt->data
+#if FF_API_DESTRUCT_PACKET
+           && new_pkt.destruct
+#endif
+           ) {
+FF_ENABLE_DEPRECATION_WARNINGS
             uint8_t *t = av_malloc(new_pkt.size + AV_INPUT_BUFFER_PADDING_SIZE); //the new should be a subset of the old so cannot overflow
             if(t) {
                 memcpy(t, new_pkt.data, new_pkt.size);
diff --git a/libavdevice/iec61883.c b/libavdevice/iec61883.c
index 5c74cc7729cab5f6221e54712a7bb2f41b209514..8ee834e07e9745696e387fc713b507ac3436dc6c 100644
--- a/libavdevice/iec61883.c
+++ b/libavdevice/iec61883.c
@@ -198,7 +198,11 @@ static int iec61883_parse_queue_dv(struct iec61883_data *dv, AVPacket *pkt)
 
     size = avpriv_dv_produce_packet(dv->dv_demux, pkt,
                                     packet->buf, packet->len, -1);
+#if FF_API_DESTRUCT_PACKET
+FF_DISABLE_DEPRECATION_WARNINGS
     pkt->destruct = av_destruct_packet;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
     dv->queue_first = packet->next;
     av_free(packet);
     dv->packets--;
diff --git a/libavformat/mux.c b/libavformat/mux.c
index 84c6d24919b7c06f6815d6d3e93daf5d47493175..7664872a4af9f692e7bc42727805fc6fc82326bd 100644
--- a/libavformat/mux.c
+++ b/libavformat/mux.c
@@ -1045,7 +1045,11 @@ int ff_write_chained(AVFormatContext *dst, int dst_stream, AVPacket *pkt,
     pkt->buf = local_pkt.buf;
     pkt->side_data       = local_pkt.side_data;
     pkt->side_data_elems = local_pkt.side_data_elems;
+#if FF_API_DESTRUCT_PACKET
+FF_DISABLE_DEPRECATION_WARNINGS
     pkt->destruct = local_pkt.destruct;
+FF_ENABLE_DEPRECATION_WARNINGS
+#endif
     return ret;
 }
 
diff --git a/libavformat/tee.c b/libavformat/tee.c
index e3d466a3eb7acb3b5b8ca7613eb35934a0492a9d..bc2e522f7cef956f98897b55d4f908dfcf1411fe 100644
--- a/libavformat/tee.c
+++ b/libavformat/tee.c
@@ -396,7 +396,13 @@ static int filter_packet(void *log_ctx, AVPacket *pkt,
                                              &new_pkt.data, &new_pkt.size,
                                              pkt->data, pkt->size,
                                              pkt->flags & AV_PKT_FLAG_KEY);
-        if (ret == 0 && new_pkt.data != pkt->data && new_pkt.destruct) {
+FF_DISABLE_DEPRECATION_WARNINGS
+        if (ret == 0 && new_pkt.data != pkt->data
+#if FF_API_DESTRUCT_PACKET
+            && new_pkt.destruct
+#endif
+            ) {
+FF_ENABLE_DEPRECATION_WARNINGS
             if ((ret = av_copy_packet(&new_pkt, pkt)) < 0)
                 break;
             ret = 1;