[FFmpeg-devel] [PATCH] avcodec/imgconvert: Support non-planar colorspaces while padding
Przemysław Sobala
przemyslaw.sobala at grupawp.pl
Sat Sep 19 12:33:55 CEST 2015
W dniu 19.09.2015 o 04:14, Michael Niedermayer pisze:
> On Fri, Sep 18, 2015 at 04:31:16PM +0200, Przemysław Sobala wrote:
>> ---
>> libavcodec/imgconvert.c | 99 ++++++++++++++++++++++++++++++++-----------------
>> 1 file changed, 65 insertions(+), 34 deletions(-)
>>
>> diff --git a/libavcodec/imgconvert.c b/libavcodec/imgconvert.c
>> index dc67560..a523bd5 100644
>> --- a/libavcodec/imgconvert.c
>> +++ b/libavcodec/imgconvert.c
>> @@ -236,54 +236,85 @@ int av_picture_pad(AVPicture *dst, const AVPicture *src, int height, int width,
>> int x_shift;
>> int yheight;
>> int i, y;
>> + int max_step[4];
>>
>> - if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB ||
>> - !is_yuv_planar(desc)) return -1;
>> + if (pix_fmt < 0 || pix_fmt >= AV_PIX_FMT_NB)
>> + return -1;
>>
>> - for (i = 0; i < 3; i++) {
>> - x_shift = i ? desc->log2_chroma_w : 0;
>> - y_shift = i ? desc->log2_chroma_h : 0;
>> + if (is_yuv_planar(desc)) {
>> + for (i = 0; i < 3; i++) {
>> + x_shift = i ? desc->log2_chroma_w : 0;
>> + y_shift = i ? desc->log2_chroma_h : 0;
>>
>> - if (padtop || padleft) {
>> - memset(dst->data[i], color[i],
>> - dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift));
>> - }
>> + if (padtop || padleft) {
>> + memset(dst->data[i], color[i],
>> + dst->linesize[i] * (padtop >> y_shift) + (padleft >> x_shift));
>> + }
>>
>> - if (padleft || padright) {
>> - optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
>> - (dst->linesize[i] - (padright >> x_shift));
>> - yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
>> - for (y = 0; y < yheight; y++) {
>> - memset(optr, color[i], (padleft + padright) >> x_shift);
>> - optr += dst->linesize[i];
>> + if (padleft || padright) {
>> + optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
>> + (dst->linesize[i] - (padright >> x_shift));
>> + yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
>> + for (y = 0; y < yheight; y++) {
>> + memset(optr, color[i], (padleft + padright) >> x_shift);
>> + optr += dst->linesize[i];
>> + }
>> }
>> +
>> + if (src) { /* first line */
>> + uint8_t *iptr = src->data[i];
>> + optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
>> + (padleft >> x_shift);
>> + memcpy(optr, iptr, (width - padleft - padright) >> x_shift);
>> + iptr += src->linesize[i];
>> + optr = dst->data[i] + dst->linesize[i] * (padtop >> y_shift) +
>> + (dst->linesize[i] - (padright >> x_shift));
>> + yheight = (height - 1 - (padtop + padbottom)) >> y_shift;
>> + for (y = 0; y < yheight; y++) {
>> + memset(optr, color[i], (padleft + padright) >> x_shift);
>> + memcpy(optr + ((padleft + padright) >> x_shift), iptr,
>> + (width - padleft - padright) >> x_shift);
>> + iptr += src->linesize[i];
>> + optr += dst->linesize[i];
>> + }
>> + }
>> +
>> + if (padbottom || padright) {
>> + optr = dst->data[i] + dst->linesize[i] *
>> + ((height - padbottom) >> y_shift) - (padright >> x_shift);
>> + memset(optr, color[i],dst->linesize[i] *
>> + (padbottom >> y_shift) + (padright >> x_shift));
>> + }
>> + }
>
> this only reindents the code, moving the reindention to a seperate
> patch would make it more readable
I've rearranged the code a bit.
>> + } else {
>
>> + if (src)
>> + return -1;
>
> why ?
>
Because it's not yet implemented.
I've added a comment.
New patch attached.
--
Regards
Przemysław Sobala
Główne Spółki Grupy Wirtualna Polska:
Wirtualna Polska Holding Spółka Akcyjna z siedzibą w Warszawie, ul. Jutrzenki 137A, 02-231 Warszawa, wpisana do Krajowego Rejestru Sądowego - Rejestru Przedsiębiorców prowadzonego przez Sąd Rejonowy dla m.st. Warszawy w Warszawie pod nr KRS: 0000407130, kapitał zakładowy: 1 245 651,90 zł (w całości wpłacony), Numer Identyfikacji Podatkowej (NIP): 521-31-11-513
Grupa Wirtualna Polska Spółka z ograniczoną odpowiedzialnością z siedzibą w Warszawie, ul. Jutrzenki 137A, 02-231 Warszawa, wpisana do Krajowego Rejestru Sądowego - Rejestru Przedsiębiorców prowadzonego przez Sąd Rejonowy dla m.st. Warszawy w Warszawie pod nr KRS: 0000373814, kapitał zakładowy: 317 957 800,00 zł, Numer Identyfikacji Podatkowej (NIP): 527-26-45-593
WP Shopping Spółka z ograniczoną odpowiedzialnością z siedzibą w Gdańsku, ul. Romualda Traugutta 115 C, 80-226 Gdańsk, wpisana do Krajowego Rejestru Sądowego - Rejestru Przedsiębiorców prowadzonego przez Sąd Rejonowy Gdańsk - Północ w Gdańsku pod nr KRS: 0000546914, kapitał zakładowy: 170.000,00 złotych (w całości wpłacony), Numer Identyfikacji Podatkowej (NIP): 957-07-51-216
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-avcodec-imgconvert-Support-non-planar-colorspaces-wh.patch
Type: text/x-patch
Size: 2326 bytes
Desc: not available
URL: <http://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20150919/76d0589b/attachment.bin>
More information about the ffmpeg-devel
mailing list