Mercurial > mplayer.hg
annotate libaf/af_sweep.c @ 28992:947ef23ba798
Test if create_vdp_decoder() might succeed by calling it from config()
with a small value for max_reference_frames.
This does not make automatic recovery by using software decoder possible,
but lets MPlayer fail more graciously on - actually existing - buggy
hardware that does not support certain H264 widths when using
hardware accelerated decoding (784, 864, 944, 1024, 1808, 1888 pixels on
NVIDIA G98) and if the user tries to hardware-decode more samples at
the same time than supported.
Might break playback of H264 Intra-Only samples on hardware with very
little video memory.
author | cehoyos |
---|---|
date | Sat, 21 Mar 2009 20:11:05 +0000 |
parents | b3a38b361fef |
children | 0f1b5b68af32 |
rev | line source |
---|---|
25529
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
1 /* |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
2 * Copyright (c) 2004 Michael Niedermayer <michaelni@gmx.at> |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
3 * |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
4 * This file is part of MPlayer. |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
5 * |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
6 * MPlayer is free software; you can redistribute it and/or modify |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
7 * it under the terms of the GNU General Public License as published by |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
8 * the Free Software Foundation; either version 2 of the License, or |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
9 * (at your option) any later version. |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
10 * |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
11 * MPlayer is distributed in the hope that it will be useful, |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
14 * GNU General Public License for more details. |
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
15 * |
26740
b3a38b361fef
Use standard license headers with standard formatting.
diego
parents:
25529
diff
changeset
|
16 * You should have received a copy of the GNU General Public License along |
b3a38b361fef
Use standard license headers with standard formatting.
diego
parents:
25529
diff
changeset
|
17 * with MPlayer; if not, write to the Free Software Foundation, Inc., |
b3a38b361fef
Use standard license headers with standard formatting.
diego
parents:
25529
diff
changeset
|
18 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. |
25529
867ee1c2114b
Relicense GPL v2 files as GPL v2+ and add proper license headers.
diego
parents:
24888
diff
changeset
|
19 */ |
13721 | 20 |
21 #include <stdio.h> | |
22 #include <stdlib.h> | |
23 #include <string.h> | |
24 #include <inttypes.h> | |
25 #include <math.h> | |
26 | |
16982 | 27 #include "config.h" |
13721 | 28 #include "af.h" |
29 | |
30 typedef struct af_sweep_s{ | |
31 double x; | |
32 double delta; | |
33 }af_sweept; | |
34 | |
35 | |
36 // Initialization and runtime control | |
37 static int control(struct af_instance_s* af, int cmd, void* arg) | |
38 { | |
39 af_sweept* s = (af_sweept*)af->setup; | |
40 af_data_t *data= (af_data_t*)arg; | |
41 | |
42 switch(cmd){ | |
43 case AF_CONTROL_REINIT: | |
44 af->data->nch = data->nch; | |
14245 | 45 af->data->format = AF_FORMAT_S16_NE; |
13721 | 46 af->data->bps = 2; |
47 af->data->rate = data->rate; | |
48 | |
49 return AF_OK; | |
50 case AF_CONTROL_COMMAND_LINE: | |
51 sscanf((char*)arg,"%lf", &s->delta); | |
52 return AF_OK; | |
53 /* case AF_CONTROL_RESAMPLE_RATE | AF_CONTROL_SET: | |
54 af->data->rate = *(int*)arg; | |
55 return AF_OK;*/ | |
56 } | |
57 return AF_UNKNOWN; | |
58 } | |
59 | |
60 // Deallocate memory | |
61 static void uninit(struct af_instance_s* af) | |
62 { | |
63 if(af->data) | |
64 free(af->data); | |
65 if(af->setup){ | |
66 af_sweept *s = af->setup; | |
67 free(s); | |
68 } | |
69 } | |
70 | |
71 // Filter data through filter | |
72 static af_data_t* play(struct af_instance_s* af, af_data_t* data) | |
73 { | |
74 af_sweept *s = af->setup; | |
75 int i, j; | |
76 int16_t *in = (int16_t*)data->audio; | |
77 int chans = data->nch; | |
78 int in_len = data->len/(2*chans); | |
79 | |
80 for(i=0; i<in_len; i++){ | |
81 for(j=0; j<chans; j++) | |
82 in[i*chans+j]= 32000*sin(s->x*s->x); | |
83 s->x += s->delta; | |
84 if(2*s->x*s->delta >= 3.141592) s->x=0; | |
85 } | |
86 | |
87 return data; | |
88 } | |
89 | |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
16982
diff
changeset
|
90 static int af_open(af_instance_t* af){ |
13721 | 91 af->control=control; |
92 af->uninit=uninit; | |
93 af->play=play; | |
24888 | 94 af->mul=1; |
13721 | 95 af->data=calloc(1,sizeof(af_data_t)); |
96 af->setup=calloc(1,sizeof(af_sweept)); | |
97 return AF_OK; | |
98 } | |
99 | |
100 af_info_t af_info_sweep = { | |
101 "sine sweep", | |
102 "sweep", | |
103 "Michael Niedermayer", | |
104 "", | |
105 AF_FLAGS_REENTRANT, | |
22746
fd6f824ef894
Rename open to af_open so as not to conflict with a previous header definition.
diego
parents:
16982
diff
changeset
|
106 af_open |
13721 | 107 }; |
108 |