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