Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: third_party/ffmpeg/source/patched-ffmpeg/libavcodec/pthread.c

Issue 8497048: Fix invalid reads detected by Valgrind when the frame size changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/
Patch Set: Created 9 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2004 Roman Shaposhnik 2 * Copyright (c) 2004 Roman Shaposhnik
3 * Copyright (c) 2008 Alexander Strange (astrange@ithinksw.com) 3 * Copyright (c) 2008 Alexander Strange (astrange@ithinksw.com)
4 * 4 *
5 * Many thanks to Steven M. Schultz for providing clever ideas and 5 * Many thanks to Steven M. Schultz for providing clever ideas and
6 * to Michael Niedermayer <michaelni@gmx.at> for writing initial 6 * to Michael Niedermayer <michaelni@gmx.at> for writing initial
7 * implementation. 7 * implementation.
8 * 8 *
9 * This file is part of FFmpeg. 9 * This file is part of FFmpeg.
10 * 10 *
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after
478 if (p->state == STATE_GET_BUFFER) { 478 if (p->state == STATE_GET_BUFFER) {
479 p->result = p->avctx->get_buffer(p->avctx, p->requested_frame); 479 p->result = p->avctx->get_buffer(p->avctx, p->requested_frame);
480 p->state = STATE_SETTING_UP; 480 p->state = STATE_SETTING_UP;
481 pthread_cond_signal(&p->progress_cond); 481 pthread_cond_signal(&p->progress_cond);
482 } 482 }
483 pthread_mutex_unlock(&p->progress_mutex); 483 pthread_mutex_unlock(&p->progress_mutex);
484 } 484 }
485 } 485 }
486 486
487 fctx->prev_thread = p; 487 fctx->prev_thread = p;
488 fctx->next_decoding++;
488 489
489 return 0; 490 return 0;
490 } 491 }
491 492
492 int ff_thread_decode_frame(AVCodecContext *avctx, 493 int ff_thread_decode_frame(AVCodecContext *avctx,
493 AVFrame *picture, int *got_picture_ptr, 494 AVFrame *picture, int *got_picture_ptr,
494 AVPacket *avpkt) 495 AVPacket *avpkt)
495 { 496 {
496 FrameThreadContext *fctx = avctx->thread_opaque; 497 FrameThreadContext *fctx = avctx->thread_opaque;
497 int finished = fctx->next_finished; 498 int finished = fctx->next_finished;
498 PerThreadContext *p; 499 PerThreadContext *p;
499 int err; 500 int err;
500 501
501 /* 502 /*
502 * Submit a packet to the next decoding thread. 503 * Submit a packet to the next decoding thread.
503 */ 504 */
504 505
505 p = &fctx->threads[fctx->next_decoding]; 506 p = &fctx->threads[fctx->next_decoding];
506 update_context_from_user(p->avctx, avctx); 507 update_context_from_user(p->avctx, avctx);
507 err = submit_packet(p, avpkt); 508 err = submit_packet(p, avpkt);
508 if (err) return err; 509 if (err) return err;
509 510
510 fctx->next_decoding++;
511
512 /* 511 /*
513 * If we're still receiving the initial packets, don't return a frame. 512 * If we're still receiving the initial packets, don't return a frame.
514 */ 513 */
515 514
516 if (fctx->delaying && avpkt->size) { 515 if (fctx->delaying && avpkt->size) {
517 if (fctx->next_decoding >= (avctx->thread_count-1)) fctx->delaying = 0; 516 if (fctx->next_decoding >= (avctx->thread_count-1)) fctx->delaying = 0;
518 517
519 *got_picture_ptr=0; 518 *got_picture_ptr=0;
520 return 0; 519 return 0;
521 } 520 }
(...skipping 388 matching lines...) Expand 10 before | Expand all | Expand 10 after
910 return 0; 909 return 0;
911 } 910 }
912 911
913 void ff_thread_free(AVCodecContext *avctx) 912 void ff_thread_free(AVCodecContext *avctx)
914 { 913 {
915 if (avctx->active_thread_type&FF_THREAD_FRAME) 914 if (avctx->active_thread_type&FF_THREAD_FRAME)
916 frame_thread_free(avctx, avctx->thread_count); 915 frame_thread_free(avctx, avctx->thread_count);
917 else 916 else
918 thread_free(avctx); 917 thread_free(avctx);
919 } 918 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698