[cvs] / xvidcore / src / xvid.c Repository:
ViewVC logotype

Diff of /xvidcore/src/xvid.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.77, Fri Nov 28 16:42:50 2008 UTC revision 1.86, Fri Dec 31 11:30:38 2010 UTC
# Line 4  Line 4 
4   *  - Native API implementation  -   *  - Native API implementation  -
5   *   *
6   *  Copyright(C) 2001-2004 Peter Ross <pross@xvid.org>   *  Copyright(C) 2001-2004 Peter Ross <pross@xvid.org>
7     *               2002-2010 Michael Militzer <isibaar@xvid.org>
8   *   *
9   *  This program is free software ; you can redistribute it and/or modify   *  This program is free software ; you can redistribute it and/or modify
10   *  it under the terms of the GNU General Public License as published by   *  it under the terms of the GNU General Public License as published by
# Line 28  Line 29 
29  #include <string.h>  #include <string.h>
30  #include <time.h>  #include <time.h>
31    
32    #if !defined(_WIN32)
33    #include <unistd.h>
34    #endif
35    
36    #if defined(__APPLE__) && defined(__MACH__) && !defined(_SC_NPROCESSORS_CONF)
37    #include <sys/types.h>
38    #include <sys/sysctl.h>
39    #ifdef MAX
40    #undef MAX
41    #endif
42    #ifdef MIN
43    #undef MIN
44    #endif
45    #endif
46    
47    #if defined(__amigaos4__)
48    #include <exec/exec.h>
49    #include <proto/exec.h>
50    #endif
51    
52  #include "xvid.h"  #include "xvid.h"
53  #include "decoder.h"  #include "decoder.h"
54  #include "encoder.h"  #include "encoder.h"
# Line 54  Line 75 
75    
76  #if (defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)) && defined(_MSC_VER)  #if (defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)) && defined(_MSC_VER)
77  #       include <windows.h>  #       include <windows.h>
78  #elif defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64) || defined(ARCH_IS_PPC)  #elif defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64) || (defined(ARCH_IS_PPC) && !defined(__amigaos4__))
79  #       include <signal.h>  #       include <signal.h>
80  #       include <setjmp.h>  #       include <setjmp.h>
81    
# Line 67  Line 88 
88          }          }
89  #endif  #endif
90    
   
91  /*  /*
92   * Calls the funcptr, and returns whether SIGILL (illegal instruction) was   * Calls the funcptr, and returns whether SIGILL (illegal instruction) was
93   * signalled   * signalled
# Line 90  Line 110 
110          }          }
111          return(0);          return(0);
112  }  }
113  #elif defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64) || defined(ARCH_IS_PPC)  #elif defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64) || (defined(ARCH_IS_PPC) && !defined(__amigaos4__))
114  static int  static int
115  sigill_check(void (*func)())  sigill_check(void (*func)())
116  {  {
# Line 142  Line 162 
162  #endif  #endif
163    
164  #if defined(ARCH_IS_PPC)  #if defined(ARCH_IS_PPC)
165    #if defined(__amigaos4__)
166            {
167                    uint32_t vector_unit = VECTORTYPE_NONE;
168                    IExec->GetCPUInfoTags(GCIT_VectorUnit, &vector_unit, TAG_END);
169                    if (vector_unit == VECTORTYPE_ALTIVEC) {
170                            cpu_flags |= XVID_CPU_ALTIVEC;
171                    }
172            }
173    #else
174          if (!sigill_check(altivec_trigger))          if (!sigill_check(altivec_trigger))
175                  cpu_flags |= XVID_CPU_ALTIVEC;                  cpu_flags |= XVID_CPU_ALTIVEC;
176  #endif  #endif
177    #endif
178    
179          return cpu_flags;          return cpu_flags;
180  }  }
181    
182    
183  /*****************************************************************************  /*****************************************************************************
184   * XviD Init Entry point   * Xvid Init Entry point
185   *   *
186   * Well this function initialize all internal function pointers according   * Well this function initialize all internal function pointers according
187   * to the CPU features forced by the library client or autodetected (depending   * to the CPU features forced by the library client or autodetected (depending
# Line 309  Line 339 
339          sse8_16bit = sse8_16bit_c;          sse8_16bit = sse8_16bit_c;
340          sse8_8bit  = sse8_8bit_c;          sse8_8bit  = sse8_8bit_c;
341    
342            sseh8_16bit   = sseh8_16bit_c;
343            coeff8_energy = coeff8_energy_c;
344            blocksum8     = blocksum8_c;
345    
346          init_GMC(cpu_flags);          init_GMC(cpu_flags);
347    
348  #if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)  #if defined(ARCH_IS_IA32) || defined(ARCH_IS_X86_64)
# Line 540  Line 574 
574                  sad16    = sad16_sse2;                  sad16    = sad16_sse2;
575                  dev16    = dev16_sse2;                  dev16    = dev16_sse2;
576    
577                    /* PSNR-HVS-M distortion metric */
578                    sseh8_16bit   = sseh8_16bit_sse2;
579                    coeff8_energy = coeff8_energy_sse2;
580                    blocksum8     = blocksum8_sse2;
581    
582                  /* DCT operators */                  /* DCT operators */
583                  fdct = fdct_sse2_skal;                  fdct = fdct_sse2_skal;
584                  idct = idct_sse2_skal;   /* Is now IEEE1180 and Walken compliant. */                  idct = idct_sse2_skal;   /* Is now IEEE1180 and Walken compliant. */
# Line 661  Line 700 
700                  return XVID_ERR_VERSION;                  return XVID_ERR_VERSION;
701    
702          info->actual_version = XVID_VERSION;          info->actual_version = XVID_VERSION;
703          info->build = "xvid-1.2.0-dev";          info->build = "xvid-1.4.0-dev";
704          info->cpu_flags = detect_cpu_flags();          info->cpu_flags = detect_cpu_flags();
705    info->num_threads = 0;          info->num_threads = 0; /* single-thread */
706    
707  #if defined(_WIN32)  #if defined(_WIN32)
708    
709    {    {
     DWORD dwProcessAffinityMask, dwSystemAffinityMask;  
     if (GetProcessAffinityMask(GetCurrentProcess(), (PDWORD_PTR) &dwProcessAffinityMask, (PDWORD_PTR) &dwSystemAffinityMask)) {  
       int i;  
       for(i=0; i<32; i++) {  
         if ((dwProcessAffinityMask & (1<<i)))  
           info->num_threads++;  
       }  
       if (info->num_threads == 0) {  
710          SYSTEM_INFO siSysInfo;          SYSTEM_INFO siSysInfo;
711          GetSystemInfo(&siSysInfo);          GetSystemInfo(&siSysInfo);
712          info->num_threads = siSysInfo.dwNumberOfProcessors; /* number of _logical_ cores */          info->num_threads = siSysInfo.dwNumberOfProcessors; /* number of _logical_ cores */
713        }        }
     }  
   }  
 #else  
