summaryrefslogtreecommitdiff
path: root/ext/lame/test-lame.c
blob: 0aaee6e9fd6698d86a6de4cb18e29ea2a1f47697 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <gst/gst.h>


/* 
 * this example uses tee, fakesrc, fakesink and lame
 *
 * it requests a new pad from tee and attaches lame and fakesink
 * after iterating
 * it requests another one
 * this is to test if the encoder is initialized ok when adding to a
 * pipe that has played
 */

static void
error_callback (GObject *object, GstObject *orig, gchar *error)
{
    g_print ("ERROR: %s: %s\n", GST_OBJECT_NAME (orig), error);
}

int 
main (int argc, char *argv[])
{
  GstElement *pipeline;
  GstElement *src, *tee, *encoder1, *encoder2, *sink1, *sink2;
  GstPad *teepad1, *teepad2;
  GstCaps *caps;


  gst_init (&argc, &argv);

  /* create elements */
  if (!(pipeline = gst_elementfactory_make ("pipeline", "pipeline"))) return 1;
  if (!(src      = gst_elementfactory_make ("fakesrc",  "source")))   return 1;
  if (!(tee      = gst_elementfactory_make ("tee",      "tee")))      return 1;
  if (!(encoder1 = gst_elementfactory_make ("lame",     "lame1")))    return 1;
  if (!(encoder2 = gst_elementfactory_make ("lame",     "lame2")))    return 1;
  if (!(sink1    = gst_elementfactory_make ("fakesink", "sink1")))    return 1;
  if (!(sink2    = gst_elementfactory_make ("fakesink", "sink2")))    return 1;

  pipeline = gst_pipeline_new ("pipeline");
  g_signal_connect (pipeline, "error", G_CALLBACK (error_callback), NULL);

  /* set up input */
  g_print ("setting up input\n");
  gst_bin_add (GST_BIN (pipeline), src);
  gst_bin_add (GST_BIN (pipeline), tee);
  gst_pad_connect (gst_element_get_pad (src, "src"),
                   gst_element_get_pad (tee, "sink"));

  /* set caps on fakesrc */
  caps = GST_CAPS_NEW (
      "input audio",
      "audio/raw",
      "format", GST_PROPS_STRING ("int"),
      "rate", GST_PROPS_INT (44100)
      );
  g_assert (caps != NULL);
  g_print ("Setting caps on fakesrc's src pad\n");
  if (! (gst_pad_try_set_caps (gst_element_get_pad (src, "src"), caps)))
     g_print ("Could not set caps !\n");
	  
  /* request first pad from tee and connect */
  g_print ("attaching first output pipe to tee\n");
  teepad1 = gst_element_request_pad_by_name (tee, "src%d");

  gst_bin_add (GST_BIN (pipeline), encoder1);
  gst_bin_add (GST_BIN (pipeline), sink1);
  gst_pad_connect (teepad1, gst_element_get_pad (encoder1, "sink"));
  gst_pad_connect (gst_element_get_pad (encoder1, "src"),
                   gst_element_get_pad (sink1, "sink"));
      
  gst_element_set_state (pipeline, GST_STATE_PLAYING);
  /* iterate */
  g_print ("iterate\n");
  gst_bin_iterate (GST_BIN (pipeline));
  gst_element_set_state (pipeline, GST_STATE_PAUSED);

  /* request second pad and connect */
  g_print ("attaching second output pipe to tee\n");
  teepad2 = gst_element_request_pad_by_name (tee, "src%d");

  gst_bin_add (GST_BIN (pipeline), encoder2);
  gst_bin_add (GST_BIN (pipeline), sink2);
  gst_pad_connect (teepad2, gst_element_get_pad (encoder2, "sink"));
  gst_pad_connect (gst_element_get_pad (encoder2, "src"),
                   gst_element_get_pad (sink2, "sink"));

  gst_element_set_state (pipeline, GST_STATE_PLAYING);
  g_print ("iterate\n");
  gst_bin_iterate (GST_BIN (pipeline));
  g_print ("done\n");
  return 0;
}