- case NUV_MYTHEXT:
- url_fskip(pb, 7);
- size = PKTSIZE(get_le32(pb));
- if (size != 128 * 4)
- break;
- get_le32(pb); // version
- if (vst) {
- vst->codec->codec_tag = get_le32(pb);
- vst->codec->codec_id =
- codec_get_id(codec_bmp_tags, vst->codec->codec_tag);
- } else
- url_fskip(pb, 4);
-
- if (ast) {
- ast->codec->codec_tag = get_le32(pb);
- ast->codec->sample_rate = get_le32(pb);
- ast->codec->bits_per_sample = get_le32(pb);
- ast->codec->channels = get_le32(pb);
- ast->codec->codec_id =
- wav_codec_get_id(ast->codec->codec_tag,
- ast->codec->bits_per_sample);
- } else
- url_fskip(pb, 4 * 4);
-
- size -= 6 * 4;
- url_fskip(pb, size);
- return 1;
- case NUV_SEEKP:
- size = 11;
- break;
- default:
- url_fskip(pb, 7);
- size = PKTSIZE(get_le32(pb));
- break;
+ avio_rl32(pb); // version
+ if (vst) {
+ vst->codecpar->codec_tag = avio_rl32(pb);
+ vst->codecpar->codec_id =
+ ff_codec_get_id(ff_codec_bmp_tags, vst->codecpar->codec_tag);
+ if (vst->codecpar->codec_tag == MKTAG('R', 'J', 'P', 'G'))
+ vst->codecpar->codec_id = AV_CODEC_ID_NUV;
+ } else
+ avio_skip(pb, 4);
+
+ if (ast) {
+ int id;
+
+ ast->codecpar->codec_tag = avio_rl32(pb);
+ ast->codecpar->sample_rate = avio_rl32(pb);
+ ast->codecpar->bits_per_coded_sample = avio_rl32(pb);
+ ast->codecpar->channels = avio_rl32(pb);
+ ast->codecpar->channel_layout = 0;
+
+ id = ff_wav_codec_get_id(ast->codecpar->codec_tag,
+ ast->codecpar->bits_per_coded_sample);
+ if (id == AV_CODEC_ID_NONE) {
+ id = ff_codec_get_id(nuv_audio_tags, ast->codecpar->codec_tag);
+ if (id == AV_CODEC_ID_PCM_S16LE)
+ id = ff_get_pcm_codec_id(ast->codecpar->bits_per_coded_sample,
+ 0, 0, ~1);
+ }
+ ast->codecpar->codec_id = id;
+
+ ast->need_parsing = AVSTREAM_PARSE_FULL;
+ } else
+ avio_skip(pb, 4 * 4);
+
+ size -= 6 * 4;
+ avio_skip(pb, size);
+ return 0;
+ case NUV_SEEKP:
+ size = 11;
+ break;
+ default:
+ avio_skip(pb, 7);
+ size = PKTSIZE(avio_rl32(pb));
+ break;