Fixed trailing whitespace. This patch should be applied after your
recent PAL8 changes for nut, Michael. Description follows:
This patch removes the monowhite switching code for 1 bpp raw AVI
without a palette. I don't see any reason to keep it, since it's
semantically incorrect to use monowhite for palettized data in my book,
it adds unnecessary noise to the code, and it's inconsistent with the
rest of the code in FFmpeg.
For black & white AVI or QuickTime files, in order to produce a
monochrome nut file, force the pixel format with "-pix_fmt monow" or
"-pix_fmt monob".
Unfortunately, there seems to be some dithering going on when converting
from pal8 to monow. A better way is to use "ffmpeg -i 1bpp.avi -vcodec
copy -vtag B1W0 1bpp.nut". The "-vtag" option is currently needed,
otherwise FFmpeg will use a RGB[15] codec tag for some reason.
I have also updated the 1 bpp FATE test files (once again).
Mats
>From fb5e1ddde3f9ec9a7ad376e169c76a59f51e380a Mon Sep 17 00:00:00 2001
From: Mats Peterson <matsp...@yahoo.com>
Date: Wed, 10 Feb 2016 02:44:58 +0100
Subject: [PATCH v5] lavc/rawdec: Remove monowhite switching code for 1 bpp AVI without a palette
---
libavcodec/rawdec.c | 32 +++++---------------------------
tests/ref/vsynth/vsynth1-bpp1 | 4 ++--
tests/ref/vsynth/vsynth2-bpp1 | 4 ++--
tests/ref/vsynth/vsynth3-bpp1 | 4 ++--
tests/ref/vsynth/vsynth_lena-bpp1 | 4 ++--
5 files changed, 13 insertions(+), 35 deletions(-)
diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
index b7ce2b6..22b1228 100644
--- a/libavcodec/rawdec.c
+++ b/libavcodec/rawdec.c
@@ -100,7 +100,7 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
avpriv_set_systematic_pal2((uint32_t*)context->palette->data, avctx->pix_fmt);
else {
memset(context->palette->data, 0, AVPALETTE_SIZE);
- if (avctx->bits_per_coded_sample <= 1)
+ if (avctx->bits_per_coded_sample == 1)
memset(context->palette->data, 0xff, 4);
}
}
@@ -121,17 +121,13 @@ static av_cold int raw_init_decoder(AVCodecContext *avctx)
if (avctx->codec_tag == MKTAG('B','1','W','0') ||
avctx->codec_tag == MKTAG('B','0','W','1'))
context->is_nut_mono = 1;
- else if (avctx->codec_tag == MKTAG('P','A','L','8'))
+ else if (avctx->codec_tag == MKTAG('P','A','L',8))
context->is_nut_pal8 = 1;
if (avctx->codec_tag == AV_RL32("yuv2") &&
avctx->pix_fmt == AV_PIX_FMT_YUYV422)
context->is_yuv2 = 1;
- /* Temporary solution until PAL8 is implemented in nut */
- if (context->is_pal8 && avctx->bits_per_coded_sample == 1)
- avctx->pix_fmt = AV_PIX_FMT_NONE;
-
return 0;
}
@@ -192,33 +188,13 @@ static int raw_decode(AVCodecContext *avctx, void *data, int *got_frame,
return AVERROR_INVALIDDATA;
}
- if (context->is_nut_mono)
- stride = avctx->width / 8 + (avctx->width & 7 ? 1 : 0);
- else if (context->is_nut_pal8)
- stride = avctx->width;
- else
- stride = avpkt->size / avctx->height;
+ stride = (avpkt->size - (context->is_nut_pal8 ? AVPALETTE_SIZE : 0)) / avctx->height;
if (stride == 0 || avpkt->size < stride * avctx->height) {
av_log(avctx, AV_LOG_ERROR, "Packet too small (%d)\n", avpkt->size);
return AVERROR_INVALIDDATA;
}
- /* Temporary solution until PAL8 is implemented in nut */
- if (avctx->pix_fmt == AV_PIX_FMT_NONE &&
- avctx->bits_per_coded_sample == 1 &&
- avctx->frame_number == 0 &&
- context->palette &&
- AV_RB64(context->palette->data) == 0xFFFFFFFF00000000
- ) {
- const uint8_t *pal = av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL);
- if (!pal) {
- avctx->pix_fmt = AV_PIX_FMT_MONOWHITE;
- context->is_pal8 = 0;
- context->is_mono = 1;
- } else
- avctx->pix_fmt = AV_PIX_FMT_PAL8;
- }
desc = av_pix_fmt_desc_get(avctx->pix_fmt);
if ((avctx->bits_per_coded_sample == 8 || avctx->bits_per_coded_sample == 4
@@ -417,6 +393,8 @@ static int raw_decode(AVCodecContext *avctx, void *data, int *got_frame,
if ((avctx->pix_fmt == AV_PIX_FMT_PAL8 && buf_size < context->frame_size) ||
(desc->flags & AV_PIX_FMT_FLAG_PSEUDOPAL)) {
+ if (context->is_nut_pal8)
+ memcpy(context->palette->data, avpkt->data + avpkt->size - AVPALETTE_SIZE, AVPALETTE_SIZE);
frame->buf[1] = av_buffer_ref(context->palette);
if (!frame->buf[1]) {
av_buffer_unref(&frame->buf[0]);
diff --git a/tests/ref/vsynth/vsynth1-bpp1 b/tests/ref/vsynth/vsynth1-bpp1
index 32dab11..378f990 100644
--- a/tests/ref/vsynth/vsynth1-bpp1
+++ b/tests/ref/vsynth/vsynth1-bpp1
@@ -1,4 +1,4 @@
3e5e0f4afb3a0350440e86b1ea56cec9 *tests/data/fate/vsynth1-bpp1.avi
640452 tests/data/fate/vsynth1-bpp1.avi
-ccef5f5d5b0392f1d01c200499dac657 *tests/data/fate/vsynth1-bpp1.out.rawvideo
-stddev: 97.30 PSNR: 8.37 MAXDIFF: 237 bytes: 7603200/ 7603200
+853694f3c1aa3ef3807ab1fccbeefe7b *tests/data/fate/vsynth1-bpp1.out.rawvideo
+stddev: 84.44 PSNR: 9.60 MAXDIFF: 221 bytes: 7603200/ 7603200
diff --git a/tests/ref/vsynth/vsynth2-bpp1 b/tests/ref/vsynth/vsynth2-bpp1
index d010bbd..ae8fd27 100644
--- a/tests/ref/vsynth/vsynth2-bpp1
+++ b/tests/ref/vsynth/vsynth2-bpp1
@@ -1,4 +1,4 @@
771437c9038b44f4e2d4ff764c1c3821 *tests/data/fate/vsynth2-bpp1.avi
640452 tests/data/fate/vsynth2-bpp1.avi
-ba70b5aebc786e625af6bd7f7ec82717 *tests/data/fate/vsynth2-bpp1.out.rawvideo
-stddev: 81.63 PSNR: 9.89 MAXDIFF: 237 bytes: 7603200/ 7603200
+94261fc8aa20130cbd4361e15b742ef7 *tests/data/fate/vsynth2-bpp1.out.rawvideo
+stddev: 70.29 PSNR: 11.19 MAXDIFF: 221 bytes: 7603200/ 7603200
diff --git a/tests/ref/vsynth/vsynth3-bpp1 b/tests/ref/vsynth/vsynth3-bpp1
index f84808a..6f71248 100644
--- a/tests/ref/vsynth/vsynth3-bpp1
+++ b/tests/ref/vsynth/vsynth3-bpp1
@@ -1,4 +1,4 @@
a5e6d1eff2f6fc3bba31e3bb8753b905 *tests/data/fate/vsynth3-bpp1.avi
15352 tests/data/fate/vsynth3-bpp1.avi
-75e8ee0c0b0ada4515455d9f29377a16 *tests/data/fate/vsynth3-bpp1.out.rawvideo
-stddev: 97.70 PSNR: 8.33 MAXDIFF: 248 bytes: 86700/ 86700
+79076b5fc43ee2a2284c0cde991d21f3 *tests/data/fate/vsynth3-bpp1.out.rawvideo
+stddev: 84.88 PSNR: 9.55 MAXDIFF: 232 bytes: 86700/ 86700
diff --git a/tests/ref/vsynth/vsynth_lena-bpp1 b/tests/ref/vsynth/vsynth_lena-bpp1
index d4570c7..3e250a8 100644
--- a/tests/ref/vsynth/vsynth_lena-bpp1
+++ b/tests/ref/vsynth/vsynth_lena-bpp1
@@ -1,4 +1,4 @@
d53d08c755ffde5fca744f0f941bfcb1 *tests/data/fate/vsynth_lena-bpp1.avi
640452 tests/data/fate/vsynth_lena-bpp1.avi
-9a66df9009670b0a593d889975246c00 *tests/data/fate/vsynth_lena-bpp1.out.rawvideo
-stddev: 96.36 PSNR: 8.45 MAXDIFF: 233 bytes: 7603200/ 7603200
+dce624117fcd2b16f38e0a0a62b13fa7 *tests/data/fate/vsynth_lena-bpp1.out.rawvideo
+stddev: 83.18 PSNR: 9.73 MAXDIFF: 217 bytes: 7603200/ 7603200
--
1.7.10.4
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel