git.videolan.org
/
ffmpeg.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
7797160
)
dv: use new public timecode API.
author
Clément Bœsch
<clement.boesch@smartjog.com>
Tue, 31 Jan 2012 10:44:27 +0000
(11:44 +0100)
committer
Clément Bœsch
<ubitux@gmail.com>
Thu, 2 Feb 2012 13:31:17 +0000
(14:31 +0100)
libavformat/dv.c
patch
|
blob
|
history
diff --git
a/libavformat/dv.c
b/libavformat/dv.c
index
5245023
..
7e034fb
100644
(file)
--- a/
libavformat/dv.c
+++ b/
libavformat/dv.c
@@
-34,6
+34,7
@@
#include "libavcodec/dvdata.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
#include "libavcodec/dvdata.h"
#include "libavutil/intreadwrite.h"
#include "libavutil/mathematics.h"
+#include "libavutil/timecode.h"
#include "dv.h"
#include "libavutil/avassert.h"
#include "dv.h"
#include "libavutil/avassert.h"
@@
-275,42
+276,19
@@
static int dv_extract_video_info(DVDemuxContext *c, uint8_t* frame)
return size;
}
return size;
}
-static int
bcd2int(uint8_t bcd
)
+static int
dv_extract_timecode(DVDemuxContext* c, uint8_t* frame, char *tc
)
{
{
- int low = bcd & 0xf;
- int high = bcd >> 4;
- if (low > 9 || high > 9)
- return -1;
- return low + 10*high;
-}
-
-static int dv_extract_timecode(DVDemuxContext* c, uint8_t* frame, char tc[32])
-{
- int hh, mm, ss, ff, drop_frame;
const uint8_t *tc_pack;
const uint8_t *tc_pack;
- tc_pack = dv_extract_pack(frame, dv_timecode);
- if (!tc_pack)
- return 0;
-
- ff = bcd2int(tc_pack[1] & 0x3f);
- ss = bcd2int(tc_pack[2] & 0x7f);
- mm = bcd2int(tc_pack[3] & 0x7f);
- hh = bcd2int(tc_pack[4] & 0x3f);
- drop_frame = tc_pack[1] >> 6 & 0x1;
-
- if (ff < 0 || ss < 0 || mm < 0 || hh < 0)
- return -1;
-
// For PAL systems, drop frame bit is replaced by an arbitrary
// bit so its value should not be considered. Drop frame timecode
// is only relevant for NTSC systems.
// For PAL systems, drop frame bit is replaced by an arbitrary
// bit so its value should not be considered. Drop frame timecode
// is only relevant for NTSC systems.
- if(c->sys->ltc_divisor == 25 || c->sys->ltc_divisor == 50) {
- drop_frame = 0;
- }
+ int prevent_df = c->sys->ltc_divisor == 25 || c->sys->ltc_divisor == 50;
- snprintf(tc, 32, "%02d:%02d:%02d%c%02d",
- hh, mm, ss, drop_frame ? ';' : ':', ff);
+ tc_pack = dv_extract_pack(frame, dv_timecode);
+ if (!tc_pack)
+ return 0;
+ av_timecode_make_smpte_tc_string(tc, AV_RB32(tc_pack + 1), prevent_df);
return 1;
}
return 1;
}
@@
-454,7
+432,7
@@
typedef struct RawDVContext {
static int dv_read_timecode(AVFormatContext *s) {
int ret;
static int dv_read_timecode(AVFormatContext *s) {
int ret;
- char timecode[
32
];
+ char timecode[
AV_TIMECODE_STR_SIZE
];
int64_t pos = avio_tell(s->pb);
// Read 3 DIF blocks: Header block and 2 Subcode blocks.
int64_t pos = avio_tell(s->pb);
// Read 3 DIF blocks: Header block and 2 Subcode blocks.