Merge remote-tracking branch 'oe_21/master' into vuplus-3.0-next
[vuplus_openvuplus_3.0] / meta-openvuplus / recipes-multimedia / gstreamer1.0 / gstreamer1.0-plugin-dvbmediasink / gstreamer10_dvbmediasink_vuplus.patch
1 diff --git a/gstdvbaudiosink.c b/gstdvbaudiosink.c
2 index 2725def..a51d28c 100644
3 --- a/gstdvbaudiosink.c
4 +++ b/gstdvbaudiosink.c
5 @@ -125,8 +125,7 @@ static guint gst_dvbaudiosink_signals[LAST_SIGNAL] = { 0 };
6                 "framed =(boolean) true; "
7  
8  #define LPCMCAPS \
9 -               "audio/x-private1-lpcm, " \
10 -               "framed =(boolean) true; "
11 +               "audio/x-private1-lpcm; "
12  
13  #define DTSCAPS \
14                 "audio/x-dts, " \
15 @@ -271,7 +270,9 @@ static void gst_dvbaudiosink_class_init(GstDVBAudioSinkClass *self)
16         gstbasesink_class->event = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_event);
17         gstbasesink_class->unlock = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_unlock);
18         gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_unlock_stop);
19 +#if GST_VERSION_MAJOR < 1
20         gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_set_caps);
21 +#endif
22         gstbasesink_class->get_caps = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_get_caps);
23  
24         element_class->change_state = GST_DEBUG_FUNCPTR(gst_dvbaudiosink_change_state);
25 @@ -426,6 +427,11 @@ static gboolean gst_dvbaudiosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
26         const char *type = gst_structure_get_name(structure);
27         t_audio_type bypass = AUDIOTYPE_UNKNOWN;
28  
29 +       if (self->bypass != AUDIOTYPE_UNKNOWN) {
30 +               GST_INFO_OBJECT (self, "skip set_caps, should be done only once.");
31 +               return TRUE;
32 +       }
33 +
34         self->skip = 0;
35         self->aac_adts_header_valid = FALSE;
36  
37 @@ -775,7 +781,9 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
38                 self->flushing = TRUE;
39                 /* wakeup the poll */
40                 write(self->unlockfd[1], "\x01", 1);
41 +#if GST_VERSION_MAJOR >= 1
42                 if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
43 +#endif
44                 break;
45         case GST_EVENT_FLUSH_STOP:
46                 if (self->fd >= 0) ioctl(self->fd, AUDIO_CLEAR_BUFFER);
47 @@ -793,7 +801,9 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
48                         self->cache = NULL;
49                 }
50                 GST_OBJECT_UNLOCK(self);
51 +#if GST_VERSION_MAJOR >= 1
52                 if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
53 +#endif
54                 break;
55         case GST_EVENT_EOS:
56         {
57 @@ -828,7 +838,9 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
58                         if (pfd[1].revents & POLLIN)
59                         {
60                                 GST_DEBUG_OBJECT(self, "got buffer empty from driver!\n");
61 +#if GST_VERSION_MAJOR >= 1
62                                 ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
63 +#endif
64                                 break;
65                         }
66  
67 @@ -899,6 +911,7 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
68                 }
69                 break;
70         }
71 +#if GST_VERSION_MAJOR >= 1
72         case GST_EVENT_CAPS:
73         {
74                 GstCaps *caps;
75 @@ -913,9 +926,12 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event)
76                         }
77                 }
78         }
79 +#endif
80  
81         default:
82 +#if GST_VERSION_MAJOR >= 1
83                 ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
84 +#endif
85                 break;
86         }
87  
88 diff --git a/gstdvbvideosink.c b/gstdvbvideosink.c
89 index a6b0a10..903432c 100644
90 --- a/gstdvbvideosink.c
91 +++ b/gstdvbvideosink.c
92 @@ -299,8 +299,9 @@ static void gst_dvbvideosink_class_init(GstDVBVideoSinkClass *self)
93         gstbasesink_class->event = GST_DEBUG_FUNCPTR (gst_dvbvideosink_event);
94         gstbasesink_class->unlock = GST_DEBUG_FUNCPTR (gst_dvbvideosink_unlock);
95         gstbasesink_class->unlock_stop = GST_DEBUG_FUNCPTR (gst_dvbvideosink_unlock_stop);
96 +#if GST_VERSION_MAJOR < 1
97         gstbasesink_class->set_caps = GST_DEBUG_FUNCPTR (gst_dvbvideosink_set_caps);
98 -
99 +#endif
100         element_class->change_state = GST_DEBUG_FUNCPTR (gst_dvbvideosink_change_state);
101  
102         gst_dvb_videosink_signals[SIGNAL_GET_DECODER_TIME] =
103 @@ -402,7 +403,9 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
104                 self->flushing = TRUE;
105                 /* wakeup the poll */
106                 write(self->unlockfd[1], "\x01", 1);
107 +#if GST_VERSION_MAJOR >= 1
108                 if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
109 +#endif
110                 break;
111         case GST_EVENT_FLUSH_STOP:
112                 if (self->fd >= 0) ioctl(self->fd, VIDEO_CLEAR_BUFFER);
113 @@ -414,7 +417,9 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
114                 }
115                 self->flushing = FALSE;
116                 GST_OBJECT_UNLOCK(self);
117 +#if GST_VERSION_MAJOR >= 1
118                 if(self->paused) ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
119 +#endif
120                 break;
121         case GST_EVENT_EOS:
122         {
123 @@ -449,7 +454,9 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
124                         if (pfd[1].revents & POLLIN)
125                         {
126                                 GST_DEBUG_OBJECT (self, "got buffer empty from driver!\n");
127 +#if GST_VERSION_MAJOR >= 1
128                                 ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
129 +#endif
130                                 break;
131                         }
132  
133 @@ -513,6 +520,7 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
134                 }
135                 break;
136         }
137 +#if GST_VERSION_MAJOR >= 1
138         case GST_EVENT_CAPS:
139         {
140                 GstCaps *caps;
141 @@ -524,8 +532,11 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
142                 }
143                 break;
144         }
145 +#endif
146         default:
147 +#if GST_VERSION_MAJOR >= 1
148                 ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
149 +#endif
150                 break;
151         }
152  
153 @@ -614,6 +625,8 @@ static int video_write(GstBaseSink *sink, GstDVBVideoSink *self, GstBuffer *buff
154                                 }
155                                 else if (evt.type == VIDEO_EVENT_FRAME_RATE_CHANGED)
156                                 {
157 +                                       self->framerate = evt.u.frame_rate;
158 +                                       GST_INFO_OBJECT(self, "decoder framerate %d", self->framerate);
159                                         s = gst_structure_new ("eventFrameRateChanged",
160                                                 "frame_rate", G_TYPE_INT, evt.u.frame_rate, NULL);
161                                         msg = gst_message_new_element (GST_OBJECT(sink), s);
162 @@ -1289,6 +1302,8 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
163         GstStructure *structure = gst_caps_get_structure (caps, 0);
164         const char *mimetype = gst_structure_get_name (structure);
165         self->stream_type = STREAMTYPE_UNKNOWN;
166 +       self->framerate = -1;
167 +       self->no_header = 0;
168  
169         GST_INFO_OBJECT (self, "caps = %" GST_PTR_FORMAT, caps);
170  
171 @@ -1557,6 +1572,10 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
172                                         gst_buffer_ref (self->codec_data);
173                                 }
174                                 GST_INFO_OBJECT (self, "MIMETYPE video/x-divx vers. 4 -> STREAMTYPE_MPEG4_Part2");
175 +#if GST_VERSION_MAJOR >= 1
176 +                               self->use_dts = TRUE;
177 +#endif
178 +
179                         break;
180                         case 6:
181                         case 5:
182 @@ -1622,10 +1641,17 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
183                                                 best = i;
184                                         }
185                                 }
186 +                               self->framerate = valid_framerates[best];
187 +
188 +                               GST_INFO_OBJECT(self, "framerate %d", self->framerate);
189 +
190                                 fprintf(f, "%d", valid_framerates[best]);
191                                 fclose(f);
192                         }
193                 }
194 +               else if (self->framerate == -1)
195 +                       GST_INFO_OBJECT(self, "no framerate given!");
196 +
197                 if (self->playing)
198                 {
199                         if (self->fd >= 0) ioctl(self->fd, VIDEO_STOP, 0);