1 /***************************************************************************
2                    \file       audiofilterFilm2pal.cpp
3 
4 
5     copyright            : (C) 2002/2009 by mean
6     email                : fixounet@free.fr
7  ***************************************************************************/
8 
9 /***************************************************************************
10  *                                                                         *
11  *   This program is free software; you can redistribute it and/or modify  *
12  *   it under the terms of the GNU General Public License as published by  *
13  *   the Free Software Foundation; either version 2 of the License, or     *
14  *   (at your option) any later version.                                   *
15  *                                                                         *
16  ***************************************************************************/
17 
18 #include <math.h>
19 
20 #include "ADM_default.h"
21 
22 #include "ADM_audioFilter.h"
23 #include "audiofilter_film2pal.h"
24 
AUDMAudioFilterFilm2Pal(AUDMAudioFilter * previous)25 AUDMAudioFilterFilm2Pal::AUDMAudioFilterFilm2Pal(AUDMAudioFilter *previous) :
26             AUDMAudioFilterFilmChange(previous,1001,960)
27 {
28     printf("[Film2Pal] Created\n");
29 }
AUDMAudioFilterPal2Film(AUDMAudioFilter * previous)30 AUDMAudioFilterPal2Film::AUDMAudioFilterPal2Film(AUDMAudioFilter *previous) :
31             AUDMAudioFilterFilmChange(previous,960,1001)
32 {
33     printf("[Pal2Film] Created\n");
34 }
35 #define CONTECT ((SRC_STATE *)context))
36 //__________
37 
AUDMAudioFilterFilmChange(AUDMAudioFilter * instream,uint32_t from,uint32_t to)38 AUDMAudioFilterFilmChange::AUDMAudioFilterFilmChange(AUDMAudioFilter * instream,uint32_t from, uint32_t to):AUDMAudioFilter (instream)
39 {
40     // The parameter are in sample, we deal with fq
41     if(true!=resampler.init(from,to,_wavHeader.channels))
42     {
43         printf("[AudioFilter Resample] Init failed! \n");
44         ADM_assert(0);
45     }
46     printf("[FilmChange] Creating\n");
47 };
48 
~AUDMAudioFilterFilmChange()49 AUDMAudioFilterFilmChange::~AUDMAudioFilterFilmChange()
50 {
51 
52   printf("[FilmChange] Destroying\n");
53 }
54 //
55 //___________________________________________
fill(uint32_t max,float * buffer,AUD_Status * status)56 uint32_t AUDMAudioFilterFilmChange::fill( uint32_t max, float * buffer,AUD_Status *status)
57 {
58   uint32_t len;
59   uint32_t chan=_wavHeader.channels;
60 
61 
62   shrink();
63   fillIncomingBuffer(status);
64 
65   len=_tail-_head;
66   int nbBlock=max/1001;
67   max=nbBlock*960; // Prevent overflow when slowing down
68 
69   if(len>max) len=max;
70 
71   len=len/chan; // in sample
72 
73         uint32_t maxSample=max/chan; // in sample
74         uint32_t nbOut=0;
75         uint32_t nbIn=len;
76         uint32_t nbInTaken=0;
77         float *from,*to;
78         from=_incomingBuffer.at(_head);
79         to=buffer;
80         if(true!=resampler.process(from,to,
81                     nbIn,
82                     maxSample,
83                     &nbInTaken,
84                     &nbOut))
85         {
86             printf("[FilmChange] EOF ??\n");
87             *status=AUD_END_OF_STREAM;
88             return 0;
89         }
90       _head=_head+(nbInTaken*chan);
91       return nbOut*chan;
92 };
93 
94 //EOF
95 
96