~ubuntu-branches/ubuntu/feisty/avidemux/feisty

« back to all changes in this revision

Viewing changes to avidemux/ADM_colorspace/ADM_rgb.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Daniel T Chen
  • Date: 2006-12-15 17:13:20 UTC
  • mfrom: (1.1.6 upstream)
  • Revision ID: james.westby@ubuntu.com-20061215171320-w79pvpehxx2fr217
Tags: 1:2.3.0-0.0ubuntu1
* Merge from debian-multimedia.org, remaining Ubuntu change:
  - desktop file,
  - no support for ccache and make -j.
* Closes Ubuntu: #69614.

Show diffs side-by-side

added added

removed removed

Lines of Context:
29
29
#include "ADM_toolkit/ADM_cpuCap.h"
30
30
#if (defined( ARCH_X86)  || defined(ARCH_X86_64))
31
31
extern "C" {
32
 
#include "../../adm_lavcodec/avcodec.h"
 
32
#include "ADM_lavcodec/avcodec.h"
33
33
}
34
34
#endif
35
35
 
36
 
#include "../MPlayer_pp/img_format.h"
37
 
#include "../MPlayer_pp/swscale.h"
 
36
#include "../ADM_lavutil/avutil.h"
 
37
#include "../ADM_libswscale/swscale.h"
38
38
#include "ADM_rgb.h" 
39
39
 
40
40
#define CLEANUP() \
57
57
#endif
58
58
 
59
59
#ifdef ADM_BIG_ENDIAN
60
 
              #define TARGET_COLORSPACE       IMGFMT_BGRA 
 
60
              #define TARGET_COLORSPACE       PIX_FMT_RGB32 
61
61
//              #define TARGET_COLORSPACE       IMGFMT_ABGR
62
62
//              #define TARGET_COLORSPACE       IMGFMT_RGB32
63
63
//              #define TARGET_COLORSPACE      IMGFMT_BGR32
64
64
#else
65
 
              #define TARGET_COLORSPACE      IMGFMT_RGB32
 
65
              #define TARGET_COLORSPACE      PIX_FMT_RGB32
66
66
#endif
67
67
 
68
68
 
107
107
    
108
108
         _context=(void *)sws_getContext(
109
109
                                                ww,hh,
110
 
                                                IMGFMT_YV12 ,
 
110
                                                PIX_FMT_YUV420P ,
111
111
                                                ww,hh,
112
112
                                                TARGET_COLORSPACE,
113
113
                                                flags, NULL, NULL,NULL);
145
145
                        ddst[1]=ddst[2]=0;
146
146
 
147
147
                        sws_scale((SwsContext *)_context,srd,ssrc,0,h,dst,ddst);
 
148
#if  defined( ADM_BIG_ENDIAN)
 
149
        uint8_t r,g,b,a;
 
150
        uint8_t *ptr=target;
 
151
        int pel=h*w;
 
152
        for(int yy=0;yy<pel;yy++)
 
153
        {
 
154
              r=ptr[0];
 
155
              g=ptr[1];
 
156
              b=ptr[2];
 
157
              a=ptr[3];
 
158
              ptr[0]=a;
 
159
              ptr[1]=b;
 
160
              ptr[2]=g;
 
161
              ptr[3]=r;
 
162
              ptr+=4;
 
163
        }
 
164
#endif
148
165
     
149
166
        return 1;
150
167
 }
158
175
   
159
176
         _context=(void *)sws_getContext(
160
177
                                                ww,hh,
161
 
                                                IMGFMT_YV12 ,
 
178
                                                PIX_FMT_YUV420P ,
162
179
                                                ww,hh,
163
 
                                                IMGFMT_RGB24,
 
180
                                                PIX_FMT_RGB24,
164
181
                                                flags, NULL, NULL,NULL);
165
182
 
166
183
    if(!_context) ADM_assert(0);
210
227
    flags|=SWS_BILINEAR;
211
228
    switch(_colorspace)
212
229
    {
213
 
                case ADM_COLOR_RGB24:c=IMGFMT_RGB24;break;
 
230
                case ADM_COLOR_RGB24:c=PIX_FMT_RGB24;break;
214
231
                case ADM_COLOR_RGB32A:c=TARGET_COLORSPACE;break;
215
 
                case ADM_COLOR_RGB16:c=IMGFMT_RGB16;break;
 
232
                case ADM_COLOR_RGB16:c=PIX_FMT_RGB565;break;
216
233
                default: ADM_assert(0);
217
234
    }
218
235
         _context=(void *)sws_getContext(
219
236
                                                ww,hh,
220
237
                                                c ,
221
238
                                                ww,hh,
222
 
                                                IMGFMT_YV12,
 
239
                                                PIX_FMT_YUV420P,
223
240
                                                flags, NULL, NULL,NULL);
