[MPlayer-dev-eng] Re: mpeg muxer & dvd pack scr

Nico Sabbi nsabbi at tiscali.it
Sat Jul 16 08:15:50 CEST 2005


Tobias Diedrich wrote:

>Tobias Diedrich wrote:
>
>  
>
>>Looking at the code, it seems that the muxer uses the same reference
>>clock for both audio/video and the pack headers, which is wrong
>>AFAICT (and explains why the first two packs have the same scr).
>>It also does not write the scr extension even though it has an extra
>>function for writing mpeg2 scr.
>>    
>>
>
>This should fix it (Or at least does for my test-case):
>
>Index: muxer_mpeg.c
>===================================================================
>RCS file: /cvsroot/mplayer/main/libmpdemux/muxer_mpeg.c,v
>retrieving revision 1.18
>diff -u -r1.18 muxer_mpeg.c
>--- muxer_mpeg.c	10 Jul 2005 08:36:39 -0000	1.18
>+++ muxer_mpeg.c	16 Jul 2005 04:28:51 -0000
>@@ -494,7 +494,9 @@
> 
> static void write_mpeg2_scr(unsigned char *b, uint64_t ts) 
> {
>-	uint16_t t1, t2, t3;
>+	uint16_t t1, t2, t3, t4;
>+
>+	t4 = ((ts & 0x3ff) * 300) >> 10;
> 	ts >>= 10;
> 	ts &= 0x1FFFFFFFFULL;	//33 bits, no extension; input must be * 92160000
> 	t1 = (ts >> 30) & 0x7;;
>@@ -505,8 +507,8 @@
> 	b[1] = (t2 >> 5);
> 	b[2] = (t2 & 0x1f) << 3 | 0x4 | ((t3 >> 13) & 0x3);
> 	b[3] = (t3 >> 5);
>-	b[4] = (t3 & 0x1f) << 3 | 0x4;
>-	b[5] = 1;
>+	b[4] = (t3 & 0x1f) << 3 | 0x4 | (t4 >> 7);
>+	b[5] = (t4 << 1) | 1;
> }
>  
>

the scr extension is unimportant and it doesn't exists in mpeg1, so we 
had better
forget about it, so we can handle the two cases like one (syntax apart)

> 
> 
>@@ -525,7 +527,8 @@
> 	}
> 	else
> 	{
>-		write_mpeg2_scr(&buff[4], priv->scr); // 0010 and SCR
>+		uint64_t scr = (uint64_t) muxer->movi_end * 92160000 / muxer->sysrate;
>+		write_mpeg2_scr(&buff[4], scr); // 0010 and SCR
> 		write_mpeg_rate(priv->mux, &buff[10], muxer->sysrate);
> 		buff[13] = 0xf8; //5 bits reserved + 3 set to 0 to indicate 0 stuffing bytes 
> 		len = 14;
>
>
>  
>

the SCR issue is much more complicate than this: at the moment it's 
determined
in terms of the dts; if you set it wrong it may (and very likely will) 
be in advance
of the PTS or it may be far from it.
Overall it's the most difficult term to manage in mpeg.
I don't have time to test your code right now (did you?), I'll do it 
when I'm back.
Thanks,
       Nico




More information about the MPlayer-dev-eng mailing list