Jump to content


Photo

GStreamer 1.0

gstreamer 1.0 openpli

  • Please log in to reply
2520 replies to this topic

Re: GStreamer 1.0 #281 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 11 November 2014 - 22:37

Patch from bug report works fine, so no changes in dvbmediasink for divx3!

A new version of bbappends coming soon.

1. GStreamer updated to 1.4.4
2. bbappends now build some missing gstreamer plugins
3. fixes for divx3 and xvid

Thanks @mx3L and @betacentauri
Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #282 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 12 November 2014 - 07:45

Here are the latest bbappends and patches.

It includes the following:

1. GStreamer 1.4.4
2. fix for divx3 and xvid
3. build missing plugins (only cdxaparse missing because is not ported to 1.0 yet)
4. fix for librtmp blocking on send operations timeout (SO_SNDTIMEO)
5. fix for rtmp seek

You can find information how to use gstreamer1.0v4.tar.gz at #143,#125 (simply extract on meta-local/recipes-local and change MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS to GStreamer 1.0 dvbmediasink).

Attached Files


Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #283 littlesat

  • PLi® Core member
  • 57,166 posts

+698
Excellent

Posted 12 November 2014 - 12:10

Nice Work! Very appreciated!

But I personally lost control if which we need and which we not need to commit at the current status....

WaveFrontier 28.2E | 23.5E | 19.2E | 16E | 13E | 10/9E | 7E | 5E | 1W | 4/5W | 15W


Re: GStreamer 1.0 #284 Erik Slagter

  • PLi® Core member
  • 46,969 posts

+542
Excellent

Posted 12 November 2014 - 16:02

I'll have a look on friday.


* Wavefrontier T90 with 28E/23E/19E/13E via SCR switches 2 x 2 x 6 user bands
I don't read PM -> if you have something to ask or to report, do it in the forum so others can benefit. I don't take freelance jobs.
Ik lees geen PM -> als je iets te vragen of te melden hebt, doe het op het forum, zodat anderen er ook wat aan hebben.


Re: GStreamer 1.0 #285 addybo

  • Senior Member
  • 45 posts

0
Neutral

Posted 12 November 2014 - 21:23

sry mistake by me after update

Edited by addybo, 12 November 2014 - 21:28.


Re: GStreamer 1.0 #286 betacentauri

  • PLi® Core member
  • 7,185 posts

+323
Excellent

Posted 12 November 2014 - 21:28

Which E2?

Seems not to be OpenPli E2: http://sourceforge.n...cemp3.cpp#l1162

You need to apply the patches made to servicemp3.cpp to your E2.


Xtrend ET-9200, ET-8000, ET-10000, OpenPliPC on Ubuntu 12.04

Re: GStreamer 1.0 #287 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 12 November 2014 - 22:39

@athoik
patch from bugreport 736190 breaks xvid unpacked playback(not smooth)

according to bugreport this is not avidemux issue, PTS should be provided only on keyframes:
http://cgit.freedesk...20e33c972f94a76

It looks like that decoder expects for streamtype 4 (mpeg4 part2 codec - unpacked) - PTS and for 13(divx3), 14(divx4 - not tested), 15(divx5) - DTS

 

I also tried to unpack packed divx5[parsed=(boolean)true], set streamtype 4 and undef PACK_BITSTREAM, divx5 started to work with PTS but not smoothly.



Re: GStreamer 1.0 #288 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 13 November 2014 - 00:09

Only works when avidemux-set-pts-on-all-buffers.patch is removed. This patch is almost same as in #273 just added use_dts to divx5.

 

About parsers, when mpeg4videoparse is in use, it will not add additional PTS it's still only on keyframes, just offset is different.

gst-launch-1.0 -v filesrc location='/media/net/DOMA/Test/unpacked_xvid.avi' ! avidemux ! fakesink silent=FALSE
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (6703 bytes, dts: 0:00:09.920000000, pts: none, duration: 0:00:00.040000000, offset: 248, offset_end: 249, flags: 00002000 delta-unit ) 0x76602840
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (2410 bytes, dts: 0:00:09.960000000, pts: none, duration: 0:00:00.040000000, offset: 249, offset_end: 250, flags: 00002000 delta-unit ) 0x76602980
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (11362 bytes, dts: 0:00:10.000000000, pts: 0:00:10.000000000, duration: 0:00:00.040000000, offset: 250, offset_end: 251, flags: 00000000 ) 0x76602c00
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8113 bytes, dts: 0:00:10.040000000, pts: none, duration: 0:00:00.040000000, offset: 251, offset_end: 252, flags: 00002000 delta-unit ) 0x76602d40
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (3364 bytes, dts: 0:00:10.080000000, pts: none, duration: 0:00:00.040000000, offset: 252, offset_end: 253, flags: 00002000 delta-unit ) 0x76602a20
....
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (729 bytes, dts: 0:00:19.920000000, pts: none, duration: 0:00:00.040000000, offset: 498, offset_end: 499, flags: 00002000 delta-unit ) 0x76602b60
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (2310 bytes, dts: 0:00:19.960000000, pts: none, duration: 0:00:00.040000000, offset: 499, offset_end: 500, flags: 00002000 delta-unit ) 0x766028e0
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8752 bytes, dts: 0:00:20.000000000, pts: 0:00:20.000000000, duration: 0:00:00.040000000, offset: 500, offset_end: 501, flags: 00000000 ) 0x76602840
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4073 bytes, dts: 0:00:20.040000000, pts: none, duration: 0:00:00.040000000, offset: 501, offset_end: 502, flags: 00002000 delta-unit ) 0x76602980
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1070 bytes, dts: 0:00:20.080000000, pts: none, duration: 0:00:00.040000000, offset: 502, offset_end: 503, flags: 00002000 delta-unit ) 0x76602c00