224
241
 
225
242
    if(!_context) ADM_assert(0);
284
301
 }
285
302
 uint8_t ColRgbToYV12::changeColorSpace(ADM_colorspace col)
286
303
 {
287
 
    if(col==_colorspace) return 1;
288
 
    _colorspace=col;
 
304
int z;
 
305
    
 
306
    z=(int)col;
 
307
    _backward=!!(z & ADM_COLOR_BACKWARD);
 
308
    z&=~ADM_COLOR_BACKWARD;
 
309
    _colorspace= (ADM_colorspace) z;
289
310
       
290
311
 }
291
312
 //*************************
299
320
       r=*src++;
300
321
       g=*src++;
301
322
       b=*src++;
 
323
       *tgt++=r;
 
324
       *tgt++=g;
302
325
       *tgt++=b;
303
 
       *tgt++=g;
304
 
       *tgt++=r;
305
326
       
306
327
   }
307
328
   return;
349
370
        _context=NULL;
350
371
        w=ww;
351
372
        h=hh;
352
 
        _colorspace=col;
 
373
        _colorspace=(ADM_colorspace)(col & ADM_COLOR_MASK);
 
374
        _backward= !!(col & ADM_COLOR_BACKWARD);
353
375
      
354
376
 
355
377
    switch(_colorspace)
356
378
    {
357
379
     
358
 
                case ADM_COLOR_BGR24:c=IMGFMT_BGR24;break;
359
 
                case ADM_COLOR_RGB24:c=IMGFMT_RGB24;break;
360
 
                case ADM_COLOR_RGB555:c=IMGFMT_RGB15;break;
361
 
                case ADM_COLOR_BGR555:c=IMGFMT_BGR15;break;
362
 
                case ADM_COLOR_BGR32A:c=IMGFMT_BGR32;break;
 
380
                case ADM_COLOR_BGR24:c=PIX_FMT_BGR24;break;
 
381
                case ADM_COLOR_RGB24:c=PIX_FMT_RGB24;break;
 
382
                case ADM_COLOR_RGB555:c=PIX_FMT_RGB555;break;
 
383
                case ADM_COLOR_BGR555:c=PIX_FMT_BGR555;break;
 
384
                case ADM_COLOR_BGR32A:c=PIX_FMT_BGRA;break;
363
385
                case ADM_COLOR_RGB32A:c=TARGET_COLORSPACE;break;
364
 
                case ADM_COLOR_RGB16:c=IMGFMT_RGB16;break;
365
 
                case ADM_COLOR_YUV422:c=IMGFMT_422P;break;
366
 
                case ADM_COLOR_YUV411:c=IMGFMT_411P;break;
 
386
                case ADM_COLOR_RGB16:c=PIX_FMT_RGB565;break;
 
387
                case ADM_COLOR_YUV422:c=PIX_FMT_YUV422P;break;
 
388
                case ADM_COLOR_YUV411:c=PIX_FMT_YUV411P;break;
367
389
                default: ADM_assert(0);
368
390
    }
369
391
         _context=(void *)sws_getContext(
370
392
                                                ww,hh,
371
393
                                                c ,
372
394
                                                ww,hh,
373
 
                                                IMGFMT_YV12,
 
395
                                                PIX_FMT_YUV420P,
374
396
                                                flags, NULL, NULL,NULL);
375
397
 
376
398
    if(!_context) ADM_assert(0);
419
441
                return 1;
420
442
        }
421
443
        // Else RGB like colorspace
422
 
        switch(_colorspace)
 
444
        switch(_colorspace&0x7FFF )
423
445
        {
424
446
                case ADM_COLOR_RGB16:  
425
447
                case ADM_COLOR_RGB555:  
439
461
        srd[2]=0;
440
462
 
441
463
        ssrc[0]=mul*w;
 
464
        if(strides)
 
465
        {
 
466
          if(strides[0]>ssrc[0]) ssrc[0]=strides[0]; 
 
467
        }
442
468
        ssrc[1]=0;
443
469
        ssrc[2]=0;
444
470
 
447
473
        dst[2]=target+((page*5)>>2);
448
474
        ddst[0]=w;
449
475
        ddst[1]=ddst[2]=w>>1;
450
 
        if(_colorspace==ADM_COLOR_BGR24 || _colorspace==ADM_COLOR_BGR32A)
 
476
        if(_backward && (_colorspace==ADM_COLOR_BGR24 || _colorspace==ADM_COLOR_BGR32A || _colorspace==ADM_COLOR_RGB32A || 
 
477
                    _colorspace==ADM_COLOR_RGB24))
451
478
        {
452
479
                ssrc[0]=-mul*w;
453
480
                srd[0]=planes[0]+mul*w*(h-1);