hornetseye-ffmpeg 0.10.0 → 0.11.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -1
- data/ext/avinput.cc +31 -18
- data/ext/avinput.hh +2 -0
- data/lib/hornetseye-ffmpeg/avinput.rb +3 -1
- metadata +4 -25
data/Rakefile
CHANGED
data/ext/avinput.cc
CHANGED
@@ -52,20 +52,27 @@ AVInput::AVInput( const string &mrl, bool audio ) throw (Error):
|
|
52
52
|
cerr << "Video stream index is " << m_videoStream << endl;
|
53
53
|
cerr << "Audio stream index is " << m_audioStream << endl;
|
54
54
|
#endif
|
55
|
-
|
56
|
-
|
57
|
-
m_videoDec
|
55
|
+
if ( m_videoStream >= 0 )
|
56
|
+
m_videoDec = m_ic->streams[ m_videoStream ]->codec;
|
57
|
+
if ( m_videoDec != NULL ) {
|
58
|
+
m_videoCodec = avcodec_find_decoder( m_videoDec->codec_id );
|
59
|
+
ERRORMACRO( m_videoCodec != NULL, Error, , "Could not find video decoder for "
|
60
|
+
"file \"" << mrl << "\"" );
|
61
|
+
err = avcodec_open( m_videoDec, m_videoCodec );
|
62
|
+
if ( err < 0 ) {
|
63
|
+
m_videoCodec = NULL;
|
64
|
+
ERRORMACRO( false, Error, , "Error opening video codec for file \""
|
65
|
+
<< mrl << "\": " << strerror( errno ) );
|
66
|
+
};
|
67
|
+
m_swsContext = sws_getContext( m_videoDec->width, m_videoDec->height,
|
68
|
+
m_videoDec->pix_fmt,
|
69
|
+
m_videoDec->width, m_videoDec->height,
|
70
|
+
PIX_FMT_YUV420P, SWS_FAST_BILINEAR, 0, 0, 0 );
|
71
|
+
m_avFrame = avcodec_alloc_frame();
|
72
|
+
ERRORMACRO( m_avFrame, Error, , "Error allocating frame" );
|
73
|
+
};
|
58
74
|
if ( m_audioStream >= 0 )
|
59
75
|
m_audioDec = m_ic->streams[ m_audioStream ]->codec;
|
60
|
-
m_videoCodec = avcodec_find_decoder( m_videoDec->codec_id );
|
61
|
-
ERRORMACRO( m_videoCodec != NULL, Error, , "Could not find video decoder for "
|
62
|
-
"file \"" << mrl << "\"" );
|
63
|
-
err = avcodec_open( m_videoDec, m_videoCodec );
|
64
|
-
if ( err < 0 ) {
|
65
|
-
m_videoCodec = NULL;
|
66
|
-
ERRORMACRO( false, Error, , "Error opening video codec for file \""
|
67
|
-
<< mrl << "\": " << strerror( errno ) );
|
68
|
-
};
|
69
76
|
if ( m_audioDec != NULL ) {
|
70
77
|
m_audioCodec = avcodec_find_decoder( m_audioDec->codec_id );
|
71
78
|
ERRORMACRO( m_audioCodec != NULL, Error, , "Could not find audio decoder for "
|
@@ -77,12 +84,6 @@ AVInput::AVInput( const string &mrl, bool audio ) throw (Error):
|
|
77
84
|
<< mrl << "\": " << strerror( errno ) );
|
78
85
|
};
|
79
86
|
};
|
80
|
-
m_swsContext = sws_getContext( m_videoDec->width, m_videoDec->height,
|
81
|
-
m_videoDec->pix_fmt,
|
82
|
-
m_videoDec->width, m_videoDec->height,
|
83
|
-
PIX_FMT_YUV420P, SWS_FAST_BILINEAR, 0, 0, 0 );
|
84
|
-
m_avFrame = avcodec_alloc_frame();
|
85
|
-
ERRORMACRO( m_avFrame, Error, , "Error allocating frame" );
|
86
87
|
} catch ( Error &e ) {
|
87
88
|
close();
|
88
89
|
throw e;
|
@@ -228,6 +229,11 @@ int AVInput::height(void) const throw (Error)
|
|
228
229
|
return m_videoDec->height;
|
229
230
|
}
|
230
231
|
|
232
|
+
bool AVInput::hasVideo(void) const
|
233
|
+
{
|
234
|
+
return m_videoStream != -1;
|
235
|
+
}
|
236
|
+
|
231
237
|
bool AVInput::hasAudio(void) const
|
232
238
|
{
|
233
239
|
return m_audioStream != -1;
|
@@ -346,6 +352,7 @@ VALUE AVInput::registerRubyClass( VALUE rbModule )
|
|
346
352
|
rb_define_method( cRubyClass, "width", RUBY_METHOD_FUNC( wrapWidth ), 0 );
|
347
353
|
rb_define_method( cRubyClass, "height", RUBY_METHOD_FUNC( wrapHeight ), 0 );
|
348
354
|
rb_define_method( cRubyClass, "has_audio?", RUBY_METHOD_FUNC( wrapHasAudio ), 0 );
|
355
|
+
rb_define_method( cRubyClass, "has_video?", RUBY_METHOD_FUNC( wrapHasVideo ), 0 );
|
349
356
|
rb_define_method( cRubyClass, "seek", RUBY_METHOD_FUNC( wrapSeek ), 1 );
|
350
357
|
rb_define_method( cRubyClass, "video_pts", RUBY_METHOD_FUNC( wrapVideoPTS ), 0 );
|
351
358
|
rb_define_method( cRubyClass, "audio_pts", RUBY_METHOD_FUNC( wrapAudioPTS ), 0 );
|
@@ -546,6 +553,12 @@ VALUE AVInput::wrapHeight( VALUE rbSelf )
|
|
546
553
|
return retVal;
|
547
554
|
}
|
548
555
|
|
556
|
+
VALUE AVInput::wrapHasVideo( VALUE rbSelf )
|
557
|
+
{
|
558
|
+
AVInputPtr *self; Data_Get_Struct( rbSelf, AVInputPtr, self );
|
559
|
+
return (*self)->hasVideo() ? Qtrue : Qfalse;
|
560
|
+
}
|
561
|
+
|
549
562
|
VALUE AVInput::wrapHasAudio( VALUE rbSelf )
|
550
563
|
{
|
551
564
|
AVInputPtr *self; Data_Get_Struct( rbSelf, AVInputPtr, self );
|
data/ext/avinput.hh
CHANGED
@@ -48,6 +48,7 @@ public:
|
|
48
48
|
bool status(void) const;
|
49
49
|
int width(void) const throw (Error);
|
50
50
|
int height(void) const throw (Error);
|
51
|
+
bool hasVideo(void) const;
|
51
52
|
bool hasAudio(void) const;
|
52
53
|
AVRational videoTimeBase(void) throw (Error);
|
53
54
|
AVRational audioTimeBase(void) throw (Error);
|
@@ -80,6 +81,7 @@ public:
|
|
80
81
|
static VALUE wrapAudioStartTime( VALUE rbSelf );
|
81
82
|
static VALUE wrapWidth( VALUE rbSelf );
|
82
83
|
static VALUE wrapHeight( VALUE rbSelf );
|
84
|
+
static VALUE wrapHasVideo( VALUE rbSelf );
|
83
85
|
static VALUE wrapHasAudio( VALUE rbSelf );
|
84
86
|
static VALUE wrapSeek( VALUE rbSelf, VALUE rbPos );
|
85
87
|
static VALUE wrapVideoPTS( VALUE rbSelf );
|
metadata
CHANGED
@@ -1,12 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hornetseye-ffmpeg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
|
6
|
-
- 0
|
7
|
-
- 10
|
8
|
-
- 0
|
9
|
-
version: 0.10.0
|
4
|
+
prerelease:
|
5
|
+
version: 0.11.0
|
10
6
|
platform: ruby
|
11
7
|
authors:
|
12
8
|
- Jan Wedekind
|
@@ -14,8 +10,7 @@ autorequire:
|
|
14
10
|
bindir: bin
|
15
11
|
cert_chain: []
|
16
12
|
|
17
|
-
date: 2011-
|
18
|
-
default_executable:
|
13
|
+
date: 2011-08-02 00:00:00 Z
|
19
14
|
dependencies:
|
20
15
|
- !ruby/object:Gem::Dependency
|
21
16
|
name: malloc
|
@@ -25,9 +20,6 @@ dependencies:
|
|
25
20
|
requirements:
|
26
21
|
- - ~>
|
27
22
|
- !ruby/object:Gem::Version
|
28
|
-
segments:
|
29
|
-
- 1
|
30
|
-
- 2
|
31
23
|
version: "1.2"
|
32
24
|
type: :runtime
|
33
25
|
version_requirements: *id001
|
@@ -39,9 +31,6 @@ dependencies:
|
|
39
31
|
requirements:
|
40
32
|
- - ~>
|
41
33
|
- !ruby/object:Gem::Version
|
42
|
-
segments:
|
43
|
-
- 0
|
44
|
-
- 23
|
45
34
|
version: "0.23"
|
46
35
|
type: :runtime
|
47
36
|
version_requirements: *id002
|
@@ -53,9 +42,6 @@ dependencies:
|
|
53
42
|
requirements:
|
54
43
|
- - ~>
|
55
44
|
- !ruby/object:Gem::Version
|
56
|
-
segments:
|
57
|
-
- 0
|
58
|
-
- 11
|
59
45
|
version: "0.11"
|
60
46
|
type: :runtime
|
61
47
|
version_requirements: *id003
|
@@ -67,8 +53,6 @@ dependencies:
|
|
67
53
|
requirements:
|
68
54
|
- - ">="
|
69
55
|
- !ruby/object:Gem::Version
|
70
|
-
segments:
|
71
|
-
- 0
|
72
56
|
version: "0"
|
73
57
|
type: :development
|
74
58
|
version_requirements: *id004
|
@@ -99,7 +83,6 @@ files:
|
|
99
83
|
- ext/error.hh
|
100
84
|
- ext/rubyinc.hh
|
101
85
|
- ext/avoutput.hh
|
102
|
-
has_rdoc: yard
|
103
86
|
homepage: http://wedesoft.github.com/hornetseye-ffmpeg/
|
104
87
|
licenses: []
|
105
88
|
|
@@ -114,21 +97,17 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
114
97
|
requirements:
|
115
98
|
- - ">="
|
116
99
|
- !ruby/object:Gem::Version
|
117
|
-
segments:
|
118
|
-
- 0
|
119
100
|
version: "0"
|
120
101
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
102
|
none: false
|
122
103
|
requirements:
|
123
104
|
- - ">="
|
124
105
|
- !ruby/object:Gem::Version
|
125
|
-
segments:
|
126
|
-
- 0
|
127
106
|
version: "0"
|
128
107
|
requirements: []
|
129
108
|
|
130
109
|
rubyforge_project: hornetseye
|
131
|
-
rubygems_version: 1.
|
110
|
+
rubygems_version: 1.8.5
|
132
111
|
signing_key:
|
133
112
|
specification_version: 3
|
134
113
|
summary: Read/write video frames using libffmpeg
|