[FFmpeg-devel] New pixel format uyvy422i12le
Damien Chabannes
damien.chabannes at bbright.com
Mon Mar 9 11:05:16 EET 2020
Hi everyone,
I'm trying to implement a new pixel format in FFmpeg but it appears that my
implementation is not correct. Indeed, when I do a ffplay on a raw video in
this new pixel format, the output is not correct.
The pixel format I want to implement is the uyvy422i12le. Data y, u and v
are stored in the same buffer, in this interlaced way : u0, y0, v0, y1, u1,
y2, v1, y3, u2, y4, v2, y5, ..., each data is encoded on 12 bits and stored
on 16 bits Little Endian.
For adding this new pix_fmt, I have done the following modifications :
- in libavutil/pixfmt.h, add "AV_PIX_FMT_UYVY422I12LE" in enum
AVPixelFormat
- in libavutil/pixdesc.c, add AV_PIX_FMT_UYVY422I12LE in
av_pix_fmt_descriptors :
[AV_PIX_FMT_UYVY422I12LE] = {
.name = "uyvy422i12le",
.nb_components = 3,
.log2_chroma_w = 1,
.log2_chroma_h = 0,
.comp = {
{ 0, 4, 2, 0, 12, 3, 11, 3 }, /* Y */
{ 0, 8, 0, 0, 12, 7, 11, 1 }, /* U */
{ 0, 8, 4, 0, 12, 7, 11, 5 }, /* V */
- in libswscale/utils.c, add "[AV_PIX_FMT_UYVY422I12LE]= { 1, 1 }," in
format_entries
Once FFmpeg compiled with these modifications, if a do a ffplay on a raw
image in uyvy422i12le, I have this output which is uncorrect :
https://ibb.co/g7jG3ss
Here's the command line and the output :
./ffplay -f rawvideo -video_size 3840x2160 -pixel_format uyvy422i12le
test_in
ffplay version 48.1 Copyright (c) 2003-2019 the FFmpeg developers
built with gcc 6.3.0 (Debian 6.3.0-18+deb9u1) 20170516
configuration:
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
[rawvideo @ 0x7f47bc000940] Estimating duration from bitrate, this may be
inaccurate
Input #0, rawvideo, from 'test_in':
Duration: 00:00:00.04, start: 0.000000, bitrate: 6635520 kb/s
Stream #0:0: Video: rawvideo, uyvy422i12le, 3840x2160, 6635520 kb/s, 25
tbr, 25 tbn, 25 tbc
1.87 M-V: -0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
you can found the original image here : https://ibb.co/zZrvt5K (colorimetry
is strange but that's normal it's an HDR content).
It looks like I have set bad values in the struct AVComponentDescriptor of
AV_PIX_FMT_UYVY422I12LE, but I do not see which one... Or have I forgotten
to add other modifications necessary to a new pixel format ?
The FFmpeg used is from tag n.42 of the FFmpeg 's official repo.
More information about the ffmpeg-devel
mailing list