summaryrefslogtreecommitdiff
path: root/libavdevice/xv.c
diff options
context:
space:
mode:
authorMarton Balint <cus@passwd.hu>2020-04-06 00:01:27 +0200
committerMarton Balint <cus@passwd.hu>2020-04-16 23:52:12 +0200
commite4ce40d25b6368cd4492f5c579e155dfe9639311 (patch)
treece52aa7e68d1f63d6419ba531e3419db5308a073 /libavdevice/xv.c
parentfccd6c2be0aa4feb3fe8050769705459a1990e83 (diff)
avdevice/xv: add support of wrapped avframe codec
Also change the default to that. Signed-off-by: Marton Balint <cus@passwd.hu>
Diffstat (limited to 'libavdevice/xv.c')
-rw-r--r--libavdevice/xv.c22
1 files changed, 14 insertions, 8 deletions
diff --git a/libavdevice/xv.c b/libavdevice/xv.c
index c3ed2e48bd..50dc4e0d04 100644
--- a/libavdevice/xv.c
+++ b/libavdevice/xv.c
@@ -113,8 +113,8 @@ static int xv_write_header(AVFormatContext *s)
if ( s->nb_streams > 1
|| par->codec_type != AVMEDIA_TYPE_VIDEO
- || par->codec_id != AV_CODEC_ID_RAWVIDEO) {
- av_log(s, AV_LOG_ERROR, "Only supports one rawvideo stream\n");
+ || (par->codec_id != AV_CODEC_ID_WRAPPED_AVFRAME && par->codec_id != AV_CODEC_ID_RAWVIDEO)) {
+ av_log(s, AV_LOG_ERROR, "Only a single raw or wrapped avframe video stream is supported.\n");
return AVERROR(EINVAL);
}
@@ -322,12 +322,18 @@ static int write_picture(AVFormatContext *s, uint8_t *input_data[4],
static int xv_write_packet(AVFormatContext *s, AVPacket *pkt)
{
AVCodecParameters *par = s->streams[0]->codecpar;
- uint8_t *data[4];
- int linesize[4];
- av_image_fill_arrays(data, linesize, pkt->data, par->format,
- par->width, par->height, 1);
- return write_picture(s, data, linesize);
+ if (par->codec_id == AV_CODEC_ID_WRAPPED_AVFRAME) {
+ AVFrame *frame = (AVFrame *)pkt->data;
+ return write_picture(s, frame->data, frame->linesize);
+ } else {
+ uint8_t *data[4];
+ int linesize[4];
+
+ av_image_fill_arrays(data, linesize, pkt->data, par->format,
+ par->width, par->height, 1);
+ return write_picture(s, data, linesize);
+ }
}
static int xv_write_frame(AVFormatContext *s, int stream_index, AVFrame **frame,
@@ -375,7 +381,7 @@ AVOutputFormat ff_xv_muxer = {
.long_name = NULL_IF_CONFIG_SMALL("XV (XVideo) output device"),
.priv_data_size = sizeof(XVContext),
.audio_codec = AV_CODEC_ID_NONE,
- .video_codec = AV_CODEC_ID_RAWVIDEO,
+ .video_codec = AV_CODEC_ID_WRAPPED_AVFRAME,
.write_header = xv_write_header,
.write_packet = xv_write_packet,
.write_uncoded_frame = xv_write_frame,