|
|
|
@@ -46,6 +46,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; |
|
|
|
@@ -1614,6 +1616,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 |
|
|
|
@@ -2231,24 +2242,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 = |
|
|
|
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; |
|
|
|
} |
|
|
|
} |
|
|
|
|