| | 250 | static int |
|---|
| | 251 | auto_cmml (OGGZ * oggz, ogg_packet * op, long serialno, void * user_data) |
|---|
| | 252 | { |
|---|
| | 253 | unsigned char * header = op->packet; |
|---|
| | 254 | ogg_int64_t granule_rate_numerator = 0, granule_rate_denominator = 0; |
|---|
| | 255 | |
|---|
| | 256 | if (op->bytes < 28) return 0; |
|---|
| | 257 | |
|---|
| | 258 | if (strncmp ((char *)header, "CMML", 4)) return 0; |
|---|
| | 259 | if (!op->b_o_s) return 0; |
|---|
| | 260 | |
|---|
| | 261 | granule_rate_numerator = INT64_LE_AT(&header[12]); |
|---|
| | 262 | granule_rate_denominator = INT64_LE_AT(&header[20]); |
|---|
| | 263 | #ifdef DEBUG |
|---|
| | 264 | printf ("Got CMML rate %lld/%lld\n", granule_rate_numerator, |
|---|
| | 265 | granule_rate_denominator); |
|---|
| | 266 | #endif |
|---|
| | 267 | |
|---|
| | 268 | oggz_set_metric_linear (oggz, serialno, |
|---|
| | 269 | granule_rate_numerator, |
|---|
| | 270 | OGGZ_AUTO_MULT * granule_rate_denominator); |
|---|
| | 271 | |
|---|
| | 272 | return 1; |
|---|
| | 273 | } |
|---|
| | 274 | |
|---|