diff options
author | Marton Balint <cus@passwd.hu> | 2019-08-02 09:46:51 +0200 |
---|---|---|
committer | Marton Balint <cus@passwd.hu> | 2019-08-14 22:50:11 +0200 |
commit | d770e0f401e77ccd4640bbc805384f928d5de244 (patch) | |
tree | ea1dfdc54d1e8af3bf1bd8ae1f56d453ac6e9eef /COPYING.LGPLv2.1 | |
parent | a1c70148471c528104d64dffbc7af70e5d1ce33e (diff) | |
download | ffmpeg-d770e0f401e77ccd4640bbc805384f928d5de244.tar.gz |
avformat/mpegtsenc: fix incorrect PCR selection with multiple programs
The MPEG-TS muxer had a serious bug related to the use of multiple programs:
in that case, the PCR pid selection was incomplete for all services except one.
This patch solves this problem and selects a stream to become PCR for each
service, preferably the video stream.
This patch also moves pcr calculation attributes to MpegTSWriteStream from
MpegTSService. PCR is a per-stream and not per-service thing, so it was
misleading to refer to it as something that is per-service.
Also remove *service from MpegTSWriteStream because a stream can belong to
multiple services so it was misleading to select one for each stream.
You can check the result with this example command:
./ffmpeg -loglevel verbose -y -f lavfi -i \
"testsrc=s=64x64:d=10,split=2[out0][tmp1];[tmp1]vflip[out1];sine=d=10,asetnsamples=1152[out2]" \
-flags +bitexact -fflags +bitexact -sws_flags +accurate_rnd+bitexact \
-codec:v libx264 -codec:a mp2 -pix_fmt yuv420p \
-map '0:v:0' \
-map '0:v:1' \
-map '0:a:0' \
-program st=0:st=2 -program st=1:st=2 -program st=2 -program st=0 -f mpegts out.ts
You should now see this:
[mpegts @ 0x37505c0] service 1 using PCR in pid=256
[mpegts @ 0x37505c0] service 2 using PCR in pid=257
[mpegts @ 0x37505c0] service 3 using PCR in pid=258
[mpegts @ 0x37505c0] service 4 using PCR in pid=256
Fixes ticket #8039.
v2: a video is stream is preferred if there are no programs, just like before
the patch.
Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'COPYING.LGPLv2.1')
0 files changed, 0 insertions, 0 deletions