Mercurial > mplayer.hg
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 } |