diff --git a/libavcodec/avcodec.h b/libavcodec/avcodec.h
index a80612798e1446633cfa19054401cdd714718025..fe83fef5de124d1e9ed3e801ab3cf313d251da50 100644
--- a/libavcodec/avcodec.h
+++ b/libavcodec/avcodec.h
@@ -3389,6 +3389,8 @@ enum AVSubtitleType {
     SUBTITLE_ASS,
 };
 
+#define AV_SUBTITLE_FLAG_FORCED 0x00000001
+
 typedef struct AVSubtitleRect {
     int x;         ///< top left corner  of pict, undefined when pict is not set
     int y;         ///< top left corner  of pict, undefined when pict is not set
@@ -3412,11 +3414,7 @@ typedef struct AVSubtitleRect {
      */
     char *ass;
 
-    /**
-     * 1 indicates this subtitle is a forced subtitle.
-     * A forced subtitle should be displayed even when subtitles are hidden.
-     */
-    int forced;
+    int flags;
 } AVSubtitleRect;
 
 typedef struct AVSubtitle {
@@ -4213,6 +4211,10 @@ int av_parser_parse2(AVCodecParserContext *s,
                      int64_t pts, int64_t dts,
                      int64_t pos);
 
+/**
+ * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
+ * @deprecated use AVBitstreamFilter
+ */
 int av_parser_change(AVCodecParserContext *s,
                      AVCodecContext *avctx,
                      uint8_t **poutbuf, int *poutbuf_size,
diff --git a/libavcodec/dvdsubdec.c b/libavcodec/dvdsubdec.c
index 90593d083343d92057c9de9789ee18eb2551bf6b..9c2dd8cf05a985971f2f1857bc708d5e86ff7760 100644
--- a/libavcodec/dvdsubdec.c
+++ b/libavcodec/dvdsubdec.c
@@ -357,7 +357,7 @@ static int decode_dvd_subtitles(DVDSubContext *ctx, AVSubtitle *sub_header,
                 sub_header->rects[0]->h = h;
                 sub_header->rects[0]->type = SUBTITLE_BITMAP;
                 sub_header->rects[0]->pict.linesize[0] = w;
-                sub_header->rects[0]->forced = is_menu;
+                sub_header->rects[0]->flags = is_menu ? AV_SUBTITLE_FLAG_FORCED : 0;
             }
         }
         if (next_cmd_pos < cmd_pos) {
diff --git a/libavcodec/options.c b/libavcodec/options.c
index 20e9495976c44913d06fb056ccb10de9c183c97c..0da0db480687ec7d7980c64312e0c90051a87391 100644
--- a/libavcodec/options.c
+++ b/libavcodec/options.c
@@ -277,7 +277,8 @@ static const AVOption subtitle_rect_options[]={
 {"w", "", SROFFSET(w), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
 {"h", "", SROFFSET(h), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
 {"type", "", SROFFSET(type), AV_OPT_TYPE_INT, {.i64 = 0 }, 0, INT_MAX, 0},
-{"forced", "", SROFFSET(forced), AV_OPT_TYPE_INT, {.i64 = 0}, 0, 1, 0},
+{"flags", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0, "flags"},
+{"forced", "", SROFFSET(flags), AV_OPT_TYPE_FLAGS, {.i64 = 0}, 0, 1, 0},
 {NULL},
 };
 
diff --git a/libavcodec/parser.c b/libavcodec/parser.c
index 127ba8bd3dea4fdd76263f67fef14f0d8edec803..cd1bcbcee2f5e6f690953b77b21ad6ac893110e4 100644
--- a/libavcodec/parser.c
+++ b/libavcodec/parser.c
@@ -165,11 +165,6 @@ int av_parser_parse2(AVCodecParserContext *s,
     return index;
 }
 
-/**
- *
- * @return 0 if the output buffer is a subset of the input, 1 if it is allocated and must be freed
- * @deprecated use AVBitstreamFilter
- */
 int av_parser_change(AVCodecParserContext *s,
                      AVCodecContext *avctx,
                      uint8_t **poutbuf, int *poutbuf_size,
@@ -215,10 +210,6 @@ void av_parser_close(AVCodecParserContext *s)
 
 /*****************************************************/
 
-/**
- * Combine the (truncated) bitstream to a complete frame.
- * @return -1 if no complete frame could be created, AVERROR(ENOMEM) if there was a memory allocation error
- */
 int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size)
 {
     if(pc->overread){
diff --git a/libavcodec/parser.h b/libavcodec/parser.h
index 69f1064fb739576a224360b80d1333e71f683eca..7fe0e115b1dcdce69fafb02c32db2e656ed62622 100644
--- a/libavcodec/parser.h
+++ b/libavcodec/parser.h
@@ -39,6 +39,11 @@ typedef struct ParseContext{
 
 #define END_NOT_FOUND (-100)
 
+/**
+ * Combine the (truncated) bitstream to a complete frame.
+ * @return -1 if no complete frame could be created,
+ *         AVERROR(ENOMEM) if there was a memory allocation error
+ */
 int ff_combine_frame(ParseContext *pc, int next, const uint8_t **buf, int *buf_size);
 int ff_mpeg4video_split(AVCodecContext *avctx, const uint8_t *buf,
                         int buf_size);
diff --git a/libavcodec/pgssubdec.c b/libavcodec/pgssubdec.c
index d0d4dd6aff0bebd29ec77986ebdf4642dec49fa6..2876c6ac32112345665bd2862a1925f850da7dbf 100644
--- a/libavcodec/pgssubdec.c
+++ b/libavcodec/pgssubdec.c
@@ -429,7 +429,7 @@ static int display_end_segment(AVCodecContext *avctx, void *data,
         sub->rects[rect]->pict.data[1] = av_mallocz(AVPALETTE_SIZE);
 
         /* Copy the forced flag */
-        sub->rects[rect]->forced = (ctx->presentation.objects[rect].composition & 0x40) != 0;
+        sub->rects[rect]->flags = (ctx->presentation.objects[rect].composition & 0x40) != 0 ? AV_SUBTITLE_FLAG_FORCED : 0;
 
         if (!ctx->forced_subs_only || ctx->presentation.objects[rect].composition & 0x40)
         memcpy(sub->rects[rect]->pict.data[1], ctx->clut, sub->rects[rect]->nb_colors * sizeof(uint32_t));
diff --git a/libavcodec/version.h b/libavcodec/version.h
index 67ff16919d509ac6551d9e516ef253069d92d3e9..ec874f47219b91289341e43ba4aac3eaf1211aa0 100644
--- a/libavcodec/version.h
+++ b/libavcodec/version.h
@@ -29,7 +29,7 @@
 #include "libavutil/avutil.h"
 
 #define LIBAVCODEC_VERSION_MAJOR 54
-#define LIBAVCODEC_VERSION_MINOR 70
+#define LIBAVCODEC_VERSION_MINOR 71
 #define LIBAVCODEC_VERSION_MICRO 100
 
 #define LIBAVCODEC_VERSION_INT  AV_VERSION_INT(LIBAVCODEC_VERSION_MAJOR, \
diff --git a/libavcodec/x86/ac3dsp.asm b/libavcodec/x86/ac3dsp.asm
index d97d8d3b0b86ae018929d3802895960c34c73a34..872d39e7492178d2576896a39e99c652bce6da6a 100644
--- a/libavcodec/x86/ac3dsp.asm
+++ b/libavcodec/x86/ac3dsp.asm
@@ -63,12 +63,10 @@ cglobal ac3_exponent_min, 3, 4, 2, exp, reuse_blks, expn, offset
     REP_RET
 %endmacro
 
-%define PMINUB PMINUB_MMX
 %define LOOP_ALIGN
 INIT_MMX mmx
 AC3_EXPONENT_MIN
 %if HAVE_MMXEXT_EXTERNAL
-%define PMINUB PMINUB_MMXEXT
 %define LOOP_ALIGN ALIGN 16
 INIT_MMX mmxext
 AC3_EXPONENT_MIN
@@ -77,7 +75,6 @@ AC3_EXPONENT_MIN
 INIT_XMM sse2
 AC3_EXPONENT_MIN
 %endif
-%undef PMINUB
 %undef LOOP_ALIGN
 
 ;-----------------------------------------------------------------------------
diff --git a/libavutil/x86/x86util.asm b/libavutil/x86/x86util.asm
index 89e8cd82f48ea5a58e9a32409f0aa8dd4139286a..ade21c68bba48b4e283809a23e002489b828a21d 100644
--- a/libavutil/x86/x86util.asm
+++ b/libavutil/x86/x86util.asm
@@ -530,14 +530,14 @@
     movh  [%7+%8], %4
 %endmacro
 
-%macro PMINUB_MMX 3 ; dst, src, tmp
+%macro PMINUB 3 ; dst, src, ignored
+%if cpuflag(mmxext)
+    pminub   %1, %2
+%else ; dst, src, tmp
     mova     %3, %1
     psubusb  %3, %2
     psubb    %1, %3
-%endmacro
-
-%macro PMINUB_MMXEXT 3 ; dst, src, ignored
-    pminub   %1, %2
+%endif
 %endmacro
 
 %macro SPLATW 2-3 0