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