X-Git-Url: https://git.ao2.it/libam7xxx.git/blobdiff_plain/4c7287240fd97699708dd835aca141e6ac8bd036..8f6efd04b7f47174cf9e93adbcd11c5779db0c7e:/examples/am7xxx-play.c?ds=sidebyside

diff --git a/examples/am7xxx-play.c b/examples/am7xxx-play.c
index 21e5187..6d6ef1c 100644
--- a/examples/am7xxx-play.c
+++ b/examples/am7xxx-play.c
@@ -1,7 +1,7 @@
 /*
  * am7xxx-play - play stuff on an am7xxx device (e.g. Acer C110, PicoPix 1020)
  *
- * Copyright (C) 2012  Antonio Ospite <ospite@studenti.unina.it>
+ * Copyright (C) 2012-2014  Antonio Ospite <ao2@ao2.it>
  *
  * This program is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -223,8 +223,8 @@ static int video_output_init(struct video_output_ctx *output_ctx,
 		goto out;
 	}
 
-	output_codec_ctx->pix_fmt    = PIX_FMT_YUVJ420P;
-	output_codec_ctx->codec_id   = CODEC_ID_MJPEG;
+	output_codec_ctx->pix_fmt    = AV_PIX_FMT_YUVJ420P;
+	output_codec_ctx->codec_id   = AV_CODEC_ID_MJPEG;
 	output_codec_ctx->codec_type = AVMEDIA_TYPE_VIDEO;
 
 	/* Set quality and other VBR settings */
