mmplugins/lib3gp/impl/src/mp4parse.cpp
branchRCL_3
changeset 23 545d349d14da
parent 11 d5f04de580b7
--- a/mmplugins/lib3gp/impl/src/mp4parse.cpp	Tue May 25 14:20:15 2010 +0300
+++ b/mmplugins/lib3gp/impl/src/mp4parse.cpp	Wed Jun 09 11:20:54 2010 +0300
@@ -3326,4 +3326,73 @@
 		}
 	}
 
+extern EXPORT_C MP4Err MP4ParseGetID32Location(MP4Handle apihandle, mp4_u32& location)
+    { 
+    MP4HandleImp handle = (MP4HandleImp)apihandle;
+
+    if (!handle)
+        {
+        return MP4_ERROR;
+        }
+
+    if (!handle->metaDataComplete)
+        {
+        switch (metaDataAvailable(handle))
+            {
+            case 0:
+                return MP4_NOT_AVAILABLE;
+            case 1:
+                handle->cafError = KErrNone;
+                if (readMetaData(handle) < 0)
+                    {
+			      	// Reading of meta data failed, so free up any allocated memory
+			  		freeFTYP(handle->ftyp);
+			  		handle->ftyp = NULL;
+					freeMOOV(handle->moov);
+					handle->moov = NULL;
+                    if (handle->cafError != KErrNone)
+                        {// if CAF/DRM caused the error return it instead of generic errorcode.
+                        return handle->cafError;
+                        }
+                    else
+                        {
+                        return MP4_INVALID_INPUT_STREAM;
+                        }
+                    }
+                handle->metaDataComplete = MP4TRUE;
+                break;
+
+		    case -2:
+                // Reading of FTYP meta data failed, so free up any allocated memory
+                freeFTYP(handle->ftyp);
+                handle->ftyp = NULL;
+                return MP4_ERROR;
+		      
+            case -1:
+            default:
+                return MP4_ERROR;
+            }
+        }    
+
+    if (!handle->moov)
+        return MP4_ERROR;
+
+    metaAtom* meta = handle->moov->meta;
+    if (!meta)
+        return MP4_NOT_AVAILABLE;
+
+    if (!meta->atomhdr)
+        return MP4_NOT_AVAILABLE;
+    
+    if(meta->ID32)
+        {
+        location = meta->ID32->atomcontentloc;     
+        }
+    else
+        {
+        return MP4_NOT_AVAILABLE;
+        }    
+
+    return MP4_OK;
+    }
 // End of File