Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Emmanuel Delahaye
je cherche à transformer un timecode exprimé en seconde en long dont la représentation prendrait cette forme :
j'ai un nombre en seconde de cette forme : unsigned long tcinsecs = 3600,00secondes
Je ne vois pas comment un entier pourrait représenter un nombre décimal.
unsigned long tcinsecs = 3600; /* secondes */
qui represente 01H00M00S00f
en unsigned long timecode = 0x01000000
unsigned long timecode = 0x01000000;
Si j'ai bien compris, tu veux un unsigned long structuré comme suit :
31-24 23-16 15-8 7-0 H M S CS
Alors il y a un problème de conception. Si le timecode est en centisecondes (je suppose que le champ f a une plage de 00 à 99 centisecondes), l'entier qui le représente doit être de la même unité.
unsigned long tcincentisecs = 360000; /* centisecondes */
-- A+
Emmanuel Delahaye
je cherche à transformer un timecode exprimé en seconde en long dont
la représentation prendrait cette forme :
j'ai un nombre en seconde de cette forme :
unsigned long tcinsecs = 3600,00secondes
Je ne vois pas comment un entier pourrait représenter un nombre décimal.
unsigned long tcinsecs = 3600; /* secondes */
qui represente 01H00M00S00f
en unsigned long timecode = 0x01000000
unsigned long timecode = 0x01000000;
Si j'ai bien compris, tu veux un unsigned long structuré comme suit :
31-24 23-16 15-8 7-0
H M S CS
Alors il y a un problème de conception. Si le timecode est en
centisecondes (je suppose que le champ f a une plage de 00 à 99
centisecondes), l'entier qui le représente doit être de la même unité.
unsigned long tcincentisecs = 360000; /* centisecondes */
je cherche à transformer un timecode exprimé en seconde en long dont la représentation prendrait cette forme :
j'ai un nombre en seconde de cette forme : unsigned long tcinsecs = 3600,00secondes
Je ne vois pas comment un entier pourrait représenter un nombre décimal.
unsigned long tcinsecs = 3600; /* secondes */
qui represente 01H00M00S00f
en unsigned long timecode = 0x01000000
unsigned long timecode = 0x01000000;
Si j'ai bien compris, tu veux un unsigned long structuré comme suit :
31-24 23-16 15-8 7-0 H M S CS
Alors il y a un problème de conception. Si le timecode est en centisecondes (je suppose que le champ f a une plage de 00 à 99 centisecondes), l'entier qui le représente doit être de la même unité.
unsigned long tcincentisecs = 360000; /* centisecondes */
-- A+
Emmanuel Delahaye
Emmanuel Delahaye
Il ce peut que ce que j'appelle le champ 'centisecondes' soit en fait le champ 'frames'
#include <stdio.h>
unsigned long tc2cs(char const *tc, int *perr) { unsigned long centisec = 0; int err = 1; unsigned h; unsigned m; unsigned s; unsigned cs; /* centisecond */ int n = sscanf(tc, "%uH%uM%uS%uf", &h, &m, &s, &cs);
if (n == 4) { centisec = h * 3600 * 100 + m * 60 * 100 + s * 100 + cs ; err = 0; }
Il se peut que ce que j'appelle le champ 'centisecondes' soit en fait le champ 'frames' Oui. C'est le champ 'images'. Il boucle modulo 24 (cinéma), 25 (télé
50Hz), 30 (télé 60Hz). C'est même pour le dernier en télé couleur du "30 drop frame", en moyenne du 29,97. Il existe une normalisation (SMTPE, EBU) de ce code sur 80 bits.
-- Pierre Maurette
Il se peut que ce que j'appelle le champ 'centisecondes' soit en fait le
champ 'frames'
Oui. C'est le champ 'images'. Il boucle modulo 24 (cinéma), 25 (télé
50Hz), 30 (télé 60Hz). C'est même pour le dernier en télé couleur du
"30 drop frame", en moyenne du 29,97.
Il existe une normalisation (SMTPE, EBU) de ce code sur 80 bits.
Il se peut que ce que j'appelle le champ 'centisecondes' soit en fait le champ 'frames' Oui. C'est le champ 'images'. Il boucle modulo 24 (cinéma), 25 (télé
50Hz), 30 (télé 60Hz). C'est même pour le dernier en télé couleur du "30 drop frame", en moyenne du 29,97. Il existe une normalisation (SMTPE, EBU) de ce code sur 80 bits.
-- Pierre Maurette
barrack
oui, c'est un entier, pas un flottant,
et le nombre de frames qui reste est calculé par ailleurs avec le framerate
oui, c'est un entier, pas un flottant,
et le nombre de frames qui reste est calculé par ailleurs avec le
framerate
et le nombre de frames qui reste est calculé par ailleurs avec le framerate
Antoine Leca
En news:, barrack va escriure:
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code qui transforme tcinsecs en 02H34M21S05f (ou le contraire)...
Antoine
En news:1144470382.269666.255250@t31g2000cwb.googlegroups.com,
barrack va escriure:
mais pour des valeurs comme 02H34M21S05f
j'ai comme resultat :
0x022E2105
au lieu de
0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors
utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe
millénaire), donc convertir une valeur entre 0 et 59 en deux quantités
(dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre
hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code
a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code
qui transforme tcinsecs en 02H34M21S05f (ou le contraire)...
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code qui transforme tcinsecs en 02H34M21S05f (ou le contraire)...
Antoine
Ludovic Bostral
-- "Antoine Leca" a écrit dans le message de news: e1d87q$ipp$
En news:, barrack va escriure:
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
C'est exactement ce que je veux faire,
Je vais voir ce qu'est le BCD, Mais si tu peux m'en dire plus ca m'interesse...
Ludovic
--
"Antoine Leca" <root@localhost.invalid> a écrit dans le message de news:
e1d87q$ipp$1@shakotay.alphanet.ch...
En news:1144470382.269666.255250@t31g2000cwb.googlegroups.com,
barrack va escriure:
mais pour des valeurs comme 02H34M21S05f
j'ai comme resultat :
0x022E2105
au lieu de
0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors
utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe
millénaire), donc convertir une valeur entre 0 et 59 en deux quantités
(dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre
hexadécimal avec << N, N multiple de 4.
C'est exactement ce que je veux faire,
Je vais voir ce qu'est le BCD,
Mais si tu peux m'en dire plus ca m'interesse...
-- "Antoine Leca" a écrit dans le message de news: e1d87q$ipp$
En news:, barrack va escriure:
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
C'est exactement ce que je veux faire,
Je vais voir ce qu'est le BCD, Mais si tu peux m'en dire plus ca m'interesse...
Ludovic
Pierre Maurette
En news:, barrack va escriure:
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code qui transforme tcinsecs en 02H34M21S05f (ou le contraire)... Je ne sais plus qui est l'OP dans ce fil ;-) je réponds donc ici.
Je trouve que ni le départ ni même la fin ne sont très clairs. D'où viennent les données et sous quelle forme ? De mes souvenirs, ça peut être d'un port RS422, d'une EDL (edit list), etc. Y a-t-il un souci possible de boutisme ? Pour la conversion, on peut peut-être prendre:
Mais je ne suis pas certain qu'il soit efficace d'utiliser du BCD "compressé", à deux digits par octet. Peut-être extraire les valeurs et fabriquer une chaîne decaractères ?
-- Pierre Maurette
En news:1144470382.269666.255250@t31g2000cwb.googlegroups.com,
barrack va escriure:
mais pour des valeurs comme 02H34M21S05f
j'ai comme resultat :
0x022E2105
au lieu de
0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors
utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe
millénaire), donc convertir une valeur entre 0 et 59 en deux quantités
(dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre
hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code
a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code
qui transforme tcinsecs en 02H34M21S05f (ou le contraire)...
Je ne sais plus qui est l'OP dans ce fil ;-) je réponds donc ici.
Je trouve que ni le départ ni même la fin ne sont très clairs. D'où
viennent les données et sous quelle forme ? De mes souvenirs, ça peut
être d'un port RS422, d'une EDL (edit list), etc.
Y a-t-il un souci possible de boutisme ?
Pour la conversion, on peut peut-être prendre:
Mais je ne suis pas certain qu'il soit efficace d'utiliser du BCD
"compressé", à deux digits par octet. Peut-être extraire les valeurs et
fabriquer une chaîne decaractères ?
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code qui transforme tcinsecs en 02H34M21S05f (ou le contraire)... Je ne sais plus qui est l'OP dans ce fil ;-) je réponds donc ici.
Je trouve que ni le départ ni même la fin ne sont très clairs. D'où viennent les données et sous quelle forme ? De mes souvenirs, ça peut être d'un port RS422, d'une EDL (edit list), etc. Y a-t-il un souci possible de boutisme ? Pour la conversion, on peut peut-être prendre:
Mais je ne suis pas certain qu'il soit efficace d'utiliser du BCD "compressé", à deux digits par octet. Peut-être extraire les valeurs et fabriquer une chaîne decaractères ?
-- Pierre Maurette
Ludovic Bostral
-- --------- Ludovic Bostral "Pierre Maurette" a écrit dans le message de news:
En news:, barrack va escriure:
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code qui transforme tcinsecs en 02H34M21S05f (ou le contraire)... Je ne sais plus qui est l'OP dans ce fil ;-) je réponds donc ici.
C'est moi :)
Je trouve que ni le départ ni même la fin ne sont très clairs. D'où viennent les données et sous quelle forme ? De mes souvenirs, ça peut être d'un port RS422, d'une EDL (edit list), etc. Y a-t-il un souci possible de boutisme ? Pour la conversion, on peut peut-être prendre:
En fait ce que je veux c'est bien ce que décrit Antoine Lecca dans son premier point, Mais il faut que je décale le resultat de ByteToBCD : timecode = ByteToBCD(tcinsecs/3600) << 24 | ByteToBCD(tcinsecs/60%60) <<16 | ByteToBCD(tcinsecs%60)<<8| ByteToBCD(nbframes) ;
Et là j'ai semble-t-il ce que je veux.
L'objectif est d'ajouter des informations de type SMPTE dans une video.
Merci à vous, Ludovic
--
---------
Ludovic Bostral
"Pierre Maurette" <maurettepierre@wanadoo.fr> a écrit dans le message de
news: mn.53e07d64bea59903.31483@laposte.net...
En news:1144470382.269666.255250@t31g2000cwb.googlegroups.com,
barrack va escriure:
mais pour des valeurs comme 02H34M21S05f
j'ai comme resultat :
0x022E2105
au lieu de
0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors
utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe
millénaire), donc convertir une valeur entre 0 et 59 en deux quantités
(dizaines et unités), et encoder chacun de ces deux chiffres comme
chiffre
hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton
code
a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le
code
qui transforme tcinsecs en 02H34M21S05f (ou le contraire)...
Je ne sais plus qui est l'OP dans ce fil ;-) je réponds donc ici.
C'est moi :)
Je trouve que ni le départ ni même la fin ne sont très clairs. D'où
viennent les données et sous quelle forme ? De mes souvenirs, ça peut être
d'un port RS422, d'une EDL (edit list), etc.
Y a-t-il un souci possible de boutisme ?
Pour la conversion, on peut peut-être prendre:
En fait ce que je veux c'est bien ce que décrit Antoine Lecca dans son
premier point,
Mais il faut que je décale le resultat de ByteToBCD :
timecode = ByteToBCD(tcinsecs/3600) << 24 |
ByteToBCD(tcinsecs/60%60) <<16 |
ByteToBCD(tcinsecs%60)<<8|
ByteToBCD(nbframes)
;
Et là j'ai semble-t-il ce que je veux.
L'objectif est d'ajouter des informations de type SMPTE dans une video.
-- --------- Ludovic Bostral "Pierre Maurette" a écrit dans le message de news:
En news:, barrack va escriure:
mais pour des valeurs comme 02H34M21S05f j'ai comme resultat : 0x022E2105 au lieu de 0x02342105
Quel est le problème ?
Tu veux voir les chiffres base 10 ? Genre 0x02342105 ? il faut alors utiliser le "binary coded decimal" (BCD, déja utilisé à Babylone au IIIe millénaire), donc convertir une valeur entre 0 et 59 en deux quantités (dizaines et unités), et encoder chacun de ces deux chiffres comme chiffre hexadécimal avec << N, N multiple de 4.
Tu veux avoir les quantités dans chaque octet ? Genre 0x02221505 ? Ton code a l'air correct pour cela...
Si j'étais toi, avec les valeurs que tu nous as passées, je reverrai le code qui transforme tcinsecs en 02H34M21S05f (ou le contraire)... Je ne sais plus qui est l'OP dans ce fil ;-) je réponds donc ici.
C'est moi :)
Je trouve que ni le départ ni même la fin ne sont très clairs. D'où viennent les données et sous quelle forme ? De mes souvenirs, ça peut être d'un port RS422, d'une EDL (edit list), etc. Y a-t-il un souci possible de boutisme ? Pour la conversion, on peut peut-être prendre:
En fait ce que je veux c'est bien ce que décrit Antoine Lecca dans son premier point, Mais il faut que je décale le resultat de ByteToBCD : timecode = ByteToBCD(tcinsecs/3600) << 24 | ByteToBCD(tcinsecs/60%60) <<16 | ByteToBCD(tcinsecs%60)<<8| ByteToBCD(nbframes) ;
Et là j'ai semble-t-il ce que je veux.
L'objectif est d'ajouter des informations de type SMPTE dans une video.
Merci à vous, Ludovic
Pierre Maurette
[...]
Le code du message original (que je ne comprends pas entièrement) deviendrait:
En fait ce que je veux c'est bien ce que décrit Antoine Lecca dans son premier point, Mais il faut que je décale le resultat de ByteToBCD : timecode = ByteToBCD(tcinsecs/3600) << 24 | ByteToBCD(tcinsecs/60%60) <<16 | ByteToBCD(tcinsecs%60)<<8| ByteToBCD(nbframes) ; Ooooops ! Bien sûr ....
-- Pierre Maurette
[...]
Le code du message original (que je ne comprends pas entièrement)
deviendrait:
En fait ce que je veux c'est bien ce que décrit Antoine Lecca dans son
premier point,
Mais il faut que je décale le resultat de ByteToBCD :
timecode = ByteToBCD(tcinsecs/3600) << 24 |
ByteToBCD(tcinsecs/60%60) <<16 |
ByteToBCD(tcinsecs%60)<<8|
ByteToBCD(nbframes)
;
Ooooops ! Bien sûr ....
En fait ce que je veux c'est bien ce que décrit Antoine Lecca dans son premier point, Mais il faut que je décale le resultat de ByteToBCD : timecode = ByteToBCD(tcinsecs/3600) << 24 | ByteToBCD(tcinsecs/60%60) <<16 | ByteToBCD(tcinsecs%60)<<8| ByteToBCD(nbframes) ; Ooooops ! Bien sûr ....