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
,
58 dstStride
[0], dstStride
[1], srcStride
[0]);
63 static int yuyvtoyv12_unscaled(SwsContext
*c
, uint8_t* src
[], int srcStride
[], int srcSliceY
,
64 int srcSliceH
, uint8_t* dst
[], int dstStride
[])
66 uint8_t *dsty
= dst
[0] + dstStride
[0]*srcSliceY
;
67 uint8_t *dstu
= dst
[1] + dstStride
[1]*srcSliceY
/2;
68 uint8_t *dstv
= dst
[2] + dstStride
[2]*srcSliceY
/2;
69 uint8_t *ip
= src
[0] + srcStride
[0]*srcSliceY
;
72 ff_bfin_yuyvtoyv12(ip
, dsty
, dstu
, dstv
, w
, srcSliceH
,
73 dstStride
[0], dstStride
[1], srcStride
[0]);
79 void ff_bfin_get_unscaled_swscale(SwsContext
*c
)
81 SwsFunc swScale
= c
->swScale
;
82 if (c
->flags
& SWS_CPU_CAPS_BFIN
)
83 if (c
->dstFormat
== PIX_FMT_YUV420P
)
84 if (c
->srcFormat
== PIX_FMT_UYVY422
) {
85 av_log (NULL
, AV_LOG_VERBOSE
, "selecting Blackfin optimized uyvytoyv12_unscaled\n");
86 c
->swScale
= uyvytoyv12_unscaled
;
88 if (c
->dstFormat
== PIX_FMT_YUV420P
)
89 if (c
->srcFormat
== PIX_FMT_YUYV422
) {
90 av_log (NULL
, AV_LOG_VERBOSE
, "selecting Blackfin optimized yuyvtoyv12_unscaled\n");
91 c
->swScale
= yuyvtoyv12_unscaled
;