1
/***************************************************************************
2
ADM_guiChromaShift.cpp - description
4
begin : Sun Aug 24 2003
5
copyright : (C) 2002-2003 by mean
6
email : fixounet@free.fr
7
***************************************************************************/
9
/***************************************************************************
11
* This program is free software; you can redistribute it and/or modify *
12
* it under the terms of the GNU General Public License as published by *
13
* the Free Software Foundation; either version 2 of the License, or *
14
* (at your option) any later version. *
16
***************************************************************************/
32
#include <ADM_assert.h>
35
#include "ADM_editor/ADM_edit.hxx"
36
#include "ADM_video/ADM_genvideo.hxx"
37
#include "ADM_video/ADM_vidCommonFilter.h"
39
#include <gdk/gdkkeysyms.h>
43
#include <gdk/gdkkeysyms.h>
47
#include "callbacks.h"
49
#include "ADM_gui2/support.h"
50
#include "ADM_toolkit/toolkit_gtk.h"
51
#include "ADM_toolkit/toolkit_gtk_include.h"
52
#include "ADM_toolkit/toolkit.hxx"
53
#include "ADM_library/default.h"
56
#include "ADM_colorspace/ADM_rgb.h"
57
#include "ADM_video/ADM_vidChromaShift.h"
59
#include "ADM_toolkit/ADM_debugID.h"
60
#define MODULE_NAME MODULE_FILTER
61
#include "ADM_toolkit/ADM_debug.h"
65
#include "prototype.h"
67
#define SPIN_GET(x,y) {y= gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(lookup_widget(dialog,#x))) ;\
68
printf(#x":%d\n", y);}
70
#define SPIN_SET(x,y) {gtk_spin_button_set_value(GTK_SPIN_BUTTON(lookup_widget(dialog,#x)),(gfloat)y) ; \
71
printf(#x":%d\n", y);}
74
static uint8_t *video_working,*video_rgb;
75
static ADMImage *video_src;
76
static int32_t shift_u, shift_v;
77
static uint32_t ww,hh;
79
static GtkWidget *dialog;
80
static GtkWidget *create_ChromaShift( void );
81
static uint8_t DIA_getChromaShift( void );
82
static void chromadraw (GtkWidget *dialog,uint32_t w,uint32_t h );
83
static void read( void );
84
static void upload ( void );
85
static gboolean gui_draw( void );
86
static gboolean gui_update( void );
87
static void update(void);
89
static ColYuvRgb *rgbConv=NULL;
90
uint8_t ADMVideoChromaShift::configure( AVDMGenericVideoStream *instream)
100
// Get info from previous filter
101
ww=_in->getInfo()->width;
102
hh= _in->getInfo()->height;
104
rgbConv=new ColYuvRgb(ww,hh);
105
rgbConv->reset(ww,hh);
107
printf("\n Chromashift in : %lu x %lu\n",ww,hh);
109
video_src=new ADMImage(ww,hh);// uint8_t [ww*hh*2];
110
ADM_assert(video_src);
111
video_working=new uint8_t [ww*hh*2];
112
ADM_assert(video_working);
114
video_rgb=new uint8_t [ww*hh*4];
115
ADM_assert(video_rgb);
118
// ask current frame from previous filter
119
ADM_assert(instream->getFrameNumberNoAlloc(curframe, &l,
126
ret=DIA_getChromaShift();
133
delete [] video_working;
144
uint8_t DIA_getChromaShift( void )
147
dialog=create_ChromaShift();
149
gtk_widget_set_usize(WID(drawingarea1), ww,hh);
150
gtk_widget_show(dialog);
152
gtk_signal_connect(GTK_OBJECT(WID(drawingarea1)), "expose_event",
153
GTK_SIGNAL_FUNC(gui_draw),
155
gtk_signal_connect (GTK_OBJECT(WID( spinbutton_U)), "value_changed",
156
GTK_SIGNAL_FUNC (gui_update),
158
gtk_signal_connect (GTK_OBJECT(WID( spinbutton_V)), "value_changed",
159
GTK_SIGNAL_FUNC (gui_update),
165
while( (response=gtk_dialog_run(GTK_DIALOG(dialog)))==GTK_RESPONSE_APPLY)
170
if(response==GTK_RESPONSE_OK)
176
gtk_widget_destroy(dialog);
183
SPIN_GET(spinbutton_U,shift_u);
184
SPIN_GET(spinbutton_V,shift_v);
188
SPIN_SET(spinbutton_U,shift_u);
189
SPIN_SET(spinbutton_V,shift_v);
191
/*---------------------------------------------------------------------------
192
Green-ify the displayed frame on cropped parts
198
memcpy(video_working,video_src->data,(ww*hh));
201
ADMVideoChromaShift::shift(video_working+ww*hh,
202
video_src->data+ww*hh, ww>>1,hh>>1,shift_u);
203
ADMVideoChromaShift::shift(video_working+((5*ww*hh)>>2),
204
video_src->data+((5*ww*hh)>>2), ww>>1,hh>>1,shift_v);
206
ADMVideoChromaShift::fixup(video_working,ww,hh,shift_u*2);
208
ADMVideoChromaShift::fixup(video_working,ww,hh,shift_v*2);
210
//COL_yv12rgb(ww,hh,video_working,video_rgb);
211
rgbConv->scale(video_working,video_rgb);
212
chromadraw(dialog,ww,hh);
213
// printf("\n Updated..\n");
215
gboolean gui_update( void )
217
//printf(" GUI !\n");
223
/*---------------------------------------------------------------------------
224
Actually draw the working frame on screen
226
gboolean gui_draw( void )
228
chromadraw(dialog,ww,hh);
231
void chromadraw (GtkWidget *dialog,uint32_t w,uint32_t h )
234
draw=WID(drawingarea1);
235
GUI_RGBDisplay(video_rgb, w,h, (void *)draw);
237
/*----------------------------------------------------------------*/
238
GtkWidget *create_ChromaShift (void)
240
GtkWidget *ChromaShift;
241
GtkWidget *dialog_vbox1;
246
GtkObject *spinbutton_U_adj;
247
GtkWidget *spinbutton_U;
248
GtkObject *spinbutton_V_adj;
249
GtkWidget *spinbutton_V;
250
GtkWidget *drawingarea1;
251
GtkWidget *dialog_action_area1;
252
GtkWidget *cancelbutton1;
253
GtkWidget *applybutton1;
254
GtkWidget *okbutton1;
256
ChromaShift = gtk_dialog_new ();
257
gtk_window_set_title (GTK_WINDOW (ChromaShift), _("ChromaShift"));
259
dialog_vbox1 = GTK_DIALOG (ChromaShift)->vbox;
260
gtk_widget_show (dialog_vbox1);
262
vbox1 = gtk_vbox_new (FALSE, 0);
263
gtk_widget_show (vbox1);
264
gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0);
266
table1 = gtk_table_new (2, 2, FALSE);
267
gtk_widget_show (table1);
268
gtk_box_pack_start (GTK_BOX (vbox1), table1, TRUE, TRUE, 0);
270
label1 = gtk_label_new (_("U Shift :"));
271
gtk_widget_show (label1);
272
gtk_table_attach (GTK_TABLE (table1), label1, 0, 1, 0, 1,
273
(GtkAttachOptions) (GTK_FILL),
274
(GtkAttachOptions) (0), 0, 0);
275
gtk_label_set_justify (GTK_LABEL (label1), GTK_JUSTIFY_LEFT);
276
gtk_misc_set_alignment (GTK_MISC (label1), 0, 0.5);
278
label2 = gtk_label_new (_("V Shift :"));
279
gtk_widget_show (label2);
280
gtk_table_attach (GTK_TABLE (table1), label2, 0, 1, 1, 2,
281
(GtkAttachOptions) (GTK_FILL),
282
(GtkAttachOptions) (0), 0, 0);
283
gtk_label_set_justify (GTK_LABEL (label2), GTK_JUSTIFY_LEFT);
284
gtk_misc_set_alignment (GTK_MISC (label2), 0, 0.5);
286
spinbutton_U_adj = gtk_adjustment_new (0, -32, 32, 1, 10, 10);
287
spinbutton_U = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton_U_adj), 1, 0);
288
gtk_widget_show (spinbutton_U);
289
gtk_table_attach (GTK_TABLE (table1), spinbutton_U, 1, 2, 0, 1,
290
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
291
(GtkAttachOptions) (0), 0, 0);
292
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton_U), TRUE);
294
spinbutton_V_adj = gtk_adjustment_new (0, -32, 32, 1, 10, 10);
295
spinbutton_V = gtk_spin_button_new (GTK_ADJUSTMENT (spinbutton_V_adj), 1, 0);
296
gtk_widget_show (spinbutton_V);
297
gtk_table_attach (GTK_TABLE (table1), spinbutton_V, 1, 2, 1, 2,
298
(GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
299
(GtkAttachOptions) (0), 0, 0);
300
gtk_spin_button_set_numeric (GTK_SPIN_BUTTON (spinbutton_V), TRUE);
302
drawingarea1 = gtk_drawing_area_new ();
303
gtk_widget_show (drawingarea1);
304
gtk_box_pack_start (GTK_BOX (vbox1), drawingarea1, TRUE, TRUE, 0);
305
gtk_widget_set_size_request (drawingarea1, 512, 384);
307
dialog_action_area1 = GTK_DIALOG (ChromaShift)->action_area;
308
gtk_widget_show (dialog_action_area1);
309
gtk_button_box_set_layout (GTK_BUTTON_BOX (dialog_action_area1), GTK_BUTTONBOX_END);
311
cancelbutton1 = gtk_button_new_from_stock ("gtk-cancel");
312
gtk_widget_show (cancelbutton1);
313
gtk_dialog_add_action_widget (GTK_DIALOG (ChromaShift), cancelbutton1, GTK_RESPONSE_CANCEL);
314
GTK_WIDGET_SET_FLAGS (cancelbutton1, GTK_CAN_DEFAULT);
316
applybutton1 = gtk_button_new_from_stock ("gtk-apply");
317
gtk_widget_show (applybutton1);
318
gtk_dialog_add_action_widget (GTK_DIALOG (ChromaShift), applybutton1, GTK_RESPONSE_APPLY);
319
GTK_WIDGET_SET_FLAGS (applybutton1, GTK_CAN_DEFAULT);
321
okbutton1 = gtk_button_new_from_stock ("gtk-ok");
322
gtk_widget_show (okbutton1);
323
gtk_dialog_add_action_widget (GTK_DIALOG (ChromaShift), okbutton1, GTK_RESPONSE_OK);
324
GTK_WIDGET_SET_FLAGS (okbutton1, GTK_CAN_DEFAULT);
326
/* Store pointers to all widgets, for use by lookup_widget(). */
327
GLADE_HOOKUP_OBJECT_NO_REF (ChromaShift, ChromaShift, "ChromaShift");
328
GLADE_HOOKUP_OBJECT_NO_REF (ChromaShift, dialog_vbox1, "dialog_vbox1");
329
GLADE_HOOKUP_OBJECT (ChromaShift, vbox1, "vbox1");
330
GLADE_HOOKUP_OBJECT (ChromaShift, table1, "table1");
331
GLADE_HOOKUP_OBJECT (ChromaShift, label1, "label1");
332
GLADE_HOOKUP_OBJECT (ChromaShift, label2, "label2");
333
GLADE_HOOKUP_OBJECT (ChromaShift, spinbutton_U, "spinbutton_U");
334
GLADE_HOOKUP_OBJECT (ChromaShift, spinbutton_V, "spinbutton_V");
335
GLADE_HOOKUP_OBJECT (ChromaShift, drawingarea1, "drawingarea1");
336
GLADE_HOOKUP_OBJECT_NO_REF (ChromaShift, dialog_action_area1, "dialog_action_area1");
337
GLADE_HOOKUP_OBJECT (ChromaShift, cancelbutton1, "cancelbutton1");
338
GLADE_HOOKUP_OBJECT (ChromaShift, applybutton1, "applybutton1");
339
GLADE_HOOKUP_OBJECT (ChromaShift, okbutton1, "okbutton1");