1 /*
2 * extract_avi.c
3 *
4 * Copyright (C) Thomas Oestreich - June 2001
5 *
6 * This file is part of transcode, a video stream processing tool
7 *
8 * transcode is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU General Public License as published by
10 * the Free Software Foundation; either version 2, or (at your option)
11 * any later version.
12 *
13 * transcode is distributed in the hope that it will be useful,
14 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 * GNU General Public License for more details.
17 *
18 * You should have received a copy of the GNU General Public License
19 * along with GNU Make; see the file COPYING. If not, write to
20 * the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
21 *
22 */
23
24 #include "transcode.h"
25 #include "tcinfo.h"
26
27 #include "libtc/libtc.h"
28 #include "libtc/ratiocodes.h"
29 #include "ioaux.h"
30 #include "avilib/avilib.h"
31 #include "tc.h"
32
33 /* ------------------------------------------------------------
34 *
35 * avi extract thread
36 *
37 * ------------------------------------------------------------*/
38
extract_avi(info_t * ipipe)39 void extract_avi(info_t *ipipe)
40 {
41 // seek to vob_offset?
42 AVI_dump(ipipe->name, ipipe->select);
43 }
44
probe_avi(info_t * ipipe)45 void probe_avi(info_t *ipipe)
46 {
47 avi_t *avifile=NULL;
48 char *codec=NULL;
49 int j, tracks;
50
51 // scan file
52 if (ipipe->nav_seek_file) {
53 if(NULL == (avifile = AVI_open_indexfd(ipipe->fd_in,0,ipipe->nav_seek_file))) {
54 AVI_print_error("AVI open");
55 return;
56 }
57 } else {
58 if(NULL == (avifile = AVI_open_fd(ipipe->fd_in,1))) {
59 AVI_print_error("AVI open");
60 return;
61 }
62 }
63
64 ipipe->probe_info->frames = AVI_video_frames(avifile);
65
66 ipipe->probe_info->width = AVI_video_width(avifile);
67 ipipe->probe_info->height = AVI_video_height(avifile);
68 ipipe->probe_info->fps = AVI_frame_rate(avifile);
69
70 tracks = AVI_audio_tracks(avifile);
71
72 //FIXME: check for max tracks suported
73
74 for(j=0; j<tracks; ++j) {
75
76 AVI_set_audio_track(avifile, j);
77
78 ipipe->probe_info->track[j].samplerate = AVI_audio_rate(avifile);
79 ipipe->probe_info->track[j].chan = AVI_audio_channels(avifile);
80 ipipe->probe_info->track[j].bits = AVI_audio_bits(avifile);
81 ipipe->probe_info->track[j].format = AVI_audio_format(avifile);
82 ipipe->probe_info->track[j].bitrate = AVI_audio_mp3rate(avifile);
83 ipipe->probe_info->track[j].padrate = AVI_audio_padrate(avifile);
84
85 ipipe->probe_info->track[j].tid=j;
86
87 if(ipipe->probe_info->track[j].chan>0) ++ipipe->probe_info->num_tracks;
88 }
89
90 codec = AVI_video_compressor(avifile);
91
92 //check for supported codecs
93
94 if(codec!=NULL) {
95
96 if(strlen(codec)==0) {
97 ipipe->probe_info->codec=TC_CODEC_RGB;
98 } else {
99
100 if(strcasecmp(codec,"dvsd")==0)
101 ipipe->probe_info->codec=TC_CODEC_DV;
102
103 if(strcasecmp(codec,"UYVY")==0)
104 ipipe->probe_info->codec=TC_CODEC_UYVY;
105
106 if(strcasecmp(codec,"DIV3")==0)
107 ipipe->probe_info->codec=TC_CODEC_DIVX3;
108
109 if(strcasecmp(codec,"MP42")==0)
110 ipipe->probe_info->codec=TC_CODEC_MP42;
111
112 if(strcasecmp(codec,"MP43")==0)
113 ipipe->probe_info->codec=TC_CODEC_MP43;
114
115 if(strcasecmp(codec,"DIVX")==0)
116 ipipe->probe_info->codec=TC_CODEC_DIVX4;
117
118 if(strcasecmp(codec,"DX50")==0)
119 ipipe->probe_info->codec=TC_CODEC_DIVX5;
120
121 if(strcasecmp(codec,"XVID")==0)
122 ipipe->probe_info->codec=TC_CODEC_XVID;
123
124 if(strcasecmp(codec,"MJPG")==0)
125 ipipe->probe_info->codec=TC_CODEC_MJPEG;
126
127 if(strcasecmp(codec,"RV10")==0)
128 ipipe->probe_info->codec=TC_CODEC_RV10;
129
130 if(strcasecmp(codec,"MPG1")==0)
131 ipipe->probe_info->codec=TC_CODEC_MPEG1VIDEO;
132
133 if(strcasecmp(codec,"LZO1")==0)
134 ipipe->probe_info->codec=TC_CODEC_LZO1;
135
136 if(strcasecmp(codec,"LZO2")==0)
137 ipipe->probe_info->codec=TC_CODEC_LZO2;
138
139 if(strcasecmp(codec,"FPS1")==0)
140 ipipe->probe_info->codec=TC_CODEC_FRAPS;
141
142 if(strcasecmp(codec,"ASV1")==0)
143 ipipe->probe_info->codec=TC_CODEC_ASV1;
144
145 if(strcasecmp(codec,"ASV2")==0)
146 ipipe->probe_info->codec=TC_CODEC_ASV2;
147
148 if(strcasecmp(codec,"FFV1")==0)
149 ipipe->probe_info->codec=TC_CODEC_FFV1;
150
151 if(strcasecmp(codec,"H264")==0
152 || strcasecmp(codec,"X264")==0
153 || strcasecmp(codec,"avc1")==0)
154 ipipe->probe_info->codec=TC_CODEC_H264;
155
156 }
157 } else
158 ipipe->probe_info->codec=TC_CODEC_UNKNOWN;
159
160 ipipe->probe_info->magic=TC_MAGIC_AVI;
161
162 tc_frc_code_from_value(&(ipipe->probe_info->frc),
163 ipipe->probe_info->fps);
164 }
165