You've already forked FFmpeg
							
							
				mirror of
				https://github.com/FFmpeg/FFmpeg.git
				synced 2025-10-30 23:18:11 +02:00 
			
		
		
		
	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:
		| @@ -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; | ||||
|             } | ||||
|         } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user