diff --git a/configure b/configure
index 2f2d03ec0c620e96bac89c6ba2b8dab2846e0df3..ae677165ae892f6997ebf7988785626affc336de 100755
--- a/configure
+++ b/configure
@@ -2194,7 +2194,7 @@ twinvq_decoder_select="mdct lsp sinewin"
 utvideo_decoder_select="bswapdsp"
 utvideo_encoder_select="bswapdsp huffman huffyuvencdsp"
 vble_decoder_select="huffyuvdsp"
-vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp"
+vc1_decoder_select="blockdsp error_resilience h263_decoder h264chroma h264qpel intrax8 mpeg_er qpeldsp startcode"
 vc1image_decoder_select="vc1_decoder"
 vorbis_decoder_select="mdct"
 vorbis_encoder_select="mdct"
@@ -2301,7 +2301,7 @@ h264_parser_select="h264_decoder"
 hevc_parser_select="hevc_decoder"
 mpegvideo_parser_select="mpegvideo"
 mpeg4video_parser_select="error_resilience h263dsp mpeg_er mpegvideo qpeldsp"
-vc1_parser_select="mpegvideo vc1_decoder"
+vc1_parser_select="mpegvideo startcode vc1_decoder"
 
 # external libraries
 libaacplus_encoder_deps="libaacplus"
diff --git a/libavcodec/Makefile b/libavcodec/Makefile
index c73eb83f34cd15b0396629c0046591b31ef265f7..6873439e3d34e20d999b347f83a11f123e0fe942 100644
--- a/libavcodec/Makefile
+++ b/libavcodec/Makefile
@@ -478,7 +478,7 @@ OBJS-$(CONFIG_VB_DECODER)              += vb.o
 OBJS-$(CONFIG_VBLE_DECODER)            += vble.o
 OBJS-$(CONFIG_VC1_DECODER)             += vc1dec.o vc1.o vc1data.o vc1dsp.o \
                                           msmpeg4dec.o msmpeg4.o msmpeg4data.o \
-                                          wmv2dsp.o startcode.o
+                                          wmv2dsp.o
 OBJS-$(CONFIG_VCR1_DECODER)            += vcr1.o
 OBJS-$(CONFIG_VMDAUDIO_DECODER)        += vmdaudio.o
 OBJS-$(CONFIG_VMDVIDEO_DECODER)        += vmdvideo.o
@@ -806,7 +806,7 @@ OBJS-$(CONFIG_RV40_PARSER)             += rv34_parser.o
 OBJS-$(CONFIG_TAK_PARSER)              += tak_parser.o tak.o
 OBJS-$(CONFIG_VC1_PARSER)              += vc1_parser.o vc1.o vc1data.o vc1dsp.o \
                                           msmpeg4.o msmpeg4data.o mpeg4video.o \
-                                          h263.o startcode.o
+                                          h263.o
 OBJS-$(CONFIG_VORBIS_PARSER)           += vorbis_parser.o xiph.o
 OBJS-$(CONFIG_VP3_PARSER)              += vp3_parser.o
 OBJS-$(CONFIG_VP8_PARSER)              += vp8_parser.o
diff --git a/libavcodec/arm/Makefile b/libavcodec/arm/Makefile
index 3daf21104d06524c98addde1f0730c6b5d3927cf..41485b38d24ad447d7e838feb0e405951a7dcd79 100644
--- a/libavcodec/arm/Makefile
+++ b/libavcodec/arm/Makefile
@@ -66,8 +66,6 @@ ARMV6-OBJS-$(CONFIG_PIXBLOCKDSP)       += arm/pixblockdsp_armv6.o
 
 ARMV6-OBJS-$(CONFIG_MLP_DECODER)       += arm/mlpdsp_armv6.o
 ARMV6-OBJS-$(CONFIG_STARTCODE)         += arm/startcode_armv6.o
-ARMV6-OBJS-$(CONFIG_VC1_DECODER)       += arm/startcode_armv6.o
-ARMV6-OBJS-$(CONFIG_VC1_PARSER)        += arm/startcode_armv6.o
 ARMV6-OBJS-$(CONFIG_VP7_DECODER)       += arm/vp8_armv6.o               \
                                           arm/vp8dsp_init_armv6.o       \
                                           arm/vp8dsp_armv6.o
