2 * Copyright (C) 2007 Marc Hoffman <marc.hoffman@analog.com>
4 * Blackfin Software Video SCALER Operations
6 * This file is part of FFmpeg.
8 * FFmpeg is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU Lesser General Public
10 * License as published by the Free Software Foundation; either
11 * version 2.1 of the License, or (at your option) any later version.
13 * FFmpeg is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
16 * Lesser General Public License for more details.
18 * You should have received a copy of the GNU Lesser General Public
19 * License along with FFmpeg; if not, write to the Free Software
20 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
35 #include "swscale_internal.h"
38 extern int ff_bfin_uyvytoyv12 (const uint8_t *src
, uint8_t *ydst
, uint8_t *udst
, uint8_t *vdst
,
39 long width
, long height
,
40 long lumStride
, long chromStride
, long srcStride
) __attribute__ ((l1_text
));
42 extern int ff_bfin_yuyvtoyv12 (const uint8_t *src
, uint8_t *ydst
, uint8_t *udst
, uint8_t *vdst
,
43 long width
, long height
,
44 long lumStride
, long chromStride
, long srcStride
) __attribute__ ((l1_text
));
46 static int uyvytoyv12_unscaled (SwsContext
*c
, uint8_t* src
[], int srcStride
[], int srcSliceY
,
47 int srcSliceH
, uint8_t* dst
[], int dstStride
[])
49 uint8_t *dsty
= dst
[0] + dstStride
[0]*srcSliceY
;
50 uint8_t *dstu
= dst
[1] + dstStride
[1]*srcSliceY
/2;
51 uint8_t *dstv
= dst
[2] + dstStride
[2]*srcSliceY
/2;
52 uint8_t *ip
= src
[0] + srcStride
[0]*srcSliceY
;
55 ff_bfin_uyvytoyv12 (ip
, dsty
, dstu
, dstv
, w
, srcSliceH
, dstStride
[0], dstStride
[1], srcStride
[0]);
60 static int yuyvtoyv12_unscaled (SwsContext
*c
, uint8_t* src
[], int srcStride
[], int srcSliceY
,
61 int srcSliceH
, uint8_t* dst
[], int dstStride
[])
63 uint8_t *dsty
= dst
[0] + dstStride
[0]*srcSliceY
;
64 uint8_t *dstu
= dst
[1] + dstStride
[1]*srcSliceY
/2;
65 uint8_t *dstv
= dst
[2] + dstStride
[2]*srcSliceY
/2;
66 uint8_t *ip
= src
[0] + srcStride
[0]*srcSliceY
;
69 ff_bfin_yuyvtoyv12 (ip
, dsty
, dstu
, dstv
, w
, srcSliceH
, dstStride
[0], dstStride
[1], srcStride
[0]);
75 void ff_bfin_get_unscaled_swscale (SwsContext
*c
)
77 SwsFunc swScale
= c
->swScale
;
78 if (c
->flags
& SWS_CPU_CAPS_BFIN
)
79 if (c
->dstFormat
== PIX_FMT_YUV420P
)
80 if (c
->srcFormat
== PIX_FMT_UYVY422
) {
81 av_log (NULL
, AV_LOG_VERBOSE
, "selecting Blackfin optimized uyvytoyv12_unscaled\n");
82 c
->swScale
= uyvytoyv12_unscaled
;
84 if (c
->dstFormat
== PIX_FMT_YUV420P
)
85 if (c
->srcFormat
== PIX_FMT_YUYV422
) {
86 av_log (NULL
, AV_LOG_VERBOSE
, "selecting Blackfin optimized yuyvtoyv12_unscaled\n");
87 c
->swScale
= yuyvtoyv12_unscaled
;