picoproj: support setting the zoom mode
[libam7xxx.git] / examples / am7xxx-play.c
index 54f92e9..324ed89 100644 (file)
 
 #include <am7xxx.h>
 
+/* On some systems ENOTSUP is not defined, fallback to its value on
+ * linux which is equal to EOPNOTSUPP which is 95
+ */
+#ifndef ENOTSUP
+#define ENOTSUP 95
+#endif
+
 static unsigned int run = 1;
 
 struct video_input_ctx {
@@ -199,8 +206,10 @@ static int video_output_init(struct video_output_ctx *output_ctx,
        output_codec_ctx->bit_rate   = (input_ctx->codec_ctx)->bit_rate;
        output_codec_ctx->width      = new_output_width;
        output_codec_ctx->height     = new_output_height;
-       output_codec_ctx->time_base.num  = (input_ctx->codec_ctx)->time_base.num;
-       output_codec_ctx->time_base.den  = (input_ctx->codec_ctx)->time_base.den;
+       output_codec_ctx->time_base.num  =
+               (input_ctx->format_ctx)->streams[input_ctx->video_stream_index]->time_base.num;
+       output_codec_ctx->time_base.den  =
+               (input_ctx->format_ctx)->streams[input_ctx->video_stream_index]->time_base.den;
 
        /* When the raw format is requested we don't actually need to setup
         * and open a decoder
@@ -530,6 +539,7 @@ static void unset_run(int signo)
        run = 0;
 }
 
+#ifdef HAVE_SIGACTION
 static int set_signal_handler(void (*signal_handler)(int))
 {
        struct sigaction new_action;
@@ -557,6 +567,15 @@ static int set_signal_handler(void (*signal_handler)(int))
 out:
        return ret;
 }
+#else
+static int set_signal_handler(void (*signal_handler)(int))
+{
+       (void)signal_handler;
+       fprintf(stderr, "set_signal_handler() not implemented, sigaction not available\n");
+       return 0;
+}
+#endif
+
 
 static void usage(char *name)
 {
@@ -604,7 +623,7 @@ int main(int argc, char *argv[])
        am7xxx_context *ctx;
        am7xxx_device *dev;
 
-       while ((opt = getopt(argc, argv, "f:i:o:s:uF:q:l:hp:")) != -1) {
+       while ((opt = getopt(argc, argv, "f:i:o:s:uF:q:l:p:h")) != -1) {
                switch (opt) {
                case 'f':
                        input_format_string = strdup(optarg);
@@ -613,6 +632,7 @@ int main(int argc, char *argv[])
                        input_path = strdup(optarg);
                        break;
                case 'o':
+#ifdef HAVE_STRTOK_R
                        /*
                         * parse suboptions, the expected format is something
                         * like:
@@ -629,6 +649,9 @@ int main(int argc, char *argv[])
                                av_dict_set(&options, subopt_name, subopt_value, 0);
                        }
                        free(subopts_saved);
+#else
+                       fprintf(stderr, "Option '-o' not implemented\n");
+#endif
                        break;
                case 's':
                        rescale_method = atoi(optarg);
@@ -684,11 +707,6 @@ int main(int argc, char *argv[])
                                log_level = AM7XXX_LOG_ERROR;
                        }
                        break;
-               case 'h':
-                       usage(argv[0]);
-                       ret = 0;
-                       goto out;
-                       break;
                case 'p':
                        power_mode = atoi(optarg);
                        switch(power_mode) {
@@ -705,6 +723,11 @@ int main(int argc, char *argv[])
                                goto out;
                        }
                        break;
+               case 'h':
+                       usage(argv[0]);
+                       ret = 0;
+                       goto out;
+                       break;
                default: /* '?' */
                        usage(argv[0]);
                        ret = -EINVAL;