diff --git a/libavcodec/arm/vc1dsp_init_arm.c b/libavcodec/arm/vc1dsp_init_arm.c
index 4a848484631895233a8925bbced3f3fe9ffb9eff..9dae22c822756a4d9c0e5aadce75210b04f6a125 100644
--- a/libavcodec/arm/vc1dsp_init_arm.c
+++ b/libavcodec/arm/vc1dsp_init_arm.c
@@ -20,17 +20,16 @@
 
 #include "libavutil/attributes.h"
 #include "libavutil/arm/cpu.h"
+#include "libavcodec/arm/startcode.h"
 #include "libavcodec/vc1dsp.h"
 #include "vc1dsp.h"
 
-int ff_startcode_find_candidate_armv6(const uint8_t *buf, int size);
-
 av_cold void ff_vc1dsp_init_arm(VC1DSPContext *dsp)
 {
     int cpu_flags = av_get_cpu_flags();
 
-    if (have_armv6(cpu_flags))
-        dsp->vc1_find_start_code_candidate = ff_startcode_find_candidate_armv6;
+    if (have_setend(cpu_flags))
+        dsp->startcode_find_candidate = ff_startcode_find_candidate_armv6;
     if (have_neon(cpu_flags))
         ff_vc1dsp_init_neon(dsp);
 }
diff --git a/libavcodec/vc1_parser.c b/libavcodec/vc1_parser.c
index 0021febaf56bd569a6aa173b7e28d0cfa84b248a..c68981fa305581cc1ef3dd7b6879240501f5988d 100644
--- a/libavcodec/vc1_parser.c
+++ b/libavcodec/vc1_parser.c
@@ -173,7 +173,7 @@ static int vc1_parse(AVCodecParserContext *s,
         if (unesc_index >= UNESCAPED_THRESHOLD && !start_code_found) {
             while (i < buf_size) {
                 if (search_state == NO_MATCH) {
-                    i += vpc->v.vc1dsp.vc1_find_start_code_candidate(buf + i, buf_size - i);
+                    i += vpc->v.vc1dsp.startcode_find_candidate(buf + i, buf_size - i);
                     if (i < buf_size) {
                         search_state = ONE_ZERO;
                     }
diff --git a/libavcodec/vc1dsp.c b/libavcodec/vc1dsp.c
index fae9daec6a854e9c7887999adf344e51f87a44d5..73e10012796ea599426556000f841d6b2f6b6d62 100644
--- a/libavcodec/vc1dsp.c
+++ b/libavcodec/vc1dsp.c
@@ -1025,7 +1025,7 @@ av_cold void ff_vc1dsp_init(VC1DSPContext *dsp)
     dsp->sprite_v_double_twoscale = sprite_v_double_twoscale_c;
 #endif /* CONFIG_WMV3IMAGE_DECODER || CONFIG_VC1IMAGE_DECODER */
 
-    dsp->vc1_find_start_code_candidate = ff_startcode_find_candidate_c;
+    dsp->startcode_find_candidate = ff_startcode_find_candidate_c;
 
     if (ARCH_AARCH64)
         ff_vc1dsp_init_aarch64(dsp);
diff --git a/libavcodec/vc1dsp.h b/libavcodec/vc1dsp.h
index aa5b6d34fd7a98721ab54f7095e1f00ab553e696..e2f75ac7dcf3cd754aa6bad2739826be4244483d 100644
--- a/libavcodec/vc1dsp.h
+++ b/libavcodec/vc1dsp.h
@@ -80,7 +80,7 @@ typedef struct VC1DSPContext {
      * to filter out any zero bytes that are known to not be followed by
      * one or more further zero bytes and a one byte.
      */
-    int (*vc1_find_start_code_candidate)(const uint8_t *buf, int size);
+    int (*startcode_find_candidate)(const uint8_t *buf, int size);
 } VC1DSPContext;
 
 void ff_vc1dsp_init(VC1DSPContext* c);