714    
715    #include <unistd.h>  #elif defined(_SC_NPROCESSORS_CONF) /* should be available on Apple too actually */
716    
717    info->num_threads = sysconf(_SC_NPROCESSORS_CONF);    info->num_threads = sysconf(_SC_NPROCESSORS_CONF);
718    
719    #elif defined(__APPLE__) && defined(__MACH__)
720    
721      {
722        size_t len;
723        int    mib[2], ncpu;
724    
725        mib[0] = CTL_HW;
726        mib[1] = HW_NCPU;
727        len    = sizeof(ncpu);
728        if (sysctl(mib, 2, &ncpu, &len, NULL, 0) == 0)
729          info -> num_threads = ncpu;
730        else
731          info -> num_threads = 1;
732      }
733    
734    #elif defined(__amigaos4__)
735    
736      {
737        uint32_t num_threads = 1;
738        IExec->GetCPUInfoTags(GCIT_NumberOfCPUs, &num_threads, TAG_END);
739        info->num_threads = num_threads;
740      }
741    
742  #endif  #endif
743    
744          return 0;          return 0;
# Line 723  Line 776 
776                                                  convert->output.csp, convert->interlacing);                                                  convert->output.csp, convert->interlacing);
777                          break;                          break;
778    
779                    case XVID_CSP_INTERNAL :
780                            img.y = (uint8_t*)convert->input.plane[0];
781                            img.u = (uint8_t*)convert->input.plane[1];
782                            img.v = (uint8_t*)convert->input.plane[2];
783                            image_output(&img, width, height, convert->input.stride[0],
784                                                    (uint8_t**)convert->output.plane, convert->output.stride,
785                                                    convert->output.csp, convert->interlacing);
786                            break;
787    
788                  default :                  default :
789                          return XVID_ERR_FORMAT;                          return XVID_ERR_FORMAT;
790          }          }
# Line 733  Line 795 
795  }  }
796    
797  /*****************************************************************************  /*****************************************************************************
798   * XviD Global Entry point   * Xvid Global Entry point
799   *   *
800   * Well this function initialize all internal function pointers according   * Well this function initialize all internal function pointers according
801   * to the CPU features forced by the library client or autodetected (depending   * to the CPU features forced by the library client or autodetected (depending
# Line 766  Line 828 
828  }  }
829    
830  /*****************************************************************************  /*****************************************************************************
831   * XviD Native decoder entry point   * Xvid Native decoder entry point
832   *   *
833   * This function is just a wrapper to all the option cases.   * This function is just a wrapper to all the option cases.
834   *   *
# Line 798  Line 860 
860    
861    
862  /*****************************************************************************  /*****************************************************************************
863   * XviD Native encoder entry point   * Xvid Native encoder entry point
864   *   *
865   * This function is just a wrapper to all the option cases.   * This function is just a wrapper to all the option cases.
866   *   *

Legend:
Removed from v.1.77  
changed lines
  Added in v.1.86

No admin address has been configured
ViewVC Help
Powered by ViewVC 1.0.4