gst-launch-1.0 -v filesrc location='/media/net/DOMA/Test/unpacked_xvid.avi' ! avidemux ! mpeg4videoparse ! fakesink silent=FALSE
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (6703 bytes, dts: 0:00:09.920000000, pts: none, duration: 0:00:00.040000000, offset: 546684, offset_end: -1, flags: 00002000 delta-unit ) 0x76502b60
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (2410 bytes, dts: 0:00:09.960000000, pts: none, duration: 0:00:00.040000000, offset: 553387, offset_end: -1, flags: 00002000 delta-unit ) 0x765028e0                                     
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (11362 bytes, dts: 0:00:10.000000000, pts: 0:00:10.000000000, duration: 0:00:00.040000000, offset: 555797, offset_end: -1, flags: 00000000 ) 0x76502980
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8113 bytes, dts: 0:00:10.040000000, pts: none, duration: 0:00:00.040000000, offset: 567159, offset_end: -1, flags: 00002000 delta-unit ) 0x76502de0
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (3364 bytes, dts: 0:00:10.080000000, pts: none, duration: 0:00:00.040000000, offset: 575272, offset_end: -1, flags: 00002000 delta-unit ) 0x76502840
...
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (729 bytes, dts: 0:00:19.920000000, pts: none, duration: 0:00:00.040000000, offset: 1408191, offset_end: -1, flags: 00002000 delta-unit ) 0x76502980
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (2310 bytes, dts: 0:00:19.960000000, pts: none, duration: 0:00:00.040000000, offset: 1408920, offset_end: -1, flags: 00002000 delta-unit ) 0x76502de0
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8752 bytes, dts: 0:00:20.000000000, pts: 0:00:20.000000000, duration: 0:00:00.040000000, offset: 1411230, offset_end: -1, flags: 00000000 ) 0x76502840
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4073 bytes, dts: 0:00:20.040000000, pts: none, duration: 0:00:00.040000000, offset: 1419982, offset_end: -1, flags: 00002000 delta-unit ) 0x76502c00
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1070 bytes, dts: 0:00:20.080000000, pts: none, duration: 0:00:00.040000000, offset: 1424055, offset_end: -1, flags: 00002000 delta-unit ) 0x76502d40

So PTS=DTS for every frame doesn't work, since decoder expects on streamtype 4 only PTS on keyframes.

 

 

 

Attached Files



Re: GStreamer 1.0 #289 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 13 November 2014 - 10:12

Uploaded some test samples:

 

divx3(avi) - https://dl.dropboxus...60017/divx3.avi

divx4 simple profile(avi) - https://dl.dropboxus...017/divx4_S.avi

divx5 unpacked profile not set(avi) - https://dl.dropboxus...x5_unpacked.avi

divx5 packed profile not set(avi) - https://dl.dropboxus...ivx5_packed.avi

xvid unpacked advanced simple profile(avi) - https://dl.dropboxus...unpacked_AS.avi

xvid unpacked advanced simple profile(mp4) -  https://dl.dropboxus...unpacked_AS.mp4

xvid packed advanced simple profile(avi) - https://dl.dropboxus...d_packed_AS.avi

xvid packed advanced simple profile(avi) (2) - https://dl.dropboxus...packed_AS_2.avi

xvid packed advanced simple profile(avi) (3) - https://dl.dropboxus...packed_AS_3.avi

 

 

et4000(bcm7358) with 0001-dvbvideosink-use-DTS-for-divx3-and-divx5.patch - everything works

et6500(bcm7413) with 0001-dvbvideosink-use-DTS-for-divx3-and-divx5.patch - "divx4 simple profile" and "xvid packed advanced simple profile (2)" doesn't work (on gst 0.10 xvid packed AS (2) doesn't work as well, divx4 on gst0.10 not tested)


Edited by mx3L, 13 November 2014 - 10:16.


Re: GStreamer 1.0 #290 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 13 November 2014 - 17:48

Formuler1 (bcm7346) with 0001-dvbvideosink-use-DTS-for-divx3-and-divx5.patch - only divx4 simple profile doesn't work

@mx3L, is there a reason that use_dts for divx5 is enabled only when PACK_UNPACKED_XVID_DIVX5_BITSTREAM?

#ifdef PACK_UNPACKED_XVID_DIVX5_BITSTREAM
                                self->must_pack_bitstream = TRUE;
#if GST_VERSION_MAJOR >= 1
                                self->use_dts = TRUE;
#endif
#endif

Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #291 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 13 November 2014 - 18:19

@athoik

No there is no reason for it, thanks ;)

 

 

 

Attached Files



Re: GStreamer 1.0 #292 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 13 November 2014 - 22:43

@mx3L, can you try the following patch:
 
