annotate libmpdemux/mf.c @ 30096:76c25bfa181b

Add a helper function to get the chroma scale shift and use to simplify mpi setup.
author reimar
date Wed, 30 Dec 2009 11:08:44 +0000
parents 0f1b5b68af32
children 7f7591482564
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
29238
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
1 /*
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
2 * This file is part of MPlayer.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
3 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
4 * MPlayer is free software; you can redistribute it and/or modify
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
5 * it under the terms of the GNU General Public License as published by
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
7 * (at your option) any later version.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
8 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
9 * MPlayer is distributed in the hope that it will be useful,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
12 * GNU General Public License for more details.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
13 *
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
14 * You should have received a copy of the GNU General Public License along
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
15 * with MPlayer; if not, write to the Free Software Foundation, Inc.,
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
d643e4643313 Add standard license header to all files in libmpdemux.
diego
parents: 25964
diff changeset
17 */
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
18
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
19 #include <ctype.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
20 #include <stdio.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
21 #include <stdlib.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
22 #include <string.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
23 #include <unistd.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
24 #include <fcntl.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
25 #include <errno.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
26 #include <sys/types.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
27 #include <sys/stat.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
28
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
29 #include "config.h"
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
30
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
31 #ifdef HAVE_GLOB
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
32 #include <glob.h>
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
33 #else
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
34 #include "osdep/glob.h"
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
35 #endif
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
36
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
37 #include "mp_msg.h"
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
38 #include "help_mp.h"
22605
4d81dbdf46b9 Add explicit location for headers from the stream/ directory.
diego
parents: 19300
diff changeset
39 #include "stream/stream.h"
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
40
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
41 #include "mf.h"
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
42
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
43 int mf_w = 0; //352; // let codecs to detect it
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
44 int mf_h = 0; //288;
25964
cb07fc632de1 Change mf_fps to double
reimar
parents: 22605
diff changeset
45 double mf_fps = 25.0;
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
46 char * mf_type = NULL; //"jpg";
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
47
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
48 mf_t* open_mf(char * filename){
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
49 #if defined(HAVE_GLOB) || defined(__MINGW32__)
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
50 glob_t gg;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
51 struct stat fs;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
52 int i;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
53 char * fname;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
54 mf_t * mf;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
55 int error_count = 0;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
56 int count = 0;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
57
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
58 mf=calloc( 1,sizeof( mf_t ) );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
59
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
60 if( filename[0] == '@' )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
61 {
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
62 FILE *lst_f=fopen(filename + 1,"r");
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
63 if ( lst_f )
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
64 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
65 fname=malloc( 255 );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
66 while ( fgets( fname,255,lst_f ) )
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
67 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
68 /* remove spaces from end of fname */
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
69 char *t=fname + strlen( fname ) - 1;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
70 while ( t > fname && isspace( *t ) ) *(t--)=0;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
71 if ( stat( fname,&fs ) )
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
72 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
73 mp_msg( MSGT_STREAM,MSGL_V,"[mf] file not found: '%s'\n",fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
74 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
75 else
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
76 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
77 mf->names=realloc( mf->names,( mf->nr_of_files + 1 ) * sizeof( char* ) );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
78 mf->names[mf->nr_of_files]=strdup( fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
79 mf->nr_of_files++;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
80 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
81 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
82 fclose( lst_f );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
83
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
84 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] number of files: %d\n",mf->nr_of_files );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
85 goto exit_mf;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
86 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
87 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] %s is not indirect filelist\n",filename+1 );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
88 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
89
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
90 if( strchr( filename,',') )
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
91 {
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
92 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] filelist: %s\n",filename );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
93
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
94 while ( ( fname=strsep( &filename,"," ) ) )
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
95 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
96 if ( stat( fname,&fs ) )
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
97 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
98 mp_msg( MSGT_STREAM,MSGL_V,"[mf] file not found: '%s'\n",fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
99 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
100 else
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
101 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
102 mf->names=realloc( mf->names,( mf->nr_of_files + 1 ) * sizeof( char* ) );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
103 mf->names[mf->nr_of_files]=strdup( fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
104 // mp_msg( MSGT_STREAM,MSGL_V,"[mf] added file %d.: %s\n",mf->nr_of_files,mf->names[mf->nr_of_files] );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
105 mf->nr_of_files++;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
106 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
107 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
108 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] number of files: %d\n",mf->nr_of_files );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
109
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
110 goto exit_mf;
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
111 }
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
112
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
113 fname=malloc( strlen( filename ) + 32 );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
114
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
115 if ( !strchr( filename,'%' ) )
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
116 {
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
117 strcpy( fname,filename );
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
118 if ( !strchr( filename,'*' ) ) strcat( fname,"*" );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
119
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
120 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] search expr: %s\n",fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
121
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
122 if ( glob( fname,0,NULL,&gg ) )
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
123 { free( mf ); free( fname ); return NULL; }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
124
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
125 mf->nr_of_files=gg.gl_pathc;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
126 mf->names=calloc( gg.gl_pathc, sizeof( char* ) );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
127
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
128 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] number of files: %d (%d)\n",mf->nr_of_files, gg.gl_pathc * sizeof( char* ) );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
129
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
130 for( i=0;i < gg.gl_pathc;i++ )
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
131 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
132 stat( gg.gl_pathv[i],&fs );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
133 if( S_ISDIR( fs.st_mode ) ) continue;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
134 mf->names[i]=strdup( gg.gl_pathv[i] );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
135 // mp_msg( MSGT_STREAM,MSGL_DBG2,"[mf] added file %d.: %s\n",i,mf->names[i] );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
136 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
137 globfree( &gg );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
138 goto exit_mf;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
139 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
140
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
141 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] search expr: %s\n",filename );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
142
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
143 while ( error_count < 5 )
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
144 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
145 sprintf( fname,filename,count++ );
29263
0f1b5b68af32 whitespace cosmetics: Remove all trailing whitespace.
diego
parents: 29238
diff changeset
146 if ( stat( fname,&fs ) )
19300
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
147 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
148 error_count++;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
149 mp_msg( MSGT_STREAM,MSGL_V,"[mf] file not found: '%s'\n",fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
150 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
151 else
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
152 {
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
153 mf->names=realloc( mf->names,( mf->nr_of_files + 1 ) * sizeof( char* ) );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
154 mf->names[mf->nr_of_files]=strdup( fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
155 // mp_msg( MSGT_STREAM,MSGL_V,"[mf] added file %d.: %s\n",mf->nr_of_files,mf->names[mf->nr_of_files] );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
156 mf->nr_of_files++;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
157 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
158 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
159
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
160 mp_msg( MSGT_STREAM,MSGL_INFO,"[mf] number of files: %d\n",mf->nr_of_files );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
161
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
162 exit_mf:
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
163 free( fname );
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
164 return mf;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
165 #else
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
166 mp_msg(MSGT_STREAM,MSGL_FATAL,"[mf] mf support is disabled on your os\n");
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
167 return 0;
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
168 #endif
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
169 }
0c7ad1c632cc mf.[hc] belong to libmpdemux
ben
parents:
diff changeset
170