1 /***************************************************************************
2 DIA_preview.cpp
3 ---------------
4
5 Previewer, we switch to RGB (only one Xv at a time) and display the incoming
6 YV12 buffer in a nice windowd
7
8 begin : Mon Mar 25 2002
9 copyright : (C) 2002 by mean
10 email : fixounet@free.fr
11 ***************************************************************************/
12
13 /***************************************************************************
14 * *
15 * This program is free software; you can redistribute it and/or modify *
16 * it under the terms of the GNU General Public License as published by *
17 * the Free Software Foundation; either version 2 of the License, or *
18 * (at your option) any later version. *
19 * *
20 ***************************************************************************/
21
22 #include "ADM_toolkitGtk.h"
23 #include "DIA_flyDialog.h"
24 #include "DIA_flyPreview.h"
25
26 static GtkWidget *create_dialog1(void);
27
28 static GtkWidget *dialog = NULL;
29 static GtkWidget *vbox1;
30 static GtkWidget *drawingarea1;
31
32 static flySeekablePreview *seekablePreview;
33 static void seekablePreview_draw(void);
34 static void seekablePreview_frame_changed(void);
35
36 /* =================================
37 Filter Preview
38 ================================= */
DIA_filterPreview(const char * captionText,ADM_coreVideoFilter * videoStream,uint32_t frame)39 uint8_t DIA_filterPreview(const char *captionText, ADM_coreVideoFilter *videoStream, uint32_t frame)
40 {
41 GtkWidget *hbuttonbox1, *buttonOk, *scale;
42
43 dialog = create_dialog1();
44
45 scale = gtk_hscale_new (GTK_ADJUSTMENT (gtk_adjustment_new (0, 0, 110, 1, 10, 10)));
46 gtk_widget_show (scale);
47 gtk_box_pack_start (GTK_BOX(vbox1), scale, FALSE, TRUE, 0);
48
49 hbuttonbox1 = gtk_hbutton_box_new ();
50 gtk_widget_show (hbuttonbox1);
51 gtk_box_pack_start (GTK_BOX(vbox1), hbuttonbox1, FALSE, TRUE, 0);
52 gtk_button_box_set_layout (GTK_BUTTON_BOX(hbuttonbox1), GTK_BUTTONBOX_END);
53
54 buttonOk = gtk_button_new_from_stock ("gtk-ok");
55 gtk_widget_show(buttonOk);
56 gtk_container_add (GTK_CONTAINER(hbuttonbox1), buttonOk);
57
58 gtk_register_dialog(dialog);
59
60 if (captionText)
61 gtk_window_set_title(GTK_WINDOW(dialog), captionText);
62
63 uint32_t width, height;
64
65 width = videoStream->getInfo()->width;
66 height = videoStream->getInfo()->height;
67
68 g_signal_connect(scale, "value_changed", G_CALLBACK(seekablePreview_frame_changed), NULL);
69 g_signal_connect(drawingarea1, "expose_event", G_CALLBACK(seekablePreview_draw), NULL);
70 gtk_dialog_add_action_widget(GTK_DIALOG(dialog), buttonOk, GTK_RESPONSE_OK);
71
72 gtk_widget_show(dialog);
73
74 seekablePreview = new flySeekablePreview(width, height, videoStream, drawingarea1, scale);
75 // seekablePreview->process();
76 seekablePreview->sliderSet(frame);
77 seekablePreview->sliderChanged();
78
79 int response;
80
81 while((response = gtk_dialog_run(GTK_DIALOG(dialog))) == GTK_RESPONSE_APPLY)
82 {
83 seekablePreview_draw();
84 }
85
86 gtk_unregister_dialog(dialog);
87 gtk_widget_destroy(dialog);
88 delete seekablePreview;
89
90 return (response == GTK_RESPONSE_OK);
91 }
92
seekablePreview_draw(void)93 void seekablePreview_draw(void)
94 {
95 seekablePreview->sameImage();
96 }
97
seekablePreview_frame_changed(void)98 void seekablePreview_frame_changed(void)
99 {
100 seekablePreview->sliderChanged();
101 }
102
103 /* =================================
104 Preview
105 ================================= */
106 static flyPreview *preview;
107 static void preview_draw(void);
108
DIA_previewInit(uint32_t width,uint32_t height)109 void DIA_previewInit(uint32_t width, uint32_t height)
110 {
111 dialog = create_dialog1();
112 gtk_widget_set_size_request(drawingarea1, width, height);
113
114 g_signal_connect(drawingarea1, "expose_event", G_CALLBACK(preview_draw), NULL);
115 gtk_widget_show(dialog);
116
117 preview = new flyPreview(width, height, drawingarea1);
118 }
119
DIA_previewStillAlive(void)120 uint8_t DIA_previewStillAlive(void)
121 {
122 return (dialog != NULL);
123 }
124
DIA_previewUpdate(uint8_t * buffer)125 uint8_t DIA_previewUpdate(uint8_t *buffer)
126 {
127 if (dialog)
128 {
129 preview->display(buffer);
130 return 1;
131 }
132
133 return 0;
134 }
135
DIA_previewEnd(void)136 void DIA_previewEnd(void)
137 {
138 if(dialog)
139 {
140 delete preview;
141
142 gtk_widget_destroy(dialog);
143 dialog = NULL;
144 }
145 }
146
preview_draw(void)147 void preview_draw(void)
148 {
149 preview->sameImage();
150 }
151
152
153 /* =================================
154 Common Dialog
155 ================================= */
156 GtkWidget*
create_dialog1(void)157 create_dialog1 (void)
158 {
159 GtkWidget *dialog1;
160 GtkWidget *dialog_vbox1;
161
162 dialog1 = gtk_dialog_new ();
163 gtk_window_set_title (GTK_WINDOW (dialog1), QT_TR_NOOP("Preview"));
164
165 dialog_vbox1 = gtk_dialog_get_content_area (GTK_DIALOG (dialog1));
166 gtk_widget_show (dialog_vbox1);
167
168 vbox1 = gtk_vbox_new (FALSE, 0);
169 gtk_widget_show (vbox1);
170 gtk_box_pack_start (GTK_BOX (dialog_vbox1), vbox1, TRUE, TRUE, 0);
171
172 drawingarea1 = gtk_drawing_area_new ();
173 gtk_widget_show (drawingarea1);
174 gtk_box_pack_start (GTK_BOX (vbox1), drawingarea1, FALSE, TRUE, 0);
175 gtk_widget_set_size_request (drawingarea1, 100, 100);
176
177 return dialog1;
178 }
179