diff --git a/gstdvbvideosink.c b/gstdvbvideosink.c
index 11bf76f..f84c5e3 100755
--- a/gstdvbvideosink.c
+++ b/gstdvbvideosink.c
@@ -76,7 +76,7 @@
 #include <gst/gst.h>
 #include <gst/base/gstbasesink.h>
 
-#define PACK_UNPACKED_XVID_DIVX5_BITSTREAM
+#undef PACK_UNPACKED_XVID_DIVX5_BITSTREAM
 
 #include "common.h"
 #include "gstdvbvideosink.h"
@@ -198,14 +198,22 @@ GST_STATIC_PAD_TEMPLATE (
 #else
 		VIDEO_CAPS 
 #endif
-		", mspegversion = (int) 43; "
+		", msmpegversion = (int) 43; "
 	"video/x-divx, "
 #ifdef HAVE_LIMITED_MPEG4V2
 		MPEG4V2_LIMITED_CAPS
 #else
 		VIDEO_CAPS 
 #endif
-		", divxversion = (int) [ 3, 5 ]; "
+		", divxversion = (int) 3; "
+	"video/x-divx, "
+#ifdef HAVE_LIMITED_MPEG4V2
+		MPEG4V2_LIMITED_CAPS
+#else
+		VIDEO_CAPS 
+#endif
+		", parsed = (boolean) true "		
+		", divxversion = (int) [ 4, 6 ]; "
 	"video/x-xvid, "
 #ifdef HAVE_LIMITED_MPEG4V2
 		MPEG4V2_LIMITED_CAPS
@@ -1513,7 +1521,7 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
 #endif
 			}
 			break;
-			case 4:
+			case 44:
 				streamtype = 14;
 				self->codec_type = CT_DIVX4;
 #if GST_VERSION_MAJOR >= 1
@@ -1530,14 +1538,16 @@ static gboolean gst_dvbvideosink_set_caps(GstBaseSink *basesink, GstCaps *caps)
 			break;
 			case 6:
 			case 5:
-				streamtype = 15;
+			case 4:
+				streamtype = 4;
+				self->codec_type = CT_MPEG4_PART2;
 #if GST_VERSION_MAJOR >= 1
 				self->use_dts = TRUE;
 #endif
 #ifdef PACK_UNPACKED_XVID_DIVX5_BITSTREAM
 				self->must_pack_bitstream = TRUE;
 #endif
-				GST_INFO_OBJECT (self, "MIMETYPE video/x-divx vers. 5 -> VIDEO_SET_STREAMTYPE, 15");
+				GST_INFO_OBJECT (self, "MIMETYPE video/x-divx vers. %d -> VIDEO_SET_STREAMTYPE, 4", divxversion);
 			break;
 			default:
 				GST_ELEMENT_ERROR (self, STREAM, FORMAT, (NULL), ("unhandled divx version %i", divxversion));
1. divx3 cannot be parsed so we need to handle this alone
2. divx4,5,6 are mpeg4 (although divx4 is very basic mpeg4) so we are using streamtype = 4

Attached Files


Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #293 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 13 November 2014 - 23:32

@athoik

et4000 - divx4 ok, divx5 packed, unpacked is now not smooth I tried it also with PTS #287 but it made no difference



Re: GStreamer 1.0 #294 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 14 November 2014 - 12:26

@mx3L, can you try above with self->use_dts = FALSE; when divxversion is 4,5,6?

Because we writing mpeg4 in hardware drivers and most probably doesn't like dts.
Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #295 Erik Slagter

  • PLi® Core member
  • 46,969 posts

+542
Excellent

Posted 14 November 2014 - 12:47

If B frames are present, the decoder actually MUST have DTS (and PTS) to be able to decode them at the right moment. That is exactly the problem with B frames in an avi container, avi cannot store (implicit or explicit) DTS.

 

The problem is (as I said before) is that the "de-packaging" of the frames must also calculate the correct DTS for all frames having been packed. That exactly explains why some video "stutter", either the PTS or the DTS isn't calculated correctly (or simply not calculated at all).

 

I think either gstreamer must do the de-packaging all by itself (if it can), or it must be handled entirely by enigma2, in case enigma2 must calculate the correct PTS and DTS value for each frame. They may need no be added to each PES packet as pieterg suggests, as long as the packets are perfectly sequentual (e.g. I P P P P I P P P etc.). As soon as B frames appear, the DTS must be supplied.

 

So I think you're going to have a hell of a job making this fully work (or you may find a feature in gstreamer that does it for you...)


* Wavefrontier T90 with 28E/23E/19E/13E via SCR switches 2 x 2 x 6 user bands
I don't read PM -> if you have something to ask or to report, do it in the forum so others can benefit. I don't take freelance jobs.
Ik lees geen PM -> als je iets te vragen of te melden hebt, doe het op het forum, zodat anderen er ook wat aan hebben.


Re: GStreamer 1.0 #296 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 14 November 2014 - 13:15

@Erik Slagter

Here is what the mpeg4videoparser does:
 
gst-launch-1.0 -v filesrc location=/media/usb/mx3L/divx5_packed.avi ! avidemux ! mpeg4videoparse ! fakesink silent=FALSE dump=TRUE | grep "bytes" -A1 | more

