218
224
} /* dv_upsample */
226
/* ---------------------------------------------------------------------------
228
void dv_test12bit_conv (void)
232
for (i = 0; i < 0x7ff; ++i)
234
fprintf (stderr, " (%5d,%5d,0x%08x,0x%08x) -> (%5d,%5d,0x%08x,0x%08x) (%d)\n\r",
236
dv_upsample (i), dv_upsample(-i), dv_upsample (i), dv_upsample (-i),
237
dv_upsample (-i) + dv_upsample (i));
241
/* ---------------------------------------------------------------------------
221
244
dv_audio_new(void)
223
246
dv_audio_t *result;
225
248
if(!(result = (dv_audio_t *)calloc(1,sizeof(dv_audio_t)))) goto no_mem;
228
result->option_table[DV_AUDIO_OPT_FREQUENCY] = (struct poptOption){
229
longName: "frequency",
231
argInfo: POPT_ARG_INT,
251
result->option_table[DV_AUDIO_OPT_FREQUENCY] = (struct poptOption){
252
longName: "frequency",
254
argInfo: POPT_ARG_INT,
232
255
arg: &result->arg_audio_frequency,
233
256
descrip: "audio frequency: 0=autodetect [default], 1=32 kHz, 2=44.1 kHz, 3=48 kHz",
234
257
argDescrip: "(0|1|2|3)"
237
result->option_table[DV_AUDIO_OPT_QUANTIZATION] = (struct poptOption){
238
longName: "quantization",
240
argInfo: POPT_ARG_INT,
260
result->option_table[DV_AUDIO_OPT_QUANTIZATION] = (struct poptOption){
261
longName: "quantization",
263
argInfo: POPT_ARG_INT,
241
264
arg: &result->arg_audio_quantization,
242
265
descrip: "audio quantization: 0=autodetect [default], 1=12 bit, 2=16bit",
243
266
argDescrip: "(0|1|2)"
246
result->option_table[DV_AUDIO_OPT_EMPHASIS] = (struct poptOption){
247
longName: "emphasis",
249
argInfo: POPT_ARG_INT,
269
result->option_table[DV_AUDIO_OPT_EMPHASIS] = (struct poptOption){
270
longName: "emphasis",
272
argInfo: POPT_ARG_INT,
250
273
arg: &result->arg_audio_emphasis,
251
274
descrip: "first-order preemphasis of 50/15 us: 0=autodetect [default], 1=on, 2=off",
252
275
argDescrip: "(0|1|2)"
278
result->option_table[DV_AUDIO_OPT_CHAN_MIX] = (struct poptOption) {
279
longName: "audio-mix",
280
argInfo: POPT_ARG_INT,
281
arg: &result->arg_mixing_level,
282
descrip: "mixing level between 1st and 2nd channel for 32kHz 12bit. 0 [default]",
283
argDescrip: "(-16 .. 16)",
255
286
result->option_table[DV_AUDIO_OPT_CALLBACK] = (struct poptOption){
256
287
argInfo: POPT_ARG_CALLBACK|POPT_CBFLAG_POST,
257
288
arg: dv_audio_popt_callback,
303
335
} /* dv_dump_aaux_as */
337
/* ---------------------------------------------------------------------------
340
dv_dump_audio_header (dv_decoder_t *decoder, int ds, uint8_t *inbuf)
345
fprintf (stderr, " ");
346
for (i = 0, p = inbuf + 80 * 16 * ((ds&1) ? 0: 3); i < 8; i++, p++)
348
fprintf (stderr, " %02x ", *p);
351
for (i = 0, p = inbuf + 80 * 16 * ((ds & 1) ? 1: 4); i < 8; i++, p++)
353
fprintf (stderr, " %02x ", *p);
355
fprintf (stderr, "\n");
359
/* ---------------------------------------------------------------------------
306
dv_parse_audio_header(dv_decoder_t *decoder, uint8_t *inbuf)
362
dv_parse_audio_header(dv_decoder_t *decoder, const uint8_t *inbuf)
308
dv_audio_t *audio = decoder->audio;
309
dv_aaux_as_t *dv_aaux_as = (dv_aaux_as_t *) (inbuf + 80*6+80*16*3 + 3);
310
dv_aaux_asc_t *dv_aaux_asc = (dv_aaux_asc_t *)(inbuf + 80*6+80*16*4 + 3);
311
int normal_speed = FALSE;
364
dv_audio_t *audio = decoder->audio;
365
dv_aaux_as_t *dv_aaux_as = (dv_aaux_as_t *) (inbuf + 80*6+80*16*3 + 3),
367
dv_aaux_asc_t *dv_aaux_asc = (dv_aaux_asc_t *)(inbuf + 80*6+80*16*4 + 3),
368
*dv_aaux_asc1 = NULL;
313
370
if((dv_aaux_as->pc0 != 0x50) || (dv_aaux_asc->pc0 != 0x51)) goto bad_id;
315
372
audio->max_samples = max_samples[dv_aaux_as->pc3.system][dv_aaux_as->pc4.smp];
316
373
/* For now we assume that 12bit = 4 channels */
317
374
if(dv_aaux_as->pc4.qu > 1) goto unsupported_quantization;
318
/*audio->num_channels = (dv_aaux_as->pc4.qu+1) * 2; // TODO verify this is right with known 4-channel input */
320
audio->num_channels = 2; /* TODO verify this is right with known 4-channel input */
375
/*audio->num_channels = (dv_aaux_as->pc4.qu+1) * 2;
376
// TODO verify this is right with known 4-channel input */
378
audio->num_channels =
379
audio->raw_num_channels = 2; /* TODO verify this is right with known 4-channel input */
380
/* DONE: see below */
322
381
switch(audio->arg_audio_frequency) {
324
383
audio->frequency = frequency[dv_aaux_as->pc4.smp];
367
audio->samples_this_frame = dv_audio_samples_per_frame(dv_aaux_as,audio->frequency);
369
audio->aaux_as = *dv_aaux_as;
370
audio->aaux_asc = *dv_aaux_asc;
372
if(decoder->std == e_dv_std_iec_61834) {
373
normal_speed = (dv_aaux_asc->pc3.speed == 0x20);
374
} else if(decoder->std == e_dv_std_iec_61834) {
375
if(dv_aaux_as->pc3.system) {
377
normal_speed = (dv_aaux_asc->pc3.speed == 0x64);
380
normal_speed = (dv_aaux_asc->pc3.speed == 0x78);
384
return(normal_speed); /* don't do audio if speed is not 1 */
426
/* -------------------------------------------------------------------------
427
* so try to detect 4 channel audio mode
429
if (audio -> frequency == 32000 && audio -> quantization == 12)
431
/* -----------------------------------------------------------------------
432
* check different location PAL/NTSC + EVEN/ODD index
433
* in even dif sequences as and acs info is at index 3/4
434
* in odd def sequences as and asc info is at index 0/1
435
* ref: SMPTE 314m, p. 16, table 15
437
if (dv_aaux_as -> pc3. system)
439
dv_aaux_as1 = (dv_aaux_as_t *) (inbuf +
440
80 * (9 * 16 + 6) * 6 + /* go 6 dif sequences ahead */
441
80 * 6 + /* skip 6 header blocks */
442
80 * 16 * 3 + /* select block 3 (1a + 15v) */
443
3); /* skip id bytes */
444
dv_aaux_asc1 = (dv_aaux_asc_t *) (inbuf +
445
80 * (9 * 16 + 6) * 6 + /* go 6 dif sequences ahead */
446
80 * 6 + /* skip 6 header blocks */
447
80 * 16 * 4 + /* select block 4 (1a + 15v) */
448
3); /* skip id bytes */
452
dv_aaux_as1 = (dv_aaux_as_t *) (inbuf +
453
80 * (9 * 16 + 6) * 6 + /* go 6 dif sequences ahead */
454
80 * 6 + /* skip 6 header blocks */
455
80 * 16 * 0 + /* select block 0 (1a + 15v) */
456
3); /* skip id bytes */
457
dv_aaux_asc1 = (dv_aaux_asc_t *) (inbuf +
458
80 * (9 * 16 + 6) * 6 + /* go 6 dif sequences ahead */
459
80 * 6 + /* skip 6 header blocks */
460
80 * 16 * 1 + /* select block 1 (1a + 15v) */
461
3); /* skip id bytes */
463
if (dv_aaux_as1 -> pc2. audio_mode != 0xf)
465
audio -> raw_num_channels = 4;
466
audio -> aaux_as1 = *dv_aaux_as1;
467
audio -> aaux_asc1 = *dv_aaux_asc1;
470
audio -> samples_this_frame =
471
audio -> raw_samples_this_frame [0] = dv_audio_samples_per_frame (dv_aaux_as,
473
if (audio -> raw_num_channels == 4)
475
audio -> raw_samples_this_frame [1] = dv_audio_samples_per_frame (dv_aaux_as1,
478
audio -> raw_samples_this_frame [1] = 0;
480
audio -> aaux_as = *dv_aaux_as;
481
audio -> aaux_asc = *dv_aaux_asc;
483
return dv_is_normal_speed(decoder); /* don't do audio if speed is not 1 */
389
488
unsupported_quantization:
390
fprintf(stderr, "libdv(%s): Malformrmed AAUX AS? pc4.qu == %d\n",
489
fprintf(stderr, "libdv(%s): Malformrmed AAUX AS? pc4.qu == %d\n",
391
490
__FUNCTION__, audio->aaux_as.pc4.qu);
394
493
} /* dv_parse_audio_header */
397
dv_update_num_samples(dv_audio_t *dv_audio, uint8_t *inbuf) {
496
dv_update_num_samples(dv_audio_t *dv_audio, const uint8_t *inbuf) {
399
498
dv_aaux_as_t *dv_aaux_as = (dv_aaux_as_t *)(inbuf + 80*6+80*16*3 + 3);
401
500
if(dv_aaux_as->pc0 != 0x50) goto bad_id;
402
dv_audio->samples_this_frame = dv_audio_samples_per_frame(dv_aaux_as,dv_audio->frequency);
501
dv_audio->samples_this_frame =
502
dv_audio->raw_samples_this_frame[0]=
503
dv_audio_samples_per_frame (dv_aaux_as, dv_audio -> frequency);
504
/* TODO: update second channels bytes too */
410
512
/* This code originates from cdda2wav, by way of Giovanni Iachello <g.iachello@iol.it>
411
513
to Arne Schirmacher <arne@schirmacher.de>. */
413
dv_audio_deemphasis(dv_audio_t *audio, int16_t *outbuf)
515
dv_audio_deemphasis(dv_audio_t *audio, int16_t **outbuf)
416
/* this implements an attenuation treble shelving filter
417
to undo the effect of pre-emphasis. The filter is of
418
a recursive first order */
419
/* static */ short lastin[2] = { 0, 0 };
420
/* static */ double lastout[2] = { 0.0, 0.0 };
422
/* See deemphasis.gnuplot */
424
double OMEGAG = (1./19e-6);
425
double T = (1./audio->frequency);
427
double B = (V0*tan((OMEGAG * T)/2.0));
428
double a1 = ((B - 1.)/(B + 1.));
429
double b0 = (1.0 + (1.0 - a1) * H0/2.0);
430
double b1 = (a1 + (a1 - 1.0) * H0/2.0);
432
/* For 48Khz: a1= -0.659065 b0= 0.449605 b1= -0.108670
433
* For 44.1Khz: a1=-0.62786881719628784282 b0= 0.45995451989513153057 b1=-0.08782333709141937339
436
for (pmm = (short *)outbuf, i=0;
437
i < audio->samples_this_frame;
439
lastout[0] = *pmm * b0 + lastin[0] * b1 - lastout[0] * a1;
441
*pmm++ = lastout[0] > 0.0 ? lastout[0] + 0.5 : lastout[0] - 0.5;
518
/* this implements an attenuation treble shelving filter
519
to undo the effect of pre-emphasis. The filter is of
520
a recursive first order */
524
/* See deemphasis.gnuplot */
526
double OMEGAG = (1./19e-6);
527
double T = (1./audio->frequency);
529
double B = (V0*tan((OMEGAG * T)/2.0));
530
double a1 = ((B - 1.)/(B + 1.));
531
double b0 = (1.0 + (1.0 - a1) * H0/2.0);
532
double b1 = (a1 + (a1 - 1.0) * H0/2.0);
534
if (audio->emphasis) {
535
for (ch=0; ch< audio->raw_num_channels; ch++) {
536
/* ---------------------------------------------------------------------
537
* For 48Khz: a1=-0.659065
540
* For 44.1Khz: a1=-0.62786881719628784282
541
* b0= 0.45995451989513153057
542
* b1=-0.08782333709141937339
545
lastin = audio->lastin [ch];
546
lastout = audio->lastout [ch];
547
for (pmm = (short *)outbuf [ch], i=0;
548
i < audio->raw_samples_this_frame [0]; /* TODO: check for second channel */
550
lastout = *pmm * b0 + lastin * b1 - lastout * a1;
552
*pmm++ = (lastout > 0.0) ? lastout + 0.5 : lastout - 0.5;
553
} /* for (pmn = .. */
554
audio->lastout [ch] = lastout;
555
audio->lastin [ch] = lastin;
557
} /* if (audio -> .. */
444
558
} /* dv_audio_deemphasis */
448
dv_decode_audio_block(dv_audio_t *dv_audio, uint8_t *inbuf, int ds, int audio_dif, int16_t **outbufs)
560
/* ---------------------------------------------------------------------------
563
dv_decode_audio_block(dv_audio_t *dv_audio,
564
const uint8_t *inbuf,
450
569
int channel, bp, i_base, i, stride;
451
570
int16_t *samples, *ysamples, *zsamples;
453
572
int32_t msb_y, msb_z, lsb;
573
int half_ds, full_failure;
457
578
if ((inbuf[0] & 0xe0) != 0x60) goto bad_id;
479
602
if(dv_audio->quantization == 16) {
481
603
samples = outbufs[channel];
483
604
for (bp = 8; bp < 80; bp+=2) {
485
606
i = i_base + (bp - 8)/2 * stride;
486
samples[i] = ((int16_t)inbuf[bp] << 8) | inbuf[bp+1];
607
if ((samples[i] = ((int16_t)inbuf[bp] << 8) | inbuf[bp+1]) == (int16_t) 0x8000) {
612
/* -----------------------------------------------------------------------
613
* check if some or all samples in block failed
616
if (dv_audio -> error_log) {
617
if (dv_get_timestamp (dv_audio -> dv_decoder, err_msg1) &&
618
dv_get_recording_datetime (dv_audio -> dv_decoder, err_msg2)) {
619
fprintf (dv_audio -> error_log,
620
"%s %s %s %02x %02x %02x 16 %d/36\n",
621
(full_failure == 36) ? "abf": "asf",
623
inbuf [0], inbuf [1], inbuf [2],
626
fprintf (dv_audio -> error_log,
627
"# audio %s failure (16bit): "
628
"header = %02x %02x %02x\n",
629
(full_failure == 36) ? "block": "sample",
630
inbuf [0], inbuf [1], inbuf [2]);
633
if (full_failure == 36) {
634
dv_audio -> block_failure++;
637
dv_audio -> sample_failure += full_failure;
490
639
} else if(dv_audio->quantization == 12) {
501
650
msb_y = inbuf[bp];
502
651
msb_z = inbuf[bp+1];
505
654
y = ((msb_y << 4) & 0xff0) | ((lsb >> 4) & 0xf);
506
if(y > 2047) y -= 4096;
507
655
z = ((msb_z << 4) & 0xff0) | (lsb & 0xf);
508
if(z > 2047) z -= 4096;
510
ysamples[i] = dv_upsample(y);
511
zsamples[i] = dv_upsample(z);
657
if(y > 2048) y -= 4096;
658
if(z > 2048) z -= 4096;
659
/* ---------------------------------------------------------------------
660
* so check if a sample has an error value 0x800 and keep this code
661
* for later correction.
665
ysamples[i] = 0x8000;
667
ysamples[i] = dv_upsample(y);
671
zsamples[i] = 0x8000;
673
zsamples[i] = dv_upsample(z);
676
/* -----------------------------------------------------------------------
677
* check if some or all samples in block failed
680
if (dv_audio -> error_log) {
681
if (dv_get_timestamp (dv_audio -> dv_decoder, err_msg1) &&
682
dv_get_recording_datetime (dv_audio -> dv_decoder, err_msg2)) {
683
fprintf (dv_audio -> error_log,
684
"%s %s %s %02x %02x %02x 12 %d/48\n",
685
(full_failure == 48) ? "abf": "asf",
687
inbuf [0], inbuf [1], inbuf [2], full_failure);
689
fprintf (dv_audio -> error_log,
690
"# audio %s failure (12bit): "
691
"header = %02x %02x %02x\n",
692
(full_failure == 48) ? "block": "sample",
693
inbuf [0], inbuf [1], inbuf [2]);
696
if (full_failure == 48) {
697
dv_audio -> block_failure++;
700
dv_audio -> sample_failure += full_failure;
515
703
goto unsupported_sampling;
526
714
fprintf(stderr, "libdv(%s): not an audio block\n", __FUNCTION__);
530
718
} /* dv_decode_audio_block */
720
/* ---------------------------------------------------------------------------
723
dv_audio_correct_errors (dv_audio_t *dv_audio, int16_t **outbufs)
725
int num_ch, i, k, cnt;
726
int16_t *dptr, *sptr, last_valid, next_valid, diff;
728
switch (dv_audio -> correction_method) {
729
case DV_AUDIO_CORRECT_SILENCE:
730
for (num_ch = 0; num_ch < dv_audio -> raw_num_channels; ++num_ch) {
731
dptr = sptr = outbufs [num_ch];
732
for (i = k = 0; i < dv_audio -> raw_samples_this_frame [num_ch / 2]; ++i) {
733
if (*sptr == (int16_t) 0x8000) {
745
case DV_AUDIO_CORRECT_AVERAGE:
746
for (num_ch = 0; num_ch < dv_audio -> raw_num_channels; ++num_ch) {
747
dptr = sptr = outbufs [num_ch];
749
for (i = 0; i < dv_audio -> raw_samples_this_frame [num_ch / 2]; i++) {
750
if (*sptr != (int16_t) 0x8000) {
751
last_valid = *dptr++ = *sptr++;
755
(k < dv_audio -> raw_samples_this_frame [num_ch / 2]) &&
756
(*sptr == (int16_t) 0x8000);
757
k++, cnt++, sptr++) {
761
next_valid = (k == dv_audio -> raw_samples_this_frame [num_ch / 2]) ? 0 : *sptr;
762
diff = (next_valid - last_valid) / (cnt + 1);
765
" last_valid = 0x%04x diff =0x%04x next_valid = 0x%04x cnt = %d\n",
766
last_valid, diff, next_valid, cnt);
770
*dptr++ = last_valid;
775
case DV_AUDIO_CORRECT_NONE:
782
/* ---------------------------------------------------------------------------
785
dv_audio_mix4ch (dv_audio_t *dv_audio, int16_t **outbufs)
791
int16_t *dptr, *sptr;
793
if (!(dv_audio -> raw_num_channels == 4))
796
/* -------------------------------------------------------------------------
797
* take entire channel 0
799
if (dv_audio -> arg_mixing_level >= 16)
802
/* -------------------------------------------------------------------------
803
* take entire channel 1
805
if (dv_audio -> arg_mixing_level <= -16)
807
for (num_ch = 0; num_ch < 2; ++num_ch)
809
dptr = outbufs [num_ch];
810
sptr = outbufs [num_ch + 2];
811
for (i = k = 0; i < dv_audio -> raw_samples_this_frame [1]; ++i)
816
dv_audio -> raw_samples_this_frame [0] =
817
dv_audio -> samples_this_frame =
818
dv_audio -> raw_samples_this_frame [1];
822
/* -------------------------------------------------------------------------
823
* mix both channles according to mixing level
825
current_samples = (dv_audio -> raw_samples_this_frame [0] >
826
dv_audio -> raw_samples_this_frame [1]) ?
827
dv_audio -> raw_samples_this_frame [1]:
828
dv_audio -> raw_samples_this_frame [0];
830
ch0_div = ch1_div = 2;
832
if (dv_audio -> arg_mixing_level < 0)
834
ch0_div = 1 << (1 - dv_audio -> arg_mixing_level);
836
else if (dv_audio -> arg_mixing_level > 0)
838
ch1_div = 1 << (1 + dv_audio -> arg_mixing_level);
840
for (num_ch = 0; num_ch < 2; ++num_ch)
842
dptr = outbufs [num_ch];
843
sptr = outbufs [num_ch + 2];
844
for (i = k = 0; i < current_samples; ++i)
846
*dptr = (*dptr / ch0_div) + (*sptr++ / ch1_div);
850
dv_audio -> raw_samples_this_frame [0] = dv_audio -> samples_this_frame = current_samples;
853
/* ---------------------------------------------------------------------------
856
dv_set_audio_correction (dv_decoder_t *dv, int method)
860
old_method = dv -> audio -> correction_method;
861
dv -> audio -> correction_method = method;
863
} /* dv_set_audio_correction */
865
/* ---------------------------------------------------------------------------
868
dv_set_mixing_level (dv_decoder_t *dv, int new_value)
872
old_value = dv -> audio -> arg_mixing_level;
873
dv -> audio -> arg_mixing_level = new_value;
877
/* ---------------------------------------------------------------------------
880
dv_get_num_samples (dv_decoder_t *dv)
882
return dv -> audio -> samples_this_frame;
885
/* ---------------------------------------------------------------------------
888
dv_get_num_channels (dv_decoder_t *dv)
890
return dv -> audio -> num_channels;
893
/* ---------------------------------------------------------------------------
896
dv_is_4ch (dv_decoder_t *dv)
898
return dv -> audio -> raw_num_channels == 4;
901
/* ---------------------------------------------------------------------------
904
dv_get_raw_samples (dv_decoder_t *dv, int chan)
906
return dv -> audio -> raw_samples_this_frame [chan];
909
/* ---------------------------------------------------------------------------
912
dv_get_frequency (dv_decoder_t *dv)
914
return dv -> audio -> frequency;
917
/* ---------------------------------------------------------------------------
920
dv_is_new_recording (dv_decoder_t *dv, const uint8_t *buffer)
922
int temp_time_stamp [4],
923
zero_time_stamp [4] = {0, 0, 0, 0},
926
/* -------------------------------------------------------------------------
927
* we need valid and parsed audio headers for this
929
if (dv_parse_audio_header (dv, buffer))
931
/* -----------------------------------------------------------------------
932
* only for 32kHz 12bit we need some extra checks
934
if (dv -> audio -> frequency == 32000 && dv -> audio -> quantization == 12)
936
/* ---------------------------------------------------------------------
937
* 1. new recording by rec start in first channel
939
if (!dv -> audio -> aaux_asc. pc2. rec_st)
942
/* ---------------------------------------------------------------------
943
* reset frame change logic for rec end (frame changed twice)
945
dv_get_timestamp_int (dv, temp_time_stamp);
946
if (!dv -> audio -> new_recording_on_next_frame &&
947
memcmp (dv -> audio -> new_recording_current_time_stamp,
951
memcpy (dv -> audio -> new_recording_current_time_stamp,
956
/* ---------------------------------------------------------------------
957
* frame change flag is set and frame changed. so trigger new_recording.
959
if (dv -> audio -> new_recording_on_next_frame &&
960
memcmp (dv -> audio -> new_recording_current_time_stamp,
964
dv -> audio -> new_recording_on_next_frame = 0;
967
/* ---------------------------------------------------------------------
968
* 2. new recording by rec end some time ago and frame changed
970
if (memcmp (dv -> audio -> new_recording_current_time_stamp,
973
!dv -> audio -> new_recording_on_next_frame)
978
/* ---------------------------------------------------------------------
979
* now set markers for next frame
981
if (dv -> audio -> raw_num_channels == 4 &&
982
!dv -> audio -> aaux_asc1. pc2. rec_end)
984
memcpy (dv -> audio -> new_recording_current_time_stamp,
987
dv -> audio -> new_recording_on_next_frame = 1;
990
else if (!dv -> audio -> aaux_asc. pc2. rec_st)
992
return new_recording = 1;
996
return new_recording;
1001
/* ---------------------------------------------------------------------------
1002
* dv_audio_do_fade returns:
1003
* 0 for not fading action is required
1004
* <> 0 if fading action is required
1006
* *ch0, *ch1 are set to:
1007
* 0 if no fading action is required for this channel
1008
* bit0 == 1 -> fade in should be done
1009
* bit1 == 1 -> fade out should be done
1011
* And what about a single frame with rec start and end and fade start/end set too ??
1014
dv_audio_do_fade (dv_decoder_t *dv, int *ch0, int *ch1)
1021
int dv_is_normal_speed (dv_decoder_t *dv)
1023
int normal_speed = TRUE;
1025
if (dv->std == e_dv_std_iec_61834) {
1026
normal_speed = (dv->audio->aaux_asc.pc3.speed == 0x20);
1027
} else if (dv->std == e_dv_std_smpte_314m) {
1028
if(dv->audio->aaux_as.pc3.system) {
1030
normal_speed = (dv->audio->aaux_asc.pc3.speed == 0x64);
1033
normal_speed = (dv->audio->aaux_asc.pc3.speed == 0x78);
1036
return normal_speed;