diff --git a/libavcodec/8bps.c b/libavcodec/8bps.c
index 1709368c658a58f1a5f29b9b806f9c60d4786958..d01ef924c796cae2a8221b516580c794e3b5ba78 100644
--- a/libavcodec/8bps.c
+++ b/libavcodec/8bps.c
@@ -119,7 +119,7 @@ static int decode_frame(AVCodecContext *avctx, void *data,
         }
     }
 
-    if ((avctx->bits_per_coded_sample & 0x1f) <= 8) {
+    if (avctx->bits_per_coded_sample <= 8) {
         const uint8_t *pal = av_packet_get_side_data(avpkt,
                                                      AV_PKT_DATA_PALETTE,
                                                      NULL);
diff --git a/libavcodec/msrle.c b/libavcodec/msrle.c
index ad04ce89845a57c426b13899ce1a6540a7e84298..750e54ae9986b349e2257da64cbc327231a74bd2 100644
--- a/libavcodec/msrle.c
+++ b/libavcodec/msrle.c
@@ -55,7 +55,7 @@ static av_cold int msrle_decode_init(AVCodecContext *avctx)
 
     s->avctx = avctx;
 
-    switch (avctx->bits_per_coded_sample & 0x1f) {
+    switch (avctx->bits_per_coded_sample) {
     case 1:
         avctx->pix_fmt = AV_PIX_FMT_MONOWHITE;
         break;
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
index 1a63f9e5cc22bf05b115fd02013e97855e3564f7..444cf8ed5d9694a8e6549de160512f11498196eb 100644
--- a/libavcodec/rawdec.c
+++ b/libavcodec/rawdec.c
@@ -109,7 +109,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
     if (   avctx->codec_tag == MKTAG('r','a','w',' ')
         || avctx->codec_tag == MKTAG('N','O','1','6'))
         avctx->pix_fmt = avpriv_find_pix_fmt(pix_fmt_bps_mov,
-                                      avctx->bits_per_coded_sample & 0x1f);
+                                      avctx->bits_per_coded_sample);
     else if (avctx->codec_tag == MKTAG('W', 'R', 'A', 'W'))
         avctx->pix_fmt = avpriv_find_pix_fmt(pix_fmt_bps_avi,
                                       avctx->bits_per_coded_sample);
@@ -135,7 +135,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
             memset(context->palette->data, 0, AVPALETTE_SIZE);
     }
 
-    if (((avctx->bits_per_coded_sample & 0x1f) == 4 || (avctx->bits_per_coded_sample & 0x1f) == 2) &&
+    if ((avctx->bits_per_coded_sample == 4 || avctx->bits_per_coded_sample == 2) &&
         avctx->pix_fmt == AV_PIX_FMT_PAL8 &&
        (!avctx->codec_tag || avctx->codec_tag == MKTAG('r','a','w',' '))) {
         context->is_2_4_bpp = 1;
@@ -209,14 +209,14 @@ static int raw_decode(AVCodecContext *avctx, void *data, int *got_frame,
         int i;
         uint8_t *dst = frame->buf[0]->data;
         buf_size = context->frame_size - AVPALETTE_SIZE;
-        if ((avctx->bits_per_coded_sample & 0x1f) == 4) {
+        if (avctx->bits_per_coded_sample == 4) {
             for (i = 0; 2 * i + 1 < buf_size && i<avpkt->size; i++) {
                 dst[2 * i + 0] = buf[i] >> 4;
                 dst[2 * i + 1] = buf[i] & 15;
             }
             linesize_align = 8;
         } else {
-            av_assert0((avctx->bits_per_coded_sample & 0x1f) == 2);
+            av_assert0(avctx->bits_per_coded_sample == 2);
             for (i = 0; 4 * i + 3 < buf_size && i<avpkt->size; i++) {
                 dst[4 * i + 0] = buf[i] >> 6;
                 dst[4 * i + 1] = buf[i] >> 4 & 3;
diff --git a/libavformat/mov.c b/libavformat/mov.c
index 8220b5a840644c99b52918cd17fefc0053faa7e7..7a567e424257db048a231a1d1937676992833c09 100644
--- a/libavformat/mov.c
+++ b/libavformat/mov.c
@@ -1331,6 +1331,7 @@ static void mov_parse_stsd_video(MOVContext *c, AVIOContext *pb,
         if (color_greyscale) {
             int color_index, color_dec;
             /* compute the greyscale palette */
+            st->codec->bits_per_coded_sample = color_depth;
             color_count = 1 << color_depth;
             color_index = 255;
             color_dec   = 256 / (color_count - 1);