~ubuntu-branches/ubuntu/trusty/gavl/trusty

« back to all changes in this revision

Viewing changes to gavl/scale_table.c

  • Committer: Bazaar Package Importer
  • Author(s): Free Ekanayaka
  • Date: 2007-04-16 12:53:08 UTC
  • mfrom: (1.1.1 upstream)
  • Revision ID: james.westby@ubuntu.com-20070416125308-k8gdo9sofz72gjkf
Tags: 0.2.5-1
* New upstream release
* Adapted fpic.patch to the new version
* Fixed broken watch file

Show diffs side-by-side

added added

removed removed

Lines of Context:
92
92
  
93
93
  weight_func = gavl_video_scale_get_weight_func(opt, &(tab->factors_per_pixel));
94
94
 
 
95
  //  fprintf(stderr, "tab->factors_per_pixel: %d, src_width: %d\n",
 
96
  //          tab->factors_per_pixel, src_width);
 
97
  
 
98
  if(tab->factors_per_pixel > src_width)
 
99
    {
 
100
    switch(src_width)
 
101
      {
 
102
      case 1:
 
103
        opt->scale_mode = GAVL_SCALE_NEAREST;
 
104
        //        fprintf(stderr, "gavl: Changing scale mode to nearest (image too small)\n");
 
105
        break;
 
106
      case 2:
 
107
      case 3:
 
108
        opt->scale_mode = GAVL_SCALE_BILINEAR;
 
109
        //        fprintf(stderr, "gavl: Changing scale mode to bilinear (image too small)\n");
 
110
        break;
 
111
      default:
 
112
        opt->scale_mode = GAVL_SCALE_CUBIC_BSPLINE;
 
113
        //        fprintf(stderr, "gavl: Changing scale mode to bspline (image too small)\n");
 
114
        break;
 
115
      }
 
116
    weight_func = gavl_video_scale_get_weight_func(opt, &(tab->factors_per_pixel));
 
117
    }
 
118
  
95
119
  //  fprintf(stderr, "gavl_video_scale_table_init: %f %f %d %d\n", 
96
120
  //          src_off, src_size, dst_size, tab->factors_per_pixel);
97
121
  
190
214
    for(j = 0; j < tab->factors_per_pixel; j++)
191
215
      sum += tab->pixels[i].factor[j].fac_f;
192
216
 
 
217
    // fprintf(stderr, "sum: %f\n", sum);
 
218
    
193
219
    for(j = 0; j < tab->factors_per_pixel; j++)
194
220
      tab->pixels[i].factor[j].fac_f /= sum;
195
221
    }
314
340
void gavl_video_scale_table_init_int(gavl_video_scale_table_t * tab,
315
341
                                     int bits)
316
342
  {
317
 
  int fac_max_i, i, imax;
 
343
  int fac_max_i, i, j;
318
344
  float fac_max_f;
 
345
  int sum, index;
 
346
  int min_index, max_index;
319
347
  //  fprintf(stderr, "gavl_video_scale_table_init_int: %d\n", bits);
320
 
  imax = tab->num_pixels * tab->factors_per_pixel;
321
 
 
322
 
  fac_max_i = (1<<bits) - 1;
 
348
  
 
349
  //  fac_max_i = (1<<bits) - 1;
 
350
  fac_max_i = (1<<bits);
323
351
  fac_max_f = (float)(fac_max_i);
 
352
 
 
353
  index = 0;
 
354
  
 
355
  for(i = 0; i < tab->num_pixels; i++)
 
356
    {
 
357
    min_index = index;
 
358
    max_index = index;
324
359
    
325
 
  for(i = 0; i < imax; i++)
326
 
    {
327
 
    tab->factors[i].fac_i = (int)(fac_max_f * tab->factors[i].fac_f+0.5);
328
 
    //    fprintf(stderr, "%f -> %d\n", tab->factors[i].fac_f, tab->factors[i].fac_i);
 
360
    sum = 0;
 
361
    for(j = 0; j < tab->factors_per_pixel; j++)
 
362
      {
 
363
      tab->factors[index].fac_i =
 
364
        (int)(fac_max_f * tab->factors[index].fac_f+0.5);
 
365
      sum += tab->factors[index].fac_i;
 
366
 
 
367
      if(j)
 
368
        {
 
369
        if(tab->factors[index].fac_i > tab->factors[max_index].fac_i)
 
370
          max_index = index;
 
371
        if(tab->factors[index].fac_i < tab->factors[min_index].fac_i)
 
372
          min_index = index;
 
373
        }
 
374
      index++;
 
375
      }
 
376
#if 1
 
377
    if(sum > fac_max_i)
 
378
      tab->factors[max_index].fac_i -= (sum - fac_max_i);
 
379
    else if(sum < fac_max_i)
 
380
      tab->factors[min_index].fac_i += (fac_max_i - sum);
 
381
    //    fprintf(stderr, "sum: %08x\n", sum);
 
382
#endif
329
383
    }
330
384
  }
331
385