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
32 #include "swscale_internal.h"
35 #define L1CODE __attribute__ ((l1_text))
40 int ff_bfin_uyvytoyv12 (const uint8_t *src
, uint8_t *ydst
, uint8_t *udst
, uint8_t *vdst
,
41 long width
, long height
,
42 long lumStride
, long chromStride
, long srcStride
) L1CODE
;
44 int ff_bfin_yuyvtoyv12 (const uint8_t *src
, uint8_t *ydst
, uint8_t *udst
, uint8_t *vdst
,
45 long width
, long height
,
46 long lumStride
, long chromStride
, long srcStride
) L1CODE
;
48 static int uyvytoyv12_unscaled (SwsContext
*c
, uint8_t* src
[], int srcStride
[], int srcSliceY
,
49 int srcSliceH
, uint8_t* dst
[], int dstStride
[])
51 uint8_t *dsty
= dst
[0] + dstStride
[0]*srcSliceY
;
52 uint8_t *dstu
= dst
[1] + dstStride
[1]*srcSliceY
/2;
53 uint8_t *dstv
= dst
[2] + dstStride
[2]*srcSliceY
/2;
54 uint8_t *ip
= src
[0] + srcStride
[0]*srcSliceY
;
57 ff_bfin_uyvytoyv12 (ip
, dsty
, dstu
, dstv
, w
, srcSliceH
, dstStride
[0], dstStride
[1], srcStride
[0]);
62 static int yuyvtoyv12_unscaled (SwsContext
*c
, uint8_t* src
[], int srcStride
[], int srcSliceY
,
63 int srcSliceH
, uint8_t* dst
[], int dstStride
[])
65 uint8_t *dsty
= dst
[0] + dstStride
[0]*srcSliceY
;
66 uint8_t *dstu
= dst
[1] + dstStride
[1]*srcSliceY
/2;
67 uint8_t *dstv
= dst
[2] + dstStride
[2]*srcSliceY
/2;
68 uint8_t *ip
= src
[0] + srcStride
[0]*srcSliceY
;
71 ff_bfin_yuyvtoyv12 (ip
, dsty
, dstu
, dstv
, w
, srcSliceH
, dstStride
[0], dstStride
[1], srcStride
[0]);
77 void ff_bfin_get_unscaled_swscale (SwsContext
*c
)
79 SwsFunc swScale
= c
->swScale
;
80 if (c
->flags
& SWS_CPU_CAPS_BFIN
)
81 if (c
->dstFormat
== PIX_FMT_YUV420P
)
82 if (c
->srcFormat
== PIX_FMT_UYVY422
) {
83 av_log (NULL
, AV_LOG_VERBOSE
, "selecting Blackfin optimized uyvytoyv12_unscaled\n");
84 c
->swScale
= uyvytoyv12_unscaled
;
86 if (c
->dstFormat
== PIX_FMT_YUV420P
)
87 if (c
->srcFormat
== PIX_FMT_YUYV422
) {
88 av_log (NULL
, AV_LOG_VERBOSE
, "selecting Blackfin optimized yuyvtoyv12_unscaled\n");
89 c
->swScale
= yuyvtoyv12_unscaled
;