/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (5756 bytes, dts: 0:00:00.000000000, pts: 0:00:00.000000000, duration: 0:00:00.040000000, offset: 0, offset_end: -1, flags: 00000040 discont ) 0x76702850
00000000 (0x76709150): 00 00 01 00 00 00 01 20 08 c8 0d 40 00 57 b3 c0  ....... ...@.W..
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (788 bytes, dts: 0:00:00.040000000, pts: none, duration: 0:00:00.040000000, offset: 5756, offset_end: -1, flags: 00002000 delta-unit ) 0x76702cb0
00000000 (0x7670b050): 00 00 01 b6 51 2c 18 19 bf be fb ef be fe fb ef  ....Q,..........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (754 bytes, dts: 0:00:00.080000000, pts: none, duration: 0:00:00.040000000, offset: 6544, offset_end: -1, flags: 00002000 delta-unit ) 0x76702990
00000000 (0x7670b364): 00 00 01 b6 90 96 18 4c 88 e8 e8 e8 e8 e8 e8 e8  .......L........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.080000000, pts: none, duration: 0:00:00.040000000, offset: 7298, offset_end: -1, flags: 00002000 delta-unit ) 0x76702850
00000000 (0x76701d90): 00 00 01 b6 51 2c 13 7f                          ....Q,..
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (531 bytes, dts: 0:00:00.120000000, pts: none, duration: 0:00:00.040000000, offset: 7306, offset_end: -1, flags: 00002000 delta-unit ) 0x76702d50
00000000 (0x76712148): 00 00 01 b6 52 58 1c 19 bf be a6 30 30 fb eb 63  ....RX.....00..c
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (334 bytes, dts: 0:00:00.160000000, pts: none, duration: 0:00:00.040000000, offset: 7837, offset_end: -1, flags: 00002000 delta-unit ) 0x76702850
00000000 (0x7671235b): 00 00 01 b6 91 c2 18 43 68 e0 88 d0 8a c1 14 c6  .......Ch.......
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.160000000, pts: none, duration: 0:00:00.040000000, offset: 8171, offset_end: -1, flags: 00002000 delta-unit ) 0x76702df0
00000000 (0x76701df0): 00 00 01 b6 52 58 13 7f                          ....RX..
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (589 bytes, dts: 0:00:00.200000000, pts: none, duration: 0:00:00.040000000, offset: 8179, offset_end: -1, flags: 00002000 delta-unit ) 0x76702b70
00000000 (0x767140b0): 00 00 01 b6 52 ee 18 15 75 b0 1e 15 19 8f 91 13  ....R...u.......
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (534 bytes, dts: 0:00:00.240000000, pts: none, duration: 0:00:00.040000000, offset: 8768, offset_end: -1, flags: 00002000 delta-unit ) 0x76702c10
00000000 (0x76716070): 00 00 01 b6 53 84 18 14 f8 c5 bc e1 e1 b0 d5 bd  ....S...........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (562 bytes, dts: 0:00:00.280000000, pts: none, duration: 0:00:00.040000000, offset: 9302, offset_end: -1, flags: 00002000 delta-unit ) 0x76702d50
00000000 (0x7673a1c8): 00 00 01 b6 54 1a 18 14 ff fe 2f 7d e0 8b ed ef  ....T...../}....
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (2208 bytes, dts: 0:00:00.320000000, pts: none, duration: 0:00:00.040000000, offset: 9864, offset_end: -1, flags: 00002000 delta-unit ) 0x76702cb0
00000000 (0x7670b1e0): 00 00 01 b6 55 46 18 10 b8 ab 66 d9 1d ef 0a 2d  ....UF....f....-
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1068 bytes, dts: 0:00:00.360000000, pts: none, duration: 0:00:00.040000000, offset: 12072, offset_end: -1, flags: 00002000 delta-unit ) 0x76702d50
00000000 (0x7670ba80): 00 00 01 b6 94 b0 18 33 69 d7 d1 d3 a7 47 a7 4f  .......3i....G.O
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.360000000, pts: none, duration: 0:00:00.040000000, offset: 13140, offset_end: -1, flags: 00002000 delta-unit ) 0x76702df0
00000000 (0x76701e50): 00 00 01 b6 55 46 13 7f                          ....UF..
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1902 bytes, dts: 0:00:00.400000000, pts: none, duration: 0:00:00.040000000, offset: 13148, offset_end: -1, flags: 00002000 delta-unit ) 0x76702cb0
00000000 (0x76738c78): 00 00 01 b6 56 72 18 11 3e e0 ba e0 b2 b6 42 34  ....Vr..>.....B4
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1207 bytes, dts: 0:00:00.440000000, pts: none, duration: 0:00:00.040000000, offset: 15050, offset_end: -1, flags: 00002000 delta-unit ) 0x76702df0
00000000 (0x767393e6): 00 00 01 b6 95 dc 18 34 88 e8 8d d3 e9 e9 e9 d3  .......4........


gst-launch-1.0 -v filesrc location=/media/usb/mx3L/divx5_unpacked.avi ! avidemux ! mpeg4videoparse ! fakesink silent=FALSE dump=TRUE | grep "bytes" -A1 | more

