mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
avmux: port to AVCodecParameters
https://bugzilla.gnome.org/show_bug.cgi?id=792900
This commit is contained in:
parent
4f28ea23eb
commit
4116117873
1 changed files with 15 additions and 14 deletions
|
@ -446,10 +446,10 @@ gst_ffmpegmux_request_new_pad (GstElement * element,
|
|||
/* AVStream needs to be created */
|
||||
st = avformat_new_stream (ffmpegmux->context, NULL);
|
||||
st->id = collect_pad->padnum;
|
||||
st->codec->codec_type = type;
|
||||
st->codec->codec_id = AV_CODEC_ID_NONE; /* this is a check afterwards */
|
||||
st->codec->bit_rate = bitrate;
|
||||
st->codec->frame_size = framesize;
|
||||
st->codecpar->codec_type = type;
|
||||
st->codecpar->codec_id = AV_CODEC_ID_NONE; /* this is a check afterwards */
|
||||
st->codecpar->bit_rate = bitrate;
|
||||
st->codecpar->frame_size = framesize;
|
||||
/* we fill in codec during capsnego */
|
||||
|
||||
/* we love debug output (c) (tm) (r) */
|
||||
|
@ -475,6 +475,7 @@ gst_ffmpegmux_setcaps (GstPad * pad, GstCaps * caps)
|
|||
GstFFMpegMux *ffmpegmux = (GstFFMpegMux *) (gst_pad_get_parent (pad));
|
||||
GstFFMpegMuxPad *collect_pad;
|
||||
AVStream *st;
|
||||
AVCodecContext tmp;
|
||||
|
||||
collect_pad = (GstFFMpegMuxPad *) gst_pad_get_element_private (pad);
|
||||
|
||||
|
@ -484,12 +485,14 @@ gst_ffmpegmux_setcaps (GstPad * pad, GstCaps * caps)
|
|||
|
||||
/* for the format-specific guesses, we'll go to
|
||||
* our famous codec mapper */
|
||||
if (gst_ffmpeg_caps_to_codecid (caps, st->codec) == AV_CODEC_ID_NONE)
|
||||
if (gst_ffmpeg_caps_to_codecid (caps, &tmp) == AV_CODEC_ID_NONE)
|
||||
goto not_accepted;
|
||||
|
||||
avcodec_parameters_from_context (st->codecpar, &tmp);
|
||||
|
||||
/* copy over the aspect ratios, ffmpeg expects the stream aspect to match the
|
||||
* codec aspect. */
|
||||
st->sample_aspect_ratio = st->codec->sample_aspect_ratio;
|
||||
st->sample_aspect_ratio = st->codecpar->sample_aspect_ratio;
|
||||
|
||||
GST_LOG_OBJECT (pad, "accepted caps %" GST_PTR_FORMAT, caps);
|
||||
return TRUE;
|
||||
|
@ -563,7 +566,7 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
|||
AVStream *st = ffmpegmux->context->streams[collect_pad->padnum];
|
||||
|
||||
/* check whether the pad has successfully completed capsnego */
|
||||
if (st->codec->codec_id == AV_CODEC_ID_NONE) {
|
||||
if (st->codecpar->codec_id == AV_CODEC_ID_NONE) {
|
||||
GST_ELEMENT_ERROR (ffmpegmux, CORE, NEGOTIATION, (NULL),
|
||||
("no caps set on stream %d (%s)", collect_pad->padnum,
|
||||
(st->codec->codec_type == AVMEDIA_TYPE_VIDEO) ?
|
||||
|
@ -571,15 +574,15 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
|||
return GST_FLOW_ERROR;
|
||||
}
|
||||
/* set framerate for audio */
|
||||
if (st->codec->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
switch (st->codec->codec_id) {
|
||||
if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
|
||||
switch (st->codecpar->codec_id) {
|
||||
case AV_CODEC_ID_PCM_S16LE:
|
||||
case AV_CODEC_ID_PCM_S16BE:
|
||||
case AV_CODEC_ID_PCM_U16LE:
|
||||
case AV_CODEC_ID_PCM_U16BE:
|
||||
case AV_CODEC_ID_PCM_S8:
|
||||
case AV_CODEC_ID_PCM_U8:
|
||||
st->codec->frame_size = 1;
|
||||
st->codecpar->frame_size = 1;
|
||||
break;
|
||||
default:
|
||||
{
|
||||
|
@ -590,8 +593,8 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
|||
buffer = gst_collect_pads_peek (ffmpegmux->collect,
|
||||
(GstCollectData *) collect_pad);
|
||||
if (buffer) {
|
||||
st->codec->frame_size =
|
||||
st->codec->sample_rate *
|
||||
st->codecpar->frame_size =
|
||||
st->codecpar->sample_rate *
|
||||
GST_BUFFER_DURATION (buffer) / GST_SECOND;
|
||||
gst_buffer_unref (buffer);
|
||||
}
|
||||
|
@ -732,8 +735,6 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
|||
buf =
|
||||
gst_collect_pads_pop (ffmpegmux->collect, (GstCollectData *) best_pad);
|
||||
|
||||
ffmpegmux->context->streams[best_pad->padnum]->codec->frame_number++;
|
||||
|
||||
/* set time */
|
||||
pkt.pts = gst_ffmpeg_time_gst_to_ff (GST_BUFFER_TIMESTAMP (buf),
|
||||
ffmpegmux->context->streams[best_pad->padnum]->time_base);
|
||||
|
|
Loading…
Reference in a new issue