[FFmpeg-devel] [PATCH v9] lavc/rawdec: Remove monowhite switching code for 1 bpp AVI without a palette
Michael Niedermayer
michael at niedermayer.cc
Fri Feb 12 12:49:29 CET 2016
On Fri, Feb 12, 2016 at 11:26:02AM +0100, Mats Peterson wrote:
> Now handles non-standard 8 bpp raw AVI files created with "-vcodec
> rawvideo" that contain the palette at the end of each frame, like
> nut.
>
> 8 bpp raw QuickTime files created with "-vcodec rawvideo" won't work
> quite right, because they contain a palette both in the video sample
> description and at the end of each frame, which currently causes the
> stride to be calculated incorrectly. They are hugely non-standard
> anyway.
>
> Original 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".
>
> Another 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
>
> --
> Mats Peterson
> http://matsp888.no-ip.org/~mats/
> libavcodec/rawdec.c | 68 ++++++++++++++++----------------------
> 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, 37 insertions(+), 47 deletions(-)
> 2023febf5ae59cd14dd658c30cebeab2e10519fe 0001-lavc-rawdec-Remove-monowhite-switching-code-for-1-bp.patch
> From 1600eeb442b1ebfd56a7f8882b93db3f2076b006 Mon Sep 17 00:00:00 2001
> From: Mats Peterson <matsp888 at yahoo.com>
> Date: Fri, 12 Feb 2016 11:24:30 +0100
> Subject: [PATCH v9] lavc/rawdec: Remove monowhite switching code for 1 bpp AVI without a palette
>
> ---
> libavcodec/rawdec.c | 68 ++++++++++++++++---------------------
> 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, 37 insertions(+), 47 deletions(-)
>
> diff --git a/libavcodec/rawdec.c b/libavcodec/rawdec.c
> index b7ce2b6..cadeaff 100644
> --- a/libavcodec/rawdec.c
> +++ b/libavcodec/rawdec.c
> @@ -46,6 +46,7 @@ typedef struct RawVideoContext {
> int is_pal8;
> int is_nut_mono;
> int is_nut_pal8;
> + int has_pkt_pal;
> int is_yuv2;
> int is_lt_16bpp; // 16bpp pixfmt and bits_per_coded_sample < 16
> int tff;
> @@ -100,7 +101,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 +122,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;
>
please split the patch so that each patch is selfcontained and
does not contain independant changes or bugfixes.
see "git rebase -i" and 'git add -p' and "git commit --amend" for
tools to conveniently seperate changes into commits
It is important for git history, future bisect/debug and even
yourself understanding changes in the future to cleanly split
commits.
> 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 +189,21 @@ 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;
> + if ((avctx->bits_per_coded_sample == 8 || context->is_nut_pal8) &&
> + avctx->frame_number == 0 &&
> + !av_packet_get_side_data(avpkt, AV_PKT_DATA_PALETTE, NULL))
> + context->has_pkt_pal = 1;
> +
> + stride = (avpkt->size - (context->has_pkt_pal ? AVPALETTE_SIZE : 0)) / avctx->height;
>
> - if (stride == 0 || avpkt->size < stride * avctx->height) {
> + av_log(avctx, AV_LOG_DEBUG, "PACKET SIZE: %d\n", avpkt->size);
> + av_log(avctx, AV_LOG_DEBUG, "STRIDE: %d\n", stride);
this looks like some private debug code, which doesnt belong in this
patch
[...]
--
Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB
Those who are too smart to engage in politics are punished by being
governed by those who are dumber. -- Plato
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 181 bytes
Desc: Digital signature
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20160212/f51fe22c/attachment.sig>
More information about the ffmpeg-devel
mailing list