- url_fskip(pb, 3);
- mtv->file_size = get_le32(pb);
- mtv->segments = get_le32(pb);
- url_fskip(pb, 32);
- mtv->audio_identifier = get_le24(pb);
- mtv->audio_br = get_le16(pb);
- mtv->img_colorfmt = get_le24(pb);
- mtv->img_bpp = get_byte(pb);
- mtv->img_width = get_le16(pb);
- mtv->img_height = get_le16(pb);
- mtv->img_segment_size = get_le16(pb);
- url_fskip(pb, 4);
- audio_subsegments = get_le16(pb);
+ avio_skip(pb, 3);
+ mtv->file_size = avio_rl32(pb);
+ mtv->segments = avio_rl32(pb);
+ avio_skip(pb, 32);
+ mtv->audio_identifier = avio_rl24(pb);
+ mtv->audio_br = avio_rl16(pb);
+ mtv->img_colorfmt = avio_rl24(pb);
+ mtv->img_bpp = avio_r8(pb);
+ mtv->img_width = avio_rl16(pb);
+ mtv->img_height = avio_rl16(pb);
+ mtv->img_segment_size = avio_rl16(pb);
+
+ /* Calculate width and height if missing from header */
+
+ if (!mtv->img_width && mtv->img_height > 0 && mtv->img_bpp >= 8)
+ mtv->img_width=mtv->img_segment_size / (mtv->img_bpp>>3)
+ / mtv->img_height;
+
+ if (!mtv->img_height && mtv->img_width > 0 && mtv->img_bpp >= 8)
+ mtv->img_height=mtv->img_segment_size / (mtv->img_bpp>>3)
+ / mtv->img_width;
+
+ if (!mtv->img_width || !mtv->img_height)
+ return AVERROR_INVALIDDATA;
+
+ avio_skip(pb, 4);
+ audio_subsegments = avio_rl16(pb);
+
+ if (audio_subsegments == 0) {
+ avpriv_request_sample(s, "MTV files without audio");
+ return AVERROR_PATCHWELCOME;
+ }
+