avidemux: debug_memdump() unknown tags. Refactor junk parsing code.

This makes life slightly easier when debugging avi files.
This commit is contained in:
Edward Hervey 2009-06-09 10:38:52 +02:00
parent 6eec2a060d
commit 5e0a2296e0

View file

@ -3162,6 +3162,8 @@ gst_avi_demux_stream_header_pull (GstAviDemux * avi)
GST_WARNING_OBJECT (avi, GST_WARNING_OBJECT (avi,
"Unknown list %" GST_FOURCC_FORMAT " in AVI header", "Unknown list %" GST_FOURCC_FORMAT " in AVI header",
GST_FOURCC_ARGS (fourcc)); GST_FOURCC_ARGS (fourcc));
GST_MEMDUMP_OBJECT (avi, "Unknown list", GST_BUFFER_DATA (sub),
GST_BUFFER_SIZE (sub));
/* fall-through */ /* fall-through */
case GST_RIFF_TAG_JUNK: case GST_RIFF_TAG_JUNK:
goto next; goto next;
@ -3172,6 +3174,8 @@ gst_avi_demux_stream_header_pull (GstAviDemux * avi)
GST_WARNING_OBJECT (avi, GST_WARNING_OBJECT (avi,
"Unknown tag %" GST_FOURCC_FORMAT " in AVI header at off %d", "Unknown tag %" GST_FOURCC_FORMAT " in AVI header at off %d",
GST_FOURCC_ARGS (tag), offset); GST_FOURCC_ARGS (tag), offset);
GST_MEMDUMP_OBJECT (avi, "Unknown tag", GST_BUFFER_DATA (sub),
GST_BUFFER_SIZE (sub));
/* fall-through */ /* fall-through */
case GST_RIFF_TAG_JUNK: case GST_RIFF_TAG_JUNK:
next: next:
@ -3215,40 +3219,55 @@ gst_avi_demux_stream_header_pull (GstAviDemux * avi)
tag = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf)); tag = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf));
size = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf) + 4); size = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf) + 4);
ltag = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf) + 8); ltag = GST_READ_UINT32_LE (GST_BUFFER_DATA (buf) + 8);
gst_buffer_unref (buf);
GST_DEBUG ("tag %" GST_FOURCC_FORMAT ", size %u", GST_DEBUG ("tag %" GST_FOURCC_FORMAT ", size %u",
GST_FOURCC_ARGS (tag), size); GST_FOURCC_ARGS (tag), size);
GST_MEMDUMP ("Tag content", GST_BUFFER_DATA (buf), GST_BUFFER_SIZE (buf));
gst_buffer_unref (buf);
if (tag == GST_RIFF_TAG_LIST) { switch (tag) {
switch (ltag) { case GST_RIFF_TAG_LIST:{
case GST_RIFF_LIST_movi: switch (ltag) {
goto skipping_done; case GST_RIFF_LIST_movi:
case GST_RIFF_LIST_INFO: GST_DEBUG_OBJECT (avi,
res = "Reached the 'movi' tag, we're done with skipping");
gst_riff_read_chunk (element, avi->sinkpad, &avi->offset, &tag, goto skipping_done;
&buf); case GST_RIFF_LIST_INFO:
if (res != GST_FLOW_OK) { res =
GST_DEBUG_OBJECT (avi, "couldn't read INFO chunk"); gst_riff_read_chunk (element, avi->sinkpad, &avi->offset, &tag,
goto pull_range_failed; &buf);
} if (res != GST_FLOW_OK) {
GST_DEBUG ("got size %u", GST_BUFFER_SIZE (buf)); GST_DEBUG_OBJECT (avi, "couldn't read INFO chunk");
goto pull_range_failed;
}
GST_DEBUG ("got size %u", GST_BUFFER_SIZE (buf));
sub = gst_buffer_create_sub (buf, 4, GST_BUFFER_SIZE (buf) - 4); sub = gst_buffer_create_sub (buf, 4, GST_BUFFER_SIZE (buf) - 4);
gst_riff_parse_info (element, sub, &avi->globaltags); gst_riff_parse_info (element, sub, &avi->globaltags);
if (sub) { if (sub) {
gst_buffer_unref (sub); gst_buffer_unref (sub);
sub = NULL; sub = NULL;
} }
gst_buffer_unref (buf); gst_buffer_unref (buf);
/* gst_riff_read_chunk() has already advanced avi->offset */ /* gst_riff_read_chunk() has already advanced avi->offset */
break; break;
default: default:
avi->offset += 8 + ((size + 1) & ~1); GST_WARNING_OBJECT (avi,
break; "Skipping unknown list tag %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (ltag));
avi->offset += 8 + ((size + 1) & ~1);
break;
}
} }
} else { break;
avi->offset += 8 + ((size + 1) & ~1); default:
GST_WARNING_OBJECT (avi, "Skipping unknown tag %" GST_FOURCC_FORMAT,
GST_FOURCC_ARGS (tag));
/* Fall-through */
case GST_MAKE_FOURCC ('J', 'U', 'N', 'Q'):
case GST_MAKE_FOURCC ('J', 'U', 'N', 'K'):
avi->offset += 8 + ((size + 1) & ~1);
break;
} }
} while (1); } while (1);
skipping_done: skipping_done: