1. 14 Aug, 2019 7 commits
    • Marton Balint's avatar
      avformat/mpegtsenc: fix PCR generation intervals · 88ac76be
      Marton Balint authored
      PCR generation was based on counting packets for both CBR and VBR streams.
      Couting packets might have worked for CBR streams (when muxrate was specified)
      but it only took into account the packets of a service (or the packets of the
      PCR stream lately), so even that was problematic for multi program streams.
      
      The new code works on actual timestamps for both CBR and VBR streams. For VBR
      streams the behaviour of the old code is simulated by selecting a PCR interval
      which is the highest multiple of the frame duration but still less than 100 ms.
      
      It should be trivial to add support for setting the PCR interval for VBR
      streams as well in a later patch.
      
      The accuracy of PCR packets for CBR streams was greatly improved by preemtively
      sending them at PCR intervals even if sending the payload of another stream
      is in progress.
      
      This may fix these tickets:
      - #5750
      - #7524
      Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
      88ac76be
    • Marton Balint's avatar
      avformat/mpegtsenc: use increasing numbers in default service names · a4d984ad
      Marton Balint authored
      Maybe we should use service ID instead of increasing numbers?
      Signed-off-by: 's avatarMarton Balint <cus@passwd.hu>
      a4d984ad
    • Marton Balint's avatar
    • Marton Balint's avatar
      47ea654b
    • Marton Balint's avatar
      avformat/mpegtsenc: fix incorrect PCR selection with multiple programs · d770e0f4
      Marton Balint authored
      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: 's avatarMarton Balint <cus@passwd.hu>
      d770e0f4
    • Marton Balint's avatar
      ffplay: properly detect all window size changes · a1c70148
      Marton Balint authored
      SDL_WINDOWEVENT_SIZE_CHANGED should be used instead of SDL_WINDOWEVENT_RESIZED
      because SDL_WINDOWEVENT_RESIZED is only emitted if the resize happened due to
      an external event.
      
      Fixes ticket #8072.
      
      Additional references:
      https://bugzilla.libsdl.org/show_bug.cgi?id=4760
      https://wiki.libsdl.org/SDL_WindowEventIDSigned-off-by: 's avatarMarton Balint <cus@passwd.hu>
      a1c70148
    • Andreas Rheinhardt's avatar
      avfilter/vf_convolution: Fix build failures · 8fcc5d96
      Andreas Rheinhardt authored
      98e419cb added SIMD for the convolution filter for x64 systems. As
      usual, it used a check of the form
      if (ARCH_X86_64)
          ff_convolution_init_x86(s);
      and thereby relied on the compiler eliminating this pseudo-runtime check
      at compiletime for non x64 systems (for which ff_convolution_init_x86
      isn't defined) to compile. But vf_convolution.c contains more than one
      filter and if the convolution filter is disabled, but one of the other
      filters (prewitt, sobel, roberts) is enabled, the build will fail on x64,
      because ff_convolution_init_x86 isn't defined in this case.
      Signed-off-by: 's avatarAndreas Rheinhardt <andreas.rheinhardt@gmail.com>
      8fcc5d96
  2. 13 Aug, 2019 14 commits
  3. 12 Aug, 2019 4 commits
  4. 11 Aug, 2019 15 commits