+ int frame = 0;
+ int fps_avg = 0;
+ struct timespec start, end, d;
+ static unsigned max_size = 0, min_size = -1;
+ static double avg_size = 0;
+ clock_gettime(CLOCK_MONOTONIC, &start);
+ start.tv_sec--; /* Avoid division by zero */
+ done = 0;
+ while (!(done = streamer_run_done_rq)) {
+ AVPacket *pkt;
+ pkt = read_input_packet(s);
+
+ clock_gettime(CLOCK_MONOTONIC, &end);
+ timespec_subtract(&d, &end, &start);
+ start = end;
+ int fps_now = (1000<<16)/(d.tv_sec*1000+d.tv_nsec/1000000);
+ fps_avg += (fps_now - fps_avg) >> 4;
+
+ if (pkt == NULL) {
+ done = 1;
+ } else {
+ AVFrame *f;
+ AVPacket *opkt;
+
+ pkt->pts += s->streams[pkt->stream_index]->start_time;
+ //rt_job_start(pkt->pts);
+ f = pkt_decode(s, pkt);
+ if (f) {
+ int keyframe;
+ opkt = pkt_encode(os, f);
+ keyframe = os->streams[0]->codec->coded_frame->key_frame;
+ if (opkt) {
+ pkt_send(os, opkt);
+
+ if (opkt->size > max_size)
+ max_size = opkt->size;
+ if (opkt->size < min_size)
+ min_size = opkt->size;
+ avg_size = avg_size*frame/(frame+1) + (double)opkt->size/(frame+1);
+ printf("%5d%c: %2d (%4.1f) fps opkt size: %5d b max=%5u b min=%5u b avg=%5.0f\n",
+ frame, keyframe ? '*':' ',
+ fps_avg>>16, 1000.0/(d.tv_sec*1000+d.tv_nsec/1000000),
+ opkt->size, max_size, min_size, avg_size);
+ if (frame % 100 == 0) max_size=0;
+ frame++;// = (frame + 1) % fps;
+ }
+ }
+ //rt_job_end();
+ av_free_packet(pkt);
+ }
+ }
+
+ return NULL;
+}
+
+void wait_for_ending_command(void) {
+ sigset_t sigset;
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGINT);
+ sigaddset(&sigset, SIGTERM);
+ sigwaitinfo(&sigset, NULL);
+}
+static void block_signals(void) {
+ sigset_t sigset;
+ sigemptyset(&sigset);
+ sigaddset(&sigset, SIGINT);
+ sigaddset(&sigset, SIGTERM);
+ sigprocmask(SIG_BLOCK,&sigset,NULL);
+ pthread_sigmask(SIG_BLOCK,&sigset,NULL);
+}
+
+
+int main(int argc, char *argv[])
+{
+
+ //long int cpu_budget, cpu_period;
+ int ret;
+
+ block_signals();
+
+#ifdef CONFIG_FFMPEG_WITH_FRSH
+ ret = frsh_init();
+ if (ret) PERROR_AND_EXIT(ret, "frsh_init1");
+
+ /* fill default network contract params */
+ frsh_rtp_budget = 100*bitrate/8/100;
+ frsh_rtp_period_ms = 1000;
+ frsh_rtp_deadline_ms = 1000/fps;
+#endif /*CONFIG_FFMPEG_WITH_FRSH*/