On Tue, 16 Feb 2016, Carl Eugen Hoyos wrote:

Marton Balint <cus <at> passwd.hu> writes:

+ /* The purpose of this is demuxer is to detect DVB teletext streams in
+     * mpegts, so we reject invalid buffer sizes */
+    if ((p->buf_size + 45) % 184 != 0)
+        return 0;

I don't think this is ok (although I may miss something): The file could end in the middle of a teletext patckage or the end of the probe buffer could be within a teletext package.

Usually you'd be right, but not this time I think because the reason for this demuxer is not to actually handle RAW dvb teletext files (I doubt those exists in the real world), but only to detect DVB teletext streams in mpegts. Therefore it matches for a single PES payload, not a bitstream.

A RAW dvb teletext file would be a dump of PES payloads without separation where one would constantly have to find synchornization because there is no way of knowning how big is a PES payload and when the next one starts.

On the other hand DVB teletext PES payloads have a strict length requirement, and they are at most 1437 bytes long, so the full payload should always be probed even if the probe function truncates at 2048 bytes or so (I don't know if it does or not).


+    if (!ff_data_identifier_is_teletext(p->buf[0]))
+        return 0;
+
+    for (buf = p->buf + 1; buf < end; buf += 46) {
+        if (!ff_data_unit_id_is_teletext(buf[0]) && buf[0] != 0xff)
+            return 0;
+        if (buf[1] != 0x2c)     // data_unit_length
+            return 0;
+    }

I suspect this should count frames.

Not really, a PES payload is only one frame, the loop match data units (practically VBI lines, or stuffing).

+    return AVPROBE_SCORE_MAX / 2;

Is this ok for one frame?

I don't know, I figured even for the smallest PES payload which is 139 bytes we are matching 1+2+2+2 mostly different bytes, which should be a pretty safe detection, therefore AVPROBE_SCORE_MAX / 2. I can use anything here you prefer.


+++ b/libavutil/internal.h

Please create a new teletext header in libavcodec.

Why not in libavutil then? It is used in a codec in libavcodec and a probe function in libavformat.

Regards,
Marton
_______________________________________________
ffmpeg-devel mailing list
ffmpeg-devel@ffmpeg.org
http://ffmpeg.org/mailman/listinfo/ffmpeg-devel

Reply via email to