I built greenbrown from source (based on the files staged on GitHub) and found that it took considerably long to process one single file. 
system.time(
  r1 <- ReadVI3g("http://nasanex.s3.amazonaws.com/AVHRR/GIMMS/3G/1980s/geo81aug15a.n07-VI3g")
)
#   user  system elapsed 
#  3.252   0.973 143.846
Therefore, I suggest to have a look at the gimms package which has been designed for this particular kind of data and, moreover, is available from CRAN. Note that in contrast to ReadVI3g, it does not offer automated quality control yet, but this feature is scheduled for the next version update. In the meantime, overlay from the raster package should be employed to discard low-quality values.
# install.packages("gimms")
library(gimms)
system.time({
  ## download file, see ?downloadGimms for further options
  f <- updateInventory()
  f <- downloadGimms(f[3], overwrite = TRUE) # download 3rd file in 'f', viz. geo81aug15a.n07-VI3g
  ## rasterize ndvi and flags
  ndvi <- rasterizeGimms(f)
  flag <- rasterizeGimms(f, flag = TRUE)
  ## perform quality control
  r2 <- overlay(ndvi, flag, fun = function(x, y) {
    x[y[] > 1] <- NA
    return(x)
  })
})
#   user  system elapsed 
#  4.538   3.894  26.781
The two resulting images are obviously identical
> unique(r1 - r2, na.rm = TRUE)
[1] 0
but as you can see, the gimms-based code performs much faster. Moreover, it offers parallel functionality (via doParallel) in case you would like to download and process multiple files at once.
     
    
Each NDVI data set is an INT16 file saved with ieee-big_endian it ranges from -10000->(10000->10004) with the flagW file added to the ndvi values as follows: ndvi3g = round(ndvi*10000) + flagW - 1; flagW ranges from 1->7 to retrieve the original ndvi and flagW values flagW = ndvi3g-floor(ndvi3g/10)*10 + 1; ndvi = floor(ndvi3g/10)/1000Do you know how I can retrieve the ndvi values?