comparison libmpcodecs/dec_video.c @ 22497:af2ea92641a8

Reindent messy functions before working on them
author uau
date Sun, 11 Mar 2007 17:30:43 +0000
parents 1b1761cbba3b
children b6b1bd155b58
comparison
equal deleted inserted replaced
22496:e204544de710 22497:af2ea92641a8
327 return 1; // success 327 return 1; // success
328 } 328 }
329 329
330 extern int vo_directrendering; 330 extern int vo_directrendering;
331 331
332 void *decode_video(sh_video_t *sh_video,unsigned char *start,int in_size,int drop_frame, double pts){ 332 void *decode_video(sh_video_t *sh_video, unsigned char *start, int in_size,
333 mp_image_t *mpi=NULL; 333 int drop_frame, double pts)
334 unsigned int t=GetTimer(); 334 {
335 unsigned int t2; 335 mp_image_t *mpi = NULL;
336 double tt; 336 unsigned int t = GetTimer();
337 337 unsigned int t2;
338 if (correct_pts) { 338 double tt;
339 int delay = get_current_video_decoder_lag(sh_video); 339
340 if (delay >= 0) { 340 if (correct_pts) {
341 if (delay > sh_video->num_buffered_pts) 341 int delay = get_current_video_decoder_lag(sh_video);
342 if (delay >= 0) {
343 if (delay > sh_video->num_buffered_pts)
342 #if 0 344 #if 0
343 // this is disabled because vd_ffmpeg reports the same lag 345 // this is disabled because vd_ffmpeg reports the same lag
344 // after seek even when there are no buffered frames, 346 // after seek even when there are no buffered frames,
345 // leading to incorrect error messages 347 // leading to incorrect error messages
346 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Not enough buffered pts\n"); 348 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Not enough buffered pts\n");
347 #else 349 #else
348 ; 350 ;
349 #endif 351 #endif
350 else 352 else
351 sh_video->num_buffered_pts = delay; 353 sh_video->num_buffered_pts = delay;
352 } 354 }
353 if (sh_video->num_buffered_pts == 355 if (sh_video->num_buffered_pts ==
354 sizeof(sh_video->buffered_pts)/sizeof(double)) 356 sizeof(sh_video->buffered_pts)/sizeof(double))
355 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Too many buffered pts\n"); 357 mp_msg(MSGT_DECVIDEO, MSGL_ERR, "Too many buffered pts\n");
356 else { 358 else {
357 int i, j; 359 int i, j;
358 for (i = 0; i < sh_video->num_buffered_pts; i++) 360 for (i = 0; i < sh_video->num_buffered_pts; i++)
359 if (sh_video->buffered_pts[i] < pts) 361 if (sh_video->buffered_pts[i] < pts)
360 break; 362 break;
361 for (j = sh_video->num_buffered_pts; j > i; j--) 363 for (j = sh_video->num_buffered_pts; j > i; j--)
362 sh_video->buffered_pts[j] = sh_video->buffered_pts[j-1]; 364 sh_video->buffered_pts[j] = sh_video->buffered_pts[j-1];
363 sh_video->buffered_pts[i] = pts; 365 sh_video->buffered_pts[i] = pts;
364 sh_video->num_buffered_pts++; 366 sh_video->num_buffered_pts++;
365 } 367 }
366 } 368 }
367 369
368 //if(!(sh_video->ds->flags&1) || sh_video->ds->pack_no<5) 370 mpi = mpvdec->decode(sh_video, start, in_size, drop_frame);
369 mpi=mpvdec->decode(sh_video, start, in_size, drop_frame); 371
370 372 //------------------------ frame decoded. --------------------
371 //------------------------ frame decoded. --------------------
372 373
373 #ifdef HAVE_MMX 374 #ifdef HAVE_MMX
374 // some codecs are broken, and doesn't restore MMX state :( 375 // some codecs are broken, and doesn't restore MMX state :(
375 // it happens usually with broken/damaged files. 376 // it happens usually with broken/damaged files.
376 if(gCpuCaps.has3DNow){ 377 if (gCpuCaps.has3DNow) {
377 __asm __volatile ("femms\n\t":::"memory"); 378 __asm __volatile ("femms\n\t":::"memory");
378 } 379 }
379 else if(gCpuCaps.hasMMX){ 380 else if (gCpuCaps.hasMMX) {
380 __asm __volatile ("emms\n\t":::"memory"); 381 __asm __volatile ("emms\n\t":::"memory");
381 } 382 }
382 #endif 383 #endif
383 384
384 t2=GetTimer();t=t2-t; 385 t2 = GetTimer(); t = t2-t;
385 tt = t*0.000001f; 386 tt = t*0.000001f;
386 video_time_usage+=tt; 387 video_time_usage += tt;
387 388
388 if(!mpi || drop_frame) return NULL; // error / skipped frame 389 if (!mpi || drop_frame)
389 390 return NULL; // error / skipped frame
390 if (field_dominance == 0) 391
391 mpi->fields |= MP_IMGFIELD_TOP_FIRST; 392 if (field_dominance == 0)
392 else if (field_dominance == 1) 393 mpi->fields |= MP_IMGFIELD_TOP_FIRST;
393 mpi->fields &= ~MP_IMGFIELD_TOP_FIRST; 394 else if (field_dominance == 1)
394 395 mpi->fields &= ~MP_IMGFIELD_TOP_FIRST;
395 if (correct_pts) { 396
396 sh_video->num_buffered_pts--; 397 if (correct_pts) {
397 sh_video->pts = sh_video->buffered_pts[sh_video->num_buffered_pts]; 398 sh_video->num_buffered_pts--;
398 } 399 sh_video->pts = sh_video->buffered_pts[sh_video->num_buffered_pts];
399 return mpi; 400 }
400 } 401 return mpi;
401 402 }
402 int filter_video(sh_video_t *sh_video, void *frame, double pts) { 403
403 mp_image_t *mpi = frame; 404 int filter_video(sh_video_t *sh_video, void *frame, double pts)
404 unsigned int t2 = GetTimer(); 405 {
405 vf_instance_t *vf = sh_video->vfilter; 406 mp_image_t *mpi = frame;
406 // apply video filters and call the leaf vo/ve 407 unsigned int t2 = GetTimer();
407 int ret = vf->put_image(vf,mpi, pts); 408 vf_instance_t *vf = sh_video->vfilter;
408 if(ret>0) { 409 // apply video filters and call the leaf vo/ve
409 vf->control(vf,VFCTRL_DRAW_OSD,NULL); 410 int ret = vf->put_image(vf, mpi, pts);
411 if (ret > 0) {
412 vf->control(vf, VFCTRL_DRAW_OSD, NULL);
410 #ifdef USE_ASS 413 #ifdef USE_ASS
411 vf->control(vf,VFCTRL_DRAW_EOSD,NULL); 414 vf->control(vf, VFCTRL_DRAW_EOSD, NULL);
412 #endif 415 #endif
413 } 416 }
414 417
415 t2=GetTimer()-t2; 418 t2 = GetTimer()-t2;
416 vout_time_usage += t2*0.000001; 419 vout_time_usage += t2*0.000001;
417 420
418 return ret; 421 return ret;
419 } 422 }