List Info

Thread: Summer Of Code Project Help




Summer Of Code Project Help
country flaguser name
Italy
2007-04-13 05:27:08
Hello!

My project for the Google Summer Of Code was accepted as
part of the GNU
Project:
http://code.google.com/soc/gnu/appinfo.html?cs
aid=FDB6DFFB07FE351C

As I said in an earlier mail, my task is to hook GStreamer
into GNU
Classpath.

Now, I've found a problem that is blocking me from a couple
days and is
taking me away all my sleep 

I need to write a (Java) class that displays this kind of
information
about an audio file:

* Encoding type
* Sample rate
* Sample size in bits
* Channels
* Frame size
* Frame rate
* Endiannes
* Header size

Of course, I could just add a reader for any given kind of
audio file,
but then this is pointless to have a gstreamer hook that can
recognize
(almost) any type given the right plugin.

My problem is that I can't find an example of how to parse a
file and
extract this data (I need to do that in C, not Java). The
program should
return as soon as all these info are retrieved (if
possible). I've see
the Discover class from the python bindings (which seems to
be what I'm
looking for), but I hate to admit that I was unable to
recreate its
behaviour, though I think I'm on the correct way. What I'm
doing is this
(to see what capabilities an element has), I get a typefind
element and
attach a signal handler to it, but this seems to be not
enough, and all
the output I get is:

-----
application/ogg
print_pad
size of caps: 1
fields in structure: 0
-----

[...]
g_signal_connect (G_OBJECT (typefind),
"have-type",
                    G_CALLBACK (have_type_callback), loop);
[...]

gboolean have_type_callback(GstElement *typefind,
                            guint probability,
                            const GstCaps *caps,
                            gpointer data)
{
  [...]
  GstStructure *st = NULL;
  int size = 0;
  
  g_fprintf (stderr, "print_padn");

  size = gst_caps_get_size (caps);
  g_fprintf (stderr, "size of caps: %dn", size);
  
  for (int j = 0; j < size; j++) {
    st = gst_caps_get_structure (caps, j);
    if (st != NULL) {
      size = gst_structure_n_fields (st);
      g_fprintf (stderr, "fields in structure:
%dn", size);
      
      for (int i = 0; i < size; i++) {
        g_fprintf (stderr, "field name: %sn",
                   gst_structure_nth_field_name(st, i));
      }
    }
  }
 [...]
}

I'm a bit new to all that, so forgive me if I'm doing some
incredibly
stupid mistake 

Thanks for all the help,
Mario
-- 
Lima Software - http://www.limasoftware.
net/
GNU Classpath Developer - http://www.classpath.org/
Jabber: neugensjabber.org - Profile: http://
www.gtalkprofile.com/profile/9661.html
pgp key: http://subkeys.pgp.net/
PGP Key ID: 80F240CF
Fingerprint: BA39 9666 94EC 8B73 27FA  FC7C 4086 63E3 80F2
40CF

Please, support open standards:
http://op
endocumentfellowship.org/petition/
http://www.nosoftwa
repatents.com/


------------------------------------------------------------
-------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the
chance to share your
opinions on IT & business topics through brief
surveys-and earn cash
http://www.techsay.com/default.
php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
gstreamer-devel mailing list
gstreamer-devellists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gstream
er-devel

Re: Summer Of Code Project Help
country flaguser name
France
2007-04-13 05:50:03
Hey,

I wrote a prog that extracts (some of ?) those data from any

multimedia file (audio or video) 2 years ago. I've attached
it.

Basically:
1) I build a basic pipeline : filesrc ! decodebin
2) I set the pipeline to the PAUSED state.
3) Each time a stream is found, I get its properties.

