mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-26 19:51:11 +00:00
av: Port remaining simple bits
This commit is contained in:
parent
0f206124b6
commit
f5c112990f
8 changed files with 24 additions and 45 deletions
|
@ -132,7 +132,7 @@ static void
|
||||||
gst_ffmpegauddec_init (GstFFMpegAudDec * ffmpegdec)
|
gst_ffmpegauddec_init (GstFFMpegAudDec * ffmpegdec)
|
||||||
{
|
{
|
||||||
/* some ffmpeg data */
|
/* some ffmpeg data */
|
||||||
ffmpegdec->context = avcodec_alloc_context ();
|
ffmpegdec->context = avcodec_alloc_context3 (NULL);
|
||||||
ffmpegdec->opened = FALSE;
|
ffmpegdec->opened = FALSE;
|
||||||
|
|
||||||
gst_audio_decoder_set_drainable (GST_AUDIO_DECODER (ffmpegdec), TRUE);
|
gst_audio_decoder_set_drainable (GST_AUDIO_DECODER (ffmpegdec), TRUE);
|
||||||
|
@ -317,7 +317,7 @@ gst_ffmpegauddec_set_format (GstAudioDecoder * decoder, GstCaps * caps)
|
||||||
|
|
||||||
/* workaround encoder bugs */
|
/* workaround encoder bugs */
|
||||||
ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
|
ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
|
||||||
ffmpegdec->context->error_recognition = 1;
|
ffmpegdec->context->err_recognition = 1;
|
||||||
|
|
||||||
ffmpegdec->context->opaque = ffmpegdec;
|
ffmpegdec->context->opaque = ffmpegdec;
|
||||||
ffmpegdec->context->get_buffer = gst_ffmpegauddec_get_buffer;
|
ffmpegdec->context->get_buffer = gst_ffmpegauddec_get_buffer;
|
||||||
|
|
|
@ -391,7 +391,7 @@ gst_ffmpegaudenc_encode_audio (GstFFMpegAudEnc * ffmpegaudenc,
|
||||||
|
|
||||||
if (*have_data) {
|
if (*have_data) {
|
||||||
GstBuffer *outbuf;
|
GstBuffer *outbuf;
|
||||||
AVCodec *codec;
|
const AVCodec *codec;
|
||||||
|
|
||||||
GST_LOG_OBJECT (ffmpegaudenc, "pushing size %d", pkt.size);
|
GST_LOG_OBJECT (ffmpegaudenc, "pushing size %d", pkt.size);
|
||||||
|
|
||||||
|
@ -589,7 +589,7 @@ gst_ffmpegaudenc_register (GstPlugin * plugin)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* only encoders */
|
/* only encoders */
|
||||||
if (!in_plugin->encode) {
|
if (!in_plugin->encode2) {
|
||||||
goto next;
|
goto next;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,6 @@ gst_ffmpeg_dct_algo_get_type (void)
|
||||||
{FF_DCT_FASTINT, "Fast Integer", "fastint"},
|
{FF_DCT_FASTINT, "Fast Integer", "fastint"},
|
||||||
{FF_DCT_INT, "Accurate Integer", "int"},
|
{FF_DCT_INT, "Accurate Integer", "int"},
|
||||||
{FF_DCT_MMX, "MMX", "mmx"},
|
{FF_DCT_MMX, "MMX", "mmx"},
|
||||||
{FF_DCT_MLIB, "MLIB", "mlib"},
|
|
||||||
{FF_DCT_ALTIVEC, "ALTIVEC", "altivec"},
|
{FF_DCT_ALTIVEC, "ALTIVEC", "altivec"},
|
||||||
{FF_DCT_FAAN, "FAAN", "faan"},
|
{FF_DCT_FAAN, "FAAN", "faan"},
|
||||||
{0, NULL, NULL},
|
{0, NULL, NULL},
|
||||||
|
@ -173,8 +172,6 @@ gst_ffmpeg_idct_algo_get_type (void)
|
||||||
{FF_IDCT_SIMPLE, "Simple", "simple"},
|
{FF_IDCT_SIMPLE, "Simple", "simple"},
|
||||||
{FF_IDCT_SIMPLEMMX, "Simple MMX", "simplemmx"},
|
{FF_IDCT_SIMPLEMMX, "Simple MMX", "simplemmx"},
|
||||||
{FF_IDCT_LIBMPEG2MMX, "LIBMPEG2MMX", "libmpeg2mmx"},
|
{FF_IDCT_LIBMPEG2MMX, "LIBMPEG2MMX", "libmpeg2mmx"},
|
||||||
{FF_IDCT_PS2, "PS2", "ps2"},
|
|
||||||
{FF_IDCT_MLIB, "MLIB", "mlib"},
|
|
||||||
{FF_IDCT_ARM, "ARM", "arm"},
|
{FF_IDCT_ARM, "ARM", "arm"},
|
||||||
{FF_IDCT_ALTIVEC, "ALTIVEC", "altivec"},
|
{FF_IDCT_ALTIVEC, "ALTIVEC", "altivec"},
|
||||||
{FF_IDCT_SH4, "SH4", "sh4"},
|
{FF_IDCT_SH4, "SH4", "sh4"},
|
||||||
|
@ -263,16 +260,11 @@ gst_ffmpeg_flags_get_type (void)
|
||||||
|
|
||||||
if (!ffmpeg_flags_type) {
|
if (!ffmpeg_flags_type) {
|
||||||
static const GFlagsValue ffmpeg_flags[] = {
|
static const GFlagsValue ffmpeg_flags[] = {
|
||||||
{CODEC_FLAG_OBMC, "Use overlapped block motion compensation (h263+)",
|
|
||||||
"obmc"},
|
|
||||||
{CODEC_FLAG_QSCALE, "Use fixed qscale", "qscale"},
|
{CODEC_FLAG_QSCALE, "Use fixed qscale", "qscale"},
|
||||||
{CODEC_FLAG_4MV, "Allow 4 MV per MB", "4mv"},
|
{CODEC_FLAG_4MV, "Allow 4 MV per MB", "4mv"},
|
||||||
{CODEC_FLAG_H263P_AIV, "H.263 alternative inter VLC", "aiv"},
|
|
||||||
{CODEC_FLAG_QPEL, "Quartel Pel Motion Compensation", "qpel"},
|
{CODEC_FLAG_QPEL, "Quartel Pel Motion Compensation", "qpel"},
|
||||||
{CODEC_FLAG_GMC, "GMC", "gmc"},
|
{CODEC_FLAG_GMC, "GMC", "gmc"},
|
||||||
{CODEC_FLAG_MV0, "Always try a MB with MV (0,0)", "mv0"},
|
{CODEC_FLAG_MV0, "Always try a MB with MV (0,0)", "mv0"},
|
||||||
{CODEC_FLAG_PART,
|
|
||||||
"Store MV, DC and AC coefficients in seperate partitions", "part"},
|
|
||||||
{CODEC_FLAG_LOOP_FILTER, "Loop filter", "loop-filter"},
|
{CODEC_FLAG_LOOP_FILTER, "Loop filter", "loop-filter"},
|
||||||
{CODEC_FLAG_GRAY, "Only decode/encode grayscale", "gray"},
|
{CODEC_FLAG_GRAY, "Only decode/encode grayscale", "gray"},
|
||||||
{CODEC_FLAG_NORMALIZE_AQP,
|
{CODEC_FLAG_NORMALIZE_AQP,
|
||||||
|
@ -282,13 +274,9 @@ gst_ffmpeg_flags_get_type (void)
|
||||||
"global-headers"},
|
"global-headers"},
|
||||||
{CODEC_FLAG_AC_PRED, "H263 Advanced Intra Coding / MPEG4 AC prediction",
|
{CODEC_FLAG_AC_PRED, "H263 Advanced Intra Coding / MPEG4 AC prediction",
|
||||||
"aic"},
|
"aic"},
|
||||||
{CODEC_FLAG_H263P_UMV, "Unlimited Motion Vector", "umv"},
|
|
||||||
{CODEC_FLAG_CBP_RD, "Rate Distoration Optimization for CBP", "cbp-rd"},
|
{CODEC_FLAG_CBP_RD, "Rate Distoration Optimization for CBP", "cbp-rd"},
|
||||||
{CODEC_FLAG_QP_RD, "Rate Distoration Optimization for QP selection",
|
{CODEC_FLAG_QP_RD, "Rate Distoration Optimization for QP selection",
|
||||||
"qp-rd"},
|
"qp-rd"},
|
||||||
{CODEC_FLAG_H263P_SLICE_STRUCT, "H263 slice struct", "ss"},
|
|
||||||
{CODEC_FLAG_SVCD_SCAN_OFFSET,
|
|
||||||
"Reserve space for SVCD scan offset user data", "scanoffset"},
|
|
||||||
{CODEC_FLAG_CLOSED_GOP, "Closed GOP", "closedgop"},
|
{CODEC_FLAG_CLOSED_GOP, "Closed GOP", "closedgop"},
|
||||||
{0, NULL, NULL},
|
{0, NULL, NULL},
|
||||||
};
|
};
|
||||||
|
|
|
@ -1138,8 +1138,8 @@ gst_ffmpegdemux_open (GstFFMpegDemux * demux)
|
||||||
location = g_strdup_printf ("gstpipe://%p", &demux->ffpipe);
|
location = g_strdup_printf ("gstpipe://%p", &demux->ffpipe);
|
||||||
GST_DEBUG_OBJECT (demux, "about to call av_open_input_file %s", location);
|
GST_DEBUG_OBJECT (demux, "about to call av_open_input_file %s", location);
|
||||||
|
|
||||||
res = av_open_input_file (&demux->context, location,
|
res = avformat_open_input (&demux->context, location,
|
||||||
oclass->in_plugin, 0, NULL);
|
oclass->in_plugin, NULL);
|
||||||
|
|
||||||
g_free (location);
|
g_free (location);
|
||||||
GST_DEBUG_OBJECT (demux, "av_open_input returned %d", res);
|
GST_DEBUG_OBJECT (demux, "av_open_input returned %d", res);
|
||||||
|
|
|
@ -57,7 +57,6 @@ struct _GstFFMpegMux
|
||||||
/*< private > */
|
/*< private > */
|
||||||
/* event_function is the collectpads default eventfunction */
|
/* event_function is the collectpads default eventfunction */
|
||||||
GstPadEventFunction event_function;
|
GstPadEventFunction event_function;
|
||||||
int preload;
|
|
||||||
int max_delay;
|
int max_delay;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -295,8 +294,8 @@ gst_ffmpegmux_class_init (GstFFMpegMuxClass * klass)
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class, PROP_PRELOAD,
|
g_object_class_install_property (gobject_class, PROP_PRELOAD,
|
||||||
g_param_spec_int ("preload", "preload",
|
g_param_spec_int ("preload", "preload",
|
||||||
"Set the initial demux-decode delay (in microseconds)", 0, G_MAXINT,
|
"Set the initial demux-decode delay (in microseconds) (DEPRECATED)",
|
||||||
0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
0, G_MAXINT, 0, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS));
|
||||||
|
|
||||||
g_object_class_install_property (gobject_class, PROP_MAXDELAY,
|
g_object_class_install_property (gobject_class, PROP_MAXDELAY,
|
||||||
g_param_spec_int ("maxdelay", "maxdelay",
|
g_param_spec_int ("maxdelay", "maxdelay",
|
||||||
|
@ -333,7 +332,6 @@ gst_ffmpegmux_init (GstFFMpegMux * ffmpegmux, GstFFMpegMuxClass * g_class)
|
||||||
|
|
||||||
ffmpegmux->videopads = 0;
|
ffmpegmux->videopads = 0;
|
||||||
ffmpegmux->audiopads = 0;
|
ffmpegmux->audiopads = 0;
|
||||||
ffmpegmux->preload = 0;
|
|
||||||
ffmpegmux->max_delay = 0;
|
ffmpegmux->max_delay = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -347,7 +345,6 @@ gst_ffmpegmux_set_property (GObject * object, guint prop_id,
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_PRELOAD:
|
case PROP_PRELOAD:
|
||||||
src->preload = g_value_get_int (value);
|
|
||||||
break;
|
break;
|
||||||
case PROP_MAXDELAY:
|
case PROP_MAXDELAY:
|
||||||
src->max_delay = g_value_get_int (value);
|
src->max_delay = g_value_get_int (value);
|
||||||
|
@ -368,7 +365,6 @@ gst_ffmpegmux_get_property (GObject * object, guint prop_id, GValue * value,
|
||||||
|
|
||||||
switch (prop_id) {
|
switch (prop_id) {
|
||||||
case PROP_PRELOAD:
|
case PROP_PRELOAD:
|
||||||
g_value_set_int (value, src->preload);
|
|
||||||
break;
|
break;
|
||||||
case PROP_MAXDELAY:
|
case PROP_MAXDELAY:
|
||||||
g_value_set_int (value, src->max_delay);
|
g_value_set_int (value, src->max_delay);
|
||||||
|
@ -439,10 +435,10 @@ gst_ffmpegmux_request_new_pad (GstElement * element,
|
||||||
gst_element_add_pad (element, pad);
|
gst_element_add_pad (element, pad);
|
||||||
|
|
||||||
/* AVStream needs to be created */
|
/* AVStream needs to be created */
|
||||||
st = av_new_stream (ffmpegmux->context, collect_pad->padnum);
|
st = avformat_new_stream (ffmpegmux->context, NULL);
|
||||||
|
st->id = collect_pad->padnum;
|
||||||
st->codec->codec_type = type;
|
st->codec->codec_type = type;
|
||||||
st->codec->codec_id = CODEC_ID_NONE; /* this is a check afterwards */
|
st->codec->codec_id = CODEC_ID_NONE; /* this is a check afterwards */
|
||||||
st->stream_copy = 1; /* we're not the actual encoder */
|
|
||||||
st->codec->bit_rate = bitrate;
|
st->codec->bit_rate = bitrate;
|
||||||
st->codec->frame_size = framesize;
|
st->codec->frame_size = framesize;
|
||||||
/* we fill in codec during capsnego */
|
/* we fill in codec during capsnego */
|
||||||
|
@ -474,7 +470,6 @@ gst_ffmpegmux_setcaps (GstPad * pad, GstCaps * caps)
|
||||||
collect_pad = (GstFFMpegMuxPad *) gst_pad_get_element_private (pad);
|
collect_pad = (GstFFMpegMuxPad *) gst_pad_get_element_private (pad);
|
||||||
|
|
||||||
st = ffmpegmux->context->streams[collect_pad->padnum];
|
st = ffmpegmux->context->streams[collect_pad->padnum];
|
||||||
ffmpegmux->context->preload = ffmpegmux->preload;
|
|
||||||
ffmpegmux->context->max_delay = ffmpegmux->max_delay;
|
ffmpegmux->context->max_delay = ffmpegmux->max_delay;
|
||||||
|
|
||||||
/* for the format-specific guesses, we'll go to
|
/* for the format-specific guesses, we'll go to
|
||||||
|
@ -548,7 +543,7 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
||||||
|
|
||||||
/* open "file" (gstreamer protocol to next element) */
|
/* open "file" (gstreamer protocol to next element) */
|
||||||
if (!ffmpegmux->opened) {
|
if (!ffmpegmux->opened) {
|
||||||
int open_flags = URL_WRONLY;
|
int open_flags = AVIO_FLAG_WRITE;
|
||||||
|
|
||||||
/* we do need all streams to have started capsnego,
|
/* we do need all streams to have started capsnego,
|
||||||
* or things will go horribly wrong */
|
* or things will go horribly wrong */
|
||||||
|
@ -642,19 +637,13 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
||||||
open_flags |= GST_FFMPEG_URL_STREAMHEADER;
|
open_flags |= GST_FFMPEG_URL_STREAMHEADER;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (url_fopen (&ffmpegmux->context->pb,
|
if (avio_open (&ffmpegmux->context->pb,
|
||||||
ffmpegmux->context->filename, open_flags) < 0) {
|
ffmpegmux->context->filename, open_flags) < 0) {
|
||||||
GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, TOO_LAZY, (NULL),
|
GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, TOO_LAZY, (NULL),
|
||||||
("Failed to open stream context in avmux"));
|
("Failed to open stream context in avmux"));
|
||||||
return GST_FLOW_ERROR;
|
return GST_FLOW_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (av_set_parameters (ffmpegmux->context, NULL) < 0) {
|
|
||||||
GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, INIT, (NULL),
|
|
||||||
("Failed to initialize muxer"));
|
|
||||||
return GST_FLOW_ERROR;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* now open the mux format */
|
/* now open the mux format */
|
||||||
if (avformat_write_header (ffmpegmux->context, NULL) < 0) {
|
if (avformat_write_header (ffmpegmux->context, NULL) < 0) {
|
||||||
GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, SETTINGS, (NULL),
|
GST_ELEMENT_ERROR (ffmpegmux, LIBRARY, SETTINGS, (NULL),
|
||||||
|
@ -666,7 +655,7 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
||||||
ffmpegmux->opened = TRUE;
|
ffmpegmux->opened = TRUE;
|
||||||
|
|
||||||
/* flush the header so it will be used as streamheader */
|
/* flush the header so it will be used as streamheader */
|
||||||
put_flush_packet (ffmpegmux->context->pb);
|
avio_flush (ffmpegmux->context->pb);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* take the one with earliest timestamp,
|
/* take the one with earliest timestamp,
|
||||||
|
@ -773,8 +762,8 @@ gst_ffmpegmux_collected (GstCollectPads * pads, gpointer user_data)
|
||||||
/* close down */
|
/* close down */
|
||||||
av_write_trailer (ffmpegmux->context);
|
av_write_trailer (ffmpegmux->context);
|
||||||
ffmpegmux->opened = FALSE;
|
ffmpegmux->opened = FALSE;
|
||||||
put_flush_packet (ffmpegmux->context->pb);
|
avio_flush (ffmpegmux->context->pb);
|
||||||
url_fclose (ffmpegmux->context->pb);
|
avio_close (ffmpegmux->context->pb);
|
||||||
gst_pad_push_event (ffmpegmux->srcpad, gst_event_new_eos ());
|
gst_pad_push_event (ffmpegmux->srcpad, gst_event_new_eos ());
|
||||||
return GST_FLOW_EOS;
|
return GST_FLOW_EOS;
|
||||||
}
|
}
|
||||||
|
@ -812,7 +801,7 @@ gst_ffmpegmux_change_state (GstElement * element, GstStateChange transition)
|
||||||
gst_tag_setter_reset_tags (GST_TAG_SETTER (ffmpegmux));
|
gst_tag_setter_reset_tags (GST_TAG_SETTER (ffmpegmux));
|
||||||
if (ffmpegmux->opened) {
|
if (ffmpegmux->opened) {
|
||||||
ffmpegmux->opened = FALSE;
|
ffmpegmux->opened = FALSE;
|
||||||
url_fclose (ffmpegmux->context->pb);
|
avio_close (ffmpegmux->context->pb);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GST_STATE_CHANGE_READY_TO_NULL:
|
case GST_STATE_CHANGE_READY_TO_NULL:
|
||||||
|
|
|
@ -26,6 +26,8 @@
|
||||||
#include <sys/sysctl.h>
|
#include <sys/sysctl.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include <libavutil/mem.h>
|
||||||
|
|
||||||
G_CONST_RETURN gchar *
|
G_CONST_RETURN gchar *
|
||||||
gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
|
gst_ffmpeg_get_codecid_longname (enum CodecID codec_id)
|
||||||
{
|
{
|
||||||
|
|
|
@ -241,7 +241,7 @@ static void
|
||||||
gst_ffmpegviddec_init (GstFFMpegVidDec * ffmpegdec)
|
gst_ffmpegviddec_init (GstFFMpegVidDec * ffmpegdec)
|
||||||
{
|
{
|
||||||
/* some ffmpeg data */
|
/* some ffmpeg data */
|
||||||
ffmpegdec->context = avcodec_alloc_context ();
|
ffmpegdec->context = avcodec_alloc_context3 (NULL);
|
||||||
ffmpegdec->picture = avcodec_alloc_frame ();
|
ffmpegdec->picture = avcodec_alloc_frame ();
|
||||||
ffmpegdec->opened = FALSE;
|
ffmpegdec->opened = FALSE;
|
||||||
ffmpegdec->skip_frame = ffmpegdec->lowres = 0;
|
ffmpegdec->skip_frame = ffmpegdec->lowres = 0;
|
||||||
|
@ -394,7 +394,7 @@ gst_ffmpegviddec_set_format (GstVideoDecoder * decoder,
|
||||||
|
|
||||||
/* workaround encoder bugs */
|
/* workaround encoder bugs */
|
||||||
ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
|
ffmpegdec->context->workaround_bugs |= FF_BUG_AUTODETECT;
|
||||||
ffmpegdec->context->error_recognition = 1;
|
ffmpegdec->context->err_recognition = 1;
|
||||||
|
|
||||||
/* for slow cpus */
|
/* for slow cpus */
|
||||||
ffmpegdec->context->lowres = ffmpegdec->lowres;
|
ffmpegdec->context->lowres = ffmpegdec->lowres;
|
||||||
|
|
|
@ -220,7 +220,7 @@ static void
|
||||||
gst_ffmpegvidenc_init (GstFFMpegVidEnc * ffmpegenc)
|
gst_ffmpegvidenc_init (GstFFMpegVidEnc * ffmpegenc)
|
||||||
{
|
{
|
||||||
/* ffmpeg objects */
|
/* ffmpeg objects */
|
||||||
ffmpegenc->context = avcodec_alloc_context ();
|
ffmpegenc->context = avcodec_alloc_context3 (NULL);
|
||||||
ffmpegenc->picture = avcodec_alloc_frame ();
|
ffmpegenc->picture = avcodec_alloc_frame ();
|
||||||
ffmpegenc->opened = FALSE;
|
ffmpegenc->opened = FALSE;
|
||||||
|
|
||||||
|
@ -236,7 +236,7 @@ gst_ffmpegvidenc_init (GstFFMpegVidEnc * ffmpegenc)
|
||||||
ffmpegenc->lmax = 31;
|
ffmpegenc->lmax = 31;
|
||||||
ffmpegenc->max_key_interval = 0;
|
ffmpegenc->max_key_interval = 0;
|
||||||
|
|
||||||
gst_ffmpeg_cfg_set_defaults3 (ffmpegenc, NULL);
|
gst_ffmpeg_cfg_set_defaults (ffmpegenc);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
@ -328,7 +328,7 @@ gst_ffmpegvidenc_getcaps (GstVideoEncoder * encoder, GstCaps * filter)
|
||||||
|
|
||||||
/* need to start with a fresh codec_context each time around, since
|
/* need to start with a fresh codec_context each time around, since
|
||||||
* codec_close may have released stuff causing the next pass to segfault */
|
* codec_close may have released stuff causing the next pass to segfault */
|
||||||
ctx = avcodec_alloc_context ();
|
ctx = avcodec_alloc_context3 (NULL);
|
||||||
if (!ctx) {
|
if (!ctx) {
|
||||||
GST_DEBUG_OBJECT (ffmpegenc, "no context");
|
GST_DEBUG_OBJECT (ffmpegenc, "no context");
|
||||||
break;
|
break;
|
||||||
|
@ -981,7 +981,7 @@ gst_ffmpegvidenc_register (GstPlugin * plugin)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* only video encoders */
|
/* only video encoders */
|
||||||
if (!in_plugin->encode || in_plugin->type != AVMEDIA_TYPE_VIDEO)
|
if (!in_plugin->encode2 || in_plugin->type != AVMEDIA_TYPE_VIDEO)
|
||||||
goto next;
|
goto next;
|
||||||
|
|
||||||
/* FIXME : We should have a method to know cheaply whether we have a mapping
|
/* FIXME : We should have a method to know cheaply whether we have a mapping
|
||||||
|
|
Loading…
Reference in a new issue