| 
																	
																	
																		
																	
																	
																 | 
																@@ -58,7 +58,7 @@ struct StagefrightContext { | 
															
														
														
													
														
															
																 | 
																 | 
																    AVBitStreamFilterContext *bsfc; | 
																 | 
																 | 
																    AVBitStreamFilterContext *bsfc; | 
															
														
														
													
														
															
																 | 
																 | 
																    uint8_t* orig_extradata; | 
																 | 
																 | 
																    uint8_t* orig_extradata; | 
															
														
														
													
														
															
																 | 
																 | 
																    int orig_extradata_size; | 
																 | 
																 | 
																    int orig_extradata_size; | 
															
														
														
													
														
															
																 | 
																 | 
																    sp<MediaSource> source; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    sp<MediaSource> *source; | 
															
														
														
													
														
															
																 | 
																 | 
																    List<Frame*> *in_queue, *out_queue; | 
																 | 
																 | 
																    List<Frame*> *in_queue, *out_queue; | 
															
														
														
													
														
															
																 | 
																 | 
																    pthread_mutex_t in_mutex, out_mutex; | 
																 | 
																 | 
																    pthread_mutex_t in_mutex, out_mutex; | 
															
														
														
													
														
															
																 | 
																 | 
																    pthread_cond_t condition; | 
																 | 
																 | 
																    pthread_cond_t condition; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -74,7 +74,7 @@ struct StagefrightContext { | 
															
														
														
													
														
															
																 | 
																 | 
																    int dummy_bufsize; | 
																 | 
																 | 
																    int dummy_bufsize; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    OMXClient *client; | 
																 | 
																 | 
																    OMXClient *client; | 
															
														
														
													
														
															
																 | 
																 | 
																    sp<MediaSource> decoder; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    sp<MediaSource> *decoder; | 
															
														
														
													
														
															
																 | 
																 | 
																    const char *decoder_component; | 
																 | 
																 | 
																    const char *decoder_component; | 
															
														
														
													
														
															
																 | 
																 | 
																}; | 
																 | 
																 | 
																}; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -156,9 +156,9 @@ void* decode_thread(void *arg) | 
															
														
														
													
														
															
																 | 
																 | 
																            decode_done   = 1; | 
																 | 
																 | 
																            decode_done   = 1; | 
															
														
														
													
														
															
																 | 
																 | 
																            s->end_frame  = NULL; | 
																 | 
																 | 
																            s->end_frame  = NULL; | 
															
														
														
													
														
															
																 | 
																 | 
																        } else { | 
																 | 
																 | 
																        } else { | 
															
														
														
													
														
															
																 | 
																 | 
																            frame->status = s->decoder->read(&buffer); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            frame->status = (*s->decoder)->read(&buffer); | 
															
														
														
													
														
															
																 | 
																 | 
																            if (frame->status == OK) { | 
																 | 
																 | 
																            if (frame->status == OK) { | 
															
														
														
													
														
															
																 | 
																 | 
																                sp<MetaData> outFormat = s->decoder->getFormat(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                sp<MetaData> outFormat = (*s->decoder)->getFormat(); | 
															
														
														
													
														
															
																 | 
																 | 
																                outFormat->findInt32(kKeyWidth , &frame->w); | 
																 | 
																 | 
																                outFormat->findInt32(kKeyWidth , &frame->w); | 
															
														
														
													
														
															
																 | 
																 | 
																                outFormat->findInt32(kKeyHeight, &frame->h); | 
																 | 
																 | 
																                outFormat->findInt32(kKeyHeight, &frame->h); | 
															
														
														
													
														
															
																 | 
																 | 
																                frame->size    = buffer->range_length(); | 
																 | 
																 | 
																                frame->size    = buffer->range_length(); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -220,7 +220,8 @@ static av_cold int Stagefright_init(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    android::ProcessState::self()->startThreadPool(); | 
																 | 
																 | 
																    android::ProcessState::self()->startThreadPool(); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    s->source    = new CustomSource(avctx, meta); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    s->source    = new sp<MediaSource>(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    *s->source   = new CustomSource(avctx, meta); | 
															
														
														
													
														
															
																 | 
																 | 
																    s->in_queue  = new List<Frame*>; | 
																 | 
																 | 
																    s->in_queue  = new List<Frame*>; | 
															
														
														
													
														
															
																 | 
																 | 
																    s->out_queue = new List<Frame*>; | 
																 | 
																 | 
																    s->out_queue = new List<Frame*>; | 
															
														
														
													
														
															
																 | 
																 | 
																    s->client    = new OMXClient; | 
																 | 
																 | 
																    s->client    = new OMXClient; | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -237,17 +238,18 @@ static av_cold int Stagefright_init(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																        goto fail; | 
																 | 
																 | 
																        goto fail; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    s->decoder = OMXCodec::Create(s->client->interface(), meta, | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																                                  false, s->source, NULL, | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    s->decoder  = new sp<MediaSource>(); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    *s->decoder = OMXCodec::Create(s->client->interface(), meta, | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                                  false, *s->source, NULL, | 
															
														
														
													
														
															
																 | 
																 | 
																                                  OMXCodec::kClientNeedsFramebuffer); | 
																 | 
																 | 
																                                  OMXCodec::kClientNeedsFramebuffer); | 
															
														
														
													
														
															
																 | 
																 | 
																    if (s->decoder->start() !=  OK) { | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    if ((*s->decoder)->start() !=  OK) { | 
															
														
														
													
														
															
																 | 
																 | 
																        av_log(avctx, AV_LOG_ERROR, "Cannot start decoder\n"); | 
																 | 
																 | 
																        av_log(avctx, AV_LOG_ERROR, "Cannot start decoder\n"); | 
															
														
														
													
														
															
																 | 
																 | 
																        ret = -1; | 
																 | 
																 | 
																        ret = -1; | 
															
														
														
													
														
															
																 | 
																 | 
																        s->client->disconnect(); | 
																 | 
																 | 
																        s->client->disconnect(); | 
															
														
														
													
														
															
																 | 
																 | 
																        goto fail; | 
																 | 
																 | 
																        goto fail; | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    outFormat = s->decoder->getFormat(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    outFormat = (*s->decoder)->getFormat(); | 
															
														
														
													
														
															
																 | 
																 | 
																    outFormat->findInt32(kKeyColorFormat, &colorFormat); | 
																 | 
																 | 
																    outFormat->findInt32(kKeyColorFormat, &colorFormat); | 
															
														
														
													
														
															
																 | 
																 | 
																    if (colorFormat == OMX_QCOM_COLOR_FormatYVU420SemiPlanar || | 
																 | 
																 | 
																    if (colorFormat == OMX_QCOM_COLOR_FormatYVU420SemiPlanar || | 
															
														
														
													
														
															
																 | 
																 | 
																        colorFormat == OMX_COLOR_FormatYUV420SemiPlanar) | 
																 | 
																 | 
																        colorFormat == OMX_COLOR_FormatYUV420SemiPlanar) | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -472,7 +474,7 @@ static av_cold int Stagefright_close(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																        av_freep(&frame); | 
																 | 
																 | 
																        av_freep(&frame); | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    s->decoder->stop(); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    (*s->decoder)->stop(); | 
															
														
														
													
														
															
																 | 
																 | 
																    s->client->disconnect(); | 
																 | 
																 | 
																    s->client->disconnect(); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    if (s->decoder_component) | 
																 | 
																 | 
																    if (s->decoder_component) | 
															
														
														
													
												
													
														
															
																| 
																	
																	
																	
																		
																	
																 | 
																@@ -490,6 +492,8 @@ static av_cold int Stagefright_close(AVCodecContext *avctx) | 
															
														
														
													
														
															
																 | 
																 | 
																    delete s->in_queue; | 
																 | 
																 | 
																    delete s->in_queue; | 
															
														
														
													
														
															
																 | 
																 | 
																    delete s->out_queue; | 
																 | 
																 | 
																    delete s->out_queue; | 
															
														
														
													
														
															
																 | 
																 | 
																    delete s->client; | 
																 | 
																 | 
																    delete s->client; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    delete s->decoder; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    delete s->source; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    pthread_mutex_destroy(&s->in_mutex); | 
																 | 
																 | 
																    pthread_mutex_destroy(&s->in_mutex); | 
															
														
														
													
														
															
																 | 
																 | 
																    pthread_mutex_destroy(&s->out_mutex); | 
																 | 
																 | 
																    pthread_mutex_destroy(&s->out_mutex); | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |