Ticket #318: mpeg2reinit.diff
| File mpeg2reinit.diff, 2.0 KB (added by , 20 years ago) |
|---|
-
libmpcodecs/vd_libmpeg2.c
56 56 return CONTROL_UNKNOWN; 57 57 } 58 58 59 static int vo_init_format; 60 59 61 // init driver 60 62 static int init(sh_video_t *sh){ 61 63 vd_libmpeg2_ctx_t *context; … … 89 91 90 92 mpeg2dec->pending_buffer = 0; 91 93 mpeg2dec->pending_length = 0; 94 vo_init_format = 0; 92 95 93 96 return 1; 94 97 } … … 157 160 int type, use_callback; 158 161 mp_image_t* mpi_new; 159 162 unsigned long pw, ph; 163 static int vo_init_width; 164 static int vo_init_height; 165 static float vo_init_aspect; 160 166 161 167 switch(state){ 162 168 case STATE_BUFFER: … … 176 182 // video parameters inited/changed, (re)init libvo: 177 183 if (info->sequence->width >> 1 == info->sequence->chroma_width && 178 184 info->sequence->height >> 1 == info->sequence->chroma_height) { 185 if (vo_init_format == 1 && vo_init_aspect == sh->aspect && 186 vo_init_width == info->sequence->picture_width && 187 vo_init_height == info->sequence->picture_height) 188 break; 179 189 if(!mpcodecs_config_vo(sh, 180 190 info->sequence->picture_width, 181 191 info->sequence->picture_height, IMGFMT_YV12)) return 0; 192 vo_init_format = 1; 182 193 } else if (info->sequence->width >> 1 == info->sequence->chroma_width && 183 194 info->sequence->height == info->sequence->chroma_height) { 195 if (vo_init_format == 2 && vo_init_aspect == sh->aspect && 196 vo_init_width == info->sequence->picture_width && 197 vo_init_height == info->sequence->picture_height) 198 break; 184 199 if(!mpcodecs_config_vo(sh, 185 200 info->sequence->picture_width, 186 201 info->sequence->picture_height, IMGFMT_422P)) return 0; 202 vo_init_format = 2; 187 203 } else return 0; 204 vo_init_aspect = sh->aspect; 205 vo_init_width = info->sequence->picture_width; 206 vo_init_height = info->sequence->picture_height; 188 207 break; 189 208 case STATE_PICTURE: 190 209 type=info->current_picture->flags&PIC_MASK_CODING_TYPE;
