From: Michael Niedermayer <michael@niedermayer.cc> To: FFmpeg development discussions and patches <ffmpeg-devel@ffmpeg.org> Subject: Re: [FFmpeg-devel] [PATCH v1 3/6] swscale: Add explicit rgb24->yv12 conversion Date: Mon, 21 Aug 2023 21:15:37 +0200 Message-ID: <20230821191537.GE7802@pb2> (raw) In-Reply-To: <5pl4eilterjun2l0up51r8jg1pvdluq7b2@4ax.com> [-- Attachment #1.1: Type: text/plain, Size: 7097 bytes --] On Sun, Aug 20, 2023 at 07:28:40PM +0100, John Cox wrote: > On Sun, 20 Aug 2023 19:45:11 +0200, you wrote: > > >On Sun, Aug 20, 2023 at 07:16:14PM +0200, Michael Niedermayer wrote: > >> On Sun, Aug 20, 2023 at 03:10:19PM +0000, John Cox wrote: > >> > Add a rgb24->yuv420p conversion. Uses the same code as the existing > >> > bgr24->yuv converter but permutes the conversion array to swap R & B > >> > coefficients. > >> > > >> > Signed-off-by: John Cox <jc@kynesim.co.uk> > >> > --- > >> > libswscale/rgb2rgb.c | 5 +++++ > >> > libswscale/rgb2rgb.h | 7 +++++++ > >> > libswscale/rgb2rgb_template.c | 38 ++++++++++++++++++++++++++++++----- > >> > libswscale/swscale_unscaled.c | 24 +++++++++++++++++++++- > >> > 4 files changed, 68 insertions(+), 6 deletions(-) > >> > > >> > diff --git a/libswscale/rgb2rgb.c b/libswscale/rgb2rgb.c > >> > index 8707917800..de90e5193f 100644 > >> > --- a/libswscale/rgb2rgb.c > >> > +++ b/libswscale/rgb2rgb.c > >> > @@ -83,6 +83,11 @@ void (*ff_bgr24toyv12)(const uint8_t *src, uint8_t *ydst, > >> > int width, int height, > >> > int lumStride, int chromStride, int srcStride, > >> > int32_t *rgb2yuv); > >> > +void (*ff_rgb24toyv12)(const uint8_t *src, uint8_t *ydst, > >> > + uint8_t *udst, uint8_t *vdst, > >> > + int width, int height, > >> > + int lumStride, int chromStride, int srcStride, > >> > + int32_t *rgb2yuv); > >> > void (*planar2x)(const uint8_t *src, uint8_t *dst, int width, int height, > >> > int srcStride, int dstStride); > >> > void (*interleaveBytes)(const uint8_t *src1, const uint8_t *src2, uint8_t *dst, > >> > diff --git a/libswscale/rgb2rgb.h b/libswscale/rgb2rgb.h > >> > index 305b830920..f7a76a92ba 100644 > >> > --- a/libswscale/rgb2rgb.h > >> > +++ b/libswscale/rgb2rgb.h > >> > @@ -79,6 +79,9 @@ void rgb12to15(const uint8_t *src, uint8_t *dst, int src_size); > >> > void ff_bgr24toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, > >> > uint8_t *vdst, int width, int height, int lumStride, > >> > int chromStride, int srcStride, int32_t *rgb2yuv); > >> > +void ff_rgb24toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, > >> > + uint8_t *vdst, int width, int height, int lumStride, > >> > + int chromStride, int srcStride, int32_t *rgb2yuv); > >> > > >> > /** > >> > * Height should be a multiple of 2 and width should be a multiple of 16. > >> > @@ -128,6 +131,10 @@ extern void (*ff_bgr24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, > >> > int width, int height, > >> > int lumStride, int chromStride, int srcStride, > >> > int32_t *rgb2yuv); > >> > +extern void (*ff_rgb24toyv12)(const uint8_t *src, uint8_t *ydst, uint8_t *udst, uint8_t *vdst, > >> > + int width, int height, > >> > + int lumStride, int chromStride, int srcStride, > >> > + int32_t *rgb2yuv); > >> > extern void (*planar2x)(const uint8_t *src, uint8_t *dst, int width, int height, > >> > int srcStride, int dstStride); > >> > > >> > diff --git a/libswscale/rgb2rgb_template.c b/libswscale/rgb2rgb_template.c > >> > index 8ef4a2cf5d..e57bfa6545 100644 > >> > --- a/libswscale/rgb2rgb_template.c > >> > +++ b/libswscale/rgb2rgb_template.c > >> > >> > >> > @@ -646,13 +646,14 @@ static inline void uyvytoyv12_c(const uint8_t *src, uint8_t *ydst, > >> > * others are ignored in the C version. > >> > * FIXME: Write HQ version. > >> > */ > >> > -void ff_bgr24toyv12_c(const uint8_t *src, uint8_t *ydst, uint8_t *udst, > >> > +static void rgb24toyv12_x(const uint8_t *src, uint8_t *ydst, uint8_t *udst, > >> > >> this probably should be inline > >> > >> also i see now "FIXME: Write HQ version." above here. Do you really want to > >> add a low quality rgb24toyv12 ? > >> (it is vissible on the diagonal border (cyan / red )) in > >> ./ffmpeg -f lavfi -i testsrc=size=5632x3168 -pix_fmt yuv420p -vframes 1 -qscale 1 -strict -1 new.jpg > >> > >> also on smaller sizes but for some reason its clearer on the big one zoomed in 400% with gimp > >> (the gimp test was done with the whole patchset not after this patch) > > > >Also the reason why its LQ and looks like it does is because > >1. half the RGB samples are ignored in computing the chroma samples > > I thought it was a bit light but it is what the existing code did > > >2. the chroma sample locations are ignored, the locations for yuv420 are reaonable standard > > As I recall MPEG-1 has chroma at (0.5, 0.5), MPEG-II defaults to (0.5, > 0), yes > H.265 defaults to (0,0). hmm When the value of chroma_format_idc is equal to 1, the nominal vertical and horizontal relative locations of luma and chroma samples in pictures are shown in Figure 6-1. Alternative chroma sample relative locations may be indicated in video usability information (see Annex E). X X X X X X O O O ... X X X X X X X X X X X X O O O X X X X X X X X X X X X O O O X X X X X X . . : ´. X Location of luma sample O Location of chroma sample Figure 6-1 – Nominal vertical and horizontal locations of 4:2:0 luma and chroma samples in a picture > Printing out dst_h_chr_pos, dst_v_chr_pos > in the setup of your example yields -513, 128 which I'm guessing means > (unset, 0.5) - am I looking at the correct vars? > > >this needs some simple filter to get from a few RGB samples to the RGB sample co-located > >with ths UV sample before RGB->UV > > I can get to simple bilinear without adding so much complexity that I > lose the speed I need - would that be OK? Not sure simple bilinear is 100% clearly defined I think it could mean 3 things 1 2 1 C 1 2 1 or 1 C 1 or 1 2 1 3 6 3 C 3 6 3 1 2 1 I think the 6 and 12 tap cases would produce ok results teh 2 tap not Also maybe there are more finetuned filters for this specific case, i dont know / didnt look. Testing these probably would not be a bad idea before implementation I think users in 2023 expect the default to be better than what the existing code was doing by default so feel free to replace the existing "identical" code too [...] thx -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB The day soldiers stop bringing you their problems is the day you have stopped leading them. They have either lost confidence that you can help or concluded you do not care. Either case is a failure of leadership. - Colin Powell [-- Attachment #1.2: signature.asc --] [-- Type: application/pgp-signature, Size: 195 bytes --] [-- Attachment #2: Type: text/plain, Size: 251 bytes --] _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2023-08-21 19:15 UTC|newest] Thread overview: 14+ messages / expand[flat|nested] mbox.gz Atom feed top 2023-08-20 15:10 [FFmpeg-devel] [PATCH v1 0/6] swscale: Add dedicated RGB->YUV unscaled functions & aarch64 asm John Cox 2023-08-20 15:10 ` [FFmpeg-devel] [PATCH v1 1/6] fate-filter-fps: Set swscale bitexact for tests that do conversions John Cox 2023-08-20 15:10 ` [FFmpeg-devel] [PATCH v1 2/6] swscale: Rename BGR24->YUV conversion functions as bgr John Cox 2023-08-20 15:10 ` [FFmpeg-devel] [PATCH v1 3/6] swscale: Add explicit rgb24->yv12 conversion John Cox 2023-08-20 17:16 ` Michael Niedermayer 2023-08-20 17:45 ` Michael Niedermayer 2023-08-20 18:28 ` John Cox 2023-08-21 19:15 ` Michael Niedermayer [this message] 2023-08-22 14:24 ` John Cox 2023-08-22 18:03 ` Michael Niedermayer 2023-08-20 18:09 ` John Cox 2023-08-20 15:10 ` [FFmpeg-devel] [PATCH v1 4/6] swscale: RGB24->YUV allow odd widths & improve C rounding John Cox 2023-08-20 15:10 ` [FFmpeg-devel] [PATCH v1 5/6] swscale: Add unscaled XRGB->YUV420P functions John Cox 2023-08-20 15:10 ` [FFmpeg-devel] [PATCH v1 6/6] swscale: Add aarch64 functions for RGB24->YUV420P John Cox
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20230821191537.GE7802@pb2 \ --to=michael@niedermayer.cc \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git