qtmux throws away first incoming buffer?

Paul Stuart paul_stuart at seektech.com
Tue Jan 24 13:38:43 PST 2012


Nevermind. I see towards the end of gst_qt_mux_add_buffer, we are 
actually pushing last_buf, not the current buf. So, not sure why I'm not 
getting the keyframe with my last hypothesis shot to heck!
Paul Stuart wrote:
> Hi,
> When I record an H.264 video and mux it using mp4mux (from 
> plugins-good-0.10.30/gst/isomp4), on playback VLC gives me the following 
> warning:
>
> [00000292] main input debug: `testMeVideo.mp4' successfully opened
> [00000304] mp4 demuxer debug: track[Id 0x1] using Sync Sample Box (stss)
> [00000304] mp4 demuxer debug: stts gives 1 --> 0 (sample number)
> [00000304] mp4 demuxer debug: track[Id 0x2] does not provide Sync Sample 
> Box (stss)
> [00000306] ffmpeg decoder warning: AVC: Consumed only 90 bytes instead 
> of 11574
>  (h264 at 0x848d7f0)
> [00000306] ffmpeg decoder warning: AVC: nal size -298012672
>  (h264 at 0x848d7f0)
> [00000306] ffmpeg decoder warning: no frame!
>  (h264 at 0x848d7f0)
> [00000306] ffmpeg decoder warning: cannot decode one frame (11578 bytes)
> [00000306] ffmpeg decoder warning: AVC: Consumed only 90 bytes instead 
> of 11574
>  (h264 at 0x848d7f0)
> [00000306] ffmpeg decoder warning: AVC: nal size -298012672
>  (h264 at 0x848d7f0)
> [00000306] ffmpeg decoder warning: no frame!
>  (h264 at 0x848d7f0)
> [00000306] ffmpeg decoder warning: cannot decode one frame (11578 bytes)
> [00000338] faad decoder warning: decoded zero sample
> [00000306] ffmpeg decoder warning: warning: first frame is no keyframe
>  (h264 at 0x848d7f0)
>
>
> So, no keyframe.
>
> Digging into the plugin code, in gstqtmux.c...
>
> At the top of gst_qt_mux_add_buffer, we have this little snip:
>
>   last_buf = pad->last_buf;
>   if (G_UNLIKELY (qtmux->dts_method == DTS_METHOD_REORDER)) {
>     buf = gst_qt_mux_get_asc_buffer_ts (qtmux, pad, buf);
>     if (!buf && !last_buf) {
>       GST_DEBUG_OBJECT (qtmux, "no reordered buffer");
>       return GST_FLOW_OK;
>     }
>   }
>
>   if (last_buf == NULL) {
> #ifndef GST_DISABLE_GST_DEBUG
>     if (buf == NULL) {
>       GST_DEBUG_OBJECT (qtmux, "Pad %s has no previous buffer stored and "
>           "received NULL buffer, doing nothing",
>           GST_PAD_NAME (pad->collect.pad));
>     } else {
>       GST_LOG_OBJECT (qtmux,
>           "Pad %s has no previous buffer stored, storing now",
>           GST_PAD_NAME (pad->collect.pad));
>     }
> #endif
>     pad->last_buf = buf;
>     goto exit;
>   } else
>     gst_buffer_ref (last_buf);
>
>
>
> It looks to me that we *always* throw away the first buffer coming in 
> since there is no last_buf yet. Since the first frame I encode is my IDR 
> frame, and it gets tossed, I reckon that this would be the reason VLC is 
> whining about no keyframe.
>
>
> Am I barking up the right tree here? I want to ask before I start 
> hacking the plugin since this seems fundamental, and qtmux has been 
> around for a while, so I'm guessing I must be missing something.
>
> Any insight would be appreciated.
>
> Thanks,
> Paul
>
>
>
>
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
>   



More information about the gstreamer-devel mailing list