/*++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
#+
#+     Internet Radio Automation & Encoding Toolkit
#+
#+     Copyright (C) 2018 - 2026
#+     by Kevin C. O'Kane
#+
#+     Kevin C. O'Kane
#+     kc.okane@gmail.com
#+     https://www.cs.uni.edu/~okane
#+     https://threadsafebooks.com/
#+
#+ 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
#+ the Free Software Foundation; either version 2 of the License, or
#+ (at your option) any later version.
#+
#+ This program is distributed in the hope that it will be useful,
#+ but WITHOUT ANY WARRANTY; without even the implied warranty of
#+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#+ GNU General Public License for more details.
#+
#+ You should have received a copy of the GNU General Public License
#+ along with this program; if not, write to the Free Software
#+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
#+
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/

//	June 28, 2026

#include "includes.h"
#include "defines.h"
#include "common-externs.h"
#include "common-fcn-headers.h"


#include <vlc/libvlc.h>
#include <vlc/libvlc_renderer_discoverer.h>
#include <vlc/libvlc_media.h>
#include <vlc/libvlc_media_player.h>

#define SLASH '/'

void	sharpen() {

	char tmp[16000], filename[4096], filetype[256];
	time_t tmark = time(0);
	int i, j, k, pcount = 0;

	GtkAdjustment *adj =
	    gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(sharp_amount));
	gdouble luma =  gtk_adjustment_get_value(adj);

	adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(sharp_x));
	int srp_x =  gtk_adjustment_get_value(adj);

	if (! (srp_x % 2) ) { // must be odd
		error_message("Sharpen X value must be odd.", NULL);
		return;
		}

	adj = gtk_spin_button_get_adjustment (GTK_SPIN_BUTTON(sharp_y));
	int srp_y =  gtk_adjustment_get_value(adj);

	if (! (srp_y % 2) ) { // must be odd
		error_message("Sharpen Y value must be odd.", NULL);
		return;
		}

	for (i = 0; i < (SP->scount); i++) {

		if (programData[i]->play) {

			pcount++;

			if (button_flag == RIGHT) {

				sprintf(tmp, "ffmpeg -y " FFLOGLEVEL " -t " PREV_LENGTH " -i \"%s\" "
				        "-vf fps=25,\"unsharp=luma_msize_x=%d:luma_msize_y=%d:"
				        "luma_amount=%0.2f\" "
				        "  -c:a libmp3lame -b:a 128k -c:v libx264 -preset veryslow -crf 20  " FFPLAY,
				        ProgramArray[i], srp_x, srp_y, luma);

				preview_run(tmp);

				return;

				}

			new_name(filename, ProgramArray[i], "sharp");

			sprintf(tmp, "ffmpeg -y -loglevel info -i \"%s\" "
			        "-vf fps=25,\"unsharp=luma_msize_x=%d:luma_msize_y=%d:luma_amount=%0.2f\" "
			        "  -c:a libmp3lame -b:a 128k -c:v libx264 -preset veryslow -crf 20  \"%s\"",
			        ProgramArray[i], srp_x, srp_y, luma, filename);

/*********************************** cuda trial ****************************************************
						sprintf(tmp, "ffmpeg -y -loglevel info -vsync 0 -hwaccel cuda  -i \"%s\" "
							"-vf \"unsharp=luma_msize_x=7:luma_msize_y=7:luma_amount=2.5\" "
							"-c:v h264_nvenc -b:v 100M \"%s\"",
			                		ProgramArray[i], filename);
***************************************************************************************************/

			int err_stat = ff_run("Sharp", tmp, i);

			if (err_stat != 0) {
				error_message("An error or interrupt occurred while processing", tmp);
				sprintf(tmp, "rm \"%s\"", filename);
				return;
				}

			printf("Created: %s\n\n", filename);

			}
		}


	if (!pcount) {
		error_message("No files selected.", NULL);
		}

	clear_play();

        on_scan_video_dir_clicked(UPDATE_TILES);
        DisplayProgramButtons();

//	on_scan_video_dir_clicked(NULL);

	}


void on_sharpen_clicked (GtkWidget *w) {

	button_flag = LEFT;
	sharpen();
	return;
	}


void on_sharpen1_clicked (GtkWidget *w) {

	button_flag = RIGHT;
	sharpen();
	return;
	}


