]> rtime.felk.cvut.cz Git - frescor/streamer.git/blobdiff - streamer.c
Updated to new FRHS protocol in ffmpeg
[frescor/streamer.git] / streamer.c
index c3a05697938f3444319c5c3db6b138b03a35a2fc..ee77884582e479cef4d6a6ed74d3b35e7b7cf431 100644 (file)
@@ -5,6 +5,8 @@
  */
 #include <unistd.h>
 #include <stdlib.h>
+#include <signal.h>
+#include <pthread.h>
 
 #include <libavformat/avformat.h>
 #include <libavdevice/avdevice.h>
 #include <ul_logreg.h>
 #endif
 
-#ifdef CONFIG_STREAMER_WITH_FRSH
+#ifdef CONFIG_FFMPEG_WITH_FRSH
 #include <frsh.h>
-#endif
 
-extern long int udp_budget, udp_period;
+/*temporrary solution to pass network parameters */
+extern long int avformat_frsh_budget, avformat_frsh_period;
+#endif /*CONFIG_STREAMER_WITH_FRSH*/
 
 static const char *sdp_file = "sdp.txt";
 static const char *vdev = "/dev/video0";
@@ -59,6 +62,10 @@ usage(void)
        printf("  -r <path>      video device [%s]\n", vdev);
        printf("  -m <addr>      destination IP address\n");
        printf("  -i <string>    input video device format [%s]\n", impform);
+      #ifdef CONFIG_STREAMER_WITH_FRSH
+       printf("  -b <number>    network budget\n");
+       printf("  -p <number>    network period for given budget\n");
+      #endif /*CONFIG_STREAMER_WITH_FRSH*/
       #ifdef CONFIG_OC_ULUT
        printf("  -l <number>|<domain>=<number>,...\n");
       #endif /*CONFIG_OC_ULUT*/
@@ -68,7 +75,7 @@ static int args_parse(int argc, char *argv[])
 {
   int v;
 
-  while ((v = getopt(argc, argv, "w:h:r:d:m:i:l:")) >= 0) {
+  while ((v = getopt(argc, argv, "w:h:r:d:m:i:l:b:p:")) >= 0) {
     switch (v) {
       case 'w':
         width = atoi(optarg);
@@ -92,6 +99,15 @@ static int args_parse(int argc, char *argv[])
        else if(!strcmp(impform, "v4l2"))
          impform = "video4linux2";
         break;
+      #ifdef CONFIG_STREAMER_WITH_FRSH
+      case 'b':
+       udp_budget = atol(optarg);
+       break;
+      case 'p':
+       udp_period = atol(optarg);
+       break;
+      #endif /*CONFIG_STREAMER_WITH_FRSH*/
+
       #ifdef CONFIG_OC_ULUT
       case 'l':
        ul_log_domain_arg2levels(optarg);
@@ -131,6 +147,7 @@ void* streamer_run(void* args)
         opkt = pkt_encode(os, f);
         if (opkt) {
           pkt_send(os, opkt);
+         printf("opkt size: %d\n", opkt->size);
         }
       }
       //rt_job_end();
@@ -166,15 +183,15 @@ int main(int argc, char *argv[])
 
   block_signals();
 
-#ifdef CONFIG_STREAMER_WITH_FRSH
+#ifdef CONFIG_FFMPEG_WITH_FRSH
   ret = frsh_init();
   if (ret) PERROR_AND_EXIT(ret, "frsh_init1");
-#endif /*CONFIG_STREAMER_WITH_FRSH*/
-  
-  /* fill contract params */
-  udp_budget = 50000; 
-  udp_period = 500;
-  
+
+  /* fill default network contract params */
+  avformat_frsh_budget = 50000; 
+  avformat_frsh_period = 500;
+#endif /*CONFIG_FFMPEG_WITH_FRSH*/
+
   avcodec_register_all();
   av_register_all();
   avdevice_register_all();
@@ -197,12 +214,13 @@ int main(int argc, char *argv[])
   os->streams[0]->codec->width = s->streams[0]->codec->width;
   os->streams[0]->codec->height = s->streams[0]->codec->height;
   os->streams[0]->codec->time_base = s->streams[0]->codec->time_base;
+  os->streams[0]->codec->bit_rate = 300000;
   codec_connect(s->streams[0]->codec, os->streams[0]->codec);
   out_codec_open(os);
   dump_format(os, 0, os->filename, 1);
   sdp_print(os, sdp_file);
 
-#ifdef CONFIG_AQUOSA 
+#if CONFIG_STREAMER_WITH_FRSH && CONFIG_AQUOSA 
   frsh_thread_attr_t frsh_attr;
   frsh_thread_id_t thread;
   frsh_vres_id_t cpu_vres;
@@ -222,7 +240,7 @@ int main(int argc, char *argv[])
                                             FRSH_CT_REGULAR);
        if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_basic_params");
        ret = frsh_contract_set_resource_and_label(&cpu_contract, 
-                       FRSH_RT_PROCESSOR, 0,"aqcpu_cont");
+                       FRSH_RT_PROCESSOR, FRSH_CPU_ID_DEFAULT, "aqcpu_cont");
        if (ret) PERROR_AND_EXIT(ret, "frsh_contract_set_resource_and_label");
 
        ret = frsh_contract_negotiate(&cpu_contract, &cpu_vres);
@@ -247,6 +265,7 @@ int main(int argc, char *argv[])
 
        printf("Finishing\n");
 
+        close_output_stream(os);
 #else
        pthread_attr_t attr;
        pthread_t streamer_th;
@@ -264,6 +283,8 @@ int main(int argc, char *argv[])
        pthread_join(streamer_th, (void**) NULL);
 
        printf("Finishing\n");
+
+        close_output_stream(os);
 #endif
 
   return 0;