Move a few typefind functions to gst/typefind, remove all old typefinding code from bitrotten plugins

Original commit message from CVS:
Move a few typefind functions to gst/typefind, remove all old typefinding
code from bitrotten plugins
This commit is contained in:
David Schleef 2003-10-29 05:09:40 +00:00
parent e58373a8b6
commit 3776108293
6 changed files with 35 additions and 116 deletions

View file

@ -1,7 +1,7 @@
plugin_LTLIBRARIES = libgstaudiofile.la plugin_LTLIBRARIES = libgstaudiofile.la
libgstaudiofile_la_SOURCES = gstaf.c gstafsink.c gstafsrc.c gstafparse.c libgstaudiofile_la_SOURCES = gstaf.c gstafsink.c gstafsrc.c gstafparse.c gstaftypes.c
libgstaudiofile_la_CFLAGS = $(GST_CFLAGS) $(AUDIOFILE_CFLAGS) libgstaudiofile_la_CFLAGS = $(GST_CFLAGS) $(AUDIOFILE_CFLAGS)
libgstaudiofile_la_LIBADD = $(AUDIOFILE_LIBS) libgstaudiofile_la_LIBADD = $(AUDIOFILE_LIBS)
libgstaudiofile_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) libgstaudiofile_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS)

View file

@ -22,6 +22,8 @@
#include "gstafsink.h" #include "gstafsink.h"
#include "gstafparse.h" #include "gstafparse.h"
gboolean gst_aftypes_plugin_init (GModule *module, GstPlugin *plugin);
static gboolean static gboolean
plugin_init (GModule *module, GstPlugin *plugin) plugin_init (GModule *module, GstPlugin *plugin)
{ {
@ -31,6 +33,7 @@ plugin_init (GModule *module, GstPlugin *plugin)
gst_afsink_plugin_init (module, plugin); gst_afsink_plugin_init (module, plugin);
gst_afsrc_plugin_init (module, plugin); gst_afsrc_plugin_init (module, plugin);
gst_afparse_plugin_init (module, plugin); gst_afparse_plugin_init (module, plugin);
gst_aftypes_plugin_init (module, plugin);
return TRUE; return TRUE;
} }

View file

