|
@@ -1247,9 +1247,18 @@ static int vpfe_stop_streaming(struct vb2_queue *vq)
|
|
|
struct vpfe_fh *fh = vb2_get_drv_priv(vq);
|
|
|
struct vpfe_video_device *video = fh->video;
|
|
|
|
|
|
- if (!vb2_is_streaming(vq))
|
|
|
- return 0;
|
|
|
/* release all active buffers */
|
|
|
+ if (video->cur_frm == video->next_frm) {
|
|
|
+ vb2_buffer_done(&video->cur_frm->vb, VB2_BUF_STATE_ERROR);
|
|
|
+ } else {
|
|
|
+ if (video->cur_frm != NULL)
|
|
|
+ vb2_buffer_done(&video->cur_frm->vb,
|
|
|
+ VB2_BUF_STATE_ERROR);
|
|
|
+ if (video->next_frm != NULL)
|
|
|
+ vb2_buffer_done(&video->next_frm->vb,
|
|
|
+ VB2_BUF_STATE_ERROR);
|
|
|
+ }
|
|
|
+
|
|
|
while (!list_empty(&video->dma_queue)) {
|
|
|
video->next_frm = list_entry(video->dma_queue.next,
|
|
|
struct vpfe_cap_buffer, list);
|