/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (5756 bytes, dts: 0:00:00.000000000, pts: 0:00:00.000000000, duration: 0:00:00.040000000, offset: 0, offset_end: -1, flags: 00000040 discont ) 0x76e02850
00000000 (0x76e09150): 00 00 01 00 00 00 01 20 08 c8 0d 40 00 57 b3 c0  ....... ...@.W..
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (788 bytes, dts: 0:00:00.040000000, pts: none, duration: 0:00:00.040000000, offset: 5756, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02c10
00000000 (0x76e0e0e0): 00 00 01 b6 51 2c 18 19 bf be fb ef be fe fb ef  ....Q,..........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (754 bytes, dts: 0:00:00.080000000, pts: none, duration: 0:00:00.040000000, offset: 6544, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02df0
00000000 (0x76e141f0): 00 00 01 b6 90 96 18 4c 88 e8 e8 e8 e8 e8 e8 e8  .......L........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (531 bytes, dts: 0:00:00.120000000, pts: none, duration: 0:00:00.040000000, offset: 7298, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02b70
00000000 (0x76e16078): 00 00 01 b6 52 58 1c 19 bf be a6 30 30 fb eb 63  ....RX.....00..c
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (334 bytes, dts: 0:00:00.160000000, pts: none, duration: 0:00:00.040000000, offset: 7829, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02990
00000000 (0x76e180a0): 00 00 01 b6 91 c2 18 43 68 e0 88 d0 8a c1 14 c6  .......Ch.......
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (589 bytes, dts: 0:00:00.200000000, pts: none, duration: 0:00:00.040000000, offset: 8163, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02cb0
00000000 (0x76e3a060): 00 00 01 b6 52 ee 18 15 75 b0 1e 15 19 8f 91 13  ....R...u.......
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (534 bytes, dts: 0:00:00.240000000, pts: none, duration: 0:00:00.040000000, offset: 8752, offset_end: -1, flags: 00002000 delta-unit ) 0x76e028f0
00000000 (0x76e3c050): 00 00 01 b6 53 84 18 14 f8 c5 bc e1 e1 b0 d5 bd  ....S...........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (562 bytes, dts: 0:00:00.280000000, pts: none, duration: 0:00:00.040000000, offset: 9286, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02d50
00000000 (0x76e3e058): 00 00 01 b6 54 1a 18 14 ff fe 2f 7d e0 8b ed ef  ....T...../}....
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (2208 bytes, dts: 0:00:00.320000000, pts: none, duration: 0:00:00.040000000, offset: 9848, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02850
00000000 (0x76e0b1e0): 00 00 01 b6 55 46 18 10 b8 ab 66 d9 1d ef 0a 2d  ....UF....f....-
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1068 bytes, dts: 0:00:00.360000000, pts: none, duration: 0:00:00.040000000, offset: 12056, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02c10
00000000 (0x76e0bb90): 00 00 01 b6 94 b0 18 33 69 d7 d1 d3 a7 47 a7 4f  .......3i....G.O
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1902 bytes, dts: 0:00:00.400000000, pts: none, duration: 0:00:00.040000000, offset: 13124, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02df0
00000000 (0x76e19108): 00 00 01 b6 56 72 18 11 3e e0 ba e0 b2 b6 42 34  ....Vr..>.....B4
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1207 bytes, dts: 0:00:00.440000000, pts: none, duration: 0:00:00.040000000, offset: 15026, offset_end: -1, flags: 00002000 delta-unit ) 0x76e02b70
00000000 (0x76e199f8): 00 00 01 b6 95 dc 18 34 88 e8 8d d3 e9 e9 e9 d3  .......4........
Here is the same without mpeg4videoparser:
 
gst-launch-1.0 -v filesrc location=/media/usb/mx3L/divx5_packed.avi ! avidemux ! fakesink silent=FALSE dump=TRUE | grep "bytes
" -A1 | more

/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (5756 bytes, dts: 0:00:00.000000000, pts: 0:00:00.000000000, duration: 0:00:00.040000000, offset: 0, offset_end: 1, flags: 00000040 discont ) 0x76a02830
New clock: GstSystemClock
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1542 bytes, dts: 0:00:00.040000000, pts: none, duration: 0:00:00.040000000, offset: 1, offset_end: 2, flags: 00002000 delta-unit ) 0x76a02a10
00000000 (0x76a0a8f0): 00 00 01 b6 51 2c 18 19 bf be fb ef be fe fb ef  ....Q,..........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.080000000, pts: none, duration: 0:00:00.040000000, offset: 2, offset_end: 3, flags: 00002000 delta-unit ) 0x76a02bf0
00000000 (0x76a01d70): 00 00 01 b6 51 2c 13 7f                          ....Q,..
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (865 bytes, dts: 0:00:00.120000000, pts: none, duration: 0:00:00.040000000, offset: 3, offset_end: 4, flags: 00002000 delta-unit ) 0x76a02d30
00000000 (0x76a0e118): 00 00 01 b6 52 58 1c 19 bf be a6 30 30 fb eb 63  ....RX.....00..c
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.160000000, pts: none, duration: 0:00:00.040000000, offset: 4, offset_end: 5, flags: 00002000 delta-unit ) 0x76a02dd0
00000000 (0x76a01dd0): 00 00 01 b6 52 58 13 7f                          ....RX..
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (589 bytes, dts: 0:00:00.200000000, pts: none, duration: 0:00:00.040000000, offset: 5, offset_end: 6, flags: 00002000 delta-unit ) 0x76a02c90
00000000 (0x76a10080): 00 00 01 b6 52 ee 18 15 75 b0 1e 15 19 8f 91 13  ....R...u.......
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (534 bytes, dts: 0:00:00.240000000, pts: none, duration: 0:00:00.040000000, offset: 6, offset_end: 7, flags: 00002000 delta-unit ) 0x76a02970
00000000 (0x76a12078): 00 00 01 b6 53 84 18 14 f8 c5 bc e1 e1 b0 d5 bd  ....S...........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (562 bytes, dts: 0:00:00.280000000, pts: none, duration: 0:00:00.040000000, offset: 7, offset_end: 8, flags: 00002000 delta-unit ) 0x76a02b50
00000000 (0x76a14198): 00 00 01 b6 54 1a 18 14 ff fe 2f 7d e0 8b ed ef  ....T...../}....
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (3276 bytes, dts: 0:00:00.320000000, pts: none, duration: 0:00:00.040000000, offset: 8, offset_end: 9, flags: 00002000 delta-unit ) 0x76a028d0
00000000 (0x76a09108): 00 00 01 b6 55 46 18 10 b8 ab 66 d9 1d ef 0a 2d  ....UF....f....-
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.360000000, pts: none, duration: 0:00:00.040000000, offset: 9, offset_end: 10, flags: 00002000 delta-unit ) 0x76a02830
00000000 (0x76a01e30): 00 00 01 b6 55 46 13 7f                          ....UF..
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (3109 bytes, dts: 0:00:00.400000000, pts: none, duration: 0:00:00.040000000, offset: 10, offset_end: 11, flags: 00002000 delta-unit ) 0x76a02a10
00000000 (0x76a09108): 00 00 01 b6 56 72 18 11 3e e0 ba e0 b2 b6 42 34  ....Vr..>.....B4
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.440000000, pts: none, duration: 0:00:00.040000000, offset: 11, offset_end: 12, flags: 00002000 delta-unit ) 0x76a02bf0
00000000 (0x76a01e90): 00 00 01 b6 56 72 13 7f                          ....Vr..
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1185 bytes, dts: 0:00:00.480000000, pts: none, duration: 0:00:00.040000000, offset: 12, offset_end: 13, flags: 00002000 delta-unit ) 0x76a02d30
00000000 (0x76a09108): 00 00 01 b6 57 08 18 11 f1 36 78 5d ad 9b 6b 7a  ....W....6x]..kz
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1711 bytes, dts: 0:00:00.520000000, pts: none, duration: 0:00:00.040000000, offset: 13, offset_end: 14, flags: 00002000 delta-unit ) 0x76a02dd0
00000000 (0x76a096b8): 00 00 01 b6 57 9e 18 11 f0 a3 65 ef 5c 62 7b 6c  ....W.....e.\b{l
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (4991 bytes, dts: 0:00:00.560000000, pts: none, duration: 0:00:00.040000000, offset: 14, offset_end: 15, flags: 00002000 delta-unit ) 0x76a02c90
00000000 (0x76a09dc0): 00 00 01 b6 58 ca 1c 11 b9 57 1d 5b 78 e9 77 90  ....X....W.[x.w.
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (8 bytes, dts: 0:00:00.600000000, pts: none, duration: 0:00:00.040000000, offset: 15, offset_end: 16, flags: 00002000 delta-unit ) 0x76a02970
00000000 (0x76a01ef0): 00 00 01 b6 58 ca 13 7f                          ....X...



gst-launch-1.0 -v filesrc location=/media/usb/mx3L/divx5_unpacked.avi ! avidemux ! fakesink silent=FALSE dump=TRUE | grep "bytes" -A1 | more

/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (5756 bytes, dts: 0:00:00.000000000, pts: 0:00:00.000000000, duration: 0:00:00.040000000, offset: 0, offset_end: 1, flags: 00000040 discont ) 0x76d02830
00000000 (0x76d090f0): 00 00 01 00 00 00 01 20 08 c8 0d 40 00 57 b3 c0  ....... ...@.W..
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (788 bytes, dts: 0:00:00.040000000, pts: none, duration: 0:00:00.040000000, offset: 1, offset_end: 2, flags: 00002000 delta-unit ) 0x76d02a10
00000000 (0x76d0e0d8): 00 00 01 b6 51 2c 18 19 bf be fb ef be fe fb ef  ....Q,..........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (754 bytes, dts: 0:00:00.080000000, pts: none, duration: 0:00:00.040000000, offset: 2, offset_end: 3, flags: 00002000 delta-unit ) 0x76d02bf0
00000000 (0x76d101c0): 00 00 01 b6 90 96 18 4c 88 e8 e8 e8 e8 e8 e8 e8  .......L........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (531 bytes, dts: 0:00:00.120000000, pts: none, duration: 0:00:00.040000000, offset: 3, offset_end: 4, flags: 00002000 delta-unit ) 0x76d02d30
00000000 (0x76d120e8): 00 00 01 b6 52 58 1c 19 bf be a6 30 30 fb eb 63  ....RX.....00..c
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (334 bytes, dts: 0:00:00.160000000, pts: none, duration: 0:00:00.040000000, offset: 4, offset_end: 5, flags: 00002000 delta-unit ) 0x76d02dd0
00000000 (0x76d0a070): 00 00 01 b6 91 c2 18 43 68 e0 88 d0 8a c1 14 c6  .......Ch.......
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (589 bytes, dts: 0:00:00.200000000, pts: none, duration: 0:00:00.040000000, offset: 5, offset_end: 6, flags: 00002000 delta-unit ) 0x76d02c90
00000000 (0x76d14098): 00 00 01 b6 52 ee 18 15 75 b0 1e 15 19 8f 91 13  ....R...u.......
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (534 bytes, dts: 0:00:00.240000000, pts: none, duration: 0:00:00.040000000, offset: 6, offset_end: 7, flags: 00002000 delta-unit ) 0x76d02970
00000000 (0x76d16058): 00 00 01 b6 53 84 18 14 f8 c5 bc e1 e1 b0 d5 bd  ....S...........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (562 bytes, dts: 0:00:00.280000000, pts: none, duration: 0:00:00.040000000, offset: 7, offset_end: 8, flags: 00002000 delta-unit ) 0x76d02b50
00000000 (0x76d3a1b0): 00 00 01 b6 54 1a 18 14 ff fe 2f 7d e0 8b ed ef  ....T...../}....
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (2208 bytes, dts: 0:00:00.320000000, pts: none, duration: 0:00:00.040000000, offset: 8, offset_end: 9, flags: 00002000 delta-unit ) 0x76d028d0
00000000 (0x76d09108): 00 00 01 b6 55 46 18 10 b8 ab 66 d9 1d ef 0a 2d  ....UF....f....-
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1068 bytes, dts: 0:00:00.360000000, pts: none, duration: 0:00:00.040000000, offset: 9, offset_end: 10, flags: 00002000 delta-unit ) 0x76d02830
00000000 (0x76d09ab8): 00 00 01 b6 94 b0 18 33 69 d7 d1 d3 a7 47 a7 4f  .......3i....G.O
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1902 bytes, dts: 0:00:00.400000000, pts: none, duration: 0:00:00.040000000, offset: 10, offset_end: 11, flags: 00002000 delta-unit ) 0x76d02a10
00000000 (0x76d09050): 00 00 01 b6 56 72 18 11 3e e0 ba e0 b2 b6 42 34  ....Vr..>.....B4
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1207 bytes, dts: 0:00:00.440000000, pts: none, duration: 0:00:00.040000000, offset: 11, offset_end: 12, flags: 00002000 delta-unit ) 0x76d02bf0
00000000 (0x76d098d0): 00 00 01 b6 95 dc 18 34 88 e8 8d d3 e9 e9 e9 d3  .......4........
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1185 bytes, dts: 0:00:00.480000000, pts: none, duration: 0:00:00.040000000, offset: 12, offset_end: 13, flags: 00002000 delta-unit ) 0x76d02d30
00000000 (0x76d09050): 00 00 01 b6 57 08 18 11 f1 36 78 5d ad 9b 6b 7a  ....W....6x]..kz
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (1711 bytes, dts: 0:00:00.520000000, pts: none, duration: 0:00:00.040000000, offset: 13, offset_end: 14, flags: 00002000 delta-unit ) 0x76d02dd0
00000000 (0x76d09600): 00 00 01 b6 57 9e 18 11 f0 a3 65 ef 5c 62 7b 6c  ....W.....e.\b{l
--
/GstPipeline:pipeline0/GstFakeSink:fakesink0: last-message = chain   ******* (fakesink0:sink) (3449 bytes, dts: 0:00:00.560000000, pts: none, duration: 0:00:00.040000000, offset: 14, offset_end: 15, flags: 00002000 delta-unit ) 0x76d02c90
00000000 (0x76d0b050): 00 00 01 b6 58 ca 1c 11 b9 57 1d 5b 78 e9 77 90  ....X....W.[x.w.
So it seems that mpeg4videoparser unpacks packed bistream, right? But if frames are correct can't tell, someone to help here? (gst-launch-1.0 -v filesrc location=file.avi ! avidemux ! fakesink silent=FALSE dump=TRUE can really help see what we get...)

The problem with xvid was the N-VOP's, but after we excluded them it worked.

Edited by athoik, 14 November 2014 - 13:17.

Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916

Re: GStreamer 1.0 #297 Erik Slagter

  • PLi® Core member
  • 46,969 posts

+542
Excellent

Posted 14 November 2014 - 15:16

I think you'll need a tool to dump the frames metadata (including type of frame (I/P/B) and timestamps) to be sure. I used to do that with avidemux2 (actually a video editor, but it also shows frame type), but there might be better tools. The I and P frames should have a DTS that only have a small offset from the PTS, or should have no DTS at all, the B frames should have a distinct DTS, depending on how B frames are used in a row (I am not sure with divx, it may not even be more than one, but mpeg4-vc allows several).

 

It's quite of weird that this used to work before (right?), so I'd guess some part (the mpeg4 parser?) should do the correct extraction of the packed frames? Or is this normally tackled by the software decoder (in which case we have a problem...)


* Wavefrontier T90 with 28E/23E/19E/13E via SCR switches 2 x 2 x 6 user bands
I don't read PM -> if you have something to ask or to report, do it in the forum so others can benefit. I don't take freelance jobs.
Ik lees geen PM -> als je iets te vragen of te melden hebt, doe het op het forum, zodat anderen er ook wat aan hebben.


Re: GStreamer 1.0 #298 mx3L

  • Senior Member
  • 616 posts

+79
Good

Posted 14 November 2014 - 15:21

@athoik

I already tried it, I was mentioning it in #287 post. I was thinking exactly as you, that divx4,5 is mpeg4 part 2 codec like xvid, so we can do exactly as what we did for xvid - unpack(mpeg4videoparse), undef packing and set streamtype 4 and it should work. Problem is in unpacking packed divx5, since unpacked divx5 is working smoothly with PTS, so it should be solvable as in xvid's case.

 

@Erik

As you can see in #289 post, divx3 + every mpeg4-part2 video with b-frames providing only PTS, works. Does it mean that decoder is able to retrieve/compute DTS from provided input? I think so, since as you mentioned, when there are b-frames, DTS is essential. As it is with latest patch 0001-dvbvideosink-use-DTS-for-divx3-and-divx5.patch, it appears to work properly. I think that @athoik is just trying to find better solution, since all mpeg4 part2 codecs should work with streamtype 4 and there should be no need for telling decoder that it has divx4,5 or xvid on the input. It would be better generic solution, also it would cleanup lot of code.

 

I'm still not sure if unpacking by mpeg4videoparse is neccesary, since decoder can handle packed streams, we just have an issue with detecting xvid(easy fix as I already proposed but rejected by gstreamer). In case there is performance drop by mpeg4videoparse, we should re-consider it. I will make a comparison.


Edited by mx3L, 14 November 2014 - 15:22.


Re: GStreamer 1.0 #299 Erik Slagter

  • PLi® Core member
  • 46,969 posts

+542
Excellent

Posted 14 November 2014 - 15:32

Could you please check if the following patch fixes avi files with xvid codec (packed / unpacked)?
 

Subject: [PATCH] dvbvideosink: add profile to caps and ignore dummy packed
 B-Frames


diff --git a/gstdvbvideosink.c b/gstdvbvideosink.c
index d8d5635..37b3ac0 100755
--- a/gstdvbvideosink.c
+++ b/gstdvbvideosink.c
@@ -176,12 +176,14 @@ GST_STATIC_PAD_TEMPLATE (
 	GST_PAD_SINK,
 	GST_PAD_ALWAYS,
 	GST_STATIC_CAPS (
-	"video/mpeg, "
 #ifdef HAVE_MPEG4
-		"mpegversion = (int) { 1, 2, 4 }, "
-#else
-		"mpegversion = (int) { 1, 2 }, "
+	"video/mpeg, "
+		"mpegversion = (int) 4, "
+		"profile = (string) { simple, advanced-simple }, "
+		VIDEO_CAPS "; "
 #endif
+	"video/mpeg, "
+		"mpegversion = (int) { 1, 2 }, "
 		VIDEO_CAPS "; "
 #ifdef HAVE_H264
 	"video/x-h264, "
@@ -815,6 +817,9 @@ static GstFlowReturn gst_dvbvideosink_render(GstBaseSink *sink, GstBuffer *buffe
 		}
 	}
 #endif
+	/* remove dummy packed B-Frame */
+	if (self->codec_type == CT_MPEG4_PART2 && data_len <= 7)
+		goto ok;
 
 	pes_header[0] = 0;
 	pes_header[1] = 0;
-- 
PS. Try without DTS & PTS patch in PES header

Applied.


* Wavefrontier T90 with 28E/23E/19E/13E via SCR switches 2 x 2 x 6 user bands
I don't read PM -> if you have something to ask or to report, do it in the forum so others can benefit. I don't take freelance jobs.
Ik lees geen PM -> als je iets te vragen of te melden hebt, doe het op het forum, zodat anderen er ook wat aan hebben.


Re: GStreamer 1.0 #300 athoik

  • PLi® Core member
  • 8,458 posts

+327
Excellent

Posted 14 November 2014 - 15:49

@mx3L,

Correct, this is what GStreamer devs where telling again and again, xvid is mpeg4 part2 why you need special handling? So they rejected patch that adds format in caps (like the wmv does). Here is the bug: https://bugzilla.gno...g.cgi?id=739196

So every mpeg4 part2 codec must/should handled by streamtype = 4.

But unfortunately hardware doesn't like it, especially with packed bitstream.

After mpeg4videoparser plugged-in packed streams are converted to almost unpacked bitstream (there are some dummy frames still left behind that confuse hardware drivers) Here is the bug: https://bugzilla.gno...g.cgi?id=740015. Although there is already a workaround applied (we just omit them).

Finally there is a change in GStreamer 1.0, we have to choose between PTS and DTS.

What you think we should do? Improve dvbmediasik and try to fix GStreamer issues or keep 5 year old bugs features like pack unpacked bitstream?


Edited by athoik, 14 November 2014 - 15:50.

Wavefield T90: 0.8W - 1.9E - 4.8E - 13E - 16E - 19.2E - 23.5E - 26E - 33E - 39E - 42E - 45E on EMP Centauri DiseqC 16/1
Unamed: 13E Quattro - 9E Quattro on IKUSI MS-0916



15 user(s) are reading this topic

0 members, 13 guests, 0 anonymous users


    Bing (2)