@ -33,34 +33,33 @@ static void gst_aftypes_vf_destroy(AFvirtualfile *vfile);
static long gst_aftypes_vf_seek (AFvirtualfile *vfile, long offset, int is_relative); static long gst_aftypes_vf_seek (AFvirtualfile *vfile, long offset, int is_relative);
static long gst_aftypes_vf_tell (AFvirtualfile *vfile); static long gst_aftypes_vf_tell (AFvirtualfile *vfile);
static GstCaps* gst_aftypes_type_find(GstBuffer *buf, gpointer private); static void gst_aftypes_type_find(GstTypeFind *tf, gpointer private);
static GstTypeDefinition aftype_definitions[] = {
{ "aftypes audio/x-aiff", "audio/x-aiff", ".aiff .aif .aifc", gst_aftypes_type_find },
{ "aftypes audio/x-wav", "audio/x-wav", ".wav", gst_aftypes_type_find },
{ "aftypes audio/basic", "audio/basic", ".au .snd", gst_aftypes_type_find },
{ NULL, NULL, NULL, NULL },
};
typedef struct _GstAFTypesBuffer GstAFTypesBuffer; typedef struct _GstAFTypesBuffer GstAFTypesBuffer;
struct _GstAFTypesBuffer { struct _GstAFTypesBuffer {
GstBuffer *buffer; guint8 *data;
int length;
long offset; long offset;
}; };
static GstCaps* #define GST_AUDIOFILE_TYPE_FIND_SIZE 4096
gst_aftypes_type_find(GstBuffer *buf, gpointer private) #define AF_CAPS(type) gst_caps_new ("audiofile_type_find", type, NULL)
static void
gst_aftypes_type_find(GstTypeFind *tf, gpointer private)
{ {
GstAFTypesBuffer *buffer_wrap;
GstAFTypesBuffer *buffer_wrap = g_new0(GstAFTypesBuffer, 1); guint8 *data;
AFvirtualfile *vfile; AFvirtualfile *vfile;
AFfilehandle file; AFfilehandle file;
int file_format, format_version; int file_format, format_version;
gchar *type; gchar *type;
GST_DEBUG("calling gst_aftypes_type_find"); data = gst_type_find_peek (tf, 0, GST_AUDIOFILE_TYPE_FIND_SIZE);
if (data == NULL) return;
buffer_wrap->buffer = buf; buffer_wrap = g_new0(GstAFTypesBuffer, 1);
buffer_wrap->data = data;
buffer_wrap->length = GST_AUDIOFILE_TYPE_FIND_SIZE;
buffer_wrap->offset = 0; buffer_wrap->offset = 0;
vfile = af_virtual_file_new(); vfile = af_virtual_file_new();
@ -76,12 +75,13 @@ gst_aftypes_type_find(GstBuffer *buf, gpointer private)
file_format = afGetFileFormat (file, &format_version); file_format = afGetFileFormat (file, &format_version);
afCloseFile (file); afCloseFile (file);
GST_DEBUG("file format: %d", file_format); //GST_DEBUG("file format: %d", file_format);
/* reject raw data, just in case it is some other format */ /* reject raw data, just in case it is some other format */
if (file_format == AF_FILE_UNKNOWN || if (file_format == AF_FILE_UNKNOWN ||
file_format == AF_FILE_RAWDATA){ file_format == AF_FILE_RAWDATA){
return NULL; g_free (buffer_wrap);
return;
} }
switch (file_format){ switch (file_format){
case AF_FILE_AIFF: case AF_FILE_AIFF:
@ -94,49 +94,36 @@ gst_aftypes_type_find(GstBuffer *buf, gpointer private)
case AF_FILE_NEXTSND: case AF_FILE_NEXTSND:
type = "audio/basic"; type = "audio/basic";
break; break;
case AF_FILE_BICSF:
default: default:
type=NULL; type=NULL;
break; break;
} }
if (type != NULL){ if (type != NULL){
return gst_caps_new ("audiofile_type_find", type, NULL); gst_type_find_suggest (tf, GST_TYPE_FIND_MAXIMUM, AF_CAPS(type));
} }
return NULL;
} }
static gboolean gboolean
plugin_init (GModule *module, GstPlugin *plugin) gst_aftypes_plugin_init (GModule *module, GstPlugin *plugin)
{ {
gint i=0; static gchar * af_exts[] = { "aiff", "aif", "aifc", "wav", "au", "snd", NULL };
while (aftype_definitions[i].name) { gst_type_find_factory_register (plugin, "audio/x-mod",
GstTypeFactory *type; GST_ELEMENT_RANK_MARGINAL, gst_aftypes_type_find, af_exts,
GST_CAPS_ANY, NULL);
type = gst_type_factory_new (&aftype_definitions[i]);
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (type));
i++;
}
return TRUE; return TRUE;
} }
GstPluginDesc plugin_desc = {
GST_VERSION_MAJOR,
GST_VERSION_MINOR,
"aftypes",
plugin_init
};
static ssize_t static ssize_t
gst_aftypes_vf_read (AFvirtualfile *vfile, void *data, size_t nbytes) gst_aftypes_vf_read (AFvirtualfile *vfile, void *data, size_t nbytes)
{ {
GstAFTypesBuffer *bwrap = (GstAFTypesBuffer*)vfile->closure; GstAFTypesBuffer *bwrap = (GstAFTypesBuffer*)vfile->closure;
long bufsize = GST_BUFFER_SIZE(bwrap->buffer); long bufsize = bwrap->length;
guchar *bytes = GST_BUFFER_DATA(bwrap->buffer); guint8 *bytes = bwrap->data;
if (bwrap->offset + nbytes > bufsize){ if (bwrap->offset + nbytes > bufsize){
nbytes = bufsize; nbytes = bufsize;
@ -155,7 +142,7 @@ static long
gst_aftypes_vf_seek (AFvirtualfile *vfile, long offset, int is_relative) gst_aftypes_vf_seek (AFvirtualfile *vfile, long offset, int is_relative)
{ {
GstAFTypesBuffer *bwrap = (GstAFTypesBuffer*)vfile->closure; GstAFTypesBuffer *bwrap = (GstAFTypesBuffer*)vfile->closure;
long bufsize = GST_BUFFER_SIZE(bwrap->buffer); long bufsize = bwrap->length;
g_print("request seek to: %ld\n", offset); g_print("request seek to: %ld\n", offset);
if (!is_relative){ if (!is_relative){
@ -180,7 +167,7 @@ static long
gst_aftypes_vf_length (AFvirtualfile *vfile) gst_aftypes_vf_length (AFvirtualfile *vfile)
{ {
GstAFTypesBuffer *bwrap = (GstAFTypesBuffer*)vfile->closure; GstAFTypesBuffer *bwrap = (GstAFTypesBuffer*)vfile->closure;
return GST_BUFFER_SIZE(bwrap->buffer); return bwrap->length;
} }
static ssize_t static ssize_t

View file

@ -27,8 +27,6 @@ extern GType ivorbisfile_get_type(void);
extern GstElementDetails ivorbisfile_details; extern GstElementDetails ivorbisfile_details;
static GstCaps* vorbis_type_find (GstBuffer *buf, gpointer private);
GstPadTemplate *gst_vorbisdec_src_template, *gst_vorbisdec_sink_template; GstPadTemplate *gst_vorbisdec_src_template, *gst_vorbisdec_sink_template;
static GstCaps* static GstCaps*
@ -73,35 +71,10 @@ raw_caps2_factory (void)
NULL)); NULL));
} }
static GstTypeDefinition vorbisdefinition = {
"tremor_audio/x-ogg",
"application/ogg",
".ogg",
vorbis_type_find,
};
static GstCaps*
vorbis_type_find (GstBuffer *buf, gpointer private)
{
guint32 head;
if (GST_BUFFER_SIZE (buf) < 4)
return NULL;
head = GUINT32_FROM_BE (*((guint32 *)GST_BUFFER_DATA (buf)));
if (head != 0x4F676753)
return NULL;
return gst_caps_new ("vorbis_type_find", "application/ogg", NULL);
}
static gboolean static gboolean
plugin_init (GModule *module, GstPlugin *plugin) plugin_init (GModule *module, GstPlugin *plugin)
{ {
GstElementFactory *file; GstElementFactory *file;
GstTypeFactory *type;
GstCaps *raw_caps, *vorbis_caps, *raw_caps2; GstCaps *raw_caps, *vorbis_caps, *raw_caps2;
if (!gst_library_load ("gstbytestream")) if (!gst_library_load ("gstbytestream"))
@ -135,9 +108,6 @@ plugin_init (GModule *module, GstPlugin *plugin)
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (file)); gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (file));
type = gst_type_factory_new (&vorbisdefinition);
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (type));
return TRUE; return TRUE;
} }

