mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-17 13:56:32 +00:00
avviddec: Initialize strides with the ones of avcodec_default_get_buffer() if we ever call it
https://bugzilla.gnome.org/show_bug.cgi?id=704769
This commit is contained in:
parent
5c1ab55c5c
commit
677eaa6692
2 changed files with 14 additions and 4 deletions
|
@ -617,6 +617,10 @@ gst_ffmpegviddec_get_buffer (AVCodecContext * context, AVFrame * picture)
|
||||||
if (ffmpegdec->stride[c] == -1) {
|
if (ffmpegdec->stride[c] == -1) {
|
||||||
ffmpegdec->stride[c] = picture->linesize[c];
|
ffmpegdec->stride[c] = picture->linesize[c];
|
||||||
} else if (picture->linesize[c] != ffmpegdec->stride[c]) {
|
} else if (picture->linesize[c] != ffmpegdec->stride[c]) {
|
||||||
|
GST_LOG_OBJECT (ffmpegdec,
|
||||||
|
"No direct rendering, stride changed c=%d %d->%d", c,
|
||||||
|
ffmpegdec->stride[c], picture->linesize[c]);
|
||||||
|
|
||||||
for (c = 0; c < AV_NUM_DATA_POINTERS; c++) {
|
for (c = 0; c < AV_NUM_DATA_POINTERS; c++) {
|
||||||
picture->data[c] = NULL;
|
picture->data[c] = NULL;
|
||||||
picture->linesize[c] = 0;
|
picture->linesize[c] = 0;
|
||||||
|
@ -671,7 +675,13 @@ invalid_frame:
|
||||||
}
|
}
|
||||||
fallback:
|
fallback:
|
||||||
{
|
{
|
||||||
return avcodec_default_get_buffer (context, picture);
|
int c;
|
||||||
|
int ret = avcodec_default_get_buffer (context, picture);
|
||||||
|
|
||||||
|
for (c = 0; c < AV_NUM_DATA_POINTERS; c++)
|
||||||
|
ffmpegdec->stride[c] = picture->linesize[c];
|
||||||
|
|
||||||
|
return ret;
|
||||||
}
|
}
|
||||||
duplicate_frame:
|
duplicate_frame:
|
||||||
{
|
{
|
||||||
|
@ -1570,8 +1580,8 @@ gst_ffmpegviddec_decide_allocation (GstVideoDecoder * decoder, GstQuery * query)
|
||||||
avcodec_align_dimensions2 (ffmpegdec->context, &width, &height,
|
avcodec_align_dimensions2 (ffmpegdec->context, &width, &height,
|
||||||
linesize_align);
|
linesize_align);
|
||||||
edge =
|
edge =
|
||||||
ffmpegdec->
|
ffmpegdec->context->
|
||||||
context->flags & CODEC_FLAG_EMU_EDGE ? 0 : avcodec_get_edge_width ();
|
flags & CODEC_FLAG_EMU_EDGE ? 0 : avcodec_get_edge_width ();
|
||||||
/* increase the size for the padding */
|
/* increase the size for the padding */
|
||||||
width += edge << 1;
|
width += edge << 1;
|
||||||
height += edge << 1;
|
height += edge << 1;
|
||||||
|
|
|
@ -37,7 +37,7 @@ struct _GstFFMpegVidDec
|
||||||
/* decoding */
|
/* decoding */
|
||||||
AVCodecContext *context;
|
AVCodecContext *context;
|
||||||
AVFrame *picture;
|
AVFrame *picture;
|
||||||
gint stride[4];
|
gint stride[AV_NUM_DATA_POINTERS];
|
||||||
gboolean opened;
|
gboolean opened;
|
||||||
|
|
||||||
/* current context */
|
/* current context */
|
||||||
|
|
Loading…
Reference in a new issue