@ -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 ) ;