The program has 2 parts :
1) a lib one, that stores the properties
2) a binary one that uses the lib part. I've made a CLI one
(no gui) and 3 
gui, one with gtk. You'll have to disable the other gui to
compile the 
progs, iirc (or maybe they'll not be built as I think that
you don't have 
those toolkits. I can't remember).

That means that you can even use directly the lib part and
integrate it to 
your prog if you find it usefull. There is a GNU Copying
licence, but I 
think that it has been automatically created. I didn't
intend to use the 
GPL.

Or else, you can just look at how I wrote it and get only
the audio part 
(as the lib extracts also the video informations)

Example of output with the CLI:

Filename....................: ********.mp3
Size........................: 6,2 MB (or 6305,8 KB, or
6457150 B)
Container...................:  no informations

Streams
  |
  +-Audio stream #0
     +-Mimetype..............: audio/mpeg
     +-Decoder info
     |  |
     |  +-Name...............: mad mp3 decoder
     |  +-Description........: Uses mad code to decode mp3
streams
     |  +-Class..............: Codec/Decoder/Audio
     |  +-Author.............: Wim Taymans <wimfluendo.com>
     |
     +-Duration..............: 0:04:29.31916666
     +-Sample rate...........: 44100
     +-Sample count..........: 11864307
     +-Channels..............: 2
     +-Endianess.............: 0
     +-Width.................: 32
     +-Depth.................: 32
     +-Signed................: yes

I hope this helps.

Regards,

Vincent Torri

On Fri, 13 Apr 2007, Mario Torre wrote:

> Hello!
>
> My project for the Google Summer Of Code was accepted
as part of the GNU
> Project:
> http://code.google.com/soc/gnu/appinfo.html?cs
aid=FDB6DFFB07FE351C
>
> As I said in an earlier mail, my task is to hook
GStreamer into GNU
> Classpath.
>
> Now, I've found a problem that is blocking me from a
couple days and is
> taking me away all my sleep 
>
> I need to write a (Java) class that displays this kind
of information
> about an audio file:
>
> * Encoding type
> * Sample rate
> * Sample size in bits
> * Channels
> * Frame size
> * Frame rate
> * Endiannes
> * Header size
>
> Of course, I could just add a reader for any given kind
of audio file,
> but then this is pointless to have a gstreamer hook
that can recognize
> (almost) any type given the right plugin.
>
> My problem is that I can't find an example of how to
parse a file and
> extract this data (I need to do that in C, not Java).
The program should
> return as soon as all these info are retrieved (if
possible). I've see
> the Discover class from the python bindings (which
seems to be what I'm
> looking for), but I hate to admit that I was unable to
recreate its
> behaviour, though I think I'm on the correct way. What
I'm doing is this
> (to see what capabilities an element has), I get a
typefind element and
> attach a signal handler to it, but this seems to be not
enough, and all
> the output I get is:
>
> -----
> application/ogg
> print_pad
> size of caps: 1
> fields in structure: 0
> -----
>
> [...]
> g_signal_connect (G_OBJECT (typefind),
"have-type",
>                    G_CALLBACK (have_type_callback),
loop);
> [...]
>
> gboolean have_type_callback(GstElement *typefind,
>                            guint probability,
>                            const GstCaps *caps,
>                            gpointer data)
> {
>  [...]
>  GstStructure *st = NULL;
>  int size = 0;
>
>  g_fprintf (stderr, "print_padn");
>
>  size = gst_caps_get_size (caps);
>  g_fprintf (stderr, "size of caps: %dn",
size);
>
>  for (int j = 0; j < size; j++) {
>    st = gst_caps_get_structure (caps, j);
>    if (st != NULL) {
>      size = gst_structure_n_fields (st);
>      g_fprintf (stderr, "fields in structure:
%dn", size);
>
>      for (int i = 0; i < size; i++) {
>        g_fprintf (stderr, "field name:
%sn",
>                   gst_structure_nth_field_name(st,
i));
>      }
>    }
>  }
> [...]
> }
>
> I'm a bit new to all that, so forgive me if I'm doing
some incredibly
> stupid mistake 
>
> Thanks for all the help,
> Mario
> -- 
> Lima Software - http://www.limasoftware.
net/
> GNU Classpath Developer - http://www.classpath.org/
> Jabber: neugensjabber.org - Profile: http://
www.gtalkprofile.com/profile/9661.html
> pgp key: http://subkeys.pgp.net/
> PGP Key ID: 80F240CF
> Fingerprint: BA39 9666 94EC 8B73 27FA  FC7C 4086 63E3
80F2 40CF
>
> Please, support open standards:
> http://op
endocumentfellowship.org/petition/
> http://www.nosoftwa
repatents.com/
>
>
>
------------------------------------------------------------
-------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the
chance to share your
> opinions on IT & business topics through brief
surveys-and earn cash
> http://www.techsay.com/default.
php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devellists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstream
er-devel
>
> -- 
> Ce message a été vérifié par MailScanner
> pour des virus ou des polluriels et rien de
> suspect n'a été trouvé.
> Message délivré par le serveur de messagerie de
l'Université d'Evry.
>
>
------------------------------------------------------------
-------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the
chance to share your
opinions on IT & business topics through brief
surveys-and earn cash
http://www.techsay.com/default.
php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
gstreamer-devel mailing list
gstreamer-devellists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gstream
er-devel

  
Re: Summer Of Code Project Help
user name
2007-04-13 08:35:25
Hi,

 Try this in your callback function:
  ;  myInfo = gst_caps_to_string(caps);
   ; g_print(myInfo);

You will see something like that for a video pipeline in your console:
&nbsp; video/x-raw-rgb, bpp=(int)16, depth=(int)16, width=(int)640, height=(int)464, framerate=(fraction)25/1, pixel-aspect-ratio=(fraction)1/1, red_mask=(int)63488, green_mask=(int)2016, blue_mask=(int)31, endianness=(int)1234

hope this help you,
Erwan Masson



2007/4/13, Vincent Torri < vtorriuniv-evry.fr">vtorriuniv-evry.fr>:

Hey,

I wrote a prog that extracts (some of ?) those data from any
multimedia file (audio or video) 2 years ago. I've attached it.

Basically:
1) I build a basic pipeline : filesrc ! decodebin
2) I set the pipeline to the PAUSED state.
3) Each time a stream is found, I get its properties.

