MCPcopy Create free account
hub / github.com/FFmpeg/FFmpeg / hcom_read_header

Function hcom_read_header

libavformat/hcom.c:39–86  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

37}
38
39static int hcom_read_header(AVFormatContext *s)
40{
41 AVStream *st;
42 av_unused unsigned data_size, rsrc_size, huffcount;
43 unsigned compresstype, divisor;
44 unsigned dict_entries;
45 int ret;
46
47 avio_skip(s->pb, 83);
48 data_size = avio_rb32(s->pb);
49 rsrc_size = avio_rb32(s->pb);
50 avio_skip(s->pb, 128-91+4);
51 huffcount = avio_rb32(s->pb);
52 avio_skip(s->pb, 4);
53 compresstype = avio_rb32(s->pb);
54 if (compresstype > 1)
55 return AVERROR_INVALIDDATA;
56 divisor = avio_rb32(s->pb);
57 if (divisor == 0 || divisor > 4)
58 return AVERROR_INVALIDDATA;
59 dict_entries = avio_rb16(s->pb);
60
61 st = avformat_new_stream(s, NULL);
62 if (!st)
63 return AVERROR(ENOMEM);
64
65 st->codecpar->codec_type = AVMEDIA_TYPE_AUDIO;
66 st->codecpar->ch_layout.nb_channels = 1;
67 st->codecpar->sample_rate = 22050 / divisor;
68 st->codecpar->codec_id = AV_CODEC_ID_HCOM;
69 st->codecpar->bits_per_coded_sample = 8;
70 st->codecpar->block_align = 4;
71
72 ret = ff_alloc_extradata(st->codecpar, dict_entries * 4 + 7);
73 if (ret < 0)
74 return ret;
75 AV_WB16(st->codecpar->extradata, dict_entries);
76 AV_WB32(st->codecpar->extradata + 2, compresstype);
77 ret = ffio_read_size(s->pb, st->codecpar->extradata + 6, dict_entries * 4);
78 if (ret < 0)
79 return ret;
80 avio_skip(s->pb, 1);
81 st->codecpar->extradata[dict_entries * 4 + 6] = avio_r8(s->pb);
82
83 avpriv_set_pts_info(st, 64, 1, st->codecpar->sample_rate);
84
85 return 0;
86}
87
88const FFInputFormat ff_hcom_demuxer = {
89 .p.name = "hcom",

Callers

nothing calls this directly

Calls 8

avio_skipFunction · 0.85
avio_rb32Function · 0.85
avio_rb16Function · 0.85
avformat_new_streamFunction · 0.85
ff_alloc_extradataFunction · 0.85
ffio_read_sizeFunction · 0.85
avio_r8Function · 0.85
avpriv_set_pts_infoFunction · 0.85

Tested by

no test coverage detected