summaryrefslogtreecommitdiffstats
path: root/demux
diff options
context:
space:
mode:
Diffstat (limited to 'demux')
-rw-r--r--demux/codec_tags.c25
-rw-r--r--demux/codec_tags.h6
-rw-r--r--demux/demux.c3
-rw-r--r--demux/demux_lavf.c4
-rw-r--r--demux/demux_mf.c2
-rw-r--r--demux/demux_mkv.c56
-rw-r--r--demux/demux_raw.c8
-rw-r--r--demux/stheader.h10
8 files changed, 54 insertions, 60 deletions
diff --git a/demux/codec_tags.c b/demux/codec_tags.c
index dbf384fdbd..e63f1e7134 100644
--- a/demux/codec_tags.c
+++ b/demux/codec_tags.c
@@ -357,18 +357,21 @@ static const char *lookup_tag(const struct mp_codec_tag *mp_table,
return id == AV_CODEC_ID_NONE ? NULL : mp_codec_from_av_codec_id(id);
}
-void mp_set_video_codec_from_tag(struct sh_video *sh)
+void mp_set_codec_from_tag(struct sh_stream *sh)
{
- sh->gsh->codec = lookup_tag(mp_video_codec_tags,
- avformat_get_riff_video_tags(),
- sh->format);
-}
-
-void mp_set_audio_codec_from_tag(struct sh_audio *sh)
-{
- sh->gsh->codec = lookup_tag(mp_audio_codec_tags,
- avformat_get_riff_audio_tags(),
- sh->format);
+ switch (sh->type) {
+ case STREAM_VIDEO:
+ sh->codec = lookup_tag(mp_video_codec_tags,
+ avformat_get_riff_video_tags(),
+ sh->format);
+ break;
+ case STREAM_AUDIO:
+ sh->codec = lookup_tag(mp_audio_codec_tags,
+ avformat_get_riff_audio_tags(),
+ sh->format);
+ break;
+ default: ;
+ }
}
uint32_t mp_video_fourcc_alias(uint32_t fourcc)
diff --git a/demux/codec_tags.h b/demux/codec_tags.h
index 790dd03ae9..d8c63800b1 100644
--- a/demux/codec_tags.h
+++ b/demux/codec_tags.h
@@ -22,10 +22,8 @@
uint32_t mp_video_fourcc_alias(uint32_t fourcc);
-struct sh_video;
-struct sh_audio;
+struct sh_stream;
-void mp_set_audio_codec_from_tag(struct sh_audio *sh);
-void mp_set_video_codec_from_tag(struct sh_video *sh);
+void mp_set_codec_from_tag(struct sh_stream *sh);
#endif
diff --git a/demux/demux.c b/demux/demux.c
index 592ad1608a..00d59af09d 100644
--- a/demux/demux.c
+++ b/demux/demux.c
@@ -247,19 +247,16 @@ struct sh_stream *new_sh_stream(demuxer_t *demuxer, enum stream_type type)
switch (sh->type) {
case STREAM_VIDEO: {
struct sh_video *sht = talloc_zero(demuxer, struct sh_video);
- sht->gsh = sh;
sh->video = sht;
break;
}
case STREAM_AUDIO: {
struct sh_audio *sht = talloc_zero(demuxer, struct sh_audio);
- sht->gsh = sh;
sh->audio = sht;
break;
}
case STREAM_SUB: {
struct sh_sub *sht = talloc_zero(demuxer, struct sh_sub);
- sht->gsh = sh;
sh->sub = sht;
break;
}
diff --git a/demux/demux_lavf.c b/demux/demux_lavf.c
index 33c8d1b667..fe0b3efdd2 100644
--- a/demux/demux_lavf.c
+++ b/demux/demux_lavf.c
@@ -394,7 +394,7 @@ static void handle_stream(demuxer_t *demuxer, int i)
break;
sh_audio_t *sh_audio = sh->audio;
- sh_audio->format = codec->codec_tag;
+ sh->format = codec->codec_tag;
// probably unneeded
mp_chmap_from_channels(&sh_audio->channels, codec->channels);
@@ -419,7 +419,7 @@ static void handle_stream(demuxer_t *demuxer, int i)
sh->attached_picture->keyframe = true;
}
- sh_video->format = codec->codec_tag;
+ sh->format = codec->codec_tag;
sh_video->disp_w = codec->width;
sh_video->disp_h = codec->height;
/* Try to make up some frame rate value, even if it's not reliable.
diff --git a/demux/demux_mf.c b/demux/demux_mf.c
index 6042771241..fbcf3da961 100644
--- a/demux/demux_mf.c
+++ b/demux/demux_mf.c
@@ -196,7 +196,7 @@ static int demux_open_mf(demuxer_t *demuxer, enum demux_check check)
struct sh_stream *sh = new_sh_stream(demuxer, STREAM_VIDEO);
sh_video = sh->video;
- sh_video->gsh->codec = codec;
+ sh->codec = codec;
sh_video->disp_w = 0;
sh_video->disp_h = 0;
sh_video->fps = mf_fps;
diff --git a/demux/demux_mkv.c b/demux/demux_mkv.c
index 5258bee5d5..2199a9c932 100644
--- a/demux/demux_mkv.c
+++ b/demux/demux_mkv.c
@@ -1301,8 +1301,8 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track)
return 1;
track->stream = sh;
sh_v = sh->video;
- sh_v->gsh->demuxer_id = track->tnum;
- sh_v->gsh->title = talloc_strdup(sh_v, track->name);
+ sh->demuxer_id = track->tnum;
+ sh->title = talloc_strdup(sh_v, track->name);
sh_v->bih = talloc_size(sh_v, sizeof(MP_BITMAPINFOHEADER) + extradata_size);
if (!sh_v->bih) {
mp_msg(MSGT_DEMUX, MSGL_FATAL, "Memory allocation failure!\n");
@@ -1311,12 +1311,12 @@ static int demux_mkv_open_video(demuxer_t *demuxer, mkv_track_t *track)
*sh_v->bih = *bih;
if (extradata_size)
memcpy(sh_v->bih + 1, extradata, extradata_size);
- sh_v->format = sh_v->bih->biCompression;
+ sh->format = sh_v->bih->biCompression;
if (raw) {
- sh_v->gsh->codec = "rawvideo";
+ sh->codec = "rawvideo";
} else {
- mp_set_video_codec_from_tag(sh_v);
- sh_v->format = mp_video_fourcc_alias(sh_v->format);
+ mp_set_codec_from_tag(sh);
+ sh->format = mp_video_fourcc_alias(sh->format);
}
if (track->v_frate == 0.0)
track->v_frate = 25.0;
@@ -1398,10 +1398,10 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
sh_audio_t *sh_a = sh->audio;
if (track->language && (strcmp(track->language, "und") != 0))
- sh_a->gsh->lang = talloc_strdup(sh_a, track->language);
- sh_a->gsh->demuxer_id = track->tnum;
- sh_a->gsh->title = talloc_strdup(sh_a, track->name);
- sh_a->gsh->default_track = track->default_track;
+ sh->lang = talloc_strdup(sh_a, track->language);
+ sh->demuxer_id = track->tnum;
+ sh->title = talloc_strdup(sh_a, track->name);
+ sh->default_track = track->default_track;
if (!track->a_osfreq)
track->a_osfreq = track->a_sfreq;
if (track->ms_compat) {
@@ -1444,7 +1444,7 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
}
}
- sh_a->format = track->a_formattag;
+ sh->format = track->a_formattag;
sh_a->wf->wFormatTag = track->a_formattag;
mp_chmap_from_channels(&sh_a->channels, track->a_channels);
sh_a->wf->nChannels = track->a_channels;
@@ -1464,7 +1464,7 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
sh_a->wf = NULL;
} else if (track->a_formattag == 0x0001) { /* PCM || PCM_BE */
if (!strcmp(track->codec_id, MKV_A_PCM_BE))
- sh_a->format = MP_FOURCC('t', 'w', 'o', 's');
+ sh->format = MP_FOURCC('t', 'w', 'o', 's');
} else if (track->a_formattag == 0x0003) { /* PCM_FLT */
/* ok */
} else if (!strcmp(track->codec_id, MKV_A_QDMC)
@@ -1525,7 +1525,7 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
}
} else if (!strcmp(track->codec_id, MKV_A_OPUS)
|| !strcmp(track->codec_id, MKV_A_OPUS_EXP)) {
- sh_a->format = MP_FOURCC('O', 'p', 'u', 's');
+ sh->format = MP_FOURCC('O', 'p', 'u', 's');
copy_audio_private_data(sh_a, track);
} else if (!strncmp(track->codec_id, MKV_A_REALATRC, 7)) {
if (track->private_size < RAPROPERTIES4_SIZE)
@@ -1597,7 +1597,7 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
ptr = track->private_data;
size = track->private_size;
} else {
- sh_a->format = MP_FOURCC('f', 'L', 'a', 'C');
+ sh->format = MP_FOURCC('f', 'L', 'a', 'C');
ptr = track->private_data + sizeof(*sh_a->wf);
size = track->private_size - sizeof(*sh_a->wf);
}
@@ -1647,7 +1647,7 @@ static int demux_mkv_open_audio(demuxer_t *demuxer, mkv_track_t *track)
if (sh_a->samplerate == 8000 && strcmp(track->codec_id, MKV_A_AC3) == 0)
track->default_duration = 0;
- mp_set_audio_codec_from_tag(sh_a);
+ mp_set_codec_from_tag(sh);
return 0;
@@ -1683,14 +1683,14 @@ static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track)
}
bstr in = (bstr){track->private_data, track->private_size};
- struct sh_stream *gsh = new_sh_stream(demuxer, STREAM_SUB);
- if (!gsh)
+ struct sh_stream *sh = new_sh_stream(demuxer, STREAM_SUB);
+ if (!sh)
return 1;
- track->stream = gsh;
- sh_sub_t *sh = gsh->sub;
- sh->gsh->demuxer_id = track->tnum;
- track->sh_sub = sh;
- sh->gsh->codec = subtitle_type;
+ track->stream = sh;
+ sh_sub_t *sh_s = sh->sub;
+ sh->demuxer_id = track->tnum;
+ track->sh_sub = sh_s;
+ sh->codec = subtitle_type;
bstr buffer = demux_mkv_decode(track, in, 2);
if (buffer.start && buffer.start != track->private_data) {
talloc_free(track->private_data);
@@ -1698,13 +1698,13 @@ static int demux_mkv_open_sub(demuxer_t *demuxer, mkv_track_t *track)
track->private_data = buffer.start;
track->private_size = buffer.len;
}
- sh->extradata = talloc_size(sh, track->private_size);
- memcpy(sh->extradata, track->private_data, track->private_size);
- sh->extradata_len = track->private_size;
+ sh_s->extradata = talloc_size(sh, track->private_size);
+ memcpy(sh_s->extradata, track->private_data, track->private_size);
+ sh_s->extradata_len = track->private_size;
if (track->language && (strcmp(track->language, "und") != 0))
- sh->gsh->lang = talloc_strdup(sh, track->language);
- sh->gsh->title = talloc_strdup(sh, track->name);
- sh->gsh->default_track = track->default_track;
+ sh->lang = talloc_strdup(sh, track->language);
+ sh->title = talloc_strdup(sh, track->name);
+ sh->default_track = track->default_track;
if (!subtitle_type) {
mp_tmsg(MSGT_DEMUX, MSGL_ERR,
diff --git a/demux/demux_raw.c b/demux/demux_raw.c
index 7fed124ae3..5ab82893e3 100644
--- a/demux/demux_raw.c
+++ b/demux/demux_raw.c
@@ -87,8 +87,8 @@ static int demux_rawaudio_open(demuxer_t *demuxer, enum demux_check check)
sh = new_sh_stream(demuxer, STREAM_AUDIO);
sh_audio = sh->audio;
- sh_audio->gsh->codec = "mp-pcm";
- sh_audio->format = aformat;
+ sh->codec = "mp-pcm";
+ sh->format = aformat;
sh_audio->wf = w = talloc_zero(sh, MP_WAVEFORMATEX);
w->wFormatTag = 0;
sh_audio->channels = channels;
@@ -175,8 +175,8 @@ static int demux_rawvideo_open(demuxer_t *demuxer, enum demux_check check)
sh = new_sh_stream(demuxer, STREAM_VIDEO);
sh_video = sh->video;
- sh_video->gsh->codec = decoder;
- sh_video->format = imgfmt;
+ sh->codec = decoder;
+ sh->format = imgfmt;
sh_video->fps = fps;
sh_video->disp_w = width;
sh_video->disp_h = height;
diff --git a/demux/stheader.h b/demux/stheader.h
index 1c151cda3d..17090fc8e9 100644
--- a/demux/stheader.h
+++ b/demux/stheader.h
@@ -52,6 +52,9 @@ struct sh_stream {
// E.g. "h264" (usually corresponds to AVCodecDescriptor.name)
const char *codec;
+ // Usually a FourCC, exact meaning depends on codec.
+ unsigned int format;
+
// Codec specific header data (set by demux_lavf.c)
// Other demuxers use sh_audio->wf and sh_video->bih instead.
struct AVCodecContext *lav_headers;
@@ -68,9 +71,6 @@ struct sh_stream {
};
typedef struct sh_audio {
- struct sh_stream *gsh;
- /* usually a FourCC, exact meaning depends on gsh->codec */
- unsigned int format;
int samplerate;
struct mp_chmap channels;
int i_bps; // == bitrate (compressed bytes/sec)
@@ -82,9 +82,6 @@ typedef struct sh_audio {
} sh_audio_t;
typedef struct sh_video {
- struct sh_stream *gsh;
- /* usually a FourCC, exact meaning depends on gsh->codec */
- unsigned int format;
float fps; // frames per second (set only if constant fps)
float aspect; // aspect ratio stored in the file (for prescaling)
int i_bps; // == bitrate (compressed bytes/sec)
@@ -93,7 +90,6 @@ typedef struct sh_video {
} sh_video_t;
typedef struct sh_sub {
- struct sh_stream *gsh;
unsigned char *extradata; // extra header data passed from demuxer
int extradata_len;
int frame_based; // timestamps are frame-based