View file

@ -24,8 +24,6 @@
extern GstElementDetails tarkinenc_details; extern GstElementDetails tarkinenc_details;
extern GstElementDetails tarkindec_details; extern GstElementDetails tarkindec_details;
static GstCaps* tarkin_type_find (GstBuffer *buf, gpointer private);
GstPadTemplate *enc_src_template, *enc_sink_template; GstPadTemplate *enc_src_template, *enc_sink_template;
GstPadTemplate *dec_src_template, *dec_sink_template; GstPadTemplate *dec_src_template, *dec_sink_template;
@ -58,39 +56,10 @@ raw_caps_factory (void)
); );
} }
static GstTypeDefinition tarkindefinition =
{
"tarkin_video/x-ogg",
"application/ogg",
".ogg",
tarkin_type_find,
};
static GstCaps*
tarkin_type_find (GstBuffer *buf, gpointer private)
{
guint32 head;
if (GST_BUFFER_SIZE (buf) < 4)
return NULL;
/* FIXME */
return NULL;
head = GUINT32_FROM_BE (*((guint32 *)GST_BUFFER_DATA (buf)));
if (head != 0x4F676753)
return NULL;
return gst_caps_new ("tarkin_type_find", "application/ogg", NULL);
}
static gboolean static gboolean
plugin_init (GModule *module, GstPlugin *plugin) plugin_init (GModule *module, GstPlugin *plugin)
{ {
GstElementFactory *enc, *dec; GstElementFactory *enc, *dec;
GstTypeFactory *type;
GstCaps *raw_caps, *tarkin_caps; GstCaps *raw_caps, *tarkin_caps;
gst_plugin_set_longname (plugin, "The OGG Tarkin Codec"); gst_plugin_set_longname (plugin, "The OGG Tarkin Codec");
@ -147,9 +116,6 @@ plugin_init (GModule *module, GstPlugin *plugin)
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (dec)); gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (dec));
type = gst_type_factory_new (&tarkindefinition);
gst_plugin_add_feature (plugin, GST_PLUGIN_FEATURE (type));
return TRUE; return TRUE;
} }

View file

@ -47,14 +47,7 @@ static GstElementDetails mpeg2subt_details = {
"Wim Taymans <wim.taymans@chello.be>", "Wim Taymans <wim.taymans@chello.be>",
"(C) 2000", "(C) 2000",
}; };
/* defined but not used
static GstTypeDefinition mpeg2subtitledefinition = {
"mpeg2subt_video/mpeg2ubtitle",
"video/mpeg2subtitle",
NULL,
NULL,
};
*/
/* GstMpeg2Subt signals and args */ /* GstMpeg2Subt signals and args */
enum { enum {
/* FILL ME */ /* FILL ME */