[FFmpeg-devel] [PATCH] support raw avi for raw PAL8 or Gray8 pixel data
rui.jiang
229135609 at qq.com
Mon Aug 16 07:07:07 EEST 2021
add palette data in avi header when the input data is raw PAL8 or Gray8 pixel data and the output data is 8bit raw avi video;
Here is a sample:
the codec params like:
st->codecpar->bits_per_raw_sample=8;
st->codecpar->bits_per_coded_sample=8;
st->codecpar->format = AV_PIX_FMT_GRAY8;//AV_PIX_FMT_PAL8;
the input data like:
int width = 320;
int height = 480;
int BUFSIZE = width * height;
uint8_t* buffer = new unsigned char[BUFSIZE];
---
libavformat/riffenc.c | 10 +++++++++-
1 file changed, 9 insertions(+), 1 deletion(-)
diff --git a/libavformat/riffenc.c b/libavformat/riffenc.c
index 43c8bf957a..bc654b3cd3 100644
--- a/libavformat/riffenc.c
+++ b/libavformat/riffenc.c
@@ -228,7 +228,8 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecParameters *par,
pal_avi = !for_asf &&
(pix_fmt == AV_PIX_FMT_PAL8 ||
pix_fmt == AV_PIX_FMT_MONOWHITE ||
- pix_fmt == AV_PIX_FMT_MONOBLACK);
+ pix_fmt == AV_PIX_FMT_MONOBLACK ||
+ pix_fmt == AV_PIX_FMT_GRAY8);
/* Size (not including the size of the color table or color masks) */
avio_wl32(pb, 40 + (ignore_extradata || pal_avi ? 0 : extradata_size));
@@ -263,6 +264,13 @@ void ff_put_bmp_header(AVIOContext *pb, AVCodecParameters *par,
avio_wl32(pb, 0xffffff);
else if (i == 1 && pix_fmt == AV_PIX_FMT_MONOBLACK)
avio_wl32(pb, 0xffffff);
+ else if (pix_fmt == AV_PIX_FMT_PAL8 || pix_fmt == AV_PIX_FMT_GRAY8) {
+ /* Initialize palette */
+ avio_w8(pb,i);
+ avio_w8(pb,i);
+ avio_w8(pb,i);
+ avio_w8(pb,0);
+ }
else
avio_wl32(pb, 0);
}
--
2.30.1 (Apple Git-130)
More information about the ffmpeg-devel
mailing list