@@ -291,7 +291,7 @@ static int am7xxx_play(const char *input_format_string,
 	AVPacket out_packet;
 	int got_picture;
 	int got_packet;
-	int ret = 0;
+	int ret;
 
 	ret = video_input_init(&input_ctx, input_format_string, input_path, input_options);
 	if (ret < 0) {
@@ -306,7 +306,7 @@ static int am7xxx_play(const char *input_format_string,
 	}
 
 	/* allocate an input frame */
-	picture_raw = avcodec_alloc_frame();
+	picture_raw = av_frame_alloc();
 	if (picture_raw == NULL) {
 		fprintf(stderr, "cannot allocate the raw picture frame!\n");
 		ret = -ENOMEM;
@@ -314,7 +314,7 @@ static int am7xxx_play(const char *input_format_string,
 	}
 
 	/* allocate output frame */
-	picture_scaled = avcodec_alloc_frame();
+	picture_scaled = av_frame_alloc();
 	if (picture_scaled == NULL) {
 		fprintf(stderr, "cannot allocate the scaled picture!\n");
 		ret = -ENOMEM;
@@ -354,6 +354,7 @@ static int am7xxx_play(const char *input_format_string,
 		goto cleanup_out_buf;
 	}
 
+	got_packet = 0;
 	while (run) {
 		/* read packet */
 		ret = av_read_frame(input_ctx.format_ctx, &in_packet);
@@ -381,7 +382,7 @@ static int am7xxx_play(const char *input_format_string,
 			goto end_while;
 		}
 
-		/* if we get the complete frame */
+		/* if we got the complete frame */
 		if (got_picture) {
 			/* convert it to YUV */
 			sws_scale(sw_scale_ctx,
@@ -427,12 +428,12 @@ static int am7xxx_play(const char *input_format_string,
 			fclose(file);
 #endif
 
-			ret = am7xxx_send_image(dev,
-						image_format,
-						(output_ctx.codec_ctx)->width,
-						(output_ctx.codec_ctx)->height,
-						out_picture,
-						out_picture_size);
+			ret = am7xxx_send_image_async(dev,
+						      image_format,
+						      (output_ctx.codec_ctx)->width,
+						      (output_ctx.codec_ctx)->height,
+						      out_picture,
+						      out_picture_size);
 			if (ret < 0) {
 				perror("am7xxx_send_image");
 				run = 0;
@@ -440,7 +441,7 @@ static int am7xxx_play(const char *input_format_string,
 			}
 		}
 end_while:
-		if (!output_ctx.raw_output)
+		if (!output_ctx.raw_output && got_packet)
 			av_free_packet(&out_packet);
 		av_free_packet(&in_packet);
 	}
@@ -449,9 +450,9 @@ end_while:
 cleanup_out_buf:
 	av_free(out_buf);
 cleanup_picture_scaled:
-	av_free(picture_scaled);
+	av_frame_free(&picture_scaled);
 cleanup_picture_raw:
-	av_free(picture_raw);
+	av_frame_free(&picture_raw);
 
 cleanup_output:
 	/* av_free is needed as well,
@@ -555,7 +556,7 @@ static int set_signal_handler(void (*signal_handler)(int))
 {
 	struct sigaction new_action;
 	struct sigaction old_action;
-	int ret = 0;
+	int ret;
 
 	new_action.sa_handler = signal_handler;
 	sigemptyset(&new_action.sa_mask);
@@ -610,8 +611,8 @@ static void usage(char *name)
 	       AM7XXX_POWER_OFF, AM7XXX_POWER_TURBO);
 	printf("\t\t\t\tWARNING: Level 2 and greater require the master AND\n");
 	printf("\t\t\t\t         the slave connector to be plugged in.\n");
-	printf("\t-z <zoom mode>\t\tthe display zoom mode, between %d (original) and %d (test)\n",
-	       AM7XXX_ZOOM_ORIGINAL, AM7XXX_ZOOM_TEST);
+	printf("\t-z <zoom mode>\t\tthe display zoom mode, between %d (original) and %d (tele)\n",
+	       AM7XXX_ZOOM_ORIGINAL, AM7XXX_ZOOM_TELE);
 	printf("\t-h \t\t\tthis help message\n");
 	printf("\n\nEXAMPLES OF USE:\n");
 	printf("\t%s -f x11grab -i :0.0 -o video_size=800x480\n", name);
@@ -635,8 +636,8 @@ int main(int argc, char *argv[])
 	unsigned int quality = 95;
 	int log_level = AM7XXX_LOG_INFO;
 	int device_index = 0;
-	am7xxx_power_mode power_mode = AM7XXX_POWER_LOW;
-	am7xxx_zoom_mode zoom = AM7XXX_ZOOM_ORIGINAL;
+	int power_mode = AM7XXX_POWER_LOW;
+	int zoom = AM7XXX_ZOOM_ORIGINAL;
 	int format = AM7XXX_IMAGE_FORMAT_JPEG;
 	am7xxx_context *ctx;
 	am7xxx_device *dev;
@@ -665,7 +666,7 @@ int main(int argc, char *argv[])
 			 *   draw_mouse=1,framerate=100,video_size=800x480
 			 */
 			subopts = subopts_saved = strdup(optarg);
-			while((subopt = strtok_r(subopts, ",", &subopts))) {
+			while ((subopt = strtok_r(subopts, ",", &subopts))) {
 				char *subopt_name = strtok_r(subopt, "=", &subopt);
 				char *subopt_value = strtok_r(NULL, "", &subopt);
 				if (subopt_value == NULL) {
@@ -757,11 +758,12 @@ int main(int argc, char *argv[])
 			case AM7XXX_ZOOM_H:
 			case AM7XXX_ZOOM_H_V:
 			case AM7XXX_ZOOM_TEST:
+			case AM7XXX_ZOOM_TELE:
 				fprintf(stdout, "Zoom: %d\n", zoom);
 				break;
 			default:
 				fprintf(stderr, "Invalid zoom mode value, must be between %d and %d\n",
-					AM7XXX_ZOOM_ORIGINAL, AM7XXX_ZOOM_TEST);
+					AM7XXX_ZOOM_ORIGINAL, AM7XXX_ZOOM_TELE);
 				ret = -EINVAL;
 				goto out;
 			}