The program has 2 parts :
1) a lib one, that stores the properties
2) a binary one that uses the lib part. I've made a CLI one (no gui) and 3
gui, one with gtk. You'll have to disable the other gui to compile the
progs, iirc (or maybe they'll not be built as I think that you don't have
those toolkits. I can't remember).

That means that you can even use directly the lib part and integrate it to
your prog if you find it usefull. There is a GNU Copying licence, but I
think that it has been automatically created. I didn't intend to use the
GPL.

Or else, you can just look at how I wrote it and get only the audio part
(as the lib extracts also the video informations)

Example of output with the CLI:

Filename....................: ********.mp3
Size........................: 6,2 MB (or 6305,8 KB, or 6457150 B)
Container...................:  ;no informations

Streams
 &nbsp;|
 ; +-Audio stream #0
 &nbsp;   +-Mimetype..............: audio/mpeg
 &nbsp; &nbsp; +-Decoder info
 ; &nbsp;  | &nbsp;|
   ;  | &nbsp;+-Name...............: mad mp3 decoder
&nbsp; &nbsp;  | &nbsp;+-Description........: Uses mad code to decode mp3 streams
  ; &nbsp; | &nbsp;+-Class..............: Codec/Decoder/Audio
&nbsp;   ; | &nbsp;+-Author.............: Wim Taymans < wimfluendo.com">wimfluendo.com>
&nbsp; &nbsp;  |
 &nbsp; &nbsp; +-Duration..............: 0:04:29.31916666
&nbsp; &nbsp;  +-Sample rate...........: 44100
&nbsp; &nbsp;  +-Sample count..........: 11864307
&nbsp;   ; +-Channels..............: 2
 &nbsp; &nbsp; +-Endianess.............: 0
 &nbsp; &nbsp; +-Width.................: 32
 &nbsp;   +-Depth.................: 32
 ; &nbsp;  +-Signed................: yes

I hope this helps.

Regards,

Vincent Torri

On Fri, 13 Apr 2007, Mario Torre wrote:

&gt; Hello!
>;
> My project for the Google Summer Of Code was accepted as part of the GNU
> Project:
&gt; http://code.google.com/soc/gnu/appinfo.html?csaid=FDB6DFFB07FE351C
>
>; As I said in an earlier mail, my task is to hook GStreamer into GNU
> Classpath.
>
> Now, I've found a problem that is blocking me from a couple days and is
> taking me away all my sleep
>
> I need to write a (Java) class that displays this kind of information
> about an audio file:
>
> * Encoding type
> * Sample rate
> * Sample size in bits
> * Channels
&gt; * Frame size
> * Frame rate
> * Endiannes
> * Header size
>
> Of course, I could just add a reader for any given kind of audio file,
> but then this is pointless to have a gstreamer hook that can recognize
> (almost) any type given the right plugin.
&gt;
> My problem is that I can't find an example of how to parse a file and
> extract this data (I need to do that in C, not Java). The program should
>; return as soon as all these info are retrieved (if possible). I've see
> the Discover class from the python bindings (which seems to be what I'm
> looking for), but I hate to admit that I was unable to recreate its
> behaviour, though I think I'm on the correct way. What I'm doing is this
> (to see what capabilities an element has), I get a typefind element and
> attach a signal handler to it, but this seems to be not enough, and all
> the output I get is:
>
&gt; -----
> application/ogg
> print_pad
> size of caps: 1
> fields in structure: 0
> -----
>
> [...]
> g_signal_connect (G_OBJECT (typefind), "have-type",
; &nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; &nbsp; &nbsp;G_CALLBACK (have_type_callback), loop);
>; [...]
>
> gboolean have_type_callback(GstElement *typefind,
>&nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; &nbsp; guint probability,
>&nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; &nbsp; const GstCaps *caps,
>; &nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; &nbsp;gpointer data)
> {
>&nbsp; [...]
>&nbsp; GstStructure *st = NULL;
&gt; &nbsp;int size = 0;
>
&gt; &nbsp;g_fprintf (stderr, "print_padn";);
>
&gt; &nbsp;size = gst_caps_get_size (caps);
&gt; &nbsp;g_fprintf (stderr, "size of caps: %dn", size);
>;
; for (int j = 0; j < size; j++) {
>&nbsp; &nbsp; st = gst_caps_get_structure (caps, j);
>&nbsp; &nbsp; if (st != NULL) {
>&nbsp; &nbsp; &nbsp; size = gst_structure_n_fields (st);
>  ; &nbsp; &nbsp;g_fprintf (stderr, "fields in structure: %dn", size);
>;
; &nbsp; &nbsp; for (int i = 0; i < size; i++) {
>&nbsp; &nbsp;   ; &nbsp;g_fprintf (stderr, "field name: %sn",
  ; &nbsp; &nbsp; &nbsp; &nbsp;   ; &nbsp; &nbsp; gst_structure_nth_field_name(st, i));
>&nbsp;   ; &nbsp;}
>&nbsp; &nbsp; }
 }
>; [...]
> }
>
>; I'm a bit new to all that, so forgive me if I'm doing some incredibly
> stupid mistake
>
> Thanks for all the help,
> Mario
> --
> Lima Software - http://www.limasoftware.net/
&gt; GNU Classpath Developer - http://www.classpath.org/
> Jabber: neugensjabber.org">neugensjabber.org - Profile: http://www.gtalkprofile.com/profile/9661.html
> pgp key: http://subkeys.pgp.net/
> PGP Key ID: 80F240CF
&gt; Fingerprint: BA39 9666 94EC 8B73 27FA  FC7C 4086 63E3 80F2 40CF
>
> Please, support open standards:
> http://opendocumentfellowship.org/petition/
> http://www.nosoftwarepatents.com/
>
>;
> -------------------------------------------------------------------------
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to share your
> opinions on IT & business topics through brief surveys-and earn cash
>; http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devellists.sourceforge.net">gstreamer-devellists.sourceforge.net
> https://lists.sourceforge.net/lists/listinfo/gstreamer-devel
&gt;
> --
> Ce message a été vérifié par MailScanner
> pour des virus ou des polluriels et rien de
> suspect n'a été trouvé.
> Message délivré par le serveur de messagerie de l'Université d'Evry.
>
>
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&;p=sourceforge&CID=DEVDEV
_______________________________________________
gstreamer-devel mailing list
gstreamer-devellists.sourceforge.net"> gstreamer-devellists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/gstreamer-devel



[1-3]

about | contact  Other archives ( Real Estate discussion Medical topics )