Finally i found an explanation of the form_state array here
form_state
Unfortunately is not so complete... better than nothing.
To get the fid of the new file i did
$lang_field_package = $form['my_field']['#language'];
$fid_new = $form_state['values']['my_field'][$lang_field_package][0]['fid'];
values: An associative array of values submitted to the form. The
validation functions and submit functions use this array for nearly
all their decision making. (Note that #tree determines whether the
values are a flat array or an array whose structure parallels the
$form array. See Form API reference for more information.) These are
raw and unvalidated, so should not be used without a thorough
understanding of security implications. In almost all cases, code
should use the data in the 'values' array exclusively. The most common
use of this key is for multi-step forms that need to clear some of the
user input when setting 'rebuild'. The values correspond to $_POST or
$_GET, depending on the 'method' chosen.
This has proven safer than 'input'. Using 'input', when the user chose a file without pressing the 'upload' button beside the file field, the fid was retrieved as zero instead of the chosen file fid, while in 'values' the fid was correct. It does make sense, but, whether you press upload or not, the file would be load on submit, so i required the right fid anyway.
To get the fid of the old file i did
$lang_field_package = $form['my_field']['#language'];
if (!empty($form_state['build_info']['args'][0]->my_field)) {
$fid_old = $form_state['build_info']['args'][0]->my_field[$lang_field_package][0]['fid'];
}
build_info: Internal. An associative array of information stored by
Form API that is necessary to build and rebuild the form from cache
when the original context may no longer be available:
args: A list of
arguments to pass to the form constructor.