3324 { |
3324 { |
3325 handle->asyncReader->Cancel(); |
3325 handle->asyncReader->Cancel(); |
3326 } |
3326 } |
3327 } |
3327 } |
3328 |
3328 |
|
3329 extern EXPORT_C MP4Err MP4ParseGetID32Location(MP4Handle apihandle, mp4_u32& location) |
|
3330 { |
|
3331 MP4HandleImp handle = (MP4HandleImp)apihandle; |
|
3332 |
|
3333 if (!handle) |
|
3334 { |
|
3335 return MP4_ERROR; |
|
3336 } |
|
3337 |
|
3338 if (!handle->metaDataComplete) |
|
3339 { |
|
3340 switch (metaDataAvailable(handle)) |
|
3341 { |
|
3342 case 0: |
|
3343 return MP4_NOT_AVAILABLE; |
|
3344 case 1: |
|
3345 handle->cafError = KErrNone; |
|
3346 if (readMetaData(handle) < 0) |
|
3347 { |
|
3348 // Reading of meta data failed, so free up any allocated memory |
|
3349 freeFTYP(handle->ftyp); |
|
3350 handle->ftyp = NULL; |
|
3351 freeMOOV(handle->moov); |
|
3352 handle->moov = NULL; |
|
3353 if (handle->cafError != KErrNone) |
|
3354 {// if CAF/DRM caused the error return it instead of generic errorcode. |
|
3355 return handle->cafError; |
|
3356 } |
|
3357 else |
|
3358 { |
|
3359 return MP4_INVALID_INPUT_STREAM; |
|
3360 } |
|
3361 } |
|
3362 handle->metaDataComplete = MP4TRUE; |
|
3363 break; |
|
3364 |
|
3365 case -2: |
|
3366 // Reading of FTYP meta data failed, so free up any allocated memory |
|
3367 freeFTYP(handle->ftyp); |
|
3368 handle->ftyp = NULL; |
|
3369 return MP4_ERROR; |
|
3370 |
|
3371 case -1: |
|
3372 default: |
|
3373 return MP4_ERROR; |
|
3374 } |
|
3375 } |
|
3376 |
|
3377 if (!handle->moov) |
|
3378 return MP4_ERROR; |
|
3379 |
|
3380 metaAtom* meta = handle->moov->meta; |
|
3381 if (!meta) |
|
3382 return MP4_NOT_AVAILABLE; |
|
3383 |
|
3384 if (!meta->atomhdr) |
|
3385 return MP4_NOT_AVAILABLE; |
|
3386 |
|
3387 if(meta->ID32) |
|
3388 { |
|
3389 location = meta->ID32->atomcontentloc; |
|
3390 } |
|
3391 else |
|
3392 { |
|
3393 return MP4_NOT_AVAILABLE; |
|
3394 } |
|
3395 |
|
3396 return MP4_OK; |
|
3397 } |
3329 // End of File |
3398 // End of File |