mirror of https://git.ffmpeg.org/ffmpeg.git
Merge remote-tracking branch 'qatar/master'
* qatar/master:
mpeg12dec: do not add stereo3D side data to a non-existing frame
Conflicts:
libavcodec/mpeg12dec.c
See: fe285b04bb
Merged-by: Michael Niedermayer <michaelni@gmx.at>
This commit is contained in:
commit
abe3f79d62
|
@ -48,6 +48,8 @@ typedef struct Mpeg1Context {
|
|||
int mpeg_enc_ctx_allocated; /* true if decoding context allocated */
|
||||
int repeat_field; /* true if we must repeat the field */
|
||||
AVPanScan pan_scan; /* some temporary storage for the panscan */
|
||||
AVStereo3D stereo3d;
|
||||
int has_stereo3d;
|
||||
uint8_t *a53_caption;
|
||||
int a53_caption_size;
|
||||
int slice_count;
|
||||
|
@ -1642,6 +1644,15 @@ static int mpeg_field_start(MpegEncContext *s, const uint8_t *buf, int buf_size)
|
|||
memcpy(sd->data, s1->a53_caption, s1->a53_caption_size);
|
||||
av_freep(&s1->a53_caption);
|
||||
}
|
||||
|
||||
if (s1->has_stereo3d) {
|
||||
AVStereo3D *stereo = av_stereo3d_create_side_data(&s->current_picture_ptr->f);
|
||||
if (!stereo)
|
||||
return AVERROR(ENOMEM);
|
||||
|
||||
*stereo = s1->stereo3d;
|
||||
s1->has_stereo3d = 0;
|
||||
}
|
||||
if (HAVE_THREADS && (avctx->active_thread_type & FF_THREAD_FRAME))
|
||||
ff_thread_finish_setup(avctx);
|
||||
} else { // second field
|
||||
|
@ -2272,28 +2283,21 @@ static void mpeg_decode_user_data(AVCodecContext *avctx,
|
|||
S3D_video_format_type == 0x08 ||
|
||||
S3D_video_format_type == 0x23) {
|
||||
Mpeg1Context *s1 = avctx->priv_data;
|
||||
MpegEncContext *s = &s1->mpeg_enc_ctx;
|
||||
AVStereo3D *stereo;
|
||||
if (!s->current_picture_ptr)
|
||||
return;
|
||||
|
||||
stereo =
|
||||
av_stereo3d_create_side_data(&s->current_picture_ptr->f);
|
||||
if (!stereo)
|
||||
return;
|
||||
s1->has_stereo3d = 1;
|
||||
|
||||
switch (S3D_video_format_type) {
|
||||
case 0x03:
|
||||
stereo->type = AV_STEREO3D_SIDEBYSIDE;
|
||||
s1->stereo3d.type = AV_STEREO3D_SIDEBYSIDE;
|
||||
break;
|
||||
case 0x04:
|
||||
stereo->type = AV_STEREO3D_TOPBOTTOM;
|
||||
s1->stereo3d.type = AV_STEREO3D_TOPBOTTOM;
|
||||
break;
|
||||
case 0x08:
|
||||
stereo->type = AV_STEREO3D_2D;
|
||||
s1->stereo3d.type = AV_STEREO3D_2D;
|
||||
break;
|
||||
case 0x23:
|
||||
stereo->type = AV_STEREO3D_SIDEBYSIDE_QUINCUNX;
|
||||
s1->stereo3d.type = AV_STEREO3D_SIDEBYSIDE_QUINCUNX;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue