summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2013-05-30 19:58:18 +0200
committerwm4 <wm4@nowhere>2013-05-30 19:59:03 +0200
commitf7ad81c0f5905637c16480b2e44dd41f2839293a (patch)
tree3a9b0ed63d54e99445889a696db02a55152c1b4e /demux
parentc0db930de43d3910783e4c10f6c71c4350909636 (diff)
downloadmpv-f7ad81c0f5905637c16480b2e44dd41f2839293a.tar.bz2
mpv-f7ad81c0f5905637c16480b2e44dd41f2839293a.tar.xz
demux_mkv: replace awkward goto by function call
Requires reindenting a large code block to minimize random control flow.
Diffstat (limited to 'demux')
-rw-r--r--demux/demux_mkv.c82
1 files changed, 43 insertions, 39 deletions
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index f2f558fb69..828479e50f 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -1341,6 +1341,14 @@ static struct mkv_audio_tag {
{ NULL },
};
+static void copy_audio_private_data(sh_audio_t *sh, mkv_track_t *track)
+{
+ if (!track->ms_compat && track->private_size) {
+ sh->codecdata = malloc(track->private_size);
+ sh->codecdata_len = track->private_size;
+ memcpy(sh->codecdata, track->private_data, track->private_size);
+ }
+}
static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
{
@@ -1424,46 +1432,47 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
sh_a->wf->nBlockAlign = 1486;
track->fix_i_bps = 1;
track->qt_last_a_pts = 0.0;
- goto copy_private_data;
+ copy_audio_private_data(sh_a, track);
} else if (track->a_formattag == mmioFOURCC('M', 'P', '4', 'A')) {
int profile, srate_idx;
sh_a->wf->nAvgBytesPerSec = 16000;
sh_a->wf->nBlockAlign = 1024;
- if (!strcmp(track->codec_id, MKV_A_AAC) && track->private_data)
- goto copy_private_data;
-
- /* Recreate the 'private data' */
- /* which faad2 uses in its initialization */
- srate_idx = aac_get_sample_rate_index(sh_a->samplerate);
- if (!strncmp(&track->codec_id[12], "MAIN", 4))
- profile = 0;
- else if (!strncmp(&track->codec_id[12], "LC", 2))
- profile = 1;
- else if (!strncmp(&track->codec_id[12], "SSR", 3))
- profile = 2;
- else
- profile = 3;
- sh_a->codecdata = malloc(5);
- sh_a->codecdata[0] = ((profile + 1) << 3) | ((srate_idx & 0xE) >> 1);
- sh_a->codecdata[1] =
- ((srate_idx & 0x1) << 7) | (track->a_channels << 3);
-
- if (strstr(track->codec_id, "SBR") != NULL) {
- /* HE-AAC (aka SBR AAC) */
- sh_a->codecdata_len = 5;
-
- sh_a->samplerate *= 2;
- sh_a->wf->nSamplesPerSec *= 2;
- srate_idx = aac_get_sample_rate_index(sh_a->samplerate);
- sh_a->codecdata[2] = AAC_SYNC_EXTENSION_TYPE >> 3;
- sh_a->codecdata[3] = ((AAC_SYNC_EXTENSION_TYPE & 0x07) << 5) | 5;
- sh_a->codecdata[4] = (1 << 7) | (srate_idx << 3);
- track->default_duration = 1024.0 / (sh_a->samplerate / 2);
+ if (!strcmp(track->codec_id, MKV_A_AAC) && track->private_data) {
+ copy_audio_private_data(sh_a, track);
} else {
- sh_a->codecdata_len = 2;
- track->default_duration = 1024.0 / sh_a->samplerate;
+ /* Recreate the 'private data' */
+ /* which faad2 uses in its initialization */
+ srate_idx = aac_get_sample_rate_index(sh_a->samplerate);
+ if (!strncmp(&track->codec_id[12], "MAIN", 4))
+ profile = 0;
+ else if (!strncmp(&track->codec_id[12], "LC", 2))
+ profile = 1;
+ else if (!strncmp(&track->codec_id[12], "SSR", 3))
+ profile = 2;
+ else
+ profile = 3;
+ sh_a->codecdata = malloc(5);
+ sh_a->codecdata[0] = ((profile + 1) << 3) | ((srate_idx & 0xE) >> 1);
+ sh_a->codecdata[1] =
+ ((srate_idx & 0x1) << 7) | (track->a_channels << 3);
+
+ if (strstr(track->codec_id, "SBR") != NULL) {
+ /* HE-AAC (aka SBR AAC) */
+ sh_a->codecdata_len = 5;
+
+ sh_a->samplerate *= 2;
+ sh_a->wf->nSamplesPerSec *= 2;
+ srate_idx = aac_get_sample_rate_index(sh_a->samplerate);
+ sh_a->codecdata[2] = AAC_SYNC_EXTENSION_TYPE >> 3;
+ sh_a->codecdata[3] = ((AAC_SYNC_EXTENSION_TYPE & 0x07) << 5) | 5;
+ sh_a->codecdata[4] = (1 << 7) | (srate_idx << 3);
+ track->default_duration = 1024.0 / (sh_a->samplerate / 2);
+ } else {
+ sh_a->codecdata_len = 2;
+ track->default_duration = 1024.0 / sh_a->samplerate;
+ }
}
} else if (track->a_formattag == mmioFOURCC('v', 'r', 'b', 's')) {
/* VORBIS */
@@ -1572,12 +1581,7 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
}
} else if (track->a_formattag == mmioFOURCC('W', 'V', 'P', 'K') ||
track->a_formattag == mmioFOURCC('T', 'R', 'H', 'D')) {
- copy_private_data:
- if (!track->ms_compat && track->private_size) {
- sh_a->codecdata = malloc(track->private_size);
- sh_a->codecdata_len = track->private_size;
- memcpy(sh_a->codecdata, track->private_data, track->private_size);
- }
+ copy_audio_private_data(sh_a, track);
} else if (track->a_formattag == mmioFOURCC('T', 'T', 'A', '1')) {
sh_a->codecdata_len = 30;
sh_a->codecdata = calloc(1, sh_a->codecdata_len);