Merge branch 'master' of code.vuplus.com:/opt/repository/openvuplus_3.0
[vuplus_openvuplus_3.0] / meta-openvuplus / recipes-multimedia / gstreamer / gstreamer1.0-plugin-dvbmediasink / videosink_ffmpeg_mpeg4_nofourcc.patch
1 commit 72631c9afb1b8d94a5639c6300e9e34cd2ee6859
2 Author: hschang <chang@dev3>
3 Date:   Mon Dec 14 17:17:50 2015 +0900
4
5     dvbvideosink : fix no video problem with "FFmpeg MPEG-4" codec.
6     based on:
7     https://github.com/christophecvr/gstreamer1.0-plugin-multibox-dvbmediasink/commit/cefca9e0a897a806a577bc667aab8f3cc13fdad6
8
9 diff --git a/gstdvbvideosink.c b/gstdvbvideosink.c
10 index f50929e..7a4f5b4 100644
11 --- a/gstdvbvideosink.c
12 +++ b/gstdvbvideosink.c
13 @@ -517,6 +517,25 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event)
14                 }
15                 break;
16         }
17 +       case GST_EVENT_TAG:
18 +       {
19 +               GstTagList *taglist;
20 +               gst_event_parse_tag(event, &taglist);
21 +               gchar *vcodec_value = NULL;
22 +               GST_INFO_OBJECT(self,"[*] TAG %"GST_PTR_FORMAT, taglist);
23 +               gst_tag_list_get_string (taglist, "video-codec", &vcodec_value);
24 +               if (vcodec_value)
25 +               {
26 +                       if(!strncmp(vcodec_value,"FFmpeg MPEG-4", 13) && self->mpeg4_no_fourcc)
27 +                       {
28 +                               self->stream_type = STREAMTYPE_XVID;
29 +                               self->use_dts = TRUE;
30 +                               GST_INFO_OBJECT (self, "[*] VIDEO_CODEC = %s, set STREAMTYPE_XVID", vcodec_value);
31 +                       }
32 +               }
33 +               ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
34 +               break;
35 +       }
36         default:
37                 ret = GST_BASE_SINK_CLASS(parent_class)->event(sink, event);
38                 break;
39 @@ -1283,6 +1302,7 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
40         const char *mimetype = gst_structure_get_name (structure);
41         self->stream_type = STREAMTYPE_UNKNOWN;
42         self->must_send_header = TRUE;
43 +       self->mpeg4_no_fourcc = FALSE;
44  
45         GST_INFO_OBJECT (self, "caps = %" GST_PTR_FORMAT, caps);
46  
47 @@ -1320,6 +1340,9 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
48                                         fourcc = GST_STR_FOURCC(value);
49                                 switch (fourcc)
50                                 {
51 +                                       case 0:
52 +                                               self->mpeg4_no_fourcc = TRUE;
53 +                                               break;
54                                         case GST_MAKE_FOURCC('R', 'M', 'P', '4'):
55                                         case GST_MAKE_FOURCC('x', 'v', 'i', 'd'):
56                                         case GST_MAKE_FOURCC('X', 'V', 'I', 'D'):
57 diff --git a/gstdvbvideosink.h b/gstdvbvideosink.h
58 index 8577f2d..d055d4a 100644
59 --- a/gstdvbvideosink.h
60 +++ b/gstdvbvideosink.h
61 @@ -117,6 +117,8 @@ struct _GstDVBVideoSink
62         gboolean must_send_header;
63  
64         queue_entry_t *queue;
65 +
66 +       gboolean mpeg4_no_fourcc;
67  };
68  
69  struct _GstDVBVideoSinkClass